<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 17  文章 - 49  trackbacks - 0
    <2006年8月>
    303112345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    常用鏈接

    留言簿(1)

    隨筆分類(17)

    隨筆檔案(17)

    相冊

    最新隨筆

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    2006 8 23 星期三

    XSD 淺學筆記

    ?

    簡單明快的 XSD 的入門筆記,希望能讓你和我一樣,用半天時間步入第一道門檻。

    這一片記錄基礎知識,第二篇會是些進階知識和總結,然后你就可以寫出自己的第一個 XSD 文檔,并用來驗證一個 XML 文檔了。

    ?

    Any 元素

    如同其名字那樣,這個元素就是可以替代任何元素,相當于一個占位符,給予了 xsd 文件一個擴展的空間。

    ?

    <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>

    ?

    在上面的 xsd 里我們放置了 any 元素,給了 minOccurs 指示符,然后再看下面這個元素類型:

    ?

    <?xml version="1.0" encoding="ISO-8859-1"?>

    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"

    targetNamespace="http://www.w3schools.com"

    xmlns="http://www.w3schools.com"

    elementFormDefault="qualified"><xs:element name="children">

    ? <xs:complexType>

    ??? <xs:sequence>

    ????? <xs:element name="childname" type="xs:string"

    ????? maxOccurs="unbounded"/>

    ??? </xs:sequence>

    ? </xs:complexType>

    </xs:element></xs:schema>

    ?

    將上面的元素放置到 any 的位置里,將是合法的:

    ?

    <?xml version="1.0" encoding="ISO-8859-1"?><persons xmlns="http://www.microsoft.com"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:SchemaLocation="http://www.microsoft.com family.xsd

    http://www.w3schools.com children.xsd"><person>

    <firstname>Hege</firstname>

    <lastname>Refsnes</lastname>

    <children>

    ? ???? ?<childname>Cecilie</childname>

    </children>

    </person>

    <person>

    <firstname>Stale</firstname>

    <lastname>Refsnes</lastname>

    </person>

    </persons>

    ?

    同樣的還有 anyAttribute 標記,對應的是屬性的占位符。用法是類似的。

    ?

    元素替換

    有時候我們需要讓某個位置的元素的名字可以換成另外一個,這個時候用元素替換,看下例:

    <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"/>

    ?

    使用 subsitutionGroup 以及要替換的元素的名字,那么就可以使得下面的 xml 是合法的:

    <customer>

    ? <name>John Smith</name>

    </customer>

    <kunde>

    ? <navn>John Smith</navn>

    </kunde>

    ?

    如果你確認某個元素絕對不想被替換,也可以聲明這一點,用 block

    <xs:element name="name" type="xs:string" block="substitution"/>

    <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" block="substitution"/>

    <xs:element name="kunde" substitutionGroup="customer"/>

    ?

    上面的聲明將使得:

    <kunde>

    ? <navn>John Smith</navn>

    </kunde>

    會是非法的。

    ?

    http://www.w3schools.com/schema/schema_example.asp

    ?

    ?

    寫一個 XSD 文檔

    ?

    就象寫一份 xml 文檔一樣,首先聲明根元素為 schema ,給予名稱空間等等。

    ?

    <?xml version="1.0" encoding="ISO-8859-1" ?>

    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">......

    ?

    ?

    </xs:schema>

    ?

    接下來就是把你前面所學的,關于定義元素和類型的知識應用進來,寫一份簡單快捷的 xsd ,例如下面的這一份:

    ?

    <?xml version="1.0" encoding="ISO-8859-1" ?>

    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

    <xs:element name="shiporder">

    ?<xs:complexType>

    ? <xs:sequence>

    ?? <xs:element name="orderperson" type="xs:string"/>

    ?? <xs:element name="shipto">

    ??? <xs:complexType>

    ???? <xs:sequence>

    ????? <xs:element name="name" type="xs:string"/>

    ????? <xs:element name="address" type="xs:string"/>

    ????? <xs:element name="city" type="xs:string"/>

    ????? <xs:element name="country" type="xs:string"/>

    ???? </xs:sequence>

    ??? </xs:complexType>

    ?? </xs:element>

    ?? <xs:element name="item" maxOccurs="unbounded">

    ??? <xs:complexType>

    ???? <xs:sequence>

    ????? <xs:element name="title" type="xs:string"/>

    ????? <xs:element name="note" type="xs:string" minOccurs="0"/>

    ????? <xs:element name="quantity" type="xs:positiveInteger"/>

    ????? <xs:element name="price" type="xs:decimal"/>

    ???? </xs:sequence>

    ??? </xs:complexType>

    ?? </xs:element>

    ? </xs:sequence>

    ? <xs:attribute name="orderid" type="xs:string" use="required"/>

    ?</xs:complexType>

    </xs:element>

    </xs:schema>

    ?

    稍微要注意的是 attribute 必須出現在一個 complexType 的最后位置,先元素,后屬性。

    ?

    這樣的文檔完全可行,但會有些難讀,再次利用重構的方法,把簡單元素,屬性,復合元素分別獨立出來,再用引用標記 ref 來組合:

    ?

    <?xml version="1.0" encoding="ISO-8859-1" ?>

    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

    ?

    <!-- definition of simple elements -->

    <xs:element name="orderperson" type="xs:string"/>

    <xs:element name="name" type="xs:string"/>

    <xs:element name="address" type="xs:string"/>

    <xs:element name="city" type="xs:string"/>

    <xs:element name="country" type="xs:string"/>

    <xs:element name="title" type="xs:string"/>

    <xs:element name="note" type="xs:string"/>

    <xs:element name="quantity" type="xs:positiveInteger"/>

    <xs:element name="price" type="xs:decimal"/>

    ?

    <!-- definition of attributes -->

    <xs:attribute name="orderid" type="xs:string"/>

    ?

    <!-- definition of complex elements -->

    <xs:element name="shipto">

    ?<xs:complexType>

    ? <xs:sequence>

    ?? <xs:element ref="name"/>

    ?? <xs:element ref="address"/>

    ?? <xs:element ref="city"/>

    ?? <xs:element ref="country"/>

    ? </xs:sequence>

    ?</xs:complexType>

    </xs:element>

    <xs:element name="item">

    ?<xs:complexType>

    ? <xs:sequence>

    ?? <xs:element ref="title"/>

    ?? <xs:element ref="note" minOccurs="0"/>

    ?? <xs:element ref="quantity"/>

    ?? <xs:element ref="price"/>

    ? </xs:sequence>

    ?</xs:complexType>

    </xs:element>

    <xs:element name="shiporder">

    ?<xs:complexType>

    ? <xs:sequence>

    ?? <xs:element ref="orderperson"/>

    ?? <xs:element ref="shipto"/>

    ?? <xs:element ref="item" maxOccurs="unbounded"/>

    ? </xs:sequence>

    ? <xs:attribute ref="orderid" use="required"/>

    ?</xs:complexType>

    </xs:element>

    </xs:schema>

    ?

    這樣看起來清晰很多,而且方便修改和復用。

    更進一步的,把類型獨立出來,給予名字,這樣所有的元素都直接復用類型:

    ?

    <?xml version="1.0" encoding="ISO-8859-1" ?>

    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

    ?

    <xs:simpleType name="stringtype">

    ?<xs:restriction base="xs:string"/>

    </xs:simpleType>

    ?

    <xs:simpleType name="inttype">

    ?<xs:restriction base="xs:positiveInteger"/>

    </xs:simpleType>

    ?

    <xs:simpleType name="dectype">

    ?<xs:restriction base="xs:decimal"/>

    </xs:simpleType>

    ?

    <xs:simpleType name="orderidtype">

    ?<xs:restriction base="xs:string">

    ? <xs:pattern value="[0-9]{6}"/>

    ?</xs:restriction>

    </xs:simpleType>

    ?

    <xs:complexType name="shiptotype">

    ?<xs:sequence>

    ? <xs:element name="name" type="stringtype"/>

    ? <xs:element name="address" type="stringtype"/>

    ? <xs:element name="city" type="stringtype"/>

    ? <xs:element name="country" type="stringtype"/>

    ?</xs:sequence>

    </xs:complexType>

    ?

    <xs:complexType name="itemtype">

    ?<xs:sequence>

    ? <xs:element name="title" type="stringtype"/>

    ? <xs:element name="note" type="stringtype" minOccurs="0"/>

    ? <xs:element name="quantity" type="inttype"/>

    ? <xs:element name="price" type="dectype"/>

    ?</xs:sequence>

    </xs:complexType

    ?

    ><xs:complexType name="shipordertype">

    ?<xs:sequence>

    ? <xs:element name="orderperson" type="stringtype"/>

    ? <xs:element name="shipto" type="shiptotype"/>

    ? <xs:element name="item" maxOccurs="unbounded" type="itemtype"/>

    ?</xs:sequence>

    ?<xs:attribute name="orderid" type="orderidtype" use="required"/>

    </xs:complexType>

    ?

    <xs:element name="shiporder" type="shipordertype"/>

    </xs:schema>

    ?

    好了,現在你可以自己動手開始寫自己的 xsd 了。如果遇到問題,可以到這份東西的英文原出處仔細弄個究竟:

    http://www.w3schools.com/schema/default.asp

    ?

    全篇完。

    posted on 2006-08-25 12:32 Ye Yiliang 閱讀(1720) 評論(2)  編輯  收藏 所屬分類: Java

    FeedBack:
    # re: XSD淺學筆記II 2006-08-25 13:02 hsp
    跟住就是EJ  回復  更多評論
      
    # re: XSD淺學筆記II 2006-08-25 17:26 Ye Yiliang
    nod~@hsp
      回復  更多評論
      
    主站蜘蛛池模板: 永久免费的网站在线观看| 91免费国产精品| 午夜国产羞羞视频免费网站| 亚洲女人18毛片水真多| 亚洲精品在线免费观看视频| 亚洲综合综合在线| 色片在线免费观看| 天堂亚洲国产中文在线| 日韩精品无码人妻免费视频| 鲁死你资源站亚洲av| 无码国产亚洲日韩国精品视频一区二区三区 | 免费高清资源黄网站在线观看| 亚洲中文字幕无码爆乳| 日本特黄a级高清免费大片| 亚洲AV网一区二区三区 | 国产综合精品久久亚洲| 国产免费爽爽视频在线观看| 亚洲Av永久无码精品三区在线| 成人精品一区二区三区不卡免费看| 久久久久亚洲av无码尤物| 亚洲一区二区三区免费观看| 在线观看亚洲AV日韩AV| 国产特级淫片免费看| 国产精品美女久久久免费| 亚洲精品国产成人专区| 欧美大尺寸SUV免费| 无人视频在线观看免费播放影院| 国产专区一va亚洲v天堂| 最近中文字幕国语免费完整| 久久夜色精品国产噜噜亚洲a| 免费在线观看中文字幕| 免费一级不卡毛片| 亚洲一区中文字幕在线观看| 一级毛片直播亚洲| 美丽姑娘免费观看在线观看中文版| 亚洲AV成人无码天堂| 四虎成人精品在永久免费| 美女被cao网站免费看在线看| 亚洲婷婷第一狠人综合精品| 免费a级毛片网站| 久久久久高潮毛片免费全部播放 |