Xindice:無料で使えるXMLデータベース(4)
XMLデータの更新と削除
4-2. Javaアプリケーションから更新・削除を実行する |
■更新用APIの使い方
第2回「JavaアプリケーションによるXMLデータベース検索」では、検索用APIの使い方を紹介しました。今回は、更新用APIの使い方を、検索用APIとの違いを説明する形で進めていきます。
検索用APIは、次のステップで利用しました。
1. Database実装クラスの登録
|
↓
|
2. コレクションの取得
|
↓
|
3. XPathQueryServiceの取得
|
↓
|
4. (ネームスペースの設定)
|
↓
|
5. XPathで検索
|
↓
|
6. ResourceSetから検索結果を取り出す
|
↓
|
7. コレクションのクローズ
|
一方、更新用APIは、次のステップで利用します。
1. Database実装クラスの登録
|
↓
|
2. コレクションの取得
|
↓
|
3.
XUpdateQueryServiceの取得
|
↓
|
4. (ネームスペースの設定)
|
↓
|
5. XUpdateで更新
|
↓
|
6. コレクションのクローズ
|
3から5までが検索用APIとの違いです。以降でそれらのステップの説明を行います。
■XUpdateQueryServiceの取得
コレクションに対して行いたいことに応じて、対応するサービスを取得します。今回は、XUpdateによる更新を行うので、以下のようにXUpdateQueryServiceを取得します。
org.xmldb.api.modules.XUpdateQueryService service = |
■ネームスペースの設定
XML:DBでは定義されていないのですが、Xindiceでは、XUpdateでネームスペースを利用するため、プリフィックスとURIとの対応関係をサービスに登録する必要があります。次のようにして対応関係を登録します。
org.apache.xindice.client.xmldb.services.XUpdateQueryServiceImpl
serviceImpl = |
また、登録したプリフィックスを削除するには、次のようにします。
String prefix = "p"; |
登録されたすべてのプリフィックスを削除するには、次のようにします。
serviceImpl.clearNamespaces(); |
■XUpdateで更新
コレクションから検索するには次のようにXUpdateQueryServiceに対しupdateメソッドを呼び出します。その戻り値として更新されたノードの数が返ってきます。
String xupdate = "<xupdate:modifications version=\"1.0\"
" |
また、特定のドキュメントを更新するには次のようにドキュメントのIDを指定して更新します。
String id = "doc1"; |
このIDは、第1回のドキュメントの登録に使った「xindiceadmin ad」コマンドのnオプションで指定したものです。
■サンプルアプリケーション
XindiceのコマンドにはXUpdateを実行するものがありませんので、そういうコマンドをサンプルとして作ってみましょう。このコマンドはパラメータとしてXUpdateを記述したファイル名を与えると、そのファイルから読んだXUpdateを実行します。
このサンプルで扱うファイルは、分かりやすくするため、普通のXMLファイルとは違い、XMLのencodingの指定に従いません。JVMのデフォルトエンコーディングで読み込まれます。そこだけは注意してください。
■実行準備
サンプルアプリケーションをコンパイル・実行するためには、第2回で示した以下のクラスパスを設定しておく必要があります。
編注:以下のリストでは、入力するコマンドが分かりやすいようにエンターキーを押下する位置に↓ 記号を記しました。
|
|
||
|
加えて、Xindice 1.0でJava2 SDK 1.4を使う場合は、SDK付属のXalanを使わないようにするため、追加の設定が必要です(XUpdateでXalanを使うため)。1.3をご使用の方は読み飛ばしてください。
|
||
|
以上の準備をしたうえで、実行時に、javaコマンドに次のようなオプションを付けてください。
|
||
|
上記のオプションは、Xindiceの起動でも同様に必要ですので、Windowsであれば「%XINDICE_HOME%\startup.bat」、UNIX系であれば「$XINDICE_HOME/config/vm.cfg」(このファイルはJVMに与えるオプションを記述するものです)を書き換えてください。
■サンプルコード
XUpdateを実行するサンプルアプリケーションを紹介します。
XUpdate.java |
import org.xmldb.api.base.*; |
1・2・6は第2回の検索のサンプルと同じです。3では、XPathQueryServiceの代わりにXUpdateQueryServiceを使うように変更しています。そして、5では、ファイルから読み込んだXUpdateを使って更新しています。
では、実際にこのサンプルを実行してみましょう。前提条件として、最初に示した次のXMLをカレントディレクトリにupdate.xmlというファイル名で保存してあるとします。
<xupdate:modifications version="1.0" xmlns:xupdate="http://www.xmldb.org/xupdate"> |
以下のコマンドを実行します。
java XUpdate update.xml |
次のように表示されれば成功です。
Number: 1 |
実際に更新されたかどうかは、次のようにxindice xpathコマンドを実行することで確認できます。
xindice xpath -c /db/sampledb -q "/problem[@id='ID0002']" |
■最後に
これまで、Xindiceを題材にネイティブXMLデータベースの使い方を簡単に紹介してきましたが、いかがだったでしょうか。興味を持って取り組んでいただくきっかけになったのであれば幸いです。
9/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」の詳細も紹介する
|
|