все! Это мой первый вопрос о stackoverflow, хотя я регулярно читаю сообщения на этом сайте.Уникальные элементы и атрибуты XSD
Чтобы добраться до точки, я пытаюсь определить XML-схему, которая выглядит следующим образом:
<xs:element name="keyConfiguration">
<xs:complexType>
<xs:sequence>
<xs:element name="move">
<xs:complexType>
<xs:attribute name="N" type="keyCode"/>
<xs:attribute name="NE" type="keyCode"/>
<xs:attribute name="E" type="keyCode"/>
<xs:attribute name="SE" type="keyCode"/>
<xs:attribute name="S" type="keyCode"/>
<xs:attribute name="SW" type="keyCode"/>
<xs:attribute name="W" type="keyCode"/>
<xs:attribute name="NW" type="keyCode"/>
</xs:complexType>
</xs:element>
<xs:element name="wait" type="keyCode"/>
<xs:element name="select" type="keyCode"/>
</xs:sequence>
</xs:complexType>
<xs:unique name="uniqueKeyCode">
<xs:selector xpath="."/>
<xs:field xpath="move/@*"/>
<xs:field xpath="wait"/>
<xs:field xpath="select"/>
</xs:unique>
keyCode
является типом перечисления, используемый для идентификации нажатий клавиатуры и принимает подмножество xs:int
.
Идея заключается в том, что я не хочу, чтобы проверить XML-файлы, которые отображают множество возможных действий в том же ключе, так что следующий XML должен быть недействительны:
<keyConfiguration>
<move N="101" NE="101" E="102" SE="99" S="98" SW="97" W="100" NW="103"/>
<wait>101</wait>
<select>101</select>
</keyConfiguration>
Оба атрибута для перемещения на Север, Север -East и т. Д., А элементы для действий ожидания/выбора повторяются, и ни одно из них не должно происходить. Все атрибуты для направлений движения и всех элементов для других действий должны быть уникальными.
К сожалению, когда я пытаюсь проверить данный XML на XSD, он действителен! Я думаю, что XPath в уникальном теге сломаны, но я не знаю, как это исправить (я пробовал несколько вариантов, включая <xs:field xpath="*/move/@*"/>
и <xs:field xpath="*/wait"/>
, и он все еще не работал).
Заранее благодарен!
Edit: здесь полное определение схемы, если это помогает:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:simpleType name="keyCode">
<xs:restriction base="xs:int">
<xs:enumeration value="10"/> <!-- Enter -->
...
<xs:enumeration value="96"/> <!-- NumPad-0 -->
<xs:enumeration value="97"/> <!-- NumPad-1 -->
<xs:enumeration value="98"/> <!-- NumPad-2 -->
<xs:enumeration value="99"/> <!-- NumPad-3 -->
<xs:enumeration value="100"/> <!-- NumPad-4 -->
<xs:enumeration value="101"/> <!-- NumPad-5 -->
<xs:enumeration value="102"/> <!-- NumPad-6 -->
<xs:enumeration value="103"/> <!-- NumPad-7 -->
<xs:enumeration value="104"/> <!-- NumPad-8 -->
<xs:enumeration value="105"/> <!-- NumPad-9 -->
...
</xs:restriction>
</xs:simpleType>
<xs:element name="keyConfiguration">
<xs:complexType>
<xs:sequence>
<xs:element name="move">
<xs:complexType>
<xs:attribute name="N" type="keyCode"/>
<xs:attribute name="NE" type="keyCode"/>
<xs:attribute name="E" type="keyCode"/>
<xs:attribute name="SE" type="keyCode"/>
<xs:attribute name="S" type="keyCode"/>
<xs:attribute name="SW" type="keyCode"/>
<xs:attribute name="W" type="keyCode"/>
<xs:attribute name="NW" type="keyCode"/>
</xs:complexType>
</xs:element>
<xs:element name="wait" type="keyCode"/>
<xs:element name="select" type="keyCode"/>
</xs:sequence>
</xs:complexType>
<xs:unique name="uniqueKeyCode">
<xs:selector xpath="."/>
<xs:field xpath="*/move/@*"/>
<xs:field xpath="*/wait"/>
<xs:field xpath="*/select"/>
</xs:unique>
</xs:element>
</xs:schema>
Может быть, это что-то делать с пространством имен? Я пробовал смотреть в Интернете с примерами xpath, но я не мог найти ничего, что помогло бы мне идентифицировать проблему. Благодаря!
Большое спасибо, это именно то, что мне нужно! Я очень ценю, что вы нашли время, чтобы написать ответ! –
Добро пожаловать. Рад, что смог помочь :) – sergioFC