2012-04-02 4 views
2

Эта проблема принимает меня слишком много времени, чтобы исправитьУникальный неправильный синтаксис XML?

я мог бы использовать некоторые указания

Я пытаюсь определить настольную игру и я хочу быть , что каждый дом может существовать только один раз, то есть он имеет a набор уникальных координат.

Я не понимаю, почему мой код принимает повторил значение координат

<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 дом с й и у 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

еще один вопрос ... уникальный тег должен быть в конце? потому что im использует xmlspy и дает мне проблемы, если я вставляю его перед complexType ... это заставляет меня задаться вопросом, не игнорирует ли он уникальный –

Смежные вопросы