似水無痕 ^o^ 迪迪派

          ^o^ 努力學習 ^o^ 努力工作 ^o^ 努力養老婆 ^o^

             :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            5 隨筆 :: 0 文章 :: 35 評論 :: 0 Trackbacks

             本文不是帶你走進XML Schema的世界,如果要學習XML Schema可以參考http://www.w3schools.com/schema/default.asp ,下面主要談一下我在使用Schema時遇到的問題^o^如果有不對的地方歡迎指正哈^o^

             1、XML Schema不能通過某個屬性的具體值來決定是否顯示其它屬性或子節點。如下XML文檔,在Schema中將不能通過havaChild屬性來控制childrenNums屬性和<Child>子節點是否顯示,如果havaChildfalse,則childrenNums屬性和<Child>子節點沒有意義,但在Schema定義的XML文檔中仍然可以出現,Schema不能通過驗證來避免這種情況的發生。

           1<?xml version="1.0"?>
           2<Persons>
           3    <Person name="Ddpie" havaChild="true|false" childrenNums="2">
           4        <Child>
           5            <Name>Tony</Name>
           6            <Age>12</Age>
           7        </Child>
           8        <Child>
           9            <Name>Tom</Name>
          10            <Age>15</Age>
          11        </Child>
          12    </Person>
          13</Persons>
          14


             2、XML Schema定義XML子節點的顯示方式有3種:
           

          all:所有定義的子節點都可以顯示,注意這里用的是“可以”不是“必須”,你可以在具體的element中定義最小顯示次數minOccurs是否為0來決定該節點是不是“必須”顯示。但all這種顯示方式要求minOccursmaxOccurs的值只能是0或者1,也就是說你想讓某個節點重復出現,在all中是無法實現的。

          choice:所有定義的子節點只能選擇一個來進行顯示,可以重復顯示若干次,在minOccursmaxOccurs中定義最小和最大顯示次數。

          sequence:所有定義的子節點必須按Schema中定義的順序來進行顯示,每個節點可以重復若干次,在minOccursmaxOccurs中定義最小和最大顯示次數。

             
              由于
          Schema只有這三種子節點顯示方式,所以如果某個XML文檔要求某個節點<Person>的子節點<Child><Friend>不限制出現順序和顯示次數,在Schema中是無法定義的,如下XML文檔在Schema是無法定義的:

           1<?xml version="1.0"?>
           2<Persons>
           3    <Person name="Ddpie">
           4        <Child>
           5            <Name>Tony</Name>
           6            <Age>12</Age>
           7        </Child>
           8        <Friend>
           9            <Name>Lucy</Name>
          10            <Address>Beijing</Address>
          11        </Friend>
          12        <Child>
          13            <Name>Tom</Name>
          14            <Age>15</Age>
          15        </Child>
          16        <Friend>
          17            <Name>Stephen</Name>
          18            <Address>Shanghai</Address>
          19        </Friend>
          20    </Person>
          21</Persons>
          22


             同時XML Schema對正則表達式的支持也不夠完整,可能是W3C認為沒必要全部支持,下面兩點是它不支持的操作:

             3、不支持不區分大小寫匹配,如常用的 (?i),如果你要定義個節點<Person havaChild="True|False"/>應該是下面的代碼:

           1<xsd:element name="Person">
           2    <xsd:complexType>
           3        <xsd:attribute name="havaChild" use="required">
           4            <xsd:simpleType>
           5                <xsd:restriction base="xsd:string">
           6                    <xsd:pattern value="True|False"/>
           7                </xsd:restriction>
           8            </xsd:simpleType>
           9        </xsd:attribute>
          10    </xsd:complexType>
          11</xsd:element>

             但是當你這樣定義你的XML節點時<Person havaChild="true"/>就會出錯了,因為它只能區分大小寫識別所定義的字符串,假如你還需要支持<Person havaChild="tRue"/>、<Person havaChild="truE"/>呢?由于XML Schema不支持“不區分大小寫的字符串匹配”,所以只能這樣做了:

           1<xsd:element name="Person">
           2    <xsd:complexType>
           3        <xsd:attribute name="havaChild" use="required">
           4            <xsd:simpleType>
           5                <xsd:restriction base="xsd:string">
           6                    <xsd:pattern value="[tT][rR][uU][eE]|[fF][aA][lL][sS][eE]"/>
           7                </xsd:restriction>
           8            </xsd:simpleType>
           9        </xsd:attribute>
          10    </xsd:complexType>
          11</xsd:element>


             4、不支持單詞邊界匹配,如常用的 \b和\B,所以如果需要匹配單詞邊界的話,只能在所要匹配的單詞后面加上\s了,呵呵,沒辦法^o^

          posted on 2007-05-18 09:54 ddpie 閱讀(4858) 評論(0)  編輯  收藏 所屬分類: XML

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 常州市| 汝城县| 翼城县| 繁昌县| 岐山县| 内黄县| 施甸县| 武山县| 青海省| 巴塘县| 青阳县| 乌审旗| 横山县| 醴陵市| 吉林省| 车致| 汤阴县| 阳泉市| 兴宁市| 东城区| 平乐县| 陈巴尔虎旗| 金沙县| 巴林右旗| 新余市| 云龙县| 洮南市| 垦利县| 平塘县| 剑阁县| 唐海县| 乌兰浩特市| 托克托县| 承德市| 开化县| 吉林市| 永宁县| 江川县| 三亚市| 金坛市| 游戏|