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编写的自定义验证器。

+0

我宁愿得出结论,我可能需要升级到XSD 1.1。假设我能做到这一点,我需要寻找什么来实现我的目标? – Nerdio 2013-05-06 12:44:30

+0

查找有关XSD 1.1中断言的信息。 – 2013-05-06 20:05:48