gpt4 book ai didi

XML 架构 (XSD) : How to express "At most one element from group A and at most one element from group b"?

转载 作者:行者123 更新时间:2023-12-03 16:13:39 24 4
gpt4 key购买 nike

假设我有两组 XML 元素:

<One/>
<Two/>
<Three/>


<A/>
<B/>
<C/>

我想让它们作为桶元素的子元素:
<Bucket>
<A/>
<One/>
</Bucket>

或者
<Bucket>
<C/>
<Two/>
</Bucket>

但我不想允许来自任一组元素的多个元素。 IE:
<Bucket>
<A/>
<B/>
<One/>
</Bucket>


<Bucket>
<A/>
<One/>
<Two/>
</Bucket>

将无效。我如何在我的 XML 模式中表达这一点?

我想试试 xs:unique但这会阻止 name()local-name()在字段或选择器中的用法。

更新

完整的解决方案是:
<xs:element name="Bucket">
<xs:complexType>
<xs:sequence>
<xs:choice minOccurs="0">
<xs:element name="A"/>
<xs:element name="B"/>
<xs:element name="C"/>
</xs:choice>
<xs:choice minOccurs="0">
<xs:element name="One"/>
<xs:element name="Two"/>
<xs:element name="Three"/>
</xs:choice>
</xs:sequence>
</xs:complexType>
</xs:element>

最佳答案

我会去类似的东西,

<xs:element name="Bucket">
<xs:complexType>
<xs:sequence>
<xs:choice>
<xs:element name="A"/>
<xs:element name="B"/>
<xs:element name="C"/>
</xs:choice>
<xs:choice>
<xs:element name="One"/>
<xs:element name="Two"/>
<xs:element name="Three"/>
</xs:choice>
</xs:sequence>
</xs:complexType>
</xs:element>

但可能定义了更好的类型来表示选择,而不是像那样将它们内联。但总体思路是一样的。

默认情况下, minOccursmaxOccurs设置为 1 ,因此默认情况下这不允许每种类型的倍数存在。这也意味着它们不是可选的。如果您希望任一组是可选的,您应该添加 minOccurs='0'<xs:choice>元素。

关于XML 架构 (XSD) : How to express "At most one element from group A and at most one element from group b"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1883500/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com