XMLICというライブラリをリリースしてみた

つい先週、XMLICというライブラリをリリースしました。

XMLIC - jQuery like DOM traversal and manipulation API

名前を見ただけだとJSONICXML版のように思われるかもしれませんが、実体はXML専用のJavajQueryという代物です。こんな感じで使えます。

XML.load(new File("test.xml"))
    .find("div[id='foo']")
    .append("<span>ほげほげ</span>")
    .attr("id", "bar");

最初期の構想ではJSONICっぽいXML用のライブラリがほしいというところに主眼があったのですが、XMLとクラスによる木構造の不整合がありすぎて逆に不便だということに気付いてやめてしまいました。

世の中にはXMLを扱うAPIが大量にあるのに、なぜ今更? という疑問を持たれるような気もしますが、もちろん理由があります。

XMLJSONもデータ構造を表現するという意味では同類のように思われているけれども、XMLは属性や順序、同一要素の繰り返しがあるので、クラスによる木構造にうまくマッピングできません。このため、JAXBのようにアノテーションを付けまくる必要がでてきますし、どういう風にマッピングするか頭を使う必要が出てくるわけです。それに対しJSONは元がJavaScriptだけあって、クラスによる木構造にそのまま落とし込めます。XMLの書式自体は人間に馴染み良いですが、プログラマにとってはとても扱いにくいのが現状です。

Java用のXMLライブラリとしてはすでに標準DOM APIの他にDOM4J、JDOM、XOMがありますが、標準DOM APIがあまりJavaライクじゃない、という問題に対応することに主眼があるため、「XMLが扱いにくい」という点はほとんど改善されていません。

一方で、JavaScriptの世界には、jQueryという圧倒的なシェアを持つDOM操作ライブラリが存在しており、XML特有の複雑さを集合に対する処理として取り扱うことで圧倒的な簡単さを実現しています(とっつきは悪いかもしれませんが)。

実のところ、すでにjQueryJava移植版ライブラリは複数あります。もっとも広く認知されているライブラリは jsoup でしょうか。しかし jsoup は HTML に主眼が置かれていてXMLを適切に扱えない(名前空間が正しく扱えない)、jQueryとメソッドが違いすぎるという点で問題がありました(HTMLをJavaから操作するという用途であればとても有用なライブラリだと思います)。

XMLICに近いライブラリとしては、jooxがありますが、こちらも同様に名前空間の取り扱いが適切でなく、ドキュメントが不足していたり、$を使っている点にも問題があります。ソースコードを読んだ感じだと、実装にも不安がありました。

本当は作るつもりはなかったのですが、結局自作するしかないか、ということで必要に迫られて作ったのがXMLICというわけです。今回はJSONICでの教訓を元に最初からテストケースをほぼすべてのメソッドに対し用意したので、品質も安定している(はず)です。

自作したわけだから当然なのですが、これまでJavaXMLライブラリに感じてた不満はかなり解消されており、(用途にもよりますが)結構便利なんじゃないかな、と思っているので、興味のある方は触っていただければな、と。