XMLデータベース製品カタログ 2003
〜XML対応リレーショナルデータベース編〜

山田祥寛
2003/11/15


紹介する製品
Microsoft SQL Server 2000
DB2 Universal Database V8.1
Sybase Adaptive Server Enterprise 12.5
Oracle XML DB
Oracle XML DB

限りなきネイティブXMLデータベースへの挑戦

 Oracle9i Databaseは、前バージョンOracle8iで培ったインターネット・データベースとしてのノウハウを前提に、より高い可用性とリアルタイム性を追求した、データベース製品のデファクトスタンダードともいうべき製品の1つである。単なるデータベース製品というにとどまらず、Oracle9i Databaseの潜在力を最大限に引き出すOracle Application Server、レガシーなビジネスロジックを生かす統合開発環境Oracle9i Developer Suiteとの統合力それ自体が、厳密さを要するこれからの企業基幹システムへのOracleのソリューションともいえよう。

 Oracle9iでは旧バージョンの実績を前提に、400を上回る新機能を追加している。本稿ではその中でも「ネイティブXMLへの対応」という切り口からOracle9i、特にOracle9i Release2からの新機能であるOracle XML DBを概観してみることにしたい。Oracleは、バージョンOracle8iでも「Oracle XML Developer's Kit」を基盤としたXMLソリューションを提供しているが(別稿「XMLサーバカタログ/2001 Summer」を参照)、それはあくまでもRDBとしてのXML対応であった。外部に専用のJavaツールを用意することで、リレーショナル・テーブルとXMLとの疑似的なマッピングを実現しているにすぎなかったのである。しかし、Oracle9i Release2のOracle XML DBによりデータベースエンジン自体がネイティブなXMLの格納に対応した。これによって、Oracle DatabaseはRDB製品という枠を自ら超えて、新たなRDBとNXDBの融合を実現したのである。

XMLをネイティブに格納するXMLTypeデータ型

 Oracle9i Release2では、XML文書を格納するための専用のデータ型として「XMLType」が用意されている。XMLTypeデータ型に格納するに際して、XML文書はDOMツリーのようなオブジェクト型に展開されるため、処理のたびにXML文書を再変換・パースする必要がない。また、XMLTypeに格納されたXML文書は、ビュー、PL/SQL、JDBCなどのクライアントから直接にアクセスすることができる。このことは、SQL Serverが、XML文書をあくまでリレーショナルテーブルにマッピングすることを大前提にしているのとは、いかにも対照的だ。Oracle9i Release2のXMLTypeデータ型は、Oracleがもはや単なるRDBによるXML対応ではなく、NXDBの世界への第一歩を踏み出したことの象徴ともいえる。

図1 XMLTypeによる構造化ストレージ


XPath検索のパフォーマンスを大幅に向上させるクエリー・リライト

 XMLTypeデータ型を利用するメリットは、XPath式による検索・更新のパフォーマンスが大幅に向上する点にある。Oracle XML DBには内部的に、XMLTypeデータ型への問い合わせを最適化されたSQL命令に置き換える“クエリー・リライト”と呼ばれる機能がある。これによって、XPath式によって指定されたノードを構造化ストレージの対応するオブジェクトに直接アクセスする問い合わせに置き換えることが可能となる。

SELECT Extract(
    xmldoc,
    '/emp/ename/text()',
    'xmlns="http://www.oracle.com/EMP"')
  FROM emp_col_tab;

     ↓ SQL問い合わせのリライト
SELECT e.xmldoc.XMLData.ename FROM emp_col_tab e;
リスト1 SELECT命令のクエリー・リライト

UPDATE po_tab p SET value(p)=UpdateXML(
  value(p),
  '/PurchaseOrder/@PurchaseDate/',
  '2002-01-02',
  '/PurchaseOrder/PONum/text()',
  2200);

  ↓ SQL更新のリライト
UPDATE po_tbl p
  SET p.XMLData."PurchaseData"=TO_DATE('2002-01-02','SYYYY-MM-DD'),
  p.XMLData."PONum"=2200;
リスト2 UPDATE命令のクエリー・リライト

XMLTypeの部分更新が可能

 XMLTypeデータ型では、XML文書が内部的にDOMツリーのようなオブジェクト型として展開されていることから、ノード単位(特定の要素や属性単位)で高速に更新することが可能である。また、クエリー・リライトが有効に機能しない場合もDOMツリーとしてXML文書全体をロードするのではなく、必要なときに必要なノードのみをメモリ上に展開するため、メモリ使用量を最小限に抑えられる(遅延ロード)。

 ただし、これらの構造化ストレージによるXMLTypeデータ型はXML Schemaの存在を前提としている。XML Schemaを使用していない場合は、XML文書はCLOB型のような非構造ストレージに格納されるが、この場合にも遅延ロードの機能が有効に働くようになっている。また、同じく現行バージョンにおいては、XML文書のスキーマ構造に変更があった場合には、XML文書の再ロードが必要となる点にも注意すること。

Oracle XML DBへの多様なアクセス手法

 Oracle XML DBでは、Oracle XML DB Repositoryというリポジトリの機能によってOracle Databaseに対するアクセスの手段を選ばない。旧来のOracle Netクライアントはもちろん、インターネットブラウザ、FTPクライアント、WebDAVクライアントによるアクセスにも対応している。これによって、(例えば)Microsoft Officeで編集したドキュメントをファイルサーバに保存するのとまったく同じ要領で、Oracle XML DBに対して格納することができ、またXML文書を取得する際にもなんらコーディングの必要がない。

図2 Oracle XML DBリポジトリへの多様なアクセス

 以下は、インターネットブラウザからHTTP経由(URL経由)でリポジトリにアクセスし、XML文書を参照している例である。

図3 Oracle XML DB RepositoryへのHTTPアクセス

SQLとXMLとのシームレスな融合

 以上、Oracle9i Release2のXML対応機能であるOracle XML DBについて紹介してきたが、冒頭で述べたようにOracle9i Release2はもはやRDBではない。ただ、もちろん、これまでのOracle Databaseから独立した新たなNXDBというわけでもない。Oracle Database(RDB)の信頼ある実績を前提に実現した「SQLとXMLとの融合」、それがOracle XML DBのコンセプトといえよう。

 以下では、Oracle9i Release2のNXDBとしての顔とRDBとしての顔を橋渡しする、Oracle XML DBのさまざまな機能群を見てみよう。これらの機能の存在によって、開発者はSQLかXMLかということをなんら意識することなく、用途によって扱いやすい側面からデータを操作できる。

DBUriサーブレット

 DBUriサーブレットを用いることで、データベース内のリレーシナルテーブルからXML文書を構成することができる。また、その際にXSLTスタイルシートを指定することで出力したデータをそのまま整形されたHTMLとして出力することも可能だ。DBUriサーブレットの使用に当たって、開発者によるコーディングはまったく必要ない。

図4 DBUriサーブレットのXSLT変換
http://localhost:8080/oradb/SCOTT/EMP?transform=/public/emp.xsl
&contenttype=text/html

 なお、DBUriサーブレットは、「サーブレット」という名前こそ付いているがデータベースエンジンネイティブなモジュールである。旧来のOracle XML Developer's Kitのように外部のJava仮想マシンを起動する必要がないので、高いパフォーマンスを期待できる。

リレーショナル表とXMLドキュメントを相互変換する
 〜XMLTypeビューとリレーショナルビュー〜

 XMLTypeビューを用いることで複数のリレーショナルテーブルを結合し、結果としてXMLドキュメントを生成することができる。DBUriサーブレットの機能と酷似していると思われるかもしれないが、DBUriサーブレットがあくまで単一の表から一方向のデータ抽出を行うものであったのに対し、XMLTypeビューは複数の表からデータを生成することが可能である。また、生成されたビューに対して検索やそのほかDML操作(UPDATEやDELETE)を行うことも可能なのである。この辺りはまったくXMLを意識しないRDBの操作として行うことができる。また、DML操作時にはデータの妥当性をXML Schemaによって自動的に検証することも可能である。

図5 XMLTypeビュー

 一方のリレーショナルビューは、逆にXMLTypeデータ型からの抽出結果を、あたかもリレーショナルテーブル(スカラーデータ型)のように見せる機能である。

create or replace view PURCHASEORDER_MASTER_VIEW
 (REFERENCE, REQUESTOR, USERID,
  SHIP_TO_NAME, SHIP_TO_ADDRESS)
as select
 extractValue(
  value(p),'/PurchaseOrder/Reference'),
 extractValue(
  value(p),'/PurchaseOrder/Requestor'),
 extractValue(
  value(p),'/PurchaseOrder/User'),
 extractValue(
  value(p),'/PurchaseOrder/ShippingInstructions/name'),
 extractValue(
  value(p),'/PurchaseOrder/ShippingInstructions/address')
from PURCHASEORDER p;
リスト3 リレーショナル・ビューの作成スクリプト

「制約」の利用

 リレーショナルテーブルに対して、XML Schemaによる妥当性チェックが行えるのと同様、XMLTypeデータ型に対して、RDBとしての「制約」を利用できるのも面白い機能だ。XML Schemaでは表現できない(あるいは表現が難しい)一意制約や既存データとの外部参照整合性などに、Oracle開発者はこれまでのRDB開発のノウハウをそのまま利用することができる。

 純正のNXDBがこうした機能を実現する場合には、外部APIを利用して検証プログラムを記述しなければならないことを思えば、まさに「RDBとNXDBの融合」を標ぼうするOracleの特徴的な機能の1つともいえよう。

 代表的な4つのRDB製品を取り上げて、それぞれのXML対応機能を紹介してきた。ベンダごとにRDBとXMLとの接点を独自のコンセプトで実現していることが理解できただろう。この分野はまだまだ発展途上にあるので、各製品の新バージョンがXML対応機能をどのように進化させていくか、今後も注目していきたい。(完)

5/5  

Index
XMLデータベース製品カタログ 2003
〜XML対応リレーショナルデータベース編〜
  XML対応リレーショナルデータベース概要
  Microsoft SQL Server 2000
SQLXMLで飽くなき「XMLレス」XML対応への挑戦
  DB2 Universal Database V8.1
企業内データソースの戦略的な統合を目指す
  Sybase Adaptive Server Enterprise 12.5
JavaオプションでシンプルなXML対応を実現する
Oracle9i XML DB
限りなきネイティブXMLデータベースへの挑戦

関連記事
 ・XMLデータベース製品カタログ 2003 〜ネイティブXMLデータベース編〜
 ・XMLサーバカタログ 2001〜Summer 〜XMLデータベース編〜
 ・.NET Enterprise ServersのXML度を探る

「XMLデータベース製品カタログ2003」



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

注目のテーマ

HTML5+UX 記事ランキング

本日月間