Xml名称空间
2010-06-07 11:42
232 查看
所谓
Xml
名称空间
(Namespace)
,就是可以为
Xml
的
Tag
或者属性增加一个前缀,例如
a:book
、
b:name
,这里的
a
、
b
就是前缀。为了区分前缀,每个前缀可以用一个唯一的
URI
来区分,用
xmlns
这个属性定义在
Xml
节点上。可以用下面两种语法定义前缀。
*
xmlns:
前缀
="URI"
*
xmlns="URI"
前一种语法将前缀与
URI
相关联,后一种语法为没有前缀的元素指定一个缺省名称空间
(Namespace)
。这里的
URI
只是一个可以唯一识别的字符串,所指向的网页并不对
Xml
文件产生影响。
举一个非常常见的缺省名称空间
(Namespace)
的例子。
<html xmlns="http://www.sothink.com/product/flashdecompiler/index.htm">
<head>
<title>Virtual Library</title>
</head>
<body>
<p>Moved to <a href="http://www.sothink.com/product/flashdecompiler/index.htm">www.sothink.com</a>.</p>
</body>
</html>
再举一个非常常见的使用前缀的名称空间
(Namespace)
的例子,前缀是
xsl
:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.sothink.com/product/flashdecompiler/index.htm">
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table>
<tr><th>Title</th><th>Artist</th></tr>
<xsl:for-each select="catalog/cd">
<tr><td><xsl:value-of
select="title"/></td><td><xsl:value-of
select="artist"/></td></tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Xml
名称空间
(Namespace)
的混合使用
Xml
规范的介绍中说,
Xml
名字空间
(Namespace)
的作用主要是为了消除歧义,因为不同的
Xml
语句部分可能具有相同名字的
Tag
,通过使用
Xml
名字空间
(Namespace)
,可以为软件开发带来方便。举例而言,下面的例子中两个
Xml
部分都有
Address
,通过名字空间可以很清楚的分开他们。
<Department>
<Name>DVS1</Name>
<addr:Address xmlns:addr=" http://www.sothink.com/product/flash-decompiler-for-mac/index.htm ">
<addr:Street>Wilhelminenstr. 7</addr:Street>
<addr:City>Darmstadt</addr:City>
<addr:State>Hessen</addr:State>
<addr:Country>Germany</addr:Country>
<addr:PostalCode>D-64285</addr:PostalCode>
</addr:Address>
<serv:Server
xmlns:serv="http://www.blabla.cn/servers">
<serv:Name>OurWebServer</serv:Name>
<serv:Address>123.45.67.8</serv:Address>
</serv:Server>
</Department>
但问题是,如果没有名称空间
(Namespace)
,把上述示例写成下面的代码,虽然可以清楚地看到存在明显的冲突,但是显然下面的
Xml
代码更加清晰,而且对软件编写不会造成什么困扰。
Xml
是树状结构,不仅仅可以通过
Tag
的名字来找到需要的元素,还可以通过上下文关系和文档结构找到元素,因此消除歧义并不需要
Xml
名称空间
(Namespace)
。
<Department>
<Name>DVS1</Name>
<Address>
<Street>Wilhelminenstr. 7</Street>
<City>Darmstadt</City>
<State>Hessen</State>
<Country>Germany</Country>
<PostalCode>D-64285</PostalCode>
</Address>
<Server>
<Name>OurWebServer</Name>
<Address>123.45.67.8</Address>
</Server>
</Department>
比较好的名称空间
(Namespace)
的混合使用
看下面的例子:
<site xmlns="http://www.sothink.com/product/flash-decompiler-for-mac/index.htm"
xmlns:ISBN="http://www.sothink.com/product/swfcatcher/firefox/index.php">
<book id="0013" caption="A Tale of Two Cities"
ISBN:id="1234567890" />
</site>
site
和
book
都与缺省名字空间“ http://www.sothink.com/product/flash-decompiler-for-mac/index.htm ”关联,而由于前缀
ISBN
的引入,
book
可以有两个
id
的属性,一个是
id
,一个是
ISBN:id
,这样就解决了名字相同的冲突。这是一个很纯粹的“书本上的例子”,能帮助理解,但是看不出实际上的用途。
下面是一个实际当中的名称空间
(Namespace)
混合使用的例子。这是一个
Atom
引擎返回的结果,缺省名称空间
(Namespace)
是 http://www.sothink.com/product/swfcatcher/ie/ ,当中的
Tag
和属性是给术语订阅软件使用;而名称空间 http://www.sothink.com/product/swfcatcher/safari/index.php 中的
Tag
是给
OpenSearch
这个服务使用的,从而让
Atom
引擎支持
OpenSearch
。在这个例子中,通过名称空间
(Namespace)
的使用,一个
Xml
文件支持了两个不同服务商写的不同软件。
<feed xmlns=' http://www.sothink.com/product/swfcatcher/ie/ '
xmlns:openSearch='http://www.sothink.com/product/swfcatcher/safari/index.php'>
<id>tag:sothink.com,2008:atom-1234567890</id>
<title type='text'>SWF Decompiler</title>
<link rel='alternate' type='text/html' href='http://www.sothink.com/'/>
<openSearch:totalResults>50</openSearch:totalResults>
<openSearch:startIndex>1</openSearch:startIndex>
<openSearch:itemsPerPage>25</openSearch:itemsPerPage>
<entry>
...
</entry>
</feed>
不要在名称空间
(Namespace)
上找麻烦
Xml
名称空间
(Namespace)
规范是最受争议的
Xml
基础规范之一。据说
Xml
开发人员中并没有多少人认为自己确实理解了它,在各种
Xml
开发人员邮件列表中经常出现对它的尖刻批评。
Xml
名称空间
(Namespace)
定义的太过自由,让用户可以非常随意的使用,从而出现大量令人难以接受的
Xml
文本。
多个前缀映射到同一个名称空间,这是一个很坏的例子。
<org>
<a:employee xmlns:a='http://mac.sothink.com'>EP</a:employee>
<b:employee xmlns:b='http://mac.sothink.com'>TSE</b:employee>
</org>
同一个前缀则用于多个名称空间,这是另外一个很坏的例子。
<h:memo xmlns:a='http://mac.sothink.com'>
<h:body xmlns:a='http://www.sothink.com/product/swfcatcher/safari/index.php'>
Now hear <h:i>this</h:i>
</h:body>
</h:memo>
同一名称空间声明了两个不同的前缀,这又是一个很坏的例子。
<org xmlns:a='http://mac.sothink.com'
xmlns:b= 'http://mac.sothink.com'>
<a:employee>EP</a:employee>
<b:employee>TSE</b:employee>
</org>
遗憾的是,从
Xml
名称空间
(Namespace)
的规范来说,都是允许的。这些文本不但让人类难以理解,对软件而言,也是很灾难性的。
1999
年,
Xhtml 1.0
成为最终的建议标准,标准有三种不同的变体,使用三个不同的名称空间。这一决策引起了强烈的反对。因为三个变体之间差别是非常细节的,而过多的名字空间
(Namespace)
会对程序开发造成各种麻烦。最后,
Xhtml
工作组发布了新的规范,使用单一名称空间。这个事件告诉大家,不要在名称空间
(Namespace)
上找麻烦,能简化就简化,只有事情存在真正的区别时才在名称空间
(Namespace)
上加以区分。
规范使用名字空间
一个大家比较公认的
Xml
名称空间
(Namespace)
的使用建议是,把所有的名称空间声明都写在根元素中,而且不要为同一名称空间声明两个不同的前缀。比如下面的
Xml
文本就是比较好的文本。
<memo xmlns='http://www.sothink.com'
xmlns:html='http://www.sothink.com/product/flashdecompiler/index.htm'>
<html:body>
Now hear <html:i>this</html:i>
</html:body>
</memo>
当然作为一般的
Xml
文件,彻底不用名称空间
(Namespace)
可能是更好的建议。
如果你是
W3C
,制定出标准来,那用一个名称空间
(Namespace)
也就用吧。下面列出
W3C
指定的一些常用名字空间。
前缀
URI
xml http://www.w3.org/XML/1998/namespace
xsl http://www.w3.org/1999/XSL/Transform
fo http://www.w3.org/1999/XSL/Format
xsd http://www.w3.org/2001/XMLSchema
html http://www.w3.org/1999/xhtml
svg http://www.w3.org/2000/svg
Xml
名称空间
(Namespace)
,就是可以为
Xml
的
Tag
或者属性增加一个前缀,例如
a:book
、
b:name
,这里的
a
、
b
就是前缀。为了区分前缀,每个前缀可以用一个唯一的
URI
来区分,用
xmlns
这个属性定义在
Xml
节点上。可以用下面两种语法定义前缀。
*
xmlns:
前缀
="URI"
*
xmlns="URI"
前一种语法将前缀与
URI
相关联,后一种语法为没有前缀的元素指定一个缺省名称空间
(Namespace)
。这里的
URI
只是一个可以唯一识别的字符串,所指向的网页并不对
Xml
文件产生影响。
举一个非常常见的缺省名称空间
(Namespace)
的例子。
<html xmlns="http://www.sothink.com/product/flashdecompiler/index.htm">
<head>
<title>Virtual Library</title>
</head>
<body>
<p>Moved to <a href="http://www.sothink.com/product/flashdecompiler/index.htm">www.sothink.com</a>.</p>
</body>
</html>
再举一个非常常见的使用前缀的名称空间
(Namespace)
的例子,前缀是
xsl
:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.sothink.com/product/flashdecompiler/index.htm">
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table>
<tr><th>Title</th><th>Artist</th></tr>
<xsl:for-each select="catalog/cd">
<tr><td><xsl:value-of
select="title"/></td><td><xsl:value-of
select="artist"/></td></tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Xml
名称空间
(Namespace)
的混合使用
Xml
规范的介绍中说,
Xml
名字空间
(Namespace)
的作用主要是为了消除歧义,因为不同的
Xml
语句部分可能具有相同名字的
Tag
,通过使用
Xml
名字空间
(Namespace)
,可以为软件开发带来方便。举例而言,下面的例子中两个
Xml
部分都有
Address
,通过名字空间可以很清楚的分开他们。
<Department>
<Name>DVS1</Name>
<addr:Address xmlns:addr=" http://www.sothink.com/product/flash-decompiler-for-mac/index.htm ">
<addr:Street>Wilhelminenstr. 7</addr:Street>
<addr:City>Darmstadt</addr:City>
<addr:State>Hessen</addr:State>
<addr:Country>Germany</addr:Country>
<addr:PostalCode>D-64285</addr:PostalCode>
</addr:Address>
<serv:Server
xmlns:serv="http://www.blabla.cn/servers">
<serv:Name>OurWebServer</serv:Name>
<serv:Address>123.45.67.8</serv:Address>
</serv:Server>
</Department>
但问题是,如果没有名称空间
(Namespace)
,把上述示例写成下面的代码,虽然可以清楚地看到存在明显的冲突,但是显然下面的
Xml
代码更加清晰,而且对软件编写不会造成什么困扰。
Xml
是树状结构,不仅仅可以通过
Tag
的名字来找到需要的元素,还可以通过上下文关系和文档结构找到元素,因此消除歧义并不需要
Xml
名称空间
(Namespace)
。
<Department>
<Name>DVS1</Name>
<Address>
<Street>Wilhelminenstr. 7</Street>
<City>Darmstadt</City>
<State>Hessen</State>
<Country>Germany</Country>
<PostalCode>D-64285</PostalCode>
</Address>
<Server>
<Name>OurWebServer</Name>
<Address>123.45.67.8</Address>
</Server>
</Department>
比较好的名称空间
(Namespace)
的混合使用
看下面的例子:
<site xmlns="http://www.sothink.com/product/flash-decompiler-for-mac/index.htm"
xmlns:ISBN="http://www.sothink.com/product/swfcatcher/firefox/index.php">
<book id="0013" caption="A Tale of Two Cities"
ISBN:id="1234567890" />
</site>
site
和
book
都与缺省名字空间“ http://www.sothink.com/product/flash-decompiler-for-mac/index.htm ”关联,而由于前缀
ISBN
的引入,
book
可以有两个
id
的属性,一个是
id
,一个是
ISBN:id
,这样就解决了名字相同的冲突。这是一个很纯粹的“书本上的例子”,能帮助理解,但是看不出实际上的用途。
下面是一个实际当中的名称空间
(Namespace)
混合使用的例子。这是一个
Atom
引擎返回的结果,缺省名称空间
(Namespace)
是 http://www.sothink.com/product/swfcatcher/ie/ ,当中的
Tag
和属性是给术语订阅软件使用;而名称空间 http://www.sothink.com/product/swfcatcher/safari/index.php 中的
Tag
是给
OpenSearch
这个服务使用的,从而让
Atom
引擎支持
OpenSearch
。在这个例子中,通过名称空间
(Namespace)
的使用,一个
Xml
文件支持了两个不同服务商写的不同软件。
<feed xmlns=' http://www.sothink.com/product/swfcatcher/ie/ '
xmlns:openSearch='http://www.sothink.com/product/swfcatcher/safari/index.php'>
<id>tag:sothink.com,2008:atom-1234567890</id>
<title type='text'>SWF Decompiler</title>
<link rel='alternate' type='text/html' href='http://www.sothink.com/'/>
<openSearch:totalResults>50</openSearch:totalResults>
<openSearch:startIndex>1</openSearch:startIndex>
<openSearch:itemsPerPage>25</openSearch:itemsPerPage>
<entry>
...
</entry>
</feed>
不要在名称空间
(Namespace)
上找麻烦
Xml
名称空间
(Namespace)
规范是最受争议的
Xml
基础规范之一。据说
Xml
开发人员中并没有多少人认为自己确实理解了它,在各种
Xml
开发人员邮件列表中经常出现对它的尖刻批评。
Xml
名称空间
(Namespace)
定义的太过自由,让用户可以非常随意的使用,从而出现大量令人难以接受的
Xml
文本。
多个前缀映射到同一个名称空间,这是一个很坏的例子。
<org>
<a:employee xmlns:a='http://mac.sothink.com'>EP</a:employee>
<b:employee xmlns:b='http://mac.sothink.com'>TSE</b:employee>
</org>
同一个前缀则用于多个名称空间,这是另外一个很坏的例子。
<h:memo xmlns:a='http://mac.sothink.com'>
<h:body xmlns:a='http://www.sothink.com/product/swfcatcher/safari/index.php'>
Now hear <h:i>this</h:i>
</h:body>
</h:memo>
同一名称空间声明了两个不同的前缀,这又是一个很坏的例子。
<org xmlns:a='http://mac.sothink.com'
xmlns:b= 'http://mac.sothink.com'>
<a:employee>EP</a:employee>
<b:employee>TSE</b:employee>
</org>
遗憾的是,从
Xml
名称空间
(Namespace)
的规范来说,都是允许的。这些文本不但让人类难以理解,对软件而言,也是很灾难性的。
1999
年,
Xhtml 1.0
成为最终的建议标准,标准有三种不同的变体,使用三个不同的名称空间。这一决策引起了强烈的反对。因为三个变体之间差别是非常细节的,而过多的名字空间
(Namespace)
会对程序开发造成各种麻烦。最后,
Xhtml
工作组发布了新的规范,使用单一名称空间。这个事件告诉大家,不要在名称空间
(Namespace)
上找麻烦,能简化就简化,只有事情存在真正的区别时才在名称空间
(Namespace)
上加以区分。
规范使用名字空间
一个大家比较公认的
Xml
名称空间
(Namespace)
的使用建议是,把所有的名称空间声明都写在根元素中,而且不要为同一名称空间声明两个不同的前缀。比如下面的
Xml
文本就是比较好的文本。
<memo xmlns='http://www.sothink.com'
xmlns:html='http://www.sothink.com/product/flashdecompiler/index.htm'>
<html:body>
Now hear <html:i>this</html:i>
</html:body>
</memo>
当然作为一般的
Xml
文件,彻底不用名称空间
(Namespace)
可能是更好的建议。
如果你是
W3C
,制定出标准来,那用一个名称空间
(Namespace)
也就用吧。下面列出
W3C
指定的一些常用名字空间。
前缀
URI
xml http://www.w3.org/XML/1998/namespace
xsl http://www.w3.org/1999/XSL/Transform
fo http://www.w3.org/1999/XSL/Format
xsd http://www.w3.org/2001/XMLSchema
html http://www.w3.org/1999/xhtml
svg http://www.w3.org/2000/svg
相关文章推荐
- 创建、查询、修改带名称空间的 XML 文件的例子
- 创建、查询、修改带名称空间的 XML 文件的例子
- [导入]创建、查询、修改带名称空间的 XML 文件的例子
- Schema和xml名称空间理解笔记
- asp.net下创建、查询、修改带名称空间的 XML 文件的例子
- dom4j和xpath解析带名称空间的xml…
- [导入]创建、查询、修改带名称空间的 XML 文件的例子
- 如何在带有名称空间的xml文件中进行存取操作
- 创建、查询、修改带名称空间的 XML 文件的例子
- XML名称空间小结
- xml文件关键字 & xml名称空间
- XmlTransform 对xml中的特定名称空间的元素进行填充
- XML学习之名称空间
- 要废除 XML 名称空间吗?
- Spring第二篇和第三篇的补充【JavaConfig配置、c名称空间、装载集合、JavaConfig与XML组合】
- xml中的名称空间
- spring的xml中p名称空间与C名称空间简化属性赋值
- Spring根据XML配置文件 p名称空间注入属性的实例
- Spring根据XML配置文件 p名称空间注入属性
- XML 和 WebSphere Studio Application Developer — 第 6 部分: 使用 XML Schema 和 XML Editor 揭开 XML 名称空间神秘的面纱