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