XML Schema也是一種用於定義和描述XML文檔結構與內容的模式語言,其出現是為了克服DTD的局限性
XML Schema符合XML語法結構
DOM、SAX等XML API很容易解析出XML Schema文檔中的內容
一個XML中個可以有多個schema,多個Schema使用名稱空間(類似於Java的包名)進行區分
XML Schema比XML DTD支持更多的數據類型,並支持用戶自定義新的數據類型
XML Schema定義約束的能力非常強大,可以對XML實例文檔做出細致的語義限制
XML Schema不能像DTD一樣定義實體,比DTD更復雜,但XML Schema現在已經是w3c組織的標准,正逐步取代DTD
后綴名為:*.xsd,必須有一個<schema>根節點
屬性
xmlns="http://www.w3.org/2001/XMLSchema"
表示當前xml文件是一個約束文件
targetNamespace="http://www.waykw.com/20160214"
使用schema約束文件,直接通過這個地址引入約束文件
elementFormDefault="qualified"
語法
(1)有多少個元素就寫多少個<element name="元素名"></element>
(2)元素是復雜的還是簡單的
復雜元素:
<complexType>
<sequence>
子元素
</sequence>
</complexType>
簡單元素寫在復雜元素中:
1 <complexType> 2 <sequence> 3 <element name="name" type="string"></element> 4 <element name="age" type="int"></element> 5 </sequence> 6 </complexType>
All:表示只能出現一次
Choice:只能出現其中的一個
Sequence:元素按照順序出現
maxOccurs="unbounded":表示出現次數沒有限制
maxOccurs="unbounded":表示出現次數沒有限制
1 <sequence> 2 <element name="name" type="string"maxOccurs="unbounded"></element> 3 </sequence>
<any></any>:表示任意元素
定義屬性(必須是復雜元素)
寫在</complexType>之前
<attribute name="p1" type="string"
use="required"></attribute>
name:屬性名
type:屬性值類型
use:屬性約束,optional可選,required必須
(3)在xml中的根元素加入屬性
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 在末尾加入-instance
表示xml是一個被約束文件
xmlns="tartgetNamespace"
schema約束文檔中的targetNamespace
xsi:schemaLocation="tartgetNamespace schema文件路徑"
schema約束文檔的位置
(4)引入多個schema文件,可以給每個約束取一個別名
xmlns:別名="schema文件路徑"
這樣使用另一個schema文件中的約束時就使用<別名:元素名></別名:元素名>