XML 命名空間提供了一種避免元素命名衝突的方法。
先給出一個XML文檔樣本:
<?xml version="1.0" encoding="UTF-8"?>
<purchaseOrder orderDate="2006-01-09"
xmlns=http://www.Monson-Haefel.com/jwsbook/PO"
xmlns:addr=http://www.Monson-haefel.com/jwsbook/ADDR">
<accountName>Amazon.com</accountName>
<accountNumber>888</accountNumber>
<addr:address>
<addr:name>amazon.com</addr:name>
<addr:street>185 Mercer Drive</addr:street>
</addr:address>
<address>
<city>XI'AN</city>
<zip>710127</zip>
<address>
<book>
<title>J2EE</title>
<quantity>888</quantity>
</book>
</purchaseOrder >
命名衝突
因為XML文檔中使用的元素不是固定的,那麼兩個不同的XML文檔使用同一個名字來描述不同類型的元素的情況就可能發生。而這種情況又往往會導致命名衝突。如上述例子中的<address>結點攜帶了不同的資訊,但結點名稱卻相同,造成命名衝突。因此需要加首碼"addr"以示區分。
命名空間屬性
命名空間屬性一般放置在元素的開始標記處,其使用文法如下所示:
xmlns:namespace-prefix="namespace"
上例中purchaseOrder 元素屬性中聲明了兩個命名空間,黑體所示。
W3C 命名規範聲明命名空間本身就是一個統一資源標示符(URI),當我們在元素的開始標記處使用命名空
間時,該元素所有的子項目都將通過一個首碼與同一個命名空間相互關聯。
注意:用來標識命名空間的網路地址並不被XML解析器調用,XML解析器不需要從這個網路地址中尋找資訊,該網路地
址的作用僅僅是給命名空間一個唯一的名字,因此這個網路地址也可以是虛擬,然而又很多公司經常把這個網路地址
值象一個真實的Web頁面,這個地址包含了關於當前命名空間更詳細的資訊。
預設命名空間
定義一個預設的XML命名空間使得我們在子項目的開始標記中不需要使用首碼。他的文法如下所示:
<element xmlns="namespace">
如前面例子中xmlns=http://www.Monson-Haefel.com/jwsbook/PO"就聲明了一個預設的命名空間。xmlns屬性使
元素和不同的命名空間關聯在一起。
限定名稱
對於XML而言,與元素名組合在一起的首碼稱為限定名稱(QName)。因此像addr:address這樣的限定名稱可以不引用
http://www.MonsonHaefel.com/jwsbook/ADDR。
QName包括兩個部分,即XML命名空間和位置名稱。如上例中的street元素的限定名稱由命名空間http://www.Monson-haefel.com/jwsbook/ADDRww.Monson-haefel.com/jwsbook/ADDR
和位置名稱street組成。