繁体   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