我知道all
并且choice
,但他们没有考虑我希望某些元素能够多次出现的情况,例如:
我可以使用sequence
,但我更愿意让这些孩子处于任何顺序.我可以使用any
,但后来我不能超过一个ThingC
.我可以使用choice
,但我不能限制ThingA
和ThingB
为0或1.
我想我可能已经读过某些地方,这在XSD中很难或不可能,但RELAX NG也许可能.不幸的是,我不记得我在哪里读到这些.
谢谢你的帮助!
这是对的:你不能在XML Schema中做你想做的事,但你可以在RELAX NG中:
您在XML Schema中的选项是:
添加一个预处理步骤,将输入XML规范化为特定顺序,然后使用
使用
,并添加额外的验证(例如使用Schematron)来检查是否有多个
或
决定修复标记语言中元素的顺序
事实证明,第三种通常是最好的选择; 对于按特定顺序输出元素的XML生成器通常没有多少成本,它不仅有助于验证,而且如果可以提前知道订单,它还有助于消耗XML.