【XML】DB2でXSLT

投稿日:

内容が単純だったこともあって、
思っていたよりXSLTの作成には時間は掛かりませんでした。
参考サイトは↓こちら。

サンプルで覚えるXSLTプログラミング - @IT

で、XSLTを作成し、Javaプログラム内で変換ロジックを実装して、
テストコードを走らせてみる、、、

TransformerFactory factory = TransformerFactory.newInstance();
// XSLファイルからtranceformerを取得
Transformer transformer =
factory.newTransformer(new StreamSource("sample.xsl"));
// 出力するエンコーディングを設定
transformer.setOutputProperty("encoding", "UTF-8");
// XMLファイルをXSLTで変換して出力
transformer.transform(new StreamSource("sample.xml"),
new StreamResult(System.out));


が、うまくいかず。
正しい整形式のXMLを使用しているにもかかわらず<aiueo value="123"/>というタグがあると、
変換して出力するロジックの箇所で「</aiueo>で終わらんとアカンで」と言われて失敗。
また、スタンドアロンのJavaプログラム(mainから)ではうまくいくのに、
Webアプリで試すと失敗する。
という訳の分からんエラーで丸1日潰れました。

今日は木曜日。
そろそろリミットなので、XSLTは諦めて元に戻すかなぁという考えが頭をよぎり始めた頃、
下記のページでXSLTの記述を発見!!(つーか見落としていた)

新しくなった DB2 バージョン 9.5 での pureXML 機能強化の概要 - developerWorks

まさに神のお告げのような内容でした。


さっそくDB2のXSLTRANSFORMスカラー関数を実装する。
変換元となるターゲットのXML文書は、生データとする為にタグの脚色を削ぎ落としてテーブルへ格納。
そして、XSLTスタイル・シートを格納するテーブルを新たに用意。
それらを以下のように結合して、DB2のXSLTエンジンを利用することにしました。

-- XMLTABLE:XMLDOC(XML文書を格納)
-- XSLTTABLE:XSLTDOC(XSLTスタイル・シートを格納)

SELECT XSLTRANSFORM(XMLDOC USING XSLTDOC) FROM XMLTABLE, XSLTTABLE WHERE ......


するとXSLTで記述した変換内容に沿って見事に新しいXML文書が!!
ギリギリで解答を見つけることができて、ホッとしました。

これで、理論上は様々なクライアントアプリに対応するXML文書を吐き出すことができるようになりました。
もう提出まであまり時間が無いので、これから他のクライアントを追加するかどうかは少し考えますが、とりあえずドキュメントの作成を開始します。

あとちょっとだぁ!!


参考URL
XMLプログラミング・コンテスト
新しくなった DB2 バージョン 9.5 での pureXML 機能強化の概要 - developerWorks
XSLTRANSFORM スカラー関数 - DB2 Version 9.5 for Linux, UNIX, and Windows
演習 8: XSLT スタイルシートを使用した変換 - DB2 Version 9.5 for Linux, UNIX, and Windows