Интересно, можно ли использовать элемент keyref с дополнительными полями.XML-схема: keyref с необязательным полем
например. Учитывая следующую схему:
<element name="myElement" type="myType">
<complexType>
<sequence>
<element name="subElem">
<complexType>
<attribute name="name" type="string"/>
<attribute name="type" type="string"/>
</complexType>
</element>
<element name="subElem2">
<complexType>
<sequence>
<element name="subSubElem" minOccurs="0">
<complexType>
<attribute name="type" type="string"/>
</complexType>
</element>
</sequence>
<attribute name="name" type="string" use="required"/>
</complexType>
</element>
</sequence>
</complexType>
<key name="uniqueSubElem">
<selector xpath="subElem"/>
<field xpath="@name"/>
<field xpath="@type"/>
</key>
<keyref name="uniqueSubElemRef" refer="uniqueSubElem">
<selector xpath="subElem2"/>
<field xpath="@name"/>
<field xpath="subSubElem/@type"/>
</keyref>
</element>
В этом примере, если я не указать subSubElem в XML валидатор будет жаловаться:
Not enough values specified for <keyref name="uniqueSubElem"> identity constraint specified for element "myElement".
мне нужно как minOccurs="0"
и KeyRef ограничение, и если поле отсутствует, просто не хотите, чтобы какая-либо проверка выполнялась (как для NULL FOREIGN KEYs).
EDIT: Игнорирование пространства имен для этого примера, я использовал пространство имен по умолчанию для всего ...
Я исправил схему. В любом случае, это подтверждается, потому что атрибут «имя» также отсутствует, но мне он нужен. Я добавил 'use =' required '' для атрибута name. – andrey
Должен работать в любом случае, если вы добавите use = "required" в схему. Все еще не нужно указывать subSubElem. Я обновил решение. –
Если есть проблемы, просто дайте нам пример XML, который вы ожидаете проверить. И, пожалуйста, в следующий раз включите все ваши требования в вопрос и не обновляйте свой вопрос так, чтобы ответы стали устаревшими. –