DITA-OTのXSLTプロセッサ

お客さんのところで、私の作ったプラグインが「Fatal Error - Cannot convert zero-length string to an integer」のエラーを出して止まってしまいました.もちろんこのエラーはXSLTプロセッサのSaxonが出しています.
 
お客さんの連絡だと新旧の文書を比較するときのみ発生すると言います.ところが、大急ぎでデータを送ってもらってこちらで再現テストをしたのですが、どういうわけか何の問題もなく正常終了してしまいます.不思議に思って、私のテストマシン(というかメインマシン)のWindows7ではなく、お客さんの使っているWindows Server 2003(英語版)で環境を会社で作ってやってみましたが、それでも発生しません.
普通このエラーは間違いなくスタイルシートのバグなのですが、落ちている箇所をいくら見てもちゃんと空文字列にならないようにプロテクトしてあります.ソースコードを何回調べてもバグらしいのはありません.いよいよ困ってしまい、プラグインbuild.xmlを変更して、当該ステップをXSLTタスクからJavaタスクにして、Saxonのクラスnet.sf.saxon.Transformを直接呼び出すようにしました.そして、最後の切り札の"-T"コマンドラインオプション(すごい量のトレースが出ます)を使って試してみるように変更してプラグインをお客さんにリリースしました.

ところがなんともおかしなことに、お客さんのCMS環境では山ほどの(約126MB)ログを吐いてジョブは正常終了し、PDFをちゃんと出力していました.ウーム!どうもお客さんのCMS環境でのみうまく行かないようです.何かXSLTプロセッサのSaxonがおかしいんじゃないのかと疑うようになってしまいました.
 
現在のDITA-OTのリリースについてくるSaxonはどうも中途半端です.9.1なのですがラストバージョンではありません.
 
D:\DITA-OT1.5.1>java net.sf.saxon.Transform
No source file name
Saxon 9.1.0.5J from Saxonica
Usage: see http://www.saxonica.com/documentation/using-xsl/commandline.html
...
 
9.1の最終バージョンは以下のとおりです.
 
D:\My Documents\Java\saxonb9-1-0-8j>java net.sf.saxon.Transform
No source file name
Saxon 9.1.0.8J from Saxonica
Usage: see http://www.saxonica.com/documentation/using-xsl/commandline.html
...
 
現在のSaxonの最新バージョンは9.3です.ご存知かもしれませんが9.2からオープンソースバージョンのSaxonは外部Javaライブラリへのアクセスを禁止してしまいました.ですからSaxon HE (Home Edition)でDITA-OTを動かすとエラーになってしまいます.
 
maplink:
     [xslt] Processing D:\DITA-OT1.5.2-FB\temp\temp20110624071601387\taskbook.ditamap to D:\DITA-OT1.5.2-FB\temp\temp20110624071601387\maplinks.unordered
     [xslt] Loading stylesheet D:\DITA-OT1.5.2-FB\xsl\preprocess\maplink.xsl
     [xslt] D:\DITA-OT1.5.2-FB\xsl\preprocess\maplinkImpl.xsl:130: Fatal Error! Cannot find a matching 1-argument function named {http://exslt.org/common}node-set(). There is no Saxon extension function with the local name node-set
     [xslt] Failed to process D:\DITA-OT1.5.2-FB\temp\temp20110624071601387\taskbook.ditamap
BUILD FAILED
D:\DITA-OT1.5.2-FB\build.xml:63: The following error occurred while executing this line:
D:\DITA-OT1.5.2-FB\build_preprocess.xml:245: Fatal error during transformation
 
外部ライブラリと言ってもexsltのnode-set()は、ほとんど形式的なものです.スタイルシートをXSLT2.0にしてしまえばまったくつかう必要などないのですから、このエラーは取れるはずです.でもDITA-OTのデベロッパーはXSLT1.0のスタイルシートを2,0にする気配は感じられません.
 
私はプラグインをXSLT2.0で書いていて、しかもJavaのライブラリをスタイルシートから呼び出しているので、Saxon 9.3を使うならSaxon PE(Professional Edition)か、Saxon EE(Enterprise Edition)にする必要があります.共にオープンソースではなく有償です.Saxon PEは1ライセンスで7千円くらいだったと思います.XSLTだけやるならお買い得です.
 
oXygenというXMLエディタを購入すると最新版ではSaxon EEとDITA-OT 1.5.2がついてきて、.ditamapを編集してエディタから一発でDITA-OTを起動しPDFを作れます.このとき動いているのがSaxon EEです.(oXygen以外からは使えないようにプロテクトされています)

今後DITA-OTのXSLTプロセッサがどうなって行くかはスタイルシートを書く方からすると非常に興味があるところです.私はいつまでもバグがある過去のバージョンのSaxon 9.1にしておく訳にはいかないと思うのですがいかがでしょう?