2016-12-04 6 views
0

У меня есть несколько типов данных, которые расширяются друг от друга с помощью идентификатора base = "". Все они в конечном итоге простираются от одного базового типа с идентификационным узлом. Я хотел бы, чтобы схема могла просматривать все элементы, чтобы убедиться, что идентификатор уникален для каждого элемента.xml-схема с использованием уникальных с основами

До сих пор у меня есть:

<effects> 
    <ResistanceModificationEffect> 
    <ID>fire_resistance</ID> 
    <!-- other stuff --> 
    </ResistanceModificationEffect> 
    <ResistanceModificationEffect> 
    <ID>fire_resistance</ID> 
    <!-- other stuff --> 
    </ResistanceModificationEffect> 
</effects> 

и схема:

<?xml version="1.0" encoding="UTF-8" ?> 
<xs:schema 
xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

<xs:element name="effects"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element name="ResistanceModificationEffect" type="resistanceModificationEffectDef" minOccurs="0" maxOccurs="unbounded"/> 
     </xs:sequence> 
    </xs:complexType> 
<xs:unique name="uniqueID"> 
    <xs:selector xpath=".//*"/> 
    <xs:field xpath="@ID"/> 
</xs:unique> 
</xs:element> 

</schema> 

Что касается хз: единственный элемент, я пробовал различные различные вещи, чтобы сделать это увидеть узел с идентификатор тега как узел для проверки уникальности.

<xs:selector xpath="*"/> 
    <xs:selector xpath="./*"/> 
    <xs:selector xpath=".//*"/> 

Из всего, что я читал о схемах, все, что мне нужно, это должно

<xs:selector xpath="*"/> 

если я не только не понимая его. This Ссылка говорит внизу, что «*» является допустимым идентификатором как выбор всех дочерних элементов, а «@elementName» должен выбрать элемент для сравнения.

Что я не понимаю?

ответ

0

Facepalm

Ответил на свой вопрос, используя ссылку я предоставил выше. Использование

<xs:field xpath="@ID"/> 

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

<xs:field xpath="ID"/> 

Дает правильное сообщение об ошибке. Я сосредоточился на неправильном ...

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