XML模式 - 根据另一个属性的值验证一个属性
问题描述:
我希望能够根据另一个属性的值验证元素中的属性。像这样的东西。XML模式 - 根据另一个属性的值验证一个属性
<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(纠正我,如果我错了,因为我不能证明这种方式或其他)。
答
跨属性值的跨约束需要XSD 1.1,正如您正确推测的那样,xmllint仅支持XSD 1.0。您需要向流水线添加其他验证技术:XSD 1.1或Schematron,或者使用XSLT编写的自定义验证器。
我宁愿得出结论,我可能需要升级到XSD 1.1。假设我能做到这一点,我需要寻找什么来实现我的目标? – Nerdio 2013-05-06 12:44:30
查找有关XSD 1.1中断言的信息。 – 2013-05-06 20:05:48