我希望能够根据另一个属性的值验证元素中的属性。这样的事情。
<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(如果我错了,请纠正我,因为我无法证明这种方式或其他方式)。
答案 0 :(得分:2)
跨属性值的交叉约束需要XSD 1.1,正如您所预测的那样,xmllint仅支持XSD 1.0。您需要在管道中添加一些其他验证技术:XSD 1.1或Schematron,或者用XSLT编写的自定义验证器。