在前一節中,我們了解了如何周遊DOM文檔的樹形結構。然而,如果僅僅按照這種方法來操作,會發現需要大量冗長的程式設計和錯誤檢查工作。你不但需要處理元素間的空白字元,還要檢查該文檔包含的節點是否和你期望的一樣。例如,當你在讀入下面這個元素時:

你将首先得到第一個子節點,這是一個含有空白字元“n”的文本節點。你跳過文本節點找到第一個元素節點。然後,你要檢查它的标簽名是不是“name”,還要檢查它是否有一個Text類型的子節點。接下來,轉到下一個非空白字元的子節點,并進行同樣的檢查。那麼,當文檔作者改變了子元素的順序或是加入另一個子元素時又會怎樣呢?要是對所有的錯誤檢查都進行編碼,就會顯得太瑣碎麻煩了,而跳過這些檢查又顯得不慎重。
幸好,XML解析器的一個很大的好處就是它能自動校驗某個文檔是否具有正确的結構。這樣,解析就變得簡單多了。例如,如果知道font片段已經通過了驗證,那麼你不用進一步檢查就能得到其兩個孫節點,并把它們轉換成Text節點,得到它們的文本資料。
如果要指定文檔結構,可以提供一個文檔類型定義(DTD)或一個XML Schema定義。DTD或schema包含了用于解釋文檔應如何構成的規則,這些規則指定了每個元素的合法子元素和屬性。例如,某個DTD可能含有一項規則:
這項規則表示,一個font元素必須總是有兩個子元素,分别是name和size。将同樣的限制用XML Schema表示如下:
與DTD相比,XML Schema可以表達更加複雜的驗證條件(比如size元素必須包含一個整數)。與DTD文法不同,XML Schema自身使用的就是XML,這為處理Schema檔案帶來了友善。
在下一節中,我們将詳細讨論DTD。接着簡要介紹XML Schema的一些基礎知識。最後,我們會展示一個完整的應用程式來示範驗證是如何簡化XML程式設計的。