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

时间:2019-03-22 06:59:22

标签: xml xsd xsd-validation

我的实际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:restriction,但似乎没有帮助。还有另一种方法可以修复我的xsd吗?

1 个答案:

答案 0 :(得分:0)

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

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

xs:element的子代。

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