<wrap>
要素の内容が次のいずれかである必要がある XML ファイルの RelaxNG Compact スキーマを作成しています。
<wrap><a/></wrap>
<wrap><b/></wrap>
<wrap><a/><b/></wrap>
<wrap><b/><a/></wrap>
英語では、 または のいずれ<a/>
か<b/>
がそれぞれ 1 回、またはいずれかの順序で両方許可されますが、いずれか1 つが存在する必要があります。
以下よりも優れた (よりコンパクトな) 定義は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}?
}