XML Schema與DTD(DTD語法概述)一樣,也是對一類XML文檔進行約束、確定其結構,元素、屬性、及數據類型。及XML文檔中所使用的元素,實體,元素的屬性,元素與實體之間的關系的約束。XML Schema 首先由微軟提出,已經被W3C接受成為一個標准。與DTD不同的是,XML Schema 文件使用XML語法,它的設計目的很許多跟DTD相似,但在功能,擴展性方面超越了DTD。下面說說它們之間的一些區別:
一.XML Schema 是XML文檔,不像DTD有其特有的語法。對開發人員來說,你不需要懂兩種語法就能編寫一個格式良好的XML文檔。對開發XML分析器來說,XML Schema由於也是XML語法,實現及支持起來就更方便了。同時XML Schema 繼承了XML可擴展的優點。
二.定義數據類型。在一個DTD文件中只能把數據聲明為字符串類型或字符串類型的子元素,如PCDATA、CDATA、ID等。而在XML Schema 中,可以定義跟編程語言同樣豐富的數據類型,如整型,浮點型,布爾型,日期型等。這樣的好處是顯而易見的,在你編寫程序使用一個整型數據時,如用DTD定義的,就必須將它從字符型轉化為整型,而XML Schema 則可以直接定義為整型。
三.XML Schema是一個開放的模型。如下面的一個XML文檔:
<item>
<name>TG/DTLatte</name>
<quantity>1</quantity>
<price>2.00</price>
</item>
下面是它的DTD及Schema描述:
DTD:
<!ELEMENTname(#PCDATA)>
<!ELEMENTquantity(#PCDATA)>
<!ELEMENTprice(#PCDATA)>
<!ELEMENTitem(name,quantity,price)>
schema:
<ElementTypename="name"/>
<ElementTypename="quantity"dt:type="int"/>>
<ElementTypename="price"dt:type="fixed.14.4"/>
<ElementTypename="item"model="open">
<elementtype="name"/>
<elementtype="quantity"/>
<elementtype="price"/>
</ElementType>
當上面的XML文檔增加一條<myItem:time>10:21 PDT</myItem:time>元素變為:<itemXMLns:myItm="urn:myItems">
<name>TG/DTLatte</name>
<quantity>1</quantity>
<price>2.00</price>
<myItem:time>10:21PDT</myItem:time>
</item>
以上的DTD將會引發一個驗證錯誤,而Schema則不會。
四.命名空間的集成。一個XML文檔只能由一個DTD文檔來描述,而可以由多個XML Schema文檔來描述。後者完全支持命名空間。