OracleでXMLを活用する

XSQLプログラミング入門

第2回 XSQLタグの機能を使う

XSQLは、プログラムそのものもXML文書であり、それを実行することで、データをXML文書として取り出すことが可能になる。今回は、そのXSQLが備えている主要なタグについて、個々に解説していこう。

小山尚彦、Chienowa.comチーム
日本オラクル株式会社
2000/7/11

     主要XSQLタグの概要

 今回は、XSQLの主要なタグについて詳しく解説していきましょう。XSQLver1.0.0では標準で16のタグが用意されています。それらは大きく以下の5つに分けることができます。

(1)XML文書の出力に使用されるもの
<xsql:query>
<xsql:no-rows-query>
<xsql:ref-cursor-function>

(2)DBへデータを更新・挿入するもの
<xsql:dml>
<xsql:include-owa>
<xsql:insert-request>
<xsql:insert-param>

(3)HTTPで使われるユーティリティ
<xsql:include-request-params>
<xsql:include-param>
<xsql:set-page-param>
<xsql:set-coookie>
<xsql:set-session-param>
<xsql:set-stylesheet-param>

(4)XML文書を他の場所(URL)から取り込むもの
<xsql:include-xml>
<xsql:include-xsql>

(5)機能拡張するもの
<xsql:action>

 今回はこれらタグの使い方に焦点を当てていきます。 また、(5)の<xsql:action>タグを活用すれば、ユーザーの用途にあったアクションハンドラー(Action Handler)と呼ばれるプログラムをJavaで作ることも可能です。またそのようなカスタムアクションハンドラーをXSQLConfig.xmlファイルに記入し、10個までマクロ登録もできますが、その内容は連載第3回で紹介いたします。

     DataをDBから取り出すときに使用するXSQLタグ
 <xsql:query>, <xsql:no-rows-query>, <xsql:ref-cursor-function>

 <xsql:query>ハンドラーはXSQLでもっとも重要度の高いハンドラーです。XSQLはこの機能をするために開発されたと言っても過言ではありません。ですから、このタグにはたくさんの機能が付随しています。これらのうちタグの引数(attribute)として渡されるものは次のようになっています。

引数名 引数値 役割
fetch-size 整数 データベースからのデータ取り出しの際一度に取り出してくるレコードの数を設定。 デフォルト値はXSQLConfig.xmlファイルの/XSQLConfig/processor/default-fetch-sizeで定義
id-attribute 文字列 <ROW>タグ内でのレコードにつけられるidのattributeの名前を指定。デフォルトは“num”
id-attribute-column 文字列 この引数を指定することにより、<ROW>タグ内でのレコードに付けられるidのattributeの値を、データベースの列名に置きかえることができる。デフォルトは、レコードが見つかった順番に1から整数で割り振られる
max-rows 整数 一度に出力する最大のレコード数を指定する
null-indicator ブール値
yes/no
列がNULLであった場合、タグを出力するかどうかを指定する。デフォルトは“no”
row-element
文字列
レコードの親エレメントとして割り振るタグの名前を指定。デフォルトは“ROW”。
rowset-element 文字列 <ROW>の親エレメントの名前を指定。デフォルトは“ROWSET”です。 “”と指定すると、<ROWSET>はまったく出力されななる。
skip-rows 整数
出力せずにとばす上位のレコード数を指定。<max-element>との組み合わせで、複数ページに分けてレコードを出力するときに使う。
tag-case 文字列
upper/lower

出力されるタグが大文字か小文字かを指定する

 この表だけではわかりにくいでしょうから、例を使って説明します。この例で使うデータベースについては前回の記事をご覧ください。

 まずは<xsql:query>で全件検索をしてみましょう。次のようになります。

全件検索を行う

<?xml version='1.0' encoding="Shift_JIS"?>
<page xmlns:xsql="urn:oracle-xsql" connection="tkoyama">
  <xsql:query>
    SELECT * FROM EMP
  </xsql:query>
</page>

出力されるXML文書は次のようになります。

全件検索された結果

<?xml version="1.0" encoding="Shift_JIS" ?>
<page xsql-timing="236">
<ROWSET>
  <ROW num="1">
    <EMPNO>1</EMPNO>
    <ENAME>佐野力</ENAME>
    <JOB>President</JOB>
    <HIREDATE>1990-04-01 00:00:00.0</HIREDATE>
    <SAL>10000</SAL>
    <DEPTNO>10</DEPTNO>
  </ROW>
  <ROW num="2">
    <EMPNO>600</EMPNO>
    <ENAME>佐藤聡俊</ENAME>
    <JOB>VP</JOB>
    <MGR>1</MGR>
    <HIREDATE>1995-04-01 00:00:00.0</HIREDATE>
    <SAL>8000</SAL>
    <DEPTNO>30</DEPTNO>
  </ROW>

……中略……

</ROWSET>
</page>

 さて、今度は下記のようなXSQLプログラムを作り、呼び出してみます。

設定を追加して検索を行う

<?xml version='1.0' encoding="Shift_JIS"?>
<page xmlns:xsql="urn:oracle-xsql" connection="tkoyama">
<xsql:query
  rowset-element="EMPLOYEES"
  row-element="EMPLOYEE"
  id-attribute="emp_id"
  id-attribute-column="EMPNO"
  max-rows="3"
  null-indicator="yes"
  skip-rows="2"
  tag-case="lower">
    SELECT * FROM EMP
  </xsql:query>
</page>

これによって出力されるXML文書は次のようになります。

出力されたXML文書

<?xml version="1.0" encoding="Shift_JIS" ?>
<page xsql-timing="30">
  <employees>
  <employee emp_id="50">
    <empno>50</empno>
    <ename>高橋敦子</ename>
    <job>Director</job>
    <mgr>600</mgr>
    <hiredate>1991-04-01 00:00:00.0</hiredate>
    <sal>6000</sal>
    <comm null="YES" />
    <deptno>30</deptno>
  </employee>
  <employee emp_id="1001">
    <empno>1001</empno>
    <ename>本丸達也</ename>
    <job>Analyst</job>
    <mgr>50</mgr>
    <hiredate>1997-09-01 00:00:00.0</hiredate>
    <sal>3200</sal>
    <comm null="YES" />
    <deptno>30</deptno>
  </employee>
  <employee emp_id="1201">
    <empno>1201</empno>
    <ename>砂金信一郎</ename>
    <job>Analyst</job>
    <mgr>50</mgr>
    <hiredate>1998-04-01 00:00:00.0</hiredate>
    <sal>3100</sal>
    <comm null="YES" />
    <deptno>30</deptno>
  </employee>
  </employees>
</page>

 前の例と比べてみてどこが変わったかわかっていただけるでしょうか。

  • まずtag-case = "lower"ですべてのタグが小文字になりました。
  • そして、rowset-element = "EMPLOYEES"で<ROWSET>タグが<employees>タグに、<ROW>タグがrow-element = "EMPLOYEE"によって<employee>タグに置き換えられました。
  • <employee>タグの"num"は、id-attribute = "emp_id"によって"emp_id"になりましたし、その値はemp表のEMPNO列からとってくることがid-attribute-column = "EMPNO"によって指定されています。
  • また、max-rows="3"で出力されたレコードの数は3つだけですし、skip-rows="2"によって佐野力社長および佐藤聡俊VPのレコードが飛ばされています。
  • 最後にnull-indicator="yes"によって、NULL値が入っているCOMM列にもタグが出力されています。

これらの設定はすべて、前述のXSQLプログラムによって指定されたものです。

 

 目次 

 1ページ

 主要XSQLタグの概要
   XML形式への出力言語
 DataをDBから取り出すときに使用するXSQLタグ
   XSQLでデータベースを検索する
   引数を用いた動的な検索

 2ページ
   動的な検索も可能に
   該当レコードがないときに実行される文
   カーソルの扱い
   オブジェクトデータの取り扱い
   
 3ページ
 Dataを挿入または変更するときに使用するXSQLタグ
   INSERT文を実行する
   ストアドプロシージャを実行する
   Webフォームからのデータ挿入(1)
   Webフォームからのデータ挿入(2)

 4ページ
 他のXML文書やXSQL出力をインポートするタグ
 その他の便利なXSQLタグ
   HTTPパラメータを処理する
   パラメータの設定
   セッションの設定
   クッキーの設定
   スタイルシートに実行結果を渡す

「連載 XSQLプログラミング入門」

 



XML & SOA フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

HTML5+UX 記事ランキング

本日月間