什麼是複合元素
- 空元素
<product pid="1345"/>
包含其他元素的元素
<employee> <firstname>John</firstname> <lastname>Smith</lastname> </employee>
- 僅包含文本的元素
<food type="dessert">Ice cream</food>
包含元素和文本的元素
<description> It happened on <date lang="norwegian">03.03.99</date> .... </description>
定義複合元素
直接在元素中複合元素
<sequence>
中,意味着子元素必須以它們被聲明的次序出現<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>
使用type屬性,引用要使用類型的名稱
<sequence>
中,意味着子元素必須以它們被聲明的次序出現<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="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>
空元素
- 空元素
<product prodid="1345" />
限定空元素,實際上不聲明任何元素即可,下面的例子只聲明瞭一個屬性
<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>
在上面的例子中,我們定義了一個帶有複合內容的複合類型。complexContent 元素給出的信號是,我們打算限定或者拓展某個複合類型的內容模型,而 integer 限定則聲明瞭一個屬性但不會引入任何的元素內容。
更加緊湊的寫法
<xs:element name="product"> <xs:complexType> <xs:attribute name="prodid" type="xs:positiveInteger"/> </xs:complexType> </xs:element>
或者您可以爲一個 complexType 元素起一個名字,然後爲 “product” 元素設置一個 type 屬性並引用這個 complexType 名稱(通過使用此方法,若干個元素均可引用相同的複合類型)。
<xs:element name="product" type="prodtype"/> <xs:complexType name="prodtype"> <xs:attribute name="prodid" type="xs:positiveInteger"/> </xs:complexType>
僅含元素
僅含元素
<person> <firstname>John</firstname> <lastname>Smith</lastname> </person>
限定僅含元素
<xs:element name="person"> <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>
。它意味着被定義的元素必須按上面的次序出現在 “person” 元素中。或者您可以爲 complexType 元素設定一個名稱,並讓 “person” 元素的 type 屬性來引用此名稱(如使用此方法,若干元素均可引用相同的複合類型):
<xs:element name="person" type="persontype"/> <xs:complexType name="persontype"> <xs:sequence> <xs:element name="firstname" type="xs:string"/> <xs:element name="lastname" type="xs:string"/> </xs:sequence> </xs:complexType>
僅含文本
- 僅含文本
<shoesize country="france">35</shoesize>
限定僅含文本
<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>
請使用 extension 或 restriction 元素來擴展或限制元素的基本簡易類型。
聲明瞭一個複合類型,其內容被定義爲整數值,並且 “shoesize” 元素含有名爲 “country” 的屬性我們也可爲 complexType 元素設定一個名稱,並讓 “shoesize” 元素的 type 屬性來引用此名稱(通過使用此方法,若干元素均可引用相同的複合類型):
<xs:element name="shoesize" type="shoetype"/> <xs:complexType name="shoetype"> <xs:simpleContent> <xs:extension base="xs:integer"> <xs:attribute name="country" type="xs:string" /> </xs:extension> </xs:simpleContent> </xs:complexType>
包含元素和文本元素
混合元素
<letter> Dear Mr.<name>John Smith</name>. Your order <orderid>1032</orderid> will be shipped on <shipdate>2001-07-13</shipdate>. </letter>
限定混合元素
<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”。 標籤 (name、orderid 以及 shipdate ) 意味着被定義的元素必須依次出現在 “letter” 元素內部。
- 我們也可以爲 complexType 元素起一個名字,並讓 “letter” 元素的 type 屬性引用 complexType 的這個名稱(通過這個方法,若干元素均可引用同一個複合類型)
<xs:element name="letter" type="lettertype"/> <xs:complexType name="lettertype" 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>