2013-05-06 121 views
1

我希望能夠根據另一個屬性的值驗證元素中的屬性。像這樣的東西。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(糾正我,如果我錯了,因爲我不能證明這種方式或其他)。

回答

2

跨屬性值的跨約束需要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

相關問題