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.2使用URI作为命名空间名称
空字符串,尽管它是合法的URI(URI)引用不能用作命名空间名称。
相对的使用URI(URI)参考,包括相同的文档引用,在命名空间声明中是已弃用。
注:
此相对URI引用的弃用是由W3C XML全体投票[相对URI弃用]它还声明“以后的规范,如DOM、XPath等,将定义对他们的解释”。
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属性一样,可以提供这些属性直接或通过违约.]
命名空间声明的属性名称
属性的归一化值
必须要么是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>
命名空间约束:保留前缀和命名空间名称
前缀xml格式根据定义绑定到命名空间名称http://www.w3.org/XML/1998/namespace(http://www.w3.org/XML/1998/namespace)
.它5月,但不必声明,以及不能是绑定到任何其他命名空间名称。其他前缀不能绑定到此命名空间名称,而且它不能声明为默认命名空间。
前缀圣诞节仅用于声明命名空间绑定,由绑定到命名空间名称的定义http://www.w3.org/2000/xmlns/
.它不能被宣布.其他前缀不能绑定到此命名空间名称,而且它不能声明为默认命名空间。元素名称不能有前缀圣诞节
.
所有其他前缀以三个字母序列x、m、l、,在任何情况下,都会保留组合。这意味着:
用户不应该除非以后的规范另有规定,否则使用它们
处理器不能将其视为致命错误。
尽管它们本身并不矜持,但使用它们是不可取的带有前缀的名称,其LocalPart以字母x、m、l开头,在任意案例组合,如如果使用时没有前缀,这些名称将被保留。
4合格名称
在XML中符合本规范的文件,一些名称(与非终结符相对应的结构姓名)
必须是给定为限定名,定义如下:
合格名称
这个前缀提供了命名空间前缀限定名称的一部分,以及必须与命名空间关联URI(URI)中的引用命名空间声明.[定义: 这个本地部件提供了局部零件限定名称的名称。]
注意,前缀函数只有作为占位符命名空间名称。应用应该在构造时使用命名空间名称,而不是前缀范围超出包含文档。
5使用限定名称
在符合本规范的XML文档中,要素姓名作为限定名,作为跟随:
元素名称
限定名用作元素名的示例:
<!-- “price”元素的命名空间是http://ecommerce.example.org/schema --><edi:price xmlns:edi='http://ecommerce.example.org/schema'单位='欧元'>32.18</edi:price>
属性可以是命名空间声明或其名称为限定名:
属性
限定名用作属性名的示例:
<x xmlns:edi='http://ecommerce.example.org/schema'><!-- “taxClass”属性的命名空间为http://ecommerce.example.org/schema -->婴儿食品</x>
命名空间约束:已声明前缀
命名空间前缀,除非是xml格式
或圣诞节
,必须已经是在中声明命名空间声明属性,其中前缀为在祖先元素(即其中的元素)中使用或内容这个出现带前缀的标记)。
在以下情况下,这种限制可能会导致操作困难提供了名称空间声明属性,而不是直接在XML中提供文档实体,但是通过外部实体中声明的默认属性。基于非验证XML处理器。许多XML应用程序(可能包括对名称空间敏感的应用程序)未能需要验证处理器。是否需要对此类应用程序进行正确操作,命名空间声明必须是直接或通过在DTD的内部子集.
元素名称和属性姓名当它们出现在DTD公司:
声明中的限定名称
请注意,在以下内容中,基于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属性的唯一性
命名空间约束:属性唯一
在XML文档中符合符合本规范,无标签可能包含以下两个属性:
具有相同的名称,或
具有相同的限定名局部零件和前缀已经装订好了到命名空间名称那个是完全相同的.
此约束相当于要求任何元素都不具有两个具有相同属性展开的名称.
例如,每个坏的
空元素标记在中是非法的以下内容:
<!-- 网址: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处理器是命名空间验证如果另外它报告了违反名称空间有效性的情况。]