XML&DTD&XML Schema學習

  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)的。web

下面以一個學生名冊的xml做爲例子編程

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <學生名冊>
 3     <學生 學號="A1">
 4         <姓名>CIACs</姓名>
 5         <性別></性別>
 6         <年齡>22</年齡>
 7     </學生>
 8 
 9     <學生 學號="A2">
10         <姓名>zhihao</姓名>
11         <性別></性別>
12         <年齡>23</年齡>
13     </學生>
14 </學生名冊>

格式良好的xml文檔,XMLSpy的輸出窗口會輸出以下結果網絡

 

xml的首行必定要是<?xml version="1.0"?>處理指令,且」<?xml」之間不能有空白,xml元素嚴格區分大小寫,文檔編碼格式默認爲「UTF-8」,版本只有1.0。上面的xml文檔只能說是格式良好的xml文檔,不能說是有效的(Vaild)xml文檔。下面咱們用兩種方式去驗證它。工具

首先是經過DTD來對它進行驗證學習

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE 學生名冊 [
 3 <!ELEMENT 學生名冊 (學生+)>
 4 <!ELEMENT 學生 (名字,性別,年齡)>
 5 <!ELEMENT 名字 (#PCDATA)>
 6 <!ELEMENT 性別 (#PCDATA)>
 7 <!ELEMENT 年齡 (#PCDATA)>
 8 <!ATTLIST 學生 學號 ID #REQUIRED>
 9 <!ENTITY  sex "男">
10 ]>
11 
12 <學生名冊>
13     <學生 學號="A1">
14         <名字>CIACs</名字>
15         <性別>&sex;</性別>
16         <年齡>22</年齡>
17     </學生>
18     
19     <學生 學號="A2">
20         <名字>zhihao</名字>
21         <性別>&sex;</性別>
22         <年齡>23</年齡>
23     </學生>
24 </學生名冊>

若是驗證經過的話,XMLSpy輸出窗口會有以下的結果顯示ui

不然就算是多了一個空格都不會經過驗證。這裏我把dtd的驗證寫到了xml中,固然你也能夠把它寫到另外一個文件中,該文件的後綴名爲「.dtd」,而後把它關聯到要驗證的xml文檔中,語法以下編碼

 1 <!DOCTYPE 根元素名 SYSTEM "*.dtd"> spa

此處ID值好像要以字符開頭,若是隻是數字通不過驗證。3d

學生信息中的性別,我把它定義爲實體,而後經過實體引用它的值,要注意實體引用的語法是"&實體名;"。rest

 

下面經過XML Schema方式來驗證

要驗證的xml文檔

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <學生名冊 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="學生名冊.xsd">
 3     <學生 學號="A1">
 4         <姓名>CIACs</姓名>
 5         <性別></性別>
 6         <年齡>22</年齡>
 7     </學生>
 8 
 9     <學生 學號="A2">
10         <姓名>zhihao</姓名>
11         <性別></性別>
12         <年齡>23</年齡>
13     </學生>
14 </學生名冊>

XML Schema驗證文檔

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
 3     <xs:element name="學生名冊">
 4         <xs:complexType>
 5             <xs:sequence minOccurs="1" maxOccurs="unbounded">
 6                 <xs:element ref="學生"/>
 7             </xs:sequence>
 8         </xs:complexType>
 9     </xs:element>
10     <xs:element name="學生">
11         <xs:complexType>
12             <xs:sequence>
13                 <xs:element name="姓名" type="xs:string"/>
14                 <xs:element name="性別">
15                     <xs:simpleType>
16                         <xs:restriction base="xs:string">
17                             <xs:enumeration value="男"/>
18                             <xs:enumeration value="女"/>
19                         </xs:restriction>
20                     </xs:simpleType>
21                 </xs:element>
22                 <xs:element name="年齡">
23                     <xs:simpleType>
24                         <xs:restriction base="xs:integer">
25                             <xs:minExclusive value="0"/>
26                             <xs:maxExclusive value="120"/>
27                         </xs:restriction>
28                     </xs:simpleType>
29                 </xs:element>
30             </xs:sequence>
31             <xs:attribute name="學號" type="xs:string" use="required"/>
32         </xs:complexType>
33     </xs:element>
34 </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編程很重要。

相關文章
相關標籤/搜索