2016-11-22 82 views
0

我有一個XML文檔(最低可重複的例子),看起來像這樣的關係:表達「必須存在於」 XML模式

<root start="baz"> 
    <child name="foo">...</child> 
    <child name="bar">...</child> 
    <child name="baz">...</child> 
</root> 

我想我的模式來執行的事實start屬性上根元素必須引用具有該名稱的現有child節點。如果沒有具有該值的name屬性的子節點,則驗證應失敗。換句話說,上面應該驗證,但這應該不是

<root start="baz"> 
    <child name="foo">...</child> 
    <child name="bar">...</child> 
</root> 

什麼是做到這一點的好辦法?我是否真的需要使用帶有合適的XPath表達式的assert,還是有更自然的方式在XSD中表達它?謝謝。

PS:假設start是必填屬性,子name屬性在適當範圍內標記爲唯一。

回答

1

您正在查看xsd:key/xsd:keyref。請參閱:

XML Schema key/keyref - how to use them?

大概somethig像:

<xsd:key name="root-child-name"> 
    <xsd:selector xpath="root/child"/> 
    <xsd:field xpath="@name"/> 
</xsd:key> 
<xsd:keyref name="root-start" refer="root-child-name"> 
    <xsd:selector xpath="root"/> 
    <xsd:field xpath="@start"/> 
</xsd:keyref> 
+0

我只好把'的XPath ='在keyref這個工作對我來說,我會怎麼做 「」否則呢?如果'root'實際上是根元素,那麼我不能將keyref放在文檔樹中更高的位置,所以xpath不能工作,並且在選擇器中顯然不支持斜槓。 – Thomas

相關問題