« HDDを壊しました... | メイン | 仕事のスタック »

2005年1月18日

プログラミング言語としてのXML

カテゴリー: [プログラミング]

このあたりを読んで思ったこと.

Matzにっき (2005-01-13) 「私はなぜXMLを愛していないか」
型なし言語XML : NDO::Weblog

ほとんど自分の考えを整理するためのメモ書きですので,無駄に長文で,まともな文章ではないですが,その辺はご勘弁を.

私も,XMLをプログラミング言語のように使う研究をやっていたので,それがどんなにややこしいことか,わかっているつもりです
より汎用的なことをやろうとしたとたん,おもいっきりはまりました.苦労した割には,そんなに自由にプログラムが書けるようにはなりません.

自分でやっておいていうのはなんですが,そもそも,プログラミング言語として使うのは,XMLの目的からはずれているわけです.
静的な要素を宣言的に記述する局面ではある程度有効ですが,もうちょっと書けないかな,と欲を出すと,もうだめです.
私は,アプローチを間違えたというか,変な欲を出してしまったと思っています.
全く別の書き方を選択するべきでした.

いろいろな議論で似たような話出てきますが,結局,大きく分けて,次の3つのXMLがあるわけです.

  1. マークアップ言語としてのXML
  2. データフォーマットとしてのXML
  3. プログラミング言語としてのXML

本来は,1.が目的でしょう.
しかし,ほとんどのXMLは,データフォーマットとしてのXMLのような気がします.
それも,通信用だったり,設定ファイルだったり,さらにはデータベースだったりすることさえあります.
そして,3番目として,プログラミング言語のような振る舞いをするようなものもあります.
(私が今作っているものもそれに近いです)

型のないXMLはだめだとか,冗長性は悪であるという議論は,主に2. or 3.の視点でXMLを評価した場合に出てくるものでしょう.

Matzにっき(2005-01-05)

こっちを読むとよりはっきりします.
JavaでXMLを使う場合,XMLに「頻繁に変更される要素」を切り出すような事をすることが多いです.
これが,XMLをスクリプト言語として使うという話になるんだと思います.
こういう用途が,そもそもスクリプト言語では問題にならないことなんだ,というのもわかります.

XMLは,データフォーマットや,プログラミングに使えそうに見えます.
ツールがそろっているので,なおのことそう思えます.
それで,実際そう考えた人たちがいろいろいじったので,さらにそれっぽくなっています.
それでも,Java と XML の間の隙間が,完全に埋まるわけではありません.

型をつければいいかといえば,そういう問題でもないでしょう.
動的な言語ならともかく,Javaのように強い静的な型を持つ言語では,それほど便利にはならない気がします.
そもそも,この問題は使い方の問題であって,XML自身が悪いわけではありません.
XMLを改良するべきであるという話ではないと思います.
単に,一つの記述方法で何でもやろうとしているところに問題があるのでしょう.

ただ,XMLは,そのいろいろなツールのおかげで,結構便利に使えますから,現実的な選択として,データフォーマットとしてXMLを使うのは十分ありえるわけです.
ツールのおかげで使えるようになっただけで,XML自身がそれに向いているわけではないのでしょうが.
まあ,その辺は気にしても仕方ないと思っています(笑)
XMLSchemaを使えば,validation もやってくれるので,データフォーマットとしてもそれなりに使えます.
しかし,結局 Java のコード側で,型に合わせてパースする必要があるのが問題というのは,理解できます.分散しますからね.
ですから,私の場合,JavaからXMLを使う場合は,RelaxNG と Relaxer を使っています.プリミティブな型なら,これで何とかなりますから.
RelaxNG は,XMLSchema と比べて,大げさでもありませんし,スキーマさえ書けば,コードは自動生成されます.
Relaxer もこれはこれで問題がないわけではないんですが...

また,Javaでスクリプト言語をやるなら,私は,素直に Groovy などのJava上で動作するスクリプト言語を使うべきだと思います.

いまいちすっきりしなくて,消化不良ですが,今回はこんなところで.

投稿者 shingo : 2005年1月18日 21:32

トラックバック

このエントリーのトラックバックURL:
http://isolinear.info/cgi-bin/mt/mt-tb.cgi/19

コメント

コメントしてください

コメントスパム等の対策のために,大量のURLを含むコメント,古いエントリーに対するコメント,連続したコメントなどは,一旦保留されます.




保存しますか?