OracleでXMLを活用する
XSQLプログラミング入門

第2回 XSQLタグの機能を使う
(4/4ページ)

 

   他のXML文書やXSQL出力をインポートするタグ
 
<xsql:include-xml>, <xsql:include-xsql>

. <xsql:include-xml>は単純に他のXML文書をXSQL文書内に取り込むときに使用します。 取り込むXML文書はhref引数として渡されます。

 単にXML文書を取り込むだけでは面白くないでしょうから、例えば、MY_PAGEという表が、ユーザーごとのXML文書のURLをPAGE列に入れていたとします。すると次のXSQL文書で、そのXML文書がXSQL文書内に取り込まれることになります。

<xsql:set-page-param name="page>
    SELECT PAGE FROM MY_PAGE WHERE USER_ID={@p_userid}
</xsql:set-page-param>
<xsql:include-xml href="{@page}"/>

 <xsql:include-xsql>タグも、同様にXSQL文書を取り込むものです。これらはXSQL文書のコンポーネント化を進める上で大変便利です。

   その他の便利なXSQLタグ
 
<xsql:include-request-params>, <xsql:set-page-param>, <xsql:set-coookie>,
  <xsql:set-session-param>, <xsql:set-stylesheet-param>

■HTTPパラメータを処理する

 <xsql:include-request-params>タグは、HTTPパラメータをXSLT上で処理するのに大変便利です。このタグには、Attribute(属性)はありません。

パラメータを出力するXSQLプログラム

<?xml version='1.0' encoding="Shift_JIS"?>
<page xmlns:xsql="urn:oracle-xsql" connection="tkoyama">
  <xsql:include-request-params/>
</page>

 このXSQL文書をパラメータ"p_subject1=English"と"p_subject2=Math"で呼び出してみると以下のような出力を得ることができます。

<?xml version="1.0" encoding="Shift_JIS" ?>
<page xsql-timing="5">
  <request>
    <parameters>
      <p_subject2>Math</p_subject2>
      <p_subject1>English</p_subject1>
    </parameters>
    <session />
    <cookies/>
  </request>
</page>

 では今度はパラメータの名前が同じ場合、たとえば"p_subject=English"と"p_subject=Math"で呼び出してみます。

<?xml version="1.0" encoding="Shift_JIS" ?>
<page xsql-timing="5">
  <request>
    <parameters>
      <row>
        <p_subject>English</p_subject>
      </row>
      <row>
        <p_subject>Math</p_subject>
      </row>
    </parameters>
    <session />
    <cookies />
  </request>
</page>

 結果をご覧になっていただくとお分かりのように<row>というエレメントが追加されパラメターはその子どものエレメントとなり構造化されて表示されるようになりました。

■パラメータの設定

 <xsql:set-page-param>は、このタグ以降に書かれたタグで使えるパラメータを設定することができます。

引数名 引数値 役割
Name 文字列 設定するパラメターの名前。
ignore-empty-value
bool値 (yes/no)
設定するパラメターの値が空のとき無視するかどうかを設定します。 デフォルトは"no"です。
Value 文字列
QUERYを使用しないで直接パラメターを設定するときにつかわれます。

例えば、

パラメータを代入する

<xsql:set-page-param name="v_boss">
  SELECT MGR FROM EMP WHERE EMPNO={@p_empno}
</xsql:set-page-param>

パラメータを利用したプログラム

<xsql:query>
  SELECT * FROM EMP WHERE EMPNO={@v_boss}
</xsql:query>

 はじめのSELECT文ではパラメター"v_boss"にSELECT文の結果を代入します。もし値がNULL値でなければ次の<xsql:query>内のSELECT文の条件で使用されます。(NULL
値の場合はQUERYのエラーが出ます)。このXSQLの出力結果は"p_empno"で指定された従業員の上司のレコードだけを(もちろんもっと簡単な方法があるのですが)表示します。

 またこのように<xsql:set-page-param>で設定されたパラメータは、設定された後のXSQLタグすべてで何回でも有効です。

■セッションの設定

<xsql:set-session-param>

引数名 引数値 役割
Name 文字列 設定するセッション値の名前。
ignore-empty-value bool値 (yes/no) 設定するセッション値が空のとき無視するかどうかを設定します。 デフォルトは"no"です。
Value 文字列 QUERYを使用しないで直接パラメターを設定するときにつかわれます。

 このタグを有効に使用するにはセッション情報を格納する表を用意するかまたはユーザー表の中にセッション情報を格納する列を作ったほうがよいでしょう。

CREATE TABLE SESSIONS
(USER_ID NUMBER(4) CONSTRAINT PK_SESSIONS PRIMARY KEY,
SESSION_KEY VARCHAR2(10)
);
INSERT INTO SESSIONS VALUES (1, 'abcdefghij');
INSERT INTO SESSIONS VALUES (2, 'qrstuvwxyz');
Commit;

<?xml version='1.0' encoding="Shift_JIS"?>
<page xmlns:xsql="urn:oracle-xsql" connection="tkoyama">
  <xsql:include-request-params/>
  <xsql:set-session-param name="current_user">
    SELECT SESSION_KEY
    FROM SESSIONS
    WHERE USER_ID={@p_userid}
  </xsql:set-session-param>
</page>

 ここで注意しないといけないことは現在のところSESSIONは日本語は通りません。ですから値にはASCII文字列のみ使用可能になっています。日本語などが値に代入された場合、'?????'というような文字列で返されます。

<?xml version="1.0" encoding="Shift_JIS" ?>
<page xsql-timing="17">
  <request>
    <parameters>
      <p_userid>1</p_userid>
    </parameters>
    <session>
      <KEY>abcdefghij</KEY>
    </session>
    <cookies>
      <JSESSIONID>To1024mD6459075024533836At</JSESSIONID>
    </cookies>
  </request>
</page>

 

■クッキーの設定

 <xsql:set-cookie>はCookieを設定するときに使われます。

引数名 引数値 役割
Name 文字列 設定するクッキーの名前
Domain 文字列 設定するクッキーが有効なドメインを指定します。
もし設定されていない場合はページの存在するフルドメインになります
ignore-empty-value
bool値 (yes/no)
設定するクッキーの値が空のとき無視するかどうかを設定します。 デフォルトは"no"です
max-age 整数 クッキーが有効な時間を秒単位で設定します。デフォルトはユーザーがブラウザーのセッションを終えるまでです
only-if-unset bool値 (yes/no) クッキーを上書きするかどうかを設定します。デフォルトは"no"すなわち上書きするになっています
Path 文字列 クッキーが有効なPATHを設定します。設定されていなければクッキーを設定したページのものがしようされます
Value 文字列 QUERYを使用しないで直接パラメターを設定するときにつかわれます

 

クッキーをセットするXSQLプログラム

<?xml version='1.0' encoding="Shift_JIS"?>
<page xmlns:xsql="urn:oracle-xsql" connection="tkoyama">
  <xsql:include-request-params/>
    <xsql:set-cookie
    name="KEY"
    max-age="100"
    path="/xsql">
    SELECT SESSION_KEY
    FROM SESSIONS
    WHERE USER_ID={@p_userid}
  </xsql:set-cookie>
</page>

 このページでセットされた"KEY" Cookieは/xsql以下のパスで100秒間だけ有効です。<xsql:include-request-params/>タグで呼び出すと以下のような出力が得られます。

クッキーの内容

<?xml version="1.0" encoding="Shift_JIS" ?>
<page xsql-timing="7">
  <request>
    <parameters />
    <session />
    <cookies>
      <JSESSIONID>To1024mD6459075024533836At</JSESSIONID>
      <KEY>qrstuvwxyz</KEY>
    </cookies>
  </request>
</page>

 

■スタイルシートに実行結果を渡す

 <xsql:set-stylesheet-param>はスタイルシートにXSQLプログラムの実行で得られた結果を渡したいときに使用します。 たとえば、test_set_stylesheet.xsqlという次のファイルがあります。 ここでは“emps”というパラメ-タにEMP表から従業員数を取り出して代入しています。<xsql:set-stylesheet-pram>でこの“emps”パラメターをtest_set_stylesheet.xslに渡しています。

スタイルシートに検索結果を渡すXSQLプログラム

<?xml version='1.0' encoding="Shift_JIS"?>
<?xml-stylesheet type="text/xsl"
     href="test_set_stylesheet.xsl"?>
<page xmlns:xsql="urn:oracle-xsql" connection="tkoyama">
  <xsql:include-request-params/>
  <xsql:set-stylesheet-param name="emps">
    select count(*) from emp
  </xsql:set-stylesheet-param>

 具体的にこの"emps"パラメターをスタイルシート側で取得するには<xsl:param name="emps"/>を<xsl:stylesheet>のすぐあとぐらいに書いておく必要がありますのでご注意ください。

結果が渡されるスタイルシートの例

<?xml version="1.0" encoding="Shift_JIS"?>
<xsl:stylesheet
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="1.0">
  <xsl:output method="html" encoding="Shift_JIS"/>
  <xsl:param name="emps"/>
  <xsl:template match="/">
    <HTML>
    <BODY>
      従業員数:<xsl:value-of select="$emps"/>
    </BODY>
    </HTML>
  </xsl:template>
</xsl:stylesheet>

 急ぎ足でしたが、これでXSQLタグの使い方をご理解いただけたと思います。もちろん、ここに掲載したものは基本ですし、XSLTと組み合わせることで、よりパワフルなアプリケーションを開発することができるのは言うまでもありません。また、都合上ここでは書けなかったこともあることは否めません、XSQLリリースノートver.1.0.0やXSQLのDEMOなどのソースをご覧になって更なる技術を身につけてください。

 次回(最終回)は、Javaでのカスタムアクションハンドラーの作り方について説明します。


 目次 

 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 記事ランキング

本日月間