鍏充簬XML Schema涓殑key鍜寀nique鐨勬蹇靛緢澶歋chema鏁欑▼閲岄潰璁茶繃錛屽彲鎯滅綉涓婂ぇ閮ㄥ垎鏁欑▼閲岄潰鐨勪緥瀛愭槸閿欒鐨勶紝鑰屼笖騫舵病鏈夌粰鍑哄畬鏁存竻鏅扮殑瑙i噴錛屾垜鏌ユ壘浜哠chema鐨勮鑼冨茍鍐欏嚭浜嗙浉搴斾簡渚嬪瓙錛岀悊娓呬簡榪欎袱涓蹇碉紝甯屾湜瀵瑰ぇ瀹舵湁鎵甯姪銆俋ML Schema瑙勮寖鏉ヨ嚜浜?BR>http://www.w3.org/TR/xmlschema-0/
1.unique鐨勫畾涔夊拰渚嬪瓙
瑙勮寖涓浜巙nique鏄繖鏍峰畾涔夌殑錛歑ML 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.
璇戞枃錛歑ML Schema鍏佽鎴戜滑鎸囧嚭浠繪剰鐨勫睘鎬ф垨鑰呭厓绱犲煎湪鏌愪釜鑼冨洿鍐呮槸鍞竴鐨勩備負浜嗘寚鍑鴻繖涓睘鎬ф垨鑰呭厓绱犲肩殑鍞竴鎬э紝鎴戜滑浣跨敤浜唘nique鍏冪礌錛屽畠棣栧厛鈥滈夋嫨鈥濅竴緇勫厓绱狅紝鐒跺悗鎸囧嚭榪欎釜灞炴ф垨鑰呭厓绱犵殑鈥滃煙鈥濆湪涓婁竴姝ユ墍閫夋嫨鍑虹殑鍏冪礌闆嗗悎涓槸鍞竴鐨勩?BR>渚嬪瓙Schema錛歎niqueTest.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> <!--榪欏効灝變細鎶ラ敊錛屽洜涓哄畠鐨勫煎拰絎竴涓狪d閲嶅浜嗭紝騫朵笉鏄敮涓鐨?->
<Id>1004</Id>
</Person>
2.key鐨勫畾涔夊拰渚嬪瓙
瑙勮寖涓槸閫氳繃涓涓緝闀跨殑渚嬪瓙鏉ヨ鏄巏ey鍜宬eyref鐨勫畾涔夛紝褰掔撼璧鋒潵鍙互鍋氬涓嬪畾涔夛細XML Schema鍙互閫氳繃灝嗕竴涓厓绱犳垨鑰呭睘鎬у畾涔変負涓涓猭ey錛岃繖涓猭ey蹇呴』鏄痷nique鐨勶紝榪欎釜key鍙互鍦╔ML鏂囨。涓殑鍏朵粬閮ㄥ垎閫氳繃keyref榪涜寮曠敤錛宬eyref鐨勫間竴瀹氬彇鑷簬key鐨勬煇涓涓箋俴ey鐨勬蹇靛緢綾諱技浜庢暟鎹簱涓殑澶栭敭銆?BR>key鐨勫叿浣撳畾涔夋柟娉曞緢綾諱技浜巙nique鐨勫畾涔夋柟娉曪紝棣栧厛鈥滈夋嫨鈥濅竴緇勫厓绱狅紝鐒跺悗鎸囧嚭鏌愪釜灞炴ф垨鑰呭厓绱犵殑鈥滃煙鈥濆氨鏄竴涓猭ey銆?BR>鑰宬eyref涓巏ey鐨勫畾涔夊畬鍏ㄧ浉浼鹼紝鍞竴鐨勫尯鍒槸鍔犱簡涓涓猺efer灞炴э紝榪欎釜refer灞炴ф寚鍑轟簡key鐨勫悕瀛楋紝鍏蜂綋渚嬪瓙濡備笅錛?BR>渚嬪瓙schema錛欿eyExam.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錛欿eyExam.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"/>
<!--涓婇潰鐨別lementTwoDesc浣滀負elementOneDesc鐨勪竴涓猭eyref錛屽畠蹇呴』鍙栧間簬涓婇潰鐨?涓猭ey鍊間箣涓錛岃繖閲屽畠鐨勫?e"鍥犱負涓嶆槸鍙栧間簬"a","b","c","d",鎵浠ヤ細鎶ラ敊-->
</rootElement>