W3C公司

XML 1.0中的命名空间(第三版)

W3C建议2009年12月8日

此版本:
http://www.w3.org/TR/2009/REC-xml-names-20091208/
最新版本:
http://www.w3.org/TR/xml-names网站/
以前的版本:
http://www.w3.org/TR/2006/REC-xml-names-20060816/ http://www.w3.org/TR/2009/PER-xml-names--20090806/
编辑:
蒂姆·布雷(Tim Bray),文本<tbray@textualy.com>
Dave Hollander,Contivo公司。<dmh@contivo.com>
微软公司Andrew Layman<andrewl@microsoft.com>
Richard Tobin,爱丁堡大学标记技术有限公司<richard@inf.ed.ac.uk>
亨利·S·汤普森,爱丁堡大学和W3C<ht@w3.org>-第三版

请参阅勘误表对于本文件,可以包括规范性修正。

另请参见翻译.

本文件也有以下非标准格式:XML格式HTML突出显示与第二版的差异.


摘要

XML名称空间提供了一种简单的限定方法元素和属性通过关联可扩展标记语言文档中使用的名称其中命名空间由URI引用标识。

本文件的状态

本节描述了该文档当时的状态其出版日期。其他文件可能取代本文件。当前W3C出版物列表和最新版本此技术报告可在W3C技术报告索引http://www.w3.org/TR/。

本文档是XML核心工作组作为的一部分W3C XML活动.本规范的英文版是唯一的规范性版本。但是,有关此文档的翻译,请参见http://www.w3.org/2003/03/Translations/byTechnology?technology=xml-姓名.

已知实现记录在命名空间1.1实施报告(所有已知的Namespaces 1.1实现也支持Namespaces 1.0).测试套件也可通过XML测试套件第页。

第三版包含了截至出版日期的所有已知勘误表。它取代了以前的2006年8月16日版.

这个版本已经过广泛的审查。仅作微小的编辑更改自2009年8月6日《拟议编辑建议书》以来。

请将此文档中的错误报告给xml-names-editor@w3.org;公众的档案可用。本文档的勘误表位于http://www.w3.org/XML/2009/XML-names-errata.

本文档已由W3C成员通过软件进行审查开发人员,以及其他W3C团体和相关方经局长批准为W3C推荐标准。这是一个马厩并可用作参考材料或引自他人文档。W3C在推荐中的作用是引起注意并促进其广泛部署。这个增强了Web的功能和互操作性。

W3C维护了一个公众的任何专利披露清单与以下可交付成果相关群体;该页还包括披露专利的说明。拥有专利实际知识的个人相信包含基本索赔必须按照部分W3C专利政策第6条.

目录

1动机和总结
    1.1关于符号和用法的注记
2XML命名空间
    2.1基本概念
    2.2的使用URI作为命名空间名称
    2.3比较URI(URI)工具书类
声明命名空间
4限定名称
5使用限定名称
6将命名空间应用于元素和属性
    6.1命名空间范围
    6.2命名空间默认设置
    6.3属性的唯一性
7文件的符合性
8处理器的一致性

附录

规范性引用文件
B类其他参考文献(非标准)
C类XML命名空间的内部结构(非标准)
D类自1.0版以来的更改(非标准)
电子致谢(非标准)
F类孤儿制作(非标准)


1动机和总结

我们设想可扩展标记语言(XML)的应用程序,其中单个XML文档可以包含元素和属性(这里称为“标记词汇表”)为多个软件模块定义和使用的。这样做的一个动机是模块化:如果存在这样的标记词汇表这一点很容易理解,而且有有用的软件可用时,最好重用此标记,而不是将其重新输入。

此类文档包含多个标记词汇表,造成识别和碰撞问题。软件模块需要能够识别设计的元素和属性处理,甚至在脸上标记用于其他软件时发生的“冲突”包使用相同的元素名称或属性名称。

这些考虑要求文档构造名称的构造应避免冲突不同标记词汇表中的名称之间。本规范描述了一种机制,XML命名空间,实现了这一点通过分配展开的名称元素和属性。

1.1符号和用法注释

在哪里?强调的,关键词必须,不能,必修的,应该,不应该,5月本文件中的解释如[关键词].

请注意,许多中的产品中的非终结符本规范不是在这里定义的,而是在XML规范[XML].当此处定义的非终结符与非终结符具有相同的名称时在XML规范中定义,这里的产品在所有情况下,匹配相应的。

在本文档的制作中,这个国家安全委员会是“命名空间约束”,记录符合本规范的规则之一必须跟随。

2个XML命名空间

2.1基本概念

[定义: XML命名空间由识别URI引用[RFC3986];元素和属性名称可以使用所描述的机制放置在XML命名空间中在本规范中。]

[定义: 展开的名称是由命名空间名称和a本地名称.][定义: 对于一个名字N个在标识的命名空间中通过URI,的命名空间名称。对于名称N个不在命名空间中命名空间名称没有价值。][定义: 无论哪种情况本地名称N个.]它是通用管理URI名称空间的组合使用词汇的本地名称可以有效地避免名称冲突。

URI(URI)引用可以包含名称中不允许使用的字符,并且通常长得不方便,因此扩展名不能直接用于命名XML文档中的元素和属性。相反限定名使用。[定义: 限定名是受命名空间解释约束的名称。]在符合本规范的文件中,元素和属性名称显示为限定名。语法上,它们是前缀名称不带前缀的名称.提供了基于属性的声明语法来将前缀绑定到命名空间名称,并绑定应用于的默认命名空间非固定元素名称;这些声明的范围由它们出现的元素确定,以便不同的绑定可以应用于文档的不同部分。符合本规范的处理器必须识别并执行这些声明和前缀。

2.3比较URI(URI)工具书类

URI(URI)在确定一个名称是否属于给定的命名空间,以及两个名称是否属于同一命名空间。[定义: 这两个URI被视为字符串完全相同的当且仅当字符串相同时,也就是说,如果它们是相同的字符序列。]比较是区分大小写的,没有进行或撤消%转义。

结果是URI(URI)不相同的参考在这个意义上,可以解析为相同的资源。示例包括URI(URI)仅大小写或%-转义不同的引用,或在具有不同基本URI的外部实体中(但请注意相对的URI已弃用为命名空间名称)。

在命名空间声明中URI(URI)参考是归一化值属性的,因此替换XML字符和实体引用在进行任何比较之前已经完成了。

示例:

这个URI(URI)以下参考文献都不同,用于识别名称空间,因为大小写不同:

  • http://www.example.org/wine

  • http://www.Example.org/wine

  • http://www.example.org/Wine网站

下面的URI引用也都不同,用于标识命名空间:

  • http://www.example.org/~威尔伯

  • http://www.example.org/%7ewilbur

  • http://www.example.org/%7Ewilbur

由于存在混淆URI那就相当了如果取消引用,则在命名空间名称中使用%转义字符强烈反对。

3个声明命名空间

[定义:命名空间(或者更准确地说,是命名空间绑定)宣布使用保留属性的家族。此类属性的名称必须圣诞节开始xml文件:.与任何其他XML属性一样,可以提供这些属性直接或通过违约.]

命名空间声明的属性名称
[1]   NSAt名称   ::=   前缀AttName
|默认AttName
[2]   前缀AttName   ::=   'xmlns:'NC名称[NSC:保留前缀和命名空间名称]
[3]   默认AttName   ::=   “xmlns”
[4]   NC名称   ::=   姓名- (烧焦* ':'烧焦*)/*XML姓名,减去“:”*/

属性的归一化值 必须要么是URI参考-命名空间名称标识名称空间-或空字符串。命名空间名称,为其提供服务预期用途,应该具有独特性和坚持不懈。它不能直接用于检索模式(如果任何存在)。统一资源名称[RFC2141]是一个语法示例设计时考虑到了这些目标。然而,应该注意的是,普通URL可以通过以下方式进行管理:实现这些相同的目标。

[定义:如果属性名称匹配前缀AttName,然后NC名称提供了命名空间前缀,用于将元素和属性名称与命名空间名称在属性值中在声明所针对的元素的范围内已附加。]

[定义:如果属性名称匹配默认AttName,然后命名空间名称在中属性值为是的默认命名空间在声明所针对的元素的范围内已附加。]中讨论了默认命名空间和声明的重写6将命名空间应用于元素和属性.

示例命名空间声明,它将命名空间前缀电子数据交换名称空间名称为http://ecommerce.example.org/schema:

<x xmlns:edi='http://ecommerce.example.org/schema'><!-- “edi”前缀绑定到http://ecommerce.example.org/schema对于“x”元素和内容--></x>

尽管它们本身并不矜持,但使用它们是不可取的带有前缀的名称,其LocalPart以字母x、m、l开头,在任意案例组合,如如果使用时没有前缀,这些名称将被保留。

4合格名称

在XML中符合本规范的文件,一些名称(与非终结符相对应的结构姓名) 必须给定为限定名,定义如下:

合格名称
[7]   限定名   ::=   前缀名称
|取消前缀名称
[8]   前缀名称   ::=    前缀':'本地部件
[9]   取消前缀名称   ::=    本地部件
[10]   前缀   ::=   NC名称
[11]   本地部件   ::=   NC名称

这个前缀提供了命名空间前缀限定名称的一部分,以及必须与命名空间关联URI(URI)中的引用命名空间声明.[定义: 这个本地部件提供了局部零件限定名称的名称。]

注意,前缀函数只有作为占位符命名空间名称。应用应该在构造时使用命名空间名称,而不是前缀范围超出包含文档。

5使用限定名称

在符合本规范的XML文档中,要素姓名作为限定名,作为跟随:

元素名称
[12]   雄鹿   ::=   '<'限定名(S公司 属性)*S公司? '>'[NSC:声明前缀]
[13]   电子标签   ::=   '</'限定名 S公司? '>'[NSC:声明前缀]
[14]   清空元素标签   ::=   '<'限定名(S公司 属性)*S公司? '/>'[NSC:声明前缀]

限定名用作元素名的示例:

属性可以是命名空间声明或其名称为限定名:

属性
[15]   属性   ::=   NSAt名称 等式 AttValue(附件值)
|限定名 等式 AttValue(附件值)[NSC:已声明前缀]
[NSC:无前缀取消声明]
[NSC:属性唯一]

限定名用作属性名的示例:

命名空间约束:已声明前缀

命名空间前缀,除非是xml格式圣诞节,必须已经是在中声明命名空间声明属性,其中前缀为在祖先元素(即其中的元素)中使用或内容这个出现带前缀的标记)。

在以下情况下,这种限制可能会导致操作困难提供了名称空间声明属性,而不是直接在XML中提供文档实体,但是通过外部实体中声明的默认属性。基于非验证XML处理器。许多XML应用程序(可能包括对名称空间敏感的应用程序)未能需要验证处理器。是否需要对此类应用程序进行正确操作,命名空间声明必须直接或通过在DTD的内部子集.

元素名称和属性姓名它们出现在DTD公司:

声明中的限定名称
[16]   文档类型删除   ::=   '<!DOCTYPE(文件类型)S公司 限定名(S公司 外部ID)?S公司? ('[' (标记更新日期|PEReference(性能参考)|S公司)* ']'S公司?)? '>'
[17]   元素decl   ::=   '<!元素S公司 限定名 S公司 内容规范 S公司? '>'
[18]   内容提供商   ::=   (限定名|选择|序列) ('?' | '*' | '+')?
[19]   混合的   ::=   '('S公司? “#PCDATA”(S公司? '|'S公司?限定名)*S公司? ')*'
| '('S公司? '#PCDATA(PCDATA)S公司? ')'
[20]   AttlistDecl公司   ::=   '<!ATTLIST公司S公司 限定名 AttDef(附件定义)*S公司? '>'
[21]   AttDef(附件定义)   ::=   S公司(限定名|NSAt名称)S公司 附件类型 S公司 默认拒绝

请注意,在以下内容中,基于DTD的验证是不知道名称空间的意义:DTD约束可能出现在文档按其未解释的名称,而不是按(命名空间名称、本地name)对。对使用命名空间的文档进行验证DTD中必须使用与实例中相同的前缀。然而,DTD可以间接约束有效通过提供文档#固定属性的值声明命名空间。

6将命名空间应用于元素和属性

6.1命名空间范围界定

声明前缀的命名空间声明的范围扩展自开始标记的开始,在该标记中显示为相应的结束标记,不包括任何内部声明的范围使用相同的NSAttName部件。在空标记的情况下,作用域就是标记本身。

这样的命名空间声明适用于所有元素和属性其范围内的名称,其前缀与宣言。

这个展开的名称对应于前缀元素或属性名称的URI(URI)到其中前缀作为其绑定命名空间名称,局部零件作为它的本地名称.

<?xml版本=“1.0”?><html:html xmlns:html='http://www.w3.org/1999/xhtml'><html:head><html:title>Frobnostication</html:title></html/head><html:body移动到<html:a href='http://frob.example.com'>这里</html:a></html:p></html:html>

多个命名空间前缀可以声明为单个元素的属性,如本例所示:

<?xml版本=“1.0”?><!-- 这两个名称空间前缀在-->中都可用<bk:book xmlns:bk='urn:loc.gov:books'xmlns:isbn='urn:isbn:0-395-36341-6'>数十人的价格更低<isbn:number>1568491379</bk:book>

6.2命名空间默认设置

a的范围默认命名空间宣言start-tag,它出现在相应的end标记的末尾,排除任何内部默认命名空间声明的范围。在空标记的情况下,范围是标记本身。

默认名称空间声明适用于所有未指定的元素名称在其范围内。默认的命名空间声明不直接应用于属性名称;对非固定属性的解释是由它们出现的元素决定。

如果范围中有默认命名空间声明,则展开的名称对应于非固定元素名的URI(URI)默认命名空间作为它的命名空间名称.如果范围中没有默认命名空间声明,则命名空间名称没有值。非固定属性名称的命名空间名称始终没有值。在所有情况下本地名称局部零件(当然,这与无前缀名称本身相同)。

<?xml版本=“1.0”?><!-- 元素位于HTML命名空间中,在本例中默认--><html xmlns='http://www.w3.org/1999/xhtml'><head><title>冻伤</title></head><body><p>已移至<a href='http://frob.example.com'>此处</a></p>(第页)</body></html>
<?xml版本=“1.0”?><!-- 非固定元素类型来自“books”--><book xmlns='urn:loc.gov:books'xmlns:isbn='urn:isbn:0-395-36341-6'><title>数十人的价格更低<isbn:number>1568491379</book>

命名空间作用域的更大示例:

<?xml版本=“1.0”?><!-- 最初,默认名称空间是“books”--><book xmlns='urn:loc.gov:books'xmlns:isbn='urn:isbn:0-395-36341-6'><title>数十人的价格更低<isbn:number>1568491379</isbn:number><注释><!-- 使HTML成为一些注释的默认名称空间--><p xmlns='http://www.w3.org/1999/xhtml'>这是一本有趣的书!</p></注意事项></book>

默认命名空间声明中的属性值5月为空。这个也一样在声明范围内,没有违约的影响命名空间。

<?xml版本=“1.0”?><啤酒><!--表中的默认名称空间是HTML名称空间--><表xmlns='http://www.w3.org/1999/xhtml'>名称来源描述<tr><!-- 表单元格中没有默认命名空间--><td>亨茨曼</td><td>英国巴斯</td><td><details xmlns=“”><class>苦涩</class><hop>Fuggles美妙的啤酒花、清淡的酒精、优质的夏季啤酒<con>易碎;pub到pub的差异过大</详细信息></td></tr></表格></啤酒>

6.3属性的唯一性

此约束相当于要求任何元素都不具有两个具有相同属性展开的名称.

例如,每个坏的空元素标记在中是非法的以下内容:

<!-- 网址:http://www.w3.org绑定到n1和n2--><x xmlns:n1=“网址:http://www.w3.org" xmlns:n2=“网址:http://www.w3.org" ><坏a=“1”a=“2”/><坏n1:a=“1”n2:a=“2”/></x>

然而,以下每一项都是合法的,第二项是因为默认命名空间不适用于属性名称:

<!-- 网址:http://www.w3.org绑定到n1,是默认--><x xmlns:n1=“网址:http://www.w3.org" xmlns=“网址:http://www.w3.org" ><良好a=“1”b=“2”/><好a=“1”n1:a=“2”/></x>

7文件的符合性

本规范适用于XML 1.0文件。为了符合这一点规范,文档必须根据XML 1.0规范[XML].

在符合本规范的XML文档中,元素和属性名称必须匹配的生产限定名必须满足“命名空间约束”。中的所有其他令牌文件是必修的,对于XML 1.0格式良好性XML生产姓名 必须符合本规范的生产要求NC名称.

[定义: 文档是形成的命名空间如果符合本规范。]

在命名空间格式的文档中如下所示:

此外,namespace-well-formed文档也可以是namespace-valid。

[定义: 命名空间格式的文档是命名空间有效如果根据XML1.0规范它是有效的,并且所有标记元素和属性名称除外,它们是必修的,对于XML 1.0有效性,匹配的XML生成姓名符合本规范的生产要求NC名称.]

在namespace-valid文档中如下所示:

8处理器的一致性

为了符合本规范,处理器必须报告违反命名空间格式良好性,但它不是必修的检查命名空间名称是否URI引用[RFC3986].

[定义: 符合此规范的验证XML处理器命名空间验证如果另外它报告了违反名称空间有效性的情况。]

规范性引用文件

关键词
RFC 2119:在RFC中用于指示需求级别的关键字,S.Bradner编辑。IETF(互联网工程任务组),1997年3月。可在http://www.rfc-editor.org/rfc/rfc2119.txt
RFC2141协议
RFC 2141:URN语法,R.Moats编辑。IETF(互联网工程任务组),1997年5月。可在http://www.rfc-editor.org/rfc/rfc2141.txt。
RFC3986协议
RFC 3986:统一资源标识符(URI):通用语法,T.Berners-Lee、R.Fielding和L.Masinter编辑。IETF(互联网工程任务组),2005年1月。可在http://www.rfc-editor.org/rfc/rfc3986.txt
RFC3629号文件
RFC 3629:UTF-8,ISO 10646的转换格式,F.Yergeau编辑。IETF(互联网工程任务组),2003年11月。可在http://www.rfc-editor.org/rfc/rfc3629.txt
XML格式
可扩展标记语言(XML)1.0、蒂姆·布雷、吉恩Paoli,C.M.Sperberg-McQueen,Eve Maler和François Yergeau编辑。W3C(万维网联盟)。可在http://www.w3.org/TR/REC-xml/。

B其他参考(非标准)

1.0勘误表
XML勘误表中的命名空间.W3C(万维网联盟)。可在http://www.w3.org/XML/XML-names-19990114-errata。
1.0 2e勘误表
XML中的命名空间(第二版)勘误表.W3C(万维网联盟)。可在http://www.w3.org/XML/2006/XML-names-errata。
相对URI弃用
W3C XML全体会议结果有关相对URI引用的投票在命名空间声明中2000年7月3日至17日,戴夫·霍兰德和C.M.Sperberg-McQueen,2000年9月6日。可在http://www.w3.org/2000/09/xppa。

C XML命名空间的内部结构(非规范)

本附录已删除。

D自版本1.0以来的更改(非标准)

此版本包含2009年7月20日的勘误表[1.0勘误表] [1.0 2e勘误表].

有几个编辑更改,包括术语的更改和添加旨在产生更大的一致性。非规范性附录“内部结构已删除。BNF已调整为与所有版本的XML 1.0正确互连,包括第五版。

E确认(非标准)

这项工作反映了大量人员的投入,尤其包括世界各地的参与者Web Consortium XML工作组和特别兴趣组以及W3C元数据活动的参与者。微软的查尔斯·弗兰克斯顿的贡献特别有价值。

F孤儿产品(非正常)

以下两个产品是本规范前两个版本中产品的修改版本。不再使用,但保留在此处,以满足本规范未注明日期版本的交叉引用。

因为信件XML 1.0的生成,最初用于NCName开始字符自XML 1.0第五版以来,不再是定义名称的正确基础NCName开始字符通过定义NCName开始字符依据NC名称.

[5]   NCNameChar(网络名称字符)   ::=   NameChar(名称字符)- ':'/*XMLNameChar(名称字符),减去“:”*/
[6]   NCName开始字符   ::=    NC名称- (烧焦 烧焦 烧焦* )/*的第一个字母NC名称*/

注:

生产NC NC名称起始字符利用以下事实单字符NCName必须是NCNameStartChar,并且通过从所有长度的NCName集合中减去由两个或多个字符组成的所有字符串的集合,只留下一个字符长的NCName。