Один или несколько элементов, по крайней мере, один с заданным значением для атрибута

Мне нужно описать следующее в XML-схеме: один элемент должен встречаться 1 или более раз, но ровно одно вхождение этого элемента должно иметь атрибут «свойства», установленный в значение «nav»

Пример:

<manifest>
<item href="example" id="02" properties="cover-image" /> <!-- optional item -->
<item href="dummy" id="sample" properties="nav" /> <!-- mandatory item with "nav" value for "properties" attribute -->
<item href="example" id="02" properties="mathlm scripted" /> <!-- optional item -->
</manifest>

Моя «лучшая» попытка была:

    <xs:element name="manifest">
<xs:complexType>
<xs:choice>
<xs:element name="item" minOccurs="1" maxOccurs="1" ><!-- at least one (item property="nav")-->
<xs:complexType>
<xs:attribute name="href" type="xs:string" use="required" />
<xs:attribute name="id" type="xs:string" use="required" />
<xs:attribute name="media-type" type="xs:string" use="required" />
<xs:attribute name="fallback" type="xs:string" />
<xs:attribute name="properties" type="xs:string" use="required" fixed="nav" />
<xs:attribute name="media-overlay" type="xs:string" />
</xs:complexType>
</xs:element>
<xs:element name="item" minOccurs="0" maxOccurs="unbounded" >
<xs:complexType>
<xs:attribute name="href" type="xs:string" use="required" />
<xs:attribute name="id" type="xs:string" use="required" />
<xs:attribute name="media-type" type="xs:string" use="required" />
<xs:attribute name="fallback" type="xs:string" />
<xs:attribute name="properties" type="xs:string" />
<xs:attribute name="media-overlay" type="xs:string" />
</xs:complexType>
</xs:element>
</xs:choice>
<xs:attribute name="id" type="xs:string" />
</xs:complexType>
</xs:element>

Плохая попытка, так как валидатор выдает мне следующую ошибку:

локальный комплексный тип: модель содержимого не является детерминированной.

Понятно, что эта схема не является детерминированной, так как валидатор не может решить, должен ли он проверить обнаруженную item элемент с первым или вторым из 2 определений для этого элемента …
…но как мне этого добиться? Это вообще возможно ?

1

Решение

Этого нельзя достичь с помощью XSD 1.0, для этого требуется XSD 1.1 и утверждения. Я не думаю, что ваш валидатор схемы по умолчанию в PHP будет поддерживать XSD 1.1.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]