曝光臺 注意防騙
網曝天貓店富美金盛家居專營店坑蒙拐騙欺詐消費者
結構完整但不合法;這是三種類型中最不普遍的情況。
可是,沒有必要要求所有的文檔都是合法的。有時XML 文檔僅需結構完整就足夠了。DTD 在結構完整文檔中也占有一席之地
(雖然不是必需的,但是對合法的文檔來說確實是必需的),并且不進行合法性檢查的XML 處理器可以在DTD 中獲取有用的
信息,而不必完全符合DTD 的要求。在本節中將研究該項內容。
若結構完整但無效的XML 文檔中包含DTD,則該DTD 需具有上一章所研究的相同的通用形式。那就是說,開頭為文檔類型聲
明,且可包含ELEMENT、ATTLIST 和ENITITY 聲明。與有效文檔的區別在于處理器僅處理其ENTITY 聲明。
9.7.1 內部實體
在結構完整的無效文檔中使用DTD 的主要益處在于還可以使用內部通用實體引用,除了五個預定義引用>、<、"、
'和&之外。可按通常的方法簡單地聲明所需的實體,然后在文檔中使用它們。
例如,回顧前面的例子,假如需要實體引用&ERH;用于替換字符串“Elliotte Rusty Harlod”(好吧,那就假設我需要實體
引用&ERH;用于替換字符串“Elliotte Rusty Harlod”),但不想為文檔編寫一個完整的DTD。可按清單9-15 所示,在DTD
中簡單地聲明ERH 實體引用。該文檔僅僅是結構完整,但卻是不合法的文檔;若不追求合法性,該文檔完全可以接受。
清單9-15:DTD 中的ERH 實體引用產生了結構完整但不合法的文檔
<?xml version="1.0" standalone="yes"?>
<!DOCTYPE DOCUMENT [
<!ENTITY ERH "Elliotte Rusty Harold?">
]>
<DOCUMENT >
<TITLE>&ERH;</TI LE>
<SIGNATURE>
<COPYRIGHT >1999 &ERH;</COPYRIGHT>
<EMAIL>elharo@metalab.unc.edu</EMAIL>
<LAST_MODIFIED>March 10, 1999</LAST_MODIFIED>
</SIGNATURE>
</DOCUMENT>
XML 實用大全
第 285 頁
清單9-15 中的文檔類型聲明是少見的。除了在定義ERH 實體引用的之外,只是簡單地說明了基本元素為DOCUMENT。可是文
檔的結構完整性并不要求文檔滿足這一小小的約束。例如清單9-16,顯示的是另一個使用了PAGE 基本元素的文檔,但文檔
類型聲明中卻說明該基本元素應該是DOCUMENT。該文檔結構依然完整,但是與清單9-15 的文檔一樣都是不合法的。
清單9-16:結構完整,但不合法的文檔
<?xml version="1.0"standalone="yes"?>
<!DOCTYPE DOCUMENT [
<!ENTITY ERH "Elliotte Rusty Harold?">
]>
<PAGE>
<TITLE>&ERH;</TI LE>
<SIGNATURE>
<COPYRIGHT >1999 &ERH;</COPYRIGHT >
<EMAIL>elharo@metalab.unc.edu</EMAIL>
<LAST_MODIFIED>March 10, 1999</LAST_MODIFIED>
</SIGNATURE>
</PAGE>
這個DTD 同樣也可包含其他的<!ELEMENT>、<!ATTLIST>和<!NOTATION>聲明,所有這些聲明均被不進行合法性檢查的處理器
忽略,僅處理<!ENTITY>聲明。清單9-17 中的DTD 與其本身的內容相矛盾。例如,根據DTD 定義, ADDRESS 元素本應為空,
但實際上該元素包含幾個未聲明的子元素。另外,要求每個ADDRESS 元素都具有OCCUPANT、STREET、CITY 和ZIP 屬性值,
但是卻無處可尋。基本元素本應為DOCUMENT,而不是ADDRESS。DOCUMENT 元素本應包含的TITLE 和SIGNATURE 均未在DTD
中進行聲明。本文檔結構依然完整,卻無半點合法性。
清單9-17:結構完整卻無效的文檔
<?xml version="1.0" standalone="yes"?>
<!DOCTYPE DOCUMENT [
<!ENTITY ERH "Elliotte Rusty Harold?">
<!ELEMENT ADDRESS EMPTY>
<!ELEMENT DOCUMENT ( TITLE, ADDRESS+, SIGNATURE)>
XML 實用大全
第 286 頁
<!ATLIST ADDRESS OCCUPANT CDATA #REQUIRED>
<!ATLIST ADDRESS DEPAR ME CDATA #IMPLIED>
<!ATLIST ADDRESS COMPANY CDATA #IMPLIED>
<!ATLIST ADDRESS S REET CDATA #REQUIRED>
<!ATLIST ADDRESS CITY CDATA #REQUIRED>
<!ATLIST ADDRESS ZIP CDATA #REQUIRED>
]>
<ADDRESS>
<OCCUPANT>Elliotte Rusty Harold</OCCUPANT >
<DEPARTMENT >Computer Science</DEPARTMENT >
<COMPANY>Polytechnic University</COMPAN Y>
<STREE >5 Metrotech Center</STREE >
<CITY>Brooklyn</CITY>
<STATE>NY</STATE>
<ZIP>11201</ZIP>
</ADDRESS>
9.7.2 外部實體
不進行合法性檢查的處理器可處理外部實體引用,但這不是必須的。詳細的說,例如Mozilla 使用的開放資源XML 語法分析
器并不處理外部實體引用。包含IE 5.0 在內的其余大部分處理器卻要處理外部實體引用。可是不進行合法性檢查的處理器
可能僅處理可析實體,不處理包含非XML 數據(像圖像或聲音)的外部實體引用。
外部實體對存儲樣式文本特別有用。例如,HTML 預定義非ASCII ISO Latin-1 字母的實體引用,這些引用比數字化字符實
體引用稍便于記憶。例如,å 預定義為˚,þ 預定義為þ,ý 預定義為Ý等等。清單9-18 為定義這些引用
的正式ISO DTD(對注釋進行一些輕微的修改,文中巧妙地應用空格,使得文檔看起來形式優美整潔)。
清單9-18:非ASCII ISO Latin-1 字符的DTD
<!-(C) International Organization for Standardization 1986
Permission to copy in any form is granted for use with
中國航空網 www.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML實用大全(82)