更新時(shí)間:2021年06月22日18時(shí)18分 來(lái)源:傳智教育 瀏覽次數(shù):
一個(gè)XML文檔可以引入多個(gè)約束文檔,但是,由于約束文檔中的元素或?qū)傩远际亲远x的,因此,在XML文檔中,極有可能出現(xiàn)代表不同含義的同名元素或?qū)傩裕瑢?dǎo)致名稱(chēng)發(fā)生沖突。為此,在XML文檔中,提供了名稱(chēng)空間,它可以唯一標(biāo)識(shí)一個(gè)元素或者屬性。這就好比打車(chē)去小營(yíng),由于北京有兩個(gè)地方叫小營(yíng),為了避免司機(jī)走錯(cuò),我們總會(huì)說(shuō)去“去亞運(yùn)村的小營(yíng)”或者“去清河的小營(yíng)”。這時(shí)的亞運(yùn)村或者清河就相當(dāng)于一個(gè)名稱(chēng)空間。
在使用名稱(chēng)空間時(shí),首先必須聲明名稱(chēng)空間。名稱(chēng)空間的聲明就是在XML實(shí)例文檔中為某個(gè)模式文檔的名稱(chēng)空間指定一個(gè)臨時(shí)的簡(jiǎn)寫(xiě)名稱(chēng),它通過(guò)一系列的保留屬性來(lái)聲明,這種屬性的名字必須是以“xmlns”或者以“xmlns:”作為前綴。它與其它任何XML屬性一樣,都可以通過(guò)直接或者使用默認(rèn)的方式給出。名稱(chēng)空間聲明的語(yǔ)法格式如下所示:
<元素名 xmlns:prefixname="URI">在上述語(yǔ)法格式中,元素名指的是在哪一個(gè)元素上聲明名稱(chēng)空間,在這個(gè)元素上聲明的名稱(chēng)空間適用于聲明它的元素和屬性,以及該元素中嵌套的所有元素及其屬性。xmlns:prefixname指的是該元素的屬性名,它所對(duì)應(yīng)的值是一個(gè)URI引用,用來(lái)標(biāo)識(shí)該名稱(chēng)空間的名稱(chēng)。需要注意的是,如果有兩個(gè)URI并且其組成的字符完全相同,就可以認(rèn)為它們標(biāo)識(shí)的是同一個(gè)名稱(chēng)空間。
了解了名稱(chēng)空間的聲明方式,接下來(lái),通過(guò)一個(gè)案例來(lái)學(xué)習(xí),如例1所示。
例1 book.xml
<?xml version="1.0" encoding="UTF-8"?> <it315:書(shū)架 xmlns:it315="http://www.it315.org/xmlbook/schema"> <it315:書(shū)> <it315:書(shū)名>JavaScript網(wǎng)頁(yè)開(kāi)發(fā)</it315:書(shū)名> <it315:作者>張孝祥</it315:作者> <it315:售價(jià)>28.00元</it315:售價(jià)> </it315:書(shū)> </it315:書(shū)架>
在例1中,it315被作為多個(gè)元素名稱(chēng)的前綴部分,必須通過(guò)名稱(chēng)空間聲明將它關(guān)聯(lián)到唯一標(biāo)識(shí)某個(gè)名稱(chēng)空間的URI上,xmlns:it315="http://www.it315.org/xmlbook/schema"語(yǔ)句就是將前綴名it315關(guān)聯(lián)到名稱(chēng)空間"http://www.it315.org/xmlbook/schema"上。由此可見(jiàn),名稱(chēng)空間的應(yīng)用就是將一個(gè)前綴(如it315)綁定到代表某個(gè)名稱(chēng)空間的URI(如http://www.it315.org/xmlbook/schema)上,然后將前綴添加到元素名稱(chēng)的前面(例如,it315:書(shū))來(lái)說(shuō)明該元素屬于哪個(gè)模式文檔。
需要注意的是,在聲明名稱(chēng)空間時(shí),有兩個(gè)前綴是不允許使用的,它們是xml和xmlns。xml前綴被定義為與名稱(chēng)空間名字http://www.w3.org/XML/1998/namespace綁定,只能用于XML1.0規(guī)范中定義的xml:space和xml:lang屬性。前綴xmlns僅僅用于聲明名稱(chēng)空間的綁定,它被定義為與名稱(chēng)空間名字http://www.w3.org/2000/xmlns綁定。
默認(rèn)名稱(chēng)空間
如果一個(gè)文檔有很多元素,并且這些元素都在同一個(gè)名稱(chēng)空間,這時(shí),給每個(gè)元素名稱(chēng)都添加一個(gè)前綴將是一件非常繁瑣的事情。這時(shí)可以使用默認(rèn)的名稱(chēng)空間,默認(rèn)名稱(chēng)空間聲明的語(yǔ)法格式如下所示:
<元素名 xmls="URI">
在上面的語(yǔ)法格式中,URI所標(biāo)識(shí)的是默認(rèn)的名稱(chēng)空間。以這種方式聲明的空間名稱(chēng)將作為其作用域內(nèi)所有元素的默認(rèn)名稱(chēng)空間。接下來(lái),對(duì)例1進(jìn)行修改,將book.xml改為默認(rèn)名稱(chēng)空間的形式,如例2所示。
例2 book.xml
<?xml version="1.0"encoding="UTF-8"?> <書(shū)架 xmlns="http://www.it315.org/xmlbook/schema"> <書(shū)> <書(shū)名>JavaScript網(wǎng)頁(yè)開(kāi)發(fā)</書(shū)名> <作者>張孝祥</作者> <售價(jià)>28.00元</售價(jià)> </書(shū)> </書(shū)架>
在例2中,雖然“書(shū)架”、“書(shū)”、“書(shū)名”、“作者”、“售價(jià)”等元素名稱(chēng)前面沒(méi)有前綴,但是由于"http://www.it315.org/xmlbook/schema"被設(shè)置成了默認(rèn)的名稱(chēng)空間,所以,它們?nèi)匀皇?quot;http://www.it315.org/xmlbook/schema"這個(gè)URI所標(biāo)識(shí)的名稱(chēng)空間中的元素。雖然使用默認(rèn)名稱(chēng)空間會(huì)減少一些書(shū)寫(xiě)工作量,而使用帶前綴的非默認(rèn)名稱(chēng)空間會(huì)增加一些書(shū)寫(xiě)工作量,但合理地命名前綴卻可以為人們?yōu)g覽 XML文檔時(shí)提供便利,例如,book:title很容易讓人聯(lián)想到title是book 詞匯表中定義的元素。
什么是DTD約束?怎樣書(shū)寫(xiě)和操作DTD文檔?
什么是繼承?Java中如何聲明一個(gè)類(lèi)繼承另一個(gè)類(lèi)?
北京校區(qū)