合乎規范的 XML 處理器可以分為兩類:進行驗證的和不進行驗證的。
進行驗證和不進行驗證的處理器都必須報告在文件實體的內容中和任何其他它們讀到的已析實體中對格式正確性約束的違反。
[定義:進行驗證的處理器必須,由使用者選擇,報告違反 DTD 聲明中所述約束的情況以及不滿足本規范中給出的有效性約束的情況。] 要完成這一點,進行驗證的 XML 處理器必須讀取和處理整個 DTD 和所有在文件中引用的外部已析實體。
不進行驗證的處理器只被要求檢查文件實體和整個內部 DTD 子集的格式正確性。[定義:雖然它們不被要求檢查文件的有效性,但它們必須處理它們讀取的所有內部 DTD 子集中的聲明和所有參數實體,直到遇到第一個對它們沒有讀取的參數實體的引用;也就是說,它們必須根據這些聲明中的信息規范化屬性值,包含內部實體的置換文本,並提供缺省屬性值。] 除了 standalone="yes"
的情況,它們在遇到第一個對它們沒有讀取的參數實體的引用後,不應處理其後的實體聲明或屬性表聲明,因為此實體中包含的聲明可能覆蓋前面的聲明。
進行驗證的處理器的行為是高度可預測的;它必須讀取文件的所有部分,報告所有對格式正確性和有效性的違反。對一個不進行驗證的處理器的要求要低一點;它不需要讀取文件實體以外的任何文件部分。這對 XML 的處理器的使用者而言可能會有兩個重要的影響:
為了使不同 XML 處理器間的互操作有最大的可靠性, 使用不進行驗證的處理器的應用不應依賴於不要求這些處理器具備的動作。 那些要求使用如缺省值或在外部實體中聲明內部實體等功能的應用應該使用進行驗證的 XML 處理器。