説明

検索装置、検索方法および検索プログラム

【課題】XRPCではXQuery内にXRPCを明示的に記述する必要がある。
【解決手段】検索装置は、第1受付部と、第1生成部と、第1送信部と、第2送信部と、第2受付部と、受信部と、実行部と、第3送信部と、を備える。第1受付部は、検索要求をクライアントから受け付ける。第1生成部は、検索要求からサーバに対して検索を要求する分散検索要求と、分散検索要求による検索結果を統合する統合要求とを生成する。第1送信部は、分散検索要求をサーバに送信する。第2送信部は、統合要求の実行結果の識別情報をクライアントに送信する。第2受付部は、識別情報で識別される実行結果の取得要求をクライアントから受け付ける。受信部は、分散検索要求に対する検索結果をサーバから受信する。実行部は、受信した検索結果に対して統合要求を実行する。第3送信部は、統合要求の実行結果を、取得要求を送信したクライアントに対して送信する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、検索装置、検索方法および検索プログラムに関する。
【背景技術】
【0002】
XQuery処理を分散システムにより実現させる分散XQuery処理技術が開発されている。しかし、分散XQuery処理の試みはまだ始まったばかりであり、分散XQuery処理について記述した論文が散見される程度である。
【0003】
分散XQuery処理の1つであるXRPCは、異種分散データソースに対するXQueryの言語拡張であり、XQueryの組込み関数としてRPC(Remote Procedure Call)機能を備えることで分散XQueryを実現する。
【先行技術文献】
【非特許文献】
【0004】
【非特許文献1】Ying Zhang, et. al, “XRPC: Interoperable and Efficient Distributed XQuery”, VLDB2007
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかしながら、分散XQuery処理として代表的な従来技術であるXRPCでは、例えば、ユーザがXQuery内に特別な言語拡張であるXRPCを明示的に記述する必要があるという問題があった。
【課題を解決するための手段】
【0006】
実施形態の検索装置は、第1受付部と、第1生成部と、第1送信部と、第2送信部と、第2受付部と、受信部と、実行部と、第3送信部と、を備える。第1受付部は、検索要求をクライアントから受け付ける。第1生成部は、検索要求からサーバに対して検索を要求する分散検索要求と、分散検索要求による検索結果を統合する統合要求とを生成する。第1送信部は、分散検索要求をサーバに送信する。第2送信部は、統合要求の実行結果の識別情報をクライアントに送信する。第2受付部は、識別情報で識別される実行結果の取得要求をクライアントから受け付ける。受信部は、分散検索要求に対する検索結果をサーバから受信する。実行部は、受信した検索結果に対して統合要求を実行する。第3送信部は、統合要求の実行結果を、取得要求を送信したクライアントに対して送信する。
【図面の簡単な説明】
【0007】
【図1】図1は、XRPCを用いる場合の検索装置を含むデータベースシステムの構成の一例を示すブロック図である。
【図2】図2は、本実施形態の仮想XMLデータベースシステムのネットワーク構成例を示すブロック図である。
【図3】図3は、HTTP上の通信手順を示す図である。
【図4】図4は、第1の実施形態の中央サーバの構成例を示すブロック図である。
【図5】図5は、第1の実施形態における検索処理の全体の流れを示すフローチャートである。
【図6】図6は、GETメッセージを構文解析して処理を振り分ける要求処理を説明するための図である。
【図7】図7は、仮想化プランナにより実行される分散XQuery処理の一例を示すフローチャートである。
【図8】図8は、DXQuery生成処理の一例を示すフローチャートである。
【図9】図9は、GXQuery生成処理の一例を示すフローチャートである。
【図10】図10は、XQuery処理の一例を示すフローチャートである。
【図11】図11は、取得処理の一例を示すフローチャートである。
【図12】図12は、マージ処理の一例を示すフローチャートである。
【図13】図13は、クライアントおよび複数のサーバの相互作用の様子を時系列で表現したシーケンス図である。
【図14】図14は、クライアントから入力されたXQueryの一例を示す図である。
【図15】図15は、図2のDBに記憶されるデータの一例を示す図である。
【図16】図16は、図14のXQueryから生成されるDXQueryの一例を示す図である。
【図17】図17は、図16のDXQueryの実行結果である結果XMLの一例を示す図である。
【図18】図18は、図14のXQueryから生成されるGXQueryの一例を示す図である。
【図19】図19は、図18のGXQueryの実行結果である結果XMLの一例を示す図である。
【図20】図20は、クライアントから入力されたXQueryの他の例を示す図である。
【図21】図21は、図20に対するDXQuery生成のイメージを示す図である。
【図22】図22は、DXQuery1の一例を示す図である。
【図23】図23は、図22のDXQuery1の実行結果である結果XMLの一例を示す図である。
【図24】図24は、DXQuery2の一例を示す図である。
【図25】図25は、図24のDXQuery2の実行結果である結果XMLの一例を示す図である。
【図26】図26は、図20のXQueryから生成されるGXQueryの一例を示す図である。
【図27】図27は、図26のGXQueryの実行結果である結果XMLの一例を示す図である。
【図28】図28は、第2の実施形態の中央サーバの構成例を示すブロック図である。
【図29】図29は、仮想化プランナおよび汎化プロセッサにより実行される分散XQuery処理の一例を示すフローチャートである。
【図30】図30は、汎化処理の一例を示すフローチャートである。
【図31】図31は、分散サーバ定義の一例を示す図である。
【図32】図32は、図14のXQueryと図31の分散サーバ定義が入力されたときに汎化処理で出力されるDXQuery’の一例を示す図である。
【図33】図33は、図14のXQueryと図31の分散サーバ定義が入力されたときに汎化処理で出力されるVXQueryの一例を示す図である。
【図34】図34は、第2の実施形態で処理されるXQuery、リソース、およびXMLの関係の一例を示す図である。
【図35】図35は、第1または第2の実施形態にかかる検索装置のハードウェア構成を示す説明図である。
【発明を実施するための形態】
【0008】
以下に添付図面を参照して、この発明にかかる検索装置の好適な実施形態を詳細に説明する。以下では、XQuery形式による検索要求によりXML(Extensible Markup Language)形式のデータを検索するシステムを例に説明するが適用可能なシステムはこれに限られるものではない。
【0009】
(第1の実施形態)
XMLでは、文書構造を構成する個々のパーツは「要素(エレメント:Element)」と呼ばれる。各要素はタグ(Tag)を使って記述される。具体的には、要素の始まりを示すタグ(開始タグ)と、要素の終わりを示すタグ(終了タグ)との2つのタグでテキストデータを挟み込んで、1つの要素が表現される。なお、開始タグと終了タグとで挟み込まれたテキストデータは、開始タグと終了タグとで表された1つの要素に含まれるテキスト要素(テキストノード)となる。
【0010】
XQueryは、XMLデータベース(XML−DBMS)への問合せのための関数型言語であり、FLWOR(for−let−where−order by−return)構文が特徴になっている。RDBでの問合せ言語であるSQLが宣言的な言語であるのに対して、XQueryは関数型言語としての特徴を多く持つ。以下に、XQueryの言語仕様を手続き的な観点から説明する。
【0011】
for節の構文は、「for 変数 in 式」である。for節の構文は、式を満足するものを変数に代入してループするという意味を持つ。let節の構文は、「let 変数 := 式」である。let節の構文は、式を満足するものを集約してシーケンスとして変数に代入するという意味を持つ。シーケンスとは、フラットなリストである。where節は、for節で繰り返されるループを制限するものである。where節の構文は、「where 式」である。where節の構文は、式を満足するものだけループをまわし、そうでないものはループをスキップするという意味を持つ。return節は、XQueryを処理した結果をフォーマット化するものである。return節の構文は、「return 式」である。return節の構文では、変数を含む任意のXMLデータを記述することができる。変数の構文は、「$文字列」である。入れ子問合せなどで2重宣言された場合を除き、同じ文字列を持つ変数は同一のものと見なされる。XMLデータの要素間の階層条件を指定するパス演算子として、XQueryでは以下のようなオペレータが存在する。
(1)「/」:要素間は親子関係であることを示すオペレータ
(2)「//」:要素間は先祖子孫関係であることを示すオペレータ
(3)「.」:任意の要素
【0012】
上述のように、XQuery処理を分散システムにより実現させる分散XQuery処理技術としてXRPCが知られている。
【0013】
図1は、XRPCを用いる場合の検索装置(中央サーバ100’)を含むデータベースシステムの構成の一例を示すブロック図である。図1に示すように、データベースシステムは、中央サーバ100’と、クライアント10’と、データベース(DB)21を備えたDBサーバ20’と、がネットワーク30を介して接続された構成となっている。
【0014】
クライアント10’は、XQuery形式で記述された問い合わせ41を中央サーバ100’に要求する。問い合わせ41は、「ActorAとActorBに関してx.example.orgサイトに存在するXQuery43の関数filmsByActorを呼び出せ」という意味である。XQuery43は、「XMLファイル42から変数$actorに合致するactorNameを持つfilmNameを取出せ」という意味である。
【0015】
このような問い合わせ41が受け付けられたときの処理の概要を以下に示す。
(1)「ActorA」について関数filmsByActorを呼び出す。XMLファイル42には、actorNameに「ActorA」を含むものが2件存在するため、この2件のfilmNameを返す。
(2)「ActorB」について関数filmsByActorを呼び出す。XMLファイル42、actorNameに「ActorB」を含むものが存在しないため空データを返す。
(3)得られたfilmNameを問い合わせ41に記述されたXML形式で表す。結果XML44が、このときに得られるXMLを表している。結果XML44は、films要素を、関数により返されたfilmName要素の上下に付加したものである。
【0016】
XRPCでは、以下のような課題が存在する。
(1)XQuery非透過:ユーザはXQuery内に特別な言語拡張であるXRPCを明示的に記述する必要がある。
(2)同種統合:DBサーバ20’の問い合わせ処理能力としてXQueryとXRPCをサポートしなければならない。その結果、異種データに対する真の仮想化はできないことになる。
(3)性能問題:RPC関数がXQueryのforループ内に存在すると、RPCのメッセージ(SOAPフォーマット)の送受信回数が増大する。また、RPC関数は1値を返却するのでタプルの返却には適していない。また、RPC関数として内部のXQueryが隠蔽化されるので、入れ子のXQueryを最適化するのが難しい。
【0017】
そこで、第1の実施形態にかかる検索装置としての中央サーバ100を含む仮想XMLデータベースシステムは、XRPCを用いずに分散XQuery処理を実現する。
【0018】
図2は、本実施形態の仮想XMLデータベースシステムのネットワーク構成例を示すブロック図である。仮想XMLデータベースシステムは、クライアント10と、中央サーバ100と、2台のDBサーバ20a、20bと、がネットワーク30を介して接続されている。
【0019】
DBサーバ20a、20bは、それぞれ例えばXML形式のデータを記憶するデータベース(DB)21a、21bを備えている。なお、DBサーバ20a、20bは同様の機能を備えるため、以下では単にDBサーバ20という場合がある。
【0020】
クライアント10は、XQuery形式で記述された問い合わせを中央サーバ100に要求する。ネットワーク30は、LAN(Local Area Network)、およびWAN(Wide Area Network)などの任意のネットワーク構成とすることができる。
【0021】
ネットワーク30上の通信プロトコルとしては様々なものが存在するが、以降、インターネットプロトコル技術を利用して相互接続されたコンピュータネットワークであるIPネットワークを使用した例を説明する。IP以外の通信プロトコルを用いても同様の手法を適用できる。
【0022】
図3は、HTTP(Hypertext Transfer Protocol)上の通信手順を示す図である。図3は、クライアント10と中央サーバ100との間のHTTP通信手順を示しているが、中央サーバ100とDBサーバ20との間も同様の通信手順で通信が行われる。図3の通信手順は、REST(Representational State Transfer)を拡張したものである。
【0023】
RESTとは、分散ハイパーメディアシステムのためのソフトウェアアーキテクチャのスタイルであり、ステートレスなクライアント/サーバプロトコルが特徴である。HTTPメッセージは、そのリクエスト(メッセージ)を理解するために必要な全ての情報を含んでいる。このため、クライアント10および中央サーバ100のいずれも、メッセージ間のセッションの状態を記憶しておく必要がない。また、使用頻度の高いいくつかのメソッドが定義されている。その中で重要なメソッドは、get、post、put、およびdeleteである。
【0024】
また、RESTでは、リソースを一意に識別するURI(Uniform Resource Identifier)で表されるユニークアドレスが利用される。URIはメソッドの引数になる。URIは、URL(Uniform Resource Locator)の考え方を拡張したものである。URIは、一定の書式によってリソースを指し示す識別子であり、1998年にRFC2396として規定され、2005年にRFC3986として改定された。
【0025】
例えば、「xxxx.ne.jp」上のリソース「index.html」のURIは、「http://www.xxxx.ne.jp/yyyy/public/index.html」のように表される。
【0026】
本実施形態では、メソッド「query」およびメソッド「gquery」を含むようにRESTを拡張する。これらは以下の(1)および(2)に示すように、それぞれXQuery処理および分散XQuery処理の実行を要求するためのメソッドである。
【0027】
以下に、本実施形態で用いるメソッドの一例を示す。なお、以下では、小文字の「uri」および「uri_*(*は任意の文字列)」は、URIの書式で表された識別子であることを意味する。また、「リソースuri」または「リソースuri_*」は、識別子「uri」または「uri_*」で識別されるリソースを意味する。
(1)queryメソッド
XQuery(図3の「xquery」)を指定し(ステップS101)、指定したXQueryによるXQuery処理の結果XMLが格納されるリソースuriを取得する(ステップS102)。
(2)gqueryメソッド
XQuery(図3の「xquery」)を指定し(ステップS101)、指定したXQueryによる分散XQuery処理の結果XMLが格納されるリソースuriを取得する(ステップS102)。
(3)getメソッド
uriを指定し(ステップS103)、指定したuriのリソースに格納される結果XMLを取得する(ステップS104)。
(4)putメソッド
uriとXMLとを指定し(ステップS105)、指定したuriのリソースにXMLを格納し、格納結果(図3の「status」)を取得する(ステップS106)。
【0028】
図4は、第1の実施形態の中央サーバ100の構成例を示すブロック図である。中央サーバ100は、要求受付部110(第1受付部、第2受付部)と、仮想化プランナ120と、XQueryプロセッサ102(実行部)と、リソース割当部103(割当部)と、サーバ通知検出部104(検出部)と、を備えている。
【0029】
要求受付部110は、クライアント10や他サーバ(DBサーバ20a、20b等)からの要求を受け付ける。例えば、要求受付部110は、queryやgqueryなどのXQuery処理要求、および、getやputなどのリソース処理要求を受け付けて、必要な処理を呼び出す。要求受付部110は、要求に対する応答を送信する送信部111(第2送信部、第3送信部)を備えている。
【0030】
図4の左側に図示するように、要求受付部110は、例えば、データの検索要求401をクライアント10から受け付ける。送信部111は、検索要求401を送信したクライアント10に対して、結果XMLが格納されるリソースのuri402を返信する。また、要求受付部110は、uriで指定されるリソースに格納される結果XMLの取得要求403をクライアント10から受け付ける。送信部111は、取得要求403を送信したクライアント10に対して、結果XML404を返信する。
【0031】
仮想化プランナ120は、分散XQuery処理でのプランニングを行う。仮想化プランナ120は、生成部121(第1生成部)と、送信部122(第1送信部)と、受信部123とを備えている。
【0032】
生成部121は、要求受付部110により分散XQuery処理の実行を要求する分散gqueryが受け付けられた場合に、受け付けられた検索要求(gquery)で指定されたXQueryから、DBサーバ20の集合に対してデータの検索を要求するDXQuery(分散検索要求)と、DXQueryによる検索結果を統合するGXQuery(統合要求)とを生成する。
【0033】
送信部122は、DXQueryによる検索要求を、DBサーバ20に対して送信する。受信部123は、DXQueryに対する検索結果をDBサーバ20から受信する。
【0034】
XQueryプロセッサ102は、XQueryを実行する。
【0035】
リソース割当部103は、uriをキーにしたリソースの管理を行う。XQueryでは、XMLデータが受け渡されるが、その受け渡しをコントロールするために、リソース割当部103が、各XMLデータに対してリソースuriを割り当てる。リソース割当部103は、リソースを格納する領域を確保する機能、確保した領域のURIを表すuriを返す機能、リソースuriに対してXMLデータを代入する機能、および、uriが示す領域に格納されたXMLデータを取得する機能などを備える。
【0036】
サーバ通知検出部104は、ブロードキャストなどを使って、サーバ間でサーバ情報(SInfo)の受け渡しを行い、ネットワーク30に接続されたサーバを検出する。仮想化プランナ120は、このようにして検出されたDBサーバ20に対してDXQueryを送信する。なお、サーバ通知検出部104を備えず、仮想化プランナ120が事前に指定されたDBサーバ20にアクセスするように構成してもよい。
【0037】
次に、このように構成された第1の実施形態にかかる中央サーバ100による検索処理について図5を用いて説明する。図5は、第1の実施形態における検索処理の全体の流れを示すフローチャートである。
【0038】
まず、中央サーバ100の起動によりメインスレッドが生成される(ステップS201)。以下のステップS202からステップS208は、メインスレッド内で実行される各処理を表している。
【0039】
メインスレッドでは、2つのサーバ通知検出スレッド(サーバ情報通知スレッドおよびサーバ情報検出スレッド)と、要求ごとに生成される要求処理スレッドとが生成される(ステップS202、ステップS204、ステップS207)。
【0040】
サーバ情報通知スレッドでは、サーバ通知検出部104が、DBサーバ20等のネットワーク30に接続された他の装置に対して、例えばブロードキャストにより、定期的に中央サーバ100のサーバ情報を送信する(ステップS203)。この処理は、サーバ情報通知スレッドが終了するまで繰り返される。
【0041】
サーバ情報検出スレッドでは、サーバ通知検出部104が、DBサーバ20等のネットワーク30に接続された他の装置からサーバ情報を受信して既存のサーバ情報を更新する(ステップS205)。この処理は、サーバ情報検出スレッドが終了するまで繰り返される。
【0042】
要求処理スレッドは、ソケットでのaccept処理完了後に生成される。accept処理では、接続待ちの要求(リクエスト)を受付けて接続を確立し、新しいソケットが作成される。
【0043】
要求受付部110は、作成されたソケットにより、XQuery処理要求(query、gquery)またはリソース処理要求(get、put)などの要求を受け付けたか否かを判断する(ステップS206)。受け付けられていない場合(ステップS206:No)、受け付けられるまで処理が繰り返される。
【0044】
要求が受け付けられた場合(ステップS206:Yes)、要求受付部110は、要求処理スレッドを生成する(ステップS207)。要求処理スレッドでは、受け付けられた要求を処理する要求処理が実行される(ステップS208)。
【0045】
要求処理では、受信したHTTPメッセージ、ここではGETメッセージが構文解析される。HTTPメッセージとは、クライアント10から中央サーバ100へのリクエスト(要求)として送られ、中央サーバ100からクライアント10へのレスポンス(応答)として返されるメッセージである。
【0046】
HTTPメッセージの構造は、複数行の「メッセージヘッダ」と「メッセージボディ」とから成り立っており、それぞれは空行(CR+LF)で区切られている。メッセージヘッダには、中央サーバ100やクライアント10が処理すべきリクエストやレスポンスの内容などが含まれている。メッセージボディには、転送されるべきデータそのものが含まれている。
【0047】
GETメソッドは、HTTP/0.9で定義された唯一のメソッドであり、HTTPでは最も使用される。HTTP/1.1に準拠したサーバは、GETメソッドをサポートする必要がある。
【0048】
図6は、GETメッセージを構文解析して処理を振り分ける要求処理を説明するための図である。
【0049】
要求受付部110は、メッセージからメソッドを取出し、取出したメソッドの種類(メッセージタイプ)により条件分岐する。
(1)gqueryメソッドの場合:
分散XQuery処理が要求されたので、仮想化プランナ120を呼び出す。
(2)queryメソッドの場合:
XQuery処理を要求されたので、XQueryプロセッサ102によりXQueryを実行する。
(3)postメソッドの場合:
リソース割当部103によりリソースを作成し、作成したリソースのuriを返す。
(4)getメソッドの場合:
uriで指定されたリソースのデータを取得する。
(5)putメソッド
uriで指定されたリソースへデータ代入する。
(6)mergeメソッド
データをマージし、指定されたリソースへデータ代入する。
【0050】
図7は、仮想化プランナ120により実行される分散XQuery処理の一例を示すフローチャートである。分散XQuery処理では、入力されたXQueryから、以下の2種類のXQueryが生成される。なお、DXQueryは、DBサーバ20ごとに複数生成される。GXQueryは、通常1個生成される。
(1)DXQuery:DBサーバ20に記憶されているXMLデータにアクセスするためのXQuery
(2)GXQuery:DXQueryが出力したXMLデータを統合するためのXQuery
【0051】
まず、仮想化プランナ120の生成部121が、入力されたXQueryを解析することにより複数のDXQueryを生成するDXQuery生成処理を実行する(ステップS301)。DXQuery生成処理の詳細は後述する。
【0052】
仮想化プランナ120は、生成されたDXQueryのうち1つを選択する(ステップS302)。仮想化プランナ120は、複数のDBサーバ20のうち1つを選択する(ステップS303)。仮想化プランナ120の送信部122は、選択したDBサーバ20に対して、選択したDXQueryの実行要求を送信する(ステップS304)。実行要求が送信されたDBサーバ20は、DXQueryの実行結果(結果XML)が格納されるリソースのURI(uri_d)を中央サーバ100に送信する。これにより仮想化プランナ120は、結果XMLが格納されるリソースのURIであるuri_dを取得する。
【0053】
次に、仮想化プランナ120は、すべてのDBサーバ20に対して実行要求を送信したか否かを判断する(ステップS305)。送信していない場合(ステップS305:No)、未処理のDBサーバ20の1つを選択して処理を繰り返す(ステップS303)。
【0054】
送信した場合(ステップS305:Yes)、仮想化プランナ120は、自サーバ(中央サーバ100)に対して、各DBサーバ20から得られる複数のリソースuri_dそれぞれに格納されるデータをマージするためのmergeメソッドを要求する(ステップS306)。中央サーバ100の要求受付部110は、mergeメソッドが要求されたメッセージを受信すると、まず、マージした結果(結果XML)が格納されるリソースのURI(uri_m)を仮想化プランナ120に返す。これにより、仮想化プランナ120は、結果XMLが格納されるリソースのURIであるuri_mを取得する。
【0055】
次に、仮想化プランナ120は、すべてのDXQueryを処理したか否かを判断する(ステップS307)。処理していない場合(ステップS307:No)、未処理のDXQueryを1つ選択して処理を繰り返す(ステップS302)。
【0056】
すべてのDXQueryを処理した場合(ステップS307:Yes)、仮想化プランナ120の生成部121は、入力されたXQueryを満たす結果XMLを出力するGXQueryを生成するGXQuery生成処理を実行する(ステップS308)。GXQuery生成処理の詳細については後述する。
【0057】
次に、仮想化プランナ120は、GXQueryのdoc()関数を、uri_mで書換える(ステップS309)。リソース割当部103は、GXQueryの実行結果を格納するリソースuri_gを確保する(ステップS310)。仮想化プランナ120は、GETレスポンスとしてuri_gをクライアントに返す(ステップS311)。
【0058】
XQueryプロセッサ102は、GXQueryを実行する(ステップS312)。XQueryプロセッサ102は、GXQueryの実行結果である結果XMLをリソースuri_gに代入する(ステップS313)。
【0059】
後述するように、クライアント10は、uri_gを指定したgetメソッドを中央サーバ100に送信する。このgetメソッドの実行要求を受け付けると、要求受付部110は、リソースuri_gに対する結果XMLの代入を待つための要求処理スレッドを生成する(図5のステップS207)。ステップS313で結果XMLがリソースuri_gに代入されると、この要求処理スレッドでは、結果XMLがGETレスポンスとしてクライアント10に返信される。
【0060】
次に、ステップS301のDXQuery生成処理の詳細について説明する。図8は、DXQuery生成処理の一例を示すフローチャートである。DXQuery生成処理では、XQueryXと同じようにXQueryをツリーと見なしてdoc()関数からノードトラバースする処理が中心となる。なお、XQueryXとは、XQuery式をXMLの構文で記述できる仕様である。
【0061】
トラバースのルールは以下のようなものである。
(1)doc()関数以下のパス式を辿る。
(2)同じdoc()関数以下のパス式同士の比較式を辿る。
【0062】
返り値のルールは以下のようなものである。
(1)返り値を以下の<rec>で囲まれた形式のXML(以下、RECフォーマットという)に変換して返す。
<rec><col?>...</col?></rec>
(2)<col?>は変数の値を区切るために用いる。
【0063】
まず、生成部121は、入力されたXQueryを正規化する(ステップS401)。正規化では、生成部121は、述語節をFLWOR構文に展開する処理、および、return節を変数とタグとからなるようにlet節で括り出す処理などを実行する。
【0064】
次に、生成部121は、入力されたXQueryに出現するdoc()関数をマーク(検出)する(ステップS402)。以下、出現するdoc()関数ごとにステップS403からステップS415の処理のループが繰り返される。すなわち、doc()関数ごとにDXQueryが生成される。基本的なアルゴリズムは、doc()関数からパスや定数を経由して辿れる範囲をマークしながら求めることである。
【0065】
生成部121は、マークした部分(doc()関数)がFLWOR構文のいずれの節に含まれるかを判断して処理を振り分ける。すなわち、生成部121は、マークした部分がfor節に含まれるか否かを判断する(ステップS403)。for節に含まれる場合(ステップS403:Yes)、生成部121は、マークされた変数、定数、関数、およびパスから構成される部分を新たにマークする(ステップS404)。すなわち、生成部121は、マークしたdoc()関数を起点としてパスを辿り、辿った部分を新たにマークする。生成部121は、マーク部分をDXQueryのfor節として出力する(ステップS405)。
【0066】
for節に含まれない場合(ステップS403:No)、生成部121は、マークした部分がlet節に含まれるか否かを判断する(ステップS406)。let節に含まれる場合(ステップS406:Yes)、生成部121は、マークされた変数、定数、関数、およびパスから構成される部分を新たにマークする(ステップS407)。すなわち、生成部121は、マークしたdoc()関数を起点としてパスを辿り、辿った部分を新たにマークする。生成部121は、マーク部分をDXQueryのlet節として出力する(ステップS408)。
【0067】
let節に含まれない場合(ステップS406:No)、生成部121は、マークした部分がorder by節に含まれるか否かを判断する(ステップS409)。order by節に含まれる場合(ステップS409:Yes)、ステップS415に遷移する。
【0068】
order by節に含まれない場合(ステップS409:No)、生成部121は、マークした部分がwhere節に含まれるか否かを判断する(ステップS410)。where節に含まれる場合(ステップS410:Yes)、生成部121は、マークされた変数、定数、関数、およびパスから構成される部分を新たにマークする(ステップS411)。生成部121は、マーク部分をDXQueryのwhere節として出力する(ステップS412)。
【0069】
where節に含まれない場合(ステップS410:No)、生成部121は、マークした部分がreturn節に含まれるか否かを判断する(ステップS413)。return節に含まれる場合(ステップS413:Yes)、生成部121は、「return <rec>{X}</rec>」の形式でDXQueryのreturn節を出力する(ステップS414)。Xの部分には、以下の(1)および(2)の形式の節を出力する。
(1):
<col0>
{$変数}
</col0>
(2):
for $ダミー変数 in $変数
return
<col1>
{$ダミー変数}
</col1>
【0070】
ステップS413でreturn節に含まれないと判断された場合(ステップS413:No)、ステップS415に遷移する。ステップS415では、生成部121は、マーク部分から辿れる節、すなわち、マーク部分に含まれる変数、定数、関数、パス等を含む他の節が存在するか否かを判断する(ステップS415)。存在する場合(ステップS415:Yes)、その節に対してステップS403以降の処理を繰り返す。存在しない場合(ステップS415:No)、ステップS416に遷移する。
【0071】
ステップS416では、生成部121は、入力されたXQueryに出現するすべてのdoc()関数を処理したか否かを判断する(ステップS416)。処理していない場合(ステップS416:No)、次に出現するdoc()関数をマークして処理を繰り返す(ステップS402)。処理した場合(ステップS416:Yes)、DXQuery生成処理を終了する。
【0072】
次に、ステップS308のGXQuery生成処理の詳細について説明する。図9は、GXQuery生成処理の一例を示すフローチャートである。GXQuery生成処理では、DXQuery生成処理でマークされたXQueryを使って処理する。GXQuery生成処理では、主にマークされた部分について、先に生成したDXQueryから該当するデータを取出すfor節またはlet節を計算し、その節で置換することである。
【0073】
まず、生成部121は、入力されたXQueryでマークされた部分(マーク部分)を取得する(ステップS501)。生成部121は、マークされた部分がfor節を含むか否かを判断する(ステップS502)。for節を含む場合(ステップS502:Yes)、生成部121は、マークされた部分を、DXQueryから該当するデータを取出すfor節に置換して出力する(ステップS503)。生成部121は、例えば以下の(1)に示す形式のfor節を出力する。
(1):
for $ダミー変数 in
doc([uri])/root/rec
for $変数 in
$ダミー変数/col/*
【0074】
for節を含まない場合(ステップS502:No)、生成部121は、マークされた部分がlet節を含むか否かを判断する(ステップS504)。let節を含む場合(ステップS504:Yes)、生成部121は、マークされた部分を、DXQueryから該当するデータを取出すlet節に置換して出力する(ステップS505)。生成部121は、例えば以下の(2)に示す形式のlet節を出力する。
(2):
let $変数 :=
for $ダミー変数1 in
doc([uri])/root/rec
for $ダミー変数2 in
$ダミー変数1/col/*
return $ダミー変数2
【0075】
let節を含まない場合(ステップS504:No)、生成部121は、マークされた部分がorder by節を含むか否かを判断する(ステップS506)。order by節を含む場合(ステップS506:Yes)、生成部121は、order by節をそのまま出力する(ステップS507)。
【0076】
order by節を含まない場合(ステップS506:No)、生成部121は、マークされた部分がwhere節を含むか否かを判断する(ステップS508)。where節を含む場合(ステップS508:Yes)、生成部121は、マークされた部分を、DXQueryから該当するデータを取出すlet節に置換して出力する(ステップS509)。生成部121は、例えば以下の(3)に示す形式のlet節を出力する。
(3):
let $ダミー変数:=in
$変数/col/*
where ダミー変数 比較式
【0077】
where節を含まない場合(ステップS508:No)、生成部121は、マークされた部分がreturn節を含むか否かを判断する(ステップS510)。return節を含む場合(ステップS510:Yes)、生成部121は、return節をそのまま出力する(ステップS511)。
【0078】
ステップS503、ステップS505、ステップS507、ステップS509、およびステップS511の実行後、または、ステップS510でreturn節を含まないと判断された場合(ステップS510:No)、生成部121は、すべてのマーク部分を処理したか否かを判断する(ステップS512)。処理していない場合(ステップS512:No)、未処理のマーク部分を取得して処理を繰り返す(ステップS501)。処理した場合(ステップS512:Yes)、GXQuery生成処理を終了する。
【0079】
次に、仮想化プランナ120のDXQueryの実行要求に応じてDBサーバ20が実行するXQuery処理について説明する。なお、クライアント10から分散XQuery処理(gquery)ではなく、XQuery処理(query)を要求された場合にXQueryプロセッサ102により実行されるXQuery処理も同様の手順で実行される。図10は、XQuery処理の一例を示すフローチャートである。
【0080】
DBサーバ20は、要求されたDXQueryに対するリソースuri_dを確保する(ステップS601)。DBサーバ20は、GETレスポンスとしてuri_dを中央サーバ100に返す(ステップS602)。DBサーバ20は、DXQueryをXQueryプロセッサで実行する(ステップS603)。DBサーバ20は、DXQueryの実行結果である結果XMLをリソースuri_dに代入する(ステップS604)。XQueryプロセッサ102がXQuery処理を実行する場合は、リソースuri_dに対する結果XMLの代入を待つための要求処理スレッドが生成される。
【0081】
次に、getメソッドによりリソースのデータを取得する取得処理について説明する。図11は、取得処理の一例を示すフローチャートである。
【0082】
要求受付部110は、getメソッドで指定されたリソースuriに対するデータを取得する(ステップS701)。取得できない場合は、データの代入を待つための要求処理スレッドを生成し、代入のイベント待ち状態に入る。データがリソースuriに代入されると、要求受付部110は、データをGETレスポンスとしてgetメソッドの要求元に返信する(ステップS702)。
【0083】
次に、mergeメソッドによりリソースのデータをマージするマージ処理について説明する。図12は、マージ処理の一例を示すフローチャートである。
【0084】
要求受付部110は、マージ処理の結果を格納するリソースuri_mを確保する(ステップS801)。要求受付部110は、確保したリソースのURIであるuri_mをGETレスポンスとして要求元に返信する(ステップS802)。要求受付部110は、mergeメソッドでマージが要求されたリソース集合に含まれる各リソースのマージ処理を行う(ステップS803)。
【0085】
なお、図12の「U uri_d」は、マージが要求されたリソースuri_dの集合を意味する。また、マージとは、各リソースのデータを直列に連結することを意味する。
【0086】
要求受付部110は、マージの結果得られたXMLデータである結果XMLを、uri_mに代入する(ステップS804)。なお、他のスレッド等によるuri_mに対する結果XMLの代入待ちの場合は、結果XMLの代入を待つための要求処理スレッドが生成される。
【0087】
図13は、クライアント10および複数のサーバ(中央サーバ100、DBサーバ20a、DBサーバ20b)の相互作用の様子を時系列で表現したシーケンス図である。図13では、左から右に時間が進むと仮定する。
【0088】
まず、クライアント10が、中央サーバ100に対してgqueryメソッドで分散XQuery処理を要求する(ステップS901)。
【0089】
中央サーバ100は、DBサーバ20aに対してqueryメソッドでXQuery処理を要求する(ステップS902)。このときのqueryメソッドは、生成部121により生成したDXQueryを引数に持つ。中央サーバ100は、queryメソッドの結果XMLのリソースのURIを示すuri_d1をDBサーバ20aから取得する(ステップS903)。
【0090】
中央サーバ100は、DBサーバ20bに対してqueryメソッドでXQuery処理を要求する(ステップS904)。このときのqueryメソッドは、生成部121により生成したDXQueryを引数に持つ。中央サーバ100は、queryメソッドの結果XMLのリソースのURIを示すuri_d2をDBサーバ20bから取得する(ステップS905)。
【0091】
中央サーバ100は、自サーバ(中央サーバ100)に対してリソースuri_d1とリソースuri_d2とのマージをmergeメソッドで要求する(ステップS906)。中央サーバ100は、自サーバ(中央サーバ100)から、mergeメソッドの結果XMLのリソースのURIを示すuri_mを取得する(ステップS907)。
【0092】
中央サーバ100は、DBサーバ20aに対してuri_d1の結果XMLの取得をgetメソッドで要求する(ステップS908)。中央サーバ100は、DBサーバ20bに対してuri_d2の結果XMLの取得をgetメソッドで要求する(ステップS909)。
【0093】
中央サーバ100は、gqueryメソッドに対するGETレスポンスとしてuri_gをクライアント10に返す(ステップS910)。
【0094】
クライアント10は、中央サーバ100に対して、uri_gの結果XMLの取得をgetメソッドで要求する(ステップS911)。
【0095】
中央サーバ100は、自サーバ(中央サーバ100)に対して、ステップS907で取得したuri_mの結果XMLの取得をgetメソッドで要求する(ステップS912)。
【0096】
一方、中央サーバ100からDBサーバ20aに要求していたqueryメソッドの実行結果を表す結果XMLが生成された場合、DBサーバ20aは、リソースuri_d1に結果XMLであるxml_d1を代入する(ステップS913)。
【0097】
同様に、中央サーバ100からDBサーバ20bに要求していたqueryメソッドの実行結果を表す結果XMLが生成された場合、DBサーバ20bは、リソースuri_d2に結果XMLであるxml_d2を代入する(ステップS914)。
【0098】
自サーバ(中央サーバ100)に対して、mergeメソッドで要求したuri_d1とuri_d2とのマージ結果である結果XMLが生成された場合は、中央サーバ100は、リソースuri_mに結果XMLであるxml_mを代入する(ステップS915)。
【0099】
クライアント10から中央サーバ100に対してgetメソッドで要求されていたuri_gの結果XMLが生成された場合、中央サーバ100は、uri_gに結果XMLを代入する(ステップS916)。
【0100】
なお、図13に示すように、DBサーバ20は、要求されたqueryメソッドに対して、実行結果が得られる前に実行結果を格納するリソースを通知するレスポンスを返信する(ステップS903、ステップS905等)。すなわち、DBサーバ20は、queryメソッドに対して、XQuery処理の実行結果が得られてから実行結果を通知するレスポンスを返信するのではなく、実行結果が得られる前に実行結果を格納するリソースを通知するレスポンスを返信する機能を備える必要がある。DBサーバ20がこの機能を備えない場合は、中央サーバ100内に、この機能を代替する機能を備えるように構成してもよい。
【0101】
図13の右側には、上記シーケンスで処理されるXQuery、リソース、およびXMLの関係が示されている。すなわち、DBサーバ20aおよび20bでそれぞれDXQueryが実行され、実行結果がリソースuri_d1およびリソースuri_d2に格納される。そして、リソースuri_d1およびリソースuri_d2がマージされたリソースuri_mを埋め込んだGXQueryの実行結果を格納するリソースuri_gがクライアント10に送信される。GXQueryの実行結果である結果XMLが得られると、その結果XMLがクライアント10に送信される。
【0102】
次に、検索処理の具体例について説明する。図14は、クライアントから入力されたXQueryの一例を示す図である。図14のXQueryは、「column3に“神奈川”を含むrowを全て取出せ」という意味である。
【0103】
図15は、図2のDB21aに記憶されるデータの一例を示す図である。図15に示すように、DB21aは、事業所名(column1)、住所(column2)、都道府県(column3)を記憶する事業所のデータベースの例を示している。図15では、4つのrow(事業所)のデータが例示されている。
【0104】
図16は、図14のXQueryから生成されるDXQueryの一例を示す図である。基本構造は図14と同様である。図16のDXQueryは、「column3に“神奈川”を含むrowをRECフォーマットで全て取出せ」という意味を表している。
【0105】
図17は、図16のDXQueryの実行結果である結果XMLの一例を示す図である。図17は、図15に示すDB21aからDXQueryにより検索された結果XML(xml_d1)の例を示している。
【0106】
図18は、図14のXQueryから生成されるGXQueryの一例を示す図である。図18のGXQueryは、以下の2つの部分から構成されている。
(1)DXQueryの結果XMLを読み込んで各recを取出す部分
(2)recのcol?の値を取出す部分
【0107】
図16および図18に示すように、GXQuery+DXQuery=入力されたXQueryとなっている。
【0108】
ここで、図14のXQueryから図16のDXQueryおよび図18のGXQueryを生成する処理についてさらに説明する。
【0109】
まず、図14のXQueryからdoc()関数「doc(“database.XML”)が取出される(図8のステップS402)。
【0110】
for節については、doc()関数から「//row」を辿り、この節の本体がマークされたので「$x」までマークされる。
【0111】
where節については、「$x」が既にマークされている。「$x//column3」もマークされる。“神奈川”は定数である。そこでwhere節の全部がマークされる。その結果、図16に示すような1個のDXQueryが生成される。
【0112】
次に、GXQueryを生成する。DXQueryでfor節とwhere節とがマークされているので、DXQueryから該当するデータを取出すfor節は図18に示すようになる。
【0113】
図19は、図18のGXQueryの実行結果である結果XMLの一例を示す図である。図19に示すように、GXQueryの実行結果である結果XMLは、リソースxml_gに格納される。
【0114】
次に、図14より複雑なXQueryを例にさらに説明する。図20は、クライアントから入力されたXQueryの他の例を示す図である。図20のXQueryは、「rowのcolumn3ごとにrowを集計せよ」という意味である。例えば図15のようなデータに対しては、「都道府県別に事業所を集計せよ」を意味する。
【0115】
ここで、いくつかの組み込み関数について説明する。
(1)distinct−values:入力されたシーケンスから値として異なる要素シーケンスを取出す。
(2)count:入力されたシーケンスの要素数を返す。
【0116】
図21は、図20に対するDXQuery生成のイメージを示す図である。
(1)doc()関数以下のパス式を辿る。
(2)同じdoc()関数以下のパス式同士の比較式を辿る。
というトラバースのルールにより、2つのDXQuery(DXQuery1、DXQuery2)が生成されることになる。
【0117】
図22は、DXQuery1の一例を示す図である。図23は、図22のDXQuery1の実行結果である結果XMLの一例を示す図である。図24は、DXQuery2の一例を示す図である。図25は、図24のDXQuery2の実行結果である結果XMLの一例を示す図である。図26は、図20のXQueryから生成されるGXQueryの一例を示す図である。
【0118】
図22、図24および図26に示すように、GXQuery+DXQuery(DXQuery1、DXQuery2)=入力されたXQueryとなっている。図27は、図26のGXQueryの実行結果である結果XMLの一例を示す図である。図27に示すように、「都道府県別に事業所を集計」した結果が結果XMLとして得られている。
【0119】
このように、第1の実施形態にかかる検索装置では、XRPCを用いずに分散XQuery処理を実現することができる。したがって、以下のような効果が得られる。
(1)XQuery透過:ユーザはXQuery内に特別な言語拡張を明示的に記述する必要がない。
(2)異種統合:通常のネットワークや通信プロトコル上で、RDBMSやWebサービスなど異種データベースも接続して仮想XMLデータベースを構成できる。わずかな定義で地図情報サービスや天気情報サービスなどXQueryをサポートしていない非XML−DBMSのWebサービスも仮想XMLデータベースの構成要素になりえる。
(3)高速性:XQueryにforループが含まれていても、そのループ回数だけネットワーク上をメッセージが流れることはない。RPCのように関数実行が逐次化されず複数サーバで並列処理できる。通常の分散データベースで結合演算を行うとき通信負荷を最も小さくする手法としてセミジョイン法が容易に適用できる。
【0120】
(第2の実施形態)
第2の実施形態にかかる検索装置は、DBサーバの検索能力(問い合わせ処理能力)を満たすようにDXQueryを変換(汎化)し、変換したDXQueryによる検索結果から、変換前のDXQueryによる検索結果を生成する。これにより、DBサーバの問い合わせ処理能力に応じた高精度な検索を実現できる。
【0121】
図28は、第2の実施形態の中央サーバ200の構成例を示すブロック図である。中央サーバ200は、要求受付部110と、仮想化プランナ220と、XQueryプロセッサ102と、リソース割当部103と、サーバ通知検出部104と、汎化プロセッサ230と、を備えている。
【0122】
第2の実施形態では、仮想化プランナ220の機能、および、汎化プロセッサ230を追加したことが第1の実施形態と異なっている。その他の構成および機能は、第1の実施形態にかかる中央サーバ100のブロック図である図4と同様であるので、同一符号を付し、ここでの説明は省略する。
【0123】
仮想化プランナ220は、生成したDXQueryの汎化を汎化プロセッサ230に要求し、汎化されたDXQuery(以下、DXQuery’という)を送信部222によりDBサーバ20に送信する点が、第1の実施形態の仮想化プランナ120と異なっている。
【0124】
汎化プロセッサ230は、変換部231と、生成部232(第2生成部)とを備えている。変換部231は、仮想化プランナ220の生成部121が生成したDXQueryを、DBサーバ20の問い合わせ処理能力に合わせて汎化したDXQuery’に変換する。生成部232は、DXQuery’による検索結果を検証するXQueryであるVXQuery(生成要求)を生成する。VXQueryは、DXQuery’による検索結果で発生した、DBサーバ20の問い合わせ処理能力の不足部分を検証し、不足部分を補って変換前のDXQueryを用いた場合の検索結果となるような検索結果を生成するXQueryである。
【0125】
図29は、仮想化プランナ220および汎化プロセッサ230により実行される分散XQuery処理の一例を示すフローチャートである。本実施形態の分散XQuery処理では、DXQueryを汎化したDXQuery’、VXQuery、および、VXQueryの結果を統合するGXQueryが生成される。
【0126】
ステップS1001からステップS1003までは、第1の実施形態にかかる中央サーバ100におけるステップS301からステップS303までと同様の処理なので、その説明を省略する。
【0127】
ステップS1004では、DXQueryからDXQuery’およびVXQueryを生成する汎化処理が実行される。汎化処理の詳細については後述する。
【0128】
次に、仮想化プランナ220の送信部222は、選択したDBサーバ20に対して、汎化されたDXQuery’の実行要求を送信する(ステップS1005)。実行要求が送信されたDBサーバ20は、DXQuery’の実行結果(結果XML)が格納されるリソースのURI(uri_d)を中央サーバ200に送信する。これにより仮想化プランナ220は、結果XMLが格納されるリソースのURIであるuri_dを取得する。
【0129】
次に、仮想化プランナ220は、VXQueryのdoc()関数を取得したuri_dで書換える(ステップS1006)。仮想化プランナ220は、自サーバ(中央サーバ200)に対して、queryメソッドを指定して、VXQueryの実行を要求し(ステップS1007)、VXQueryの結果XMLが格納されるuri_vを取得する。
【0130】
ステップS1008は図7のステップS305と同様であるため説明を省略する。ステップS1009は、リソースuri_dの代わりにリソースuri_vを用いる点が図7のステップS306と異なる。すなわち、仮想化プランナ220は、自サーバ(中央サーバ200)に対して、複数のリソースuri_vそれぞれに格納されるデータをマージするためのmergeメソッドを要求する(ステップS1009)。
【0131】
ステップS1010からステップS1016までは、第1の実施形態にかかる中央サーバ100におけるステップS307からステップS313までと同様の処理なので、その説明を省略する。
【0132】
次に、ステップS1004の汎化処理について説明する。図30は、汎化処理の一例を示すフローチャートである。
【0133】
まず、汎化プロセッサ230は、各DBサーバ20から分散サーバ定義を取得する(ステップS1101)。分散サーバ定義とは、DBサーバの問い合わせ処理能力を表す情報である。図31は、分散サーバ定義の一例を示す図である。「SERVICE http://example.com/?key=%1」は、「key」へのパラメータを処理できることを意味する。「XQuery for $x in 〜」は、「key」へのパラメータは「contains($x,“%1”)に置き換えられることを意味する。
【0134】
図30に戻り、汎化プロセッサ230は、選択されたDXQueryと分散サーバ定義のXQueryパターンとを照合する(ステップS1102)。照合できない場合(ステップS1103:No)、変換部231がDXQueryを汎化し(ステップS1104)、ステップS1102に戻って処理を繰り返す。
【0135】
DXQueryの汎化では、変換部231は、例えば(1)パスの省略、(2)OR条件の展開、(3)タグ名を「*」に変換(XMLデータに含まれる要素の名称の変換)などの処理を行う。
【0136】
DXQueryと分散サーバ定義のXQueryパターンとが照合された場合(ステップS1103:Yes)、変換部231は、汎化されたDXQuery(汎化していない場合は選択されたDXQuery)をDXQuery’として出力する(ステップS1105)。次に、生成部232が、元のDXQueryからVXQueryを生成し(ステップS1106)、汎化処理を終了する。
【0137】
図32は、図14のXQueryと図31の分散サーバ定義が入力されたときに汎化処理で出力されるDXQuery’の一例を示す図である。図16のDXQueryと比較すると、図32のDXQuery’は、「row」というタグ名、および、「$x//column3」といったパスが省略されている。このように、DXQueryに対して汎化操作を繰り返すことで、DBサーバ20の問い合わせ処理能力に照合したDXQuery’が生成されている。
【0138】
図33は、図14のXQueryと図31の分散サーバ定義が入力されたときに汎化処理で出力されるVXQueryの一例を示す図である。
【0139】
図34は、第2の実施形態で処理されるXQuery、リソース、およびXMLの関係の一例を示す図である。図34では、DBサーバ20bに送信するDXQueryに対してのみ汎化処理が実行された例が示されている。DBサーバ20aおよび20bでそれぞれDXQueryおよびDXQuery’が実行され、実行結果がリソースuri_d1およびリソースuri_d2に格納される。リソースuri_d2に対してはVXQueryが実行され、実行結果であるuri_v2が出力される。リソースuri_d1およびリソースuri_v2がマージされたリソースuri_mを埋め込んだGXQueryの実行結果を格納するリソースuri_gがクライアント10に送信される。GXQueryの実行結果である結果XMLが得られると、その結果XMLがクライアント10に送信される。
【0140】
ここで、図14のXQueryと図31の分散サーバ定義から図32のDXQuery’が生成する過程についてさらに説明する。
【0141】
図31の分散サーバ定義には、「このDBサーバはデータ取得するのにキーワード(key)を使った検索(contains)しかできない」というDBサーバ20の問い合わせ処理能力に関する宣言が記述されている。
【0142】
汎化プロセッサ230は、図14のXQueryと図31の分散サーバ定義とを比較して構文上の違いを列挙する(図30のステップS1102)。汎化プロセッサ230は、例えば、Yacc&Lexなどの字句解析と構文解析のツールを組み合わせてメモリ上にXQueryの構文木を展開し、2つのメモリ上の構文木同士を比較する。
【0143】
その結果、汎化プロセッサ230は、「doc()//row」と「doc()/*」、および、「$x//column3」と「$x」の部分が相違することを検出できる。この2つの相違は、XQueryのパスに関するものである。そこで、変換部231は、「パスの省略」という汎化操作を適用する。汎化操作は、例えばルールベースシステム技術を使うことで実現可能である。すなわち、「IF パス上の相違が存在すれば THEN パスを省略する」といったIF節とTHEN節の2つの部分から構成されるルールで汎化操作を表現し、推論エンジンを使ってそのようなルール集合を停止条件まで繰り返し適用することで実現できる。この場合の停止条件とは、DXQueryと分散サーバ定義との違いが無くなることである。
【0144】
例えば、図14のXQueryについては、(1)「doc()//row」から「doc()/*」へのパスの省略、(2)「$x//column3」から「$x」へのパスの省略、の2つの汎化操作を行えば停止条件を満たす。
【0145】
その後、return節を「return <rec>{...}</rec>」の形式で出力することで図32のDXQueryが生成される。
【0146】
次に、図14のXQueryと図31の分散サーバ定義から図33のVXQueryが生成する過程についてさらに説明する。
【0147】
上記汎化操作で汎化された相違部分である「doc()//row」と「doc()/*」、および、「$x//column3」と「$x」をチェックするような特別なXQueryをVXQueryとして生成する。
【0148】
生成部232は、例えば、相違部分を含む節である「for $x in doc()//row」と「where contains($x//column3,“神奈川”)」とを、以下の(A)に示すようなベースとなるXQueryに埋め込むことによりVXQueryを生成する。このとき、必要に応じて埋め込む相違部分内の変数を、ベースとなるXQuery内の変数で書き換える。ベースとなるXQueryは事前に設定することができる。
(A):
for $_0 in doc([uri_d1])/rec
for $_1 in $_0/col0/*
return
<rec>
{<col0>{$x}</col0>}
</rec>
【0149】
埋め込んだVXQueryは以下の(B)のようになる。
(B):
for $_0 in doc([uri_d1])/rec
for $_1 in $_0/col0/*
for $x in $_1//row
where contains($x//column3,“神奈川”)
return
<rec>
{<col0>{$x}</col0>}
</rec>
【0150】
上記VXQueryでは、3行目および4行目が埋め込まれている。また、3行目の「$x」は「$_1」に置き換えられる。
【0151】
以上説明したとおり、第1から第2の実施形態によれば、XRPCを用いずにXQuery透過な分散XQuery処理を実現することができる。
【0152】
次に、第1または第2の実施形態にかかる検索装置(中央サーバ)のハードウェア構成について図35を用いて説明する。図35は、第1または第2の実施形態にかかる検索装置のハードウェア構成を示す説明図である。
【0153】
第1または第2の実施形態にかかる検索装置は、CPU(Central Processing Unit)51などの制御装置と、ROM(Read Only Memory)52やRAM(Random Access Memory)53などの記憶装置と、ネットワークに接続して通信を行う通信I/F54と、HDD(Hard Disk Drive)、CD(Compact Disc)ドライブ装置などの外部記憶装置と、ディスプレイ装置などの表示装置と、キーボードやマウスなどの入力装置と、各部を接続するバス61を備えており、通常のコンピュータを利用したハードウェア構成となっている。
【0154】
第1または第2の実施形態にかかる検索装置で実行される検索プログラムは、インストール可能な形式又は実行可能な形式のファイルでCD−ROM(Compact Disk Read Only Memory)、フレキシブルディスク(FD)、CD−R(Compact Disk Recordable)、DVD(Digital Versatile Disk)等のコンピュータで読み取り可能な記録媒体に記録されてコンピュータプログラムプロダクトとして提供される。
【0155】
また、第1または第2の実施形態にかかる検索装置で実行される検索プログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成してもよい。また、第1または第2の実施形態にかかる検索装置で実行される検索プログラムをインターネット等のネットワーク経由で提供または配布するように構成してもよい。
【0156】
また、第1または第2の実施形態の検索プログラムを、ROM等に予め組み込んで提供するように構成してもよい。
【0157】
第1または第2の実施形態にかかる検索装置で実行される検索プログラムは、上述した各部(要求受付部、仮想化プランナ、XQueryプロセッサ、リソース割当部、サーバ通知検出部)を含むモジュール構成となっており、実際のハードウェアとしてはCPU51(プロセッサ)が上記記憶媒体から検索プログラムを読み出して実行することにより上記各部が主記憶装置上にロードされ、上述した各部が主記憶装置上に生成されるようになっている。
【0158】
なお、本実施形態は、上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化することができる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成することができる。例えば、実施形態に示される全構成要素からいくつかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせても良い。
【符号の説明】
【0159】
10 クライアント
20a、20b DBサーバ
30 ネットワーク
100、200 中央サーバ
102 XQueryプロセッサ
103 リソース割当部
104 サーバ通知検出部
110 要求受付部
111 送信部
120、220 仮想化プランナ
121 生成部
122、222 送信部
123 受信部
230 汎化プロセッサ
231 変換部
232 生成部

【特許請求の範囲】
【請求項1】
クライアントと、データを記憶する複数のサーバと、にネットワークを介して接続された検索装置であって、
前記データのXQuery形式の検索要求を前記クライアントから受け付ける第1受付部と、
前記検索要求から、複数の前記サーバそれぞれに対して前記データの検索を要求するXQuery形式の分散検索要求と、前記分散検索要求による検索結果を統合するXQuery形式の統合要求とを生成する第1生成部と、
前記分散検索要求を複数の前記サーバに送信する第1送信部と、
前記統合要求の実行結果の識別情報を前記クライアントに送信する第2送信部と、
前記識別情報で識別される実行結果の取得要求を前記クライアントから受け付ける第2受付部と、
前記分散検索要求に対するXML形式の検索結果を複数の前記サーバから受信する受信部と、
複数の前記サーバそれぞれから受信した前記検索結果に対して前記統合要求を実行する実行部と、
前記統合要求の実行結果を、前記取得要求を送信した前記クライアントに対して送信する第3送信部と、
を備えることを特徴とする検索装置。
【請求項2】
前記統合要求の実行結果を格納する領域を確保し、前記領域の識別情報を前記実行結果に割り当てる割当部をさらに備え、
前記第2送信部は、割り当てられた前記識別情報を前記クライアントに送信し、
前記実行部は、前記統合要求の実行結果を前記領域に格納し、
前記第3送信部は、前記領域に格納された前記実行結果を、前記取得要求を送信した前記クライアントに対して送信すること、
を特徴とする請求項1に記載の検索装置。
【請求項3】
前記分散検索要求を、前記サーバの検索能力を満たすXQuery形式の検索要求に変換する変換部と、
変換された検索要求による検索結果から、前記分散検索要求による検索結果を生成するXQuery形式の生成要求を生成する第2生成部と、をさらに備え、
前記第1送信部は、変換された検索要求を前記サーバに送信し、
前記受信部は、変換された検索要求に対する検索結果を前記サーバから受信し、
前記実行部は、さらに、受信した検索結果に対して前記生成要求を実行し、前記生成要求の実行結果に対して前記統合要求を実行すること、
を特徴とする請求項1に記載の検索装置。
【請求項4】
前記変換部は、前記分散検索要求に含まれるパスの省略、OR条件の展開、および、前記データに含まれる要素の名称の変換の少なくとも1つにより、前記分散検索要求を前記サーバの検索能力を満たす検索要求に変換すること、
を特徴とする請求項3に記載の検索装置。
【請求項5】
前記ネットワークに接続された前記サーバを検出する検出部をさらに備え、
前記第1送信部は、前記分散検索要求を検出された前記サーバに送信すること、
を特徴とする請求項1に記載の検索装置。
【請求項6】
クライアントと、データを記憶する複数のサーバと、にネットワークを介して接続された検索装置で実行される検索方法あって、
前記データのXQuery形式の検索要求を前記クライアントから受け付ける第1受付ステップと、
前記検索要求から、複数の前記サーバそれぞれに対して前記データの検索を要求するXQuery形式の分散検索要求と、前記分散検索要求による検索結果を統合するXQuery形式の統合要求とを生成する第1生成ステップと、
前記分散検索要求を複数の前記サーバに送信する第1送信ステップと、
前記統合要求の実行結果の識別情報を前記クライアントに送信する第2送信ステップと、
前記識別情報で識別される実行結果の取得要求を前記クライアントから受け付ける第2受付ステップと、
前記分散検索要求に対するXML形式の検索結果を複数の前記サーバから受信する受信ステップと、
複数の前記サーバそれぞれから受信した前記検索結果に対して前記統合要求を実行する実行ステップと、
前記統合要求の実行結果を、前記取得要求を送信した前記クライアントに対して送信する第3送信ステップと、
を含むことを特徴とする検索方法。
【請求項7】
クライアントと、データを記憶する複数のサーバと、にネットワークを介して接続されたコンピュータを、
前記データのXQuery形式の検索要求を前記クライアントから受け付ける第1受付部と、
前記検索要求から、複数の前記サーバそれぞれに対して前記データの検索を要求するXQuery形式の分散検索要求と、前記分散検索要求による検索結果を統合するXQuery形式の統合要求とを生成する第1生成部と、
前記分散検索要求を複数の前記サーバに送信する第1送信部と、
前記統合要求の実行結果の識別情報を前記クライアントに送信する第2送信部と、
前記識別情報で識別される実行結果の取得要求を前記クライアントから受け付ける第2受付部と、
前記分散検索要求に対するXML形式の検索結果を複数の前記サーバから受信する受信部と、
複数の前記サーバそれぞれから受信した前記検索結果に対して前記統合要求を実行する実行部と、
前記統合要求の実行結果を、前記取得要求を送信した前記クライアントに対して送信する第3送信部、
として機能させるための検索プログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate

【図20】
image rotate

【図21】
image rotate

【図22】
image rotate

【図23】
image rotate

【図24】
image rotate

【図25】
image rotate

【図26】
image rotate

【図27】
image rotate

【図28】
image rotate

【図29】
image rotate

【図30】
image rotate

【図31】
image rotate

【図32】
image rotate

【図33】
image rotate

【図34】
image rotate

【図35】
image rotate


【公開番号】特開2012−93829(P2012−93829A)
【公開日】平成24年5月17日(2012.5.17)
【国際特許分類】
【出願番号】特願2010−238531(P2010−238531)
【出願日】平成22年10月25日(2010.10.25)
【出願人】(000003078)株式会社東芝 (54,554)
【出願人】(301063496)東芝ソリューション株式会社 (1,478)
【Fターム(参考)】