ひどいことにW3CのXSLのホームページは2009年11月からちっとも更新されていません.このページではXSL、XPath、XSLTをカバーしているはずなのですが、最新の動向は何もないように見えます.
そしてエディタのMichael Kayはこれと同じ内容と従来のXSLT2.0からの違いが色づけでひと目でわかる版も公開しています.
また何か順番が逆のような気もしますが、2010年6月10日にW3CはXSLT2.1の要求仕様と使用例のドラフトを発表しています.
ということは、すなわちXSLTも次はXSLT2.1ではなくXSLT3.0となるでしょう.実際Michael Kayは2010年10月にSaxon 9.3を発表しています.Saxon 9.3にはすでにこのXSLT3.0の機能が搭載されていることがうたわれています.
XSLT3.0の機能はオープンソース版のSaxon HE(Home Edition)には搭載されていませんが、有償のSaxon EE (Enterprise Edition)、そして部分的にSaxon PE (Professional Edition)から使用できるようになっています.
var xmldoc = new ActiveXObject("Msxml2.DOMDocument.5.0");
var xsldoc = new ActiveXObject("Msxml2.DOMDocument.5.0");
xmldoc.load("sample.xml");
if (xmlDoc.parseError.errorCode <> 0) {
var myErr = xmlDoc.parseError;
alert("You have error " + myErr.reason);
} else {
xsldoc.load("sample.xsl");
output = xmldoc.transformNode(xsldoc);
}
var xsldoc = new ActiveXObject("Msxml2.DOMDocument.5.0");
xmldoc.load("sample.xml");
if (xmlDoc.parseError.errorCode <> 0) {
var myErr = xmlDoc.parseError;
alert("You have error " + myErr.reason);
} else {
xsldoc.load("sample.xsl");
output = xmldoc.transformNode(xsldoc);
}
ソースドキュメント(sample.xml)をパーサーでロードし、XSLファイル(sample.xsl)をロードし、transformNode(XSLTの呼び出し)を行うというパターンです.ソースドキュメントもスタイルシートもすべてメモリー上に存在します.
XSLT3.0のストリーミングモードを使えば、もはやソースドキュメントは最後まで読んでメモリー上に保存しなくともよくなります.これは、従来大きなXMLデータを扱うときに問題になっていたXSLTの致命的欠点を克服するものです.そして「だからXSLTは遅い!」と、XSLT否定派からいつも言われていたことへの回答でもあると思います.
ストリーミングは先頭から後方へという順でしか処理ができません.従って使える命令にはおのずから制限が生まれます.しかしこの拡張は今までできなかった大規模なデータ処理の分野にXSLTを広げるものとして大いに注目されて良いでしょう.
(残念ながらストリーミングは、安価に入手可能なSaxon PEでは制限されているようです.EEが必要.)