XML Schema - 根据另一个属性的值验证一个属性

时间:2013-05-06 10:09:42

标签: xml xsd

我希望能够根据另一个属性的值验证元素中的属性。这样的事情。

<Root>
    <Vehicle type="Unicycle" numWheels="1" />
    <Vehicle type="Bicycle" numWheels="2" />
</Root>

要求是如果车型是'单轮车',那么numWheels必须是1.否则我不在乎它有多少车轮。

我有类似的东西作为该类型的起点,我想强加限制。

<!-- Number of Wheels restrictions -->
<xsd:simpleType name="NumberOfWheelsType">
    <xsd:restriction base="xsd:integer">
        <xsd:minInclusive value="1"/>
    </xsd:restriction>
</xsd:simpleType>

我必须承认我不太确定从哪里开始创建我想要的限制,所以任何指导都会受到赞赏。

我正在使用xmllint来验证Schema,我认为这会限制我使用XML Schema 1.0(如果我错了,请纠正我,因为我无法证明这种方式或其他方式)。

1 个答案:

答案 0 :(得分:2)

跨属性值的交叉约束需要XSD 1.1,正如您所预测的那样,xmllint仅支持XSD 1.0。您需要在管道中添加一些其他验证技术:XSD 1.1或Schematron,或者用XSLT编写的自定义验证器。