特点:
复合元素包含了其他的元素及/或属性。
什么是复合元素?
复合元素指包含其他元素及/或属性的 XML 元素。
复合元素的类型
有四种类型的复合元素:
-
空元素
-
包含其他元素的元素
-
仅包含文本的元素
-
包含元素和文本的元素
空元素
<product pid="1345"/>
包含其他元素的元素
<employee>
<firstname>John</firstname>
<lastname>Smith</lastname>
</employee>
仅包含文本的元素
<food type="dessert">Ice cream</food>
包含元素和文本的元素
<description>
It happend on <data lang="norwegian">03.03.99</data> ....
</description>
如何定义复合元素
两种方式
-
直接对元素进行声明
-
<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> -
说明:
-
<!--
complexType说明是复合元素类型,指示器 <sequence>意味着子元素必须以它们被声明的次序出现
-->
-
-
使用type属性,属性的作用是引用要使用的复合类型的名称
-
<xs:element name="employee" type="personinfo"/>
<xs:complexType name="personinfo">
<!--其子元素都可以用personinfo这个属性-->
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:sequence>
</xs:complexType> -
使用了上面所描述的方法,那么若干元素均可以使用相同的复合类型
-
<xs:element name="employee" type="personinfo"/>
<xs:element name="student" type="personinfo"/>
<xs:element name="member" 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> -
也可以在已有的复合元素之上以某个复合元素为基础,然后添加一些元素
-
<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>
-