[轉(zhuǎn)貼自 http://www.cnblogs.com/John-zhaohui]
Xml Schema的用途
1. 定義一個(gè)Xml文檔中都有什么元素
2. 定義一個(gè)Xml文檔中都會(huì)有什么屬性
3. 定義某個(gè)節(jié)點(diǎn)的都有什么樣的子節(jié)點(diǎn),可以有多少個(gè)子節(jié)點(diǎn),子節(jié)點(diǎn)出現(xiàn)的順序
4. 定義元素或者屬性的數(shù)據(jù)類型
5. 定義元素或者屬性的默認(rèn)值或者固定值
Xml Schema的根元素:
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 表示數(shù)據(jù)類型等定義來(lái)自w3
targetNamespace="http://www.w3schools.com" 表示文檔中要定義的元素來(lái)自什么命名空間
xmlns="http://www.w3schools.com"表示此文檔的默認(rèn)命名空間是什么
elementFormDefault="qualified"> 表示要求xml文檔的每一個(gè)元素都要有命名空間指定
……定義主體部分……
</xs:schema>
如何定義一個(gè)簡(jiǎn)單元素
<xs:element 此處表示要定義一個(gè)元素
name=”color” 表示要定義元素的名稱
type=”xs:string” 表示要定義元素的數(shù)據(jù)類型
default=”red” 表示定義元素的默認(rèn)值
fixed=”red”/> 表示要定義元素的固定值,此元素只可以取“red”值
以上定義了一個(gè)簡(jiǎn)單元素,元素實(shí)例:<color>red</color>
如何定義一個(gè)屬性
<xs:attribute
name=”birthday” 表示要定義屬性的名字
type=”xs:date” 表示要定義屬性的數(shù)據(jù)類型
default=”
fixed=”
use=”required”/> 表示此屬性是否是必須指定的,即如果不指定就不符合Schema,默認(rèn)沒(méi)有use=”required”屬性表示屬性可有可無(wú)
如何定義元素或者屬性值的限制
1.最大值最小值限制
<xs:element name="age">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"/> 大于等于0,<xs: minExclusive>表示最小值但是不包括指定值
<xs:maxInclusive value="120"/> 小于等于120,<xs: maxExclusive>
</xs:restriction>
</xs:simpleType>
</xs:element>
2.枚舉限制,指只能在指定的幾個(gè)值中取值
<xs:element name="car" type="carType"/>
<xs:simpleType name="carType">
<xs:restriction base="xs:string">
<xs:enumeration value="Audi"/>
<xs:enumeration value="Golf"/>
<xs:enumeration value="BMW"/>
</xs:restriction>
</xs:simpleType>
3.模式(pattern)限制 ,指字符串的格式必須滿足制定的匹配模式
例子 |
說(shuō)明 |
<xs:element name="letter"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:pattern value="[a-z]"/> </xs:restriction> </xs:simpleType> </xs:element> |
表示只能在小寫字母中取一個(gè)值 |
<xs:element name="initials"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:pattern value="[A-Z][A-Z][A-Z]"/> </xs:restriction> </xs:simpleType> </xs:element> |
表示必須是三個(gè)大寫字母 |
<xs:element name="initials"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:pattern value="[a-zA-Z][a-zA-Z][a-zA-Z]"/> </xs:restriction> </xs:simpleType> </xs:element> |
表示必須是三個(gè)字母,可以是大寫或小寫的 |
<xs:element name="choice"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:pattern value="[xyz]"/> </xs:restriction> </xs:simpleType> </xs:element> |
表示必須是xyz中的一個(gè) |
<xs:element name="prodid"> <xs:simpleType> <xs:restriction base="xs:integer"> <xs:pattern value="[0-9][0-9][0-9][0-9][0-9]"/> </xs:restriction> </xs:simpleType> </xs:element> |
表示數(shù)字的范圍是0-99999 |
<xs:element name="letter"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:pattern value="([a-z])*"/> </xs:restriction> </xs:simpleType> </xs:element> |
表示必須是0或者多個(gè)小寫字符組成的序列 |
<xs:element name="letter"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:pattern value="([a-z][A-Z])+"/> </xs:restriction> </xs:simpleType> </xs:element> |
表示必須是多個(gè)字母。 |
<xs:element name="gender"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:pattern value="male|female"/> </xs:restriction> </xs:simpleType> </xs:element> |
表示是male或者female中的一個(gè) |
<xs:element name="password"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:pattern value="[a-zA-Z0-9]{8}"/> </xs:restriction> </xs:simpleType> </xs:element> |
表示必須是8個(gè)字母數(shù)字字符 |
4.字符串長(zhǎng)度的限制
<xs:element name="password">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:length value="8"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
長(zhǎng)度必須是8。
<xs:element name="password">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="5"/>
<xs:maxLength value="8"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
表示長(zhǎng)度在5-8之間
6. 對(duì)于空白字符的限制
示例 |
說(shuō)明 |
<xs:element name="address"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:whiteSpace value="preserve"/> </xs:restriction> </xs:simpleType> </xs:element> |
保留原樣,表示xml處理器不會(huì)移除或者替換任何空白字符 |
<xs:element name="address"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:whiteSpace value="replace"/> </xs:restriction> </xs:simpleType> </xs:element> |
指回車,換行,Tab都會(huì)被替換成空格處理 |
<xs:element name="address"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:whiteSpace value="collapse"/> </xs:restriction> </xs:simpleType> </xs:element> |
去掉多于一個(gè)空格,和html中處理方式相同 |
如何定義復(fù)雜類型
復(fù)雜類型是指定義元素中包含屬性或者子元素的類型
1. 定義只包含子元素的復(fù)雜類型
<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>
2. 定義只包含屬性的復(fù)雜類型
<xs:element name="product" type="prodtype"/>
<xs:complexType name="prodtype">
<xs:attribute name="prodid" type="xs:positiveInteger"/>
</xs:complexType>
3. 定義只包含內(nèi)容的復(fù)雜類型
<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>
4. 定義包含內(nèi)容和子元素混合的復(fù)雜類型
<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>
以上定義對(duì)應(yīng)的Xml
<letter>
Dear Mr.<name>John Smith</name>.
Your order <orderid>1032</orderid>
will be shipped on <shipdate>
</letter>
5. 定義包含屬性和子元素的復(fù)雜類型
使用指示器
在Xsd中的指示器包括
1. 順序指示器
1) All
指示子元素可以以任何順序出現(xiàn),并且每一個(gè)元素都必須出現(xiàn)一次
<xs:element name="person">
<xs:complexType>
<xs:all>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:all>
</xs:complexType>
</xs:element>
2) Choice
指示子元素中可以出現(xiàn)一個(gè)或者另一個(gè)
<xs:element name="person">
<xs:complexType>
<xs:choice>
<xs:element name="employee" type="employee"/>
<xs:element name="member" type="member"/>
</xs:choice>
</xs:complexType>
</xs:element>
3) Sequence
指示子元素必須按照順序出現(xiàn)
<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>
2. 出現(xiàn)次數(shù)指示器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="10" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
3. 組指示器(group Indicators)
用來(lái)定義相關(guān)的一組元素
<xs:group name="persongroup">
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
<xs:element name="birthday" type="xs:date"/>
</xs:sequence>
</xs:group>
<xs:element name="person" type="personinfo"/>
<xs:complexType name="personinfo">
<xs:sequence>
<xs:group ref="persongroup"/>
<xs:element name="country" type="xs:string"/>
</xs:sequence>
</xs:complexType>
用來(lái)定義一組相關(guān)的屬性
<xs:attributeGroup name="personattrgroup">
<xs:attribute name="firstname" type="xs:string"/>
<xs:attribute name="lastname" type="xs:string"/>
<xs:attribute name="birthday" type="xs:date"/>
</xs:attributeGroup>
<xs:element name="person">
<xs:complexType>
<xs:attributeGroup ref="personattrgroup"/>
</xs:complexType>
</xs:element>
Any關(guān)鍵字
表示可以有任意元素
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
<xs:any minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
anyAttribute關(guān)鍵字
<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:anyAttribute/>
</xs:complexType>
</xs:element>
substitutionGroup關(guān)鍵字
表示某一個(gè)元素和另一個(gè)替代元素定義相同
<xs:element name="name" type="xs:string"/>
<xs:element name="navn" substitutionGroup="name"/>
<xs:complexType name="custinfo">
<xs:sequence>
<xs:element ref="name"/>
</xs:sequence>
</xs:complexType><xs:element name="customer" type="custinfo"/>
<xs:element name="kunde" substitutionGroup="customer"/>
文中的例子都來(lái)自w3school.