XML驗證---DTD與Schema

擁有正確語法的 XML 被稱爲“形式良好”的 XML。

通過某個 DTD 進行了驗證的 XML 是“合法”的 XML。

1. 形式良好的 XML 文檔

一個"形式良好"的 XML 文檔擁有正確的語法

一個"形式良好"的 XML 文檔會遵守前幾章介紹過的 XML 語法規則:

  • XML 文檔必須有根元素
  • XML 文檔必須有關閉標籤
  • XML 標籤對大小寫敏感
  • XML 元素必須被正確的嵌套
  • XML 屬性必須加引號
<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
	<to>George</to>
	<from>John</from>
	<heading>Reminder</heading>
	<body>Don't forget the meeting!</body>
</note>

2. 驗證 XML 文檔

一個合法的 XML 文檔是"形式良好"的 XML 文檔,同樣遵守文檔類型定義 (DTD) 的語法規則

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE note SYSTEM "Note.dtd">
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>  

在上例中,DOCTYPE 聲明是對外部 DTD 文件的引用。下面的段落展示了這個文件的內容。

2.1 XML DTD

DTD 的作用是定義 XML 文檔的結構。它使用一系列合法的元素來定義文檔結構:

<!DOCTYPE note [
  <!ELEMENT note (to,from,heading,body)>
  <!ELEMENT to      (#PCDATA)>
  <!ELEMENT from    (#PCDATA)>
  <!ELEMENT heading (#PCDATA)>
  <!ELEMENT body    (#PCDATA)>
]> 

2.1.1爲什麼使用 DTD?

  • 通過 DTD,每一個 XML 文件均可攜帶一個有關其自身格式的描述。
  • 通過 DTD,獨立的團體可一致地使用某個標準的 DTD 來交換數據。
  • 而應用程序也可使用某個標準的 DTD 來驗證從外部接收到的數據。
  • 還可以使用 DTD 來驗證自身的數據。

2.2 XML Schema(基於 XML 的 DTD 代替者)

  • W3C 支持一種基於 XML 的 DTD 代替者,它名爲 XML Schema:
  • XML Schema 是基於 XML 的 DTD 替代者。
  • XML Schema 描述 XML 文檔的結構。
  • XML Schema 語言也稱作 XML Schema 定義(XML Schema Definition,XSD)。
  • XML Schema 在 2001 年 5 月 2 日成爲 W3C 標準。

實例:

<xs:element name="note">
	<xs:complexType>
	  <xs:sequence>
	    <xs:element name="to"      type="xs:string"/>
	    <xs:element name="from"    type="xs:string"/>
	    <xs:element name="heading" type="xs:string"/>
	    <xs:element name="body"    type="xs:string"/>
	  </xs:sequence>
	</xs:complexType>
</xs:element> 

2.2.1 爲什麼使用Schema

  • 定義可出現在文檔中的元素
  • 定義可出現在文檔中的屬性
  • 定義哪個元素是子元素
  • 定義子元素的次序
  • 定義子元素的數目
  • 定義元素是否爲空,或者是否可包含文本
  • 定義元素和屬性的數據類型

2.2.2 XML Schema是DTD的繼任者

理由如下:

  • XML Schema 可針對未來的需求進行擴展
  • XML Schema 更完善,功能更強大
  • XML Schema 基於 XML 編寫
  • XML Schema 支持數據類型
  • XML Schema 支持命名空間

2.2.3 XML Schema 支持數據類型

通過對數據類型的支持:

  • 可更容易地描述允許的文檔內容
  • 可更容易地驗證數據的正確性
  • 可更容易地與來自數據庫的數據一併工作
  • 可更容易地定義數據約束(data facets)
  • 可更容易地定義數據模型(或稱數據格式)
  • 可更容易地在不同的數據類型間轉換數據

注: 數據約束,或稱 facets,是 XML Schema 原型中的一個術語,中文可譯爲“面”,用來約束數據類型的容許值。

2.2.4 由 XML 編寫 XML Schema 有很多好處:

  • 不必學習新的語言
  • 可使用 XML 編輯器來編輯 Schema 文件
  • 可使用 XML 解析器來解析 Schema 文件
  • 可通過 XML DOM 來處理 Schema
  • 可通過 XSLT 來轉換 Schema

2.2.5 XML Schema 可保護數據通信

  • 當數據從發送方被髮送到接受方時,其要點是雙方應有關於內容的相同的“期望值”
  • 通過 XML Schema,發送方可以用一種接受方能夠明白的方式來描述數據。
  • 一種數據,比如 "03-11-2004",在某些國家被解釋爲11月3日,而在另一些國家爲當作3月11日。
  • 但是一個帶有數據類型的 XML 元素,比如:<date type="date">2004-03-11</date>,可確保對內容一致的理解,這是因爲 XML 的數據類型 “date”
    要求的格式是 "YYYY-MM-DD"

2.2.6 XML Schema 可擴展

XML Schema 是可擴展的,因爲它們由 XML 編寫。

通過可擴展的 Schema 定義,你可以:

  • 在其他 Schema 中重複使用你的 Schema
  • 創建由標準類型衍生而來的你自己的數據類型
  • 在相同的文檔中引用多重的 Schema

2.2.7 形式良好是不夠的

我們把符合 XML 語法的文檔稱爲形式良好的 XML 文檔,比如:

  • 它必須以 XML 聲明開頭
  • 它必須擁有唯一的根元素
  • 開始標籤必須與結束標籤相匹配
  • 元素對大小寫敏感
  • 所有的元素都必須關閉
  • 所有的元素都必須正確地嵌套
  • 必須對特殊字符使用實體

即使文檔的形式良好,仍然不能保證它們不會包含錯誤,並且這些錯誤可能會產生嚴重的後果。

請考慮下面的情況:您訂購的了 5 打激光打印機,而不是 5 臺。通過 XML Schema,大部分這樣的錯誤會被您的驗證軟件捕獲到。

發佈了81 篇原創文章 · 獲贊 18 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章