XML Schema 複合元素
XSD 複合元素
複合元素包含了其他的元素及/或屬性。
h2>什麼是複合元素?
複合元素指包含其他元素及/或屬性的 XML 元素。
有四種類型的複合元素:
空元素
#包含其他元素的元素
#只包含文字的元素
包含元素和文字的元素
##注意:上述元素均可包含屬性!
複合元素的範例複合元素,"product",空的:
<product pid="1345"/>
複合元素,"employee",只包含其他元素:<employee>
複合XML 元素,"food",只包含文字:
<firstname>John</firstname>
<lastname>Smith</lastname>
</employee>
<lastname>Smith</lastname>
</employee>
<food type="dessert">Ice cream</food>
#複合XML元素,"description"包含元素和文字:<description>
It happened on <date lang="norwegian">03.03.99</date> ....
</description>
</description>
#如何定義複合元素? 請看這個複合 XML 元素,"employee",只包含其他元素:
<employee>
在XML Schema 中,我們有兩種方式定義複合元素:1. 透過命名此元素,可直接對"employee"元素進行聲明,就像這樣:
<firstname>John</firstname>
<lastname>Smith</lastname>
</employee>
<lastname>Smith</lastname>
</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>
<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" 元素可以使用type 屬性,這個屬性的作用是引用要使用的複合型別的名稱:
<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: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="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>
<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>