📅  最后修改于: 2023-12-03 15:06:05.307000             🧑  作者: Mango
在 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
元素具有必需属性 id
和 category
。<xs:anyAttribute>
元素指定了 product
元素具有任意属性,并使用 processContents="skip"
跳过它们。
上述仅是复杂类型的简要介绍,如果需要深入学习 XSD 中的复杂类型,建议在维基百科等资源中进一步查询。