2012年2月18日土曜日

【XSLT】2.0使っちゃいなよ

すごい久しぶりの更新。

ゆっくりやっていきたいと思います。

今回はXSLTについて。

あまり周りで使われてるのを見ないのでマイノリティ扱いです。
だって、マイノリティですよね??

XMLの変換では最強(一部処理できない部分を除き)かと思いますが、
得意な言語があればそれで処理してしまうもののようです。
だからこそマイノリティなのですが。

今後、ePubなどの電子書籍に向けた変換サービスでちょっと流行りそうではありますが。
まぁ、それでもマイノリティー┐(´∀`)┌

仕事の都合でいきなり2.0から習得したもので、1.0とか1.1での不便をあまり感じていない今日この頃ですが・・・

1.0とか1.1での問題につまいづいてたら、2.0へ行ったほうが早いと思います。
それでもダメなものは、XSLTの領分を超えてる問題ですね。

いろんな意味でSaxonさまさまです。

特に正規表現が使えるようになって、テキストノードへの複雑なアクセスが簡単になったのが一番大きいのかな?

2.0機能で自分がよく使うのは↓な感じ
  1. variable as="item()*"
  2. analyze-string
  3. result-document
  4. for-each-group
  5. function

使ったら面白そうだけど、使ってないのはfor-eachでの整数ループとか。

特に、1の変数へのノード格納はとても大きいかと思われます。はい。
1.0で出来なかった連想配列を、ノードを利用することで簡単に作れます。

でも、ちょっと問題があって、
やっててわかったこと(自分の周りも含め)は、XSLTのデータモデルへの理解不足と、コンテキストアイテム(1.0ではカレントノード)への理解不足ですね。

実際、XSLTを書く際の肝は↓をどれだけ理解できてるか、かと思います。
  • コンテキストアイテム
  • データモデル
  • 組み込みテンプレート
この3つを理解できてれば、できない事なんて無いんじゃないですかね??
組み込みテンプレートは慣れとしか言えないですが。
他の言語でよく言われる”おまじない”が隠匿してあるだけっていう。

わかっちゃえば、modeとかpriorityとかちょっと凝ってきても無問題だし。

初心者向けに情報をまとめたら見る人いるのかな?
いるならコメントください。書く気出ます。

で、2.0ですが、プロセッサがSaxonしかないのでSaxon無双な状態なんですが、
プロセッサが変更になるとプロセッサごとの微妙な違いで、出力されるデータに差異が生じることがあるので要注意です。

W3Cで策定されたXSLT2.0では処理内容については明確に定義されていないのが起因しています。

なのでSaxonではないプロセッサを使用していて、2.0へ移行するのは要注意ですね。

Saxonは3.0 Daftの一部が実装されているので、それを試してみても面白いかもです。
(Saxonの独自機能も面白そうですが、この先でどうなるかわからんのでアレですが。)

さて、コーディングにもどりますノシ