XSD: как использовать ограничение на группу ключ-значение? - PullRequest
0 голосов
/ 22 марта 2019

Мои настоящие xml выглядят примерно так:

<gender code="2" display="female />

Код пола - 1-мужской, 2-женский.Теперь у меня уже есть xsd, например:

<xs:element name="gender">
    <xs:complexType>
        <xs:attribute name="code" type="xs:int">
            <xs:simpleType>
                <xs:restriction base="int">
                    <xs:enumeration value="1"/>
                    <xs:enumeration value="2"/>
                </xs:restriction>
            </xs:simpleType>
          </xs:attribute>
        <xs:attribute name="displayName" type="xs:string">
            <xs:simpleType>
                <xs:restriction>
                    <xs:enumeration value="male"/>
                    <xs:enumeration value="female"/>
                </xs:restriction>
            </xs:simpleType>
          </xs:attribute>
    </xs:complexType>
</xs:element>

Но он также действителен для этого xml:

<gender code="2" display="male />

Я ищу ограничение xs: но это не помогает. Есть ли другой способ исправить мой xsd?

1 Ответ

0 голосов
/ 22 марта 2019

Чтобы наложить ограничения на несколько атрибутов, вам нужны утверждения XSD 1.1:

<xs:assert test="(@code=1 and @display='male') 
                or (@code=2 and @display='female')"/>

как дочерний элемент xs:element.

Но не все процессоры схемы поддерживают XSD 1.1.

...