我知道all
并且choice
,但他们没有考虑我希望某些元素能够多次出现的情况,例如:
<Root>
<ThingA/>
<ThingB/>
<ThingC/>
<ThingC/>
<ThingC/>
</Root>
Run Code Online (Sandbox Code Playgroud)
我可以使用sequence
,但我更愿意让这些孩子处于任何顺序.我可以使用any
,但后来我不能超过一个ThingC
.我可以使用choice
,但我不能限制ThingA
和ThingB
为0或1.
我想我可能已经读过某些地方,这在XSD中很难或不可能,但RELAX NG也许可能.不幸的是,我不记得我在哪里读到这些.
谢谢你的帮助!
这是对的:你不能在XML Schema中做你想做的事,但你可以在RELAX NG中:
<element name="Root">
<interleave>
<element name="ThingA"><empty /></element>
<element name="ThingB"><empty /></element>
<oneOrMore><element name="ThingC"><empty /></element></oneOrMore>
</interleave>
</element>
Run Code Online (Sandbox Code Playgroud)
您在XML Schema中的选项是:
<xs:sequence>
<xs:choice>
,并添加额外的验证(例如使用Schematron)来检查是否有多个<ThingA>
或<ThingB>
事实证明,第三种通常是最好的选择; 对于按特定顺序输出元素的XML生成器通常没有多少成本,它不仅有助于验证,而且如果可以提前知道订单,它还有助于消耗XML.
归档时间: |
|
查看次数: |
753 次 |
最近记录: |