2012-04-02 7 views
2

この問題は、私はゲームボードを定義しようとしていると私はそれぞれの家は、それが持っている意味、一度だけ存在することができ ことを確認したい、私はいくつかのガイダンスXML固有の間違った構文ですか?

を使用することができます

を修正するにはあまりにも長い間、私を取っています の座標が一意です。

私のコードは、私は、xとy 0と3つの家を持っている場合は、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

あなたのユニークな検証が唯一の家の中の点に適用しているあなたの助けをありがとうそのうち

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

のようなものですバリデーションは決してトリガされません)。すべてのハウスタグ内のすべてのポイントを検証したい場合は、一意のチェックを1つのレベルに移動する必要があります。

<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の前に貼り付けると問題が出るので... –

関連する問題