例えば次のようなRelax NG(XML構文)文書の断片があったとして意味が分かるだろうか:
<define name="head">
<element name="head">
<ref name="head.attlist"></ref>
<ref name="head.content"></ref>
</element>
</define>
<define name="head.content">
<ref name="title"></ref>
</define>
<define name="head.content" combine="interleave">
<zeroOrMore>
<ref name="link"></ref>
</zeroOrMore>
</define>
いや、今分かったとして半年後に分かるだろうか。combine="interleave" の意味が。
一方、Compact Syntaxで書かれていたなら、半年後、一年後にも理解できる自信がある。
head = element head { head.attlist, head.content }
head.content = title
head.content &= link*
スキーマ文書など滅多に書かないので、Trangでひと手間かかったとしてもCompact Syntaxを使う利点は十分だなと、XHTML1.0のXML構文のスキーマをCompact Syntaxに書き直す練習をしていて確信した。validatorがあれば尚良い。個人的にはlibxml2が実装してくれたらとても嬉しい。