BSB(Baykit Stylesheet Broker)とXSLT変換

 BSB(Baykit Stylesheet Broker)は、 横浜ベイキットのBayServerが内蔵している、XSLT変換を行うクラスライブラリ群です。 BSBを使うと、XML文書をXSLTスタイルシートと動的に結合して、HTML文書を生成することができます。 まずBayServerに内蔵されているBSBを使ってみます。

 ここではテストのために、 またしても同じ2つのサンプル文書(XMLとXSLTスタイルシート)を作りました。
orders.xml
orders.xsl

 これを、任意のアプリケーションディレクトリの下に配置します。 アプリケーション名をxmltest、 コンテキストパスを /xmltest、 実際のパスを C:\usr\public_html\xmltest とし、

C:\usr\public_html\xmltest\xml\orders.xml
C:\usr\public_html\xmltest\xml\orders.xsl
となるように置きます。そして、
C:\usr\public_html\xmltest\WEB-INF
C:\usr\public_html\xmltest\WEB-INF\lib
の2つのディレクトリを作ります。libディレクトリには、 $BSERV_HOME\webapps\bsb\WEB-INF\lib に置かれているJarファイル、
  • bsb-*.jar
  • tagprint-*.jar
  • conv-*.jar
  • webut-*.jar
をコピーします。 また、WEB-INFディレクトリには、 $BSERV_HOME\webapps\bsb\WEB-INF\web.xml をコピーしてweb.xmlを置きます。

 これで準備は完了です。BayServerを起動して、 Webブラウザから「http://localhost:8767/xmltest/xml/orders.xml」 (8767はBayServerのポート番号)にアクセスしてみましょう。 データが表示さればOKです。


HTTPリクエスト・パラメータとXSLパラメータ

 BSBはHTTPリクエスト・パラメータをそのままXSLパラメータとしてXSLTに渡してくれます。 例えば abc というリクエストパラメータを持つFORMのあるHTMLから def.xml にアクセスし、 そのdef.xmlにスタイルシートとして ghi.xsl が紐づいていたとします。 すると、ghi.xslに

<xsl:param name="abc" select="aaaaaa" />

<xsl:template match="/document/entry">
    <xsl:if test="contains(qq, $abc)>
    (後略)

のような記述があれば、$abcの部分がリクエスト・パラメータの値になります。 これはXSLTに外部からパラメータを渡しているのと同じなので、 xsl:paramはXSL文書のどのテンプレートにも囲まれていない、 ルート直下に書く必要があります。


BSBとTomcat

 BSBのXSLT変換は、Tomcat上でも使用できます。 BSBのバイナリ配布に含まれる「bsb」ディレクトリをWebアプリケーションをルートとみなし、 その下のWEB-INF/libにbsb-boot.jar、WEB-INF/bsb/libにbsb-*.jarとwebut-*.jarを配置します。
WEB-INF/web.xmlでは、初期設定で、 拡張子 *.xml のファイルに対してサーブレット org.baykit.bsb.servlet.XSLServlet が呼び出されるようにサーブレット・マッピングが設定されているので、 *.xmlというURLにアクセスすればXSLTが働いてHTMLが出力されます。
 BSBの挙動はbsb.propertiesファイルで設定することができます。 これはweb.xmlのサーブレット初期化パラメータで、そのパスを指定します。

<servlet>
<servlet-name>BSB</servlet-name>
<servlet-class>org.baykit.bsb.boot.ServletLoader</servlet-class>
<!-- 中略 -->
<init-param>
  <param-name>properties</param-name>
  <param-value>WEB-INF/bsb.properties</param-value>
</init-param>
</servlet>

bsb.propertiesには幾つかのパラメータを指定できます。
logging=true
を指定すると、詳しいログ出力が得られます。
 なお、上の「HTTPリクエスト・パラメータとXSLパラメータ」で触れた、 HTTPリクエスト・パラメータをXSLTに渡す際に日本語の値は使えるのか? という点については、 BSBのFAQによると、パラメータ request.encoding を指定すれば可能とのことです。
request.encoding=Shift_JIS
しかし、私の環境では変換されず、ログ出力させてみると??????みたいな文字列になってしまいました。 (Tomcat 5.0.30b、BSB 1.3.4、Windows XP上で日本語EUC(euc-jp)のXML文書を使用時) それでrequest.setCharacterEncoding()を行うサーブレット・フィルタを作ってやると、 正しく日本語のパラメータ値も渡すことができました。
もしかして、日本語のパラメータ「名」ならうまくいくのかも(そんなわけないか)

Baykit and Cocoon Top

(first uploaded 2002/01/06 last updated 2005/11/17, URANO398 - KQ TAURA)

テレワークならECナビ Yahoo 楽天 LINEがデータ消費ゼロで月額500円〜!
無料ホームページ 無料のクレジットカード 海外格安航空券 海外旅行保険が無料! 海外ホテル