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

第1回 XSQLの紹介と基本的な使用法

データベースとXMLを組み合わせてアプリケーションに利用する、というニーズが高まっている。データベースの出力をXML化することにより、HTML化やその他のレポート形式、他のアプリケーションへの転送など、データの柔軟性が飛躍的に高まるからだ。XSQLはそのキーテクノロジーとなる。

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

     XSQLとは、XML+SQL

 米OracleはOracleデータベース上で稼働するさまざまなXML開発環境を、この1、2年で開発してきました。なかでも同社のSteve Muenchによって開発された「XSQLサーブレット」は、データベースに対するXMLのインターフェイス言語として重要な位置にあります。

 このXSQLサーブレットはOracleの次期バージョンとして予定されているOracle8i version8.1.7から標準装備され、データベース内にあるサーブレットコンテナに格納される予定です。そこで、本記事ではこのXSQLに焦点をあて、XSQLとはいかなるものなのか、について解説していきましょう。

 XSQLのオフィシャルデモサイトでは、XSQLサーブレット上で稼働するXSQL言語で書かれたプログラムによって生成されたWebページと、XSQL関連資料が用意されています。この記事をお読みになってさらにXSQLの詳細を知りたい場合には、ぜひ参照してみてください。

 また、XSQLの実行環境はすでに公開されているため、Oracle8iの利用者であればこの記事の後半で紹介する環境を用意することにより実際に動作を試すことができます。データベースをお持ちでない方もOracle8iをOracle Technology Networkよりダウンロードして試用することができます。

 では、解説を始めましょう。

■XML形式への出力言語

 筆者が所属する日本オラクルの「ドットコム事業開発部」では、ナレッジを交換する目的のWebサイト「chienowa.com」(知恵の輪ドットコム)を開発してきました。chienowa.comは、その内部でXMLの技術をフルに活用したWebサイトです。筆者はこのchienowa.comを開発するにあたってこれまで数か月間XSQLと付き合ってきました。その経験からXSQLを簡潔に説明するならば、

「XSQLとはデータベース内のデータをアプリケーションサーバーを通じてXML形式に出力するための言語」

だと言えます。

 XSQLが開発された背景には、データとスタイルを独立させ、開発工程を、データに関する開発と、スタイルに関する開発に2分化する、という目的がありました。

 これまで、データベースと連係したWebサイトを構築するには、比較的高度な知識を必要としました。しかし、このような開発を行うプログラマは、プログラミングは得意でも、見栄えのよいWebページを作成できるかというと、必ずしもそうではありません。見栄えの部分は、専門のデザイナーなどにまかせるべきなのですが、デザイナーはプログラミングができないため、開発に参加することができないのです。

 しかし、XSQLの登場のおかげで、この問題が解決するかもしれません。データベースまわりの開発は、比較的開発者の多いSQLを理解できる人たちで行い、デザインはHTMLの知識があれば比較的容易に学習できるXSLの知識がある人たちで進めることができるようになります。現在のところXSLを使いこなせるWebデザイナーは少ないでしょうが、これから半年ほどで商用のWebデザインツールなども登場してくるでしょう。そうすれば、XSLのスキルを持ったデザイナーも登場してくるでしょう。


Javaでのデータベース開発は、JDBCとServletの両方の知識が要求されるため、一部のエンジニアだけが開発に参加できた。XSQLでは、SQLのエンジニアとXSLのエンジニアが協力して開発に参加できる

 XSQLを利用してデータベースから出力されたXML文書は、XSLで表記されたスタイルシートによって他の形式のXML文書、たとえばXHTML(XML標準化されたHTML)、やWML(携帯端末用に標準化されているXML言語)などに変換することができます。つまり、PCで稼働するWebブラウザからでも、iモードからでも、それぞれのクライアントに最適な表示をさせることが可能です。 これは、XSQLサーブレットにはUser-Agent(サーバーにアクセスしてくるクライアントの種類を識別するための文字列)を認識し、クライアントに最適なスタイルシートを選ぶことができる機能が備わっているからです。

 もちろんXSQLの用途は、人間の目で見えるWebページだけにとどまりません。例えば、XMLによる企業間のEDI(電子データ交換)やコンテンツ配信ビジネスにも広く使われていくことが予想されます。

 かなり抽象的な部分が多い説明になってしまいました。次の章では簡単な例を使用して、XSQLを説明しましょう。

   XSQLのプログラム例

 この章では、簡単なプログラム例を使用してXSQLの概念を理解していただきましょう。それぞれのXSQLタグに関する個別の解説は、次回に行う予定です。ここではXSQLのプログラムをいくつか実際に見ていただくことを主眼にします。

 例として使用するデータベース表は以下のようになっています。従業員のテーブル「EMP」と、部門のテーブル「DEPT」の2つです。

テーブルDEPTの定義
CREATE TABLE DEPT
     (DEPTNO NUMBER(2) CONSTRAINT PK_DEPT PRIMARY KEY,
      DNAME VARCHAR2(14) ,
      LOC VARCHAR2(13) ) ;

テーブルEMPの定義
CREATE TABLE EMP (
  EMPNO NUMBER(4) CONSTRAINT PK_EMP PRIMARY KEY,
  ENAME VARCHAR2(10),
  JOB VARCHAR2(9),
  MGR NUMBER(4),
  HIREDATE DATE,
  SAL NUMBER(7,2),
  COMM NUMBER(7,2),
  DEPTNO NUMBER(2)
    CONSTRAINT FK_DEPTNO REFERENCES DEPT);

データの中身は以下のようになっています(データは架空のものです)。

テーブルDEPTの内容
DEPTNO DNAME LOC
10 社長室 GC18F
20 営業部 GC12F
30 e-business GC14F
40 教育本部 用賀
50 人事部 Forum

テーブルEMPの内容
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
1 佐野力 President   1990-04-01 10000   10
600 佐藤聡俊 VP 1 1995-04-01 8000   30
50 高橋敦子 Director 600 1991-04-01 6000   30
1001 本丸達也 Analyst 50 1997-09-01 3200   30
1201 砂金信一郎 Analyst 50 1998-04-01 3100   30
1401 小山尚彦 Analyst 50 1999-09-01 3000   30

■XSQLでデータベースを検索する

 まず、これらのデータが「tkoyama」という接続名で定義されるデータベースに格納されているとします(lib\XSQLConfig.xmlというファイルの<connection/>で定義しておきます)。このデータをそのままXML文書として出力する、XSQLプログラムをまずはご覧いただきましょう。

データを検索するXSQLプログラム

<?xml version="1.0" encoding="Shift_JIS"?>
<PAGE xmlns:xsql="urn:oracle-xsql" connection="tkoyama">
<xsql:query
    rowset-element="EMPLOYEES"
    row-element="EMPLOYEE">
SELECT * FROM EMP
</xsql:query>
</PAGE>

 このようなXSQL文を実行することで行えます。 上記のプログラムで、xmlns:xsql="urn:oracle-xsql"を必ず入れておかなければならない点にご注意ください。

 このXSQLプログラムの出力は次のようになります。

出力されたXML文書

<?xml version = '1.0' encoding = 'Shift_JIS'?>
<PAGE>
<EMPLOYEES>
  <EMPLOYEE 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>
  </EMPLOYEE>
  <EMPLOYEE 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>
  </EMPLOYEE>
  <EMPLOYEE num="3">
    <EMPNO>50</EMPNO>
    <ENAME>高橋敦子</ENAME>
    <JOB>Director</JOB>
    <MGR>600</MGR>
    <HIREDATE>1991-04-01 00:00:00.0</HIREDATE>
    <SAL>6000</SAL>
    <DEPTNO>30</DEPTNO>
  </EMPLOYEE>

…… 中略 ……

</PAGE>

  <xsql:query>のタグ内で、デフォルトのROWSETとROWがEMPLOYEESとEMPLOYEEにそれぞれ書き換えられていることに注目してください。

■引数を用いた動的な検索

 今度は<xsql:query>内のSQL文に引数を渡す方法を紹介しましょう。以下に例を示します。

引数を渡せるXSQLプログラム

<?xml version="1.0" encoding="Shift_JIS"?>
<PAGE xmlns:xsql="urn:oracle-xsql" connection="tkoyama">
<xsql:query
    rowset-element="EMPLOYEES"
    row-element="EMPLOYEE">
SELECT EMPNO , ENAME , SAL FROM EMP WHERE EMPNO={@p_empno}
</xsql:query>
</PAGE>

 p_empnoが変数となっているのがお分かりでしょう。このXSQLプログラムをp_empno=1を引数として呼び出すと、次のような結果が得られます。

出力されたXML文書

<?xml version = '1.0' encoding = 'Shift_JIS'?>
<PAGE>
<EMPLOYEES>
  <EMPLOYEE num="1">
    <EMPNO>1</EMPNO>
    <ENAME>佐野力</ENAME>
    <SAL>10000</SAL>
  </EMPLOYEE>
</EMPLOYEES>
</PAGE>

 

 目次 

 1ページ

 XSQLとは、XML+SQL
   XML形式への出力言語
 XSQLのプログラム例
   XSQLでデータベースを検索する
   引数を用いた動的な検索

 2ページ
 データの挿入とストアドプロシージャの実行
 XSLTスタイルシートとの組み合わせ
   
HTMLを出力するXSQLプログラム
 XSQLの動作の仕組み
 XSQLの動作環境

 

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

 



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

注目のテーマ

HTML5+UX 記事ランキング

本日月間