Xindice:無料で使えるXMLデータベース(1)

ネイティブXMLデータベースを立ち上げる!


XMLの利用が広まるとともに、XMLデータベースに対する注目も集まりつつあります。本連載では、オープンソース・ソフトウェアとして公開されているXindiceを利用したネイティブXMLデータベースの実践を通して、XMLデータベースの利用方法を解説していきます。

野畠英明
ヒューレット・パッカード・ソリューションデリバリ(株)
2002/5/15


1-1. Xindiceをインストールする(Windows/UNIX)

 最近はシステム間連携をはじめ、アプリケーションのデータ処理などにもXMLがよく用いられるようになっています。その流れの中でリレーショナル・データベースによるXMLへの対応がはかられています。しかし、一方で、リレーショナル・データベースでカバーしきれない要求に応えるべくネイティブXMLデータベースというものも存在します。本連載では、ネイティブXMLデータベースの一例として、オープンソースで手軽に利用できるXindiceを紹介していきます。

XindiceのWebページ

Javaで作られたXindice

 Xindiceは、The Apache Software Foundationのプロジェクトの1つとして開発されているネイティブXMLデータベースです。すべてJavaで実装されています。以前は、dbXML Coreという名前で開発されていたものでしたが、2001年12月にThe Apache Software Foundationに寄贈され、現在の名称となりました(編注:XindiceのWebページによると、Xindiceの発音は、「わざとらしいイタリア語風で『ジンディーチェ(zeen-dee-chay)』」と説明されています)。

ネイティブXMLデータベースの特徴

 Xindiceは「ネイティブXMLデータベース」だといいましたが、ネイティブXMLデータベースとは、どんな特徴を持っているのでしょうか。ネイティブXMLデータベースの特徴は、リレーショナル・データベースに比べて、XMLの持つデータ構造の柔軟性を生かしやすく、効率的にXMLを扱うことができる点にあります。そのため、多くのネイティブXMLデータベースでは、どんなデータ構造(スキーマ)のXML文書でも扱えるように、あらかじめ格納するXML文書のスキーマを定義しておく必要がありません。

 一方、リレーショナル・データベースにXML文書を格納する場合、通常はXML文書を細かく分解して、分解したデータをカラムにマッピングしていきます。この場合、XML文書の分解方法を指定しなければならないため、格納するXML文書のスキーマをあらかじめ定義しておくことが不可欠です。複雑な構造を持つXML文書の場合、分解してカラムにマッピングすることが難しくなります。また、XML文書を分解せずに、1つの固まりとして丸ごとカラムに格納することもあります。この場合は、どんなXML文書でも関係なく格納していきますので、格納するXML文書のスキーマをあらかじめ定義する必要はありません。しかしこの場合、格納したXML文書の検索には全文検索が使えますが、XML文書の一部だけを取り出したり、XML文書内の特定の要素だけを参照したり更新したりする、といった柔軟な操作はできません。

 ネイティブXMLデータベースは、リレーショナル・データベースとは違い、XMLに特化した内部構造を持っています。そのため、XML文書内のノードをたどる処理を高速に行うことができたり、XML文書内の特定の部分だけを一括して操作できたりします。また、XML文書を格納するスペースの効率も高くなっています。

Xindiceの特徴

 ここまではネイティブXMLデータベース一般の話をしてきましたが、今回取り上げるXindiceはどんな特徴を持っているのでしょうか。以下にその特徴を挙げます。

Well-Formedドキュメントを格納可能
スキーマを定義することなくXML文書を格納することができます。しかし、現在のバージョンではスキーマによる検証には対応していません。
問い合わせ言語はXPath
問い合わせには、現在ネイティブXMLデータベースで標準的に用いられているXPathを用います。XQueryはまだWorking Draftということもあって、サポートされていないようです。
更新言語はXML:DB XUpdate
XMLデータベースの更新に関する「これで決まり」といった標準的な仕様はないのですが、XML:DB Initiativeという団体が策定しているXML:DB XUpdateという仕様に対応しています。
エレメントや属性にインデックスを付けることが可能
問い合わせを高速化できるようインデックスを付けることが可能です。
Java用のAPIが用意されている
Javaのクラスライブラリが用意されていて、それを使うことでプログラムから比較的簡単にアクセスできます。また、CORBAあるいはXML-RPCベースのインターフェイスも用意されているのでほかの言語からのアクセスも可能です。
すべてJavaで記述されている
J2SEが動作する環境であれば、ほぼすべての環境で動作可能です。ただし、特定のプラットフォームに特化した機能や厳格なトランザクション性の保証といったことはサポートされません。
セキュリティ関連の機能はない
現在のバージョンでは、ユーザー認証といったセキュリティの機能がないので、注意する必要があります。例えば、リモートからのアクセスを制限するにはネットワークレベルでフィルタリングする必要があります。

Xindiceをインストールする

 長々と概要を述べてきましたが、そうはいっても具体的なイメージがわかないという方も多いと思いますので、さっそくXindiceをインストールして、動作を試せるようにしましょう。Xindiceに必要な動作環境は、J2SE 1.3以降です。それさえ満たせば基本的にどのプラットフォームでも動作するはずです。ここでは、Windowsでの例とUNIX系(Bシェル)での例を示すこととします。

 まず、XindiceのWebページの一番下にあるリンクから、インストールファイルをダウンロードします。現在のバージョンは1.0で、tar+gzipのファイル(ファイル名:xml-xindice-1.0.tar.gz)と、zipのファイル(ファイル名:xml-xindice-1.0.zip)の2つが用意されていますので、いずれかご自分で扱いやすい方を入手してください。

 次に、ダウンロードして解凍したファイルをWindowsであれば「C:\Xindice」や「C:\work\Xindice」などのフォルダ、UNIX系であれば「/usr/local/Xindice」などのディレクトリに配置します(以下、WindowsはC:\Xindice、UNIX系は/usr/local/Xindiceに配置した前提で解説していきます)。

 環境変数の設定を行います。コマンドラインで設定する前提で説明しますが、それらの設定をバッチファイルやシェルスクリプトに記述して、簡単に行えるようにしておくと便利だと思います。

 最初にJ2SEのbinディレクトリにパスが通っていることを確認します。そうでない場合は設定してください。ここでは、J2SEがWindowsは「C:\jdk1.3.1」、UNIX系は「/usr/local/jdk1.3.1」にインストールされているという前提で記述します。

Windows
C:\>set path=C:\jdk1.3.1\bin;%path%
UNIX系(Bシェルでの操作)
$ PATH=/usr/local/jdk1.3.1/bin:$PATH; export PATH

 Xindiceのbinディレクトリもパスを通します。

Windows
C:\>set path=%path%;C:\Xindice\bin
UNIX系
$ PATH=$PATH:/usr/local/Xindice/bin; export PATH

 環境変数JAVA_HOMEを、J2SEをインストールしたディレクトリを指すよう設定します。

Windows
C:\>set JAVA_HOME=C:\jdk1.3.1
UNIX系
$ JAVA_HOME=/usr/local/jdk1.3.1; export JAVA_HOME

 環境変数XINDICE_HOMEをXindiceをインストールしたディレクトリを指すよう設定します。

Windows
C:\>set XINDICE_HOME=C:\Xindice
UNIX系
$ XINDICE_HOME=/usr/local/Xindice; export XINDICE_HOME

 以上でインストールは完了です。

  1/9

Index
Xindice:無料で使えるXMLデータベース
Xindiceをインストールする(Windows/UNIX)
・Javaで作られたXindice
・ネイティブXMLデータベースの特徴
・Xindiceの特徴
・Xindiceをインストールする
  XMLデータベースの作成と基本的な検索
・起動と停止
・コマンドラインからXindiceを利用する
・コレクションとドキュメント
・では、検索してみよう
・Xindiceの主なコマンド一覧
  Javaプログラムによる検索の手順
・検索用APIの使い方
  検索サンプルアプリケーションの実際
・例外
・XPath
・Xindiceで検索するサンプルアプリケーション
・ネームスペースを利用しない例
・ネームスペースを利用する例
  サーブレットからXindiceを呼び出す
・サーブレット環境の準備
・Webアプリケーションの準備
  Xindiceを呼び出すサンプルサーブレット
・XPath式の結果をXML文書として返す
・結果をXSLTでHTMLに変換する
・変換のためのXSLTは別ファイル
  インデックスで高速化
・インデックス管理コマンド
・インデックスの有無によるスピード比較
・測定結果
  XUpdate言語の使い方
・現在ドラフト中のXUpdate
・ノードの挿入・追加
・ノードの更新
ノードの削除
・ノード名変更
  Javaアプリケーションから更新・削除を実行する
・更新用APIの使い方
・サンプルアプリケーション
・実行準備


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

注目のテーマ

HTML5+UX 記事ランキング

本日月間