[英]XML schema unique child elements
我試圖通過元素名稱驗證父元素是否具有唯一的子元素。 我還需要驗證至少存在一個可能的元素。
例
<StorageTypes>
<Status/>
<Warning/>
<Error/>
</StorageTypes>
會有效但是
<StorageTypes>
<Status/>
<Status/>
<Warning/>
<Error/>
</StorageTypes>
和
<StorageTypes>
</StorageTypes>
會無效的。
我已經嘗試使用xs:unique,選擇當前節點,但是我無法通常使用field元素選擇元素。
以下是我想要做的事情,但它不是我想要的強大解決方案。 我希望能夠添加更多類型,而不是為每個更改更改xpath。
<element ect.>
<xs:unique name="something">
<xs:selector xpath="."/>
<xs:field xpath="Status"/>
<xs:field xpath="Warning"/>
<xs:field xpath="Error"/>
</xs:unique>
</element>
這可能嗎? 這是好習慣嗎? 任何意見,將不勝感激。
不可能使用基於XSD 1.0的通用解決方案。 我不相信你的獨特性能達到你想要的,只是因為使用text()來評估一個字段的值; 所以標簽的名稱永遠不會在這個...
雖然你可能能夠達到你想要的東西,但它可能不適用於所有場景,或者它缺乏優雅或可行性......
某些人可能不會認為下面的方法是優雅的......盡管如此,它可以起到同樣的作用。
例如,如果您使用屬性來捕獲“標記”名稱,如下所示:
<StorageTypes>
<Storage type="Status"/>
<Storage type="Warning"/>
<Storage type="Error"/>
</StorageTypes>
然后在@type字段上編寫您的唯一,並結合一系列存儲,maxOccurs = whatever會嚴格按照您的描述給出。
如果您正在尋找實際上具有復雜內容的元素,或者不允許屬性,那么您可以使用替換組來實現相同的效果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.