📜  XSD-复杂类型(1)

📅  最后修改于: 2023-12-03 15:06:05.307000             🧑  作者: Mango

XSD中的复杂类型

在 XML Schema Definition (XSD) 中,复杂类型是可以定义数据结构的元素类型。与简单类型(仅能包含一个数据值)不同,复杂类型可以包含多个元素,并指定元素之间的关系。复杂类型在 XML 数据交换中非常常见。

定义复杂类型

在 XSD 中定义复杂类型有两种方法:通过 <xs:complexType> 元素或 <xs:element> 元素中的 type 属性。

<xs:element> 元素中的 type 属性为例,以下是一个简单的 XML 元素和对应的复杂类型定义:

<customer type="xs:complexType">
  <xs:sequence>
    <xs:element name="name" type="xs:string"/>
    <xs:element name="age" type="xs:integer"/>
    <xs:element name="address">
      <xs:complexType>
        <xs:sequence>
          <xs:element name="street" type="xs:string"/>
          <xs:element name="city" type="xs:string"/>
          <xs:element name="country" type="xs:string"/>
        </xs:sequence>
      </xs:complexType>
    </xs:element>
  </xs:sequence>
</customer>

在上面的例子中,<xs:sequence> 元素用于指定 <customer> 元素包含哪些子元素,这些子元素使用 <xs:element> 元素定义。

<xs:complexType> 元素中的 <xs:sequence> 元素指定了 <customer> 元素的子元素,而 <xs:element> 元素中的 type 属性指定子元素的数据类型。

复杂类型的组成

复杂类型可以包含以下元素:

  • <xs:sequence>:指定元素的顺序以及包含哪些子元素。
  • <xs:choice>:指定元素中包含的子元素选项。
  • <xs:all>:指定元素中包含的子元素在任意顺序下都必须出现。
  • <xs:attribute>:指定元素具有的属性。
  • <xs:attributeGroup>:指定元素具有的属性组。
  • <xs:anyAttribute>:指定元素具有任意的属性。

以下是一个复杂类型的例子:

<xs:complexType name="product">
  <xs:sequence>
    <xs:element name="name" type="xs:string"/>
    <xs:element name="price" type="xs:decimal"/>
    <xs:element name="description" type="xs:string"/>
  </xs:sequence>
  <xs:attribute name="id" type="xs:integer" use="required"/>
  <xs:attribute name="category" type="xs:string" use="required"/>
  <xs:anyAttribute processContents="skip"/>
</xs:complexType>

在上面的例子中,<xs:complexType> 定义了复杂类型 product<xs:sequence> 元素指定了 product 元素包含的三个子元素。<xs:attribute> 元素指定了 product 元素具有必需属性 idcategory<xs:anyAttribute> 元素指定了 product 元素具有任意属性,并使用 processContents="skip" 跳过它们。

最后

上述仅是复杂类型的简要介绍,如果需要深入学习 XSD 中的复杂类型,建议在维基百科等资源中进一步查询。