XML Schema 是什么
XML Schema 具體是什么呢?
XML Schema 本身也是一種XML構造,它用來描述[哪個元素,在什么時候出現],[該元素具有什么樣的屬性]等等,也就是說,XML Schema是對XML的樹形構造加以描述說明的一種語言。
原本,使用DTD對XML的樹形構造加以描述說明,但DTD存在嚴重的局限性,DTD不能定義數據的類型,語法也與XML語言完全不一樣,在使用的便利性,數據結構表達的嚴謹性上存在問題。
為什么需要XML Schema?
上面我們解說了XML Schema是什么,但為什么需要XML Schema呢?為了回答這個問題,我們舉個例子。
XML作為數據載體,可以用來描述各種各樣的數據。在系統開發中,可以使用XML在系統(或不同功能模塊)之間傳遞數據,也可以使用XML作為配置文件,數據文件等。
但系統使用XML,需要對XML文件本身加以解析,也就是說,系統需要知道XML文件的格式是什么。
比如下面兩個XML文件:
hello.xml
- <?xml version="1.0"?>
- <hello>World</hello>
order.xml
- <?xml version="1.0"?>
- <order>
- <id>01</id>
- <name>Order Book</name>
- <price>100.00</price>
- </order>
它們的格式不一樣,所代表的意思也不一樣。
一般來說,一個系統只能處理那些事先決定好的具有固定構造的XML文檔。
也就是說,系統在使用它們之前,需要判別它們是否是合法的XML文件格式。
而XML Schema則剛好可以很好地對XML構造加以描述。
事實上,一些XML解析器,以及某些工具需要借助XML Schema來處理XML。
簡單的XML Schema例
我們為上面的例子
hello.xml
- <?xml version="1.0"?>
- <hello>World</hello>
寫一個簡單的XML Schema:
hello.xsd
- <?xml version="1.0" encoding="utf-8"?>
- <xs:schema xmlns:xs="http://www./2001/XMLSchema">
- <xs:element name="hello" type="xsd:string">
- </xs:schema>
解說:
第一行:
<?xml version="1.0" encoding="utf-8"?>
XML申明。XML Schema本身也是XML文檔,所以它遵循XML記述語法。使用encoding屬性指定文檔的編碼格式。
根節點:
<xs:schema xmlns:xs="http://www./2001/XMLSchema">
其中xs是命名空間,schema是根節點名。
注意xs:schema與xmlns:xs中的xs要完全一樣(名稱可以任意,只要一樣就可以),它標明以xs:開頭的節點元素是http://www./2001/XMLSchema定義的元素。
element元素
<xs:element name="hello" type="xs:string">
上面已經說明,xs:element表示element是http://www./2001/XMLSchema中定義的元素。它的name屬性用來定義它所描述的XML文檔中的節點名。type是表示該節點的值的類型。這里的xs:string(string類型)表示hello節點不能包含子節點,不能包含屬性,它的內容值應該是string類型。
除了string之外,XML Schema還有很多其他類型,我們另外的文章再作介紹。
最后使用
</xs:schema>
完成整個XML Schema描述。