发信人: 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中。
---- $$ $$$$$$
$$ $$
$$ $$
$$ $$
$$ $$
$$$$$$ $$$ |
|