似水無(wú)痕 ^o^ 迪迪派

          ^o^ 努力學(xué)習(xí) ^o^ 努力工作 ^o^ 努力養(yǎng)老婆 ^o^

             :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            5 隨筆 :: 0 文章 :: 35 評(píng)論 :: 0 Trackbacks

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

             1、XML Schema不能通過(guò)某個(gè)屬性的具體值來(lái)決定是否顯示其它屬性或子節(jié)點(diǎn)。如下XML文檔,在Schema中將不能通過(guò)havaChild屬性來(lái)控制childrenNums屬性和<Child>子節(jié)點(diǎn)是否顯示,如果havaChildfalse,則childrenNums屬性和<Child>子節(jié)點(diǎn)沒有意義,但在Schema定義的XML文檔中仍然可以出現(xiàn),Schema不能通過(guò)驗(yàn)證來(lái)避免這種情況的發(fā)生。

           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子節(jié)點(diǎn)的顯示方式有3種:
           

          all:所有定義的子節(jié)點(diǎn)都可以顯示,注意這里用的是“可以”不是“必須”,你可以在具體的element中定義最小顯示次數(shù)minOccurs是否為0來(lái)決定該節(jié)點(diǎn)是不是“必須”顯示。但all這種顯示方式要求minOccursmaxOccurs的值只能是0或者1,也就是說(shuō)你想讓某個(gè)節(jié)點(diǎn)重復(fù)出現(xiàn),在all中是無(wú)法實(shí)現(xiàn)的。

          choice:所有定義的子節(jié)點(diǎn)只能選擇一個(gè)來(lái)進(jìn)行顯示,可以重復(fù)顯示若干次,在minOccursmaxOccurs中定義最小和最大顯示次數(shù)。

          sequence:所有定義的子節(jié)點(diǎn)必須按Schema中定義的順序來(lái)進(jìn)行顯示,每個(gè)節(jié)點(diǎn)可以重復(fù)若干次,在minOccursmaxOccurs中定義最小和最大顯示次數(shù)。

             
              由于
          Schema只有這三種子節(jié)點(diǎn)顯示方式,所以如果某個(gè)XML文檔要求某個(gè)節(jié)點(diǎn)<Person>的子節(jié)點(diǎn)<Child><Friend>不限制出現(xiàn)順序和顯示次數(shù),在Schema中是無(wú)法定義的,如下XML文檔在Schema是無(wú)法定義的:

           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


             同時(shí)XML Schema對(duì)正則表達(dá)式的支持也不夠完整,可能是W3C認(rèn)為沒必要全部支持,下面兩點(diǎn)是它不支持的操作:

             3、不支持不區(qū)分大小寫匹配,如常用的 (?i),如果你要定義個(gè)節(jié)點(diǎn)<Person havaChild="True|False"/>應(yīng)該是下面的代碼:

           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>

             但是當(dāng)你這樣定義你的XML節(jié)點(diǎn)時(shí)<Person havaChild="true"/>就會(huì)出錯(cuò)了,因?yàn)樗荒?strong>區(qū)分大小寫識(shí)別所定義的字符串,假如你還需要支持<Person havaChild="tRue"/>、<Person havaChild="truE"/>呢?由于XML Schema不支持“不區(qū)分大小寫的字符串匹配”,所以只能這樣做了:

           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 閱讀(4863) 評(píng)論(0)  編輯  收藏 所屬分類: XML

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 磴口县| 视频| 南江县| 乌拉特前旗| 阆中市| 赣州市| 息烽县| 赞皇县| 抚远县| 贡觉县| 六盘水市| 曲麻莱县| 麦盖提县| 江城| 衢州市| 鄂伦春自治旗| 兴山县| 临桂县| 卢氏县| 南靖县| 宁海县| 新闻| 西吉县| 确山县| 永清县| 宜州市| 合肥市| 凤庆县| 凤城市| 深圳市| 土默特右旗| 多伦县| 威信县| 宝清县| 开平市| 读书| 东山县| 商城县| 阳山县| 曲松县| 浪卡子县|