compact syntax

最近(というわけでもないが)のお気に入りは compact syntax だ。僕は XML が大好きだが、データ系 XML を手書きするのは本当に面倒くさかった。文書系 XML 文書は psgml や nxml-mode で書けば問題なかったが、XSLT や RELAX, RELAX NG, XML Schema などをエディタでこつこつと書くのは耐えがたかった。そんなときに出会ったのが RELAX NG compact syntaxだ。
これは RELAX NG の省略記法で、とても直感的に記述することができる。
たとえば


  
    苗字 <!-- 省略不可 -->
    ミドルネーム <!-- 省略可 -->
    名前 <!-- 省略可 -->
  
  東京都千代田区神田神保町… <!-- 省略可 -->

というような XML 文書のスキーマ

element person {
  element name {
    element family { text },
    element middle { text }?,
    element given { text }?,
  },
  element addr { text }?
}

というように非常にコンパクトに記述できる。
これを作ったのは James Clark 氏だが、この compact syntax を使っていると、彼の思想がひしひしと伝わってくる。たとえば nxml-mode に付属しているいろいろな XML ボキャブラリの RELAX NG compact syntax 記述を見ていると、コメントがぜんぜんないのに、非常にわかりやすい。僕も自分ですでに結構な量のボキャブラリを compact syntax で書いているが、どれも読みやすくて、メンテナンス性がよい。
RELAX NG を書く人には本当にお勧めである。

もう一つ最近気になる compact syntax がある。XLST の省略記法 XSLTXT だ。僕はこれを Ned Batchelder 氏の blog ではじめて知った。Batchelder 氏といえば Lotus Notes らしいが、そのことについてはまた今度。この XSLTXT、名前は XSLT 使いには非常に紛らわしい(なんといっても XSLT と XT の組み合わせだ)のだが、中身はなかなかよさそうだ。Batchler 氏のポストでも触れられているがちょうどバージョン2が公開されている。バージョン2ではシンタックスが C スタイルに近づいたようだ。僕にはこのほうが使いやすそうである。
xsl:template が tpl になるのは好みが分かれそうだが、僕には許容範囲内なので、使ってみるつもりである。プロジェクトは java.net にある。

そのほかの XML の短縮構文については xml.com の編集長である Edd Dumbill 氏のレポートが詳しい。