2.5. 定义复杂数据类型
摘要
XML 架构提供了灵活的强大机制,用于从其简单数据类型构建复杂数据结构。您可以通过创建由元素和属性组成的序列来创建数据结构。您还可以扩展您定义的类型,以创建更复杂的类型。
除了构建复杂数据结构外,您还可以描述专用类型,如枚举类型、具有特定范围的值的数据类型,或者通过扩展或限制原语类型需要遵守特定模式的数据类型。
2.5.1. 定义数据结构
概述
在 XML 架构中,作为数据字段集合的数据单元是使用 complexType
元素来定义的。指定复杂类型需要三部分信息:
-
定义的类型的名称在
complexType
元素的name
属性中指定。 -
complexType
的第一个子元素描述了当 structure 字段在线路上时的行为。请参阅 “复杂的类型 varieties”一节。 -
定义结构的每个字段都在作为
complexType
元素的 Getndchildren 的元素中定义。请参阅 “定义结构的部分”一节。
例如,在 XML 架构中作为带有两个元素的复杂类型来定义 例 2.3 “简单结构” 中的结构。
例 2.3. 简单结构
struct personalInfo { string name; int age; };
例 2.4 “复杂类型” 显示 例 2.3 “简单结构” 中显示的结构的可能 XML 架构映射,在 例 2.4 “复杂类型” 中定义的结构会生成包含两个元素: name
和 age
的消息。
.
例 2.4. 复杂类型
<complexType name="personalInfo"> <sequence> <element name="name" type="xsd:string" /> <element name="age" type="xsd:int" /> </sequence> </complexType>
复杂的类型 varieties
XML 架构有三种方法来描述复杂类型的字段在以 XML 文档表示并用线路传递时的方式。complexType
元素的第一个子元素决定使用哪些复杂类型。表 2.1 “复杂的类型描述符元素” 显示用于定义复杂类型行为的元素。
表 2.1. 复杂的类型描述符元素
如果使用 选择
元素定义结构,如 例 2.5 “简单复杂的选择类型” 所示,它将生成一个包含 name
元素或 age
元素的消息。
例 2.5. 简单复杂的选择类型
<complexType name="personalInfo"> <choice> <element name="name" type="xsd:string"/> <element name="age" type="xsd:int"/> </choice> </complexType>
定义结构的部分
您可以使用 元素元素
定义组成结构的数据字段。每个 complexType
元素都应该至少包含一个 元素
。complexType
元素
中的每个元素代表定义的数据结构中的一个字段。
要完全描述数据结构中的字段,元素
元素有两个所需的属性:
除了名称和类型外,元素元素
还有两个常用的可选属性: minOcurrs
和 maxOccurs
。
这些属性根据字段在结构中发生的次数进行绑定。默认情况下,每个字段仅在复杂类型中执行一次。使用这些属性,您可以更改字段必须或可以在结构中显示的次数。例如,您可以定义一个字段
previousJobs
,它必须至少发生三次,且不超过七次,如 例 2.6 “具有发生限制的简单复杂类型” 所示。
例 2.6. 具有发生限制的简单复杂类型
<complexType name="personalInfo"> <all> <element name="name" type="xsd:string"/> <element name="age" type="xsd:int"/> <element name="previousJobs" type="xsd:string: minOccurs="3" maxOccurs="7"/> </all> </complexType>
您还可以通过将 minOccurs
设置为 0,使用 minOccurs
来指定 age
字段是可选的,如 例 2.7 “简单的复杂类型,将 minOccurs 设为零” 所示。在这种情况下,可以省略这些 年龄
,数据仍将有效。
例 2.7. 简单的复杂类型,将 minOccurs 设为零
<complexType name="personalInfo"> <choice> <element name="name" type="xsd:string"/> <element name="age" type="xsd:int" minOccurs="0"/> </choice> </complexType>
定义属性
在 XML 文档中,属性包含在元素的标签中。例如,在下面的代码中的 complexType
元素中,name
是属性。要为复杂类型指定属性,您可以在 complexType
元素定义中定义 属性
元素。属性
元素只能在 所有
、序列
或选择元素 后显示
。为每个复杂类型的属性指定一个 属性
元素。任何 属性
元素都必须是 complexType
元素的直接子项。
例 2.8. 具有属性的复杂类型
<complexType name="personalInfo"> <all> <element name="name" type="xsd:string"/> <element name="previousJobs" type="xsd:string" minOccurs="3" maxOccurs="7"/> </all> <attribute name="age" type="xsd:int" use="required" /> </complexType>
在前面的代码中,attribute
元素指定 personalInfo
复杂类型具有 age
属性。attribute
元素具有这些属性:
在 attribute
元素中,您可以指定可选的 default
属性,它允许您指定属性的默认值。