2.5. 定义复杂数据类型
摘要
XML Schema 提供了一种灵活、强大的机制,用于从其简单数据类型构建复杂数据结构。您可以通过创建一系列元素和属性来创建数据结构。您还可以扩展定义的类型,以创建更复杂的类型。
除了构建复杂数据结构外,您还可以描述专用类型,如枚举类型、具有特定值的数据类型或需要遵循特定模式的数据类型,通过扩展或限制原语类型。
2.5.1. 定义数据结构 复制链接链接已复制到粘贴板!
概述 复制链接链接已复制到粘贴板!
在 XML Schema 中,是数据字段集合的数据集使用 复杂的Type 元素进行定义。指定复杂类型需要三段信息:
-
定义的类型的名称在
complexType元素的name属性中指定。 -
complexType的第一个子元素描述结构字段在线上时的行为。请参阅 “复杂类型 varieties”一节。 -
定义的结构的每个字段都在
复杂Type元素中的元素中定义。请参阅 “定义结构的部分”一节。
例如: 例 2.3 “简单结构” 中显示的结构在 XML Schema 中定义为带有两个元素的复杂类型。
例 2.3. 简单结构
struct personalInfo
{
string name;
int age;
};
struct personalInfo
{
string name;
int age;
};
例 2.4 “复杂类型” 显示 例 2.3 “简单结构” 中显示的结构的一个可能 XML Schema 映射,例 2.4 “复杂类型” 中定义的结构会生成包括两个元素: name 和 age 的消息。
.
例 2.4. 复杂类型
复杂类型 varieties 复制链接链接已复制到粘贴板!
XML Schema 有三种方法:描述复杂类型的字段在以 XML 文档表示并传递线时如何组织。complexType 元素的第一个子元素决定了使用哪一种复杂类型。表 2.1 “复杂的类型描述符元素” 显示用来定义复杂类型行为的元素。
| element | 复杂的类型行为 |
|---|---|
| 所有复杂的类型字段都可以存在,它们必须按照类型定义中指定的顺序。 | |
| 所有复杂的类型字段都可以存在,但可以按照任何顺序排列。 | |
| 结构中只有一个元素可以放在消息中。 |
如果结构是使用 选择 元素定义的,如 例 2.5 “简单复杂的选择类型” 所示,它会生成具有 name 元素或 age 元素的消息。
例 2.5. 简单复杂的选择类型
定义结构的部分 复制链接链接已复制到粘贴板!
您可以使用 元素 定义组成结构的数据字段。每个 complexType 元素都应该包含至少一个 元素。complexType 元素 中的每个元素都表示定义的数据结构中的一个字段。
要完全描述数据结构中的字段,元素 元素有两个必要属性:
除了名称和类型 外,元素 还有两个常用的可选属性: minOcurrs 和 maxOccurs。 这些属性根据字段在结构中发生的次数绑定。默认情况下,每个字段仅在复杂类型中仅发生一次。通过使用这些属性,您可以更改字段必须或可在结构中出现的次数。例如,您可以定义一个字段( 之前Jobs ),它必须至少发生三次,且不超过七次,如 例 2.6 “使用出现约束的简单复杂类型” 所示。
例 2.6. 使用出现约束的简单复杂类型
您还可以通过将 minOccurs 设置为零(如 例 2.7 “带有 minOccurs 设置为 0 的简单复杂类型” 所示),使用 minOccurs 使 age 字段是可选的。在这种情况下,年龄 可以被省略,数据仍将有效。
例 2.7. 带有 minOccurs 设置为 0 的简单复杂类型
定义属性 复制链接链接已复制到粘贴板!
在 XML 文档中,属性包含在元素的标签中。例如,在下面的代码中的 complexType 元素中,name 是一个属性。要为复杂类型指定属性,您可以在 complexType 元素定义中定义 属性 元素。属性 元素只能在 所有、sequence 或 choice 元素后面出现。为每个复杂类型的属性指定一个 属性 元素。任何 属性 元素都必须是 complexType 元素的直接子项。
例 2.8. 带有属性的复杂类型
在前面的代码中,属性 元素指定 personalInfo 复杂类型具有 age 属性。属性 元素具有这些属性:
在 属性 元素中,您可以指定可选 默认 属性,这可让您为属性指定默认值。