Shu's Homeを参考にしながら、Mac OS 8.6上のMRJ(Mac OS Runtime for Java) SDK 2.2で、XT Version 19991105によってXSLT(XSL Transformations)を使ってみたが、少しハマったので、記録しておく。
http://www.jclark.com/xml/xt.htmlからxt.zipをダウンロードして展開。
XMLパーサには、XPでは日本語が通らないので、Xerces-Jを使う。http://xml.apache.org/dist/xerces-j/からJava版のXerces-J-bin.1.1.1.tar.gzなどをダウンロードして展開。
MRJでのJavaアプリケーションの実行には、SDKに含まれているJBinderyを使う。
XTの実行は、UNIXシステムやWindowsのコマンドラインでは、java -Dcom.jclark.xsl.sax.parser=your-sax-driver com.jclark.xsl.sax.Driver source stylesheet result name=value...だが、これをJBinderyで行うためには以下のようにする。
Class nameのボックスにcom.jclark.xsl.sax.Driverと入力。
Optional Parametersには、コマンドラインの引数に当たるものをスペース(またはタブか改行)で区切って入れる。今回の場合、2つまたは3つのファイル名を入力するわけだが、絶対パスで入力する場合は"/Macintosh HD/usr/xt/hoge.xml"(フォルダ名などにスペースが入る場合は二重引用符が必要)などとしなければならなず、Unixシステムのシェルのようなファイル名の補完もできないので、長いファイル名(フォルダ名)を入力するのは非常に面倒だ。
ファイル名は相対パスでも指定できるのだが、このとき基点となるカレントディレクトリを適当な場所に設定することはできないようなので、XTのフォルダの中に、XML文書が入っているフォルダへのエイリアスfooを作成して、foo/hoge.xmlなどと指定することにした。
Redirect stdoutのプルダウンメニューは標準では「Message Window」になっており普通はこのままでよいが、標準エラーが出力されるときには、一瞬Java Consoleが開いて表示され、すぐに閉じられてしまうので、読むことができない(笑)。エラーを読むためには「To File」に変更して、適当なファイルに書き出すようにする必要がある。
MRJライブラリである$CLASSPATHの下に、「Add .Zip File」ボタンで、xt.jarと、Xerces.jarを指定する。このとき最初に指定したjarファイルのあるフォルダが、前述のOptional Parametersのカレントディレクトリになるので、今回の場合は、xt.jarを上に指定する必要がある。
パーサにはXerces-Jを使うことにしたので、Nameにcom.jclark.xsl.sax.parser、Valueにorg.apache.xerces.parsers.SAXParserと入力して「Add」ボタンを押す。
JBinderyのバグと思われるが、設定してすぐにRunしてもうまく動かないことがあり、一度設定を保存してJBinderyを終了させてからRunした方が無難なようだ。
なお、「Save Settings」で「Save as application」のチェックを外して保存することにより、WindowsのBATファイルのような使い方ができる。今回の場合は、基本的な設定を適当なファイル名で保存しておき、変換するたびに、XML文書名などのファイル名だけを修正して実行する、ということになる。
ファイル名の指定などが面倒だが、とにかくMacintosh上で、シフトJISのXML文書をXSLTによってHTMLに変換できる。
XTはさすがに仕様に忠実に実装されているようで、XML文書に日本語が含まれている場合、XMLスタイルシートで名前空間がxmlns:xsl="http://www.w3.org/TR/WD-xsl"になっていると、変換結果は「文字化け」状態になる。これは、utf-8やutf-16以外は認められていないからのはずで、日本語文字を含む場合は、xmlns:xsl="http://www.w3.org/1999/XSL/Transform"でなければならない。
ちなみに、シフトJISのXML文書を「正しい」HTML文書に変換するためには、XSLファイルで
<xsl:output method="html" encoding="Shift_JIS"
doctype-public="-//W3C//DTD HTML 4.01//EN"/>
などと指定しておく必要がある。なお、XTの仕様により、xsl:output method="xml"のときにはencoding指定が無視されてしまうので、ファイルはutf-8かutf-16でなければならない。なお、Macintosh上でシフトJISをutf-8に変換するには、ふみばこ 1.2.1Jが使える。