曝光臺 注意防騙
網曝天貓店富美金盛家居專營店坑蒙拐騙欺詐消費者
<!ENTITY EMAIL "elharo@metalab.unc.edu">
XML 實用大全
第 254 頁
<!ENTITY LM "Last modified: ">
因日期對不同的文檔可能會發生改變,故而忽略了&LM;中的日期。若把日期作為一個實體引用,不會帶來任何好處。
現在,就可把清單9-1 內容重寫成更加簡潔的形式:
<DOCUMENT>
<TITLE>&ERH;</TITLE>
<SIGNATURE>
<COPYRIGHT>©99; &ERH;</COPYRIGHT>
<EMAIL>&EMAIL;</EMAIL>
<LAS _MODIFIED>&LM; March 10, 1999</LAST_MODIFIED>
</SIGNATURE>
</DOCUMENT>
應用實體引用代替書寫文本全文的一個好處是使得更改文本更加簡便,在簡單的DTD 被若干文檔共享的情況下,特別有用。
例如,假設把電子郵件地址從elharo@metalab.unc.edu 更改為eharold@solar.stanford.edu,僅需按如下內容更改DTD 中
的一行內容,而勿需在多個文檔中尋找和替換郵件地址:
<!ENTITY EMAIL "eharold@solar.stanford.edu">
9.2.2 在DTD 中使用通用實體引用
讀者或許對是否能像下面的代碼一樣在一個通用實體引用中包含另一個通用實體引用表示懷疑,如下所示:
<!ENTITY COPY99 "copyright 1999 &ERH;">
實際上該例是合法的,因為ERH 實體作為COPY99 實體的一部分存在,而COPY99 實體本身最終又成為文檔內容的一部分。盡
管存在某些限制,對于DTD 中的其他地方,若最終能轉換成文檔內容的一部分(例如作為缺省屬性值),則也可在此處使用
通用實體引用。第一條限制:語句中不能使用如下的循環引用:
<!ENTITY ERH "©99 Elliotte Rusty Harold">?
<!ENTITY COPY99 "copyright 1999 &ERH;">?
第二條限制:通用實體引用不能插入僅為DTD 的一部分且不能作為文檔內容的文本。例如,下述簡略用法的企圖無法實現:
<!ENTITY PCD "(#PCDATA)">
<!ELEMENT ANTIMAL &PCD;>
XML 實用大全
第 255 頁
<!ELEMENT FOOD &PCD;>
然而,利用實體引用把文本合并到文檔的DTD 中的方法常常是有用的。為此目的,XML 使用將在下章中講述的參數實體引用
來實現這一目的。
對通用實體值的限制僅在于不能直接包含三種字符:% 、&、”,可是能經過使用字符引用包含這三種字符。若&和%僅作為
實體引用的開頭,而不代表自身含義,則可包含其中。限制很少意味著實體可包含標記和分割為多行。例如下面的SIGNATURE
實體是有效的:
"<SIGNATURE>
<COPYRIGHT>1999 Elliotte Rusty Harold</COPYRIGH >
<EMAIL>elharo@metalab.unc.edu</EMAIL>
<LAST_MODIFIED>March 10, 1999</LAST_MODIFIED>
</SIGNATURE>"
>
下一個關心的問題是實體是否可以擁有參數。能否使用上面的SIGNATURE 實體,但卻改變每頁中每一獨立的LAST_MODIFIED
元素的數據?答案是否定的;實體僅為靜態的替換文本。若需要給實體傳送數據,應改為使用標記符,并在樣式單中隨同提
供適當的實現指令。
9.2.3 預定義通用實體引用
XML 預定義五個通用實體引用,如表9-1 所示。五個實體引用出現在XML 文檔中用來代替一些特殊的字符,這些字符如果不
用引用方式就會被解釋為標記。例如實體引用<;代表小于號<,小于符號<可解釋為標記的開頭。
考慮到最大限度的兼容,若計劃使用預定義實體引用,就該在DTD 中聲明這些引用。因為需要避免DTD 中字符的遞歸引用,
所以聲明時必須相當小心。為方便引用的聲明,字符引用使用字符的十六進制ASCII 值。清單9-2 顯示了所需要的聲明。
表9-1 XML 中的預定義實體引用
實體引用 字符
& &
< <
> >
" "
'
清單9-2:預定義通用實體引用聲明
<!ENTITY lt "&#60;">
XML 實用大全
第 256 頁
<!ENTITY gt ">">
<!ENTITY amp "&#38;">
<!ENTITY apos "'">
<!ENTITY quot """>
XML 實用大全
第 257 頁
9.3 外部通用實體
包含基本元素/文檔實體的主文件以外的數據稱為外部實體。通過外部實體引用可在文檔中嵌入外部實體和從若干相互獨立
的文件中獲取數據組建為XML 文檔。
僅使用內部實體的文檔非常類似于HTML 模式。文檔的完整文本存放于單一文件中,圖像、JAVA 小程序、聲音和非HTML 數
據也可鏈接入文件中,但至少在文件中要有所有的文本。當然,HTML 模式存在一些問題。特別在文檔中嵌入動態信息的過
程是一件非常困難的事情。可通過使用CGI、JAVA 小程序所愛好的數據庫軟件、服務器方面提供的手段和其他各種各樣的方
法嵌入動態信息,但HTML 僅提供靜態文檔支持。從若干文件中獲取數據組建文檔的行為必須在HTML 外部進行。HTML 中解
決這問題的最簡單的方法是使用框架,但這是非常糟糕的用戶界面,通常令用戶迷惑和討厭。
部分問題是HTML 文檔不能自然地插入到另一個HTML 文檔中,每個HTML 文檔有且僅有一個BODY,服務器端嵌入法僅能提供
把HTML 片段嵌入文檔的能力,而不是嵌入有效的文檔實體,此外服務器端提供的引用需依賴于服務器的存在,而不是真正
的HTML 文檔部分。
然而,XML 更加靈活。一個文檔的基本元素沒有必要與另一文檔基本元素相同。即使兩個文檔共享同一基本元素,DTD 也可
聲明元素對自身的包含。在適當的時候,XML 標準并不制止結構完整的XML 文檔嵌入另一結構完整的XML 文檔的做法。
但是,XML 走得更遠一些,可定義一個機制,利用這機制可在若干本地或遠程系統上的、較小的XML 文檔的基礎上建立新的
中國航空網 m.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML實用大全(75)