最近、XMLでプログラミングするのが流行っているようです。
XSLTしかり、XQueryしかり。
JSPも、拡張タグを使ってロジックを記述すれば同じことが言えるでしょう。
あらゆる場面でXMLが使われ始めるようになってきました。
設定ファイル、HTML、Webサービス、Ajax、データベース、そしてプログラム言語。
ほとんどの場面で、XMLはうまくいきます。
全てのオブジェクトはXMLで表現できるといっても過言ではありません。
それほど、XMLは多彩なのです。
しかし、世の中に万能なものなどありません。もちろんXMLもそうです。
XMLでプログラミングすることを、僕は絶対にオススメしません。
XMLは簡単に言えば、ツリー構造を持ったデータ格納表現の一つです。
Java的に言えば、HashMapのようなものです。
XMLでプログラムするという事は、端的に言えば
HashMapの中に全てのプログラムコードを押し込めようとしているのです!
もちろんXMLにはHashMapには無いバリデーション機能やリンク機能もあります。
しかし、到底プログラムできるほどの拡張性を持った形式ではないのです。
XMLでプログラミングしようとすれば、必ず無理が出てきます。
例えば、プログラムの基本でもあるif文。
Javaで書けば以下のようになるでしょう。
if (value == 50) {
println("ok!");
}
これをXMLで書くと、例えば以下のようになります。
<if test="value == 50"> <println message="ok!" /> </if>
この程度ならまだ、XMLで書いても見劣りしないレベルです。
では、次。if~else文を書いてみましょう。
if (value == 50) {
println("ok!");
} else {
println("ng!");
}
XMLで書くと…
<if test="value == 50"> <println message="ok!" /> </if> <else> <println message="ng!" /> </else>
ifとelse要素が直列に並んでいて、あまり綺麗な形とは言えません。
しかし、XMLでif~elseを表現するにはこうするしか無いのです。
XMLでは、< や > はタグの開始・終了文字なので特別扱いしなければなりません。
しかしプログラム言語において、これらの記号は極めて一般的な文字なのです。
String str = "name <mail.address>";
XMLでこれを表現するには、以下のようにします。
<str> name <mail.address> </str>
もしくは…
<str> <![CDATA[ name <mail.address> ]]> </str>
このように全体をCDATAで囲みます。
どちらにしても、非常に読みにくいです。
そう、XMLはそもそも記号を扱うようには設計されていないのです。
ではこれなんかどうでしょう。
String str = "<tag " + getTitle() + " />";
CDATAを使わずにXMLで書くと…
<str>
<tag
<set value="getTitle()" />
/>
<str>
こんな感じになるでしょうか。
やっぱり読みにくいのでCDATAを使いましょう。
<str>
<![CDATA[
<tag
<set value="getTitle()" />
/>
]]>
<str>
上のXMLを見て、間違いに気付いた人は鋭いです。
CDATAを使うと「全てが文字列として扱われる」ので、内部に子要素を持つことは出来ないのです。
この例で言えば、setは要素ではなくて単なる文字列として扱われてしまいます。
ですから、CDATAを使わないで書くしか無いのです。
もちろんこの例の場合、他の書き方をすることでもっとスマートに書くことも可能です。
しかし、このように特殊文字の制約を受けることは非常に多いのです。
その結果、不便なプログラミングを強いられることになり
読みにくいコードが出来上がることになります。
XMLでプログラミングすることは、非常に無駄が多いです。
パズル感覚で時間をたっぷり使って趣味のようにやる人はそれでもいいかもしれませんが、
もし限られた時間の中でやるのなら絶対にオススメできない選択肢です。
世の中にはもっと洗練されたプログラミング言語が沢山あります。
それを使った方が、ストレスに悩まされながら四苦八苦しなくて済むでしょう。