リンク: [ホーム] [自己紹介] [リンク集] [アルバム] [ソフトウェア] [発表文献] [その他]

まさおのChangeLogメモ / 2002-11-17

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

2002-11-17 Sun

* org.apache.xalan.xslt.Process doesn't work in Japanese environment

http://developer.java.sun.com/developer/bugParade/bugs/4662527.html
アホな問題やな…。

で、付属の Xalan をやめて、最新の xalan.jar を使うにはどうすれば良
いのかなと思って探してみると、以下のようにするらしい。

java -Djava.endorsed.dirs=/home/masao/class ...

/home/masao/class には、xalan.jar の置いてあるディレクトリを書く。
cf. http://java.sun.com/xml/jaxp/faq.html#override

* XSLTにおけるURIエスケープ

<xsl:output method="html" encoding="EUC-JP"/>
...
<xsl:template match="keyword">
<a href="foo.cgi?search={.}"><xsl:value-of select="."/></a>
</xsl:template>

上記のようなXSLTを、

<keyword>化学</keyword>

上記のようなXML片に対して適用すると、

XT: <a href="foo.cgi?search=化学">化学</a>
XalanJ: <a href="foo.cgi?search=%E5%8C%96%E5%AD%A6">化学</a>
Libxslt: <a href="foo.cgi?search=%E5%8C%96%E5%AD%A6">化学</a>

となる。つまりURIエスケープが UTF-8 ベースでなされてしまうのだ。

仕様書には以下の記述があった。
http://www.w3.org/TR/xslt#section-HTML-Output-Method
[16.2 HTML Output Method]:
  The html output method should escape non-ASCII characters in
  URI attribute values using the method recommended in Section
  B.2.1 of the HTML 4.0 Recommendation.

libxslt のバグDBでは、この記述を受けて、この動作を妥当としている。
cf. http://bugzilla.gnome.org/show_bug.cgi?id=92438

また、Xalan-JのバグDBには、XSLT仕様のエディタに問合せをして、2.0か
らは escape-uri-attributes というパラメータが提供されるようになる、
という記述がある。
cf. http://nagoya.apache.org/bugzilla/show_bug.cgi?id=13754
    http://www.w3.org/TR/xslt20/

一番単純な workaround は全ての処理を UTF-8 ベースで行うことかな?