ちょっと理由があって、Relaxerの動作を確認したくなり、最新版(1.0)を入れてみました。
楽になったインストール §
昔のJDKにはXMLパーサも無くて、いちいちパーサを別途用意する必要があったのですが。今は、そんなことが無くなったようで、とても楽になりました。
単に、JDKが入った環境にRelaxerをインストールするだけで、すぐ動くようになりました。
っていうか、そもそもJavaのXML対応は遅すぎ。いちいち、コロコロファイルのバージョンが変わるオープンソースのXMLパーサを指示して、これをインストールして下さい、と言うのが面倒だからJavaでプログラムを書きたくなかった、という側面は確かにあります。
まあ、逆に言えば、そういう面倒が解消されたので、Javaで書くための障害が1つ消えたとも言えますね。
時代は変わっている §
昔のRelaxのサンプルスキーマを出してきて通したらエラーになりました。かなり仕様変更が進んでいる感じですね。
というわけで、Relaxer同梱のRELAX NGのサンプルスキーマを通したら、あっさりJavaソースが生成されました。
昔、Relaxerを試用した時と比較して、かなりラクチン度アップという感じです。普通のプログラマにもRelaxerファンが増えている理由が分かります。
Relaxerでコンポーネント §
とりあえず、RELAX NGソースからJavaソースを生成することはできたので、ざっとドキュメントを見ていると。
Relaxer Component Compilerだの、Relaxer Component Definition Language (RCDL)だのといったキーワードが見えます。Relaxerでコンポーネントを定義してしまい、その定義からソースコードを生成してしまうわけですね。注意してみていないうちに、面白い機能が増えているようで。
意味はまったく理解していませんが、RCDLのサンプルコードを以下に転載してみます。
<?xml version="1.0"?>
<component xmlns="http://www.relaxer.org/xmlns/cdl"
namespace="http://www.example.com/hello" name="hello">
<interface namespace="http://www.example.com/hello" name="hello">
<operation name="greeting">
<in name="message" type="string"/>
<out name="result" type="string"/>
</operation>
</interface>
</component>
これは、helloというコンポーネントには、greetingという操作(operation)があって、それはmessageというstring型の入力をもらって、resultというstring型の出力を持つということでしょうね。
これは、コンポーネントをソースコードよりも1段階抽象度の高いレイヤーで定義してしまうという感じでしょうか。UMLやモデリングとの相性が良さそうですね。
これが本当に役に立つのかどうかは全く分かりませんが(使ってもいないし)、ただ1つだけ確かなことは、「ワクワクした」ということです。
どうでも良い余談の感想 §
インストーラのインストール先デフォルトディレクトリが、C:\usr\local\lib\relaxerっていうのは、あまりに中途半端。c:と言っている以上はWindowsを意識しているはずですが、その下はUNIX風。
更に、JDKはj2sdk1.4.1_01みたいな自分の世界をルートディレクトリにデフォルトで掘ろうとするし。
Windowsの標準に沿ったソフトは、もちろんProgram Filesディレクトリの下へ。
ソフトごとに、流儀の違うディレクトリレイアウトの下に入って行こうとする混乱は美しくないですね。
少なくとも、こういう混乱は、(MSのJavaは許容しても)SunのJavaをインストールしたくない理由の1つです。