注意:この文章はREADME.jaから手動で生成しています。 必ずしも最新の内容をさしているとは限らないことに御注意してください。最 新の内容は、同梱のREADME.ja をみてください。
config.xirdでxird_dbd.rbおよびRDBのホスト名を指定できるため、RDB、 xird_dbd.rb、xird_dbi.rbは、必ずしも同一ホストで起動する必要はありませ ん。
例:
<config> <database> <xird_dbd> localhost </xird_dbd> <dbname> test-db </dbname> <hostname> localhost </hostname> <username> someone </username> <password /> <dbtype> Pg </dbtype> <primary_key>xird_serial</primary_key> <primary_table> test </primary_table> </database> <mapper> <mapping> <example> <map datatype="real" accept_null="true"> </example> <id> <map table="test" datatype="varchar(13)" accept_null="false"> </id> : </mapping> </mapper> </config>
xird_dbi.rbとxird_dbd.rbを起動してください。
% ruby xird_dbi.rb -d -l dbi.log config.xird % ruby xird_dbd.rb -d -l dbd.log config.xird
xird_dbi.rb、xird_dbd.rb、RDBMSはそれぞれ別ホストで起動することが可能 です。
同一ホストの場合でも別ホストの場合でもconfig ファイルの以下の部分を適 切に記述してください。
<config> <xird_dbd> <- ここにxird_dbdのホスト名を入れてください <hostname> <- ここにRDBMSのホスト名を入れてください </config>
ここまででXIRDを使う準備が整いました。
- 基本部分 - データの取得 - データの更新
に分けて解説します。データの追加や削除も更新の一部として記述されてい ます。
xirdを使用するためには、XMLRPCを使います。ただし、XMLRPCを利用して、 XMLをそのまま投げます。
返答もそのままXMLできますので、それを好きなようにparseしてください。
同梱のtest.rbをみてください。
result = server.call("xird.getSnap", query_xml)
のようにデータの取得やデータの更新のところで解説するXML(query_xml)をそ のまま送信します。
php(version 4)で簡単にXIRDを利用できるライブラリがあります。(まだ未公開)
詳細は公開時に別途解説しますが、
$message = new XML_RPC_Message('xird.getSnap',array($query));
のように同様にXML($query)をそのまま送信します。
<xird:query>タグ内に、取得したい要素名を名前にし、Text要素を空にしたタ グを記入したXMLを作成します。(Text要素を入れたタグは、条件式とみなされます)
XMLRPCで、メソッド名を"getSnap"、引数を作成したXMLにして、xird_dbiに送信し ます。(xird_dbiのポート番号は初期状態では8080です)
xird_dbiからの返り値として、空にしたタグに値が含まれて戻ってきます。
の二つが利用できます。
<xird:query>タグ内で、値が入っているものを条件式とみなします。
例: <xird:query> <nutrition> <id>4901005167537</id> </nutrition> </xird:query>
この例では条件式を id = 4901005167537 とします。
<xird:where>タグを利用することで、複数条件を指定することができます。 <xird:where>タグの中に含まれるタグ内で、値が入っているものを条件式とみ なします。この時、複数のタグがある場合、それらは並列とみなし、ANDでつなぎます。
例:
<xird> <xird:where> <id>4901005167537</id> <energy>80</energy> </xird:where> </xird>
というXMLを送信すると、XIRDは、
id=4901005167537 AND energy=80
という条件式とみなします。
Query: この例では条件式指定に<xird:query>を利用しています。 この場合、enery=581という条件が設定されます。
<?xml version="1.0" encoding="iso-2022-jp" ?> <xird> <xird:query> <nutrition> <id></id> <energy>581</energy> <protein /> <company /> <product /> </nutrition> </xird:query> </xird>
Answer:
<?xml version='1.0' encoding='UTF-8'?> <xird> <xird:result> <xird:row serial_no='3'> <id>4951928302676</id> <protein>0.0</protein> <company>東チョコS</company> <product>おかしの便り ライスチョコ</product> </xird:row> <xird:row serial_no='8'> <id>test</id> <protein>0.0</protein> <company>ダミーデータ</company> <product>ダミーデータ</product> </xird:row> </xird:result> <xird:hash>4e1bfd0ce75dccd59895d473ba626bee</xird:hash> </xird>
DBの中に、条件(energyが581)にマッチするデータが二つあったため、 XMLの中にも二つのデータが入って返ってきました。 これら一つ一つには、serial_noという属性が入っています。 (このserial_noはデータの更新の時に使用します)
もしも、なんらかのエラーが発生した場合、<xird:query>はそのままで <xird:error>タグ内にエラー内容が記述されて返ってきます。
データのUPDATE、INSERT、DELTEを同じ手法で行うことが出きます。
最初に条件を指定して、データの取得を行います。 XIRDから返ってきたXMLの中に<xird:hash>タグが含まれているはずです。
このHashの値を<xird:hash>にいれた上で、以下のタグを入力してくだ さい。 一つのデータを示すために<xird:row>で囲む必要があります。
これらのXMLは少々複雑ですので、例を見てください。
こうしてできあがったXMLをXMLRPCで、メソッド名を"setSnap"、引数を作成 し たXMLとして、XIRD DBIに送信します。(ポート番号は初期状態では8080です)
XIRDからの返り値として、空にしたタグに値が含まれて戻ってきます。
Query: この例では、先ほどの例で取得したデータから
しています。
<?xml version="1.0" encoding="iso-2022-jp" ?> <xird> <xird:query> <xird:row serial_no='3'> <product>すっごくおいしいもの</product> </xird:row> <xird:row> <product>高タンパク質食品</product> <energy>581</energy> <protein>9999.0</protein> </xird:row> </xird:query> <xird:hash>4e1bfd0ce75dccd59895d473ba626bee</xird:hash> </xird>
Answer:
<?xml version='1.0'?> <xird> <xird:query> <xird:row serial_no='3'> <product>すっごくおいしいもの</product> </xird:row> <xird:row serial_no='10'>
p <product>高タンパク質食品</product>
<energy>581</energy> <protein>9999.0</protein>
</xird:row>
</xird:query> <xird:hash>4e1bfd0ce75dccd59895d473ba626bee</xird:hash>
</xird>
Query: この例では、先ほどの例で取得したデータから
しています。
<?xml version="1.0" encoding="iso-2022-jp" ?> <xird> <xird:query> <xird:row serial_no='3'> </xird:row> </xird:query> <xird:hash>4e1bfd0ce75dccd59895d473ba626bee</xird:hash> </xird>
Answer:
<?xml version='1.0'?> <xird> <xird:query> </xird:query> <xird:hash>4e1bfd0ce75dccd59895d473ba626bee</xird:hash> </xird>
もしも、なんらかのエラーが発生した場合、<xird:error>タグ内にエ ラー内容 が記述され、返答されます。
データを追加する場合、NULLが許されてないカラムに値が入っていないとエ ラー が返ってきます。NULLが許されるかなどはconfigにかかれているはずです。
xird_compilerは、config.xirdからCREATE TABLEの雛型を作成するプログラムです。
% ruby xird_compiler.rb config.xird
と実行すると、標準出力にCREATE TABLEの雛型が標準出力に表示されます。 この出力で大抵のRDBMSでは動作します。
ただし、Primary Keyに関しては各RDBMSで共通のデータ型が存在しないため、 手動で追加する必要があります。
また、それ以外にもエラーが発生する場合や、細かな設定を行いたい場合は、 xird_compilerの出力を適当なファイルに保存し、手動で変更を行ってくださ い。
xird_compilerはあくまで雛型を作成するプログラムであり、どのようなRDBMS でも動作することを保証するものではありません。