原文位址: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)