1

我希望能够根据另一个属性的值来验证元素中的属性。像这样的东西。

<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 验证架构,我认为这会将我限制为 XML 架构 1.0(如果我错了,请纠正我,因为我无法以一种或另一种方式证明这一点)。

4

1 回答 1

2

跨属性值的交叉约束需要 XSD 1.1,并且您猜对了,xmllint 仅支持 XSD 1.0。您将需要向管道添加一些其他验证技术:XSD 1.1 或 Schematron,或用 XSLT 编写的自定义验证器。

于 2013-05-06T12:18:53.847 回答