2.5. 定义复杂数据类型


摘要

XML Schema 提供了一种灵活、强大的机制,用于从其简单数据类型构建复杂数据结构。您可以通过创建一系列元素和属性来创建数据结构。您还可以扩展定义的类型,以创建更复杂的类型。

除了构建复杂数据结构外,您还可以描述专用类型,如枚举类型、具有特定值的数据类型或需要遵循特定模式的数据类型,通过扩展或限制原语类型。

2.5.1. 定义数据结构

概述

在 XML Schema 中,是数据字段集合的数据集使用 复杂的Type 元素进行定义。指定复杂类型需要三段信息:

  1. 定义的类型的名称在 complexType 元素的 name 属性中指定。
  2. complexType 的第一个子元素描述结构字段在线上时的行为。请参阅 “复杂类型 varieties”一节
  3. 定义的结构的每个字段都在 复杂Type 元素中的元素中定义。请参阅 “定义结构的部分”一节

例如: 例 2.3 “简单结构” 中显示的结构在 XML Schema 中定义为带有两个元素的复杂类型。

例 2.3. 简单结构

struct personalInfo
{
  string name;
  int age;
};
Copy to Clipboard Toggle word wrap

例 2.4 “复杂类型” 显示 例 2.3 “简单结构” 中显示的结构的一个可能 XML Schema 映射,例 2.4 “复杂类型” 中定义的结构会生成包括两个元素: nameage 的消息。

.

例 2.4. 复杂类型

<complexType name="personalInfo">
  <sequence>
    <element name="name" type="xsd:string" />
    <element name="age" type="xsd:int" />
  </sequence>
</complexType>
Copy to Clipboard Toggle word wrap

复杂类型 varieties

XML Schema 有三种方法:描述复杂类型的字段在以 XML 文档表示并传递线时如何组织。complexType 元素的第一个子元素决定了使用哪一种复杂类型。表 2.1 “复杂的类型描述符元素” 显示用来定义复杂类型行为的元素。

Expand
表 2.1. 复杂的类型描述符元素
element复杂的类型行为

sequence

所有复杂的类型字段都可以存在,它们必须按照类型定义中指定的顺序。

all

所有复杂的类型字段都可以存在,但可以按照任何顺序排列。

choice

结构中只有一个元素可以放在消息中。

如果结构是使用 选择 元素定义的,如 例 2.5 “简单复杂的选择类型” 所示,它会生成具有 name 元素或 age 元素的消息。

例 2.5. 简单复杂的选择类型

<complexType name="personalInfo">
  <choice>
    <element name="name" type="xsd:string"/>
    <element name="age" type="xsd:int"/>
  </choice>
</complexType>
Copy to Clipboard Toggle word wrap

定义结构的部分

您可以使用 元素 定义组成结构的数据字段。每个 complexType 元素都应该包含至少一个 元素complexType 元素 中的每个元素都表示定义的数据结构中的一个字段。

要完全描述数据结构中的字段,元素 元素有两个必要属性:

  • name 属性指定 data 字段的名称,它必须在定义的复杂类型内唯一。
  • type 属性指定字段中存储的数据类型。类型可以是 XML Schema 的简单类型之一,也可以是合同中定义的任何指定复杂类型。

除了名称和类型 外,元素 还有两个常用的可选属性: minOcurrsmaxOccurs 这些属性根据字段在结构中发生的次数绑定。默认情况下,每个字段仅在复杂类型中仅发生一次。通过使用这些属性,您可以更改字段必须或可在结构中出现的次数。例如,您可以定义一个字段( 之前Jobs ),它必须至少发生三次,且不超过七次,如 例 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>
Copy to Clipboard Toggle word wrap

您还可以通过将 minOccurs 设置为零(如 例 2.7 “带有 minOccurs 设置为 0 的简单复杂类型” 所示),使用 minOccurs 使 age 字段是可选的。在这种情况下,年龄 可以被省略,数据仍将有效。

例 2.7. 带有 minOccurs 设置为 0 的简单复杂类型

<complexType name="personalInfo">
  <choice>
    <element name="name" type="xsd:string"/>
    <element name="age" type="xsd:int" minOccurs="0"/>
  </choice>
</complexType>
Copy to Clipboard Toggle word wrap

定义属性

在 XML 文档中,属性包含在元素的标签中。例如,在下面的代码中的 complexType 元素中,name 是一个属性。要为复杂类型指定属性,您可以在 complexType 元素定义中定义 属性 元素。属性 元素只能在 所有sequencechoice 元素后面出现。为每个复杂类型的属性指定一个 属性 元素。任何 属性 元素都必须是 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>
Copy to Clipboard Toggle word wrap

在前面的代码中,属性 元素指定 personalInfo 复杂类型具有 age 属性。属性 元素具有这些属性:

  • Name - 指定 标识属性的字符串的必需属性。
  • type - 指定字段中存储的数据类型。类型可以是 XML Schema 简单类型之一。
  • 使用 - 指定一个可选属性,用于指定是否需要复杂的类型来具有此属性。有效值 是必需的可选。默认值是 属性是可选的。

属性 元素中,您可以指定可选 默认 属性,这可让您为属性指定默认值。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat