XML Schema 是基於 XML 的 DTD 替代者。
XML Schema 描述 XML 文檔的結構。
XML Schema 語言也稱作 XML Schema 定義(XML Schema Definition,XSD)。
一、XML Schema 簡介
1、什么是 XML Schema?
XML Schema 的作用是定義 XML 文檔的合法構建模塊,類似 DTD。
XML Schema:
- 定義可出現在文檔中的元素
- 定義可出現在文檔中的屬性
- 定義哪個元素是子元素
- 定義子元素的次序
- 定義子元素的數目
- 定義元素是否為空,或者是否可包含文本
- 定義元素和屬性的數據類型
- 定義元素和屬性的默認值以及固定值
2、XML Schema 是 DTD 的繼任者
我們認為 XML Schema 很快會在大部分網絡應用程序中取代 DTD。
理由如下:
- XML Schema 可針對未來的需求進行擴展
- XML Schema 更完善,功能更強大
- XML Schema 基於 XML 編寫
- XML Schema 支持數據類型
- XML Schema 支持命名空間
3、XML Schema 是 W3C 標准
XML Schema 在 2001 年 5 月 2 日成為 W3C 標准。
二、為什么要使用 XML Schema?
1、XML Schema 比 DTD 更強大
2、XML Schema 支持數據類型
XML Schema 最重要的能力之一就是對數據類型的支持。
通過對數據類型的支持:
- 可更容易地描述允許的文檔內容
- 可更容易地驗證數據的正確性
- 可更容易地與來自數據庫的數據一並工作
- 可更容易地定義數據約束(data facets)
- 可更容易地定義數據模型(或稱數據格式)
- 可更容易地在不同的數據類型間轉換數據
編者注:數據約束,或稱 facets,是 XML Schema 原型中的一個術語,中文可譯為“面”,用來約束數據類型的容許值。
3、XML Schema 使用 XML 語法
另一個關於 XML Schema 的重要特性是,它們由 XML 編寫。
由 XML 編寫 XML Schema 有很多好處:
- 不必學習新的語言
- 可使用 XML 編輯器來編輯 Schema 文件
- 可使用 XML 解析器來解析 Schema 文件
- 可通過 XML DOM 來處理 Schema
- 可通過 XSLT 來轉換 Schema
4、XML Schema 可保護數據通信
當數據從發送方被發送到接受方時,其要點是雙方應有關於內容的相同的“期望值”。
通過 XML Schema,發送方可以用一種接受方能夠明白的方式來描述數據。
一種數據,比如 "03-11-2004",在某些國家被解釋為11月3日,而在另一些國家為當作3月11日。
但是一個帶有數據類型的 XML 元素,比如:<date type="date">2004-03-11</date>,可確保對內容一致的理解,這是因為 XML 的數據類型 "date" 要求的格式是 "YYYY-MM-DD"。
5、XML Schema 可擴展
XML Schema 是可擴展的,因為它們由 XML 編寫。
通過可擴展的 Schema 定義,您可以:
- 在其他 Schema 中重復使用您的 Schema
- 創建由標准類型衍生而來的您自己的數據類型
- 在相同的文檔中引用多重的 Schema
三、如何使用 XSD?
1、XML Schema及其引用
下面這個例子是一個名為 "note.xsd" 的 XML Schema 文件:
<?xml version="1.0"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.w3school.com.cn" xmlns="http://www.w3school.com.cn" elementFormDefault="qualified"> <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> </xs:schema>
note 元素是一個復合類型,因為它包含其他的子元素。其他元素 (to, from, heading, body) 是簡易類型,因為它們沒有包含其他元素。您將在下面的章節學習更多有關復合類型和簡易類型的知識。
以下文件包含對 XML Schema 的引用:
<?xml version="1.0"?> <note xmlns="http://www.w3school.com.cn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3school.com.cn note.xsd"> <to>George</to> <from>John</from> <heading>Reminder</heading> <body>Don't forget the meeting!</body> </note>
2、<schema> 元素
<schema> 元素是每一個 XML Schema 的根元素:
<?xml version="1.0"?> <xs:schema> ... ... </xs:schema>
<schema> 元素可包含屬性。一個 schema 聲明往往看上去類似這樣:
<?xml version="1.0"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.w3school.com.cn" xmlns="http://www.w3school.com.cn" elementFormDefault="qualified"> ... ... </xs:schema>
- xmlns:xs:指當前xsd所要遵循的標簽規范,一般是http://www.w3.org/2001/XMLSchema
- xmlns:一般值為targetNamespace,作用是注明文件內引用類型時的命名空間,防止與其他xsd混淆
- xmlns:?:引用其它命名空間,一般要與import同時使用,之后可以在文件內調用其它文件的類型
- targetNamespace:當前xsd的命名空間,由作者自定義,供XML調用
- elementFormDefault(qualified/unqualified):使用qualified即可,配置更清晰簡單
- attributeFormDefault(qualified/unqualified)