XSD:如何对一组键值使用限制?

问题描述 投票:0回答:1

我的实际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?

xml xsd xsd-validation
1个回答
0
投票

要在多个属性之间施加约束,您需要XSD 1.1断言:

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

作为xs:element的孩子。

但并非所有架构处理器都支持XSD 1.1。

© www.soinside.com 2019 - 2024. All rights reserved.