2013-02-19 29 views
1

使用xsd:key和xsd:keyref,我們可以驗證一個元素中的值是在另一個元素中定義的。我們這樣做是我們的模式,以確保所使用的有效價值,但我們也希望能夠驗證都在同一個元素中指定的值都在另一個元素的兒童使用,即:XSD可以驗證元素是否包含對另一個元素的所有定義的引用

<elementList> 
    <listEntry>Entry1</listEntry> 
    <listEntry>Entry2</listEntry> 
    <listEntry>Entry3</listEntry> 
</elementList> 
<elementOperations> 
    <operation name="Entry1">Operation1</operation> 
    <operation name="Entry3">Operation3</operation> 
</elementOperations> 

在這個例子中,我們希望存在驗證錯誤,因爲沒有名稱屬性指定Entry2的元素。這完全可以用XSD模式驗證嗎?

回答

2

如果您不允許在操作名稱中使用重複值,在這種情況下,只需添加另一個指向相反方向的鍵/ keyref對(即鍵現在是操作名稱)。

如果重複是可能的,那麼你不能單獨使用XSD 1.0來完成--Schematron可以幫助你。或者,如果您在支持XSD 1.1的環境中工作,請使用XSD 1.1的xsd:assert

+0

這很好地回答了這個問題,不幸的是,我發現所需的XML檢查實際上比我發佈的簡單示例更復雜,並且需要xpath測試,XSD 1.0不允許。 – devyndraen 2013-02-19 22:43:13

相關問題