曝光臺 注意防騙
網曝天貓店富美金盛家居專營店坑蒙拐騙欺詐消費者
式使用D T D。一旦選擇了D T D,創(chuàng)作工具就能夠實施D T D中的規(guī)則,它根據D T D中說明的結構,
僅允許用戶在文檔中添加D T D允許的元素或屬性。
XML 1.0推薦標準專門描述了如何構建D T D,以及如何將它與根據其中規(guī)則編寫的文檔相關
聯(lián)。它還定義了解析器應該對D T D執(zhí)行的處理。在本章中,我們將討論使用D T D的原因。除此
之外,我們還將介紹XML 1.0 DTD的語法規(guī)則,以及如何在文檔實例與D T D之間建立關聯(lián)。利
用以上知識,我們將為有關圖書目錄的例子創(chuàng)建D T D。
3.1 為何需要正式的結構
當你編寫的代碼要對以特殊詞匯表為依據的文檔進行操作時,實際上你是在創(chuàng)建文件資料。
你的源代碼中溶入了詞匯表規(guī)則。代碼必須遵循某種結構;當結構改變時,必須修改代碼。通
常情況下,這是可以接受的。設計者可以將他的設計意圖傳達給一小組程序員,應用程序中的
所有代碼都將遵照這些假設進行編寫。畢竟,編寫完全數據驅動的代碼是非常困難的。
然而,如果沒有顯式的文件資料,就無法可靠地捕獲文檔中的錯誤。唯一的錯誤檢測機制
就是運行代碼。如果你的代碼執(zhí)行通過,或者文檔以一種出乎意料的方式偏離了設計者的初衷,
就很難檢測出錯誤。最終,你的應用程序將無法實現預期的目標。
為了解決上述問題,需要依靠清晰、準確的語法規(guī)則文檔,它應該包含詞匯表允許的所有
規(guī)則。如果配備了這樣的文檔,程序員就不必為了確認對詞匯表的理解程度與詞匯表的設計者
進行面對面的交流。如果文檔本身也是用一種正式的(具有嚴格精確的格式)語法書寫的,解
析器就能夠閱讀這些規(guī)則。由此形成了一種可靠錯誤檢測機制。解析器能夠指出任何檢測到的
詞匯表錯誤,你可以先修改這些錯誤,然后再著眼于應用程序的邏輯。
3.1.1 文檔域
X M L文檔可以看作是程序中數據結構的快照。它們用于程序之間的信息交流。這些信息都
屬于某個應用領域—你要解決的問題空間。如果你的X M L詞匯表所構建的模型非常適合于要
解決的問題,就能夠簡化應用程序的編寫和維護。為了設計出有效的X M L詞匯表,你必須深入
分析應用程序要解決的問題。如果你的X M L僅僅符合格式正規(guī)約束,可能很難明確地反映出商
業(yè)過程。你不能理所當然地認為你的X M L例子能夠覆蓋每種可能出現的情況。即使真的如你所
愿,它們也不能以有效的方式傳遞你掌握的知識。
相反, D T D能夠通過定義記錄詞匯表中的所有信息。你在設計詞匯表時考慮到的所有問題
都必須寫入D T D。從而,其他人可以通過D T D了解你對問題的理解(或者至少可以知道你針對
這個問題所記錄下來的內容)。D T D具有以下兩個作用:將你掌握的知識提供給程序,同時獲得
了文件資料。
3.1.2 驗證文檔的有效性
如果格式正規(guī)的文檔是遵循一些隱式規(guī)則編寫的,解析器無法根據這些規(guī)則檢查其中的錯
誤。整個系統(tǒng)的完整性取決于創(chuàng)建和使用X M L的應用程序的完整性。代碼中的錯誤可能很難被
發(fā)現。它們還可能引起其他程序的中斷,或者導致錯誤的數據進入系統(tǒng)。然而, XML 1.0推薦標
準規(guī)定了驗證有效性的解析器應該具有的功能。如果某個X M L文檔引用了D T D,驗證有效性的
解析器應該讀取D T D,并確保文檔符合D T D中描述的語法。如果你需要完善的錯誤檢測機制,
只需使用D T D和驗證有效性的解析器。文檔語法、詞匯表以及指定值中的任何錯誤都逃不過解
析器的眼睛。如果文檔順利通過解析器的有效性驗證,你就可以放心大膽地考慮程序邏輯,不
必再糾纏于語法問題。當然,有效性驗證并不能避免應用程序邏輯方面的失誤,但是它能夠過
濾出代碼中的無效數據。
對于I n t e r n e t應用程序來說,這一點尤為重要。你不能假設你要處理的應用程序經歷了與
你的代碼同樣嚴格的質量控制。為另一個企業(yè)服務的編程小組可能針對特定的業(yè)務或領域實現
了公共的X M L詞匯表。他們對詞匯表的解釋可能與你的想法不同。他們的測試自然也與你的
不盡相同。利用D T D和驗證有效性的解析器,就能夠立即對文檔的完整性進行可靠的檢查。
當然,有效性檢查的程度取決于D T D。了解了以上概念,下面我們開始介紹如何編寫有效的
D T D。
3.2 編寫DTD:通用原則
簡單來說, X M L文檔由元素和相應的屬性組成。雖然我們還可以定義其他項,但元素和屬
性是文檔支持的兩個主要概念。此外,元素的內容是通過其他元素或X M L標準中規(guī)定的基本類
型進行定義的。D T D必須能夠定義文檔中的所有元素,元素可以設置的屬性,以及元素之間的
關系。
52使用XML 高級編程
下載
3.2.1 將DTD與XML文檔相關聯(lián)
D T D是與文檔相關的。通常,文檔中包含一條用于與D T D建立關聯(lián)的指令,當驗證有效性
的解析器讀到該指令時,它獲取D T D,并根據其中定義的規(guī)則對文檔進行檢驗。下面我們將討
論如何在D T D與文檔實例之間建立關聯(lián)。
1. DOCTYPE標記
我們在第2章曾經簡要討論過這個標記。為了將D T D聲明與文檔實例相關聯(lián), XML 1.0提供
了特殊的D O C T Y P E聲明。D O C T Y P E聲明必須位于X M L聲明之后,且在任何文檔元素之前。但
是,X M L聲明和D O C T Y P E聲明之間可以插入注釋和處理指令。
D O C T Y P E聲明包含關鍵字D O C T Y P E、文檔根元素的名稱,以及內容聲明結構。在詳細闡
述多少有些晦澀的語句之前,我們先通過一個例子看一下D O C T Y P E聲明在文檔實例中的位置。
以下是某個X M L文檔的前三行:
第一行的X M L聲明表示該文檔符合XML 1.0的語法,第二行說明該文檔使用C a t a l o g詞匯表—
文檔類型“C a t a l o g”。更確切地說,文檔的第一個元素或稱根元素最好是C a t a l o g,否則解析器會產
生錯誤。在本例中,根元素恰好是C a t a l o g。
程序段中的省略號隱藏了D O C T Y P E聲明的其余部分。真正的聲明到底在哪里呢? X M L規(guī)范
定義了兩種提供聲明的方法。你可以在獨立的D T D文件中提供外部子集聲明,或者在D O C T Y P E
中國航空網 www.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML高級編程上(22)