4

<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}?
}
4

1 に答える 1

5

以下は私にとってはうまくいきます:

grammar {
  start = 
    element wrap { (a|b)|(a&b) }

  a = element a {empty}
  b = element b {empty}
}
于 2013-08-12T20:59:48.213 に答える