XSLTのキホン

最近XSLTの学習を始めた方がおられました.既存のXSLT2.0のスタイルシートを元にそれを改造するということをやっておられたそうです.そこでたまたまWEBで私のブログを見て参考にしていただいたようなのですが、以下のようにお叱りをいただきました.

① 「思い込みで書いている内容が多い!」
② 「体系的にかかれていない!」
③ 「シーケンスの概念がちゃんと書かれていない!」

なかなか手厳しいものがあります.①②はそもそも私がXSLT Programmer's Referenceを読みながらポツリポツリと書いていたので止むを得ません.しかし③は致命的です.XSLT 2.0を理解するうえでシーケンスとは何か?がわかっていないと、ほとんどスタイルシートは書けません.いえ、XSLT 1.0を知っている人だったら「それなり」に書けちゃうのですが、大工さんが自分の使う道具のなんたるかを知らないで家を作るようなもので、決して良い品質のスタイルシートは作れないです.確かにシーケンスの概念は決してちゃんと書かれてはいませんでした.

このシーケンスの概念ですが、xsl:sequenceというコードを見て「いったいこれは何なのか?」と疑問をもたれたようです.XSLT 1.0にはこのようなものはありませんでした.それでスタイルシートは作れました.しかしXSLT2.0のスタイルシートを書く上で、xsl:sequenceを「書けるか?」「書けないか?」は、すべてを決するくらいの大切な問題ではないかと思います.

そしてそれは「そもそもxsl:template,xsl:functionとは何なのか?xsl:variable(またはxsl:param)とは何なのか?」という根本的な問題に突き当たります.

実は最初のお叱りをいただいて、元の記事を少しでも直そうと思ったのですが、それよりは書き直したほうが良いのでは?と考えました.ちょうど会社でもXSLTのレクチャーをする機会がありましたので、この書庫名「XSLTのキホン」でこれからXSLT2.0を学んでゆく方の視点に沿って書いてゆきたいと思います.「XSLTのキホン」では最初に「ツリーの巡回」を取り上げました.次はお叱りをいただいたシーケンスを書きます.

しかし、この方はXSLT 2.0から始めたというので幸せです.xsl:functionをそれなりに使いこなしておられて、「エ~!XSLT 1.0にはなかったの?いったい関数無しでどうやってスタイルシート書いていたの?」と言っていたと聞きました.まあXSLT1.0とXSLT2.0ではかつてのC言語C++言語くらいの差があるのではないかと思います.(私もC⇒C++で挫折した類です)Cでポインタと構造体でグッチャングッチャンのプログラムで苦しんでいるより、C++からスマートに入って行けたほうが幸せでした.これはXSLT1.0⇒2.0でも同じですね.