我正在为 XML 文件编写一个 RelaxNG Compact 模式,其中元素的内容<wrap>
必须完全是以下之一:
<wrap><a/></wrap>
<wrap><b/></wrap>
<wrap><a/><b/></wrap>
<wrap><b/><a/></wrap>
在英语中,一个<a/>
或一个<b/>
被允许一次,或者两者都允许,但其中一个必须出现。
是否有WrapElement
比以下更好(更紧凑)的定义?
grammar {
start =
element wrap { WrapElement }
WrapElement =
(
element a {empty},
element b {empty}?
)|(
element a {empty},
element b {empty}?
)
}
以下是接近的。它当然更简洁,它匹配所有允许的变化,并且不允许元素多次出现。但是,它也错误地允许空<wrap/>
元素:
grammar {
start =
element wrap { WrapElement }
WrapElement =
element a {empty}?
& element b {empty}?
}