一个复杂的元素包含其他元素和/或属性。
什么是一个复杂的元素?
一个复杂的元素是一个包含其他元素和/或属性的XML元素。
有四种复元素的:
- 空元素
- 只包含其他元素的元素
- 只包含文字元素
- 同时包含其他元素和文本元素
Note:每个元素都可以包含属性的!
复元素的实例
一个复杂的XML元素, "product" ,里面是空的:
<product pid="1345"/>
一个复杂的XML元素, "employee" ,其中只包含其他元素:
<employee>
<firstname>John</firstname>
<lastname>Smith</lastname>
</employee>
一个复杂的XML元素, "food" ,其中只包含文本:
<food type="dessert">Ice cream</food>
一个复杂的XML元素, "description" ,其中包含元素和文本:
<description>
It happened on <date lang="norwegian">03.03.99</date> ....
</description>
如何定义一个复杂元素
看看这个复杂的XML元素, "employee" ,其中只包含其他元素:
<employee>
<firstname>John</firstname>
<lastname>Smith</lastname>
</employee>
我们可以定义XML模式两种不同的方式一个复杂元素:
1. "employee"元素可以直接通过命名元素,像这样的声明:
<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>
如果使用上述方法,只有"employee"元素可以使用指定的复杂类型。 需要注意的是子元素, "firstname"和"lastname" ,被包围的<sequence>的指标。 这意味着该子元素必须出现在相同的顺序它们被声明。 您将了解更多有关XSD指标章指标。
2. "employee"元素可以有指复杂类型使用的名称类型属性:
<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>
如果使用上面描述的方法中,几个元件可指代相同的复杂类型,如下所示:
<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>