<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

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

    1.unique的定義和例子
    規范中對于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允許我們指出任意的屬性或者元素值在某個范圍內是唯一的。為了指出這個屬性或者元素值的唯一性,我們使用了unique元素,它首先“選擇”一組元素,然后指出這個屬性或者元素的“域”在上一步所選擇出的元素集合中是唯一的。
    例子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> <!--這兒就會報錯,因為它的值和第一個Id重復了,并不是唯一的-->
     <Id>1004</Id>
    </Person>

    2.key的定義和例子
    規范中是通過一個較長的例子來說明key和keyref的定義,歸納起來可以做如下定義:XML Schema可以通過將一個元素或者屬性定義為一個key,這個key必須是unique的,這個key可以在XML文檔中的其他部分通過keyref進行引用,keyref的值一定取自于key的某一個值。key的概念很類似于數據庫中的外鍵。
    key的具體定義方法很類似于unique的定義方法,首先“選擇”一組元素,然后指出某個屬性或者元素的“域”就是一個key。
    而keyref與key的定義完全相似,唯一的區別是加了一個refer屬性,這個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的一個keyref,它必須取值于上面的4個key值之一,這里它的值"e"因為不是取值于"a","b","c","d",所以會報錯-->
    </rootElement>

    posted on 2008-03-29 16:16 周銳 閱讀(599) 評論(0)  編輯  收藏 所屬分類: XML
    主站蜘蛛池模板: 亚洲精品视频在线观看视频| 亚洲av成人中文无码专区| 3d成人免费动漫在线观看| 亚洲成人动漫在线观看| 免费无码看av的网站| h视频在线观看免费| 久久亚洲精品成人AV| 精品国产精品久久一区免费式| 乱爱性全过程免费视频| 麻豆亚洲AV永久无码精品久久| 免费看的一级毛片| 国产免费一区二区三区不卡| 亚洲人成777在线播放| JLZZJLZZ亚洲乱熟无码| 又黄又爽又成人免费视频| 一级黄色免费大片| 亚洲一区二区三区播放在线 | 最近免费中文字幕大全| 两性色午夜视频免费网| 亚洲一本一道一区二区三区| 国产成人综合亚洲AV第一页| 一二三四在线观看免费高清中文在线观看 | 99在线在线视频免费视频观看| 亚洲精华液一二三产区| 亚洲av日韩av高潮潮喷无码| 国产美女a做受大片免费| 久久久久久国产精品免费无码| 亚洲精品无码久久久久YW| 亚洲AV区无码字幕中文色| 国产人妖ts在线观看免费视频| 在线日本高清免费不卡| yellow视频免费在线观看| 亚洲熟妇无码八V在线播放| 亚洲精品自产拍在线观看动漫| 免费一级毛片清高播放| 在线观看免费人成视频| 久久99精品国产免费观看| 中美日韩在线网免费毛片视频| 麻豆亚洲AV成人无码久久精品| 亚洲国产精品成人精品软件| 亚洲成Av人片乱码色午夜|