天天看點

DTD 與 XSD差別

原文位址:http://375163948.blog.51cto.com/7498815/1361493

    XML我們并不陌生,在企業級應用中有很廣的用途。具體就不再說,下面介紹一下DTD,XSD的差別并以XSD為例看spring中定義與使用。

1.DTD(Documnet Type Definition)

DTD即文檔類型定義,是一種XML限制模式語言,是XML檔案的驗證機制,屬于XML檔案組成的一部分。

DTD 是一種保證XML文檔格式正确的有效方法,可以通過比較XML文檔和DTD檔案來看文檔是否符合規範,元素和标簽使用是否正确。 一個 DTD文檔包含:元素的定義規則,元素間關系的定義規則,元素可使用的屬性,可使用的實體或符号規則。

DTD和XSD相比:DTD 是使用非 XML 文法編寫的。

DTD 不可擴充,不支援命名空間,隻提供非常有限的資料類型 .

2.XSD(XML Schemas Definition) 

XML Schema語言也就是XSD。XML Schema描述了XML文檔的結構。 

可以用一個指定的XML Schema來驗證某個XML文檔,以檢查該XML文檔是否符合其要求。文檔設計者可以通過XML Schema指定一個XML文檔所允許的結構和内容,并可據此檢查一個XML文檔是否是有效的。XML Schema本身是一個XML文檔,它符合XML文法結構。可以用通用的XML解析器解析它。

一個XML Schema會定義:文檔中出現的元素、文檔中出現的屬性、子元素、子元素的數量、子元素的順序、元素是否為空、元素和屬性的資料類型、元素或屬性的預設 和固定值。

XSD是DTD替代者的原因,一是據将來的條件可擴充,二是比DTD豐富和有用,三是用XML書寫,四是支援資料類型,五是支援命名空間。

XML Schema的優點:

1) XML Schema基于XML,沒有專門的文法 

2) XML Schema可以象其他XML檔案一樣解析和處理 

3) XML Schema比DTD提供了更豐富的資料類型.

4) XML Schema提供可擴充的資料模型。 

5) XML Schema支援綜合命名空間 

6) XML Schema支援屬性組。

3.spring中spring-beans-2.5.xsd

Java代碼  

<?xml version="1.0" encoding="UTF-8" standalone="no"?>  

    <xsd:schema xmlns="http://www.springframework.org/schema/beans"

            xmlns:xsd="http://www.w3.org/2001/XMLSchema"

            targetNamespace="http://www.springframework.org/schema/beans">  

        <!-- base types -->  

        <xsd:complexType name="identifiedType"abstract="true">         

            <xsd:attribute name="id" type="xsd:ID">  

            </xsd:attribute>  

        </xsd:complexType>  

    </xsd:schema>  

(1)schema元素為所有XML Schema模式文檔的根元素,它用于聲明該XML文檔是一個XML Schema文檔。該模式文檔本身也一個XML文檔,自己的名稱空間為xmlns:xsd="http://www.w3.org/2001/XMLSchema",其中xsd為其字首。

(2)Schema中targetNamespace定義了Schema定義出的新元素與屬性的名稱空間。也就是它是對所定義的XML模型進行限制:限制定義出的元素,或者屬性的名稱空間.

4.Spring中配置檔案對XSD檔案的使用

<beans xmlns="http://www.springframework.org/schema/beans"

        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd>

</beans>

在使用XML Schema 文檔對XML執行個體文檔進行檢驗,除了要聲明名稱空間外(xmlns="http://www.springframework.org/schema/beans"),還必須指定該名稱空間所對應的XML Schema文檔的存儲位置.

通過schemaLocation屬性來指定名稱空間所對應的XML Schema文檔的存儲位置,它包含兩個部分,一部分是名稱空間的URI,第二部分就是該名稱空間所辨別的XML Schema檔案位置或URL位址

(xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd)