簡體   English   中英

XML模式唯一的子元素

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM