![]() |
1
30
我通过设置 选择 以及设置minOccurs和maxOccurs属性。
|
![]() |
2
8
@Torbjrn自己的答案比这个答案更清楚,但是在你最初的尝试中只有一个小小的改变就会产生同样的结果:添加
|
![]() |
3
4
(这不完全是对OP的回答,而是对OP问题的另一个建议答案的回答。作为一个新成员,我不确定这是否打破了一些规则或惯例stackoverflow.com网站. 对不起。)
不 的确,尽管随着元素数量的增加,解决方案会迅速变得庞大。为这样的结构编写一个包含多个元素的模式是很费劲的,容易出错并且很难维护。因此,即使存在一个解决方案,实际实施它是不可能的,也不值得。 最初的问题只有三个随机出现的元素。正确的解决方案很简单,因为没有一个元素是强制性的。但即使在这种情况下,使用如此小的一组元素,强制每个元素至少出现一次仍然相当容易实现。下面的代码示例
我已经编辑了这个答案并更新了代码。新的一个更长,但它是一个非常明显的例子,利用基于状态的模式设计。代码遵循可以验证此问题的有限状态机的不同阶段。所有国家都代表为
问题的复杂性
这个有用吗?
也许 吧。。。不管怎样。对于大型元素集,手动编写并特别是更新这样的结构可能是不合理的。然而,由于所有的群体都有相似的结构
请记住,即使生成代码消除了手动跟踪整个结构的痛苦,在大型元素集上,代码的大小也会变得非常大,以至于大小不再合理。一组14个元素需要2^14=16383个组,在深度级别7处,最多有(14/7)=3432个平行状态组,每组有39个元素(=略高于40 LOC)。不,你不想那样。在这种情况下,您应该开始寻找其他合适的模式定义语言。 |
![]() |
4
1
这是一个非常古老的线程,但如果这可以帮助这里的任何人是我所做的解决问题。使用xsd:all和对任何可以忽略的子级设置minOccurs=“0”:
|
![]() |
5
0
不幸的是,在xmlschema中没有实际的方法来定义“这组子元素以任何顺序排列,但每个子元素至少出现一次”。 你要么被一个定义好的顺序,要么被一个集合中的一个(可能是重复的)卡住了。 编辑:否 这样,手动生成每一个可能的序列是可能的,而且会起作用,但是组合爆炸会很快失控。 |
![]() |
Dave · 在XSD中,如何在元素的内容中只允许空白? 6 年前 |
![]() |
Jakub Mosakowski · Xml架构唯一性不检查唯一性 6 年前 |
![]() |
Antek · XSD中的复杂元素验证 6 年前 |
![]() |
Phil · 动态XML模式验证文档的子部分 6 年前 |
![]() |
Feres.o · 在两个对象之间生成客户端wsimport未命中链接 6 年前 |