(七)XML Schema總結

簡單類型

1、簡單元素:指只能包含文本內容,不能夠包含子元素,也沒有屬性的元素。格式:<xs:element name="xxx" type="yyy"/>
例子:
<xs:element name="name" type="xs:string"/>
<xs:element name="age" type="xs:integer"/>
<xs:element name="gender" type="xs:boolean"/>
2、屬性:所有的元素屬性均被聲明爲簡單類型。只有複雜類型的元素纔可以擁有屬性。格式:<xs:attribute name=”xxx”type=”yyy”/>
例子:<xs:attribute name=”lang”type=”xs:string”/>
所有的屬性默認都是可選的,我們可以通過使用use關鍵字明確的指出是可選或是必需:
<xs:attribute  name="Ia ng" type="xs: string"  use="optional"/>
<xs:attribute  name="Ia ng" type="xs: string"  use=" required"/>
找們可以通過使用default或fixed爲簡單類型(簡單元素、屬性)指定默認值或固定值,如下:
<xs:elem ent name=" color" type="xs: string"  defa ult=”red"/>
<xs:attribute  name="Ia ng" type="xs: string" fixed="CN”/>

對簡單類型值的約束

約束                                                                含義
enumeration                                    定義允許值的枚舉
fractionDigits                                  指定最多允許的小數位數(必須大於或等於零)
length                                               精確指定允許的最大字符長度
maxExclusive                                 指定允許的最大數值,必須小於該值
maxInclusive                                  指定允許的最大數值,必須小於或等於該值
maxLength                                     指定允許的最大字符長度(必須大於等於零)
minExclusive                                 指定允許的最小數值,必須大於該值
minInclusive                                  指定允許的最小數值,必須大於或等於該值
minLength                                     指定允許的最小字符長度
pattern                                            指定允許值的模式,類似正則表達式
totalDigits                                      精確指定數字個數
whiteSpace                                   處理空白(保留:preserve;替換:replace;合併:collapse)

複雜類型

複雜類型指包含其他元素/屬性的元素類型。
<message>
<to>rose</to>
<from>alex</from>
<body>Hi,My Girl!</body>
</m essage>
在上面的例子中,元素message就是一個複雜類型的元素,我們在Schema中這樣描述:
<xs:element name="message">
<xs:complexType>
<xs:sequence>
<xs:elem ent name="to" type="xs: string"/>
<xs:element name="from" type="xs:string"/>
<xs:elem ent name=" body" type="xs: string"/>
</xs:sequence>
</xs:complexType>
注意元素to,from,body色含在<xs:sequence></xs:sequence>中,表明這些元素必須按照定義的順序出現在你的XML文件中。當然,message兀素也可以包含一個type屬性,指向我們定義的複雜類型,象這樣:
<xs:element name="message" type="msg"/>
<xs:complexType name="msg">
<xs:sequence>
<xs:elem ent name="to" type="xs: string"/>
<xs:element name="from" type="xs:string"/>
<xs:elem ent name=" body" type="xs: string"/>
</xs:sequence>
</xs:complexType>

複雜類型和簡單類型之間最根本的區別就是:複雜類型的內容中可以包含其他元素,也可以帶有屬性(Attribute),但簡單類型既不能包含子元素,也不能帶有任何屬性。

Schema綜述

1、如何描述空元素,比如:<product prodid="1345"/>?
因爲是空元素,所以不包含子元素,同時由於包含屬性,用attribute定義,象這樣:
<xs:element name="product">
<xs:complexType>
<xs:attribute  name="prodid”type="xs: positivelnteger"/>
</xs:complexType>
</xs:element>
也可以這樣:
<xs:element name="product" type="productType"/>
<xs:complexType name="productType">
<xs:attribute  name="prodid”type="xs: positivelnteger"/>
</xs:complexType>
2、如何描述只含有簡單內容(文本/屬性)的元素,比如:<message date=”2006-06-26”>Hi,My Girl!</message>?
由於只包含簡單內容,所以我們在元素內容定義的外面用simpleContent指出,當描述簡單內容的時候,我們需要在簡單內容裏使用extension或者restriction來描述內容的數據類型。象這樣:
<xs:element name="message">
<xs:complexType>
<xs:simpleContent>
<xs :extension  base="xs : string">
<xs :attribute  name="date " type="xs : date " />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
其中message的屬性date的數據類型爲日期(xs:date)。順便提一下:XMLSchema中常用的數據類型有:xs:string . xs:decimal . xs:integer . xs:boolean . xs:date . xs:time
等。
3、如何定義混合類型,比如:
<message>
 This message comes from <from>Alex</from>
</m essage>

message元素除了包含子元素from之外,還直接包含文本“This message comes from”。對於這種情況,我們需要在complexType中使用屬性mixed=”true”指出。以下是Schema:
<xs:element name="message">
<xs:complexType mixed="true”>
<xs:element name="from" type="xs:string"/>
</xs:complexType>
</xs:element>
當然,如果包含更多的子元素,我們可以需要使用<xs:sequence>來限定那些子元素的順序。
在XMLSchema中,有3類共7種指示器(lndicator):
一、定義元素如何出現:包括all,sequence,choice這三個。
1、all:默認值。不限制子元素的出現順序,每個子元素必須出現且只能出現一次。例如:
<xs:element name="person">
<xs:complexType>
<xs : all>
<xs :ele m ent name="firstname"  type="xs : string"/>
<xs :ele m ent  name="Ia stname"  type="xs : string"/>
</xs : all>
</xs:complexType>
</xs:element>
2、sequence:子元素在XML文件中按照XMLSchema定義的順序出現。
3、choice:兩個或多個子元素中僅出現一個。例如:
<xs:element name="gender">
<xs:complexType>
<xs:choice>
<xs:element name="male" type="male"/>
<xs:element name="female" type="female"/>
</xs:choice>
</xs:complexType>
</xs:element>
二、次數限定類,包括minOccurs和maxOccurs,前者指定最少出現次數,後者指定最多出現次數。例如:
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="full_name" type="xs:string"/>
<xs:element name="child_name" type="xs:string"
maxOccurs="IO "  minOccurs= "0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
如果元素出現的最大次數無限制,可以使用maxOccurs=”unbounded”。
三、組限定:包括Group和attributeGroup,用來定義一組相關的元素。比如:
<xs:group name="persongroup">
<xs:sequence>
<xs :ele m ent name="firstname"  type="xs : string"/>
<xs :ele m ent  name="Ia stname"  type="xs : string"/>
<xs:element name="birthday" type="xs:date"/>
</xs:sequence>
</xs:group>
<xs:attributeGroup name="personattrgroup">
<xs :attribute  name="firstname"  type="xs : string"/>
<xs :attribute  name="Ia stname"  type="xs : string"/>
<xs :attribute  name=" birthday"  type="xs:date "/>
</xs:attributeGroup>
樸充:<any>和<anyAttribute>,在XMLSchema中使用這兩個元素可以放寬Schema對XML文件內容的限制。容許我們在XML文件中使用沒有在Schema中定義的元素和屬性。(很少使用),元素屬性substitutionGroup可以讓元素b替換元素a在XML文件中出現。比如:
<xs:element name="cn_name" type="xs:string"/>
<xs:element name="en name" substitutionGroup="cn_name"/>
這種情形類似choice

<xs:choice>
<xs:element name="cn_name" type="xs:string"/>
<xs:element name="en name" type="xs:string"/>

</xs:choice>


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章