2009年4月15日水曜日

Xalan と JavaSDK

いろいろ資料を眺めてみる。すると、JDK 1.4 以上には既にXalanはライブラリに組み込まれているという。なんてこったい!

すると、あのサンプルはJDKライブラリで実行したものなのか、ダウンロードしたXalanで実行したものなのか?

http://www.utj.co.jp/xml/dev/java/dxjava_2.html
http://tsumatec.blogspot.com/2005/10/xalan.html
http://www.nextindex.net/java/XML/Xalan.html

---------------------------

いろいろ調べてみた。
サンプルの build.xml にXSLTプロセッサへのクラスパス定義があり、そこにダウンロードしたXalanへのパスを書いていた。

(1) build.xml のクラスパスを削除して実行
(2) 環境変数classpath からXalanへのパスを削除
(3) (1)(2) 両方を行う

の三パターンでサンプルを実行してみた。
結果、(1)(2)では正常に動作した(っぽい)が、(3) ではエラーが吐き出された。

D:\DocBook\sample1>ant
Buildfile: build.xml

xslt:
[xmlvalidate] 1 file(s) have been successfully validated.
[xslt] Transforming into D:\DocBook\sample1
[xslt] Processing D:\DocBook\sample1\artsample.xml to D:\DocBook\sample1\artsample.html
[xslt] Loading stylesheet D:\DocBook\sample1\sample.xsl
[xslt] : Warning! file:/D:/DocBook/docbook-xsl-1.74.3/html/autoidx.xsl: line 476: 属性 'href' がエレメントの外側です。
[xslt] : Warning! file:/D:/DocBook/docbook-xsl-1.74.3/html/autoidx.xsl: line 514: 属性 'href' がエレメントの外側です。
[xslt] : Warning! file:/D:/DocBook/docbook-xsl-1.74.3/html/autoidx.xsl: line 537: 属性 'href' がエレメントの外側です。
         :
         :
         :
        (略)

てな具合で、DocBookスタイルシートに対してエラーを吐いているようだ。

ついでに

import javax.xml.transform.*;
import javax.xml.transform.stream.*;

public class test {

public static void main(String[] args) {

try {

TransformerFactory trfactory = TransformerFactory.newInstance();
Transformer t = trfactory.newTransformer( new StreamSource(args[0]) );

String s = t.toString();

System.out.printf( s );

} catch(Exception e) {

e.printStackTrace();
}
}
}

こんなプログラムをclasspath環境変数でxalanを指定してある状態、ない状態で実行したところ、ある方は

D:\DocBook\test>java test sample.xsl
org.apache.xalan.transformer.TransformerImpl@16fd0b7

ない方は

D:\DocBook\test>java test sample.xsl
com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl@503429

と吐き出した。


つまり
(1) SDK(うちのは1.6.0_13)にXalanは含まれる?
(2) 但し、必ずしも最新というわけでもない
(3) classpath指定があればそちらを優先する。

上記参考サイトによるとclasspath指定よりデフォルトライブラリ優先とあったのだが・・・仕様が変わったのだろうか?


付記

xalan のバージョン確認は

java org.apache.xalan.Version

でも良い(こちらの方が新しいやりかた?)


付記2

SDK1.5以上には Xalanは含まれない、という記述も見かけた。

0 件のコメント:

コメントを投稿