11.2.4 XML的命名空间
(1)命名冲突
XML文档中使用的元素不是固定的,两个不同的XML文档使用同一个名字来描述不同类型的元素的情况就可能发生,尤其在把不同的XML文档合而为一时,更容易产生冲突。请先看下面两个例子:
下面的XML文档commodities元素中携带了运动服的信息:
<commodities>
<commodityNo>11010</ commodityNo>
<commodityName>运动服</commodityName>
</commodities>
下面的XML文档在commodities元素中携带了电视机的信息:
<commodities>
<name>长虹彩电</name>
<size>29寸</size>
</commodities>
如果上述两个XML文档片断碰巧在一起使用的话,那么将会出现命名冲突的情况。因为这两个片断都包含了<table>元素,而这两个table元素的定义与所包含的内容又各不相同。
(2)使用前缀解决命名冲突
XML命名空间就提供了一种避免元素命名冲突的方法,即使用前缀解决命名冲突问题。再看下例:
下面的XML文档在元素commodities中携带了运动服的信息:
<s:commodities>
<s:commodityNo>11010</ s:commoditiyNo>
<s:commodityName>运动服</s:commodityName>
</s:commodities>
下面的XML文档在元素commodities中携带了电视机的信息:
<t:commodities>
<t:name>长虹彩电</t:name>
<t:size>29寸</t:size>
</t:commodities>
现在就没有命名冲突了,因为这两个文档对各自的commodities元素使用了不同的前缀,commodities元素在两个文档中分别是<s:commodities> 和<t:commodities>,即通过前缀,我们创建了两个不同的commodities元素。
(3)使用命名空间
下面的XML文档在commodities元素中携带了运动服信息:
<s:commodities Xmlns:s="http://www.w3.org/TR/htm l4/">
<s:commodities>
<s:commodityNo>11010</ s:commoditiyNo>
<s:commodityName>运动服</s:commodityName>
</s:commodities>
下面的XML文档在commodities元素中携带了电视机信息:
<t:commodities Xmlns:f="http://www.w3schools.com/TV">
<t:commodities>
<t:name>长虹彩电</t:name>
<t:size>29寸</t:size>
</t:commodities>
在上述两个例子中除了使用前缀外,两个commodities元素都使用了Xmlns属性,使元素和不同的命名空间关联到一起了。
(4)命名空间属性
命名空间属性一般放置在元素的开始标记处,其使用语法为:Xmlns:namespaceprefix ="namespace"。
在上述的例子中,命名空间定义了一个Internet 地址:Xmlns:t=http://www.w3.org/TR/html4/。
W 3C 命名规范声明命名空间本身就是一个统一资源标识符(Uniform Resource Identifier,URI)。
当我们在元素的开始标记处使用命名空间时,该元素所有的子元素都将通过一个前缀与同一个命名空间相互关联。
注意:用来标识命名空间的网络地址并不被XML解析器调用,XML解析器不需要从这个网络地址中查找信息,该网络地址的作用仅仅是给命名空间一个唯一的名字,因此这个网络地址也可以是虚拟的,然而有很多公司经常把这个网络地址映射到一个真实的Web页面,这个地址包含了关于当前命名空间更详细的信息。
如果省略local_prefix(本地前缀),这时就构成了缺省命名空间:
<commodities Xmlns="http://www.w3.org/TR/html4/">
<commodities>
<commodityNo>11010</ commodityNo>
<commodityName>运动服</commodityName>
</commodities>
如果对一个元素定义了缺省命名空间,那么该元素及其子元素,包括它们的属性都会自动地成为该命名空间的一部分,不用再在每一个元素和属性前面一一标明了。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。