一個複雜的元素包含其他元素和/或屬性。
什麼是一個複雜的元素?
一個複雜的元素是一個包含其他元素和/或屬性的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>