XML中如何使用schema


Schema簡介
DTD的語法相當復雜,並且它不符合XML文件的標准,自成一個體系,W3C定義的Schema用來代替DTD。
chema相對於DTD的明顯好處是XML Schema文檔本身也是XML文檔,而不是像DTD一樣使用自成一體的語法。
這就方便了用戶和開發者,因為可以使用相同的工具來處理XML Schema和其他XML信息,而不必專門為Schema使用特殊工具,Schema簡單易懂,懂得XML語法、規則的人都可以立刻理解它。
如何編寫SCHEMA:
一.1個簡單的Schema文檔
下面是一個最簡單的XML文檔和schema文件。
hello.xml
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
<?xml version="1.0"?>
<greeting xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:noNamespaceSchemaLocation="E:\stu.xsd">Hello World!!</greeting>
<!--一個根元素:greeting;且這個元素不含屬性,無子元素,內容是字符串。-->
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
hello.xsd
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="greeting" type="xsd:string"/>
</xsd:schema>
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
由上面可以看出: XML Schema文檔后綴名是.xsd,完全符合XML語法,根元素是schema,命名空間xmlns:xsd="http://www.w3.org/2001/XMLSchema, -----注意在 schema的 xsd文件中 是 XMLSchema 而在引用文件xml中是XMLSchema-instance,寫錯了無法引用到,也不會報錯。 用元素<element>定義實例文檔中的元素; 引用時用(寫在根節點里): xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="E:\stu.xsd"


關鍵地方:
在 xsd文件中 開頭:
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" ---固定
targetNamespace="http://www.w3school.com.cn"  --自定義
xmlns="http://www.w3school.com.cn"  --自定義
elementFormDefault="qualified">


....................coding


</xs:schema>
 
         

 在 xml 引用中 

<?xml version="1.0"?>
<note     ----定義在schema中的根節點
xmlns="http://www.w3school.com.cn"  --- schema中定義的namespace
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  ----固定
xsi:schemaLocation="http://www.w3school.com.cn note.xsd">  ----namespace + filename

......coding



</note>

  

 


二.我們來看下面這個XML文檔和schema文件。 stu.xml ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- <?xml version="1.0" encoding="UTF-8"?> <stus xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="E:\stu.xsd"> <stu ID="s1" 婚否="否"> <name>長度1-10</name> <sex>女</sex> <age>10</age> </stu> <stu ID="s2" 婚否="是"> <name>長度1-10</name> <sex>男</sex> <age>24</age> </stu> </stus> ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 注:要求: <stus>下可出現多個<Stu>,<stu>有屬性id,不能重復; 子節點<name>:不能為空,長度1-10 子節點<sex>:只能為男/女兩個選項 子節點<age>:只能為數字,並且大於0小於100 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 相應的schema文件如下: stu.xsd ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:element name="stus"> <xs:complexType> <xs:sequence> <xs:element name="stu" minOccurs="0" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="name" type="myname"/> <xs:element name="sex" type="mysex"/> <xs:element name="age" type="myage"/> </xs:sequence> <xs:attributeGroup ref="stuGroup"/> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:simpleType name="myname"> <xs:restriction base="xs:string"> <xs:minLength value="1"/> <xs:maxLength value="10"/> </xs:restriction> </xs:simpleType> <xs:simpleType name="myage"> <xs:restriction base="xs:integer"> <xs:minInclusive value="1"/> <xs:maxInclusive value="100"/> </xs:restriction> </xs:simpleType> <xs:simpleType name="mysex"> <xs:restriction base="xs:string"> <xs:enumeration value="男"/> <xs:enumeration value="女"/> </xs:restriction> </xs:simpleType> <xs:attributeGroup name="stuGroup"> <xs:attribute name="ID" type="xs:ID" use="required"/> <xs:attribute name="婚否" type="myhf" use="optional"></xs:attribute> </xs:attributeGroup> <xs:simpleType name="myhf"> <xs:restriction base="xs:string"> <xs:enumeration value="是"></xs:enumeration> <xs:enumeration value="否"></xs:enumeration> </xs:restriction> </xs:simpleType> </xs:schema> ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- hello.xsd與stus.xsd相比,stus.xsd比hello.xsd限制得更加的完整 三:分析stus.xsd文件的內容: 1.<xs:element name="stus">:聲明一個根節點名為stus 2.<xs:complexType>:類型為復雜類型,復雜類型:為帶屬性和子節點的類型 3.<xs:sequence>:sequence表示子元素依次出現的順序。 4.<xs:element name="stu" minOccurs="0" maxOccurs="unbounded">: 聲明一個子節點名為stu,minOccurs="0" :子節點的數量最少為0個,最大不進行限制(unbounded也可指定一個具體的數字,如10) 5.<xs:complexType>:指定<stu>節點也為復雜類型 6.<xs:sequence>:sequence表示子元素依次出現的順序。 7.<xs:element name="name" type="myname"/>:在<stu>節點下指定<name>描述節點,簡單類型(最底層的節點),類型用名為myname的自定義的類型 8.<xs:element name="sex" type="mysex"/> :在<stu>節點下指定<sex>描述節點,簡單類型(最底層的節點),類型用名為mysex的自定義的類型 9.<xs:element name="age" type="myage"/> :在<stu>節點下指定<age>描述節點,簡單類型(最底層的節點),類型用名為myage的自定義的類型 10.找到自定義myname類型: <xs:simpleType name="myname"> <xs:restriction base="xs:string"> <xs:minLength value="1"/> <xs:maxLength value="10"/> </xs:restriction> </xs:simpleType> 詳解: <xs:simpleType name="myname">:定義一個名為myname的簡單數據類型 <xs:restriction base="xs:string">:指定其基地類型如(string,integer)等 <xs:minLength value="1"/>:長度最少為1 <xs:maxLength value="10"/>:長度最大為10 11.自定義myage類型: <xs:simpleType name="myage"> <xs:restriction base="xs:integer"> <xs:minInclusive value="1"/> <xs:maxInclusive value="100"/> </xs:restriction> </xs:simpleType> 詳解: <xs:simpleType name="myage">:定義一個名為myage的簡單數據類型 <xs:restriction base="xs:integer">:指定其基地類型如(string,integer)等 <xs:minInclusive value="1"/>:值最小為1,包括1 <xs:maxInclusive value="100"/>:值最大為1,包括10 12.自定義myage類型: <xs:simpleType name="mysex"> <xs:restriction base="xs:string"> <xs:enumeration value="男"/> <xs:enumeration value="女"/> </xs:restriction> </xs:simpleType> 詳解: <xs:simpleType name="myage">:定義一個名為myage的簡單數據類型 <xs:restriction base="xs:integer">:指定其基地類型如(string,integer)等 <xs:enumeration value="男"/>:指定其值為枚舉值“男” <xs:enumeration value="女"/>:指定其值為枚舉值“女” 13.<xs:attributeGroup ref="stuGroup"/>:為stu節點引用一個名為“stuGroup”的屬性組 14.我們找到名為stuGroup的屬性組: <xs:attributeGroup name="stuGroup"> <xs:attribute name="ID" type="xs:ID" use="required"/> <xs:attribute name="婚否" type="myhf" use="optional"/> </xs:attributeGroup> 詳解: <xs:attributeGroup name="stuGroup">:定義一個名為stuGroup 的屬性組. <xs:attribute name="ID" type="xs:ID" use="required"/>:為stuGroup 屬性組中定義一個名為“ID”的屬性,類型為ID,不能重復,use為指定此屬性是否可選/必須,值有:required是必須值,optional是可選值,prohibited是無屬性值。 <xs:attribute name="婚否" type="myhf" use="optional"/>:為stuGroup 屬性組中定義一個名為“婚否”的屬性,類型使用自定義枚舉類型,只能為是/否,此屬性為可選

  轉自 

http://dang-java.iteye.com/blog/665167

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM