XML уникальный неправильный синтаксис? - PullRequest
2 голосов
/ 02 апреля 2012

Эта проблема занимает слишком много времени, чтобы исправить

Я мог бы использовать некоторые рекомендации

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

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

<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>

Спасибо за вашу помощь

1 Ответ

3 голосов
/ 02 апреля 2012

Ваша уникальная проверка применяется только к точкам в доме (из которых может быть только одна по определению схемы, поэтому проверка никогда не сработает).Если вы хотите проверить все точки во всех тегах домов, вам нужно переместить свой уникальный чек на один уровень:

<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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...