詳細介紹XML DTD於XML Schema學習的範例程式碼(圖文)

黄舟
發布: 2017-03-22 16:55:42
原創
1354 人瀏覽過

  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中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!