SXMLでajaxっぽいことをしてみる
AJAXは非同期通信によるUI改善アプローチの一つやってーのは知ってたが、実は詳しくは知らんかったんでちょっとやってみる。
AJAX=Asynchronus+Javascript+XMLHttpRequest なわけやが、要はJavascriptが何かからXMLを非同期に受け取って、ちょっと加工して表示するわけだ。そんなわけで、XMLを出すCGIか何かが要るわけやが、それをScheme(Gauche)でやってみる。
Scheme(Lisp)でのXMLはSXMLというやり方があるらしい。S式によるXMLの表現なんやが、つまりは
<item> <link>seimei_ajax.scm?s=%e5%af%ba%e5%b1%b1&m=%e4%bf%ae%e5%8f%b8 </link> <sei>寺山</sei> <mei>修司</mei> <description>歌人、劇作家、思想家</description> </item>
が
(item (link seimei_ajax.scm?s=%e5%af%ba%e5%b1%b1&m=%e4%bf%ae%e5%8f%b8) (sei "寺山") (mei "修司") (description "歌人、劇作家、思想家"))
と書けたりするわけだ。これで何が嬉しいかというと、プログラム中で自然にSXMLを構築して、一発変換でXMLにとして使えるあたり。quasi-quoteとunquoteを駆使するとかなりすっきりしたコードになる気がする。勿論再帰構造やマクロなんかもガンガンいける。XMLからSXMLに変換すればリスト処理でXMLが扱えるし、Gaucheならsxpathとかで簡単に探索できるし、これはかなり便利な気がしてきた。
まぁ、ともかくそんな感じで前に作ったランダムで名前を表示するCGIからXMLを出力して、javascriptでXMLHttpRequestして非同期で受け取って表示してみた。あー、できるねぇ。しかしとにかくDOMでガシガシ文書構築するのが鬱陶しい。まぁ、オブジェクト作ってるんやから仕方ないんやけど…。
で、結局ajaxなアプリケーションには程遠いんやが、基本的な部分は理解できたような気がする。ajaxではあんまり大きな動きを実現しようとすると死ぬ程面倒になるんで、問題はどのようなUIが実現したいかのヴィジョンかも。Google Mapとか次元の違うんは置いといて、一般にどういう見せかたが見易いか。ajaxなインターフェイスで追及するべきなんは、目的情報へのアクセスにかかるステップ数の減少やろうから。