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