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

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

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

    MDA之路

    MDA,UML,XML,Eclipse及Java相關(guān)的Blog
    posts - 53, comments - 494, trackbacks - 0, articles - 2
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    XMLSchema中的key和unique問題

    Posted on 2005-01-21 19:14 wxb_nudt 閱讀(3654) 評論(0)  編輯  收藏 所屬分類: XML技術(shù)

    (作者wxb_nudt,首發(fā)于中國XML論壇http://bbs.xml.org.cn/list.asp?boardid=28

    關(guān)于XML Schema中的key和unique的概念很多Schema教程里面講過,可惜網(wǎng)上大部分教程里面的例子是錯誤的,而且并沒有給出完整清晰的解釋,我查找了Schema的規(guī)范并寫出了相應(yīng)了例子,理清了這兩個概念,希望對大家有所幫助。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允許我們指出任意的屬性或者元素值在某個范圍內(nèi)是唯一的。為了指出這個屬性或者元素值的唯一性,我們使用了unique元素,它首先“選擇”一組元素,然后指出這個屬性或者元素的“域”在上一步所選擇出的元素集合中是唯一的。
    例子Schema:UniqueTest.xsd
    <?xml version="1.0" encoding="GB2312"?>
    <xs:schema xmlns:xs=" <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="
    <Name>wxb_nudt</Name>
     <Id>1001</Id>
     <Id>1002</Id>
     <Id>1001</Id> <!--這兒就會報錯,因?yàn)樗闹岛偷谝粋€Id重復(fù)了,并不是唯一的-->
     <Id>1004</Id>
    </Person>

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


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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: a高清免费毛片久久| 日本亚洲精品色婷婷在线影院| 男男gay做爽爽免费视频| 四虎影视成人永久免费观看视频 | 国产亚洲女在线线精品| 免费av欧美国产在钱| 亚洲国产精品人久久电影| AAA日本高清在线播放免费观看 | 好爽…又高潮了免费毛片| 精品亚洲成a人片在线观看 | 亚洲AV日韩AV天堂久久| 国偷自产一区二区免费视频| 在线观看国产区亚洲一区成人| 亚洲综合激情视频| 色欲国产麻豆一精品一AV一免费| 国产精品无码一二区免费| 亚洲aⅴ天堂av天堂无码麻豆 | 两性刺激生活片免费视频| 亚洲人成影院77777| 韩国欧洲一级毛片免费| 美女尿口扒开图片免费| 亚洲第一网站男人都懂| 99视频在线观看免费| 亚洲人成亚洲精品| 最近中文字幕无吗免费高清| 朝桐光亚洲专区在线中文字幕| 91热成人精品国产免费| 最新亚洲春色Av无码专区 | 无码精品国产一区二区三区免费| 最新欧洲大片免费在线 | 午夜精品在线免费观看| 精品特级一级毛片免费观看| 人人狠狠综合久久亚洲婷婷| 国产成人精品免费视频网页大全| 亚洲精品无码精品mV在线观看| 亚洲av成人一区二区三区观看在线| 免费A级毛片无码A∨| 在线a亚洲老鸭窝天堂av高清| 99视频精品全部免费观看| 亚洲中文字幕无码久久| 国产精品亚洲不卡一区二区三区|