W3C

CSS 命名空间模块 3 级

W3C 推荐规范 2011 年 9 月 29 日发布,编辑于 2014 年 3 月 20 日

此版本:
http://www.w3.org/TR/2014/REC-css-namespaces-3-20140320/
最新版本:
http://www.w3.org/TR/css-namespaces-3/
编辑草案:
http://dev.w3.org/csswg/css-namespaces/
以前的版本:
http://www.w3.org/TR/2011/REC-css3-namespace-20110929/
反馈:
www-style@w3.org 主题行中使用 “[css-namespaces] … 消息主题 …”(存档)
测试套件:
http://test.csswg.org/suites/css3-namespace/20090210/
编辑:
Elika J. Etemad (受邀专家)
以前的编辑:
Anne van Kesteren (Opera 软件 ASA)
Peter Linss (网景通讯)
Chris Lilley (W3C)

请检查勘误表 以获取自发布以来报告的任何错误或问题。 另请参见翻译


摘要

本 CSS 命名空间模块定义了在 CSS 中使用命名空间的语法。它定义了 @namespace 规则用于声明默认命名空间并将命名空间绑定到命名空间前缀,还定义了其他规范可以采用的语法,用于在命名空间限定名称中使用这些前缀。 CSS 是一种用于描述结构化文档(例如 HTML 和 XML)在屏幕、纸张、语音等上呈现的语言。

本文档的状态

本节描述了本文档在发布时的状态。其他文档可能会取代本文档。可以在W3C 技术报告索引 http://www.w3.org/TR/上找到当前 W3C 出版物列表和本技术报告的最新版本。

本文档由CSS 工作组作为推荐标准发布。

本文档已经过 W3C 成员、软件开发人员以及其他 W3C 小组和相关方的审查,并得到了主管的认可,作为 W3C 推荐标准发布。它是一个稳定的文档,可以用作参考材料或从其他文档引用。W3C 在制定推荐标准中的作用是引起人们对规范的关注,并促进其广泛部署。这增强了 Web 的功能和互操作性。

W3C 鼓励大家实现此规范。可以将意见发送到(存档)公共邮件列表 www-style@w3.org (请参见说明)。发送电子邮件时,请在主题中包含“css-namespaces-3”,最好如下所示: “[css-namespaces-3] …评论摘要…

本文档由遵循2004 年 2 月 5 日 W3C 专利政策的一个小组编制。W3C 保留了与本小组的成果相关的任何专利披露的公共列表;该页面还包括专利披露的说明。

有关自上一个版本以来的更改的详细信息,请参阅更改部分。

目录

1 介绍

本节为非规范性。

本 CSS 命名空间模块定义了在 CSS 中使用命名空间的语法。它定义了 @namespace 规则用于声明默认命名空间 并将命名空间绑定到命名空间前缀。它还定义了一种使用这些前缀表示命名空间限定名称的语法。 它不定义此类名称在何处有效或其含义为何:这些取决于它们的上下文,由引用 CSS 命名空间模块中定义的语法的宿主语言(如选择器([SELECT]))定义。

请注意,不支持此模块的 CSS 客户端(如果它正确遵循了CSS 的向前兼容解析规则) 将忽略所有 @namespace 规则, 以及使用命名空间限定名称的所有样式规则。CSS 中限定命名空间前缀的语法经过精心设计,使这些 CSS 客户端忽略样式规则, 而不是可能错误地匹配它们。

2 一致性

文档或实现不能单独符合 CSS 命名空间,但可以声称符合 CSS 命名空间,如果它在实现 CSS 或其他规范性引用此规范的宿主语言时满足本规范中的一致性要求。

CSS 命名空间的一致性定义了两类:

样式表
一个CSS 样式表(或完整的其他宿主语言单元,规范性引用 CSS 命名空间)。
解释器
解释样式表语义的某人或某物。(CSS 用户代理属于此类。)

一致性要求通过描述性断言和 RFC 2119 术语的组合表达。规范性部分中的关键词“必须”、“不得”、“必需”、“应”、“不应”、“推荐”、“可以”和“可选”应按照 RFC 2119 的规定进行解释。然而,为了便于阅读,这些词并未在本规范中以全大写字母出现。本文规范的所有文字均为规范性内容,除非明确标记为非规范性、示例和注释的部分。[RFC2119]

本规范中的示例以“例如”一词引入,或与规范性文本分开,用class="example"标记,如下所示:

这是一个信息性示例。

信息性注释以“注意”一词开头,并与规范性文本分开,用class="note"标记,如下所示:

注意,这是一个信息性注释。

2.1 术语

除了本规范引入的术语外,CSS 命名空间还使用 XML 1.0 中命名空间中定义的术语。[XML-NAMES]然而,这里定义的语法不仅限于表示 XML 元素和属性名称,还可以表示宿主语言定义的其他类型的命名空间。

在 CSS 命名空间中,由空字符串组成的命名空间名称表示空命名空间或缺少命名空间。

例如,给定以下命名空间声明:
  @namespace empty "";
    @namespace "";
  

选择器类型选择器 elem|elem, 和 empty|elem 是等效的。

3 声明命名空间:@namespace 规则

@namespace at-rule 声明命名空间前缀并将其与给定的命名空间名称(字符串)关联。 然后可以在命名空间限定名称中使用此命名空间前缀,如下文定义的 CSS 限定名称

  @namespace "http://www.w3.org/1999/xhtml";
    @namespace svg "http://www.w3.org/2000/svg";
  

第一个规则声明了一个默认命名空间 http://www.w3.org/1999/xhtml 适用于没有显式命名空间组件的名称。

第二个规则声明了一个命名空间前缀svg, 用于在使用svg命名空间前缀时应用http://www.w3.org/2000/svg命名空间。

在 CSS 命名空间中,与 XML 1.0 中的命名空间一样,前缀只是一个语法结构; 实际有意义的是扩展名称(本地名称和命名空间名称的元组)。 因此,在 CSS 样式表中使用的实际前缀,以及它们是否是默认的,独立于标记中使用的命名空间前缀,以及它们是否是默认的。

例如,给定以下 XML 文档:
  <qml:elem xmlns:qml="http://example.com/q-markup"></qml:elem>
  

以及以下 @namespace 声明 在 CSS 文件的开头:

  @namespace Q "http://example.com/q-markup";
    @namespace lq "http://example.com/q-markup";
  

选择器 Q|elemlq|elem 在该 CSS 文件中 都会匹配元素<qml:elem>

(选择器 qml|elem 是无效的, 因为 CSS 命名空间仅识别在 CSS 中声明的前缀, 而不是文档语言声明的那些。)

3.1 语法

@namespace 规则的语法如下 (使用CSS 2.1 语法附录中的符号[CSS21]):

  namespace
      : NAMESPACE_SYM S* [namespace_prefix S*]? [STRING|URI] S* ';' S*
      ;
    namespace_prefix
      : IDENT
      ;
  

使用新标记:

@{N}{A}{M}{E}{S}{P}{A}{C}{E} {return NAMESPACE_SYM;}

任何 @namespace 规则必须遵循所有 @charset 和 @import 规则 并在样式表中的其他未忽略的 at-rule 和样式规则之前。 对于 CSS 语法,这在[ import [S|CDO|CDC]* ]*之后立即添加[ namespace [S|CDO|CDC]* ]*stylesheet 语法中。

语法无效的 @namespace 规则(无论是格式错误还是位置错误) 必须忽略。 包含无效 @namespace 规则的 CSS 样式表 不是有效样式表

URI 语法解析的 URI 字符串必须视为文字字符串: 与 STRING 语法一样, 不应用 URI 特定的规范化。

所有字符串,包括空字符串和表示无效 URI 的字符串,都是在 @namespace 声明中有效的命名空间名称。

3.2 范围

命名空间前缀仅在其所在的样式表中声明 @namespace 规则中声明。它不在任何导入或被该样式表导入的样式表中声明,也不在任何其他应用于文档的样式表中声明。

3.3 声明前缀

一旦声明,一个 命名空间前缀 代表它声明的命名空间 并可以用来指示命名空间限定名称的命名空间。 命名空间前缀, 如同 CSS 计数器名称一样, 是区分大小写的。

如果在命名空间声明中省略了命名空间前缀, 那么所声明的命名空间就是默认命名空间。 默认命名空间 可以应用于没有显式命名空间前缀的名称: 使用命名空间前缀的模块必须定义在何种上下文中适用默认命名空间。 例如,按照[XML-NAMES], 在选择器中[SELECT] 默认命名空间适用于类型选择器,但不适用于属性选择器。 默认命名空间没有默认值: 将未限定名称分配给默认命名空间的模块 必须定义在未声明默认命名空间时如何解释这些未限定名称。

注意:请注意,将默认命名空间与类型选择器结合使用 可能会导致支持默认命名空间的 UA 和不支持默认命名空间的 UA 以不同方式解释选择器。

如果命名空间前缀或默认命名空间被多次声明, 只有最后一个声明应被使用。 多次声明命名空间前缀或默认命名空间是不符合规范的。

4 CSS 限定名称

一个 CSS 限定名称 是一个显式位于命名空间中的名称。 为了在 CSS 语法中形成限定名称, 一个已在作用域内声明的命名空间前缀被附加到一个本地名称(例如元素或属性名称), 由“竖线”(|, U+007C)分隔。 前缀代表已为其声明的命名空间, 指示本地名称的命名空间。 限定名称的前缀可以省略,以指示该名称不属于任何命名空间, 即扩展名称的命名空间名称部分没有值。 某些上下文(由宿主语言定义) 可能允许使用星号(*, U+002A) 作为通配符前缀,以指示任何命名空间中的名称, 包括没有命名空间的名称。

给定命名空间声明:
  @namespace toto "http://toto.example.org";
    @namespace "http://example.com/foo";
  

在默认命名空间适用的上下文中

toto|A
代表命名空间http://toto.example.org中的名称A
|B
代表不属于任何命名空间的名称B
*|C
代表任何命名空间中的名称C, 包括没有命名空间的名称。
D
代表命名空间http://example.com/foo中的名称D

CSS 限定名称在(例如)选择器和属性值中使用,如其他模块所述。 这些模块必须定义未正确声明的命名空间前缀的处理方式。 此类处理应将未声明的命名空间前缀视为解析错误, 这将导致选择器或声明(等)被视为无效, 并在 CSS 中忽略

例如,选择器模块[SELECT]定义了带有未声明命名空间前缀的类型选择器 作为无效选择器, 而 CSS [CSS21]要求 带有无效选择器的样式规则应完全忽略。

更改

2011 年 9 月 29 日推荐标准以来所做的更改:

致谢

本草案大量借鉴了 Chris Lilley 和 Peter Linss 早期的 CSS 命名空间支持草案,以及 Håkon Lie 和 Bert Bos 关于 CSS 和 XML 的早期(未发表)草案,以及 Bert Bos 和 Steven Pemberton 关于 XML 命名空间和 CSS 的草案。 许多 CSS 工作组的现任和前任成员为本文档做出了贡献。 www-style@w3.org 上的讨论和其他地方的讨论也为本规范提供了想法。 特别感谢 L. David Baron、 Karl Dubost、 Ian Hickson、 Björn Höhrmann 和 Lachlan Hunt 对他们的意见。

参考文献

规范性引用

[CSS21]
Bert Bos 等人。层叠样式表第 2 级修订版 1(CSS 2.1)规范。2011 年 6 月 7 日。W3C 推荐标准。网址:http://www.w3.org/TR/2011/REC-CSS2-20110607
[RFC2119]
S. Bradner. 在 RFC 中指示需求级别的关键词。网址:http://www.ietf.org/rfc/rfc2119.txt
[XML-NAMES]
Tim Bray 等人。XML 1.0 中的命名空间(第三版)。2009 年 12 月 8 日。W3C 推荐标准。网址:http://www.w3.org/TR/2009/REC-xml-names-20091208/

信息性引用

[SELECT]
Tantek Çelik 等人。选择器第 3 级。2011 年 9 月 29 日。W3C 推荐标准。网址:http://www.w3.org/TR/2011/REC-css3-selectors-20110929/

索引

属性索引

未定义属性。