2009年2月8日日曜日

XMLを扱う (その22) [Common Lisp]

XML文書の生成についてcxmlをつかってちょこちょこやってみた。
これは便利。コードサンプルは曝すほどのものじゃないの割愛するが、まとめを少々。


  • まず楽なのはxmls。なんせリストなんで。目的とするXML文書のxmlsを関数だマクロだを適宜使って作成してあとはXML文書に変換。動作速度を問題にしないのであれば、これが一番楽じゃないかなぁ。
  • SAXをそのまま使うということはないかな。xmlsでもDOMでもSTPでもよいので、源泉となるデータ構造を作ってしまって、そこからSAXイベントを発行してXML文書にもっていくという構造だと思う。STPのAPIがかなり柔軟なので、STPを選択するケースがおおいかもしれない。

  • 逆にXML文書を受けとるときは、というと、とにかくlispの中にまとめてもってきて処理するなら、DOMまたはSTPまたはxmlsということ。これはその後の処理が何かによって選択すればよろし。
  • まとめてlispにもってくるんじゃなくて受信時に変換してしまうならKlacks。例えば、XML文書がもっている一部の情報だけLispの中にもってきたいときなど簡明。

  • 妥当性チェックについては、XML Schemaは対応していない。RelaxNGは、私の環境では動かない。なので、現状使えるのはDTDだけ。これは将来はなんとかしないといけないが、XMLの妥当性検証というのは実は世の中ではそんなに積極的には運用されていないようだ。というのはXMLを使う際にもアジリティというのはあって、そもそも適当に書いちゃう(書けちゃう)ところに強みがあるからに思える。すなわち動的型付け、みたいなものということ。妥当性検証をがちがちにやるのは静的な型付けのようなもので、それは確立したインターフェイスの安全性を増す、とかについては役に立つんだけど、それはそんなに多くないということ。世の中で公表されているXML文書というのが、そういう確立インターフェイスなものしかないのでいつでもSchemaがあるような印象があるが、全体で見るとそれは少数でしかないと思う。実際、私も業務の中でXML文書を取扱うことがしばしばあるが、SchemaをSchema言語で定めるエンジニアは極めて少ない。Schema言語で書くとエンジニア以外が理解できないからだ。なので、大抵のケースはエクセルの表でSchemaを定めている。そしてそれで事足りるのでSchema言語では書かないというケースが多い。


一応XML文書をCommon Lispで取扱う準備が整った。
Closure XMLというライブラリには感銘を受けた。Common LispでここまでXML文書を扱う機構が整備されているとは思いもしなかった。すばらしいことだと思う。

こつこつ。

0 件のコメント: