的命名空間
11.2.4 XML的命名空間
(1)命名沖突
XML文檔中使用的元素不是固定的,兩個(gè)不同的XML文檔使用同一個(gè)名字來(lái)描述不同類型的元素的情況就可能發(fā)生,尤其在把不同的XML文檔合而為一時(shí),更容易產(chǎn)生沖突。請(qǐng)先看下面兩個(gè)例子:
下面的XML文檔commodities元素中攜帶了運(yùn)動(dòng)服的信息:
<commodities>
<commodityNo>11010</ commodityNo>
<commodityName>運(yùn)動(dòng)服</commodityName>
</commodities>
下面的XML文檔在commodities元素中攜帶了電視機(jī)的信息:
<commodities>
<name>長(zhǎng)虹彩電</name>
<size>29寸</size>
</commodities>
如果上述兩個(gè)XML文檔片斷碰巧在一起使用的話,那么將會(huì)出現(xiàn)命名沖突的情況。因?yàn)檫@兩個(gè)片斷都包含了<table>元素,而這兩個(gè)table元素的定義與所包含的內(nèi)容又各不相同。
(2)使用前綴解決命名沖突
XML命名空間就提供了一種避免元素命名沖突的方法,即使用前綴解決命名沖突問(wèn)題。再看下例:
下面的XML文檔在元素commodities中攜帶了運(yùn)動(dòng)服的信息:
<s:commodities>
<s:commodityNo>11010</ s:commoditiyNo>
<s:commodityName>運(yùn)動(dòng)服</s:commodityName>
</s:commodities>
下面的XML文檔在元素commodities中攜帶了電視機(jī)的信息:
<t:commodities>
<t:name>長(zhǎng)虹彩電</t:name>
<t:size>29寸</t:size>
</t:commodities>
現(xiàn)在就沒有命名沖突了,因?yàn)檫@兩個(gè)文檔對(duì)各自的commodities元素使用了不同的前綴,commodities元素在兩個(gè)文檔中分別是<s:commodities> 和<t:commodities>,即通過(guò)前綴,我們創(chuàng)建了兩個(gè)不同的commodities元素。
(3)使用命名空間
下面的XML文檔在commodities元素中攜帶了運(yùn)動(dòng)服信息:
<s:commodities Xmlns:s="http://www.w3.org/TR/htm l4/">
<s:commodities>
<s:commodityNo>11010</ s:commoditiyNo>
<s:commodityName>運(yùn)動(dòng)服</s:commodityName>
</s:commodities>
下面的XML文檔在commodities元素中攜帶了電視機(jī)信息:
<t:commodities Xmlns:f="http://www.w3schools.com/TV">
<t:commodities>
<t:name>長(zhǎng)虹彩電</t:name>
<t:size>29寸</t:size>
</t:commodities>
在上述兩個(gè)例子中除了使用前綴外,兩個(gè)commodities元素都使用了Xmlns屬性,使元素和不同的命名空間關(guān)聯(lián)到一起了。
(4)命名空間屬性
命名空間屬性一般放置在元素的開始標(biāo)記處,其使用語(yǔ)法為:Xmlns:namespaceprefix ="namespace"。
在上述的例子中,命名空間定義了一個(gè)Internet 地址:Xmlns:t=http://www.w3.org/TR/html4/。
W 3C 命名規(guī)范聲明命名空間本身就是一個(gè)統(tǒng)一資源標(biāo)識(shí)符(Uniform Resource Identifier,URI)。
當(dāng)我們?cè)谠氐拈_始標(biāo)記處使用命名空間時(shí),該元素所有的子元素都將通過(guò)一個(gè)前綴與同一個(gè)命名空間相互關(guān)聯(lián)。
注意:用來(lái)標(biāo)識(shí)命名空間的網(wǎng)絡(luò)地址并不被XML解析器調(diào)用,XML解析器不需要從這個(gè)網(wǎng)絡(luò)地址中查找信息,該網(wǎng)絡(luò)地址的作用僅僅是給命名空間一個(gè)唯一的名字,因此這個(gè)網(wǎng)絡(luò)地址也可以是虛擬的,然而有很多公司經(jīng)常把這個(gè)網(wǎng)絡(luò)地址映射到一個(gè)真實(shí)的Web頁(yè)面,這個(gè)地址包含了關(guān)于當(dāng)前命名空間更詳細(xì)的信息。
如果省略local_prefix(本地前綴),這時(shí)就構(gòu)成了缺省命名空間:
<commodities Xmlns="http://www.w3.org/TR/html4/">
<commodities>
<commodityNo>11010</ commodityNo>
<commodityName>運(yùn)動(dòng)服</commodityName>
</commodities>
如果對(duì)一個(gè)元素定義了缺省命名空間,那么該元素及其子元素,包括它們的屬性都會(huì)自動(dòng)地成為該命名空間的一部分,不用再在每一個(gè)元素和屬性前面一一標(biāo)明了。
免責(zé)聲明:以上內(nèi)容源自網(wǎng)絡(luò),版權(quán)歸原作者所有,如有侵犯您的原創(chuàng)版權(quán)請(qǐng)告知,我們將盡快刪除相關(guān)內(nèi)容。