我有一个看起来很像这样的 RelaxNG 模式:
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
<element name="xml">
<zeroOrMore>
<element name="multi">
<data type="string"/>
</element>
</zeroOrMore>
<optional>
<element name="optional">
<data type="string"/>
</element>
</optional>
</element>
</start>
</grammar>
我想允许 0-Nmulti
标签,但 0-1 optional
。只要 multis 在可选之前就可以正常工作,但是由于RNG 中的相对顺序很重要,如果它们在之后出现,它将失败:
有效的:
<xml>
<optional/>
</xml>
<xml>
<multi/>
<multi/>
<optional/>
</xml>
无效的:
<xml>
<optional/>
<multi/>
<multi/>
</xml>
那么我怎样才能允许任意顺序但保留约束呢?我尝试将整个东西包装在一个<zeroOrMore><choice>
块中,这允许任意顺序,但也允许任意数量的可选标签通过。