XML中namespace命名空间的作用

Raymond Raymond event 2009-10-19 visibility 2,152
more_vert

相信很多程序员刚接触XML的时候,对XML中的namespace的用法不是很清楚,而且甚至不知道它到底有什么用,包括最初我自己也是。

关于命名空间

不过之所以不理解这种namespace主要是因为我们都习惯于将具有相同或者相近内容放在一个XML中,所以不会遇到一些问题。

我们一起看下面的例子:

<html xmlns="http://www.w3.org/HTML/1998/html4"
        xmlns:xdc="http://www.xml.com/books">
<head><title>Book Review</title></head>
<body>
<xdc:bookreview>
     <xdc:title>XML: A Primer</xdc:title>
     <table>
      <tr align="center">
       <td>Author</td><td>Price</td>
       <td>Pages</td><td>Date</td></tr>
      <tr align="left">
       <td><xdc:author>Simon St. Laurent</xdc:author></td>
       <td><xdc:price>31.98</xdc:price></td>
       <td><xdc:pages>352</xdc:pages></td>
       <td><xdc:date>1998/01</xdc:date></td>
      </tr>
     </table>
</xdc:bookreview>
</body>
</html>
这里边有两个title元素,如果不属于不同的命名空间就很难分清楚,解决的办法就是添加一个Namespace

xmlns:xdc=http://www.xml.com/books

这样就不至于将HTML中的title元素和这里的title搞混淆了,而且在读取的时候,比如XmlReader之类的只要指定对应的命名空间 就会读取该命名空间下的节点,这样就不会发生错误了。

同时xmlns=http://www.w3.org/HTML/1998/html4这里就是设置默认的命名空间为http://www.w3.org/HTML/1998/html4

可能大家还会造成一定的误解,xmlns通常会制定为url,但是实际上这些url不一定是要存在的,也不一定是url,只要能够不至于让这个命名空间在其它XML文档出现就可以了,而一般之所以用url这是为了避免重复出现的可能性,因为一般不同的国家不同的程序员不会把Namespace指定为相同的,且url各不相同;但如果仅仅是简单的一些字符串则有可能出现不同xml文档 当命名空间相同的情况,而原本并不属于同一命名空间。也就是说Namespace是没有任何特定含义的,只是用于唯一标识这个命名空间。

XML中的Namespace如果.NET中的类库一样,它们仅用来唯一标识一组元素,就好想不同的程序集中有可能有相同类名的情况,但却不属于不同的命名空间。

不过,我个人觉得XML的命名空间有点像鸡肋,因为它很容易给人造成误解,特别是用url来标识命名空间的时候,在平时运用中也不是很多,网上也有很多讨论XML的Namespace是否应该存在的话题。

参考资料

http://www.xml.com/pub/a/1999/01/namespaces.html

More from Kontext
comment Comments
No comments yet.

Please log in or register to comment.

account_circle Log in person_add Register

Log in with external accounts