XML(eXtensible Markup Language)可擴充的標記語言。 xml在web service程式設計中特別重要。在網路傳輸中可以作為傳輸資料的載體。 xml作為元語言,它可以用來標記資料、定義資料類型,是一種允許使用者對自己的標記語言進行定義的元語言。 它非常適合網路傳輸,提供統一的方法來描述和交換獨立於應用程式或供應商的結構化資料。可以實現異質語言、異質平台之間的互動。 XML 文檔定義方式有:文檔類型定義(DTD)和XML Schema。 DTD(Document Type Definition)定義了文件的整體結構以及文件的語法(下面會有相應的例子用於理解)應用廣泛並有豐富的工具支援。 XML Schema的功能更強大,用於定義管理資訊等更強大、更豐富的特徵。 XML能夠更細緻地聲明內容,定義約束,方便跨越多種平台的更有意義的傳輸內容。它提供了一種描述結構資料的格式,簡化了網路中資料交換和表示,使得程式碼、資料和表示分離,並作為資料交換的標準格式,因此它常被稱為智慧資料文件。可以把DTD比喻成鐵鏟,而XML Schema可以說是挖土機,功能更強大。 XML雖然稱作標記語言,但與HTML(超文本標記語言)不同,它的格式更嚴格,標籤必須封閉,顯示與內容分離,XML描述的是文檔的內容與語義而不是文檔該如何顯示。 HTML有固定的標籤,顯示跟內容是一起的,不能創建自己的標籤,而XML是可擴展的,內容與顯示分離,每個元素都成對出現,又開始就有結束,而且XML元素的嵌套關係要保持正確(嵌套中後開始的標記要先結束,先開始的標記要後結束),每一個XML文件中只有一個根元素(Root Element),根元素包含了其他所有的元素。 符合XML語法的XML文檔在未被DTD或XML Schema驗證時叫做良構(well form)的,如果良構的xml文檔被DTD或XML Schema驗證,這種xml文檔稱為有效(Valid)的。
下面以一個學生名冊的xml作為例子
<?xml version="1.0" encoding="utf-8"?> <学生名册> <学生 学号="A1"> <姓名>CIACs</姓名> <性别>男</性别> <年龄>22</年龄> </学生> <学生 学号="A2"> <姓名>zhihao</姓名> <性别>男</性别> <年龄>23</年龄> </学生> </学生名册>
格式良好的xml文檔,XMLSpy的輸出視窗會輸出如下結果
xml的首行一定要是處理指令,且」xml元素嚴格區分大小寫,文件編碼格式預設為“UTF-8”,版本只有1.0。上面的xml文檔只能說是格式良好的xml文檔,不能說是有效的(Vaild)xml文檔。下面我們用兩種方式去驗證它。
首先是透過DTD來對它進行驗證
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE 学生名册 [ <!ELEMENT 学生名册 (学生+)> <!ELEMENT 学生 (名字,性别,年龄)> <!ELEMENT 名字 (#PCDATA)> <!ELEMENT 性别 (#PCDATA)> <!ELEMENT 年龄 (#PCDATA)> <!ATTLIST 学生 学号 ID #REQUIRED> <!ENTITY sex "男"> ]> <学生名册> <学生 学号="A1"> <名字>CIACs</名字> <性别>&sex;</性别> <年龄>22</年龄> </学生> <学生 学号="A2"> <名字>zhihao</名字> <性别>&sex;</性别> <年龄>23</年龄> </学生> </学生名册>
如果驗證通過的話,XMLSpy輸出視窗會有如下的結果顯示
否則就算是多了一個空格都不會通過驗證。這裡我把dtd的驗證寫到了xml中,當然你也可以把它寫到另一個文件中,該文件的後綴名為“.dtd”,然後把它關聯到要驗證的xml文檔中,語法如下
1 DOCTYPE 根元素名稱SYSTEM "*.dtd"> #
此處ID值好像要以字元開頭,如果只是數字通不過驗證。
學生資訊中的性別,我把它定義為實體,然後透過實體引用它的值,要注意實體引用的語法是"&實體名稱;"。
下面透過XML Schema方式來驗證
要驗證的xml文件
<?xml version="1.0" encoding="utf-8"?> <学生名册 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="学生名册.xsd"> <学生 学号="A1"> <姓名>CIACs</姓名> <性别>男</性别> <年龄>22</年龄> </学生> <学生 学号="A2"> <姓名>zhihao</姓名> <性别>男</性别> <年龄>23</年龄> </学生> </学生名册>
XML Schema驗證文件
<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:element name="学生名册"> <xs:complexType> <xs:sequence minOccurs="1" maxOccurs="unbounded"> <xs:element ref="学生"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="学生"> <xs:complexType> <xs:sequence> <xs:element name="姓名" type="xs:string"/> <xs:element name="性别"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:enumeration value="男"/> <xs:enumeration value="女"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="年龄"> <xs:simpleType> <xs:restriction base="xs:integer"> <xs:minExclusive value="0"/> <xs:maxExclusive value="120"/> </xs:restriction> </xs:simpleType> </xs:element> </xs:sequence> <xs:attribute name="学号" type="xs:string" use="required"/> </xs:complexType> </xs:element> </xs:schema>
XMLSpy輸出視窗的輸出結果
要驗證的xml的文檔透過在根元素開始標籤中加入下面的資訊關聯XML Schema文檔
1 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="学生名册.xsd"
以上的文檔都是放在同一路徑下的,所以直接引用檔名就行了。
從上面的兩種驗證方式我們可以很清楚的看出DTD跟XML Schema驗證的區別,兩者同樣是進行xml文檔驗證的,XML Schema提供了比DTD更為強大的功能和更細粒度的資料類型,而且Schema還可以自訂資料類型,其本身就是xml文件,但dtd的語法跟xml的語法不同。雖然從程式碼量來看Schema大於dtd,但當你學過Schema後就會比較喜歡用Schema。
學好xml和它的驗證方式,對於後面學習web service程式設計很重要。
以上是詳細介紹XML DTD於XML Schema學習的範例程式碼(圖文)的詳細內容。更多資訊請關注PHP中文網其他相關文章!