連載 XMLツールでプログラミング(5)
OracleからXML文書を出力する
データベースの内容をXML文書として取り出したり、逆にXML文書をそのままデータベースに格納することも、XDKで可能になる。最終回となる今回は、その方法について解説しよう。
赤木伸
日本オラクル株式会社
2000/12/6
今回は、データベースを利用してXML文書を格納/取得する方法を解説する。現在、稼働しているシステムの多くは、RDBMSを利用しているかと思う。このとき、データがリレーショナルに格納されているわけだが、このデータを使用してXML文書を作成するにはどうしたらいいのだろうか。JDBCのクラスを利用して、Oracleからデータを1つずつ取り出し、それをDOMなどを利用してXML文書を生成してもいいだろうが、大変手間がかかることが容易に想像できる。そんなときに登場するのが、Oracle XML SQL Utility for Javaだ。
(注)Oracle XML SQL Utility for Javaは、現在日本オラクルのサイトからダウンロードすることはできない。Oracle XML SQL Utility for Javaを使用する場合は、米オラクルの技術サイトであるOTN(http://technet.oracle.com/)からダウンロードする必要がある。また、11月に出荷予定のOracle8i R8.1.7には、すでにインストールされており、その時期には、日本オラクルの技術サイトOTN-J(http://technet.oracle.co.jp/)からダウンロードできるようになる予定である。
Oracle XML SQL Utility for Javaは、データベースへの問い合わせ結果をXML文書として生成するJavaのクラス群である(図1)。文字列としてXML文書を出力することも、メモリ上にDOMの木構造として出力することもできる。また、逆にXML文書のデータをデータベースの表に書き込むこともできる。さらに、問い合わせが参照している表を基にDTDを生成することもできる。
図1 XML SQL Utility for Javaの構造 |
表からデータをXML文書として出力 |
では、さっそくXML SQL Utility for Javaを使用して、EMP表からデータをXML文書として取り出すプログラムを作成してみる。このEMP表は、以下のようなSQL文から生成される表だ。
CREATE TABLE EMP |
下のプログラムでは、このEMP表に対して「SELECT * FROM emp」という問い合わせをするSQL文をXML SQL Utilityでデータベースに問い合わせ、その結果をXML文書として出力する。
//////////////////////////////////////////////////////////
import java.sql.*; public class XSUSample {
Statement stmt = conn.createStatement(); OracleXMLQuery qry = new OracleXMLQuery(conn,rset);
……… (2)
String xmlString = qry.getXMLString();
……… (4) |
- 表からデータをXML文書として取り出すためにXML SQL Utilityを使用する場合には、「oracle.xml.sql.query」パッケージのクラス群をインポートする。
- OracleXMLQueryクラスをインスタンス化する。ここまでに、JDBCを利用して、「SELECT * FROM emp」というSQL文の検索結果がResultSetオブジェクトに格納されているので、OracleXMLQueryクラスのインスタンス化の際に、このResultSetオブジェクトをConnectionオブジェクトとともに渡す。
- useNullAttributeIndicator()メソッドは、列に含まれるデータがnullのときに要素として出力するかどうかを指定するメソッドである。リスト1の実行結果では、最初の行の「MGR」の列はnullだが、この例では引数に「true」を指定してあるので、
<MGR NULL="YES" />
と空要素として出力される。引数で「false」を指定した場合は、要素は出力されない。 - getXMLString()メソッドを使用することによって、クエリーの検索結果を表したXML文書を文字列として取得することができる。この際、getXMLDOM()メソッドを利用すれば、XML文書をDOM(Documentオブジェクト)として取得することもできる。
このプログラムを実行した結果は以下のようになる。
<?xml version = '1.0' encoding = 'Shift_JIS'?> |
XML文書のデータを表に格納する |
それでは、逆にXML文書のデータをデータベースに挿入してみる。XML SQL Utilityを使用して、XML文書のデータをデータベースに挿入する場合には、そのXML文書の形式が、以下のようなフォーマットである必要がある。
<?xml version = '1.0' encoding = 'Shift_JIS'?> |
このXML文書のルート要素は、「ROWSET」である。この「ROWSET」要素は、子供の要素として「ROW」要素を持ち、<ROW>…</ROW>で囲まれた内容がデータベースの表の1行に当たる。その子供には、表の列名を要素名として、データを要素の内容(テキストノード)としたものになる。
XML SQL Utilityで、XML文書のデータを挿入する場合、この形式のXML文書である必要があるわけだが、ほかの形式のXML文書の場合はその中に含まれるデータをデータベースに挿入することはできないのだろうか。もし、できないとすれば、大変な制限のように思える。しかし、これはXSLTを使えば簡単に解決できる。元のXML文書がどのような形式であれ、XSLTを利用して、XML SQL Utilityで挿入できる形式のXML文書に変換してしまえばいいのである。また、XSLTを使えば、XMLからXMLへの変換の際に、不要なデータを落とすこともできる。
前回は、Emp.dtdというDTDを基に、XML Class Generatorを利用して、Emp.xmlというXML文書を作成した。このXML文書はまさに、XML SQL Utilityでデータベースに挿入できるような形式のXML文書になっているので、このEmp.xmlのデータをデータベースに格納することにする。
下記のプログラムでは、Emp.xmlをXML SQL Utilityを利用して、EMP表に3行挿入している。XML SQL Utilityは、各要素のすべての属性を無視するので、今回の「ROW」要素の「num」という属性は実際には必要ではない。
//////////////////////////////////////////////////////////
import oracle.xml.sql.dml.*; public class EmpInsert {
// JDBC接続を初期化
// XML文書のデータを表に格納
System.out.println(" successfully
inserted "+rowCount+ |
XML文書のデータを挿入する場合は、OracleXMLSaveクラスを使用する。ここでは、挿入する対象のEMP表を指定してインスタンス化している。
- XML文書のファイルを読み込み、データをinsertXML()メソッドでデータベースに格納する。このinsertXML()メソッドは、挿入した行数を返すので、これを保存しておき、後で出力している。
- XML文書の形式があらかじめできていれば、たったこれだけのコードでXML文書内のデータをデータベースに格納することができる。もし、ほかの形式のXML文書の場合は、XML Parserのクラスを利用して、XSLスタイルシートを適用する部分を追加してから、同じ処理をすればよい。
このように、Oracle XML SQL Utility for Javaを利用することで、大変容易にデータベースとXMLを連携させたアプリケーションを作成できる。
さて、5回にわたってXMLを利用するためのツールとしてXDKを解説してきた。この連載を読んで、少しでもXDKを使ってみようと思っていただけたら大変うれしい。
Index | |
連載 XMLツールでプログラミング | |
(1)Javaで利用するXML開発ツール Oracle XML Developer's Kit(XDK)の紹介 |
|
(2)DOMによるXML文書の操作 DOM APIを使ったプログラムの基礎 |
|
(3)
SAXによるXML文書の操作 SAX APIを使ったXML文書操作の基礎と実践 |
|
(4)
Javaで文書作成クラスを生成する DTDを元に、XML文書を作成するJavaクラスを作る |
|
(5)
OracleからXML文書を出力する データベースへの問い合わせ結果をXML文書にする |
- QAフレームワーク:仕様ガイドラインが勧告に昇格 (2005/10/21)
データベースの急速なXML対応に後押しされてか、9月に入って「XQuery」や「XPath」に関係したドラフトが一気に11本も更新された - XML勧告を記述するXMLspecとは何か (2005/10/12)
「XML 1.0勧告」はXMLspec DTDで記述され、XSLTによって生成されている。これはXMLが本当に役立っている具体的な証である - 文字符号化方式にまつわるジレンマ (2005/9/13)
文字符号化方式(UTF-8、シフトJISなど)を自動検出するには、ニワトリと卵の関係にあるジレンマを解消する仕組みが必要となる - XMLキー管理仕様(XKMS 2.0)が勧告に昇格 (2005/8/16)
セキュリティ関連のXML仕様に進展あり。また、日本発の新しいXMLソフトウェアアーキテクチャ「xfy technology」の詳細も紹介する
|
|