XML命名空间

The name of the pictureThe name of the pictureThe name of the pictureClash Royale CLAN TAG#URR8PPP

XML命名空间XML namespace,也译作XML名称空间XML名字空间)用于在一个XML文档中提供名字唯一的元素和属性。XML命名空间在W3C推荐规范《Namespaces in XML》中定义。XML命名空间于1999年1月14日成为W3C的推荐规范。


W3C将XML命名空间定义为以国际化资源标识符(Internationalized Resource Identifier,IRI)引用为标识的元素名和属性名的集合。




目录





  • 1 使用命名空间的动机


  • 2 声明和引用命名空间


  • 3 命名空间的名称


  • 4 命名空间宣言


  • 5 参考文献


  • 6 外部链接


  • 7 参见




使用命名空间的动机


一个XML文档可能包括来自多个XML词汇表的元素或属性,如果每一个词汇表指派一个命名空间,那么相同名字的元素或属性之间的名称冲突就可以解决。举一个简单的例子来说,在一个订单的XML文档中需要引用到客户和所购买的产品,customer元素和product元素可能都有一个叫做id的子元素。这时候要引用id元素会造成名称冲突,但是如果将两个id元素放到不同的命名空间中就会解决这个问题。



声明和引用命名空间


命名空间使用元素的属性来声明,比如:


xmlns:xhtml="http://www.w3.org/1999/xhtml"

其中:



  • xmlns是使用专门用来声明命名空间的保留字,

  • xhtml是命名空间的前缀


  • http://www.w3.org/1999/xhtml 是命名空间的唯一标识符,是一个IRI引用,但通常是一个统一资源标志符(URI)引用。

命名空间的声明就是将一个前缀与一个URI关联起来。


声明命名空间时,可以为命名空间定义前缀(见前例)。为命名空间定义前缀,而不直接使用命名空间的URI是因为URI为了唯一通常会很长,直接使用URI不但造成书写和阅读的不便,还会扰乱XML的语法。声明命名空间时,也可以不定义前缀。如:


xmlns="http://www.w3.org/1999/xhtml"

未定义前缀的命名空间將被用作缺省的命名空间。


命名空间的URI仅仅是唯一的标识符,推荐规范不要求,也不建议通过其获取信息。XML解析器处理命名空间URI时,也仅仅将其作为字符串。例如,地址为http://www.w3.org/1999/xhtml 的文档并不包含任何代码,它仅仅为人类阅读者描述了XHTML命名空间。之所以采用URI(如"http://www.w3.org/1999/xhtml")来标识命名空间是因与使用简单的字符串(如xhtml)相比,URI大大降低了命名空间重名的可能性。


XML文档中的元素名和属性名可以使用限定名或非限定名,限定名由命名空间的前缀和局部名组合而成,例如"xhtml:hr"。非限定名只有局部名,没有前缀。非限定名被认为属于缺省命名空间,如果缺省命名空间没有定义,则属于无命名空间


在一个元素中声明的命名空间,在所有子元素中也有效,一种通常的做法是在XML文档的根元素声明所有命名空间。在子元素中声明的命名空间的前缀可以覆盖父元素中声明的前缀。W3C推荐规范Namespaces in XML 1.1允许取消命名空间的声明,如:


xmlns:xhtml=""


命名空间的名称


虽然术语命名空间的URI被广泛使用,W3C推荐规范称之为命名空间的名称。规范并未强制规定命名空间的名称必须使用URI(即当解析器发现命名空间不是一个合法的URI时应该拒绝该文档),实际上许多XML的解析器允许使用任何字符串。在推荐规范的1.1版,命名空间的名称变成了国际化资源标识符(IRI),IRI允许使用非ASCII码的字符,实际上,非ASCII码字符已经被几乎所有的XML软件所接受。但是命名空间的URI一词还在持续使用,在W3C和其他地方的许多规范中也有使用。


随着命名空间推荐规范的发布,在如何处理相对的URI问题上产生了激烈的争论,一方认为相对的URI应当简单地当作字符串处理,而另一方认为应该根据文档的基准URI将其转换为绝对的URI。[1]。W3C对这一争论的裁定是不赞成使用相对的URI的。[2].


命名空间的URI与HTTP协议没有任何正式的关系,然而HTTP协议形式的URL(例如http://www.w3.org/1999/xhtml)还是被广泛的用作命名空间的URI。规范并未说明如果这样的URL被解引用(dereference,也就是说,如果软件试图从该位置获取一个文档)会发生什么。在这个问题上存在着不同的看法,有些人认为应该在该位置放置一个RDDL文档[3]。但是总的来说,用户应该假定命名空间的URI只是一个简单的名称,而非万维网上文档的地址。



命名空间宣言


当一个元素带有属性xmlns="",该元素的默认命名空间和它的后代将恢复为“无命名空间”:那就是在任何命名空间里头都不被视为前缀名称。



参考文献




  1. ^ Leigh Dodds, News from the trenches, 24 May 2000 


  2. ^ Dan Connolly, W3C XML Plenary decision on relative URI references in namespace declarations, 11 Sep 2000 


  3. ^ Elliotte Rusty Harold, RDDL Me This: What Does a Namespace URL Locate?, 20 Feb 2001 



外部链接



  • (英文)Namespaces in XML 1.0 (Second Edition)


  • (英文)Namespaces in XML 1.1 (Second Edition)

  • XML模式:了解命名空间


  • 计划使用XML名称空间,第1部分,第2部分[永久失效連結]


参见


  • 命名空间

  • XML


Popular posts from this blog

The Dalles, Oregon

眉山市

清晰法令