ここにもXML

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

2004年6月号掲載記事

前回は既存のRDBを用いてXMLを取り扱うお話でした。実際、XMLデータを保管する環境としては、ネイティブXMLデータベースという選択肢もあります。今回は、現在のXMLデータベースとそれを取り巻く環境、実際のアクセス例などをご紹介します。

まず、ネイティブXMLデータベースとは何なのでしょうか?実は、厳密な定義はありません。いくつかのシンクタンクによれば、「XMLの構造を変更することなく格納し、取り出すことが可能なデータベース」であるとか「XMLスタンダードに準じた仕様を採用している」という事は共通にうたわれていますが、実際の実装方法は言及していません。実際、市場には、オープンソースである「Apache Xindice」や商用ライセンスの「TaminoXML Server」「Sonic XIS(旧eXcelon)」「NeoCore XMS」など多数ありますが、XMLの実装(格納)方法はそれぞれ異なり、特徴があります。要するに、「XMLをそのままの形で格納し、簡単に取り出せる」しかもネイティブがゆえに「XMLを高速に格納し取り出すことができる」これが、ネイティブXMLデータベースの最低条件になるでしょう。

前述したとおり、市場に数多くのネイティブXMLデータベースが出回っていますが、まだ当たり前のようには使われていない現実もあります。なぜネイティブXMLデータベースは当たり前のように使われていないのでしょうか。それはXML自身の利用の現状を物語っていました。XMLデータがまだ本格的に利用されていなかったのです。設定情報をあつかうプロパティファイルやメタ情報、また企業の基幹情報であってもすべてではなく一部の情報としてしか扱われていなかったため、XMLデータをプログラムでメモリ上に保持したり、少量をRDBから取り出し変換したりするだけで十分だったのです。

しかしながら、XML対応アプリケーションが増え、皆様方のようなXMLマスターを取得された技術者が増え、XMLが当たり前に使われるようになり、本格的に大量のXMLデータの流通と利用が始まった現在では、ネイティブXMLデータベースとRDBが適材適所で住み別けて活用されるようになりつつあります。

では、XMLデータベース導入のポイントは何なのでしょうか。RDBでのXML利用という観点もありますが、これは最近よく記事を見かけるので、今日は、私が実際XMLデータベースをお客様にご紹介した際に、よく聞かれるポイントをご紹介しましょう。それは、データベースへのアクセス手法とプログラミング手法です。

最近、XMLおよびXMLデータベースを利用したプログラミング手法はDOMを中心として、いろいろなバインディング技術も揃い、こまらなくなりましたが、多くの利用者にとって、ネイティブXMLデータベースへのアクセス手法については、依然として大きな課題のようです。なぜなら、まだRDBに対するSQLのようなデータベース操作言語(仕様)の標準化が完了していないのです。

お察しのとおり、ひと昔前のXMLデータベースの検索方法はXSQLやXML-QL、XBath、XQLなどベンダ各社の独自実装が横行していました。この中で標準的な仕様として残ったものにXPathがあります。XPathは、XSLTとあわせて、XMLドキュメント内の特定のノードにアクセス方法を標準化したものです。 XPathはわかりやすい仕様でしたが、SQLで当たり前とされるSelectのような機能などがありませんでした。そこで、XMLドキュメントへの検索方法の標準化を行うべく、W3CのXML Query WGにて検討されたのです。そこで生まれたのがXQueryです。 XQuery 1.0は、まだ勧告されていませんが、2004年4月15日にLast Callが締め切られました。まもなく勧告されるものと思われます。

以下に、簡単なXQueryの例をご紹介いたします。
(注:ここでのサンプルはすべてTamino XML Serverに実装されている仕様で実行したものです。勧告になった場合に変わる可能性があります。)

【Example1. サンプルデータソース(XML宣言等は省略)】
<source>
<sample>
<member>
<name>Jordan, Michael</name>
<Birthday>19630217</Birthday>
<Qualification>
<XML_Master_certifies>Professional</XML_Master_certifies>
</Qualification>
</member>
</sample>
<sample>
<member>
<name>Schumacher, Michael</name>
<Birthday>19690103</Birthday>
<Qualification>
<XML_Master_certifies>Basic</XML_Master_certifies>
</Qualification>
</member>
</sample>
<sample>
<member>
<name>Sato, Takuma</name>
<Birthday>19770128</Birthday>
<Qualification>
<XML_Master_certifies>Basic</XML_Master_certifies>
<Java_SJC>Programmer</Java_SJC>
</Qualification>
</member>
</sample>
</source>

【Example2. XQuery例:XMLマスターBasic取得者の名前リスト】
for $a in input()/sample where
$a/member/Qualification/XML_Master_certifies/text() = 'Basic'
return <list><name>{$a/member/name/text()}</name></list>

上記のクエリは、最初のfor句でデータベースからXMLドキュメントを$aとして取得しています。input()の代わりにdocument()を用いる場合もあります。次のwhere句で$aからBasic取得者を抽出しています。そして最後のreturn句で<list>タグで始まるXMLドキュメントとして構造変更をし、出力しています。実際にはこれ以外の句としてlet句があり、これらをまとめてFLWR句と呼びます。

【Example3. 取得結果】
<result>
<list>
<name>Schumacher, Michael</name>
</list>
<list>
<name>Sato, Takuma</name>
</list>
</result>

ここに掲載した例は、あえてSQLで言うのであれば、以下のようになるのでしょう。

【Example4. SQLで記述した場合】
Select 'name' from 'sample'
where 'XML_Master_certifies' = "Basic"

しかし、XQueryの機能はこれだけに留まりません。XQueryは、XMLデータの構造をクエリで構造変換する機能を有しています。SQLにくらべより複雑な構造変換も可能になっています。これまで、複雑な入れ子構造のSQLで記述したような構文も単純に記述が可能になります。 XMLをそのままの形で、長所を生かして扱うことの出来るデータ操作言語“XQuery”は、まさにネイティブXMLデータベース普及の要になるといえるでしょう。

一方、ネイティブXMLデータベースには残されている課題もあります。更新に関連する操作言語の標準化です。検索言語と比べるとこちらは遅れており、現状では各社個別の実装になっています。

さて、RDBに比べて歴史の浅いネイティブXMLデータベースですが、すでに大量のネイティブXMLデータを24時間運用で活用されている eコマースサイトmurauchi.com(http://www.murauchi.com)や蛋白質構造情報のアーカイブデータバンクPDBj(http://www.pdbj.org)などの事例もあります。このように、大規模な実例が増え、XQueryの標準化の完了とその実装が進むことにより、ネイティブXMLデータベースが既存のRDBと対等に肩を並べて利用されるようになっていくものと思います。

最後に、ネイティブXMLデータベースに興味をもたれた方、XQueryに興味をもたれた方は、Tamino XML Serverをお試しいただくことが可能です。 http://tamino.beacon-it.co.jp にアクセス頂くか、翔泳社DBマガジン4月号に付録として付いておりますのでご活用いただければ幸いです。

本掲載記事についてのご意見、ご質問は tsatoshi@beacon-it.co.jp までどうぞ。
田中 聡 ビーコンIT プロダクト開発本部

ページトップへ▲

HOMEへ戻る