鍍金池/ 教程/ HTML/ XML 模式
XML 屬性
XML 語法
XML 注釋
XML 文檔對象模型
XML 數(shù)據(jù)庫
XML 樹結(jié)構(gòu)
XML 文檔類型定義(DTDs)
XML 之 CDATA 片段
XML 解析器
XML 編輯器
XML 概述
XML 字符實體
XML 編碼
XML 驗證
XML 文檔
XML 聲明
XML 元素
XML 命名空間
XML 閱讀器
XML 處理程序
XML 模式
XML 空白
XML 標(biāo)簽
XML 處理指令

XML 模式

XML 模式通常被稱為 XML 模式定義(XSD)。它被用來描述和驗證 XML 數(shù)據(jù)的結(jié)構(gòu)和內(nèi)容。XML 模式定義元素,屬性和數(shù)據(jù)類型。模式元素也支持命名空間。它類似于描述數(shù)據(jù)庫中數(shù)據(jù)的數(shù)據(jù)庫模式。

語法

我們需要在 XML 文檔中聲明模式,如下所示:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

示例

下面的示例展示了如何使用模式:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="contact">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="name" type="xs:string" />
            <xs:element name="company" type="xs:string" />
            <xs:element name="phone" type="xs:int" />
        </xs:sequence>
    </xs:complexType>
</xs:element>
</xs:schema>

XML 模式背后的基本思想就是描述 XML 文檔可以接受的合法格式。

元素

正如我們在 XML 元素 一章中所看到的,元素就是 XML 文檔構(gòu)建塊。在 XSD 內(nèi)可以像下面這樣定義元素:

<xs:element name="x" type="y"/>

定義類型

我們可以按照以下方式定義 XML 模式元素:

簡單類型:簡單類型的元素只能用于文本上下文中。一些預(yù)定義的簡單類型有:xs:integer,xs:boolean,xs:string,xs:data。例如:

<xs:element name="phone_number" type="xs:int" />

復(fù)雜類型:復(fù)雜類型就是其他元素定義的容器。允許我們指定哪個元素可以包含子元素以便為 XML 文檔提供一些結(jié)構(gòu)。例如:

<xs:element name="Address">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="name" type="xs:string" />
            <xs:element name="company" type="xs:string" />
            <xs:element name="phone" type="xs:int" />
        </xs:sequence>
    </xs:complexType>
</xs:element>

上面的例子中,Address 元素由子元素組成。它是其他 <xs:element> 定義的容器,允許我們在 XML 文檔中構(gòu)建一個簡單的層級元素。

全局類型:對于全局類型,我們可以在文檔中定義獨立的類型,它還可以使用所有其他引用。例如,假設(shè)我們想針對不同的公司地址概括 personcompany。這種情況下,我們可以定義一個如下所示的通用類型:

<xs:element name="AddressType">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="name" type="xs:string" />
            <xs:element name="company" type="xs:string" />
        </xs:sequence>
    </xs:complexType>
</xs:element>

然后在下面的示例中使用這個類型:

<xs:element name="Address1">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="address" type="AddressType" />
            <xs:element name="phone1" type="xs:int" />
        </xs:sequence>
    </xs:complexType>
</xs:element>
<xs:element name="Address2">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="address" type="AddressType" />
            <xs:element name="phone2" type="xs:int" />
        </xs:sequence>
    </xs:complexType>
</xs:element>

不再需要定義 name 和 compacny 兩次(一次是給 Address1,一次給 Address2),現(xiàn)在我們擁有一個獨立的定義。這讓維護變得更簡單,例如,如果我們決定給地址添加一個 "Postcode" 元素,只需要在一個地方添加即可。

屬性

XSD 中的屬性提供了元素的額外信息。帶 nametype 屬性(property)的屬性(attribute)如下所示:

<xs:attribute name="x" type="y"/>
上一篇:XML 文檔對象模型下一篇:XML 文檔