Xalan-Java

revised: Oct./26th/03

XSLT プロセッサ

JavaでXML文書を扱う基本的なAPIであるDOMとSAXについて紹介してきました。続いて、これらのAPIの上で動作する、XSLTについて紹介します。

XSLT は、XML 文書の構造変換を実施します。与えられた XML 文書から、XPath を使って、処理対象のノードの集合を取り出し、別の木構造へと変換します。XSLT を処理するプロセッサを XSLT プロセッサと呼び、XercesのようなXMLプロセッサの上で動作します。

Xalan-Java

本稿では、XPath/XSLTプロセッサとして、Apaceh Xalan-Javaをつかうことにします。

Xalan の入手

本稿執筆時点の最新版は、Xalan-Java version 2.5.1です。Xalanは、通常のインタープリタ型のXSLTプロセッサのほかに、予めコンパイルしてから実行するXSLTCプロセッサー (Xalan Compiled processor)も提供していいます。公開されているバイナリファイルは、両者を一つのJARファイルに含むものと、XSLTCを別のJARファイルに分離したものの二種類が公開されています。本稿では、両者を一つのJARファイルに纏めたものを使うことにします。

Apache Foundationのサイトからダウンロードするのは、ZPI圧縮ファイル "xalan-j_2_5_1-bin.zip" です。次のコマンドで解凍できます。単なる ZIP ファイルなので、Windows XPや、通常のアーカイバ・ユーティリティでも解凍可能ですが、古い DLL を使っている場合は、ファイル名が長いものを適切に処理できないことがありますので、注意してください。私が使っているアーカイバでは、サンプルが解凍されませんでした・・・

>jar -xvf "xalan-j_2_5_1-bin.zipのパス"

以降では、解凍によって生成されたディレクトリ "xalan-j_2_5_1" を C:\ 直下に配置したものとして話を進めます。

Xalan の JAR ファイルは bin フォルダの中に存在し、 "xalan.jar" がインタプリタ、コンパイラ/実行プロセッサ (XSLTC; Xalan Compiled processor) を含んだ中核になります。"xercesImpl.jar" や "xml-apis.jar" は、Xalanを実行するのに必要なXerces 2.4.0のJARファイルになります。

プリコンパイル型のXSLTCプロセッサを、"xalan.jar" から外出しにしたものが欲しい場合は、圧縮ファイル "xalan-j_2_5_1-bin-2jars.zip" をダウンロードしてください。XSLTCプロセッサは "xsltc.jar" に含まれています。

CLASSPATH

Xalan を使うには、"xml-apis.jar"、"xercesImpl.jar"、"xalan.jar" を CLASSPATH にセットします。先のページで、"xml-apis.jar" と "xercesImpl.jar" をセットしたのと同じように、"xalan.jar" も CLASSPATHにセットしてください。

但し、SDK 1.4 以上では、Xalan がブートストラップ・クラスに組み込まれているので、CLASSPATH で設定したクラスパスよりも、組み込まれたパッケージが上位コンカチされて探索されるので、CLASSPATH に設定しても、実際に使われることはありません。これは、実行時オプションである -classpath-jar で指定しても同じことです。これを上書きするには、 "Endorsed Standards Override Mechanism" を使います。

endorsed 標準ディレクトリは、システム・プロパティ "java.endorsed.dirs" の値として設定します。なにも指定されない場合は、"lib\endorsed" が探索されます。

次のコマンド ラインは、システム・プロパティで、Xalan を指定したものです。

>java org.apache.xalan.processor.XSLProcessorVersion
Xalan Java 2.4.1
>java -Djava.endorsed.dirs=C:\xalan-j_2_5_1\bin org.apache.xalan.processor.XSLProcessorVersion
Xalan Java 2.5.1

実際には、いちいちシステム・プロパティを指定するのが面倒なので、必要な JAR ファイルを "/lib/endorsed" 配下にコピーすることになります。

別の方法として、オプション -Xbootclasspath で、ブートクラスパス自体を上書きすることでも、実装の変更が可能です。

詳細は、Sun と Apache XML プロジェクトのドキュメントを参照してください。

導入後の確認

Xalan の実装変更方法が分かったら、サンプルを実行してみましょう。ディレクトリ "xalan-j_2_5_1\samples" には、多くのサンプルが含まれています。ここでは、"SimpleTransform" の中の "SimpleTransform.java" を実行してみます。"SimpleTransform.java" は次の処理を実行します。

  1. XSLT プロセッサのファクトリ javax.xml.transform.Transformer を生成し、
  2. ファクトリに XSLT ファイル (birds.xslt) を渡してプロセッサ javax.xml.transform.Transformer を生成し、
  3. プロセッサが XML 文書 (birds.xml) を変換した結果を出力 (birds.out) する

このサンプルは、ステップ数としても、コメントを除くと、三行しかない簡単なもので、XSLT の処理方法の最も単純なものになります。リスト1は "xalan-j_2_5_1" を C:\ 直下に配置した場合のコンパイル/実行例です。書き出し先の "birds.out" が生成されていれば、Xalan の動作を確認できたことになります。

リスト1. SimpleTransform.java の実行例

C:\>cd C:\xalan-j_2_5_1\samples\SimpleTransform
C:\xalan-j_2_5_1\samples\SimpleTransform>javac SimpleTransform.java
C:\xalan-j_2_5_1\samples\SimpleTransform>java SimpleTransform
************* The result is in birds.out *************
C:\xalan-j_2_5_1\samples\SimpleTransform>

入力である "birds.xml" と、出力結果として新たに生成された "birds.out" をテキスト・エディタで開いて見比べると、XSLTファイル "birds.xslt" が、要素の値を抜き出して別の文書を生成する規則を記述していることが分かります。"SimpleTransform.java" のソースを確認すれば、Java アプリケーションから XSLT を使うための API はすぐに理解することができます。XSLT を使いこなすための主たる課題は、XSLT の記述方法を理解することです。詳細については、後続の章で説明するので、ここでは、"birds.xslt" と "birds.xml" を見比べて、こんなものかなと思って頂ければ十分です。



Copyright © 2003 SUGAI, Manabu. All Rights Reserved.