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"/>
广告