reflux flow > XSLTプロセッサSaxonの使い方
WindowsでSaxonを使う方法を説明します。
SaxonはXSLT 2.0の仕様書のEditorであるMichael Kay氏によるXSLTプロセッサです。XSLT 2.0とXPath 2.0をサポートしているのが特徴です。
SaxonにはSaxon 6.xとSaxon 9.xがあります。
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プロンプト)を起動してください(コマンドプロンプトの基本的な操作方法の説明は省略します)。
以下のようにコマンドを入力します。
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 オプションを用いて指定することもできます(例えば、-o d:\xslt\sample.html)。オプションはsourceよりも前に入力します。
以下のようにコマンドを入力します。
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ではxsl:output要素にindent="yes"を指定すると、要素の入れ子の深さに応じて半角スペースでインデントされます。saxon:indent-space属性では、そのインデントの量を指定できます。
<xsl:output
indent="yes"
saxon:indent-spaces="1"
/>
この例ではインデントが半角スペース1個分になります。
Saxon 6.xではmethod="html"を指定すると、出力される日本語(漢字や仮名)が数値参照になってしまいます。それを回避したいときはこの属性で"native"を指定します。
<xsl:output
saxon:character-representation="native"
/>
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"を指定)。