弊社の主力製品、biz-Streamは先月、11月30日にVersion4.6.0へのリリースアップを行いました。
そこで、今回のリリースアップの目玉機能の一つについてご紹介したいと思います。
これまでのbiz-StreamはPDF出力時のデータソースとしてCSV、RDB、プログラム
によるhashデータの3種類が使用出来たのですが、4.6.0より、XML形式のファイルを
データソースとし、XQueryの構文を用いて抽出したデータも出力出来るようになりました。
XMLファイルをデータソースとして使える事の利点は、大規模なデータ・ベースサーバを
用意する事無く環境を構築出来たり、テキスト・ベースなので、データベースの構成を
カスタマイズしやすい等、色々あるかと思いますが、XQueryに関する詳細は専門のサイトに
まかせるとして、今回のリリース・アップに伴い追加されたサンプル・データについてご紹介したいと思います。
まず、レイアウト・デザイナで、
{レイアウトデザイナインストールフォルダ}\sample\xml\datasource-master\XmlDataSourceSample1.xml
を開いてみます。
このドキュメントレイアウトは同じ階層にある、XmlDataSourceSample1-1.xml を
ページレイアウト、XmlDataSource_data.xmlをデータ用XMLとして使用しています。
デザイナ上で「データ設定」→「XML」→「xml-field」
を選択すると、どのようなXQueryが定義されているか、確認する事が出来ます。

この構文と、データとなるXMLを比較しながら、XMLからどのようなデータを抽出しているか、 見てみましょう。
- 《 サンプルのXQuery定義》
-
let $xml := . let $seq := $xml//li for $a in $seq where contains($a/@class, 'item') return <record> <column1>{$a/col1/text()}</column1> {$a/col2} {$a/col3} <column4>{normalize-space($a/col4)}</column4> </record>
1行目、2行目の「let」は変数へのシーケンスの代入を指定しています。
3行目の「for」は変数に複数のシーケンスを代入して、同じ処理を繰り返す際に使用します。
4行目のwhereは処理する条件の指定、5行目returnは実際に行う処理を指定します。
以上を要約すると・・
「データ・ソースXMLファイルの「li」のタグで括られている個所から、属性"class"が"item"である
データを抽出し、co1、col2、col3、col4の順番で繰り返し表示せよ」
という事になります。
また、デザイナ上で「フィールド定義」を確認すると、これらの変数($a)が以下のように設定されている
事が分かります。
col1:地区コード
col2:顧客名
col3:個数
col4:金額
プレビューを行い、PDFを出力するとこのようになります。

例えば、このXMLから「B株式会社」のデータのみ、抽出したい場合は、XQuery定義に以下のような構文を追加します。
- 《 B株式会社のデータのみ抽出》
-
let $xml := . let $seq := $xml//li for $a in $seq where contains($a/@class, 'item') and contains($a/col2, 'B株式会社') return <record> <column1>{$a/col1/text()}</column1> {$a/col2} {$a/col3} <column4>{normalize-space($a/col4)}</column4> </record>

XMLデータソース機能はあまり大がかりではない中小規模のシステムに向いているとも言えます。
今回のリリース・アップで登場したLite版でもこの機能は使用出来ますので是非、ご活用下さい。