XSD - уникальные значения двух разных атрибутов

Можно ли на уровне схемы применять уникальные значения двух атрибутов с разными именами?

<xs:complexType name="exampleType">
  <xs:attribute name="first" type="xs:integer" use="required"/>
  <xs:attribute name="second" type="xs:integer"/>
</xs:complexType>

Если first это 1, second должна быть какая-то другая ценность.

РЕДАКТИРОВАТЬ: я использую XSD 1.0.

1 ответ

Решение

Как я уже сказал в моем комментарии, это действительно только если first а также second являются элементами (не атрибутами). | Оператор xpath это как объединение узлов.

<xs:element name="exampleElement" type="exampleType">
    <xs:unique name="firstAndSecondDifferent">
        <xs:selector xpath="first | second" />
        <xs:field xpath="." />
    </xs:unique>
</xs:element>

<xs:complexType name="exampleType">
    <xs:sequence>
        <xs:element name="first" type="xs:integer" />
        <xs:element name="second" type="xs:integer" minOccurs="0" />
    </xs:sequence>
</xs:complexType>

Следующий элемент действителен (first а также second имеют разные значения):

<exampleElement>
    <first>1</first>
    <second>5</second>
</exampleElement>

Следующий элемент действителен (нет second элемент присутствует):

<exampleElement>
    <first>1</first>
</exampleElement>

Следующий элемент недействителен (first а также second имеют одинаковое значение):

<exampleElement>
    <first>1</first>
    <second>1</second>
</exampleElement>

Это не может быть сделано с атрибутами, потому что selector xpath не позволяет использовать атрибуты так "@first | @second" это недопустимое значение атрибута xpath селектора.

Другие вопросы по тегам