曝光臺(tái) 注意防騙
網(wǎng)曝天貓店富美金盛家居專營(yíng)店坑蒙拐騙欺詐消費(fèi)者
這個(gè)元素< B o o k >從我們?cè)谏厦婵吹降牡谝粋(gè)命名空間那里產(chǎn)生,而屬性I S B N從order 命名
空間產(chǎn)生。
7.3.3 范圍
命名空間聲明就像變量在程序語(yǔ)言里那樣有它的作用范圍。這非常重要,這是因?yàn)槊?br />
間并不是總是定義在X M L文檔開(kāi)始,它們能夠被包含在文檔的較后部分。一個(gè)命名空間聲明因
此而應(yīng)用于有聲明出現(xiàn)的元素,盡管與此同時(shí)子元素并沒(méi)有清清楚楚地描述出來(lái)。只要被用在
第7章命名空間和模式使用197 下載
圖7-1
保留關(guān)
鍵字
命名空間前綴
命名空間命名空間
文檔
命名空間聲明的范圍之內(nèi),就能夠訪問(wèn)到命名空間。
但是我們也需要去混合命名空間,在那里元素另外地繼承命名空間的作用域,于是這里有
兩種可以聲明作用域的辦法:缺省和限定。
1. 缺省
如你想象的,在一個(gè)文檔里在每一個(gè)名稱前加一個(gè)前綴非常令人厭煩。實(shí)際上,通過(guò)在的
工具集里引入名稱作用域的概念,能夠分配很多前綴。如果定義了缺省的命名空間,在聲明作
用域里所有沒(méi)經(jīng)驗(yàn)證的名稱被假定屬于缺省的。于是如果你在根元素聲明了一個(gè)缺省的命名空
間,它將被看作整個(gè)文檔將缺省的命名空間,并只能在文檔里聲明過(guò)的更多的命名空間所覆蓋。
通常省略前綴可以將一個(gè)命名空間聲明為某范圍內(nèi)缺省的。
這就是如何在X M L文檔里使用這些去內(nèi)嵌入一些H T M L,這些文檔根據(jù)一種為書(shū)的內(nèi)容所
設(shè)計(jì)的稱作B o o k C o n t e n t . d t d的D T D來(lái)標(biāo)記:
程序清單7 - 4
< Ti t l e > , < A u t h o r > , < C o n t e n t >和< P a r a g r a p h >這些元素以及來(lái)自缺省命名空間的屬性n u m b e r在
< C h a p t e r >元素定義。但是在C h a p t e r元素里,你能看到t a b l e元素和它的子元素—t r和t d。這些
屬于用t a b l e元素聲明的HTML 命名空間。應(yīng)注意到這個(gè)例子里當(dāng)t a b l e元素關(guān)閉時(shí),HTML 命名
空間聲明作用域隨之結(jié)束。下面P a r a g r a p h的出現(xiàn)并不是來(lái)自HTML 命名空間。
當(dāng)一個(gè)前綴被定義并被一個(gè)名稱利用時(shí),明確地聲明了命名空間。由于一個(gè)沒(méi)有限定而被
命名空間接受的名稱,一個(gè)缺省的命名空間必須被聲明為帶有一個(gè)作用域,這個(gè)作用域包括沒(méi)
限定的名稱(不包括前綴)。
2. 限定
如果你能夠清楚地區(qū)分命名空間當(dāng)然非常好。但有些時(shí)候可能想要在一篇文檔里從外面的
命名空間來(lái)瀏覽名稱。你需要一個(gè)更精細(xì)的劃分尺度。除了在整個(gè)空間聲明命名空間,還可以
利用限定過(guò)的名稱。在文檔開(kāi)頭聲明你將需要的命名空間,然后在使用地點(diǎn)限定它們。
198使用XML 高級(jí)編程
下載
程序清單7 - 5
在根元素M e a s u r e m e n t s,我們聲明了命名空間。缺省值涉及到了元素< O u t s i d e A i r > , < F u e l Ta n k >
和< Measurements>。但是我需要用測(cè)量單位驗(yàn)證一部分我們?cè)妹臻gu n i t s和屬性u(píng) n i t s做過(guò)了
的內(nèi)容。當(dāng)這些屬性在文檔里突然出現(xiàn)時(shí),能夠驗(yàn)證那些名稱非常有用。最終,我需要區(qū)分一些
測(cè)量方法的類(lèi)型,即p r o p : Vo l u m e和p r o p : Te m p e r a t u r e。盡管我已經(jīng)在< F u e l Ta n k >元素里聲明這些
prop 命名空間,我還是可以依靠在開(kāi)始聲明命名空間及使用限定名,自由地反復(fù)使用這個(gè)命名空
間(或許在一個(gè)更長(zhǎng)的文檔里)
讓我們更仔細(xì)地看一下命名空間聲明并將它與在接下來(lái)的< C h a p t e r >元素里出現(xiàn)的命名空間
作一個(gè)對(duì)比。那個(gè)聲明被綁定在D T D上,這樣一來(lái)就可能使用與D T D沖突的名稱。在這個(gè)例子
里,我們有唯一的名稱,但沒(méi)有DTD URL。命名空間的存在主要是用來(lái)將名稱組織成特有的集
合以及回避名稱沖突。W3C 命名空間推薦標(biāo)準(zhǔn)沒(méi)有描述任何有關(guān)驗(yàn)證的使用方法。確實(shí), X M L
1 . 0 R e c o m m e n d a t i o n沒(méi)有說(shuō)任何有關(guān)命名空間的東西。XML 模式的成就(后面我們將看到)做
得更多,但當(dāng)前命名空間用于驗(yàn)證的任何東西將要嚴(yán)格地保留一件人造物品—個(gè)人分析器工
具,直到XML 模式成為正式的W 3 C推薦標(biāo)準(zhǔn)。
7.4 在格式正規(guī)的書(shū)籍里使用命名空間實(shí)例
讓我們?cè)囍鴺?biāo)記這本書(shū)的內(nèi)容,并看一下是否能以一種有用的方式利用我們的工具命名空
間。假設(shè)像第3章那樣D T D內(nèi)容已經(jīng)建立。我們將要從現(xiàn)有的目錄D T D借用名稱,而不是再創(chuàng)建
存在于H T M L里的標(biāo)記,同樣將借用命名空間。現(xiàn)在將把驗(yàn)證問(wèn)題放在一邊,并假設(shè)這個(gè)文檔只
需要被格式正規(guī)化。更多注意一下作用域問(wèn)題,這里將要開(kāi)始標(biāo)記這本書(shū),顯示這一章的開(kāi)始
部分:
程序清單7 - 6
第7章命名空間和模式使用199 下載
我在根元素定義了兩個(gè)命名空間。內(nèi)容命名空間是缺省值,因我需要嚴(yán)重依靠那個(gè)命名空
間并且想要限定盡可能少的名稱。我發(fā)現(xiàn)從目錄命名空間借用幾個(gè)名稱非常有用,于是用前綴
c a t聲明了那個(gè)命名空間。這允許我從目錄命名空間引進(jìn)一些屬性,并在根元素包括它們,這些
屬性是從內(nèi)容命名空間得到的。然后,我需要包含一個(gè)列表。這些在H T M L里已經(jīng)建好,于是我
聲明了另一個(gè)命名空間:
<UL xmlns="http://www.w3.org/TR/REC/REC-html40">
我沒(méi)提供一個(gè)前綴,于是H T M L變成了缺省的命名空間,但這只是對(duì)于U L元素和它的子級(jí),
列表項(xiàng)目( L I)。只要將那個(gè)區(qū)域合并,用與U L元素相近的標(biāo)記,我們以缺省值回復(fù)內(nèi)容命名空
間。
開(kāi)始這個(gè)例子之前我要告訴你,這是一個(gè)格式正規(guī)的例子。的確,如果我在指向D T D的命
名空間聲明里提供了U R L并且要求你通過(guò)一個(gè)限定的解析器去運(yùn)行它,你將會(huì)因?yàn)閹准露?br />
驚。XML 1.0 推薦標(biāo)準(zhǔn)在每個(gè)文檔里并沒(méi)有提供一個(gè)以上的D T D。在這里,盡管D T D被用作唯
一的名稱,它們并沒(méi)有因驗(yàn)證而讀出來(lái),原始的D T D沒(méi)有來(lái)自HTML 命名空間名稱的概念。只
要你一試著引進(jìn)外面的名稱,解析器將會(huì)指出錯(cuò)誤,這是由于你引進(jìn)的元素或?qū)傩栽诘谝粋(gè)
中國(guó)航空網(wǎng) www.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML高級(jí)編程上(72)