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

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

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

    posts - 431,  comments - 344,  trackbacks - 0

    關(guān)于XML Schema中的key和unique的概念很多Schema教程里面講過,可惜網(wǎng)上大部分教程里面的例子是錯(cuò)誤的,而且并沒有給出完整清晰的解釋,我查找了Schema的規(guī)范并寫出了相應(yīng)了例子,理清了這兩個(gè)概念,希望對大家有所幫助。XML Schema規(guī)范來自于
    http://www.w3.org/TR/xmlschema-0/

    1.unique的定義和例子
    規(guī)范中對于unique是這樣定義的:XML Schema enables us to indicate that any attribute or element value must be unique within a certain scope. To indicate that one particular attribute or element value is unique, we use the unique element first to "select" a set of elements, and then to identify the attribute or element "field" relative to each selected element that has to be unique within the scope of the set of selected elements.
    譯文:XML Schema允許我們指出任意的屬性或者元素值在某個(gè)范圍內(nèi)是唯一的。為了指出這個(gè)屬性或者元素值的唯一性,我們使用了unique元素,它首先“選擇”一組元素,然后指出這個(gè)屬性或者元素的“域”在上一步所選擇出的元素集合中是唯一的。
    例子Schema:UniqueTest.xsd
    <?xml version="1.0" encoding="GB2312"?>
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
     <xs:element name="Person">
      <xs:annotation>
       <xs:documentation>Comment describing your root element</xs:documentation>
      </xs:annotation>
      <xs:complexType>
       <xs:sequence>
        <xs:element name="Name" type="xs:string" maxOccurs="unbounded"/>
        <xs:element name="Id" type="xs:integer" maxOccurs="unbounded">
        </xs:element>
       </xs:sequence>
      </xs:complexType>
      <xs:unique name="IdUnique">
       <xs:selector xpath=".//Id"/>
       <xs:field xpath="."/>
      </xs:unique>
     </xs:element>
    </xs:schema>

    例子XML:UniqueTest.xml
    <?xml version="1.0" encoding="GB2312"?>
    <Person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="UniqueTest.xsd">
    <Name>wxb_nudt</Name>
     <Id>1001</Id>
     <Id>1002</Id>
     <Id>1001</Id> <!--這兒就會(huì)報(bào)錯(cuò),因?yàn)樗闹岛偷谝粋€(gè)Id重復(fù)了,并不是唯一的-->
     <Id>1004</Id>
    </Person>

    2.key的定義和例子
    規(guī)范中是通過一個(gè)較長的例子來說明key和keyref的定義,歸納起來可以做如下定義:XML Schema可以通過將一個(gè)元素或者屬性定義為一個(gè)key,這個(gè)key必須是unique的,這個(gè)key可以在XML文檔中的其他部分通過keyref進(jìn)行引用,keyref的值一定取自于key的某一個(gè)值。key的概念很類似于數(shù)據(jù)庫中的外鍵。
    key的具體定義方法很類似于unique的定義方法,首先“選擇”一組元素,然后指出某個(gè)屬性或者元素的“域”就是一個(gè)key。
    而keyref與key的定義完全相似,唯一的區(qū)別是加了一個(gè)refer屬性,這個(gè)refer屬性指出了key的名字,具體例子如下:
    例子schema:KeyExam.xsd
    <?xml version="1.0" encoding="UTF-8"?>
    <!-- edited with XMLSPY v2004 rel. 3 U (http://www.xmlspy.com) by wxb (nudt) -->
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
     <xsd:element name="rootElement">
      <xsd:complexType>
       <xsd:sequence>
        <xsd:element name="elementOne" maxOccurs="unbounded">
         <xsd:complexType>
          <xsd:attribute name="elementOneKey" type="xsd:integer"/>
          <xsd:attribute name="elementOneDesc" type="xsd:string"/>
         </xsd:complexType>
        </xsd:element>
        <xsd:element name="elementTwo" maxOccurs="unbounded">
         <xsd:complexType>
          <xsd:attribute name="elementTwoKey" type="xsd:integer"/>
          <xsd:attribute name="elementOneKey" type="xsd:string"/>
          <xsd:attribute name="elementTwoDesc" type="xsd:string"/>
         </xsd:complexType>
        </xsd:element>
       </xsd:sequence>
      </xsd:complexType>
      <xsd:key name="elementOnePK">
       <xsd:selector xpath=".//elementOne"/>
       <xsd:field xpath="@elementOneDesc"/>
      </xsd:key>
      <xsd:keyref name="elementOneFK" refer="elementOnePK">
       <xsd:selector xpath=".//elementTwo"/>
       <xsd:field xpath="@elementTwoDesc"/>
      </xsd:keyref>
      <xsd:unique name="EOneKeyU" xsi:type="xsd:integer">
       <xsd:selector xpath=".//elementOne"/>
       <xsd:field xpath="@elementOneKey"/>
      </xsd:unique>
     </xsd:element>
    </xsd:schema>

    例子xml:KeyExam.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <rootElement xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="KeyExam.xsd">
     <elementOne elementOneKey="1" elementOneDesc="a"/>
     <elementOne elementOneKey="2" elementOneDesc="b"/>
     <elementOne elementOneKey="3" elementOneDesc="c"/>
     <elementOne elementOneKey="4" elementOneDesc="d"/>
     <elementTwo elementOneKey="5" elementTwoDesc="e" elementTwoKey="78"/>
     <!--上面的elementTwoDesc作為elementOneDesc的一個(gè)keyref,它必須取值于上面的4個(gè)key值之一,這里它的值"e"因?yàn)椴皇侨≈涤?a","b","c","d",所以會(huì)報(bào)錯(cuò)-->
    </rootElement>

    posted on 2008-03-29 16:16 周銳 閱讀(597) 評論(0)  編輯  收藏 所屬分類: XML
    主站蜘蛛池模板: 亚洲国产精品成人久久蜜臀 | 深夜免费在线视频| 偷自拍亚洲视频在线观看| 风间由美在线亚洲一区| a毛片在线免费观看| 18禁美女裸体免费网站| 午夜毛片不卡高清免费| 久久精品国产精品亚洲人人 | 亚洲午夜无码久久久久| 亚洲手机中文字幕| 九九免费久久这里有精品23| 亚洲美女免费视频| 国产精品亚洲片在线va| 好男人资源在线WWW免费| 在线A级毛片无码免费真人| 亚洲精品无码人妻无码| 成人电影在线免费观看| 国产一级高清视频免费看| 亚洲酒色1314狠狠做| 免费国产黄网站在线观看动图| 色se01短视频永久免费| 亚洲日韩乱码中文无码蜜桃臀网站| 国产一级a毛一级a看免费人娇| 久久亚洲美女精品国产精品| 成人午夜影视全部免费看| 亚洲色欲一区二区三区在线观看 | 亚洲乱码日产精品BD在线观看| 中文字幕免费播放| 久久久无码精品亚洲日韩按摩| 成年女人看片免费视频播放器| 亚洲网址在线观看你懂的| 国产A∨免费精品视频| 情侣视频精品免费的国产| 亚洲一区在线观看视频| 久久午夜夜伦鲁鲁片免费无码影视| 亚洲一区二区观看播放| 一区二区无码免费视频网站| 亚洲国产精品综合久久网各 | 天天摸天天碰成人免费视频| 国产免费AV片在线观看播放| 亚洲中文字幕丝袜制服一区|