XML Schema 复合元素 05

复合元素

复合元素包含其他元素及属性的 XML 元素。 复合元素包括:

  • 空元素
  • 包含其他元素的元素
  • 仅包含文本的元素
  • 包含元素和文本的元素
  • 上述所有元素均可包含属性

仅包含元素的复合元素

复合元素声明有两种方式,第二种方式可用于其他元素。

1
2
3
4
5
6
7
8
<xs:element name="employee">
<xs:complexType>
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
1
2
3
4
5
6
7
<xs:element name="employee" type="personinfo"/>
<xs:complexType name="personinfo">
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:sequence>
</xs:complexType>

还可以在已有复合元素的基础上,添加一些元素。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<xs:element name="employee" type="fullpersoninfo"/>
<xs:complexType name="personinfo">
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="fullpersoninfo">
<xs:complexContent>
<xs:extension base="personinfo">
<xs:sequence>
<xs:element name="address" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
<xs:element name="country" type="xs:string"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>

<sequence>是指示器,这意味着子元素必须按照声明的次序出现。

仅包含属性的复合元素

空的复合元素只能包含属性不能包含其他内容。
一个空的 XML 元素:

1
<product prodid="1345" />

声明如下:

1
2
3
4
5
6
7
8
9
<xs:element name="product">
<xs:complexType>
<xs:complexContent>
<xs:restriction base="xs:integer">
<xs:attribute name="prodid" type="xs:positiveInteger"/>
</xs:restriction>
</xs:complexContent>
</xs:complexType>
</xs:element>

或者更紧凑的写法

1
2
3
4
5
<xs:element name="product">
<xs:complexType>
<xs:attribute name="prodid" type="xs:positiveInteger"/>
</xs:complexType>
</xs:element>

包含文本和属性的复合元素

1
<shoesize country="france">35</shoesize>
1
2
3
4
5
6
7
8
9
<xs:element name="shoesize">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:integer">
<xs:attribute name="country" type="xs:string" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>

请使用extensionrestriction 元素来扩展或限制元素的基本简易类型

包含文本和元素的复合元素

1
2
3
4
5
<letter>
Dear Mr.<name>John Smith</name>.
Your order <orderid>1032</orderid>
will be shipped on <shipdate>2001-07-13</shipdate>.
</letter>
1
2
3
4
5
6
7
8
9
<xs:element name="letter">
<xs:complexType mixed="true">
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="orderid" type="xs:positiveInteger"/>
<xs:element name="shipdate" type="xs:date"/>
</xs:sequence>
</xs:complexType>
</xs:element>

为了使字符数据可以出现在 “letter” 的子元素之间,mixed 属性必须被设置为 “true”。