(57)【要約】【課題】限られたメモリ領域を有効に使いながらトラバース要求に従うトラバース処理によるノード情報取得を高速化できるようにする。【解決手段】ノード情報先読み部１５は、クライアント端末２０から送られたノード検索要求に従う検索処理で特定されたノードのノード情報を含む検索結果が当該クライアント端末２０に返される際に次の動作を開始する。ノード情報先読み部１５は、前記検索処理で特定されたノードを基点ノードとして用いて、当該基点ノードを含むＸＭＬデータベース（ＸＭＬＤＢ）１１内の構造化文書の階層構造上で当該基点ノードに対して予め定められた範囲内のノードの値に関するノード情報を近隣ノードのノード情報として、ＸＭＬＤＢ１１からメモリ１６に先読みする。【選択図】      図１
2011076420.tif 000002
【特許請求の範囲】
【請求項１】
複数のノードを含む構造化文書を格納する構造化文書データベースと、
前記構造化文書データベースに格納されている構造化文書に含まれるノードの値に関するノード情報を記憶するのに用いられるメモリと、
クライアント端末から送られたノード検索要求に従う検索処理で特定されたノードのノード情報を含む検索結果が前記クライアント端末に返される際に動作を開始し、前記検索処理で特定されたノードを基点ノードとして用いて、当該基点ノードを含む前記構造化文書データベース内の構造化文書の階層構造上で当該基点ノードに対して予め定められた範囲内のノードの値に関するノード情報を近隣ノードのノード情報として、前記構造化文書データベースから前記メモリに先読みするノード情報先読み手段と
を具備することを特徴とする構造化文書検索システム。
【請求項２】
前記クライアント端末から送られた、基点ノードと当該基点ノードからの移動先とを指定するトラバース要求に従い、当該トラバース要求で指定された基点ノードを含む前記構造化文書データベース内の構造化文書の階層構造上で、当該指定された基点ノードからの当該トラバース要求で指定された移動先となるノードを特定し、当該特定された移動先のノードのノード情報を前記メモリから取得するトラバース処理手段を更に具備し、
前記先読み手段は、前記トラバース処理手段による処理の結果が前記クライアント端末に返される際にも動作を開始し、前記トラバース処理手段による処理で特定された移動先のノードを基点ノードとして用いて、当該基点ノードを含む前記構造化文書データベース内の構造化文書の階層構造上で当該基点ノードに対して予め定められた範囲内のノードのノード情報を近隣ノードのノード情報として、前記構造化文書データベースから前記メモリに先読みする
ことを特徴とする請求項１記載の構造化文書検索システム。
【請求項３】
前記構造化文書データベースに格納されている構造化文書に含まれるノード毎に、当該ノードを近隣ノードとして当該ノードへの移動が発生した回数をトラバース回数として保持するトラバース回数保持手段を更に具備し、
前記ノード情報先読み手段は、前記トラバース回数保持手段に保持されている、前記基点ノードから当該基点ノードの各近隣ノードへの移動が発生したトラバース回数に基づき、少なくとも当該トラバース回数が最も多い近隣ノードをノード情報先読みの対象とすべき対象ノードとして決定し、当該対象ノードのノード情報を前記構造化文書データベースから前記メモリに先読みする
ことを特徴とする請求項２記載の構造化文書検索システム。
【請求項４】
前記構造化文書データベースに格納されている構造化文書に含まれる各ノードについて、当該ノードから当該ノードの近隣ノードへの移動が発生した回数をトラバース回数として当該ノード毎で且つ当該近隣ノード別に保持するトラバース回数保持手段を更に具備し、
前記ノード情報先読み手段は、前記トラバース回数保持手段に保持されている、前記基点ノードから当該基点ノードの各近隣ノードへの移動が発生したトラバース回数に基づき、少なくとも当該トラバース回数が最も多い近隣ノードをノード情報先読みの対象とすべき対象ノードとして決定し、当該対象ノードのノード情報を前記構造化文書データベースから前記メモリに先読みする
ことを特徴とする請求項２記載の構造化文書検索システム。
【請求項５】
前記クライアント端末からの各種の処理要求を受け付ける処理手段であって、当該処理要求が前記検索要求の場合、当該検索要求に対する前記検索処理の結果を前記クライアント端末に返す処理手段を更に具備し、
前記ノード情報先読み手段は、前記トラバース回数保持手段に保持されている、前記検索処理で特定されたノードから当該特定されたノードの各近隣ノードへの移動が発生したトラバース回数に基づき、当該トラバース回数が閾値を超える近隣ノードを特定して、当該特定された近隣ノードのノード情報を前記構造化文書データベースから取得し、
前記処理手段は、前記検索要求に対する前記検索処理の結果を前記クライアント端末に返す際に、前記ノード情報先読み手段によって取得されたノード情報を前記検索処理の結果と合わせて前記クライアント端末に返す
ことを特徴とする請求項３または４に記載の構造化文書検索システム。
【請求項６】
複数のノードを含む構造化文書を格納する構造化文書データベースと、
前記構造化文書データベースに格納されている構造化文書に含まれるノードの値に関するノード情報を記憶するのに用いられるメモリと、
前記構造化文書データベースに格納されている構造化文書の構造を定義するためのスキーマを構成するスキーマノード毎に、当該スキーマノードを近隣スキーマノードとして当該スキーマノードに対応する構造化文書上のノードへの移動が発生した回数をトラバース回数として保持するトラバース回数保持手段と、
クライアント端末から送られたノード検索要求に従う検索処理で特定されたノードのノード情報を含む検索結果が前記クライアント端末に返される際に動作を開始し、前記検索処理で特定されたノードと対応するスキーマノードを基点スキーマノードとすると共に、前記スキーマ上で当該基点スキーマノードに対して予め定められた範囲内のスキーマノードを近隣スキーマノードとすることにより、当該近隣スキーマノードに対応する構造化文書上のノードの値に関するノード情報を近隣ノードのノード情報として、前記構造化文書データベースから前記メモリに先読みするノード情報先読み手段と
を具備することを特徴とする構造化文書検索システム。
【請求項７】
複数のノードを含む構造化文書を格納する構造化文書データベースと、メモリと、検索処理手段と、ノード情報先読み手段とを備えたコンピュータに、
クライアント端末から送られたノード検索要求に従い前記検索処理手段が検索処理を行うことにより、当該検索要求で指定された検索条件に合致する、前記構造化文書データベースに格納されている構造化文書上のノードを特定するステップと、
前記ノード検索要求に従う検索処理で特定されたノードのノード情報を含む検索結果が前記クライアント端末に返される際に開始されるステップであって、前記検索処理で特定されたノードを基点ノードとして用いて、当該基点ノードを含む前記構造化文書データベース内の構造化文書の階層構造上で当該基点ノードに対して予め定められた範囲内のノードの値に関するノード情報を近隣ノードのノード情報として、前記構造化文書データベースから前記メモリに前記ノード情報先読み手段が先読みするステップと
を実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、構造化文書データベースに格納されている構造化文書上のトラバース要求で指定された移動先のノードの値に関するノード情報を取得するのに好適な構造化文書検索システム及びプログラムに関する。
【背景技術】
【０００２】
一般に、論理構造を持つ文書は構造化文書と呼ばれる。構造化文書において、当該文書の論理構造は、当該文書中に記述されたタグによって示される。このタグを用いて論理構造が表現された構造化文書は、コンピュータでの処理に適している。
【０００３】
タグを用いてデータを記述する手段として、ＸＭＬ(Extensible Markup Language)が広く利用されている。ＸＭＬは、意味付けされたタグによるデータの階層化が可能で且つ構造が自由で拡張性に富むという特長を持つ。これらの特長を生かしたＸＭＬ格納技術として、ＸＭＬデータベースが知られている。ＸＭＬデータベースは、ＸＰａｔｈに代表される問合せ言語によって検索機能を提供する。ＸＰａｔｈを用いた検索はＸＰａｔｈ検索と呼ばれる。ＸＰａｔｈ検索では、ＸＭＬ文書中の要素（ノード）の位置を指定することによって検索が行われる。クライアント端末で動作するアプリケーションプログラム（以下、クライアント端末と称する）は、必要なノードのパスを指定してＸＰａｔｈ検索を行い、その検索結果からＸＭＬデータを取得することができる。
【０００４】
また、検索によるノード特定後のクライアント端末側の処理として、特定されたノード（つまり検索でヒットしたノード）からの相対的な位置関係を基にしたデータ取得要求も多い。例えば、「検索でヒットしたノードの２つ下の階層の長男ノードのテキスト値」を取得する要求である。このようなデータ取得要求に対する処理は、例えば、検索でヒットしたノード以下の階層の全てのＸＭＬ文書のデータを取得して、当該データをクライアント端末側でパースすることによって実現される。しかし、この手法では、必要のないデータも取得されるため、処理に時間がかかる。
【０００５】
このため上述のデータ取得要求に対する処理を、例えば特許文献１に記載されているように、「トラバース」機能で実現することが多い。「トラバース」機能は、検索でヒットしたノードを基点として、対応するＸＭＬ文書の階層構造上で親、子、兄弟ノードなど、目的の方向のノードへ移動するトラバース処理を可能とする。「トラバース」機能を用いたトラバース処理によれば、目的のノードまで移動し、そのノードの値だけを取得すればよいため、データ取得にかかる時間を短くできる。以下の説明では、データ取得要求をトラバース要求と称する。
【０００６】
以下、特許文献１に記載されているような従来のトラバース処理について説明する。まず図２に示されるように、ＸＭＬ文書１１１〜１１３がＸＭＬデータベース（ＸＭＬＤＢ）１１に格納されているものとする。ＸＭＬＤＢ１１は一般にディスク装置の記憶領域に配置される。ＸＭＬＤＢ１１内では、ＸＭＬ文書１１１〜１１３の各ノードは木構造を構成する。ＸＭＬ文書１１１〜１１３はＸＭＬＤＢ１１内では、コレクションと呼ばれるＸＭＬ文書格納手段（図２で“ｂｉｂ”と表記）に束にして格納されている。
【０００７】
ＸＭＬＤＢ１１に格納されるＸＭＬ文書は、図１７に示されるように、構造情報テーブル３１０及びノード情報ブロック３２０に基づいて管理される。構造情報テーブル３１０は、ＸＭＬＤＢ１１内のＸＭＬ文書におけるデータ構造を示す構造情報を保持する。構造情報テーブル３１０は、ＸＭＬ文書のノード毎に、そのノードのノードＩＤと、そのノードの親、子、及び弟ノードのノードＩＤとから構成される情報を、構造情報として保持する。ここでノードＩＤとは、データ構造に基づいて各ノードに割り当てられた一意のＩＤである。ノード情報ブロック３２０は、ＸＭＬ文書の各ノードに対して生成されるノード情報を保持する。ノード情報は、ノードの値に関する情報であり、当該ノードのノードＩＤ、ノード名（タグ名）及び値（テキストノードの値、属性値）のＸＭＬＤＢ１１上の格納位置などを保持するが、対応するノードの値は含まないものとする。
【０００８】
構造情報及びノード情報はＸＭＬ文書をＸＭＬＤＢ１１に格納する際に作成される。ＸＭＬＤＢ１１の稼働中は、構造情報及びノード情報はメモリ上に保持されるのが一般的である。これに対して、構造情報及びノード情報によって指定されるノードの値は、データ量が多いためにメモリ上に保持せず、ディスク装置に配置されているＸＭＬＤＢ１１から必要に応じて読み出されるのが一般的である（ＯＳにより自動的にディスクキャッシュに保持されることもあるが、説明の単純化のためここでは触れない）。
【０００９】
クライアント端末は、トラバース要求に先行して、構造化文書検索システムに対してＸＰａｔｈによって検索を要求する。構造化文書検索システムは、クライアント端末によって指定されたＸＰａｔｈに基づいて検索を行い、検索条件に合致する目的のノード、つまりトラバース処理の基点となるノードを特定する。
【００１０】
その後、構造化文書検索システムはクライアント端末からのトラバース要求を受け付けると、当該トラバース要求に応じてトラバース処理を開始し、要求されている移動先ノード（例えば親、子または弟ノード）に応じた処理を行う。例えば親ノードが移動先ノードの場合、まず構造化文書検索システムは、基点ノードのノードＩＤに基づいて、構造情報テーブルから、当該基点ノードの構造情報を取得し、その中から親ノードのノードＩＤを取得する。
【００１１】
次に構造化文書検索システムは、親ノードのノードＩＤに基づいて親ノードのノード情報を取得する。このノード情報は、親ノードの値の構造化文書データベース上の格納位置を保持しているものの、当該値それ自体は保持していない。そこで構造化文書検索システムは、この構造化文書データベース上の格納位置から値を取得するために、当該構造化文書データベースが配置されているディスク装置からの値の読み出し（つまりディスク読み出し）を行う。そして構造化文書検索システムは、取得した値をノード情報に付加して、クライアント端末に送信する。トラバース要求の指定する移動先ノードが子ノード、或いは弟ノードの場合も同様の処理が行われる。構造化文書検索システムは、クライアント端末からのトラバース要求を受け付ける毎に、トラバース処理を行う。
【００１２】
上述のように、特許文献１に記載されているようなトラバース機能を利用した移動先ノードの値の取得には、トラバース要求毎にディスク読み出しが必要であり、加えてクライアント端末と構造化文書検索システムとの間で通信をしながら１ノードずつ移動するため、処理に時間がかかる。
【００１３】
一方、例えば特許文献２には、メモリに展開したＤＯＭツリーの一部を、メモリ消費量の節約のためにハードディスク等の記憶装置へ退避する際に、ＸＰａｔｈ式を評価してトラバース処理はオンメモリで処理できるようにトラバースに必要な情報をメモリに残すことや、文書の型を定義したスキーマに基づいてメモリに残すトラバースに必要な情報を選択することが記載されている。このようにトラバースに必要な情報をメモリに残すことによりトラバース時にディスク読み出しが不要となるため、トラバースにかかる時間を短縮できる。
【先行技術文献】
【特許文献】
【００１４】
【特許文献１】特開２００６−１２７２２９号公報
【特許文献２】再表２００６／０５１８６９号公報
【発明の概要】
【発明が解決しようとする課題】
【００１５】
上述のように、特許文献２に記載されている先行技術では、検索実行時までに取得できるＸＰａｔｈ式またはスキーマ情報に基づいて、メモリに残すトラバースに必要な情報が選択される。しかし、このような情報から実際に実行された検索に応じてトラバースする移動先ノードを動的に特定する情報は得られず、したがってトラバースする移動先ノードを決定することは困難である。つまり特許文献２に記載されている先行技術では、メモリに残されている情報がトラバース処理で使用される確率は低く、トラバースにかかる時間を十分に短縮できない。トラバースによる移動が繰り返されると更に確率は低くなる。トラバースに必要な情報を増やせば確率は高まるが、メモリ使用量の点で問題が生じる。
【００１６】
本発明は上記事情を考慮してなされたものでその目的は、クライアント端末からトラバース要求が送られる前に、当該トラバース要求で指定される可能性の高いノードの値に関するノード情報を構造化文書データベースからメモリに読み出しておくことにより、限られたメモリ領域を有効に使いながらトラバース要求に従うトラバース処理によるノード情報取得を高速化できる構造化文書検索システム及びプログラムを提供することにある。
【課題を解決するための手段】
【００１７】
本発明の１つの観点によれば、構造化文書検索システムが提供される。この構造化文書検索システムは、複数のノードを含む構造化文書を格納する構造化文書データベースと、前記構造化文書データベースに格納されている構造化文書に含まれるノードの値に関するノード情報を記憶するのに用いられるメモリと、クライアント端末から送られたノード検索要求に従う検索処理の後、前記クライアント端末からのトラバース要求の受け付け前に、前記検索処理で特定されたノードを基点ノードとして用いて、当該基点ノードを含む前記構造化文書データベース内の構造化文書の階層構造上で当該基点ノードに対して予め定められた範囲内のノードの値に関するノード情報を近隣ノードのノード情報として、前記構造化文書データベースから前記メモリに先読みするノード情報先読み手段とを具備する。
【発明の効果】
【００１８】
本発明によれば、クライアント端末から送られたノード検索要求に従う検索処理の後、前記クライアント端末からのトラバース要求の受け付け前に、当該トラバース要求で指定される可能性の高いノードの値に関するノード情報が構造化文書データベースからメモリに先読みされる。これにより、限られたメモリ領域を有効に使いながらトラバース要求に従うトラバース処理によるノード情報取得を高速化できる。
【図面の簡単な説明】
【００１９】
【図１】本発明の一実施形態に係る構造化文書検索システムの構成を示すブロック図。
【図２】ＸＭＬデータベース（ＸＭＬＤＢ）におけるＸＭＬ文書格納の概念を示す図。
【図３】同実施形態においてＸＭＬＤＢに格納されているＸＭＬ文書のデータ構造を、当該データ構造をノード単位で管理する構造情報テーブル、及び当該ＸＭＬ文書中の各ノードの値に関する情報を管理するノード情報ブロックと対応付けて示す図。
【図４】同実施形態におけるトラバース処理を含む動作の手順を示すフローチャート。
【図５】同実施形態におけるノード情報先読み処理の手順を示すフローチャート。
【図６】同実施形態による処理時間の短縮について、検索処理に続いて２回のトラバース処理が行われる場合を例に、先行技術と対比して示すための通信シーケンスチャート。
【図７】同実施形態の第１の変形例で適用される構造情報テーブルのデータ構造例をノード情報ブロックと対応付けて示す図。
【図８】同第１の変形例におけるトラバース処理を含む動作の手順を示すフローチャート。
【図９】同第１の変形例におけるノード情報先読み処理の手順を示すフローチャート。
【図１０】同実施形態の第２の変形例で適用される構造情報テーブルのデータ構造例をノード情報ブロックと対応付けて示す図。
【図１１】同第２の変形例におけるトラバース処理を含む動作の手順を示すフローチャート。
【図１２】同第２の変形例におけるノード情報先読み処理の手順を示すフローチャート。
【図１３】同実施形態の第３の変形例におけるトラバース処理を含む動作の手順を示すフローチャート。
【図１４】同実施形態の第４の変形例で適用されるスキーマ情報テーブルのデータ構造例をノード情報ブロックと対応付けて示す図。
【図１５】同第４の変形例におけるトラバース処理を含む動作の手順を示すフローチャート。
【図１６】同第４の変形例におけるノード情報先読み処理の手順を示すフローチャート。
【図１７】先行技術においてＸＭＬＤＢに格納されているＸＭＬ文書のデータ構造を、当該データ構造をノード単位で管理する構造情報テーブル、及び当該ＸＭＬ文書中の各ノードの値に関する情報を管理するノード情報ブロックと対応付けて示す図。
【発明を実施するための形態】
【００２０】
以下、本発明の実施の形態につき図面を参照して説明する。  
図１は本発明の一実施形態に係る構造化文書検索システムの構成を示すブロック図である。図１において、構造化文書検索システム１０は、クライアント端末２０と、ローカルエリアネットワーク（ＬＡＮ）等のネットワーク２１を介して接続されている。クライアント端末２０上では、構造化文書検索システム１０を利用するアプリケーションが動作する。構造化文書検索システム１０は、ＸＭＬデータベース（ＸＭＬＤＢ）１１と、要求処理部１２と、検索処理部１３と、トラバース処理部１４と、ノード情報先読み部１５と、メモリ１６とから構成される。
【００２１】
ＸＭＬＤＢ１１は、構造化文書としてのＸＭＬ文書を格納するデータベースである。ＸＭＬＤＢ１１は、ハードディスクドライブのようなディスク装置の記憶領域に配置されている。図２は、ＸＭＬＤＢ１１におけるＸＭＬ文書格納の概念を示す図である。図２の例では、背景技術でも述べたように、ＸＭＬ文書１１１〜１１３がＸＭＬＤＢ１１内の“ｂｉｂ”と呼ばれるコレクションに格納されている。
【００２２】
図３は、ＸＭＬＤＢ１１に格納されているＸＭＬ文書のデータ構造を、当該データ構造をノード単位で管理する構造情報テーブル３１、及び当該ＸＭＬ文書中の各ノードの値に関する情報を管理するノード情報ブロック３２と対応付けて示す。構造情報テーブル３１及び各ノード情報ブロック３２は、ＸＭＬＤＢ１１に格納されている。なお、図３には、ＸＭＬＤＢ１１に格納されているＸＭＬ文書１１１〜１１３のデータ構造の一部、例えば、ＸＭＬ文書１１１〜１１３内のある１つのノード（ここでは、ノードＩＤが２のノード）を基点ノードとした場合における、当該基点ノードの親、子、及び弟ノードの各ノード（以下、近隣ノードと称する）のデータ構造部分が示されている。なお、図３の構造情報テーブル３１の例では、基点ノードの子ノードとして長男ノードのみが登録される。次男ノードは、当該次男ノードの兄ノードを基点ノードとする場合に、当該基点ノードの弟ノードとして登録される。
【００２３】
構造情報テーブル３１は図１７に示される構造情報テーブル３１０と同様に、ＸＭＬＤＢ１１に格納されているＸＭＬ文書のノード毎に、そのノードのノードＩＤと、そのノードの親、子、及び弟ノードのノードＩＤとから構成される情報を、構造情報として保持する。一方、ノード情報ブロック３２は、ノードの値に関する情報であるノード情報を保持する。ノード情報は、対応するノードのノードＩＤ、当該ノードのノード名（タグ名）及び当該ノードの値（テキストノードの値、属性値）のＸＭＬＤＢ１１上の格納位置（を示す格納位置情報）に加えて、その値それ自体を保持する。
【００２４】
このように、ノード情報ブロック３２に保持されるノード情報は、対応するノードの値を含む点で、図１７に示されるノード情報ブロック３２０とは相違する。このため、構造情報テーブル３１に保持されている構造情報によって示される全てのノードのノード情報ブロック３２をＸＭＬＤＢ１１から読み出してメモリ１６に格納することは、メモリ消費量の増大を招くために好ましくない。そこで本実施形態では、トラバース要求で指定される可能性の高いノードの値を含むノード情報ブロック３２のみをＸＭＬＤＢ１１から先読みしてメモリ１６に格納する。この先読みは、ノード情報先読み部１５によって行われる。
【００２５】
再び図１を参照すると、構造化文書検索システム１０において、要求処理部１２は、クライアント端末２０から送られる処理要求を受け付ける。要求処理部１２は、自身が受け付けた処理要求がノード検索要求の場合、当該ノード検索要求を検索処理部１３に渡す。要求処理部１２はまた、自身が受け付けた処理要求がトラバース要求の場合、当該トラバース要求をトラバース処理部１４に渡す。トラバース要求は、トラバースの基点となる基点ノードと、当該基点ノードからのトラバースの方向（つまり移動先）とを指定する。ここでは、トラバース方向として、基点ノードの親ノード、子ノード、或いは弟ノードのいずれかが指定されるものとする。つまりトラバース方向は基点ノードからの移動先のノードを示す。
【００２６】
検索処理部１３は、要求処理部１２から渡されたノード検索要求に従って当該ノード検索要求の示す検索条件に合致するノードをＸＭＬＤＢ１１から検索するための検索処理を行う。  
トラバース処理部１４は、要求処理部１２から渡されたトラバース要求に従って当該トラバース要求で指定された基点ノードから当該トラバース要求で指定された方向にデータ構造（木構造）上のノードを辿ることによって、目的のノードの値を取得する。
【００２７】
ノード情報先読み部１５は、検索処理部１３によって特定された全てのノード（つまりノード検索要求の示す検索条件にヒットした全てのノード）について、そのノードを基点ノードとして、その近隣ノードのノード情報ブロック３２をＸＭＬＤＢ１１からメモリ１６に先読みする。
【００２８】
要求処理部１２、検索処理部１３、トラバース処理部１４及びノード情報先読み部１５は、例えばサーバコンピュータが有するディスク装置に内蔵のディスクにインストールされた特定のソフトウェアプログラム（例えば構造化文書データベース管理プログラム）を、当該コンピュータ内のＣＰＵが読み取って実行することにより実現される。このプログラムは、コンピュータ読み取り可能な記憶媒体に予め格納して頒布可能である。また、このプログラムが、ネットワークを介してダウンロード（頒布）されても構わない。本実施形態において構造化文書検索システム１０もサーバコンピュータによって実現されているものとする。しかし、ＸＭＬＤＢ１１が、このサーバコンピュータとは独立して設けられていても構わない。
【００２９】
次に、本実施形態で適用される、図１の構造化文書検索システム１０におけるトラバース処理を含む動作について、図４のフローチャートを参照して説明する。  
クライアント端末２０は、構造化文書検索システム１０に対してネットワーク２１を介して処理要求を送信する。このクライアント端末２０からの処理要求は、構造化文書検索システム１０内の要求処理部１２で受け付けられる。この要求処理部１２で受け付けられた処理要求がノード検索要求の場合、要求処理部１２は当該ノード検索要求を検索処理部１３に渡す。このノード検索要求が、目的のノードへのパスを検索条件として含むＸＰａｔｈ検索要求であるものとする。このように本実施形態では、目的とするデータを検索することを要求するための問い合わせ言語としてＸＰａｔｈが用いられる。しかし、ＸＱｕｅｒｙを問い合わせ言語として用いても構わない。
【００３０】
検索処理部１３は、要求処理部１２から渡されたＸＰａｔｈ検索要求を受け取ると、当該ＸＰａｔｈ検索要求で指定されるＸＰａｔｈに従ってＸＭＬＤＢ１１を対象とする検索処理（つまりＸＰａｔｈ検索）を行う（ステップＳ１）。検索処理部１３は、このＸＰａｔｈ検索により、その検索結果（ＸＰａｔｈ検索結果）として、ＸＭＬＤＢ１１に格納されているＸＭＬ文書上のノードのうち、ＸＰａｔｈで指定された（つまりＸＰａｔｈに合致した）全てのノードのノード情報を取得する（ステップＳ２）。即ち検索処理部１３は、ＸＰａｔｈで指定された全てのノードを基点ノードとして特定する。すると要求処理部１２は、検索処理部１３によるＸＰａｔｈ検索によって取得されたノード情報を、クライアント端末２０からのＸＰａｔｈ検索要求に対する検索結果として当該クライアント端末２０に返すための通信を開始する（ステップＳ３）。
【００３１】
同時に要求処理部１２は、ノード情報先読み部１５によるノード情報先読み処理を開始させる（ステップＳ４）。これによりノード情報先読み部１５は、要求処理部１２とクライアント端末２０との間の通信と並行して、ノード情報先読み処理を実行する。このノード情報先読み部１５によるノード情報先読み処理について、図５のフローチャートを参照して説明する。
【００３２】
まずノード情報先読み部１５は、検索処理部１３による検索処理によって特定された全ての基点ノードのノードＩＤに基づいて、メモリ１６に格納されている構造情報テーブル３１から当該基点ノードの構造情報を取得する（ステップＳ２１）。ここでは、基点ノードのノードＩＤに一致するノードＩＤを含む構造情報が、当該基点ノードの構造情報として取得される。
【００３３】
次にノード情報先読み部１５は、基点ノードの親、子及び弟ノード、つまり基点ノードの近隣ノードの中から、未だ未選択のノードをノード情報先読みの対象とすべきノード（以下、対象ノードと称する）として選択する（ステップＳ２２）。そしてノード情報先読み部１５は、ステップＳ２１で取得された基点ノードの構造情報から、ステップＳ２２で選択された対象ノードのノードＩＤを取得するための処理を実行する（ステップＳ２３）。このステップＳ２３においてノード情報先読み部１５が、基点ノードの構造情報から対象ノードのノードＩＤを取得できたならば、それは、対象ノードが基点ノードの近隣ノードとして存在することを意味する。
【００３４】
そこでノード情報先読み部１５は、ステップＳ２３の結果に基づいて対象ノードが存在するかを判定する（ステップＳ２４）。もし、対象ノードが存在するならば（ステップＳ２４のＹｅｓ）、ノード情報先読み部１５は、ステップＳ２３で取得できた当該対象ノードのノードＩＤに基づき、ＸＭＬＤＢ１１からメモリ１６に当該対象ノードのノード情報ブロック３２を先読みする（ステップＳ２５）。つまりノード情報先読み部１５は、ＸＭＬＤＢ１１に格納されているノード情報ブロック３２の集合から、対象ノードのノードＩＤを持つノード情報ブロック３２を取得して、当該取得したノード情報ブロック３２をメモリ１６に予め格納する。
【００３５】
次にノード情報先読み部１５は、全ての近隣ノードについて処理をし終えたかを判定する（ステップＳ２６）。もし、未処理の近隣ノード（つまり未選択の近隣ノード）が残っているならば（ステップＳ２６のＮｏ）、ノード情報先読み部１５はステップＳ２２に戻る。これに対し、全ての近隣ノードについて処理をし終えたならば（ステップＳ２６のＹｅｓ）、ノード情報先読み部１５はノード情報先読み処理を終了する。
【００３６】
また、対象ノードが存在しないならば（ステップＳ２４のＮｏ）、つまりステップＳ２３で、対象ノードのノードＩＤを取得できなかったならば、ノード情報先読み部１５はステップＳ２５をスキップしてステップＳ２６に進む。
【００３７】
本実施形態では、要求処理部１２がノード情報先読み部１５によるノード情報先読み処理を開始させ（ステップＳ４）、その後クライアント端末２０からのＸＰａｔｈ検索要求に対する検索結果を要求処理部１２から当該クライアント端末２０に返すための通信が完了すると、要求処理部１２及びトラバース処理部１４による処理が次のように行われる。
【００３８】
まず要求処理部１２はクライアント端末２０から処理要求が送信されるのを待つ（ステップＳ５，Ｓ６）。このように、要求処理部１２がクライアント端末２０から処理要求が送信されるのを待っている状態で、クライアント端末２０から処理要求が送信された結果、要求処理部１２が当該処理要求を受け付けたものとする（ステップＳ６）。すると要求処理部１２は、受け付けた処理要求がトラバース要求であるか、終了要求であるか、或いはそれ以外の要求であるかを判定する（ステップＳ７，Ｓ８）。
【００３９】
ところで、クライアント端末２０からのＸＰａｔｈ検索要求に対する検索結果として、ＸＰａｔｈで指定されたノード（基点ノード）のノード情報が要求処理部１２によってクライアント端末２０に返された場合、前記特許文献１にも記載されているように、クライアント端末２０はユーザの操作に基づいてトラバース要求をクライアント端末２０に送信するのが一般的である。また、ＸＰａｔｈ検索要求の次にクライアント端末２０から送信されるトラバース要求によって指定される基点ノードが、当該ＸＰａｔｈ検索要求に対する検索結果に含まれているノード情報によって示されるノード（の１つ）であることも一般的である。
【００４０】
もし、受け付けた処理要求がトラバース要求である場合（ステップＳ７のＮｏ、ステップＳ８のＹｅｓ）、要求処理部１２は当該トラバース要求をトラバース処理部１４に渡す。トラバース処理部１４は、要求処理部１２から渡されたトラバース要求を受け取ると、当該トラバース要求で指定される基点ノードのノードＩＤ（以下、基点ノードＩＤと称する）に基づいて、メモリ１６に格納されている構造情報テーブル３１を参照する。そしてトラバース処理部１４は、指定された基点ノードＩＤを含む構造情報が構造情報テーブル３１に存在するかによって、当該基点ノードが存在するかを判定する（ステップＳ９）。
【００４１】
もし、指定された基点ノードが存在しないならば（ステップＳ９のＮｏ）、トラバース処理部１４はトラバース失敗を要求処理部１２に通知する。すると要求処理部１２は、クライアント端末２０からのトラバース要求に対する応答として、トラバース失敗通知をクライアント端末２０に返す（ステップＳ１０）。そして要求処理部１２はステップＳ５に戻って、クライアント端末２０から処理要求が送信されるのを待つ。
【００４２】
これに対し、指定された基点ノードが存在するならば（ステップＳ９のＹｅｓ）、トラバース処理部１４は、クライアント端末２０からのトラバース要求で指定されたトラバース方向、つまり移動先が、基点ノードの親ノード、基点ノードの弟ノード或いは基点ノードの子ノードのいずれであるかを判定する（ステップＳ１１）。
【００４３】
もし、指定されたトラバース方向が親ノードであれば、トラバース処理部１４はステップＳ９での判定に用いられた、基点ノードＩＤを含む構造情報から、当該基点ノードの親ノードのノードＩＤ（以下、親ノードＩＤと称する）を取得する（ステップＳ１２）。同様に、指定されたトラバース方向が弟ノードであれば、トラバース処理部１４は上記基点ノードＩＤを含む構造情報から、当該基点ノードの弟ノードのノードＩＤ（以下、弟ノードＩＤと称する）を取得する（ステップＳ１３）。同様に、指定されたトラバース方向が子ノードであれば、トラバース処理部１４は上記基点ノードＩＤを含む構造情報から、当該基点ノードの子ノードのノードＩＤ（以下、子ノードＩＤと称する）を取得する（ステップＳ１４）。
【００４４】
なお、上記ステップＳ１３、Ｓ１４では、説明及びフローチャートの簡略化のために、それぞれ弟ノードＩＤ、子ノードＩＤが必ず取得されるものとしている。しかし、基点ノードの弟ノード、子ノードが存在しない場合には、弟ノードＩＤ、子ノードＩＤを取得することはできない。この場合、要求処理部１２はクライアント端末２０にトラバース失敗通知を返して、ステップＳ５に戻ればよい。
【００４５】
トラバース処理部１４は、指定されたトラバース方向のノードのノードＩＤ、即ち親ノードＩＤ、弟ノードＩＤまたは子ノードＩＤを取得すると、その取得したノードＩＤを有するノードのノード情報ブロック３２をメモリ１６から取得する（ステップＳ１５）。ここで、ＸＰａｔｈ検索要求の次にクライアント端末２０から送信されるトラバース要求によって指定される基点ノードは、上述したように当該ＸＰａｔｈ検索要求に対する検索結果に含まれているノード情報によって示されるノードであることが期待される。この検索結果に含まれているノード情報によって示されるノード（基点ノード）の親、弟、子ノードのノード情報は、当該検索結果がステップＳ３でクライアント端末２０に返された後に開始されたノード情報先読み処理によって、ＸＭＬＤＢ１１（ディスク装置）からメモリ１６に先読みされている。したがってステップＳ１５では、クライアント端末２０からのトラバース要求で指定されたトラバース方向のノードのノード情報を、新たにディスク読み出しを実行することなく取得できる。
【００４６】
要求処理部１２は、トラバース処理部１４によって取得されたノード情報を、クライアント端末２０からのトラバース要求に対するトラバース処理結果として当該クライアント端末２０に返すための通信を開始する（ステップＳ１６）。この場合、次にクライアント端末２０から新たなトラバース要求が送信されるとするならば、そのトラバース要求によって指定される基点ノードは、このトラバース要求に先行して送信されたトラバース要求に対するトラバース処理結果に含まれているノード情報、または上記ＸＰａｔｈ検索要求に対する検索結果に含まれているノード情報によって示される他のノード（の１つ）のによって示されるノードである可能性が高い。
【００４７】
そこで要求処理部１２は、トラバース処理部１４によって取得されたノード情報をクライアント端末２０に返すための通信を開始すると同時に（ステップＳ１６）、ステップＳ４に戻り、当該ノード情報で示されるノードを基点ノードとして、ノード情報先読み部１５によるノード情報先読み処理を再度開始させる。これにより、トラバース処理部１４によって取得されたノード情報で示されるノードを基点ノードとして、当該基点ノードの全ての近隣ノード（親、子、弟ノード）のノード情報がＸＭＬＤＢ１１からメモリ１６に先読みされる。
【００４８】
要求処理部１２がノード情報先読み部１５によるノード情報先読み処理を開始させ（ステップＳ４）、その後クライアント端末２０からのトラバース要求に対するトラバース結果を要求処理部１２から当該クライアント端末２０に返すための通信が完了すると、要求処理部１２はクライアント端末２０から処理要求が送信されるのを待つ（ステップＳ５，Ｓ６）。以降の動作は、クライアント端末２０からトラバース要求が送信された場合と同様である。
【００４９】
一方、受け付けた処理要求が終了要求である場合（ステップＳ７のＹｅｓ）、要求処理部１２は処理を終了する。また、受け付けた処理要求がトラバース要求でも終了要求でもない場合（ステップＳ７のＮｏ、ステップＳ８のＮｏ）、要求処理部１２はその処理要求に対応する処理を行う。
【００５０】
上述したように本実施形態においては、ＸＰａｔｈ検索要求に応じた検索処理で基点ノードが特定された場合にノード情報先読み処理が行われる他、トラバース要求に応じたトラバース処理で基点ノードが移動する度にノード情報先読み処理が行われる。
【００５１】
なお、上記実施形態では、同じノードの値（が含まれているノード情報）が何度もＸＭＬＤＢ１１（ディスク装置）から先読みされる可能性がある。そこで、例えば構造化文書検索システム１０の起動時に、ＸＭＬＤＢ１１から全てのノード情報ブロック３２を読み出して、当該ノード情報ブロック３２内の値がダミー値（ノードの値として存在し得ない値）に置き換えられたノード情報ブロックを、メモリ１６に格納するようにしてもよい。この場合、ノード情報先読み部１５は、上述のノード情報先読み処理のステップＳ２５に代えて、以下の処理を行えばよい。
【００５２】
まず、ノード情報先読み部１５はメモリ１６を参照することにより、対象ノードのノード情報を保持するノード情報ブロックを探し、当該ノード情報に含まれている値がダミー値であるかを判定する。もし、ダミー値であれば、ノード情報先読み部１５は、ＸＭＬＤＢ１１から対象ノードのノードＩＤを持つノード情報ブロック３２を読み出して、値がダミー値のノード情報ブロックを、当該読み出したノード情報ブロック３２で置き換える。ここで、対象ノードのノードＩＤを持つノード情報ブロック３２に保持されている値だけを読み出して、この読み出した値で、メモリ１６から探したノード情報ブロックに保持されているダミー値を置き換えてもよい。このような処理により、同じノードの値（が含まれているノード情報）が何度も先読みされるのを防止できる。
【００５３】
また、クライアント端末２０が１度のノード検索要求で取得する値の数（またはサイズ）を事前に定め、これに基づいてＸＭＬＤＢ１１（ディスク装置）から読み出すノード情報の量を決定してもよい。クライアント端末２０のディスプレイへの表示の関係で検索結果の一部だけを当該クライアント端末２０が必要とする場合や、ヒット件数が多く全てをＸＭＬＤＢ１１から読み出すのに時間がかかる場合に有効である。
【００５４】
本実施形態では、基点ノードの近隣ノードを、当該基点ノードの親、子、及び弟ノードと定義している。しかし、例えば基点ノードから１階層（１ノード）離れたノードだけでなく、２階層（２ノード）以上離れたノードまで含めて近隣ノードとしてもよい。
【００５５】
次に本実施形態による処理時間の短縮について、検索処理に続いて２回のトラバース処理が行われる場合を例に、前記特許文献１に記載されているような先行技術と比較しながら図６を参照して説明する。図６において、同図（ａ）は本実施形態における通信シーケンスを示し、同図（ｂ）は先行技術における通信シーケンスを示す。
【００５６】
先行技術では、図６（ｂ）に示されるように、クライアント端末からのトラバース要求６０１，６０２に応じて実行されるトラバース処理６０３，６０４の中で、当該トラバース要求６０１，６０２で指定されたトラバース方向のノードのノード情報をＸＭＬＤＢ１１から読み出すためのディスク読み出しが行われる。
【００５７】
これに対して本実施形態では、図６（ａ）に示されるように、クライアント端末２０からの検索要求（ＸＰａｔｈ検索要求）６１１に応じて実行される検索処理６１２の結果（検索結果）を構造化文書検索システム１０からクライアント端末２０に返すための通信６１３の開始と同時に、その検索結果によって示される基点ノードの近隣ノードのノード情報をＸＭＬＤＢ１１からメモリ１６に先読みするためのノード情報先読み処理６１４が開始される。同様に、クライアント端末２０からのトラバース要求６１５，６１６に対するトラバース処理６１７，６１８の処理結果を構造化文書検索システム１０からクライアント端末２０に返すための通信６１９，６２０の開始と同時に、そのトラバース処理結果によって示される移動先ノードの近隣ノードのノード情報をＸＭＬＤＢ１１からメモリ１６に先読みするためのノード情報先読み処理６２１，６２２が開始される。
【００５８】
このように本実施形態では、検索構造化文書検索システム１０とクライアント端末２０との間の通信と並行して、ノード情報先読み処理が行われる。このため本実施形態によれば、トラバース要求に対し即座にトラバース処理結果を返信可能となり、先行技術と比較して処理時間が短縮される。この処理時間の短縮割合はトラバースが繰り返されるほど大きくなる。
【００５９】
即ち本実施形態によれば、クライアント端末２０からのトラバース要求を受け付ける前に、当該トラバース要求で指定される可能性の高い、基点ノードの近隣ノードのノード情報をＸＭＬＤＢ１１から読み出すためのディスク読み出しが行われる。そのため、クライアント端末２０にとって、トラバースにかかる実質的な処理時間が短縮される。またトラバースによる移動先ノードが動的に変化してもノード情報先読み処理の対象ノードも追従して変化し、トラバース要求を継続的に高速に処理できるため、トラバースを使用するアプリケーションの性能問題が発生しにくくなり、性能改善に費やすアプリケーション開発コストを低減することができる。
【００６０】
［第１の変形例］
次に上記実施形態の第１の変形例について説明する。  
図７は、第１の変形例で適用される構造情報テーブル７０のデータ構造例をノード情報ブロック３２と対応付けて示す。第１の変形例では、この構造情報テーブル７０が図３に示される構造情報テーブル３１に代えて用いられる。
【００６１】
構造情報テーブル７０は、ＸＭＬＤＢ１１に格納されているＸＭＬ文書のノード毎に、そのノードのノードＩＤと、そのノードの親、子、及び弟ノードのノードＩＤと、トラバース回数とから構成される情報を、構造情報として保持する。この構造情報中のトラバース回数は、当該構造情報中のノードＩＤを持つノードへのトラバースの発生回数を示す。このように第１の変形例では、構造情報がトラバース回数を含む点で、上記実施形態と異なる。第１の変形例において、構造情報テーブル７０の各エントリに保持される構造情報中のトラバース回数は、構造化文書検索システム１０の起動時にゼロ（初期値）に設定される。
【００６２】
次に、図１の構造化文書検索システム１０におけるトラバース処理を含む第１の変形例の動作について、上記実施形態と相違する点を中心に、図８のフローチャートを参照して説明する。図８において、図４のフローチャートと等価なステップには同一参照符号を付してある。また図８では、ステップＳ２，Ｓ３が省略されている。
【００６３】
検索処理部１３は、クライアント端末２０からのＸＰａｔｈ検索要求を要求処理部１２から受け取ると、当該ＸＰａｔｈ検索要求で指定されるＸＰａｔｈに従ってＸＭＬＤＢ１１を対象とする検索処理を行う（ステップＳ１）。以後、図４のフローチャートと同様の処理が実行され、要求処理部１２がクライアント端末２０からの処理要求を待つ状態に入ったものとする（ステップＳ５）。そして、要求処理部１２がクライアント端末２０からのトラバース要求を受け付けたものとする（ステップＳ６）。要求処理部１２は、受け付けたトラバース要求で指定された基点ノードが存在する場合（ステップＳ９のＹｅｓ）、当該トラバース要求で指定された移動先が、基点ノードの親ノード、基点ノードの弟ノード或いは基点ノードの子ノードのいずれであるかを判定する（ステップＳ１１）。そして、判定された移動先ノードに対応するステップＳ１２、Ｓ１３またはＳ１４が実行されると、当該移動先ノードのノードＩＤに対応するノード情報が取得される（ステップＳ１５）。
【００６４】
トラバース処理部１４は移動先ノードのノード情報を取得すると（ステップＳ１５）、上記実施形態と異なり、構造情報テーブル７０に保持されている、移動先ノードのノードＩＤに対応する構造情報中のトラバース回数を１増加する（ステップＳ１７）。要求処理部１２は、トラバース処理部１４によって取得されたノード情報を、クライアント端末２０からのトラバース要求に対するトラバース処理結果として当該クライアント端末２０に返すための通信を開始する（ステップＳ１６）。
【００６５】
次に、第１の変形例におけるノード情報先読み部１５によるノード情報先読み処理について、図９のフローチャートを参照して説明する。  
ノード情報先読み部１５は、検索処理部１３による検索の結果、またはトラバース処理部１４によるトラバース処理の結果をクライアント端末２０に返すための通信が開始される際に、以下のノード情報先読み処理を開始する。
【００６６】
まずノード情報先読み部１５は、検索処理部１３による検索処理によって特定された全てのノード（基点ノード）のノードＩＤまたはトラバース処理部１４によるトラバース処理によって取得された移動先ノードのノードＩＤに基づいて、そのノードの構造情報を基点ノードの構造情報として取得する（ステップＳ３１）。次にノード情報先読み部１５は、取得した基点ノードの構造情報に基づいて、当該基点ノードの親、子及び弟ノードのノードＩＤ、つまり当該基点ノードの近隣ノードのノードＩＤを全て取得し、当該近隣ノードのノードＩＤに基づいて、当該近隣ノードの構造情報を取得する（ステップＳ３２）。
【００６７】
ノード情報先読み部１５は、取得した全ての近隣ノードの構造情報中のトラバース回数を比較することにより、最もトラバース回数が多い構造情報に対応する近隣ノードを、ノード情報先読みの対象とすべき対象ノードとして決定する（ステップＳ３３）。ここで決定される対象ノードの数は、１つであるとは限らない。なお、少なくとも最もトラバース回数が多い構造情報に対応する近隣ノード、例えばトラバース回数が多い上位一定数の構造情報に対応する近隣ノードを、対象ノードとして決定してもよい。
【００６８】
次にノード情報先読み部１５は、ステップＳ３３で決定された対象ノードの中から、未だ未選択の対象ノードを選択する（ステップＳ３４）。そしてノード情報先読み部１５は、選択した対象ノードのノードＩＤに基づき、ＸＭＬＤＢ１１からメモリ１６に当該対象ノードのノード情報ブロック３２を先読みする（ステップＳ３５）。
【００６９】
次にノード情報先読み部１５は、ステップＳ３３で決定された全ての対象ノードについて処理をし終えたかを判定する（ステップＳ３６）。もし、未処理の対象ノード（つまり未選択の対象ノード）が残っているならば（ステップＳ３６のＮｏ）、ノード情報先読み部１５はステップＳ３４に戻る。これに対し、全ての対象ノードについて処理をし終えたならば（ステップＳ３６のＹｅｓ）、ノード情報先読み部１５はノード情報先読み処理を終了する。
【００７０】
このように第１の変形例においては、トラバース回数という統計情報に基づいて、ノード情報を先読みすべき対象ノードが決定される。このため、統計情報の母数が少ないと無駄が生じやすい。そこでノード情報先読み部１５は、トラバース処理部１４によるトラバース処理がより効率よく実施可能なように、上述のノード情報先読み処理のステップＳ３３に代えて、以下の特定の処理を行うとよい。
【００７１】
まずトラバース処理部１４は、基点ノードの全ての近隣ノードへのトラバース回数が一定数に達するまでは、上記実施形態と同様に、当該全ての近隣ノードを対象ノードとする。一方、基点ノードの全ての近隣ノードへのトラバース回数が一定数に達した後は、トラバース処理部１４は上記第１の変形例と同様に、トラバース回数が最も多い近隣ノードを対象ノードとする。
【００７２】
第１の変形例によれば、過去のトラバース回数に基づいて基点ノードの近隣ノードのノード情報が先読みされることから、上記実施形態と同様の効果に加え、上記実施形態と比較して無駄な先読みが減り、効率よくトラバース処理の高速化を実現できる。
【００７３】
［第２の変形例］
次に上記実施形態の第２の変形例について説明する。  
図１０は、第２の変形例で適用される構造情報テーブル１００のデータ構造例をノード情報ブロック３２と対応付けて示す。第２の変形例では、この構造情報テーブル１００が、図３に示される構造情報テーブル３１、または図７に示される構造情報テーブル７０に代えて用いられる。
【００７４】
構造情報テーブル１００は、ＸＭＬＤＢ１１に格納されているＸＭＬ文書の各ノードについて、そのノードのノードＩＤと、そのノードの親、子、及び弟ノードのノードＩＤと、そのノードの親、子、及び弟ノードそれぞれへのトラバースの回数を示すトラバース回数とから構成される情報を、構造情報として保持する。このように第２の変形例では、ノード毎の構造情報が、当該構造情報中のノードＩＤを持つノードの親、子、及び弟ノードの各ノード（近隣ノード）別に、その親、子、及び弟ノードへのトラバースの回数をトラバース回数として含む点で、上記実施形態及び第１の変形例と異なる。第２の変形例では、構造情報テーブル１００の各エントリに保持される構造情報中の近隣ノード別のトラバース回数は、構造化文書検索システム１０の起動時にゼロ（初期値）に設定される。
【００７５】
次に、図１の構造化文書検索システム１０におけるトラバース処理を含む第２の変形例の動作について、上記実施形態または第１の変形例と相違する点を中心に、図１１のフローチャートを参照して説明する。図１１において、図４または図８のフローチャートと等価なステップには同一参照符号を付してある。また図１１では、ステップＳ２，Ｓ３が省略されている。
【００７６】
まず、クライアント端末２０からのトラバース要求で指定された基点ノードが存在する場合（ステップＳ９のＹｅｓ）、当該トラバース要求で指定された移動先が、基点ノードの親ノード、基点ノードの弟ノード或いは基点ノードの子ノードのいずれであるかが判定される（ステップＳ１１）。そして、判定された移動先ノードに対応するステップＳ１２、Ｓ１３またはＳ１４が実行されると、当該移動先ノードのノードＩＤに対応するノード情報が取得される（ステップＳ１５）。
【００７７】
トラバース処理部１４は移動先ノードのノード情報を取得すると（ステップＳ１５）、ステップＳ１２、Ｓ１３またはＳ１４で移動先ノードのノードＩＤを取得するのに用いられた基点ノードの構造情報に含まれている、移動先ノードに対応するトラバース回数を１増加する（ステップＳ１７ａ）。すると要求処理部１２は、トラバース処理部１４によって取得されたノード情報を、クライアント端末２０からのトラバース要求に対するトラバース処理結果として当該クライアント端末２０に返すための通信を開始する（ステップＳ１６）。
【００７８】
次に、第２の変形例におけるノード情報先読み部１５によるノード情報先読み処理について、上記第１の変形例と相違する点を中心に、図１２のフローチャートを参照して説明する。図１２において、図９のフローチャートと等価なステップには同一参照符号を付してある。
【００７９】
まずノード情報先読み部１５は、検索処理部１３による検索処理によって特定された全てのノード（基点ノード）のノードＩＤまたはトラバース処理部１４によるトラバース処理によって取得された移動先ノードのノードＩＤに基づいて、そのノードの構造情報を基点ノードの構造情報として取得する（ステップＳ３１）。次にノード情報先読み部１５は、取得した基点ノードの構造情報から、当該基点ノードの親、子及び弟ノードに対応するトラバース回数（つまり近隣ノードへのトラバースの回数）を取得する（ステップＳ３７）。
【００８０】
ノード情報先読み部１５は、取得した全ての近隣ノードに対応するトラバース回数を比較することにより、最もトラバース回数が多い近隣ノードを前述の対象ノードとして決定する（ステップＳ３８）。次にノード情報先読み部１５は、ステップＳ３８で決定された対象ノードの中から、未だ未選択の対象ノードを選択する（ステップＳ３４）。以降の動作は、上記第１の変形例と同様である。なお、少なくとも最もトラバース回数が多い近隣ノード、例えばトラバース回数が多い上位一定数の近隣ノードを、対象ノードとして決定してもよい。
【００８１】
このように第２の変形例においても、第１の変形例と同様に、トラバース回数という統計情報に基づいて、ノード情報を先読みすべき対象ノードが決定される。このため、統計情報の母数が少ないと無駄が生じやすい。そこで第２の変形例において、第１の変形例で述べたような特定の処理をステップＳ３８に代えて適用するとよい。  
第２の変形例によれば、第１の変形例と同様の効果を得ることができる。
【００８２】
［第３の変形例］
次に上記実施形態の第３の変形例について説明する。この第３の変形例は、上記第１の変形例の更なる変形例に相当する。つまり第３の変形例では、図７に示すデータ構造の構造情報テーブル７０が用いられる。
【００８３】
以下、構造化文書検索システム１０におけるトラバース処理を含む第３の変形例の動作について、第１の変形例と相違する点を中心に、図１３のフローチャートを参照して説明する。図１３において、図４または図８のフローチャートと等価なステップには同一参照符号を付してある。
【００８４】
検索処理部１３は、クライアント端末２０からのＸＰａｔｈ検索要求を要求処理部１２から受け取ると、当該ＸＰａｔｈ検索要求で指定されるＸＰａｔｈに従ってＸＭＬＤＢ１１を対象とする検索処理を行う（ステップＳ１）。これにより検索処理部１３は、ＸＰａｔｈで指定された全てのノード（つまり基点ノード）のノード情報を検索結果として取得する（ステップＳ２）。
【００８５】
するとノード情報先読み部１５は、検索処理部１３による検索処理の結果に基づくノード情報取得処理を次のように実行する。まずノード情報先読み部１５は、検索処理部１３による検索処理によって特定された全ての基点ノードのノードＩＤに基づいて、メモリ１６に格納されている構造情報テーブル３１から当該基点ノードの構造情報を取得する（ステップＳ４１）。次にノード情報先読み部１５は、取得した基点ノードの構造情報に基づいて、当該基点ノードの親、子及び弟ノードのノードＩＤ、つまり当該基点ノードの近隣ノードのノードＩＤを全て取得し、当該近隣ノードのノードＩＤに基づいて、当該近隣ノードの構造情報を取得する（ステップＳ４２）。これらのステップＳ４１，Ｓ４２は、図９のフローチャートにおけるステップＳ３１，Ｓ３２に相当する。
【００８６】
次にノード情報先読み部１５は、取得した全ての近隣ノードの構造情報中のトラバース回数を例えば閾値と比較することにより、トラバース回数が閾値を超える構造情報に対応する全ての近隣ノードを特定し、当該特定された近隣ノードのノード情報ブロック３２をＸＭＬＤＢ１１から取得する（ステップＳ４３）。取得されたノード情報ブロック３２がメモリ１６に格納されても構わない。
【００８７】
ノード情報先読み部１５によるステップＳ４３の処理が終了すると、要求処理部１２は、ノード情報先読み部１５によって取得されたノード情報ブロック３２の情報（つまり特定された近隣ノードのノード情報）と検索処理部１３による検索結果とをクライアント端末２０に返すための通信を行う（ステップＳ４４）。そして要求処理部１２は、前記ステップＳ５に進んで、クライアント端末２０から処理要求が送信されるのを待つ。以降の処理は、図８のフローチャートと同様である。
【００８８】
なお、構造化文書検索システム１０からクライアント端末２０に返される検索結果に、第３の変形例のように近隣ノードのノード情報が付加されていても、クライアント端末２０で正しく処理可能とするためには、クライアント端末２０側の通信プロトコルを修正する必要がある。このような修正は、当業者にとって周知技術で容易に対応可能である。
【００８９】
第３の変形例によれば、第１及び第２の変形例と同様の効果を得ることができる。しかも第３の変形例によれば、検索処理で特定された基点ノードの近隣ノードのノード情報が当該検索処理の検索結果と一緒にクライアント端末２０に送信されることから、１回目のトラバースを、構造化文書検索システム１０とクライアント端末２０との間で通信することなく完了できる。これにより、構造化文書検索システム１０とクライアント端末２０との間の通信回数が減ってトラバースの処理時間をより短縮できる。第３の変形例は、処理時間のうち通信が占める割合が大きい環境で有効である。
【００９０】
なお、第３の変形例において、図７に示すデータ構造の構造情報テーブル７０に代えて、図１０に示すデータ構造の構造情報テーブル１００を適用することも可能である。この場合、ステップＳ４４の後に、図１１のフローチャートにおけるステップＳ５以降の処理が実行されればよい。
【００９１】
［第４の変形例］
次に上記実施形態の第４の変形例について説明する。  
図１４は、第４の変形例で適用されるスキーマ情報テーブル１４０のデータ構造例をノード情報ブロックと対応付けて示す。第４の変形例では、このスキーマ情報テーブル１４０が新たに用いられる。スキーマ情報テーブル１４０は、スキーマを構成する各ノード（以下、スキーマノードと称する）について、そのスキーマノードに割り当てられたＩＤ（以下、スキーマＩＤと称する）と、ノードＩＤと、そのスキーマノードの近隣ノード（スキーマノードの親、弟、及び子スキーマノード）のスキーマＩＤと、トラバース回数とから構成される情報を、スキーマ情報として保持する。
【００９２】
スキーマとは、ＸＭＬＤＢ１１に格納されるＸＭＬ文書の構造を定義するものであり、ＸＭＬ文書中の全てのノードはいずれかのスキーマノードと対応付けられる。ＸＭＬ文書が繰り返し構造部分を含む場合、当該繰り返し構造部分には１つのスキーマＩＤが割り当てられる。
【００９３】
図１４に示すスキーマ情報テーブル１４０を適用する第４の変形例では、前記実施形態と同様に、図３に示されるデータ構造の構造情報テーブル３１及びノード情報ブロック３２が適用される。第４の変形例において、スキーマ情報テーブル１４０の各エントリに保持されるスキーマ情報中のトラバース回数は、構造化文書検索システム１０の起動時にゼロ（初期値）に設定される。
【００９４】
次に、構造化文書検索システム１０におけるトラバース処理を含む第４の変形例の動作について、上記第１の変形例と相違する点を中心に、図１５のフローチャートを参照して説明する。図１５において、図４及び図８のフローチャートと等価なステップには同一参照符号を付してある。
【００９５】
まず、検索処理部１３は、クライアント端末２０からのＸＰａｔｈ検索要求を要求処理部１２から受け取ると、当該ＸＰａｔｈ検索要求で指定されるＸＰａｔｈに従ってＸＭＬＤＢ１１を対象とする検索処理を行う（ステップＳ１）。以後、図８のフローチャートと同様の処理が実行される。そして、要求処理部１２によって受け付けられたクライアント端末２０からのトラバース要求に基づき、トラバース処理部１４によるトラバース処理が実行されて、当該トラバース要求で指定された移動先ノードのノードＩＤに対応するノード情報が取得されたものとする（ステップＳ１５）。
【００９６】
するとトラバース処理部１４は、上記第１の変形例と異なり、スキーマ情報テーブル１４０に保持されているスキーマ情報のうち、移動先ノードのノードＩＤと対応付けられているスキーマＩＤを含むスキーマ情報を特定し、当該特定したスキーマ情報中のトラバース回数を１増加する（ステップＳ１７ｂ）。トラバース処理部１４によりステップＳ１７ｂが実行されると、要求処理部１２は、当該トラバース処理部１４によって取得されたノード情報を、クライアント端末２０からのトラバース要求に対するトラバース処理結果として当該クライアント端末２０に返すための通信を開始する（ステップＳ１６）。
【００９７】
次に、第４の変形例におけるノード情報先読み部１５によるノード情報先読み処理について、図１６のフローチャートを参照して説明する。  
ノード情報先読み部１５は、検索処理部１３による検索の結果、またはトラバース処理部１４によるトラバース処理の結果をクライアント端末２０に返すための通信が開始される際に、以下のノード情報先読み処理を開始する。
【００９８】
まずノード情報先読み部１５は、検索処理部１３による検索処理によって特定された全てのノード（基点ノード）のノードＩＤまたはトラバース処理部１４によるトラバース処理によって取得された移動先ノードのノードＩＤに基づいて、そのノードのノードＩＤと対応付けられているスキーマＩＤを含むスキーマ情報を基点スキーマノードのスキーマ情報として取得する（ステップＳ５１）。次にノード情報先読み部１５は、取得した基点スキーマノードのスキーマ情報に基づいて、当該基点スキーマノードの親、子及び弟スキーマノードのスキーマノードＩＤ、つまり当該基点スキーマノードの近隣スキーマノードのスキーマノードＩＤを全て取得し、当該近隣スキーマノードのスキーマノードＩＤに基づいて、当該近隣スキーマノードのスキーマ情報を取得する（ステップＳ５２）。
【００９９】
ノード情報先読み部１５は、取得した全ての近隣スキーマノードのスキーマ情報中のトラバース回数を比較することにより、最もトラバース回数が多いスキーマ情報に対応する近隣スキーマノードを、ノード情報先読みの対象とすべき対象スキーマノードとして決定する（ステップＳ５３）。ここで決定される対象スキーマノードの数は、１つであるとは限らない。
【０１００】
次にノード情報先読み部１５は、ステップＳ５３で決定された対象スキーマノードの中から、未だ未選択の対象スキーマノードを選択する（ステップＳ５４）。ノード情報先読み部１５は、選択した対象スキーマノードのスキーマ情報に基づき、当該対象スキーマノードに対応付けられている全てのノードのノードＩＤを取得する（ステップＳ５５）。ノード情報先読み部１５は、取得したノードＩＤに基づき、ＸＭＬＤＢ１１からメモリ１６に、対象スキーマノードに対応付けられている全てのノードのノード情報ブロック３２を先読みする（ステップＳ５６）。
【０１０１】
次にノード情報先読み部１５は、全ての対象スキーマノードについて処理をし終えたかを判定する（ステップＳ５７）。もし、未処理の対象スキーマノード（つまり未選択の対象スキーマノード）が残っているならば（ステップＳ５７のＮｏ）、ノード情報先読み部１５はステップＳ５４に戻る。これに対し、全ての対象スキーマノードについて処理をし終えたならば（ステップＳ５７のＹｅｓ）、ノード情報先読み部１５はノード情報先読み処理を終了する。
【０１０２】
第４の変形例では、トラバース回数という統計情報に基づいて、ノード情報を先読みすべき対象スキーマノードが決定される。このため、前述のように統計情報の母数が小さいと無駄が生じやすい。そこで第４の変形例において、第１の変形例で述べたような特定の処理に相当する処理をステップＳ５３に代えて適用するとよい。この特定の処理に相当する処理は、当該特定の処理において、基点ノード、近隣ノード、対象ノードを、それぞれ基点スキーマノード、近隣スキーマノード、対象スキーマノードに置き換えたものである。
【０１０３】
第４の変形例によれば、第１及び第２の変形例と同様の効果を得ることができる。しかも第４の変形例によれば、同じスキーマを持つＸＭＬ文書データがＸＭＬＤＢ１１に大量に登録される場合、ノードの数に比較してスキーマノードの数が大幅に少なくなるので、ノードの数に依存して統計情報のデータ量が決まる第１乃至第３の変形例に比べて統計情報のデータ合計量が少なくなり、メモリ使用量を少なくできる。
【０１０４】
また第４の変形例においては、検索結果が複数ありそれらのスキーマが同じ場合に、現在処理している検索結果だけでなく、将来取得される可能性のある他の検索結果について、ノード情報の先読みが行われる。このため第４の変形例によれば、より多くのノード情報の先読みが可能となり、ノード情報先読みの遅れを防ぐことが可能になる。
【０１０５】
なお、本発明は、上記実施形態またはその変形例そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態またはその変形例に開示されている複数の構成要素の適宜な組み合わせにより種々の発明を形成できる。例えば、実施形態またはその変形例に示される全構成要素から幾つかの構成要素を削除してもよい。
【符号の説明】
【０１０６】
１０…構造化文書検索システム、２０…クライアント端末、２１…ネットワーク、１１…ＸＭＬＤＢ（ＸＭＬデータベース、構造化文書データベース）、１２…要求処理部、１３…検索処理部、１４…トラバース処理部、１５…ノード情報先読み部、１６…メモリ、３１…構造情報テーブル、３２…ノード情報ブロック、７０…構造情報テーブル（トラバース回数保持手段）、１００…構造情報テーブル（トラバース回数保持手段）、１４０…スキーマ情報テーブル（トラバース回数保持手段）、３１０…構造情報テーブル。
【図１】
2011076420.tif 000003
【図２】
2011076420.tif 000004
【図３】
2011076420.tif 000005
【図４】
2011076420.tif 000006
【図５】
2011076420.tif 000007
【図６】
2011076420.tif 000008
【図７】
2011076420.tif 000009
【図８】
2011076420.tif 000010
【図９】
2011076420.tif 000011
【図１０】
2011076420.tif 000012
【図１１】
2011076420.tif 000013
【図１２】
2011076420.tif 000014
【図１３】
2011076420.tif 000015
【図１４】
2011076420.tif 000016
【図１５】
2011076420.tif 000017
【図１６】
2011076420.tif 000018
【図１７】
2011076420.tif 000019