我正在为 XML文件编写RelaxNG Compact模式,其中 wrap的内容.元素必须是以下之一: wrapa//wrapwrapb//wrapwrapa/b//wrapwrapb/a//wrap 在英语中, a /或 b /每个都允许一次,或者两者都允许,但是其中一个必须
<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}?
}
以下适用于我:
grammar {
start =
element wrap { (a|b)|(a&b) }
a = element a {empty}
b = element b {empty}
}
