曝光臺(tái) 注意防騙
網(wǎng)曝天貓店富美金盛家居專營(yíng)店坑蒙拐騙欺詐消費(fèi)者
聲明體中包含內(nèi)部子集,或者同時(shí)采用上述兩種方式。在上例中(內(nèi)部D T D與外部D T D相混合
的情況),內(nèi)部D T D可以添加新的聲明,或者覆蓋外部D T D中的聲明。(根據(jù)X M L規(guī)范的定義,
解析器首先讀取內(nèi)部子集,其中的聲明具有較高的優(yōu)先權(quán)。)
在我們討論如何提供聲明之前,還有一個(gè)問題要考慮。正如我們?cè)诘?章所看到的,X M L聲
明可以有s t a n d a l o n e屬性。該屬性可以取以下兩個(gè)值: y e s或n o。如果屬性值為y e s,說(shuō)明文檔實(shí)
例沒有會(huì)影響到傳遞給應(yīng)用程序的文檔信息的外部聲明。如果屬性值為n o,說(shuō)明文檔有外部聲
明,且聲明中包含的值是正確定義文檔內(nèi)容所必需的—例如,特殊的缺省值。
下面的代碼是前一例子的變種,它表示我們需要的所有聲明都包含在文檔中:
在實(shí)際應(yīng)用中,可選的s t a n d a l o n e屬性很少出現(xiàn)。屬性值y e s并不能保證文檔沒有任何類型
的外部依賴,而僅僅意味著即使在處理過(guò)程中不考慮外部聲明,在作為接收方的應(yīng)用程
序關(guān)注的范圍內(nèi),文檔不會(huì)產(chǎn)生錯(cuò)誤(即使文檔可能是格式正規(guī)的X M L)。因此,它的主
要用途是作為解析器和其他應(yīng)用程序的標(biāo)志,表示是否需要獲取外部?jī)?nèi)容。
現(xiàn)在,讓我們清除前兩個(gè)程序段中的省略號(hào)。D O C T Y P E聲明由以下部分組成:關(guān)鍵字、文
檔的根元素名稱(在本例中是C a t a l o g)、可選的外部標(biāo)識(shí)符,以及可選的標(biāo)記聲明塊。外部標(biāo)識(shí)
符用于外部D T D(外部子集)的命名和定位,標(biāo)記聲明塊是由標(biāo)記聲明(內(nèi)部子集)構(gòu)成的。
首先讓我們來(lái)討論標(biāo)記聲明塊。
第3章文檔類型定義使用53 下載
2. 內(nèi)部D T D子集
如果必要的話,我們可以將所需的全部聲明都包含在內(nèi)部子集中,正如你在上一章所看到
的例子。D O C T Y P E標(biāo)記中的標(biāo)記聲明塊由以下幾部分構(gòu)成:左方括號(hào)、聲明列表和右方括號(hào)。
下面是一個(gè)簡(jiǎn)單的例子:
內(nèi)部D T D非常有用。你永遠(yuǎn)也不會(huì)為找不到D T D而頭疼。然而,即便是最簡(jiǎn)單的X M L詞匯
表,內(nèi)部D T D也會(huì)令文檔的長(zhǎng)度劇增。另外,無(wú)論文檔是由人編寫的,還是由程序生成的,每
個(gè)文檔實(shí)例中都必須包含相同的內(nèi)部D T D。即使文檔的用戶不打算驗(yàn)證文檔的有效性,這些聲
明也必須隨文檔一起傳輸。我們不推薦頻繁地使用內(nèi)部D T D,但是對(duì)于簡(jiǎn)單的詞匯表—特別
是測(cè)試標(biāo)記原型時(shí),它們還是值得考慮的。
在某些情況下,設(shè)計(jì)人員可能希望同時(shí)使用內(nèi)部D T D和外部D T D。內(nèi)部D T D用于添加聲明。
當(dāng)內(nèi)部D T D與外部D T D聲明的項(xiàng)目重復(fù)時(shí),內(nèi)部聲明將取代外部聲明。這一特征使得設(shè)計(jì)者能
夠根據(jù)特殊文檔的需求調(diào)整聲明,但是使用該特征時(shí)應(yīng)該謹(jǐn)慎。如果我們過(guò)度頻繁地覆蓋外部
D T D,就不太合適了—這充分證明了初始設(shè)計(jì)的失敗。
3. 外部D T D
從某種角度講,外部D T D更加靈活。上一章曾經(jīng)介紹過(guò)如何引用D T D;現(xiàn)在我們將進(jìn)行更
加詳細(xì)的闡述。在本例中, D O C T Y P E聲明不僅包含常規(guī)的關(guān)鍵字和根元素名稱,而且包含指示
外部D T D源的關(guān)鍵字和D T D的位置。X M L規(guī)范定義了幾種聲明源的方法。聲明中可以使用關(guān)鍵
字S Y S T E M或P U B L I C。如果使用S Y S T E M關(guān)鍵字,解析器將僅根據(jù)給出的U R L尋找D T D—
D T D通過(guò)U R L顯式地直接定位。在我們的例子中,位于“ S Y S T E M”關(guān)鍵字之后的是用于命名
D T D文件的U R L。
用于定位D T D的U R L不應(yīng)該包含段標(biāo)識(shí)符(字符#加名稱)。XML 1.0建議指出,如果U R L
中包含該標(biāo)識(shí)符,解析器將產(chǎn)生錯(cuò)誤指示。
下面是兩個(gè)例子:
和:
在第一個(gè)例子中,對(duì)于包含的D O C T Y P E聲明的文檔,驗(yàn)證其有效性所需的所有聲明都位于
文件P u b C a t a l o g . d t d中。在第二個(gè)例子中, D T D文件位于虛構(gòu)的世界圖書館組織的We b服務(wù)器上。
在以上兩例中,P u b C a t a l o g . d t d文件應(yīng)該包含C a t a l o g元素的聲明。
然而,如果D T D源關(guān)鍵字為P U B L I C,情況就略微復(fù)雜一些。P U B L I C關(guān)鍵字用于聲明眾所
周知的詞匯表。例如,假設(shè)出版界已經(jīng)對(duì)圖書種類D T D達(dá)成了大量共識(shí)。需要根據(jù)該詞匯表解
析文檔的應(yīng)用程序可能會(huì)通過(guò)某種策略來(lái)定位D T D。如果這個(gè)D T D非常普及,應(yīng)用程序或許有
本地拷貝。直接使用本地拷貝可能比從We b服務(wù)器上遠(yuǎn)程下載更可取。D T D可能存放在數(shù)據(jù)庫(kù)
中,或者可以通過(guò)其他與應(yīng)用程序相關(guān)的技術(shù)獲得。如果使用P U B L I C關(guān)鍵字和U R I,應(yīng)用程序
就有機(jī)會(huì)利用自己的算法定位D T D。
54使用XML 高級(jí)編程
下載
統(tǒng)一資源標(biāo)識(shí)符(URI)可以是URL,也可以是一個(gè)單獨(dú)的名字。
例如:
如果U R I“u n i v e r s a l / P u b l i s h i n g / B o o k”對(duì)于處理這類文檔的應(yīng)用程序來(lái)說(shuō)是已知的,應(yīng)用程
序可以通過(guò)某種有效的方式自行尋找D T D。或許我們恰好有適合該領(lǐng)域的解析器。它可能有
D T D的本地拷貝,或者它可以訪問由本地?cái)?shù)據(jù)庫(kù)服務(wù)器維護(hù)的D T D。最關(guān)鍵的是,尋找D T D的
方法主要是由負(fù)責(zé)處理D O C T Y P E聲明的應(yīng)用程序確定的。
當(dāng)然,“眾所周知”通常是相對(duì)的。因此, XML 1.0允許P U B L I C聲明同時(shí)有公共U R I和系統(tǒng)
標(biāo)識(shí)符。如果使用文檔的應(yīng)用程序或解析器不能從P U B L I C關(guān)鍵字提供的U R I定位D T D,它必須
使用系統(tǒng)標(biāo)識(shí)符。
在本例中,文檔的設(shè)計(jì)者允許作為接收方的應(yīng)用程序根據(jù)公共的U R I自行尋找D T D。如果該
過(guò)程失敗,對(duì)我們的出版領(lǐng)域不熟悉的通用解析器一般屬于這種情況,應(yīng)用程序可以從地址為
w w w. u n i v e r s a l l i b r a r y. o rg的We b服務(wù)器請(qǐng)求指定的文件。
3.2.2 基本標(biāo)記聲明
D T D通過(guò)四種標(biāo)記聲明定義X M L文檔中允許出現(xiàn)的內(nèi)容。表3 - 1顯示了與這些聲明相關(guān)的關(guān)
鍵字及其含義。前兩個(gè)聲明與X M L文檔中的信息有關(guān)—元素和屬性。
表3 - 1
D T D關(guān)鍵字含義
E L E M E N T X M L元素類型聲明
AT T L I S T 特定元素類型可設(shè)置的屬性及這些屬性的允許值聲明
中國(guó)航空網(wǎng) www.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML高級(jí)編程上(23)