XMLサーバカタログ/2001 Summer

〜XMLデータベース編〜

新野淳一(@IT編集局)、加山恵美
2001/7/27

XMLに対応したサーバを紹介するこの特集。前回の「BtoBサーバ編」に続き、今度は「XMLデータベース編」をお届けする。ここでいう「XMLデータベース」とは、XML文書をストアする機能を備えたデータベースを指す。XML文書のストア機能は、いまや多くのデータベースが実装する機能となりつつある。ビジネスで取り交わされる文書の多くがXML化されようとしているからだ。

リレーショナルか、それともXMLネイティブか

紹介する製品
Tamino
Yggdrasill
SQL Server 2000
Oracle8i
DB2 UDB
iConnector
HiRDB Adapter for XML
Sybase Adaptive Server 12

 XML文書をデータベースに保存することで得られるメリットとは、第一に大量のXML文書の検索や追加、更新などが高速かつ容易になることだ。また、バックアップ機能やログの管理、レプリケーション機能などを備えたデータベースであれば、ハードウェアの故障などによる事故からも大事なデータを守ることができる。

 特に、今後ビジネスでやりとりされる文書がXML化されるようになれば、大量のXML文書の保存と発行にともなう管理が必要となる。そうなれば、XML対応のデータベースは、現在のリレーショナルデータベースと同じように、重要なアプリケーションとなることは間違いないだろう。

 現在のところ、XML文書をデータベースに保存する製品は、2つに大別できる。「XML文書をそのまま保存できるデータベース」と、「リレーショナル形式にマッピングして保存するデータベース」だ。それぞれがどういう特徴を持つのか、解説しよう。

XMLネイティブなデータベース

 XML文書をそのまま、もしくは最小限の変換を行ったうえで保存し、完全にオリジナルなものと同じ状態で取り出せるデータベースを、ここでは広い意味で「XMLネイティブ」なデータベースと呼んでおこう。

 XML文書をそのまま保存できるといっても、単にまるごと保存するだけではファイルシステム上に保存するのと変わらない。そこでXMLネイティブなデータベースでは、保存したXML文書に対してインデックス付けをしたり、DOMツリーに変換するなど、XML文書内の目的のデータを素早く検索、更新できるような工夫がされている。

 インデックス方式は、XML文書と同時に、その文書構造に沿ったインデックスを付加して保存する方法だ。大規模なXML文書のデータベースになっても、インデックスのおかげで目的の部分をすばやく検索できる。また、データの変換動作がないため、XML文書の入出力が高速に行える。

XMLネイティブなデータベースでは、XML文書をツリー構造などに変換してそのまま格納する

 XML文書を変換する典型的な方法は、DOMツリーへの変換だ。あらゆるXML文書は、「ノード」に分解してツリー構造に組み変えることができる。これがDOMツリーである。そしてDOMツリーは、元のXML文書の情報を、構造も含めてそのまま保持しているため、DOMツリーから簡単に元のXML文書に戻すことができるし、ツリーをたどって目的のデータを探したり、ツリーの一部を取り出したり、ノードを書き換えたり追加することも容易に行える。

 一般的に、XMLネイティブなデータベースの特徴は、XML文書の特徴を生かした管理ができることにある。つまり、XML文書が持つタグの情報を元にした検索や追加、削除、更新などが可能だったり、検索結果としてXML文書の任意の一部だけを取得できたり、XML文書の一部の更新や追加が可能といった機能を提供している。また、自由に任意の構造を持つXML文書を保存し、データベースに追加することができる。

 その一方で、XMLネイティブなデータベースに決定的に欠けているのが、標準的な問い合わせ言語だ。リレーショナルデータベースには、「SQL」という、機能的にもほぼ完成された業界標準の問い合わせ言語がある。しかし現在のところ、XML文書とそのデータベースを対象にした問い合わせ言語の業界標準は存在しない(W3Cなどで検討はされている)。そのため、XMLデータベース製品ごとに問い合わせの方法が異なり、互換性もほとんどないのが現状である。

 XMLネイティブなデータベースとしては、Tamino、eXcelon、Yggdrasilなどが挙げられる。

リレーショナルなデータベース

リレーショナルデータベースでは、XML文書の一部をテーブルにマッピングさせて格納する

 もう一方の、XML文書をリレーショナル形式にマッピングして保存するデータベースは、XML文書の決められた部分を特定のテーブルの特定のフィールドのデータにマッピングすることで、XML文書の中のデータをデータベースに格納する機能を備えている。

 マッピングの方法は製品によってさまざまだが、一般にXML文書の特定の要素(開始タグから終了タグまで)と、テーブルの特定の列を対応させて、XML文書の中からデータを取り出し、データベースへ格納させる、という方法をとる。また、同様の方法で、データベースに格納されているデータをXML文書に組み立てて出力する機能も持つ。リレーショナルデータベースでは、こうしたすでに格納されたデータをXML文書形式に加工して出力する方法に重点が置かれている製品がほとんどのようだ。

 この場合、XML文書から特定の要素だけが抜き取られて保存されることになるため、元のXML文書の構造はいったん破棄される。XML文書には、漢字コードや名前空間の情報などが付加されているし、要素の前後関係や親子関係なども意味を持っているが、列にマッピングされて保存された段階で、こうした情報は失われてしまう。そのため、リレーショナルデータベースに格納された情報から元のXML文書を組み立てるには、こうした失われた情報を外部で保持しておき、組み立て時に補ってやるか、そもそもオリジナルと同一のXML文書を再現する必要のない利用形態を想定する必要がある。

 現状では、BtoBのような用途でXML文書を利用してやりとりされるデータのほとんどが定型データであり、またXML文書も定型的な文書であるため、こうした利用法でも十分だと思われる。

 リレーショナルデータベースにマッピングしてXML文書を保存する方法の特徴は、この「必要な要素だけを抜き出して保存する」点にある。保存後は通常のデータベースのデータとして扱えるため、高速なトランザクション処理、排他制御、バックアップ機能など、すでに実績を積んだリレーショナルデータベースの機能を利用できる。Oracle8i、IBM DB2 UDBなど著名なデータベース製品の多くは、こうしたXML文書とのマッピング機能を備えており、インフォテリアのiConnectorといった、マッピング専用のツールも存在する。

 では、次ページからこうしたXML対応のデータベースを個別に紹介していこう。

■コラム BLOB領域にXML文書を保存する
 ほとんどのリレーショナルデータベースは、画像ファイルやテキストファイルなど、定型データとしては扱えない大規模なファイルを収めることができるBLOB(Binary Large Object)と呼ばれる機能を備えている(製品によって名称は異なる)。BLOBにはあらゆるファイルを格納することができるため、XML文書を保存する方法としても利用することができる。

 BLOB領域ならば、XML文書の情報を失わずにデータベース内に格納することができるが、一方でこの領域に保存されたテキストファイル(すなわちXML文書)に対しては、全文検索程度の機能しか提供されていない。そのため、XML文書の特徴を生かした検索や更新などはできないという短所があり、あまり利用されていない方法だ。


4/6 XMLネイティブ型

Index
XMLサーバカタログ/2001 Summer
〜BtoBサーバ編〜
  BtoBサーバに求められる3つの機能
  XML/インターネット型、データベース型
Asteria/インフォテリア
BizTalk Server 2000/マイクロソフト
eXcelon B2B Integration Server/日本エクセロン
コラム:XMLアクセラレータでBtoB通信を高速化
  EAI型、Webアプリケーションサーバ型
Ariba Buyer/アリバ
Silver Stream xCommerce/テクマトリックス
そのほか紹介できなかったBtoBサーバ
〜XMLデータベース編〜
リレーショナルか、それともXMLネイティブか
  XMLネイティブ型
Tamino/ビーコンIT
Yggdrasill/メディアフュージョン
コラム:eXcelonとAsteriaのストアは何型?
  リレーショナル型
Oracle8i
DB2 UDB
iConnector
そのほかのデータベース製品


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

注目のテーマ

HTML5+UX 記事ランキング

本日月間