溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

XML DTD于XML Schema的示例分析

發布時間:2021-07-27 11:07:15 來源:億速云 閱讀:185 作者:小新 欄目:編程語言

這篇文章主要介紹了XML DTD于XML Schema的示例分析,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

XML(eXtensible Markup Language)可擴展的標記語言。xml在web service編程中尤為重要。在網絡傳輸中可以作為傳輸數據的載體。xml作為元語言,它可以用來標記數據、定義數據類型,是一種允許用戶對自己的標記語言進行定義的元語言。 它非常適合網絡傳輸,提供統一的方法來描述和交換獨立于應用程序或供應商的結構化數據??梢詫崿F異構語言、異構平臺之間的交互。XML 文檔定義方式有:文檔類型定義(DTD)和XML Schema。DTD(Document Type Definition)定義了文檔的整體結構以及文檔的語法(下面會有相應的例子用于理解)應用廣泛并有豐富的工具支持。XML Schema的功能更強大,用于定義管理信息等更強大、更豐富的特征。XML能夠更細粒度地聲明內容,定義約束,方便跨越多種平臺的更有意義的傳輸內容。它提供了一種描述結構數據的格式,簡化了網絡中數據交換和表示,使得代碼、數據和表示分離,并作為數據交換的標準格式,因此它常被稱為智能數據文檔??梢园袲TD比作鐵鏟,而XML Schema就可以說是挖掘機,功能更強大?! ML雖然稱作標記語言,但與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 DTD于XML Schema的示例分析

xml的首行一定要是<?xml version="1.0"?>處理指令,且”<?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輸出窗口會有如下的結果顯示

XML DTD于XML Schema的示例分析

否則就算是多了一個空格都不會通過驗證。這里我把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 DTD于XML Schema的示例分析

要驗證的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 DTD于XML Schema的示例分析”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女