精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>XML>>(1)XML基本概念>>XML中的Namespaces

主题:XML中的Namespaces
发信人: mysunshine()
整理人: leitiger(2001-06-27 15:23:38), 站内信件
在XML中,用户可以自己定义tag和元素。但我们可以很容易想到,如果把多个XML文件合并为一个时,就很可能出现冲突。Namespaces(名域)就是为了解决这个问题的。对XML namespace严格的定义是:namespace是用URI加以区别的,在XML文件的元素和属性中出现的所有名称的集合。有了namespace,用户就可以保证在他的文件中使用的名称是独一无二的。 在没有namespace的XML 1.0文件中,元素和属性中出现的名称无异于一族没有结构的字符。我们称它们为local names(当地名称)。当地名称在网络上是极不合适的。可以想象,网上会有成千上万的人使用同一个名称,而它们却代表了不同的意义。 
Namespace通过URI区别同名的标识。我们已经完全可以相信不会出现冲突了,因为URI是独立的。

Namespace的声明要用到前缀xmlns 。声明的namespace位于指定的URI,同样的,它也有个名字,我们称这个名字为:namespace名。Namespace名必须独有而一致。有它修饰过的元素就莫认为它由指定URI处的namespace约束。

让我们有一些例子来看一下几种不同namespace的声明。
例一:
<x xmlns:edi='http://ecommerce.org/schema'> 
<!-- the "edi" prefix is bound to http://ecommerce.org/schema for the "x" element and contents --> 
</x> 
x是元素的标识tag名称。
Xmlns指出一个namespace在这个元素中被用到。如果不特殊说明,元素内的标识都要收它的约束。
HTTP的地址表明了特定的schema namespace位置。Edi是在当地,这个namespace的名称。
例二:
<x xmlns:edi='http://ecommerce.org/schema'> 
<!-- the 'price' element's namespace is http://ecommerce.org/schema --> 
<edi:price units='Euro'>32.18</edi:price> 
这个例子给我们展示了edi在元素内部的作用。
例三:
<?xml version="1.0"?>
<!-- all elements here are explicitly in the HTML namespace -->
<html:html xmlns:html='http://www.w3.org/TR/REC-html40'>
<html:head> 
<html:title>Frobnostication</html:title>
</html:head> 
<html:body> 
<html:p> Moved to 
<html:a href='http://frob.com'> here.</html:a>
</html:p> 
</html:body> 
</html:html> 
第三行中html:html说明这个元素的tag名是html,并且,html已在当地的namespace中说明过了。
例四:
<?xml version="1.0"?>
<!-- initially, the default namespace is "books" --> 
<book xmlns='urn:loc.gov:books' xmlns:isbn='urn:ISBN:0-395-36341-6'>
<title>Cheaper by the Dozen</title>
<isbn:number>1568491379</isbn:number>
<notes> 
<!-- make HTML the default namespace for some commentary --> 
<p xmlns='urn:w3-org-ns:HTML'> 
This is a funnybook!
</p> 
</notes>
</book>
第三行中book xmlns='urn:loc.gov:books'说明,如果没有特别说明,在book元素中的标准namespace在urn:loc.gov:books 。所有的tag标识都被默认在这个namespace中。


----
$$      $$$$$$    
$$        $$    
$$        $$    
$$        $$     
$$        $$
$$$$$$  $$$      

[关闭][返回]