XSLTプロセッサSaxonの使い方

WindowsでSaxonを使う方法を説明します。

Saxonとは?

SaxonはXSLT 2.0の仕様書のEditorであるMichael Kay氏によるXSLTプロセッサです。XSLT 2.0とXPath 2.0をサポートしているのが特徴です。

SaxonにはSaxon 6.xとSaxon 9.xがあります。

Saxon 6.x
XSLT 1.0とXPath 1.0をサポートしています。9.xよりも高速に作動しますが、Shift_JISやEUC-JPでの出力には対応していません。
Saxon 9.x
有償のSaxon-SAと無料で使えるSaxon-Bがあります。XSLTに用いるだけならSaxon-Bで十分です。XSLT 2.0とXPath 2.0をサポートしています。

XSLT 1.0(とXPath 1.0)を利用し、Unicode(UTF-8など)で出力するのであれば6.xで十分です。ただし、6.xの開発は止まっているので、改良が続けられているという点では9.xの方が良いかもしれません。

必要なもの

SaxonはJavaで書かれているので、JRE(Javaの実行環境)が必要です。Sunのサイトからダウンロードしてインストールして下さい。

Saxonもダウンロードしましょう。

Zip形式で圧縮されているので解凍して下さい。saxon.jar(saxon9.jar)を適当な場所に保存すれば準備は完了です。

コマンドラインから実行

Saxonはコマンドラインから操作します。コマンドプロンプト(Windows 9x/MEの場合はMS-DOSプロンプト)を起動してください(コマンドプロンプトの基本的な操作方法の説明は省略します)。

Saxon 6.xの場合

以下のようにコマンドを入力します。

java -jar saxon source style > result

または

java -cp saxon com.icl.saxon.StyleSheet source style > result

saxonにはsaxon.jarのパス、sourceには変換元のXML文書のパス、styleにはXSLTスタイルシートのパス、resultには変換結果の保存先を指定します。

例えば、このように入力します。

java -jar d:\xslt\saxon.jar d:\xslt\sample.xml d:\xslt\sample.xsl > d:\xslt\sample.html

ファイルの場所は相対パスで指定しても構いません。

Note: 変換結果の保存先は、-o filenameオプションを用いて指定することもできます(例えば、-o d:\xslt\sample.html)。オプションはsourceよりも前に入力します。

Saxon 9.xの場合

以下のようにコマンドを入力します。

java -jar saxon -s:source -xsl:style -o:result

または

java -cp saxon net.sf.saxon.Transform -s:source -xsl:style -o:result

saxonにはsaxon9.jarの場所、sourceには変換元のXML文書のパス、styleにはXSLTスタイルシートのパス、resultには変換結果の保存先を指定します。

例えば、このように入力します。

java -jar d:\xslt\saxon.jar -s:d:\xslt\sample.xml -xsl:d:\xslt\sample.xsl -o:d:\xslt\sample.html

ファイルの場所は相対パスで指定しても構いません。

Note: Saxon 9.xでは、XSLT 2.0ではなくXSLT 1.0のスタイルシートを利用すると警告が表示されます(XSLT 2.0の仕様のようです)。この警告を表示しないようにするには、-novw(または-versionmsg:off)オプションを指定します。

バッチファイルから実行

毎回、同じようなコマンドを打つのは非常に面倒です。そこでバッチファイルを作成して、ドラッグ&ドロップでXSLTを実行できるようにします。

テキストエディタ(メモ帳など)で次のようなテキストファイルを作成して拡張子を".bat"にして下さい(以下の例はSaxon 9.xの場合です)。

java -jar saxon -s:%1 -xsl:style -o:%~dpn1.html
pause

saxonにはsaxon9.jarのパス、styleにはXSLTスタイルシートのパスを入力します。

このバッチファイルに他のファイルをドラック&ドロップすると、%1にドロップしたファイルのパスが入り、%~dpn1には%1から拡張子を取り除いた文字列が入ります。

拡張機能

Saxonには様々な拡張機能が用意されています。ここでは、そのうちのいくつかを簡単に紹介したいと思います。詳細な説明やその他の拡張機能についてはWebサイトや付属している文書を参照して下さい。

これから紹介する拡張機能を利用するには名前空間の設定が必要です。接頭辞saxonには、Saxon 9.xの場合は"http://saxon.sf.net/"、Saxon 6.xの場合は"http://icl.com/saxon"を指定して下さい。

<!-- xsl:stylesheet(xsl:transform)かxsl:outputに名前空間を指定 -->
<xsl:output
  xmlns:saxon="http://saxon.sf.net/"
/>

saxon:indent-spaces

Saxonではxsl:output要素にindent="yes"を指定すると、要素の入れ子の深さに応じて半角スペースでインデントされます。saxon:indent-space属性では、そのインデントの量を指定できます。

<xsl:output
  indent="yes"
  saxon:indent-spaces="1"
/>

この例ではインデントが半角スペース1個分になります。

saxon:character-representation

Saxon 6.xではmethod="html"を指定すると、出力される日本語(漢字や仮名)が数値参照になってしまいます。それを回避したいときはこの属性で"native"を指定します。

<xsl:output
  saxon:character-representation="native"
/>

saxon:omit-meta-tag

XSLT 1.0の仕様ではHTMLとして出力する場合、head要素に文字コードを示すmeta要素を自動的に追加することになっています。saxon:omit-meta-tagでは、このmeta要素の出力を制御できます。

<xsl:output
  saxon:omit-meta-tag="yes"
/>

meta要素を追加しない場合は"yes"を指定します。

この属性はSaxon 9.xでは利用できません。代わりにXSLT 2.0のinclude-content-type属性を利用できます(meta要素を追加しない場合は"no"を指定)。

関連リソース