【发布时间】:2011-04-06 19:33:16
【问题描述】:
我正在使用 RELAX NG 开发架构。我对此很陌生,所以很可能我忽略了一些明显的东西,但似乎没有一种方便的方法来指定一个元素的出现次数,就像在 XML Schema 语言中那样。
例如,假设我想指定一个A 元素可能包含2 - 5 个B 元素。我不想使用zeroOrMore 或oneOrMore 标签,因为我实际上确实有元素数量的上限。在 XML Schema 中,我可以使用 minOccurs 和 maxOccurs 属性来紧凑地指定它。我已经阅读了official RELAX NG tutorial,略读了the spec,并进行了一些基本的谷歌搜索,但我找不到任何方便的方法来使用 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 次,因此手动指定的可选元素会很笨重。如果需要,我会这样做,但我想知道是否有更优雅的方式来表达我的出现限制。
【问题讨论】: