XML
名字空間提供了一種避免元素名沖突的方法。
b>
名字沖突
由于
XML
中的元素名不是固定的,因此當(dāng)兩個(gè)不同的文檔使用同樣的名字描述兩個(gè)不同類型的元素時(shí)就會(huì)發(fā)生名沖突。
下面這個(gè)
XML
文檔在一個(gè)表格中攜帶了信息
:
< table>
< tr>
< td>Apples< /td>
< td>Bananas< /td>
< /tr>
< /table>
下面這個(gè)
XML
文檔攜帶了關(guān)于一個(gè)表格的信息
(
關(guān)于一件家具的信息
):
< table>
< name>African Coffee Table< /name>
< width>80< /width>
< length>120< /length>
< /table>
如果這兩個(gè)
XML
文檔被加在一起,就會(huì)發(fā)生一個(gè)元素名沖突,因?yàn)檫@兩個(gè)文檔都包含了一個(gè)
< table>
元素,而這兩個(gè)元素的內(nèi)容和定義都不同。
b>
用一個(gè)前綴解決名沖突
下面這個(gè)
XML
文檔在一個(gè)表格中攜帶了信息:
< h:table>
< h:tr>
< h:td>Apples< /h:td>
< h:td>Bananas< /h:td>
< /h:tr>
< /h:table>
而這個(gè)
XML
文檔則攜帶了一件家具的信息:
< f:table>
< f:name>African Coffee Table< /f:name>
< f:width>80< /f:width>
< f:length>120< /f:length>
< /f:table>
現(xiàn)在就沒(méi)有元素名沖突的問(wèn)題了,因?yàn)閮蓚€(gè)文檔分別給他們的
< table>
元素使用了不同的名字:
(< h:table>
和
< f:table>)
。
通過(guò)使用一個(gè)前綴,我們創(chuàng)建了兩個(gè)不同類型的
< table>
元素。
b>
使用名字空間
下面這個(gè)
XML
文檔在一個(gè)表格中攜帶了信息
:
< h:tablexmlns:h="http://www.w3.org/TR/html4/">
< h:tr>
< h:td>Apples< /h:td>
< h:td>Bananas< /h:td>
< /h:tr>
< /h:table>
這個(gè)
XML
文檔攜帶了一件家具的信息
:
< f:tablexmlns:f="http://www.w3schools.com/furniture">
< f:name>African Coffee Table< /f:name>
< f:width>80< /f:width>
< f:length>120< /f:length>
< /f:table>
在這里不是只使用前綴,在
< table>
標(biāo)記上還增加了一個(gè)
xmlns
屬性,這樣就給元素前綴一個(gè)與名字空間相聯(lián)系的有資格的名字。
b>
名字空間屬性
名字空間屬性放在一個(gè)元素的起始標(biāo)記中,它的語(yǔ)法如下
:
xmlns:namespace-prefix="namespace"
在上面的例子中,名字空間本身是用一個(gè)
Internet
地址定義的:
xmlns:f="http://www.w3schools.com/furniture">
W3C
名字空間規(guī)范規(guī)定名字空間本身應(yīng)該是一個(gè)統(tǒng)一資源識(shí)別號(hào)
(URI)
。當(dāng)一個(gè)名字空間在一個(gè)元素的起始標(biāo)記中被定義時(shí),所有有相同前綴的子元素都與同樣的名字空間相關(guān)。
注意:分解器并不使用用來(lái)識(shí)別名字空間的地址去查找信息。這個(gè)地址唯一的目的就是給名字空間一個(gè)唯一的名字。但是,公司經(jīng)常將名空間作為包含名空間信息的實(shí)際
Web
頁(yè)面的一個(gè)指針。訪問(wèn)
http://www.w3.org/TR/html4/
試一試。
b>
統(tǒng)一資源識(shí)別號(hào)
一個(gè)統(tǒng)一資源識(shí)別號(hào)
(URI)
是識(shí)別一個(gè)
Internet
資源的字符串。通常
URI
就是識(shí)別一個(gè)
Internet
域地址的
URL
。另外,有少數(shù)一些類型的
URI
是通用資源名
(URN)
。在我們的例子中只使用
URL
。由于我們這個(gè)家具的例子中使用一個(gè)
Internet
地址去識(shí)別其名字空間,我們可以肯定我們的名字空間是唯一的。