
【RDBとの違いが明快に分かる】
|
昨今、各ベンダから続々とXML-DB製品がリリースされている。しかし、「XML-DBってどんな製品?」という疑問を持つ読者も多いのではないだろうか。本パートでは、このような読者のために、データベースの作成、XMLデータの登録/検索/更新などの基本操作や、XMLデータ問い合わせ言語「XQuery」について解説する。ぜひ、XML-DBの世界を体験してみてほしい。
XML-DBを使ってみよう
IBMのDB2 9はRDBの機能にXMLデータを扱う機能「pureXML」が追加された、ハイブリッド型データベースである。内部にXML-DBを持ち、XML型というデータ型を使用することでXMLデータをネイティブに扱うことができる。
本パートでは、このデータベース製品の最新バージョン「DB2 9」の開発者向け無償版「DB2 Express-C V9.1 for Windows」(以下、DB2 Express)を用いて、XML-DBの基本的な使い方や操作について解説する(注1)。特定製品に縛られないXML-DBの使い方を理解できるように、ネイティブ型とハイブリッド型の違いについても触れながら解説していく。
XML-DBを扱うための操作ステップ
XML-DBの操作には、大きく分けて次のステップがある。
① データベースを作成する
② スキーマを定義する(オプション)
③ XMLデータを登録する
④ XMLデータを検索する
⑤ インデックスを作成する(オプション)
⑥ XMLデータを更新する
⑦ プログラムから呼び出す
各操作ステップにおける細かい操作は製品によって異なるが、上記操作の流れはどのXML-DBでもほぼ共通である。「オプション」とあるものは、XML-DB製品によっては不要になるステップだ。
これら操作ステップを見ていただくと、RDBと共通するところが多いことに気づくだろう。異なるのは省略しても良いオプションの操作ステップがあるところだ。XML-DBでは、このオプションの操作をしなくても実用的なシステムを構築できる点が特徴である。特に、スキーマの定義をせずに使えるデータベースというのは、RDBの常識から考えるとあり得ないものだ。
ここまで分かれば、あとは実践するだけ。早速、この流れに沿ってXML-DBを使ってみることにしよう。
STEP1 データベースを作成する
XML-DBを使うためには、最初にデータベースの作成が必要だ。多くの製品ではGUI のツールが用意されており、容易にデータベースを作成できる。
画面1 にDB2 Expressのデータベース作成時の画面を示す。画面1 でデータベース名と物理的なストレージ作成場所を指定するだけでXMLデータを格納するデータベースを作成できる。そのほかの設定項目はデフォルトのままでも問題ないが、必要であればストレージの追加などの設定も可能である。

画面1:データベースの作成
ほかのXML-DB製品でもデータベースの作成方法は基本的に同じであるが、中にはインストールをすれば自動的にデータベースを作成する製品もある。
データベースを作成すれば、そこにXMLデータを登録できるようになる。
STEP2 スキーマを定義する(オプション)
次にデータベースのスキーマ定義を行なう。XML-DBでのスキーマは、XML SchemaやRELAX NG、DTDなどで定義したデータ構造のことを指す。RDBでは、スキーマ定義なしにはデータを格納できないが、XML-DBでは製品によって必ずしも定義しなくても良い場合もある。RDBに慣れたエンジニアが最初に驚くのが、スキーマを定義しなくても良いという点だ。
XMLはスキーマを設定することによって、XMLデータの持つ項目や意味をコンピュータに伝え高度な自動処理を可能にする。しかし、スキーマを必ず持つようにすると、XMLの持つ自由度が失われてしまう。そのため、あえてスキーマを定義しないケースもあるわけだ。このスキーマを持たないXMLのことを「well-formed XML」と言う。
XML-DBには、スキーマを定義してそれに適合するXMLのみを格納できるタイプと、スキーマを定義せず任意の構造を持つwell-formed XMLを格納できるタイプの2つがある。また、well-formed XML対応のデータベースでもXMLのスキーマ定義を設定することにより、登録されるXMLデータの妥当性検証ができる製品もある。DB2 9は、well-formed XML対応だが妥当性検証も可能なタイプの製品だ。しかし、DB2 9はハイブリッド型であるためRDBとしてのスキーマが必要になることには注意が必要だ。ここがネイティブ型との大きな違いになる。
DB2 9では、階層構造を持つXMLをXML型のデータとして扱う。つまり、リレーショナルデータ用のテーブルの中にXML型のカラムを作成し、その中でXMLデータを格納する形になる。そのため、XMLデータを格納するテーブルを定義する必要があるのだ。
画面2にXMLデータを扱うテーブルの作成例を示す。XMLデータ用のテーブル作成の手順は、RDBのテーブル作成と同様にテーブル名を指定してカラムを定義し、あとはXML型のカラムを定義するだけだ。

画面2:XMLデータを扱うテーブルの作成
STEP3 XMLデータを登録する
ほとんどのXML-DBには、XMLデータを登録するためにそれぞれ製品固有のコマンドベースのツールやAPIが用意されている。多くの場合、コンソールからコマンドラインでXMLデータのファイルを指定してインポートできる。
画面3 は、DB2 9でXMLファイルを登録した画面である。画面上部の「IMPORTFROM C:\weekly_reports.del…」となっているのがそれだ。どのXML-DB製品にもこのコマンドに相当するものが用意されており、通常は登録したいデータを持つXMLファイルを指定する。

画面3:IMPORTユーティリティを使用したXMLデータの登録
インポートが成功すると、XMLデータが構造解析され、ツリー形式に変換して表示される。これによりデータベースに登録が完了したことを視覚的に確認できる。画面4にGUIツールから登録されたXMLデータの一部をツリー形式で表示した例を示す。

画面4:登録したXMLデータのツリービュー
ここで注意してほしいのは、DB2 9がハイブリッド型であるため、インポート手順がほかのXML-DBとは異なるという点だ。つまり、IMPORTコマンドが指定するファイルは、拡張子「.xml」のXMLファイルではなく、リレーショナルデータを登録するためのインポートファイルなのである。
インポートファイルの中身をLIST1に示す。CSVファイルのように区切られたデータファイルによって、画面2のテーブル定義と対応した値が記述されていることを確認してほしい。
LIST1:インポートファイルの内容
"吉原剛", "システム営業第4課", "2007-04-06", "<XDS FIL='週報_吉原.xml' />"
"小泉隆久", "システム営業第4課", "2007-04-06", "<XDS FIL='週報_小泉.xml' />"
"高田博史", "システム営業第5課", "2007-04-06", "<XDS FIL='週報_高田.xml' />"
…
"石田純", "流通システム開発第2課", "2007-04-06", "<XDS FIL='週報_石田.xml' />"
インポート先のテーブルにXML型カラムが存在する場合、XML型カラムに対応する値に
なお今回の例では、1000件のレコードがインポートされ、1レコードごとに1つのXMLファイルが登録されている。
(注1)各操作はWindows XP上で実行している。