曝光臺 注意防騙
網(wǎng)曝天貓店富美金盛家居專營店坑蒙拐騙欺詐消費者
清單8-1 顯示了這一文檔,但這次帶有文檔類型聲明。文檔類型聲明聲明了基本元素是GREETING。文檔類型聲明也包含文
檔類型定義,它聲明了GREETING 元素包含可析的字符數(shù)據(jù)。
清單8-1:帶有DTD 的Hello XML
<?xml version="1.0" standalone="yes"?>
<!DOCTYPE GREETING [
<!ELEMENT GREETING (#PCDATA)>
]>
<GREETING>
Hello XML!
</GREETING>
清單3-2 與清單8-1 的唯一區(qū)別在于清單8-1 增加了3 行:
<!DOCTYPE GREETING [
<!ELEMENT GREETING (#PCDATA)>
XML 實用大全
第 182 頁
]>
這幾行是清單8-1 的文檔類型聲明。文檔類型聲明在XML 聲明與文檔本身之間。XML 聲明與文檔類型聲明統(tǒng)稱為文檔序言
(Prolog)。在本例中,<?xml version="1.0" standalone="yes"?>是XML 聲明;<!DOCTYPE GREETING [ <!ELEMENT GREETING
(#PCDATA)> ]>是文檔類型聲明;<!ELEMENT GREETING (#PCDATA)>是文檔類型定義;<GREETING> Hello XML! </GREETING>
是文檔或基本元素。
文檔類型聲明以<!DOCTYPE 為開始,以]>結(jié)束。通常將開始和結(jié)束放在不同的行上,但斷行和多余的空格并不重要。同一文
檔類型聲明也可以寫成一行:
<!DOCTYPE GREETING [<!ELEMENT GREETING (#PCDATA)> ]>
本例中基本元素名稱——GREETING 跟在<!DOCTYPE 之后。這不僅是一個名稱,也是一項要求。任何帶有這種文檔類型聲明的
合法文檔必須有基本元素。在[和]之間的內(nèi)容是文檔類型定義。
DTD 由一系列聲明了特寫的元素、實體和屬性的標(biāo)記聲明所組成。其中的一項聲明基本元素。清單8-1 中整個DTD 只是如下
簡單的一行:
<!ELEMENT GREETING (#PCDATA)>
通常情況下DTD 當(dāng)然會更長更復(fù)雜。
單個行<!ELEMENT GREETING (#PCDATA)>(正如XML 中的大多數(shù)對象一樣是區(qū)分大小寫的)是一項元素類型聲明。在本例中,
聲明的元素名稱是GREETING。它是唯一的元素。這一元素可以包含可析的字符數(shù)據(jù)(或#PCDATA)。可析的字符實質(zhì)上是除
標(biāo)記文本外的任何文本。這也包括實體引用如&,在對文檔進行語法分析時,實體引用就被文本所取代。
可以把這一文檔像通常一樣裝入一種XML 瀏覽器中。圖8-1 顯示了清單8-1 在Internet Explorer 5.0 中的情況。結(jié)果可能
正如人們所料,文檔源以可折疊的大綱視圖出現(xiàn)。Internet Explorer 使<!DOCTYPE GREETING ( View Source for full
doctype…)>一行變藍(lán)指明有文檔類型聲明。
圖8-1 Internet Explorer 5.0 中顯示的帶有DTD 的Hello XML
當(dāng)然,文檔可以與樣式單結(jié)合起來,就像第3 章的清單3-6 中一樣。實際上可以用同一個樣式單。如清單8-2 所示,只要在
序言中增加通常的<?xml-stylesheet?>處理指令。
清單8-2:帶有DTD 和樣式單的Hello XML
<?xml version="1.0" standalone="yes"?>
XML 實用大全
第 183 頁
<?xml-stylesheet type="text/css" href="greeting.css"?>
<!DOCTYPE GREETING [
<!ELEMENT GREETING (#PCDATA)>
]>
<GREETING>
Hello XML!
</GREETING>
圖8-2 顯示的是結(jié)果網(wǎng)頁。這同第3 章中沒有DTD 的圖3-3 相同。格式化時通常不考慮DTD。
圖8-2 Internet Explorer 5.0 所示的帶DTD 和樣式單的Hello XML
XML 實用大全
第 184 頁
8.3 根據(jù)DTD 的合法性檢驗
一個合法的文檔必須符合DTD 指定的約束條件。而且,它的基本元素必須是在文檔類型聲明中指明的。清單8-1 中的文檔類
型聲明和DTD 說明一個合法的文檔必須是這樣的:
<GREETING>
various random text but no markup
</GREETING>
一個合法的文檔不能是這樣的:
<GREETING>
<sometag>various random text</sometag>
<someEmptyTag/>
</GREETING>
也不能是這樣的:
<GREETING>
<GREETING>various random text</GREETING>
</GREETING>
這個文檔必須由放在<GREETING>開始標(biāo)記和<1GREETING>結(jié)束標(biāo)記之間的可析的字符所組成。與只是結(jié)構(gòu)完整的文檔不同,
合法文檔不允許使用任意的標(biāo)記。使用的任何標(biāo)記都要在DTD 內(nèi)聲明。而且,必須以DTD 允許的方式使用。在清單8-1 中,
<GREETING>標(biāo)記只能用作基本元素的開始,且不能嵌套使用。
假設(shè)我們對清單8-2 做一點變動,以<foo>和</foo>替換<GREETING>和</GREETING>標(biāo)記,如清單8-3 所示。清單8-3 是合法
的。它是一個結(jié)構(gòu)完整的XML 文檔,但它不符合文檔類型聲明和DTD 中的約束條件。
清單8-3:不符合DTD 規(guī)則的不合法的Hello XML
<?xml version="1.0" standalone="yes"?>
<?xml-stylesheet type="text/css" href="greeting.css"?>
<!DOCTYPE GREETING [
<!ELEMENT GREETING (#PCDATA)>
]>
XML 實用大全
第 185 頁
<foo>
Hello XML!
</foo>
不是所有的文檔都必須合法,也不是所有的語法分析程序都檢查文檔的合法性。事實上,多數(shù)Web 瀏覽器包括IE
5和Mozilla 都不檢查文檔的合法性。
進行合法性檢查的語法分析程序讀取DTD 并檢查文檔是否合乎DTD 指定的規(guī)則。如果是,則分析程序?qū)?shù)據(jù)傳送到XML 應(yīng)用
程序(如Web 瀏覽器和數(shù)據(jù)庫)。如果分析程序發(fā)現(xiàn)錯誤,它將報告出錯。如果手工編寫XML,應(yīng)在張貼前檢查文檔的合法
性以確保讀者不會遇到錯誤。
在Web 上可找到幾十種不同的進行合法性檢查的語法分析程序。其中多數(shù)是免費的。大多數(shù)是以庫文件的形式存在的接近完
中國航空網(wǎng) www.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML實用大全(58)