W3C公司REC-xml-names-19990114


XML中的命名空间

万维网联盟1999年1月14日

此版本:
http://www.w3.org/TR/1999/REC-xml-names-19990114
http://www.w3.org/TR/1999/REC-xml-names-19990114/xml-names.xml
http://www.w3.org/TR/1999/REC-xml-names-19990114/Overview.html
最新版本:
http://www.w3.org/TR/REC-xml-names网站
以前的版本:
http://www.w3.org/TR/1998/PR-xml-names-19981117
编辑:
布雷(文本)<tbray@textuality.com>
戴夫·霍兰德(Hewlett-Packard公司)<dmh@corp.hp.com>
安德鲁·雷曼(微软)<andrewl@microsoft.com>

版权 ©  1999W3C公司(麻省理工学院,印度,庆应(Keio)),保留所有权利。W3C公司责任, 商标,文件使用软件许可规则适用。

本文件的状态

本文档已由W3C成员和其他相关方,并已获得W3C推荐总监。这是一个马厩并可用作参考材料或被引用作为其他文件的规范性参考。W3C的提出建议的作用是引起注意并促进其广泛应用部署。这增强了功能和Web的互操作性。

本规范中的已知错误列表为可在获取http://www.w3.org/XML/XML-names-19990114-errata.

请将此文档中的错误报告给xml-names-editor@w3.org.

摘要

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

目录

1动机和总结
1.1关于符号和用法的注记
2声明命名空间
三。限定名称
4使用限定名称
5将命名空间应用于元素和属性
5.1命名空间范围
5.2命名空间默认设置
5.3属性的唯一性
6文件的符合性

附录

答:。XML命名空间的内部结构(非规范性)
A.1款传统命名空间的不足
A.2款XML命名空间分区
答3展开的元素类型和属性名称
A.4款唯一的扩展属性名称
B。确认(非标准)
C、。工具书类

1.动机和总结

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

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

这些考虑需要该文件构件应该有通用名称,其范围超出了包含文档。本规范描述了一种机制,XML命名空间,实现了这一点。

[定义:]AnXML命名空间是由URI引用标识的名称集合[RFC2396],在XML文档中用作元素类型属性名称.XML命名空间不同于计算学科中通常使用的“名称空间”因为XML版本具有内部结构,而从数学上来说不是说吧,一套。这些问题在"A.XML命名空间的内部结构".

[定义:]URI引用了考虑标识名称空间完全相同的当他们完全相同的字符对字符。注意,在这个意义上不相同的URI引用实际上可能是功能等效。示例包括仅大小写不同的URI引用,或具有不同有效基URI的外部实体。

XML命名空间中的名称可能显示为限定名, 其中包含一个冒号,将名称分隔为命名空间前缀和a局部零件.映射到URI引用的前缀选择名称空间。以下各项的组合通用管理的URI名称空间和文档自己的名称空间生成普遍唯一的标识符。提供了前缀作用域和默认机制。

URI引用可以包含名称中不允许的字符,因此不能直接用作名称空间前缀。因此名称空间前缀用作URI引用的代理。使用了下面描述的基于属性的语法声明协会带有URI引用的名称空间前缀;支持此命名空间建议的软件必须识别并执行这些声明和前缀。

1.1符号和用法注释

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

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

请注意,中使用的所有Internet域名示例,除了w3.org网站,已选定不应被视为具有任何意义。

2.声明命名空间

[定义:]命名空间是宣布使用保留属性的家族。此类属性的名称必须圣诞节或者有xml文件:作为前缀。与任何其他XML属性一样,可以提供这些属性直接或通过违约.

命名空间声明的属性名称
[1] NSAt名称 ::=前缀AttName
默认AttName
[2] 前缀AttName ::='xmlns:'NC名称 [国家统计委员会:领先的“XML”]
[3] 默认收件人姓名 ::=“xmlns”
[4] NC名称 ::=(信函| '_')(NCNameChar(网络名称字符))*/*XML姓名,减去“:”*/
[5] NCNameChar(网络名称字符) ::=信函数字| '.' | '-' | '_'组合字符扩展器

[定义:]属性的价值,URI引用,命名空间名称标识名称空间。命名空间名称,为其提供服务预期用途,应具有独特性和坚持不懈。它不能直接用于检索模式(如果任何存在)。根据这些目标设计的语法示例如下统一资源名称[RFC2141].然而,应该注意的是,普通URL可以通过以下方式进行管理:实现这些相同的目标。

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

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

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

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

命名空间约束:领先的“XML”
以三字母序列开头的前缀x个,,,在任何情况下都保留组合供XML和XML相关规范使用。

3.限定名称

[定义:]在XML中符合本规范的文件,一些名称(与非终结符对应的构造姓名)可以作为限定名,定义如下:

合格名称
[6] 限定名 ::=(前缀':')?本地部件
[7] 前缀 ::=NC名称
[8] 本地部件 ::=NC名称

这个前缀提供了命名空间前缀限定名的一部分,并且必须与命名空间URI关联中的引用命名空间声明.【定义:】这个本地部件提供了局部零件限定名的名称。

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

4.使用限定名称

在符合本规范的XML文档中,元素类型如下所示限定名,作为跟随:

元素类型
[9] 雄鹿 ::='<'限定名(S公司 属性)*S公司? '>'[国家统计委员会:声明的前缀]
[10] 电子标签 ::='</'限定名 S公司? '>' [国家统计委员会:声明的前缀]
[11] 清空元素标签 ::='<'限定名(S公司 属性)*S公司? '/>' [国家统计委员会:声明的前缀]

用作元素类型的限定名称的示例:

<x xmlns:edi='http://ecommerce.org/schema'>
  <!--“price”元素的命名空间是http://ecommerce.org/schema -->
<edi:price units='Euro'>32.18
</x>

属性可以是命名空间声明或者他们的名字是限定名:

属性
[12] 属性 ::=NSAt名称 等式 AttValue(附件值)
限定名 等式 AttValue(附件值) [国家统计委员会:声明的前缀]

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

<x xmlns:edi='http://ecommerce.org/schema'>
  <!--“taxClass”属性的命名空间为http://ecommerce.org/schema -->
婴儿食品
</x>

命名空间约束:声明的前缀
命名空间前缀,除非它是xml格式圣诞节,一定是在中声明命名空间声明属性,其中前缀为在祖先元素(即其中的元素)中使用或内容这个出现前缀标记)。前缀xml格式根据定义,绑定到命名空间名称http://www.w3.org/XML/1998/namespace网站.前缀圣诞节仅用于命名空间绑定并且自身未绑定到任何命名空间名称。

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

它们出现在DTD公司:

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

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

5.1命名空间范围界定

命名空间声明被视为应用于元素中指定的元素以及内容中的所有元素除非被另一个命名空间声明覆盖用同样的NSAt名称部分:

<?xml版本=“1.0”?>
<!--这里的所有元素都显式地位于HTML命名空间-->中
<html:html xmlns:html='http://www.w3.org/TR/REC-html40'>
<html:head><html:title>Frobnostication</html:title></html/head>
<html:body><html:p>移动到
<html:a href='http://frob.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>

5.2命名空间默认设置

A类默认命名空间已考虑应用于声明它的元素(如果该元素没有命名空间前缀)和所有元素内容中没有前缀元素。如果默认命名空间声明中的URI引用为空,则无准备的声明范围内的元素不被视为在任何命名空间。请注意,默认名称空间不直接应用于属性。

<?xml版本=“1.0”?>
<!--元素在HTML命名空间中,在本例中默认情况下-->
<html xmlns='http://www.w3.org/TR/REC-html40'>
<head><title>Frobnotification</title></head>
<body><p>移至
<a href='http://frob.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
<注释>
      <!--使HTML成为一些注释的默认名称空间-->
<p xmlns='urn:w3-org-ns:HTML'>
这是一本有趣的书!
</p>
</注释>
</book>

默认名称空间可以设置为空字符串。这个也一样在声明范围内,没有违约的影响命名空间。

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

5.3属性的唯一性

在XML文档中符合符合本规范,无标签可能包含以下两个属性:

  1. 具有相同的名称,或
  2. 具有相同的限定名局部零件前缀已经装订好了命名空间名称那个完全相同的.

例如,每个坏的start-tags在以下内容:

<!-- 网址: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>

6.文件的符合性

在符合本规范的XML文档中,元素类型和属性名称必须与限定名必须满足“命名空间约束”。

如果所有其他文档都符合此规范,则XML文档符合此规范文档中需要的标记,用于XML一致性,以匹配XML生产姓名,匹配本规范的生产NC名称.

一致性的影响是在这样的文件中:

严格来说,属性值声明为类型身份证件,IDREF(S),实体,符号也是姓名,因此应该是无冒号的。然而,声明的属性值类型仅可用例如,到读取标记声明的处理器验证处理器.因此,除非指定使用验证处理器,不能保证属性值的内容已检查是否符合本规范。


附录

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

A.1传统命名空间的不足

在计算学科中,术语“名称空间”通常是指设置名称,即不包含重复项的集合。然而,处理XML标记中使用的名称因此,名称空间将极大地削弱其实用性。XML文档中此类名称的主要用途是启用标识的逻辑文档中的结构由软件模块(如查询处理器),样式表驱动的渲染引擎和模式驱动的验证器。考虑以下示例:

图书签名活动
<签名>
<author title=“Mr”name=“Vikram Seth”/>
<book title=“一个合适的男孩”price=“22.95美元”/></signing>
<签名>
<author title=“Dr”name=“Oliver Sacks”/>
<book title=“The Island of The Color-Blind”price=“12.95美元”/></signing>
</节>

在本例中,名称出现了三次标题在标记中,仅名称显然不能提供足够的信息允许软件模块进行正确处理。

另一个问题是“全局”属性的使用,如如本例所示,XML文档的一个片段使用CSS样式表显示:

<预订>
<NAME HTML:CLASS=“largeSansSerif”>莱曼,A
<SEAT CLASS=“Y”HTML:CLASS=“reallyImportant”>33B</SEAT>
<出发>1997-05-24T07:55:00+1

在这种情况下类别属性,描述票价基础并采用“J”、“Y”和“C”等值,在所有语义级别上都是不同的来自HTML:类属性,其中用于模拟HTML中的语法丰富性,作为克服通过子类化限制元素库。

XML1.0没有提供声明“全局”属性的内置方法;项目,如HTML类别属性仅在其HTML应用程序的散文描述及其解释。然而,这些属性的一个重要区别是它们的名字是独一无二的,通常出现在应用。

A.2 XML命名空间分区

为了支持创建合格和不合格名称的目标为了满足其预期目的,我们确定了出现在属于几个不相交的传统名称空间之一的XML名称空间(即集结构)名称空间,称为名称空间分区。分区为:

所有元素类型分区
XML命名空间中的所有元素类型都显示在此分区中。每个都有一个独特的局部零件; 这个命名空间名称和本地部分的组合唯一地标识元素类型。
全局属性分区
此分区包含定义的所有属性的名称,在这个命名空间中,是全局的。全局属性唯一必需的特征是其名称为在全局属性分区中是唯一的。本规范没有关于正确使用这些属性的断言。命名空间名称和属性名称的唯一组合标识全局属性。
Per-Element-Type分区
所有元素类型分区中的每个类型都有一个显示非限定属性名称的关联命名空间为该元素提供的。这是一个传统的名称空间,因为重复属性的出现XML 1.0禁止元素上的名称。属性名与元素的类型和命名空间的组合name唯一地标识每个非限定属性。

在符合本规范的XML文档中所有限定(带前缀)的属性都分配给全局属性分区,并将所有非限定属性的名称分配给适当的每元素类型分区。

A.3扩展元素类型和属性名称

为了便于指定规则和进行比较,我们定义了一个对于每个元素类型和XML文档中的属性名。

[定义:]An展开元素类型表示为类型为的空XML元素ExpET类型. 它有一个必需的类型属性,其中给出了类型的本地部件和可选纳秒属性,如果元素是限定的,则将其命名空间名称.

[定义:]An扩大属性名称表示为类型为的空XML元素ExpAName公司.它有一个必需的名称提供名称的属性。如果属性是全局的,则它具有必需的纳秒属性它提供了命名空间名称;否则,它有一个必需的属性埃尔type哪一个提供附加元素的类型和可选属性榆树它提供名称空间名称(如果已知)附加元件。

上述示例的细微变化将说明扩展元素类型和属性名称的工作。以下两个片段后面都有一个表,其中显示了名称的扩展:

<!--1--><section xmlns='urn:com:books-r-us'>
<!--2--><title>图书签名活动</title>
<!--3--><签名>
<!--4--><author title=“Mr”name=“Vikram Seth”/>
<!--5--><book title=“一个合适的男孩”价格=“22.95美元”/>
</签名>
</节>

名称扩展如下:
线路姓名扩大
1部分 <ExpEType type=“section”ns=“urn:com:books-r-us”/>
2 标题<ExpEType type=“title”ns=“urn:com:books-r-us”/>
签署<ExpEType type=“signing”ns=“urn:com:books-r-us”/>
4 作者<ExpEType type=“author”ns=“urn:com:books-r-us”/>
4 标题 <ExpAName name='title'eltype=“author”elns=“urn:com:books-r-us”/>
4 名称 <ExpAName name='name'eltype=“author”elns=“urn:com:books-r-us”/>
5 <ExpEType type=“book”ns=“urn:com:books-r-us”/>
5 标题<ExpAName name='title'eltype=“book”elns=“urn:com:books-r-us”/>
5 价格<ExpAName name='price'eltype=“book”elns=“urn:com:books-r-us”/>
<!--1--><RESERVATION xmlns:HTML=“http://www.w3.org/TR/REC-html40">
<!--2--><NAME HTML:CLASS=“largeSansSerif”>Layman,A</NAME>
<!--3--><SEAT CLASS=“Y”HTML:CLASS:“largeMonotype”>33B</SEAT>
<!--4--><HTML:A HREF='/cgi-bin/ResStatus'>检查状态
<!--5-->启程>1997-05-24T07:55:00+1

1 预订<ExpEType type=“RESERVATION”/>
2 名称<ExpEType type=“NAME”/>
2 HTML:类 <ExpAName name=“CLASS”ns=http://www.w3.org/TR/REC-html40 />
座椅<ExpEType type=“SEAT”/>
类别<ExpAName name=“CLASS”eltype=“SEAT”>
HTML:类<ExpAName name=“CLASS”ns=“http://www.w3.org/TR/REC-html40" />
4 HTML格式:A<ExpEType type=“A”ns=“http://www.w3.org/TR/REC-html40" />
4 HREF公司<ExpAName name=“HREF”eltype=“A”elns=“http://www.w3.org/TR/REC-html40" />
5 出发<ExpEType type=“出发”/>

A.4唯一扩展属性名

约束表示为“5.3属性的唯一性“以上可以直接通过要求没有元素具有扩展名称等效的两个属性,即具有相同名称属性-值对。

B.确认(非标准)

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

C.参考文献

RFC2141协议
IETF(互联网工程任务组)RFC 2141:URN语法编辑:R.护城河。1997年5月。
RFC2396协议
IETF(互联网工程任务组)RFC 2396:统一资源标识符(URI):通用语法,编辑。T.Berners-Lee,R.Fielding,L.Masinter。1998年8月。
XML格式
可扩展标记语言(XML)1.0,编辑:Tim Bray,JeanPaoli和C.M。Sperberg-McQueen公司。1998年2月10日。可在http://www.w3.org/TR/REC-xml.