曝光臺 注意防騙
網曝天貓店富美金盛家居專營店坑蒙拐騙欺詐消費者
XML 文檔。語法分析器的任務就是按固定的序列把所有不同文檔組合起來。文檔中可包含另一文檔,或許這個還包含其他文
檔。只要沒有遞歸的文檔包含行為(處理器可報告的錯誤),應用程序就僅能看見一個單一、完整的文檔。從本質上說,這
種機制提供客戶端嵌入的功能。
對XML 而言,可使用外部通用實體引用的方法,在文檔中嵌入另一文檔。在DTD 中,可按下述語法結構聲明外部引用:
<!ENTITY name SYSTEM "URI">
URI 就是Uniform Resource Identifier,與URL 類似,但允許更加精確的資源鏈接規范。從理論上說,URI 把資源與其儲
存位置分開,所以Web 瀏覽器可以選擇最近的或最空閑的幾個鏡像幾個鏡像站點,而無需明確指明該鏈接。URI 領域的研究
非常活躍,爭論激烈,因此在實際應用中和在本書中,URI 就是多用途的URL。
例如,可能想在站點的每個頁面中都放置相同的簽字塊。為明確所見,我們假設簽字塊為清單9-3 所示的XML 代碼,而且假
定可從URL http://metalab.unc.edu/xml/signature.xml.上獲得該代碼。
清單9-3:XML 簽字文件
<?xml version="1.0">
<SIGNATURE>
<COPYRIGHT>1999 Elliotte Rusty Harold</COPYRIGHT>
<EMAIL>elharo@metalab.unc.edu</EMAIL>
</SIGNATURE>
在DTD 中添加如下聲明,可把實體引用&SIG;與這個文件聯系在一起:
XML 實用大全
第 258 頁
<!ENTITY SIG SYSTEM "http://metalab.unc.edu/xml/signature.xml">
也可使用相關的URL。例如:
<!ENTITY SIG SYSTEM "xml/signature.xml">
如果被引用的文件放置于與引用該文件的文件所處的同一目錄中,那么僅需使用一文件名進行引用。例如:
<!ENTITY SIG SYSTEM "signature.xml">
利用上述任一種聲明,僅需使用&SIG;,就可在文檔的任意位置引用簽字文件的內容。如清單9-4 中的簡單的文檔,圖9-2
顯示的是在Internet Explorer 5.0 中交付的文檔。
圖9-2 使用外部通用實體引用的文檔
清單9-4:SIG 外部通用實體引用
<?xml version="1.0" standalone="no">
<!DOCTYPE DOCUMENT [
<!ELEMENT DOCUMENT (TITLE, SIGNATURE)>
<!ELEMENT TITLE (#PCDATA)>
<!ELEMENT COPYRIGHT (#PCDATA)>
<!ELEMENT EMAIL (#PCDATA)>
<!ELEMENT SIGNATURE (COPYRIGHT, EMAIL)>
XML 實用大全
第 259 頁
<!ENTITY SIG SYSTEM
"http://metalab.unc.edu/xml/signature.xml"?
]>
</DOCUMENT>
<TITLE>Entity references</TITLE>
&SIG;
</DOCUMENT>
注意外部實體引用的附加作用,因為文件不再完整,所以XML 聲明中的standalone 屬性值為no。解析文件表明該文件需要
外部文件signature.xml 中的數據。
XML 實用大全
第 260 頁
.4 內部參數實體
通用實體成為文檔的一部分,而非DTD 的組成成分。通用實體引用僅可用于DTD 中能成為文檔組成部分的位置上;通用實體
引用不能插入那些僅為DTD 而非文檔內容的文本。然而在DTD 中的實體引用通常是有用的,因此XML 提供了參數實體引用的
手段。
除了如下兩個關鍵處不同,參數實體引用與通用實體引用非常相似:
1.參數實體引用以百分號%開始,而非&符號。
2.參數實體引用僅可在DTD 中出現,而不能位于文檔內容中。
參數實體引用在DTD 中聲明的方法與通用實體類似,只是在實體名前加一百分號。句法結構如下:
<!ENTITY % name "replacement text">
實體名為實體內容的縮寫。讀者所見為雙引號間的替換文本。例如:
<!ENTITY % ERH "Elliotte Rusty Harold">
<!ENTITY COPY99 "Copyright 1999 %ERH;">
當使用參數實體引用替換通用實體引用后,前文中無法實現的縮寫(#PCDATA)變為有效:
<!ENTITY % PCD "(#PCDATA)">
<!ELEMENT ANTIMAL %PCD;>
<!ELEMENT FOOD %PCD;>
在元素間的子元素和屬性共享通用列表中呈現參數實體引用的真實值。若替換的文本塊較大且使用次數較多,則參數實體引
用用處更大。例如,假設在DTD 聲明中有許多層次結構元素,如PARAGRAPH、CELL 和HEADING。每個該類元素都有確定的內
聯元素數目,類似PERSON、DEGREE、MODEL、PRODUCT、ANIMAL、INGREDIENT 等等的內部元素。這些元素的聲明可能表現為
下述方式:
<!ELEMENT PARAGRAPH
(PERSON | DEGREE | MODEL | PRODUCT | ANTIMAL | INGREDIENT)*>
<!ELEMENT CELL
(PERSON | DEGREE | MODEL | PRODUCT | ANTIMAL | INGREDIENT)*>
<!ELEMENT HEADING
(PERSON | DEGREE | MODEL | PRODUCT | ANTIMAL | INGREDIENT)*>
XML 實用大全
第 261 頁
容器元素都有相同的內容。假如創建了一個新元素如EQUATION、CD 或ACCOUNT,則該元素必須聲明為所有三個元素的子元
素。若在前兩個元素中添加新元素,卻忘了在第三個元素中添加,就會引發問題。若元素的數目為30 或者300 個,而非3
個,則問題將成倍增加。
若對每個容器元素不是給出單獨的子元素列表,則DTD 的維護將較為簡便。替代的方法是子元素列表變為參數實體引用,然
后在每個聲明元素聲明中應用參數實體引用。例如:
<!ENTITY % inlines
"(PERSON | DEGREE | MODEL | PRODUCT | ANTIMAL | INGREDIENT)*">?
<!ELEMENT PARAGRAPH %inlines;>
<!ELEMENT CELL %inlines;>
<!ELEMENT HEADING %inlines;>
當添加新元素時,僅需簡單地改變一個參數實體聲明,而勿需改變3 個、30 或300 個元素聲明。
中國航空網 www.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML實用大全(76)