XML - 模式



XML 模式通常稱為XML 模式定義 (XSD)。它用於描述和驗證 XML 資料的結構和內容。XML 模式定義了元素、屬性和資料型別。模式元素支援名稱空間。它類似於資料庫模式,描述資料庫中的資料。

語法

您需要在 XML 文件中宣告一個模式,如下所示:

示例

以下示例演示瞭如何使用模式:

<?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 文件的構建塊。可以在 XSD 中定義元素,如下所示:

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

定義型別

您可以透過以下方式定義 XML 模式元素:

簡單型別

簡單型別元素僅在文字上下文中使用。一些預定義的簡單型別包括:xs:integer、xs:boolean、xs:string、xs:date。例如:

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

複雜型別

複雜型別是其他元素定義的容器。這允許您指定元素可以包含哪些子元素,並在 XML 文件中提供一些結構。例如:

<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 文件中構建簡單的元素層次結構。

全域性型別

使用全域性型別,您可以在文件中定義單個型別,所有其他引用都可以使用該型別。例如,假設您想將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> 

不必為Address1Address2分別定義兩次名稱和公司,我們現在有一個定義。這使得維護更簡單,即,如果您決定向地址新增“Postcode”元素,則只需在一個地方新增即可。

屬性

XSD 中的屬性在元素內提供額外資訊。屬性具有名稱型別屬性,如下所示:

<xs:attribute name = "x" type = "y"/>
廣告