曝光臺(tái) 注意防騙
網(wǎng)曝天貓店富美金盛家居專(zhuān)營(yíng)店坑蒙拐騙欺詐消費(fèi)者
來(lái)的使用是未知的,F(xiàn)在我們面臨著一種風(fēng)險(xiǎn),即文檔里有一個(gè)模棱兩可的“ L i g h t”元素。
給< L i g h t >聲明兩種用途非常困難。第一個(gè)聲明需有交通信號(hào)燈并枚舉它的顏色屬性。枚舉
非常重要,因?yàn)閷?duì)于交通信號(hào)燈來(lái)說(shuō)只有三個(gè)有效的顏色。一個(gè)應(yīng)用可以基于這些屬性的值用
來(lái)做一些錯(cuò)誤檢查:
194使用XML 高級(jí)編程
下載
第二種聲明在它的顏色屬性上沒(méi)有特別嚴(yán)格的限制。的確,路燈的選擇常常基于價(jià)格,而
不是顏色。但顏色還是作了如下描述:
下面看看這段混有兩種D T D的X M L應(yīng)用文檔:
程序清單7 - 3
從這一點(diǎn),我們不能區(qū)分L i g h t元素指的是交通燈還是街燈(沒(méi)有檢查暗含在D T D中的顏色
的限制)。那么一個(gè)正在接收的應(yīng)用程序怎樣知道顏色這個(gè)屬性是否可接收呢?我們不知道哪一
個(gè)元素查找哪一個(gè)D T D,以及第二個(gè)L i g h t元素的顏色屬性值對(duì)于用于交通燈是無(wú)效的。這個(gè)問(wèn)
題對(duì)格式正規(guī)的文檔就存在多義性。而且如果L i g h t和C o l o r名字需要確認(rèn),我們可能會(huì)給應(yīng)用制
造一大堆混亂,這就是提到的名字沖突問(wèn)題。
7.2 命名空間
XML 命名空間是解決多義性和名字沖突問(wèn)題的方案。根據(jù)W 3 C組織的推薦書(shū)“X M L中的命
名空間”(1 9 9 9年1月1 4日):
⋯⋯一種名稱(chēng)的集合,通過(guò)一種U R I引用來(lái)標(biāo)識(shí),作為元素類(lèi)型和屬性名稱(chēng),它應(yīng)
用于X M L文檔。
命名空間是一組具有結(jié)構(gòu)的名稱(chēng)的集合;這聽(tīng)起來(lái)像一個(gè)D T D,的確,一個(gè)D T D可以是一
種命名空間。在這種情況下, U R I可以是在你的服務(wù)器上的地址,比如:
h t t p : / / w w w . w r o x . c o m / x m l d t d s / P u b C a t a l o g . d t d
盡管U R I不需要是一個(gè)U R L(如果你不能明確二者的差別,我們簡(jiǎn)單描述一下它們)。在這
種情況下,命名空間是指在P u b C a t a l o g . d t d里用到的名稱(chēng)。因此如果我們通過(guò)某種方式把使用
B O O K元素與命名空間聯(lián)系起來(lái),將會(huì)知道在已連接的文檔里任何關(guān)于B O O K的引用將要在我們
的P u b C a t a l o g . d t d里涉及到它的用法。
D T D規(guī)定了一個(gè)文檔的整體結(jié)構(gòu)(并且是那么的準(zhǔn)確),我們正好以一個(gè)命名空間為資源,
規(guī)劃所需要的定義。說(shuō)到這里,一個(gè)命名空間不需要是一個(gè)像D T D那樣的有固定結(jié)構(gòu)的定義,
而這個(gè)有限的定義領(lǐng)域使命名空間廣泛應(yīng)用于X M L。如果命名空間是D T D或者模式,我們使用
的定義必須在所描述的結(jié)構(gòu)和語(yǔ)法上保持連續(xù)性。但是我們可以自由地使用需要的名稱(chēng),并且
使用命名空間來(lái)區(qū)分元素的使用。
第7章命名空間和模式使用195 下載
于是,為了在文檔里有效地使用命名空間,而文檔中連接著來(lái)自不同地方的元素,我們需
要兩部分:
• URI引用,定義了元素的使用方法。
• 一個(gè)別名,我們可以用此來(lái)標(biāo)識(shí)元素來(lái)自哪個(gè)命名空間,這將采用元素前綴的形式(例如
在< c a t a l o g : B o o k >那里,c a t a l o g是模糊的B O O K元素的別名)。
7.3 定義和聲明命名空間
看到了命名空間在X M L里所帶來(lái)的優(yōu)點(diǎn),我們需要仔細(xì)看一下如何真正地使用它們。首先看一
下在文檔里怎樣聲明一個(gè)命名空間,然后看一下在文檔里怎樣使用命名空間,最后再給出幾個(gè)例子。
通常,簡(jiǎn)單描述的特性通常作為屬性來(lái)建模,并且這就是命名空間是怎樣在X M L聲明的。
但這里有幾個(gè)變形與轉(zhuǎn)化,于是我們將要一步一步地去學(xué)習(xí)當(dāng)在一個(gè)X M L文檔里聲明一個(gè)命名
空間時(shí)能描述什么。
7.3.1 聲明一個(gè)命名空間
如果每個(gè)人在他們打算去認(rèn)識(shí)一個(gè)命名空間聲明,我們需要一個(gè)保留的詞匯給他們。命名
空間推薦標(biāo)準(zhǔn)給了我們x m l n s。屬性值就是U R I,其唯一地定義了在用的命名空間。U R I經(jīng)常是
一個(gè)指向D T D的U R L,但它并不必須是。用這種方式管理一個(gè)U R I,以唯一區(qū)分命名空間已經(jīng)足
夠了。這里有幾個(gè)簡(jiǎn)單的命名空間聲明:
關(guān)于We b資源的術(shù)語(yǔ)可能令人混淆。統(tǒng)一資源標(biāo)識(shí)符( U R I )是一些資源的唯一名稱(chēng)。統(tǒng)
一資源定位器( U R L )根據(jù)協(xié)議和網(wǎng)絡(luò)位置定位資源。第一個(gè)例子是U R L,因?yàn)樗试S一
個(gè)瀏覽器利用H T T P從一個(gè)特定的位置得到資源。第二個(gè)例子給資源命名但沒(méi)提供位置。
字面上的u r n來(lái)自于U R I。
最初使用命名空間動(dòng)機(jī)之一是能夠從不同的來(lái)源混合名稱(chēng),從那以來(lái),這對(duì)于能夠提供別
名非常有用,而你能在一個(gè)涉及到聲明的文檔里通篇使用這個(gè)別名。可以靠加個(gè)冒號(hào)和你的別
名到x m l n s屬性而實(shí)現(xiàn)該功能。因此上面的例子就變成了:
在這里前綴c a t a l o g將要涉及到來(lái)自P u b C a t a l o g . d t d的元素,而其他的將要涉及在o r d e r. d t d里
聲明的元素。在這些聲明出現(xiàn)之后,我們能只使用B O O K去提及最初的命名空間聲明,以及用
O R D E R去涉及其他的(不用U R I)。使用這些聲明和它們的別名讓我們提供了更多的信息。
圖7 - 1是組成命名空間聲明的部分。
7.3.2 限定名
如果不能和一個(gè)我們想要使用的特定的名稱(chēng)綁定在一起,聲明一個(gè)命名空間是沒(méi)有什么用
處的。這些已經(jīng)通過(guò)利用限定名做到了。這就可能是你希望的—一個(gè)從命名空間勾畫(huà)出來(lái)并
196使用XML 高級(jí)編程
下載
經(jīng)其限定了的名稱(chēng)。通過(guò)別名創(chuàng)建一個(gè)確認(rèn)過(guò)的名稱(chēng),確切地說(shuō)稱(chēng)作命名空間前綴,并把它放
在名稱(chēng)的開(kāi)始;氐皆谀夸浐捅韱蜠 T D里包括B O O K元素這個(gè)問(wèn)題,假如我們像下面那樣用
c a t a l o g前綴聲明了一個(gè)目錄命名空間:
我們能夠使用前綴c a t a l o g,使元素來(lái)自哪個(gè)命名空間更加明確。于是<catalog:Book />將要
告訴我們B O O K名稱(chēng)來(lái)自catalog 命名空間聲明。同樣Order 命名空間也有B o o k名稱(chēng),但限定過(guò)
的名稱(chēng)避免了多義性和沖突的可能性。名稱(chēng)Ti t l e作為來(lái)自一個(gè)特殊的命名空間被清楚地驗(yàn)證過(guò)。
命名空間前綴經(jīng)常被提及為前綴,而名稱(chēng)本身是基本名。
限定名可被應(yīng)用于元素和屬性名稱(chēng)。這里有一個(gè)混合一些命名空間的例子:
中國(guó)航空網(wǎng) www.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML高級(jí)編程上(71)