Xindice:無料で使えるXMLデータベース(2)
JavaアプリケーションによるXMLデータベース検索
XMLの利用が広まるとともに、XMLデータベースに対する注目も集まりつつあります。本連載では、オープンソース・ソフトウェアとして公開されているXindiceを利用したネイティブXMLデータベースの実践を通して、XMLデータベースの利用方法を解説していきます。 |
野畠英明
ヒューレット・パッカード・ソリューションデリバリ(株)
2002/6/15
2-1. Javaプログラムによる検索の手順 |
今回は、Javaのアプリケーション・プログラムからXindiceに格納されたデータをXPathで検索する方法を紹介します。まず、検索するためのAPIを紹介し、その次にサンプルアプリケーションを例に挙げながら実際の使い方を見ていきましょう。
■検索用APIの使い方
XindiceのAPIは、前回少し触れたように、XML:DB Initiativeという団体が推進しているXML:DBという標準仕様に基づいています。XindiceではXML:DBの実装を、JDBCにおけるドライバのような形で提供しています。Xindiceのパッケージのうち、パッケージorg.xmldb.api以下にあるインターフェイスやクラスはXML:DBに基づくもの、パッケージorg.apache.xindice以下にあるインターフェイスやクラスはXindice固有のものです。以上を踏まえて実際にどのように使うのか見ていきましょう。
Xindiceの検索用APIは次のステップに従って利用します。
1. Database実装クラスの登録
|
↓
|
2. コレクションの取得
|
↓
|
3. XPathQueryServiceの取得
|
↓
|
4. (ネームスペースの設定)
|
↓
|
5. XPathで検索
|
↓
|
6. ResourceSetから検索結果を取り出す
|
↓
|
7. コレクションのクローズ
|
4のネームスペースの設定は、ネームスペースを利用しない場合は省略可能です。また、例外XMLDBExceptionのハンドリングが必要となります。順番に詳しく見ていきましょう。
1. Database実装クラスの登録
最初にDatabaseManagerクラスにDatabaseインターフェイスの実装クラスを登録します。これは、JDBCのDriverManagerクラスとDriverインターフェイスの実装クラスとの関係によく似ていて、XML:DBで決められた仕様に従ったドライバをXindiceが提供しているので、それを使うための準備といったところです。お決まりの手順と思ってもらえばよいでしょう。
String driver = "org.apache.xindice.client.xmldb.DatabaseImpl"; |
2. コレクションの取得
準備ができたら、次にコレクションを取得します。XML:DBはコレクションに対して操作するようにできていますので、コレクションを取得しないことには何も始まりません。ローカルにデータベースインスタンスがある場合、リモートにデータベースインスタンスがある場合の例を順に示します。
ローカルにデータベースインスタンスがあって、かつポート番号がデフォルト(4080番)の場合は、次のようにしてコレクションを取得します。
org.xmldb.api.base.Collection col = |
リモートにデータベースインスタンスがある場合は、次のように、そのホスト名とポート番号を明示してコレクションを取得します。
org.xmldb.api.base.Collection col = |
3. XPathQueryServiceの取得
コレクションに対して行いたいことに応じて、対応するサービスを取得します。今回は、XPathによる検索を行うので以下のようにXPathQueryServiceを取得します。
org.xmldb.api.modules.XPathQueryService service = |
4. ネームスペースの設定
ネームスペースを利用するドキュメントをXPathで検索する際、プレフィックスとURIとの対応関係をサービスに登録する必要があります。次のようにして対応関係を登録します。
String prefix = "p"; |
また、登録したプリフィックスを削除するには、次のようにします。
String prefix = "p"; |
登録されたすべてのプリフィックスを削除するには、次のようにします。
service.clearNamespaces(); |
5. XPathで検索
コレクションから検索するには次のようにXPathQueryServiceに対しqueryメソッドを呼び出します。その戻り値としてResourceSet(JDBCでのResultSetに多少似ています)が返ってきます。
String xpath = "//person[fname='John']"; |
また、特定のドキュメントから検索するには次のようにドキュメントのIDを指定して検索します。
String id = "doc1"; |
このIDは、前回の「ネイティブXMLデータベースを立ち上げる!」で、ドキュメントの登録に使った「xindiceadmin ad」コマンドのnオプションで指定したものです。
6. ResourceSetから検索結果を取り出す
ResourceSetは、検索した結果(としてのResource)の集合が格納されているので、これから1つ1つのResourceを取り出して処理します。Resourceは、コレクションに登録されているXML文書などを示す抽象的なオブジェクトで、現在の仕様では、XMLResourceとBinaryResourceが定義されていますが(将来的にはこの2つ以外のResourceもあり得ます)、ここではXML文書に限って扱うこととし、BinaryResourceは扱いません。
// イテレータの取得 |
getContentAsDOMメソッドで得たNodeは、実際にはDocumentですので注意が必要です。要素を得るには、Nodeに対してgetFirstChildメソッドなどを呼び出す必要があります。
7. コレクションのクローズ
コレクションに対する処理が終了したら、クローズして解放します。
col.close(); |
いかがだったでしょうか。基本的には手順をなぞっていくだけで、XindiceからXML文書を取り出すことができるようになります。次項では、もう少し詳しい解説を交えて、実際のサンプルアプリケーションを紹介します。
3/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の使い方 ・サンプルアプリケーション ・実行準備 |
- QAフレームワーク:仕様ガイドラインが勧告に昇格 (2005/10/21)
データベースの急速なXML対応に後押しされてか、9月に入って「XQuery」や「XPath」に関係したドラフトが一気に11本も更新された - XML勧告を記述するXMLspecとは何か (2005/10/12)
「XML 1.0勧告」はXMLspec DTDで記述され、XSLTによって生成されている。これはXMLが本当に役立っている具体的な証である - 文字符号化方式にまつわるジレンマ (2005/9/13)
文字符号化方式(UTF-8、シフトJISなど)を自動検出するには、ニワトリと卵の関係にあるジレンマを解消する仕組みが必要となる - XMLキー管理仕様(XKMS 2.0)が勧告に昇格 (2005/8/16)
セキュリティ関連のXML仕様に進展あり。また、日本発の新しいXMLソフトウェアアーキテクチャ「xfy technology」の詳細も紹介する
|
|