gpt4 book ai didi

xsd - XML模式-maxOccurs在choice元素内

转载 作者:行者123 更新时间:2023-12-04 10:39:15 25 4
gpt4 key购买 nike

我有以下架构声明:

<element name="container">
<complexType>
<choice minOccurs="0" maxOccurs="unbounded">
<element name="action" minOccurs="0" maxOccurs="1" />
<element name="query" minOccurs="0" maxOccurs="unbounded" />
<element name="validator" minOccurs="0" maxOccurs="unbounded" />
</choice>
</complexType>
</element>

我基本上希望 <container>包含所需的 <query><validator>元素,但只包含一个 <action>元素(可能没有)。

据我所知,我无法在 <choice>上放置maxOccurs,因为从技术上讲,可以无限制地进行选择(由于查询和验证程序没有约束)。

但是,此XML在Eclipse中被认为是有效的(尽管其他所有位都可以正常工作,但在Eclipse验证中可能只是个问题)
<container>
<action id="action1" name="action1" />
<action id="action2" name="action2" />
<query id="query1" />
<validator id="testValidator" />
</container>

不知道我是否缺少明显的东西。

最佳答案

您当前的模型定义了以下选择:(a)一个action元素或不选择,(b)零个或多个query元素,或(c)零个或多个validator元素,然后允许该选择重复零次或多次。因此,它等效于

<choice minOccurs="0" maxOccurs="unbounded">
<element name="action"/>
<element name="query"/>
<element name="validator"/>
</choice>

它允许零个或多个元素的任何序列,每个元素都是 actionqueryvalidator元素。

您可以通过使用 sequence而不是 choice来满足您提出的要求:
<sequence>
<element name="action" minOccurs="0" maxOccurs="1" />
<element name="query" minOccurs="0" maxOccurs="unbounded" />
<element name="validator" minOccurs="0" maxOccurs="unbounded" />
</sequence>

有时,不同种类的元素出现的顺序会传达信息,因此有必要将它们混合在一起。在那种情况下,该问题类似于以下规则表达问题:编写一个正则表达式,定义由“a”,“q”和“v”组成的字符串集,其中“a”最多出现一次。一个明显的正则表达式是 (q|v)*(a(q|v)?)。类似的XSD模型组是:
<sequence>
<choice minOccurs="0" maxOccurs="unbounded">
<element ref="query"/>
<element ref="validator"/>
</choice>
<sequence minOccurs="0">
<element name="action"/>
<choice minOccurs="0" maxOccurs="unbounded">
<element ref="query"/>
<element ref="validator"/>
</choice>
</sequence>
</sequence>

(为了避免每次都必须声明两次 queryvalidator,我从本地元素声明更改为元素引用)。

在XSD 1.1中,应该可以通过 all组获得相同的效果:
<all>
<element name="action" minOccurs="0" maxOccurs="1" />
<element name="query" minOccurs="0" maxOccurs="unbounded" />
<element name="validator" minOccurs="0" maxOccurs="unbounded" />
</all>

关于xsd - XML模式-maxOccurs在choice元素内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19863952/

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