Complex Element
Complex Element 包含其他element或attribute。
接下來我們會從簡單到複雜定義一個complex element。 "employee" 就是一個complex element,因為他裡面包著兩個element(firstname, lastname)。
<employee> <firstname>John</firstname> <lastname>Smith</lastname> </employee> |
用以下的schema可以為上面的XML定義。值得注意的是我們會用<xs:complexType><xs:sequence>標籤包住裡面的物件(element)。Sequence代表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> |
接下來來點複雜的(但我覺得挺重要,所以還是看一下)。當很多個complex element 裡面的element 一樣時,我們可以直接幫這個complex element 給一個 "type",在從type中做定義。接下來就可以把這個type 套用到多個complex element中了。
例如employee, student, member 都包含一樣的子element(firstname, lastname),所以我們另外定義了他的type。
<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> |
下一篇:XML Schema 從看不懂到慢慢懂 - part 5
讀者回應 ( 0 意見 )
訂閱張貼留言 (Atom)
張貼留言
如果沒有帳戶,建議使用「名稱/網址」留言喔^^