2012-04-02 61 views
2

這個問題帶我太長時間來解決XML唯一錯誤的語法?

我可以使用一些指導

我試圖定義一個遊戲板,我想是 確保每家只能出現一次,這意味着它具有一個 獨特的座標集。

我不明白爲什麼我的代碼接受重複座標

<xs:element name="Board"> 
    <xs:complexType> 
     <xs:sequence minOccurs="3" maxOccurs="unbounded"> 
      <xs:element name="house" type="Tile"> 
       <xs:unique name="tileKey"> 
        <xs:selector xpath="./Point"/> 
        <xs:field xpath="x"/> 
        <xs:field xpath="y"/> 
       </xs:unique>     
      </xs:element>   
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 

<xs:complexType name="Tile"> 
    <xs:sequence> 
     <xs:element name="Point" type="Coords"/> 
    </xs:sequence> 
</xs:complexType> 

<xs:complexType name="Coords"> 
    <xs:sequence> 
     <xs:element name="x" type="xs:int"/> 
     <xs:element name="y" type="xs:int"/> 
    </xs:sequence> 
</xs:complexType> 

如果我有3個住宅x和y 0 XML是有效的。 我在做什麼錯?

輸出是一樣的東西

<Board> 
<house> 
    <Point> 
     <x>0</x> 
     <y>0</y> 
    </Point> 
</house> 
</Board> 

謝謝您的幫助

回答

3

你的獨特驗證只有一套房子(其中只能有一個通過你的模式定義內應用的點,所以驗證將永遠不會觸發)。如果要驗證所有房屋標籤中的所有點,則需要將您的唯一支票移出一個級別:

<xs:element name="Board"> 
    <xs:complexType> 
    <xs:sequence minOccurs="3" maxOccurs="unbounded"> 
     <xs:element name="house" type="Tile"> 
     </xs:element>   
    </xs:sequence> 
    </xs:complexType> 
    <xs:unique name="tileKey"> 
    <xs:selector xpath="./house/Point"/> 
    <xs:field xpath="x"/> 
    <xs:field xpath="y"/> 
    </xs:unique>     
</xs:element> 
+0

另一個問題......唯一標記必須是最終的嗎?因爲即時通訊使用xmlspy,並給我的問題,如果我把它粘貼在complexType之前......它讓我懷疑它是否忽略了獨特 – 2012-04-02 16:50:36