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