我正在使用RELAX NG开发一个模式。我对此很新,所以很可能忽视了一些显而易见的事情,但似乎没有一种方便的方式来指定XML模式语言中元素的出现次数。如何在RELAX NG中指定出现的数字范围?
例如,假设我想指定A
元素可能包含2 - 5个B
元素。我不想使用3210或oneOrMore
标签,因为我实际上对元素数量有上限。在XML Schema中,我可以使用minOccurs
和maxOccurs
属性来紧凑地指定。我已阅读了official RELAX NG tutorial,删除了the spec,并完成了一些基本的Google搜索,但我一直无法找到任何使用RELAX NG的方法。我可以找出最好的,你需要做这样的事情:
<element name="A">
<ref name="B"/>
<ref name="B"/>
<optional><ref name="B"/></optional>
<optional><ref name="B"/></optional>
<optional><ref name="B"/></optional>
</element>
<define name="B">
<element name="B">
<text/>
</element>
</define>
这是可行的,但将开始寻找丑陋当你需要出现一个更大的数字。在我的实际模式中,我有一个可能发生多达256次的元素类型,所以手动指定的可选元素将会很笨重。如果需要,我会做,但我想知道是否有更优雅的方式来表达我的出现限制。
感谢您的建议!我曾想到你的第一个方法,但决定反对它。第二种方法似乎不会太麻烦。我可能会最终使用这个。 – 2010-09-03 17:30:11