曝光臺 注意防騙
網(wǎng)曝天貓店富美金盛家居專營店坑蒙拐騙欺詐消費(fèi)者
E N T I T Y 可重用的內(nèi)容聲明
N O TAT I O N 不需要解析的外部內(nèi)容(例如:二進(jìn)制數(shù)據(jù))的格式聲明,以及用于
處理這些內(nèi)容的外部應(yīng)用程序
后兩種聲明起輔助作用。特別是實(shí)體( E N T I T Y)用于簡化X M L詞匯表的設(shè)計(jì)。它所包含的
內(nèi)容通常會在D T D或文檔中反復(fù)出現(xiàn),因此需要創(chuàng)建特殊的聲明。該聲明的作用類似于C / C + +
中的i n c l u d e語句,它以特定的名稱作為內(nèi)容的替代符。
表示法(N O TAT I O N)用于處理非X M L內(nèi)容。表示法用于聲明特殊的數(shù)據(jù)類,并將之與外
部程序相關(guān)聯(lián)。這個(gè)外部程序就成為所聲明的數(shù)據(jù)類的處理器。舉例來說,如果你的文檔與
J P E G圖像有關(guān),你可能需要相關(guān)的顯示程序來接收和展示J P E G二進(jìn)制數(shù)據(jù)。當(dāng)然,你的文檔依
賴于接收系統(tǒng)能夠提供的處理器。有些設(shè)計(jì)者為了獲得可移植性,寧愿放棄處理器引用。在那
種情況下,表示法將退化為一種輸入機(jī)制。
我們將在下一節(jié)詳細(xì)討論表示法和實(shí)體。
3.3 正式的DTD結(jié)構(gòu)
現(xiàn)在,你已經(jīng)對D T D有了一定程度的了解,并學(xué)會了如何將它與文檔相關(guān)聯(lián)。我們希望前
第3章文檔類型定義使用55 下載
面介紹的例子能夠激發(fā)起你進(jìn)一步學(xué)習(xí)如何聲明文檔結(jié)構(gòu)的興趣。除了前面提到的四個(gè)標(biāo)記聲
明,D T D還將用到其他結(jié)構(gòu)。然而,我們首先來關(guān)注一下實(shí)體。
下面將要介紹的所有語法都在XML 1.0推薦標(biāo)準(zhǔn)(h t t p : / / w w w. w 3 . o rg / T R / R E C - x m l /)中有
明確的定義。有時(shí),建議中的內(nèi)容可能會令你感到迷惑,那么不妨看看由Tim Bray編寫的
X M L規(guī)范解讀(Annotated XML Specification),Tim Bray是X M L推薦標(biāo)準(zhǔn)的作者之一。
該文檔位于h t t p : / / w w w. x m l . c o m / a x m l / t e s t a x m l . h t m。它是用X M L創(chuàng)建的,因此也不失為一
個(gè)有價(jià)值的XML應(yīng)用實(shí)例。
3.3.1 實(shí)體
X M L提供了聲明內(nèi)容塊的方法,你可以根據(jù)需要多次引用這些內(nèi)容塊,它不僅能夠節(jié)省空
間,而且能夠減少文檔創(chuàng)作者的代碼輸入量。為了在D T D中聲明實(shí)體,需要定義實(shí)體的名稱及
它引用的內(nèi)容。當(dāng)你需要使用它時(shí),采用特殊的語法通過名稱進(jìn)行引用,這種特殊的語法能夠
說明你所提供的名稱是實(shí)體引用。它類似于C / C + +中的d e f i n e指令,或其他形式的可替換的樣板
文本或內(nèi)容。文檔內(nèi)容中使用的實(shí)體稱為通用實(shí)體( general entity)。我們可以根據(jù)是否解析實(shí)
體的內(nèi)容將定義進(jìn)一步細(xì)化。解析實(shí)體( parsed entity)是X M L內(nèi)容。實(shí)體的值稱為置換文本。
相反,未解析實(shí)體( unparsed entity)可以是非文本內(nèi)容。即使它是文本,并不一定要求是X M L。
這就是“未解析”一詞的來歷。如果你知道用于替換的內(nèi)容不是X M L,或者甚至不是文本,那
么解析器就沒有必要對它進(jìn)行處理。另一方面,解析實(shí)體是要粘貼到文檔內(nèi)容中的X M L,因此,
解析器就必須將它傳遞到文檔中。
下面我們將詳細(xì)地討論實(shí)體的分類,再次重申并擴(kuò)展上一章介紹的內(nèi)容。
1. 預(yù)定義實(shí)體
X M L必須保留某些字符用于本身格式的定義,
例如:尖括號。另外,有些字符是不可打印的。鑒
于此,X M L提供了一些預(yù)定義的實(shí)體,用戶可以利
用這些實(shí)體在文檔中使用上述字符,并保證不產(chǎn)生
沖突。因此在元素的文本內(nèi)容中,可以用實(shí)體表示
一些特殊字符,以免它們在解析時(shí)與文檔的標(biāo)記混
淆。
任何字符都可以表示為數(shù)字引用。具體方法是在符號“ & #”之后加上字符的數(shù)字值和分號
(它們之間沒有空格)。例如,大于號可以表示為& # 6 2 ;。對于使用頻率極高的字符, X M L提供
了預(yù)定義的實(shí)體(參見表3 - 2)。
例如:
2. 通用實(shí)體
通用實(shí)體是最簡單的實(shí)體形式。它能夠聲明與某個(gè)名稱相關(guān)聯(lián)的可解析的文本塊,我們將
通過該名稱引用相應(yīng)的文本。這類實(shí)體聲明包含關(guān)鍵字E N T I T Y、實(shí)體名稱和替換值。例如:
56使用XML 高級編程
下載
表3 - 2
字符實(shí)體引用
< & l t ;
> & g t ;
& & a m p ;
'(單引號) & a p o s ;
"(雙引號) & q u o t ;
利用這個(gè)聲明,我們只需引用名稱“ c o p y r i g h t”,就能夠在文檔內(nèi)容的任何位置插入版權(quán)信
息。當(dāng)然,進(jìn)行實(shí)體引用時(shí),我們需要通過某種方式告訴解析器這是實(shí)體引用,以免它將實(shí)體
名稱與標(biāo)記文本混淆。為此,我們在名稱之前增加符號&,在其后增加分號。名稱與定界符( &
和;)之間不含空格。例如:
值得注意的是,由于字符&是X M L的保留字符,因此如果我們需要在文檔中使用它,必須
借助(前面介紹的)預(yù)定義實(shí)體。
當(dāng)實(shí)體引用在解析過程中被替換為置換文本時(shí),其結(jié)果必須是格式正規(guī)的XML。
通用實(shí)體也有外部形式,即:將置換文本存放在外部文件中。其聲明形式如下:
關(guān)鍵字S Y S T E M用于指示外部源,后面的U R L表示文件的位置。你也可以使用P U B L I C關(guān)鍵
字、U R I標(biāo)識符和后備的U R L組合。對于文檔中的外部實(shí)體, X M L建議有一定的限制:屬性值
中不能引用可解析的外部實(shí)體,以避免實(shí)體的字符編碼與主文檔的編碼形式不同。
X M L推薦標(biāo)準(zhǔn)不要求不驗(yàn)證有效性的解析器讀取并插入外部實(shí)體的內(nèi)容。
最后,實(shí)體不能包含直接或間接的對自身的引用。因此以下聲明是不合法的:
現(xiàn)在,讓我們來討論另一種實(shí)體:參數(shù)實(shí)體。
3. 參數(shù)實(shí)體
僅僅在D T D中使用的解析實(shí)體稱為參數(shù)實(shí)體。它使我們能夠簡便地引用或修改D T D中常用
的結(jié)構(gòu),我們只需維護(hù)一處代碼。與逐一修改D T D中出現(xiàn)每個(gè)結(jié)構(gòu)相比,這種方法簡單得多,
但是當(dāng)我們打算擴(kuò)展結(jié)構(gòu)時(shí),仍然需要編輯D T D。參數(shù)實(shí)體聲明由以下幾部分組成: E N T I T Y關(guān)
鍵字、百分號、名稱和替換值。例如:
關(guān)鍵字CDATA代表字符數(shù)據(jù);我們將在屬性一節(jié)詳細(xì)討論它。
上面的置換文本是屬性列表聲明的一部分,它包含三個(gè)普通屬性。當(dāng)解析器處理上述語句
中國航空網(wǎng) m.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML高級編程上(24)