XML Schema 复合类型 - 仅含元素学习笔记

什么是复合类型?

在 XML Schema 中,一个元素可以包含一个或多个子元素。如果我们想要定义一个元素和它的子元素之间的关系,我们可以使用复合类型。复合类型是一种用来描述元素和它的子元素之间关系的 XML Schema 类型。

XML Schema 中有两种复合类型:复杂类型和简单类型。复杂类型用于描述元素和它的子元素之间的关系,而简单类型用于描述元素的值。

在本学习笔记中,我们将重点讨论复合类型中的复杂类型,具体来说,是仅含元素的复合类型。

仅含元素的复合类型

仅含元素的复合类型指的是一个元素可以包含其他元素,但不能包含文本或属性。这种复合类型通常用于描述结构化的数据。

定义一个仅含元素的复合类型

一个仅含元素的复合类型可以通过 <xs:complexType> 元素来定义。下面是一个简单的例子:

xmlCopy Code
<xs:element name="person"> <xs:complexType> <xs:sequence> <xs:element name="name" type="xs:string"/> <xs:element name="age" type="xs:integer"/> <xs:element name="email" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element>

在这个例子中,我们定义了一个名为 "person" 的元素。这个元素包含三个子元素:name、age 和 email。每个子元素都有一个类型,分别是字符串类型、整数类型和字符串类型。

嵌套的复合类型

复合类型可以被嵌套使用。这意味着一个元素可以包含多个子元素,其中每个子元素也可以再包含其他子元素。例如:

xmlCopy Code
<xs:element name="person"> <xs:complexType> <xs:sequence> <xs:element name="name" type="xs:string"/> <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="zip" type="xs:integer"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="phone" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element>

在这个例子中,"person" 元素包含三个子元素:name、address 和 phone。address 元素又包含三个子元素:street、city 和 zip。

示例

下面是一个更完整的示例,展示如何使用仅含元素的复合类型来描述一个简单的联系人列表:

xmlCopy Code
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="contacts"> <xs:complexType> <xs:sequence> <xs:element name="contact" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="name" type="xs:string"/> <xs:element name="email" type="xs:string"/> <xs:element name="phone" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>

在这个示例中,我们定义了一个名为 "contacts" 的根元素,它包含多个 "contact" 元素。每个 "contact" 元素都包含三个子元素:name、email 和 phone。

总结

复合类型是 XML Schema 中用来描述元素和它的子元素之间关系的类型。仅含元素的复合类型用于描述一个元素可以包含其他元素,但不能包含文本或属性的情况。通过将复合类型嵌套使用,我们可以创建更复杂的数据结构。