Uche Ogbuji on Michael Kay on Comparing XSLT and XQuery
っていうややこしいタイトルなのは伝聞のさらに伝聞だからなのだけど、Michael KayがXTech 2005(うーん、行きたかった)で行ったXQueryとXSLT2.0についてのセッションの、Uche Ogbujiによる覚え書き。非常に興味深いのでこちらにもまとめておこう。
XSLT 1.0でユーザーが困惑したのは次の4点1:
- XMLそのものにまつわる問題: エンコーディング、実体参照、空白文字、名前空間、などなど
- 宣言的プログラミングの特性: 変数、再帰、パス、グルーピング
- データモデル: ’<‘とか’>‘の扱いがめんどっちい
- テンプレート パターンマッチ(ルールベースの記述)
- 結果ツリーとnodesetの違い
- 関数のサポートが貧弱
で、XQueryが解決したのって、たかだか4点目の問題だけなんじゃないの?っていうはなし。
そして、XQueryのFLWORでみんなjoinクエリが最適化できることを期待しているんだけど、そんなこと全然出来てないじゃん、あるいはXSLT実装でもおんなじことが出来るはずだよ、っていう話に進んでいったらしい。
’<‘や’>‘って、リテラルXMLが記述できるXQueryでも当然エスケープしなきゃいけないし、結果ツリーなんてXPath2.0/XSLT2.0でも当然消えているわけで、XQueryにアドバンテージは何もない。当然、XQuery 1.0とXPath 2.0の関数には何の違いもないし、XMLそのものにまつわる問題は何も違わない(XQueryだって空白の扱いはめんどくさい)。
僕はさらに、XSLT 1.0だってfor-eachを使ってプッシュモデルのスタイルシートを書けるのだから、根本的な違いは何もない、と思うのだけど。
逆に、XQueryだって、ユーザー関数を使えば、テンプレートマッチが存在しない事によるデメリットも、十分カバーできると思う。とはいえ、XSLT 1.0から移行するのであれば、当然これが最初の障壁になるはずなのに、これが標準でカバーされていないというのは驚きだ。
XQueryのFLWORなんて実は大したものじゃないんだ、っていうことは、FLWORを実装してみれば分かるだろう。たぶん、境界条件を限定すれば、最適化することは可能なんだと思う。ただ、それはXSLTでも出来るはずだ、というのがMichael Kayが言いたいことなのだろう。
Tim Bray on “XML Serialization” patent
まあこの話題に興味のある人なんて(僕も含めて)ほとんど居ないと思うけど、あんまし取り上げる人も居ないと思うので一応。
xmldiff
何かちょこっと「作るべきか…?」とircで書いてたら…いつの間にか僕がやることになってる?? 本当にやるのか…? xmldiffってあんまし興味が無いんだよね…。比較の手法も別に標準的なものが無いし(特定の種類のノードを無視するとか、内容の順序を無視するとかは、すぐ実装できるのでマジどうでもいい)。domhashとか、なんか面倒くさいことをしなくても、フィルタリングしてdiffするだけで出来ないものか。まあ需要があると言うんですから、やりますか…
Footnotes
-
6点になっちゃったうち最後の2点は、Uche Ogbujiの私見だ。 ↩