(57)【要約】【課題】指定されたノードを基点として、構造化文書データベース内を自由に親、子または兄弟ノードへ遷移して当該データベースから目的とするノードのデータを取得することができるようにする。【解決手段】構造化文書データベース（ＸＭＬＤＢ）１１は、構造化文書を格納する。トラバース処理部１４は、構造化文書検索クライアント２０から、検索の基点となる基点ノードからの相対的な位置関係を指定するトラバース要求が検索要求として与えられた場合、ＸＭＬＤＢ１１内で、当該トラバース要求で指定された基点ノードから当該トラバース要求で指定された相対的な位置関係に従ってノードを辿ることによってデータを取得する。【選択図】      図１
2006127229.tif 000002
【特許請求の範囲】
【請求項１】
構造化文書を格納する構造化文書データベースと、
クライアントから、検索の基点となる基点ノードからの相対的な位置関係を指定するトラバース要求が検索要求として与えられた場合、前記構造化文書データベース内で、当該トラバース要求で指定された基点ノードから当該トラバース要求で指定された相対的な位置関係に従ってノードを辿ることによってデータを取得するトラバース処理手段と
を具備することを特徴とする構造化文書検索システム。
【請求項２】
前記トラバース要求は、基点ノードからの相対的な位置関係を示す方向情報により当該基点ノードに対する親子兄弟いずれかのノードを検索の対象として指定し、前記トラバース処理手段は、当該トラバース要求で指定された基点ノードから前記方向情報の指定する親子兄弟いずれかのノードを辿ることを特徴とする請求項１記載の構造化文書検索システム。
【請求項３】
前記クライアントから、検索の対象となるノードへのパスを検索条件として含むパス指定検索要求が与えられた場合、前記構造化データベースから当該パスで指定されるノードを検索してデータを取得する検索処理手段を更に具備することを特徴とする請求項１記載の構造化文書検索システム。
【請求項４】
前記トラバース要求が、前記検索要求に応じて検索されたノードを新たな検索の基点となる基点ノードとして指定することを特徴とする請求項３記載の構造化文書検索システム。
【請求項５】
前記クライアントからの検索要求を受け付けて、当該検索要求が前記トラバース要求または前記パス指定検索要求のいずれであるかを判定し、当該検索要求が前記トラバース要求の場合には、当該検索要求を前記トラバース処理手段に渡し、当該検索要求が前記パス指定検索要求の場合には、当該検索要求を前記検索処理手段に渡す要求処理手段を更に具備することを特徴とする請求項３記載の構造化文書検索システム。
【請求項６】
前記構造化文書データベースは、複数の構造化文書を１つの仮想的な構造化文書の部分木として格納する請求項１記載の構造化文書検索システム。
【請求項７】
前記構造化文書データベースは、前記仮想的な構造化文書の木構造の要素となる各ノードの親子兄弟関係を管理する構造情報を格納し、
前記トラバース処理手段は、前記構造情報に従って前記トラバース要求の指定するノードを辿る
ことを特徴とする請求項６記載の構造化文書検索システム。
【請求項８】
構造化文書を格納する構造化文書データベースから検索要求で指定されたノードを検索する構造化文書検索方法であって、
クライアントから、検索の対象となるノードへのパスを検索条件として含むパス指定検索要求が与えられた場合、前記構造化データベースから当該パスで指定されるノードを検索するステップと、
検索されたノードのデータを前記パス指定検索要求に対する検索結果として前記クライアントに返すステップと、
前記検索結果によって示されるノードを新たな検索の基点となる基点ノードとして、当該基点ノードからの相対的な位置関係を指定するトラバース要求が前記クライアントから検索要求として与えられた場合、前記構造化文書データベース内で、当該トラバース要求で指定された基点ノードから当該トラバース要求で指定された相対的な位置関係に従ってノードを辿るトラバース処理を実行するステップと、
トラバース処理によって検索されたノードのデータを前記トラバース要求に対する検索結果として前記クライアントに返すステップと
を具備することを特徴とする構造化文書検索方法。
【請求項９】
前記トラバース要求は、基点ノードからの相対的な位置関係を示す方向情報により当該基点ノードに対する親子兄弟いずれかのノードを検索の対象として指定し、
前記トラバース処理を実行するステップは、前記方向情報に従って、前記トラバース要求で指定された基点ノードから辿るべきノードが、親子兄弟のうちのいずれであるかを判定するステップを含む
ことを特徴とする請求項８記載の構造化文書検索方法。
【請求項１０】
前記構造化文書データベースは、複数の構造化文書を１つの仮想的な構造化文書の部分木として格納することを特徴とする請求項９記載の構造化文書検索システム。
【請求項１１】
前記構造化文書データベースは、前記仮想的な構造化文書の木構造の要素となる各ノードの親子兄弟関係を管理する構造情報を格納し、
前記トラバース処理を実行するステップは、前記トラバース要求で指定された基点ノードから辿るべきノードを、当該基点ノードと前記判定するステップでの判定結果と前記構造情報とに基づいて特定するステップを含む
ことを特徴とする請求項１０記載の構造化文書検索方法。
【請求項１２】
構造化文書を格納する構造化文書データベースから検索要求で指定されたノードを検索するためのプログラムであって、
コンピュータに、
クライアントから、検索の対象となるノードへのパスを検索条件として含むパス指定検索要求が与えられた場合、前記構造化データベースから当該パスで指定されるノードを検索するステップと、
検索されたノードのデータを前記パス指定検索要求に対する検索結果として前記クライアントに返すステップと、
前記検索結果によって示されるノードを新たな検索の基点となる基点ノードとして、当該基点ノードからの相対的な位置関係を指定するトラバース要求が前記クライアントから検索要求として与えられた場合、前記構造化文書データベース内で、当該トラバース要求で指定された基点ノードから当該トラバース要求で指定された相対的な位置関係に従ってノードを辿るトラバース処理を実行するステップと、
トラバース処理によって検索されたノードのデータを前記トラバース要求に対する検索結果として前記クライアントに返すステップと
を実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、構造化文書データベース内のノードを辿って当該データベースから目的とするノードのデータを取得するのに好適な構造化文書検索システム、構造化文書検索方法及びプログラムに関する。
【背景技術】
【０００２】
一般に、論理構造を持つ文書は構造化文書と呼ばれる。構造化文書において、当該文書の論理構造は、当該文書中に記述されたタグによって示される。このタグを用いて論理構造が表現された構造化文書は、コンピュータでの処理に適している。さて、タグを用いてデータを記述する手段として、ＸＭＬ(Extensible Markup Language)が広く利用されている。ＸＭＬは、意味付けされたタグによるデータの階層化が可能で且つ構造の自由な拡張性に富むという特長を持つ。このＸＭＬを用いて記述された文書はＸＭＬ文書と呼ばれる。ＸＭＬ文書は、タグを用いて論理的に木構造で表現される構造化文書の代表として知られている。
【０００３】
ＸＭＬの特長を生かしてＸＭＬ文書を格納し、且つ当該文書中の任意の論理構造（文書構造）を検索可能とするデータベースは、ＸＭＬデータベース（ＸＭＬＤＢ）と呼ばれる。ＸＭＬデータベースは、ＸＰａｔｈ或いはＸＱｕｅｒｙによる検索を可能とする。ＸＰａｔｈ或いはＸＱｕｅｒｙは、１つの或いは複数のＸＭＬ文書中の任意の要素（ノード）を検索するためのワールド・ワイド・ウエブ・コンソーシアム（World Wide Web Consortium (Ｗ３Ｃ)）によって策定された問い合わせ言語である。
【０００４】
例えば、ＸＰａｔｈは、ＸＭＬ文書中の任意のノードの位置をルートノードからのパスによって指定することにより、当該ノードの検索を行うのに用いられる。このＸＰａｔｈを用いた検索をＸＰａｔｈ検索と呼ぶ。アプリケーション（アプリケーションプログラム）は、必要なノードのパスを指定してＸＰａｔｈ検索を行い、その検索結果からＸＭＬデータを取得することができる。ＸＰａｔｈ検索では、検索対象のノード以下の全ての子孫ノードに対して検索を行うことも可能である。例えば、「検索対象のノード以下において、タグ名が“ｂｏｏｋ”である全てのノード」といった指定が行える。この検索は、子孫ノード全てに対するパターンマッチ（一種の全文検索）であるため、検索対象ノードから実際に取得するノードまでの絶対パスを記述する必要はない。この検索を、ＸＰａｔｈの子孫ノード検索と呼ぶ。
【０００５】
一方、複雑な構造を持つ文書を検索するために、特に構造化文書における兄弟関係を含む構造の検索を可能とするために、兄弟関係を木構造で表した問い合わせ木を用いることが提案されている（例えば、特許文献１参照）。つまり、特許文献１は、問い合わせ自体を木構造で表す、一種のＸＰａｔｈ拡張技術を開示している。
【特許文献１】特開２００１−１６７０８７（段落００２０乃至００２６）
【発明の開示】
【発明が解決しようとする課題】
【０００６】
ＸＭＬデータベースに格納されたＸＭＬ文書の一部をアプリケーションが必要とするときには、ＸＭＬ文書中のデータを使ってソートやフィルタリングの前処理が行われることが多い。このような場合、アプリケーションは、本来必要なデータだけでなく、前処理に用いる部分をも含めたデータを取得して、その取得されたデータを処理する必要がある。
【０００７】
ところが、前処理に用いる部分をも含めた必要最小限のデータだけをＸｐａｔｈで指定することは、一般に困難である。ここで、「“ｌａｓｔ ｎａｍｅ”（姓）が“Ｓｔｅｖｅｎｓ”（スティーブンス）である“ｂｏｏｋ”（書籍）の“ａｕｔｈｔｏｒ”（著者）の“ｆｉｒｓｔ ｎａｍｅ”（名）を、“ｐｒｉｃｅ”（書籍の値段）順に取得したい」という検索要求がある場合を想定する。また、検索対象となるＸＭＬデータベースには、３つのＸＭＬ文書が格納されており、その木構造は、後述する本発明の実施形態で参照される図７に示す３つのＸＭＬ文書１１１，１１２及び１１３と同様であるものとする。そこで、必要ならば図７を参照されたい。まず、３つのＸＭＬ文書各々の親ノード（最上位ノード）は、それぞれ「ｂｏｏｋ」である。この例では、検索要求（検索条件）が複雑であり、前処理に用いる部分をも含めた必要最小限のデータだけをＸｐａｔｈで指定することはできない。
【０００８】
そこで、上記検索要求を実行するには、３つのＸＭＬ文書に共通の親ノードである「ｂｏｏｋ」を検索対象ノードとして、その「ｂｏｏｋ」以下の全ての子孫ノードからデータを取得するための、ＸＰａｔｈの子孫ノード検索が必要となる。しかし、ＸＰａｔｈの子孫ノード検索では、データ取得の対象範囲が大きくなり、データ取得に多大な時間を要する。しかも、ＸＰａｔｈの子孫ノード検索では、検索結果を取得しても途中のパスが分からず、ＸＭＬ文書中のどの部分がヒットしたのか分からない。
【０００９】
また、検索によるノード特定後のアプリケーション側の処理として、「検索されたノードの１つ下の階層のデータ」等の、検索されたノードからの相対的な位置関係を基にしたデータ取得要求も多い。ところが、ＸＰａｔｈの子孫ノード検索では、検索されたノード周辺のパスが分からないため、検索を続けることができない。
【００１０】
一方、上記特許文献１に記載された問い合わせ木（ＸＰａｔｈ拡張技術）を適用した文書検索では、通常のＸＰａｔｈ検索と異なって兄弟関係にあるノードを検索することが可能である。しかし特許文献１に記載された問い合わせ木では、階層が異なるノードなど、兄弟関係よりも複雑な関係にあるノードを検索することはできない。したがって特許文献１に記載された技術においても、上述の前処理に用いる部分をも含めたデータの検索のためには、ＸＰａｔｈの子孫ノード検索が必要となり、データ取得の対象範囲が大きくなるという問題を解消することはできない。
【００１１】
本発明は上記事情を考慮してなされたものでその目的は、指定されたノードを基点として、構造化文書データベース内を自由に親、子または兄弟ノードへ遷移して当該データベースから目的とするノードのデータを取得することができる、構造化文書検索システム、構造化文書検索方法及びプログラムを提供することにある。
【課題を解決するための手段】
【００１２】
本発明の１つの観点によれば、構造化文書検索システムが提供される。このシステムは、構造化文書を格納する構造化文書データベースと、クライアントから、検索の基点となる基点ノードからの相対的な位置関係を指定するトラバース要求が検索要求として与えられた場合、上記構造化文書データベース内で、当該トラバース要求で指定された基点ノードから当該トラバース要求で指定された相対的な位置関係に従ってノードを辿ることによってデータを取得するトラバース処理手段とを備える。
【００１３】
このような構成の構造化文書システムにおいては、クライアントから当該システムに対して、検索の基点となる基点ノードからの相対的な位置関係を指定するトラバース要求が検索要求として与えられるだけで、当該トラバース要求で指定された基点ノードから当該トラバース要求で指定された相対的な位置関係に従って構造化文書データベース内のノードを辿ってデータを取得することができる。このように、構造化文書システムにおいては、ＸＰａｔｈに代表される問い合わせ言語では指定することができない複雑な検索条件のデータ検索を、基点ノードと当該基点ノードからの相対的な位置関係が指定されるだけで実行できる。つまり、構造化文書データベース内の全てのノードを自由に辿ることができる。
【００１４】
ここで、ＸＰａｔｈに代表される問い合わせ言語を用いた、従来から知られている検索要求、即ち検索の対象となるノードへのパスを検索条件として含むパス指定検索要求を実行する検索処理手段を追加し、パス指定検索要求とトラバース要求の両検索要求が実行可能な構成とすると良い。
【００１５】
このような構成において、クライアントは、パス指定検索要求によってターゲットとなるノードのデータを取得すると共に、当該ターゲットとなるノードの近傍のノードのデータ、つまり複雑な検索におけるソート或いはフィルタリングの条件となるノードのデータを、当該ターゲットとなるノードの近傍のノードへのパスが不明でも、トラバース要求によって簡単に取得することができる。この場合、パス指定検索要求によって検索されたノードを、トラバース要求で指定される基点ノードとすると良い。
【００１６】
また、構造化文書データベースが、複数の構造化文書を１つの仮想的な構造化文書の部分木として格納する構成とするならば、当該データベース内のノードを辿ることにより、複数の文書にまたがってデータを取得することができる。つまり、データベース内の全てのノードを親子兄弟の相対関係に基づいて自由に辿ることができるため、複数文書の横断検索や必要データのみの取り出しなど、データベース内での位置を示すパス記述を用いない検索ができる。
【発明の効果】
【００１７】
本発明によれば、クライアントから当該システムに対して、検索の基点となる基点ノードからの相対的な位置関係を指定するトラバース要求が検索要求として与えられるだけで、当該トラバース要求で指定された基点ノードから当該トラバース要求で指定された相対的な位置関係に従って構造化文書データベース内のノードを辿ることができるため、当該データベース内を自由に親、子または兄弟ノードへ遷移して当該データベースから目的とするノードのデータを取得することができる。
【発明を実施するための最良の形態】
【００１８】
以下、本発明の一実施形態につき図面を参照して説明する。  
図１は本発明の一実施形態に係るトラバース機能を持つ構造化文書検索システム１０の構成を示すブロック図である。この構造化文書検索システム１０は、構造化文書検索クライアント２０と、ローカルエリアネットワーク（ＬＡＮ）等のネットワーク２１を介して接続されている。構造化文書検索クライアント（構造化文書検索クライアント端末）２０上では、構造化文書検索システム１０を利用するアプリケーションが動作する。構造化文書検索システム１０は、ＸＭＬデータベース（ＸＭＬＤＢ）１１と、要求処理部１２と、検索処理部１３と、トラバース処理部１４と、アプリケーションインタフェース（ＡＰＩ）１５から構成される。
【００１９】
ＸＭＬＤＢ１１は、構造化文書としてのＸＭＬ文書を格納するデータベースである。要求処理部１２は、構造化文書検索クライアント２０からの検索要求を受け付ける。検索処理部１３は、要求処理部１２によって受け付けられた検索要求が、検索の対象となるノードへのパスを検索条件として含むＸＰａｔｈ検索要求（つまりパス指定検索要求）の場合に、ＸＰａｔｈに従ってＸＭＬＤＢ１１を対象とする検索処理を行う。
【００２０】
トラバース処理部１４は、要求処理部１２によって受け付けられた検索要求が、検索の基点となる基点ノードに対する相対的な位置関係を示す方向情報により当該基点ノードに対する親子兄弟いずれかのノードを検索の対象として指定するトラバース要求の場合に、ＸＭＬＤＢ１１を対象に親子兄弟関係に基づいて木構造のノードを辿る処理を行う。この処理をトラバース処理と呼ぶ。ＡＰＩ１５は、構造化文書検索クライアント２０上で動作するアプリケーションと構造化文書検索システム１０とのインタフェースをなす。なお、構造化文書検索クライアント２０が構造化文書検索システム１０とネットワークを介さずに直接接続されている場合、ＡＰＩ１５が構造化文書検索クライアント２０に設けられていても構わない。
【００２１】
要求処理部１２、検索処理部１３、トラバース処理部１４及びＡＰＩ１５は、コンピュータ、例えばデータベースサーバコンピュータにインストールされた特定のソフトウェアプログラム（例えば構造化文書データベース管理プログラム）を当該コンピュータ（内のＣＰＵ）が読み取って実行することにより実現される。このプログラムは、コンピュータで読み取り可能な記憶媒体に予め格納して頒布可能である。また、このプログラムが、ネットワークを介してダウンロード（頒布）されても構わない。
【００２２】
図２は、ＸＭＬＤＢ１１におけるＸＭＬ文書格納の概念図である。図２の例では、ＸＭＬＤＢ１１に３つのＸＭＬ文書１１１，１１２及び１１３が格納されている。ここで、ＸＭＬ文書１１１，１１２及び１１３が、いずれも、“ｂｉｂ”と呼ぶノードをルートとする木構造の部分木として格納されていることに注意されたい。つまり、ＸＭＬＤＢ１１には、木構造を有する１つの仮想的なＸＭＬ文書１１０が格納され、実際のＸＭＬ文書１１１，１１２及び１１３は当該ＸＭＬ文書１１０の部分木として管理される。“ｂｉｂ”ノードは、ＸＭＬ文書１１０の最上位ノード、つまりルートノードである。ＸＭＬ文書１１１，１１２及び１１３のうちの例えばＸＭＬ文書１１１は、当該ＸＭＬ文書１１１の最上位ノード（“ｂｏｏｋ”ノード）が“ｂｉｂ”ノードと親子関係となるように関連付けられる。ここでは、ｂｉｂ”ノードが親ノードとなり、ＸＭＬ文書１１１の最上位ノード（“ｂｏｏｋ”ノード）が子ノードとなる。このことは、“ｂｉｂ”ノードとＸＭＬ文書１１２及び１１３の最上位ノードとの間についても同様である。また、ＸＭＬ文書１１１，１１２及び１１３の各々の最上位ノードの間は兄弟関係となるように関連付けられる。ここでは、ＸＭＬ文書１１１，１１２及び１１３の順番でＸＭＬＤＢ１１に格納されるものとすると、ＸＭＬ文書１１２の最上位ノードはＸＭＬ文書１１１の最上位ノードの弟ノードに、ＸＭＬ文書１１３の最上位ノードはＸＭＬ文書１１２の最上位ノードの弟ノードになる。これにより、ＸＭＬ文書１１１，１１２及び１１３の各ノード（要素）は、ＸＭＬＤＢ１１における仮想的なＸＭＬ文書１１０の木構造のノードを構成する。
【００２３】
図３は、図２に示すＸＭＬ文書１１１，１１２及び１１３のうちのＸＭＬ文書１１１がＸＭＬＤＢ１１に格納された時点における、当該ＸＭＬＤＢ１１のデータ構造例を示す。この段階では、ＸＭＬ文書１１１はＸＭＬ文書１１０の唯一の部分木となる。図３に示されるように、ＸＭＬＤＢ１１には、ＸＭＬ文書１１０の木構造を、当該木構造を構成するノード（要素）単位で管理する構造情報テーブル３１と、当該ＸＭＬ文書１１０の各ノード（要素）の情報を管理するノード情報ブロック３２とが格納される。構造情報テーブル３１のエントリ数及びノード情報ブロック３２の数は、ＸＭＬ文書１１０のノード数に一致する。各ノードには、一意の番号であるノードＩＤが付与される。
【００２４】
構造情報テーブル３１のｉ番目（ｉ＝１，２，…）のエントリは、ノードｉのノードＩＤ（ＩＤ＝ｉ）、当該ノードｉの親ノードのノードＩＤ、当該ノードｉの兄ノードのノードＩＤ、当該ノードｉの弟ノードのノードＩＤ、及び当該ノードｉの子ノードのノードＩＤを、それぞれ設定するノードＩＤフィールド（項目）３１１、親ノードフィールド３１２、兄ノードフィールド３１３、弟ノードフィールド３１４及び子ノードフィールド３１５から構成される。つまり、構造情報テーブル３１の各エントリは、対応するノードの木構造における位置関係を示す情報を保持するのに用いられる。なお、ノードｉに、親ノード、兄ノード、弟ノードまたは子ノードが存在しない場合、構造情報テーブル３１におけるｉ番目のエントリの対応するフィールドには、該当するノードが存在しないことを示す特定の値が設定される（図３では、“−”で示されている）。
【００２５】
本実施形態では、ノードｉに子ノードが複数存在する場合、構造情報テーブル３１におけるｉ番目のエントリの子フィールド３１５には、長男のノードのノードＩＤのみが設定される。例えば、ノードＩＤが２の“ｂｏｏｋ”ノードの子ノードは、ノードＩＤが３，４，５及び６の、それぞれ“ｔｉｔｌｅ”ノード、“ａｕｔｈｏｒ”ノード、“ｐｕｂｌｉｓｈｅｒ”ノード及び“ｐｒｉｃｅ”ノードであり、ノードＩＤが３の“ｔｉｔｌｅ”ノードが長男である。この場合、構造情報テーブル３１における２番目のエントリの子ノードフィールド３１５には、“ｔｉｔｌｅ”ノードのノードＩＤ（＝３）が設定される。
【００２６】
一方、ノード情報ブロック３２は、対応するノードに固有の情報（ノード情報）を保持するのに用いられる。ここでは、ノード情報ブロック３２は、ノードＩＤと、当該ノードのタグ名と、当該ノードの値（要素値）とを保持する。なお、ノードの値のサイズは、ノード毎に大きく異なる可能性がある。そこで、ノード情報ブロック３２のサイズを一定とするために、ノードの値を当該ブロック３２から切り離して保持し、当該ブロック３２にはノードの値を保持している領域を指すポインタが保持される構成としても良い。
【００２７】
上述した構造情報テーブル３１のエントリの情報、及び当該エントリに対応するノード情報ブロック３２は、ＸＭＬ文書をＸＭＬＤＢ１１に格納する際に作成される。このように本実施形態では、ＸＭＬ文書を、テキスト形式のまま、或いはシステム独自のバイナリ形式で、ＸＭＬＤＢ１１に格納するのではないことに注意されたい。即ち本実施形態では、ＸＭＬ文書を“ｂｉｂ”ノードをルートとする木構造の部分木として、当該ＸＭＬ文書の各ノード（要素）の当該木構造における位置関係を示す情報（構造情報）と、当該ＸＭＬ文書の各ノードに固有の情報（ノード情報）とが、ＸＭＬＤＢ１１に格納される。但し、このＸＭＬ文書に関する構造情報とノード情報がＸＭＬＤＢ１１に格納されることを、説明の簡略化のために、ＸＭＬ文書がＸＭＬＤＢ１１に格納されると表現することもある。
【００２８】
図４は、図２に示すＸＭＬ文書１１１，１１２及び１１３が、当該ＸＭＬ文書１１１，１１２及び１１３の順番で全てＸＭＬＤＢ１１に格納された時点における、当該ＸＭＬＤＢ１１のデータ構造例を示す。ここでは、ＸＭＬ文書１１２及び１１３は、ＸＭＬ文書１１１と共通の木構造を有しており、当該ＸＭＬ文書１１２及び１１３の最上位ノードは“ｂｏｏｋ”ノードである。ＸＭＬ文書１１２及び１１３の“ｂｏｏｋ”ノードには、図４に示すように、ノードＩＤとして、それぞれ１４及び２６が付与されている。ここで、ノードＩＤが１４の“ｂｏｏｋ”ノードは、ノードＩＤが２の“ｂｏｏｋ”ノードの弟ノードとなり、ノードＩＤが２６の“ｂｏｏｋ”ノードは、ノードＩＤが１４の“ｂｏｏｋ”ノードの弟ノードとなる。したがって、ノードＩＤが２の“ｂｏｏｋ”ノードに対応する、構造情報テーブル３１の２番目のエントリにおける弟フィールド３１４は、弟ノードなしを示す状態“−”から（図３参照）、ノードＩＤが１４のノード（“ｂｏｏｋ”ノード）を弟ノードとして示す状態に更新される。また、ＸＭＬ文書１１２をＸＭＬ文書１１０の部分木としてＸＭＬＤＢ１１に格納する際に、構造情報テーブル３１には、当該ＸＭＬ文書１１２のノード数に一致する数のエントリ、例えば１２個のエントリが追加される。同様に、ＸＭＬ文書１１３をＸＭＬ文書１１０の部分木としてＸＭＬＤＢ１１に格納する際に、構造情報テーブル３１には、当該ＸＭＬ文書１１３のノード数に一致する数のエントリ、例えば１２個のエントリが追加される。
【００２９】
次に、図１に示す構造化文書検索システム１０における、トラバース処理を含む検索処理について、図５乃至図７を参照して説明する。なお、図５は構造化文書検索システム１０における、トラバース処理を含む検索処理の手順を示すフローチャート、図６は構造化文書検索クライアント２０と構造化文書検索システム１０との間の動作手順を示すシーケンスチャート、図７はＸＭＬ文書１１１，１１２及び１１３を木構造の部分木とする１つの仮想的なＸＭＬ文書１１０を対象とするトラバース処理の例を示す図である。
【００３０】
まず、利用者から構造化文書検索クライアント２０に対して、「“ｌａｓｔ ｎａｍｅ”が“Ｓｔｅｖｅｎｓ”である“ｂｏｏｋ”の“ａｕｔｈｔｏｒ”の“ｆｉｒｓｔ ｎａｍｅ”を、“ｐｒｉｃｅ”順に取得する」という検索（問い合わせ）が要求されたものとする。前述したように、この検索要求を満足する必要最小限のデータだけをＸＰａｔｈで指定することはできない。
【００３１】
そこで、構造化文書検索クライアント２０はまず、“ｂｏｏｋ”の“ａｕｔｈｔｏｒ”の“ｆｉｒｓｔ ｎａｍｅ”を検索するために、以下に示すＸＰａｔｈ
ＸＰａｔｈ ＝ ／ｂｉｂ／ｂｏｏｋ／ａｕｔｈｏｒ／ｆｉｒｓｔ
を生成する。クライアント２０は、このＸＰａｔｈによる検索要求（ＸＰａｔｈ検索要求）６０１を構造化文書検索システム１０に対して発行する。このＸＰａｔｈ検索要求６０１は構造化文書検索システム１０のＡＰＩ１５で受け取られて、要求処理部１２に渡される。このように本実施形態では、ＸＭＬＤＢ１１から必要なデータを検索することを要求するための問い合わせ言語としてＸＰａｔｈが用いられる。しかし、ＸＱｕｅｒｙを問い合わせ言語として用いても構わない。
【００３２】
要求処理部１２は、クライアント２０からの検索要求を受け付ける。この例のように、クライアント２０からの検索要求がＸＰａｔｈ検索要求６０１の場合、要求処理部１２は当該検索要求６０１を検索処理部１３に渡す。すると検索処理部１３は、要求処理部１２から渡された検索要求６０１で指定されるＸＰａｔｈ検索を実行する（ステップＳ１）。検索処理部１３は、このＸＰａｔｈ検索により、その検索結果（ＸＰａｔｈ検索結果）６０２として、ＸＰａｔｈで指定されたノード（つまり“ｆｉｒｓｔ”ノード）のノード情報を取得する（ステップＳ２）。ステップＳ２で取得される“ｆｉｒｓｔ”ノードのノード情報は、当該“ｆｉｒｓｔ”ノードのノードＩＤと、当該“ｆｉｒｓｔ”ノードの子ノードの値、つまり“ｆｉｒｓｔ ｎａｍｅ”を含むものとする。但し、検索された“ｆｉｒｓｔ”ノードの中には、利用者からの検索要求に合致しないノードが含まれている可能性がある。そこで、ステップＳ２で取得される“ｆｉｒｓｔ”ノードのノード情報に当該“ｆｉｒｓｔ”ノードの子ノードの値が含まれないようにしても構わない。この場合、構造化文書検索クライアント２０は、利用者からの検索要求に合致することが判明した“ｆｉｒｓｔ”ノードについてのみ、その子ノードの値（つまり“ｆｉｒｓｔ ｎａｍｅ”）を、当該“ｆｉｒｓｔ”ノードのノード情報に含まれているノードＩＤを用いて、構造化文書検索システム１０に要求すれば良い。
【００３３】
さて、図７の例では、ステップＳ２において、ＸＭＬ文書１１１，１１２及び１１３の“ｆｉｒｓｔ”ノード（つまり、ノードＩＤがそれぞれ９，２１及び３３のノード）のノード情報が取得される。図７から明らかなように、ノードＩＤ＝９の“ｆｉｒｓｔ”ノードのノード情報は、ノードＩＤ＝９の他に、その子ノードの値（つまり“ｆｉｒｓｔ ｎａｍｅ”）である“Ｗ．”を含む。また、ノードＩＤ＝２１の“ｆｉｒｓｔ”ノードのノード情報は、ノードＩＤ＝２１の他に、その子ノードの値（“ｆｉｒｓｔ ｎａｍｅ”）である“Ｗ．”を含む。また、ノードＩＤ＝３３の“ｆｉｒｓｔ”ノードのノード情報は、ノードＩＤ＝３３の他に、その子ノードの値（“ｆｉｒｓｔ ｎａｍｅ”)である“Ｄａｒｃｙ”を含む。検索処理部１３は、このＸＰａｔｈ検索結果（ＸＰａｔｈ検索結果集合）６０２としての、検索された全ノードのノード情報を、トラバース処理部１４によるトラバース処理の基点となるノードのノード情報として、要求処理部１２及びＡＰＩ１５を介して構造化文書検索クライアント２０に返す（ステップＳ３）。
【００３４】
構造化文書検索クライアント２０は、ＸＰａｔｈ検索結果６０２、即ちトラバース処理の基点となる“ｆｉｒｓｔ”ノード（つまり、ノードＩＤがそれぞれ９，２１及び３３のノード）のノード情報を受け取ると、フィルタリングの条件である“ｌａｓｔ”ノードの情報とソートの条件である“ｐｒｉｃｅ”ノードの情報とを取得するために、以下に述べるトラバース要求（トラバースコマンド）と呼ぶ特定の検索要求を利用する。トラバース要求は、現在の基点ノードのノードＩＤとトラバース方向を示す情報との対を含む。本実施形態において、トラバース要求で指定可能なトラバース方向は、親、兄、弟及び子の中から選択された１つである。つまり、トラバース要求は、現在の基点ノードから親ノード、兄ノード、弟ノードまたは子ノードへのトラバースを指示することができる。このようにトラバース要求は、ＸＭＬＤＢ１１に格納されている１つの仮想的なＸＭＬ文書１１０の論理構造を表す木構造における絶対位置の指定（パスを用いた位置指定）ではなくて、基点ノードに対する親ノード、兄ノード、弟ノードまたは子ノードといった相対位置の指定を適用する。
【００３５】
本実施形態では、構造化文書検索システム１０から構造化文書検索クライアント２０に通知される、トラバース処理の基点となるノードは、ノードＩＤがそれぞれ９，２１及び３３の“ｆｉｒｓｔ”ノードである。そこで、構造化文書検索クライアント２０は、これらのノードＩＤがそれぞれ９，２１及び３３の“ｆｉｒｓｔ”ノードを基点として、以下に述べるように構造化文書検索システム１０に対して逐次トラバース処理を要求する。
【００３６】
“ｌａｓｔ”ノードは、現在の基点ノードである“ｆｉｒｓｔ”ノードから見て兄ノードである。現在の基点ノードは、上記したようにノードＩＤがそれぞれ９，２１及び３３の“ｆｉｒｓｔ”ノードである。そこで構造化文書検索クライアント２０はまず、ノードＩＤが９の“ｆｉｒｓｔ”ノードを基点に、兄ノードへのトラバースを指示するトラバース要求（トラバースコマンド）６０３を構造化文書検索システム１０に発行する。この兄ノードへのトラバースを指示する要求を“ｇｅｔ Ｐｒｅｖｉｏｕｓ Ｓｉｂｌｉｎｇ”コマンドと呼ぶ。なお、図６では、トラバース要求によって指定される現在の基点ノードとトラバース方向が、（現在の基点ノードのノードＩＤ，トラバース方向）の形式で表されている。
【００３７】
構造化文書検索システム１０の要求処理部１２は、ＸＰａｔｈ検索結果６０２が構造化文書検索クライアント２０に返されると、構造化文書検索クライアント２０からの次の検索要求としてトラバース要求を待つ（ステップＳ４）。もし、構造化文書検索クライアント２０からトラバース要求が発行された場合（ステップＳ５）、要求処理部１２は当該トラバース要求を受け付けてトラバース処理部１４に渡す。トラバース処理部１４は、このトラバース要求を解釈して、基点ノードからのトラバース方向が、つまりトラバース要求ノードが、親ノード、兄ノード、弟ノードまたは子ノードのいずれであるかを判定する（ステップＳ６）。
【００３８】
もし、トラバース要求ノードが親ノードであるならば、トラバース処理部１４は、トラバース要求で指定された基点ノードに対応する構造情報テーブル３１内のエントリを参照し、当該エントリの親ノードフィールド３１２から当該基点ノードの親ノードのノードＩＤを取得する（ステップＳ７）。これに対し、トラバース要求ノードが兄ノードであるならば、トラバース処理部１４は、トラバース要求で指定された基点ノードに対応する構造情報テーブル３１内のエントリを参照し、当該エントリの兄ノードフィールド３１３から当該基点ノードの兄ノードのノードＩＤを取得する（ステップＳ８）。また、トラバース要求ノードが弟ノードであるならば、トラバース処理部１４は、トラバース要求で指定された基点ノードに対応する構造情報テーブル３１内のエントリを参照し、当該エントリの弟フィールド３１４から当該基点ノードの弟ノードのノードＩＤを取得する（ステップＳ９）。また、トラバース要求ノードが子ノードであるならば、トラバース処理部１４は、トラバース要求で指定された基点ノードに対応する構造情報テーブル３１内のエントリを参照し、当該エントリの子フィールド３１５から当該基点ノードの子ノードのノードＩＤを取得する（ステップＳ１０）。次にトラバース処理部１４は、取得されたノードＩＤに固有のノード情報ブロック３２を参照して、当該ノードＩＤで指定されるノードのノード情報を取得する（ステップＳ１１）。ここでは、取得されたノードＩＤのノードが値を持たず、且つ、その子ノードが値を持つ場合には、その値もノード情報として取得される。
【００３９】
構造化文書検索クライアント２０から構造化文書検索システム１０に対して発行されたトラバース要求６０３は、ノードＩＤが９の“ｆｉｒｓｔ”ノードを基点に、兄ノードへのトラバースを指示している。ノードＩＤが９の“ｆｉｒｓｔ”ノードの兄ノードは、図７において矢印７１で示されるように、ノードＩＤが８の“ｌａｓｔ”ノードである。したがってステップＳ１１では、ノードＩＤが８の“ｌａｓｔ”ノードのノード情報がトラバース処理部１４によって取得される。ここでは、ノードＩＤが８の“ｌａｓｔ”ノードの子ノード（ノードＩＤが９のノード）の値（“ｌａｓｔ ｎａｍｅ”＝“Ｓｔｅｖｅｎｓ”）も、“ｌａｓｔ”ノードのノード情報の一部として取得される。
【００４０】
トラバース処理部１４は、取得されたノード情報を、トラバース要求６０３に対するトラバース処理（検索処理）の結果（トラバース結果）６０４として、要求処理部１２及びＡＰＩ１５を介して構造化文書検索クライアント２０に返す（ステップＳ１２）。すると要求処理部１２は、構造化文書検索クライアント２０からの次のトラバース要求を待つ（ステップＳ４）。
【００４１】
トラバース結果６０４は、“Ｓｔｅｖｅｎｓ”を“ｌａｓｔ ｎａｍｅ”として含む。つまり構造化文書検索クライアント２０は、ノードＩＤが９の“ｆｉｒｓｔ”ノードを基点として、兄ノード（“ｌａｓｔ”ノード）を辿るためのトラバース要求を用いることで、フィルタリングの条件である“ｌａｓｔ”ノードの情報を取得することができる。この例では、構造化文書検索クライアント２０は、トラバース結果６０４から、ノードＩＤが９の“ｆｉｒｓｔ”ノードの兄ノード、つまりノードＩＤが８の“ｌａｓｔ”ノードが、フィルタリング条件を満たすと判定する。そこで構造化文書検索クライアント２０は、ノードＩＤが９の“ｆｉｒｓｔ”ノードを基点として、ソートの条件である“ｐｒｉｃｅ”ノードの情報を取得するために、以下に述べるトラバース要求を順に発行する。まず構造化文書検索クライアント２０は、ノードＩＤが９の“ｆｉｒｓｔ”ノードを基点に、親ノードへのトラバースを指示するトラバース要求６０５を構造化文書検索システム１０に発行する。この親ノードへのトラバースを指示する要求を“ｇｅｔ Ｐａｒｅｎｔ Ｎｏｄｅ”コマンドと呼ぶ。
【００４２】
構造化文書検索システム１０のトラバース処理部１４は、構造化文書検索クライアント２０からのトラバース要求６０５に応じて、ノードＩＤが９の“ｆｉｒｓｔ”ノードに対応する構造情報テーブル３１内の９番目のエントリを参照し、当該エントリの親フィールド３１２から当該ノードＩＤが９の“ｆｉｒｓｔ”ノードの親ノードのノードＩＤを取得する（ステップＳ６，Ｓ７）。ここでは、図７から明らかなように、ノードＩＤが９の“ｆｉｒｓｔ”ノードの親ノードは、ノードＩＤが４の“ａｕｔｈｏｒ”ノードである。したがってトラバース処理部１４は、トラバース要求６０５に応じてノードＩＤ＝４を取得する。トラバース処理部１４は、ノードＩＤ＝４に固有のノード情報ブロック３２を参照して、当該ノードＩＤ＝４で指定される“ａｕｔｈｏｒ”ノードのノード情報を取得する（ステップＳ１１）。このノードＩＤ＝４で指定される“ａｕｔｈｏｒ”ノードのノード情報は、ノードＩＤ＝４とタグ名“ａｕｔｈｏｒ”を含む。このノード情報は、トラバース要求６０５に対するトラバース結果６０６として構造化文書検索クライアント２０に返される（ステップＳ１２）。
【００４３】
構造化文書検索クライアント２０は、トラバース結果６０６を受け取ると、当該トラバース結果６０６に含まれているノードＩＤ＝４に基づき、ノードＩＤが４の“ａｕｔｈｏｒ”ノードを基点に、弟ノードへのトラバースを指示するトラバース要求６０７を構造化文書検索システム１０に発行する。この弟ノードへのトラバースを指示する要求を“ｇｅｔ Ｎｅｘｔ Ｓｉｂｌｉｎｇ”コマンドと呼ぶ。
【００４４】
構造化文書検索システム１０のトラバース処理部１４は、構造化文書検索クライアント２０からのトラバース要求６０７に応じて、ノードＩＤが４の“ａｕｔｈｏｒ”ノードに対応する構造情報テーブル３１内の４番目のエントリを参照し、当該エントリの弟フィールド３１４から当該ノードＩＤが４の“ａｕｔｈｏｒ”ノードの弟ノードのノードＩＤを取得する（ステップＳ６，Ｓ９）。ここでは、図７から明らかなように、ノードＩＤが４の“ａｕｔｈｏｒ”ノードの弟ノードは、ノードＩＤが５の“ｐｕｂｌｉｓｈｅｒ”ノードである。したがってトラバース処理部１４は、トラバース要求６０７に応じてノードＩＤ＝５を取得する。トラバース処理部１４は、ノードＩＤ＝５に固有のノード情報ブロック３２を参照して、当該ノードＩＤ＝５で指定される“ｐｕｂｌｉｓｈｅｒ”ノードのノード情報を取得する（ステップＳ１１）。このノードＩＤ＝５で指定される“ｐｕｂｌｉｓｈｅｒ”ノードのノード情報は、ノードＩＤ＝５とタグ名“ｐｕｂｌｉｓｈｅｒ”を含む。このノード情報は、トラバース要求６０７に対するトラバース結果６０８として構造化文書検索クライアント２０に返される（ステップＳ１２）。
【００４５】
構造化文書検索クライアント２０は、トラバース結果６０８を受け取ると、当該トラバース結果６０８に含まれているノードＩＤ＝５に基づき、ノードＩＤが５の“ｐｕｂｌｉｓｈｅｒ”ノードを基点に、弟ノードへのトラバースを指示するトラバース要求６０９を構造化文書検索システム１０に発行する。
【００４６】
構造化文書検索システム１０のトラバース処理部１４は、構造化文書検索クライアント２０からのトラバース要求６０９に応じて、ノードＩＤが５のノードに対応する構造情報テーブル３１内の５番目のエントリを参照し、当該エントリの弟フィールド３１４から当該ノードＩＤが５の“ｐｕｂｌｉｓｈｅｒ”ノードの弟ノードのノードＩＤを取得する（ステップＳ６，Ｓ９）。ここでは、図７から明らかなように、ノードＩＤが５の“ｐｕｂｌｉｓｈｅｒ”ノードの弟ノードは、ノードＩＤが６の“ｐｒｉｃｅ”ノードである。したがってトラバース処理部１４は、トラバース要求６０９に応じてノードＩＤ＝６を取得する。トラバース処理部１４は、ノードＩＤ＝６に固有のノード情報ブロック３２を参照して、当該ノードＩＤ＝６の“ｐｒｉｃｅ”ノードのノード情報を取得する（ステップＳ１１）。トラバース処理部１４はまた、この“ｐｒｉｃｅ”ノードの子ノードの値（つまり“ｐｒｉｃｅ”）である“６５．９５”も取得する。トラバース処理部１４は、この値を“ｐｒｉｃｅ”ノードのノード情報に含める。このノード情報は、トラバース要求６０９に対するトラバース結果６１０として構造化文書検索クライアント２０に返される（ステップＳ１２）。
【００４７】
このように構造化文書検索クライアント２０は、ノードＩＤが９の“ｆｉｒｓｔ”ノードを基点として、親ノード（“ａｕｔｈｏｒ”ノード）、当該親ノードの弟ノード（“ｐｕｂｌｉｓｈｅｒ”ノード）、当該弟ノードの弟ノード（“ｐｒｉｃｅ”ノード）と順に辿るためのトラバース要求を用いることで、ソートの条件である“ｐｒｉｃｅ”ノードの情報を取得することができる。
【００４８】
次に構造化文書検索クライアント２０は、ノードＩＤが２１の“ｆｉｒｓｔ”ノードを基点として、フィルタリングの条件である“ｌａｓｔ”ノードの情報を取得するために、以下に述べるトラバース要求６１１を構造化文書検索システム１０に発行する。このトラバース要求６１１は、ノードＩＤが２１の“ｆｉｒｓｔ”ノードを基点に、兄ノードへのトラバースを指示する。
【００４９】
構造化文書検索システム１０のトラバース処理部１４は、構造化文書検索クライアント２０からのトラバース要求６１１に応じて、ノードＩＤが２１のノードに対応する構造情報テーブル３１内のエントリを参照し、当該エントリの兄フィールド３１３から当該ノードＩＤが２１のノードの兄ノードのノードＩＤを取得する（ステップＳ６，Ｓ８）。ここでは、図７から明らかなように、ノードＩＤが２１のノードの兄ノードは、ノードＩＤが２０の“ｌａｓｔ”ノードである。したがってトラバース処理部１４は、トラバース要求６１１に応じてノードＩＤ＝２０を取得する。トラバース処理部１４は、ノードＩＤ＝２０に固有のノード情報ブロック３２を参照して、当該ノードＩＤ＝２０の“ｌａｓｔ”ノードのノード情報を取得する（ステップＳ１１）。またトラバース処理部１４は、この“ｌａｓｔ”ノードの子ノードの値（つまり“ｌａｓｔ ｎａｍｅ”）である“Ｓｔｅｖｅｎｓ”も取得する。トラバース処理部１４は、この値を“ｌａｓｔ”ノードのノード情報に含める。このノード情報は、トラバース要求６１１に対するトラバース結果６１２として構造化文書検索クライアント２０に返される（ステップＳ１２）。
【００５０】
上記したようにトラバース結果６１２は、“Ｓｔｅｖｅｎｓ”を“ｌａｓｔ ｎａｍｅ”として含む。つまり構造化文書検索クライアント２０は、ノードＩＤが２１の“ｆｉｒｓｔ”ノードを基点として、兄ノード（“ｌａｓｔ”ノード）を辿るためのトラバース要求を用いることで、フィルタリングの条件である“ｌａｓｔ”ノードの情報を取得することができる。この例では、構造化文書検索クライアント２０は、トラバース結果６１２から、ノードＩＤが２１の“ｆｉｒｓｔ”ノードの兄ノード、つまりノードＩＤが２２の“ｌａｓｔ”ノードが、フィルタリング条件を満たすと判定する。そこで構造化文書検索クライアント２０は、ノードＩＤが２１の“ｆｉｒｓｔ”ノードを基点として、ソートの条件である“ｐｒｉｃｅ”ノードの情報を取得するために、以下に述べるトラバース要求を順に発行する。まず構造化文書検索クライアント２０は、ノードＩＤが２１の“ｆｉｒｓｔ”ノードを基点に、親ノードへのトラバースを指示するトラバース要求６１３を構造化文書検索システム１０に発行する。
【００５１】
構造化文書検索システム１０のトラバース処理部１４は、構造化文書検索クライアント２０からのトラバース要求６１３に応じて構造情報テーブル３１を参照することにより、先のトラバース要求６０５と同様にして、ノードＩＤが２１の“ｆｉｒｓｔ”ノードの親ノードのノードＩＤを取得する（ステップＳ６，Ｓ７）。ノードＩＤが２１の“ｆｉｒｓｔ”ノードの親ノードは、図７において矢印７２で示されるように、ノードＩＤが１６の“ａｕｔｈｏｒ”ノードである。したがってトラバース処理部１４は、トラバース要求６１３に応じてノードＩＤ＝１６を取得する。そしてトラバース処理部１４は、ノードＩＤ＝１６で指定される“ａｕｔｈｏｒ”ノードのノード情報を取得する（ステップＳ１１）。この“ａｕｔｈｏｒ”ノードのノード情報は、ノードＩＤ＝１６とタグ名“ａｕｔｈｏｒ”を含む。このノード情報は、トラバース要求６１３に対するトラバース結果６１４として構造化文書検索クライアント２０に返される（ステップＳ１２）。
【００５２】
構造化文書検索クライアント２０は、トラバース結果６１４を受け取ると、当該トラバース結果６１４に含まれているノードＩＤ＝１６に基づき、ノードＩＤが１６の“ａｕｔｈｏｒ”ノードを基点に、弟ノードへのトラバースを指示するトラバース要求６１５を構造化文書検索システム１０に発行する。構造化文書検索システム１０のトラバース処理部１４は、構造化文書検索クライアント２０からのトラバース要求６１５に応じて構造情報テーブル３１を参照することにより、先のトラバース要求６０７と同様にして、ノードＩＤが１６の“ａｕｔｈｏｒ”ノードの弟ノードのノードＩＤを取得する（ステップＳ６，Ｓ９）。ノードＩＤが１６の“ａｕｔｈｏｒ”ノードの弟ノードは、図７において矢印７３で示されるように、ノードＩＤが１７の“ｐｕｂｌｉｓｈｅｒ”ノードである。したがってトラバース処理部１４は、トラバース要求６１５に応じてノードＩＤ＝１７を取得する。そしてトラバース処理部１４は、ノードＩＤ＝１７で指定される“ｐｕｂｌｉｓｈｅｒ”ノードのノード情報を取得する（ステップＳ１１）。この“ｐｕｂｌｉｓｈｅｒ”ノードのノード情報は、ノードＩＤ＝１７とタグ名“ｐｕｂｌｉｓｈｅｒ”を含む。このノード情報は、トラバース要求６１５に対するトラバース結果６１６として構造化文書検索クライアント２０に返される（ステップＳ１２）。
【００５３】
構造化文書検索クライアント２０は、トラバース結果６１６を受け取ると、当該トラバース結果６１６に含まれているノードＩＤ＝１７に基づき、ノードＩＤが１７の“ｐｕｂｌｉｓｈｅｒ”ノードを基点に、弟ノードへのトラバースを指示するトラバース要求６１７を構造化文書検索システム１０に発行する。構造化文書検索システム１０のトラバース処理部１４は、構造化文書検索クライアント２０からのトラバース要求６１７に応じて構造情報テーブル３１を参照することにより、先のトラバース要求６０９と同様にして、ノードＩＤが１７の“ｐｕｂｌｉｓｈｅｒ”ノードの弟ノードのノードＩＤを取得する（ステップＳ６，Ｓ９）。ノードＩＤが１７の“ｐｕｂｌｉｓｈｅｒ”ノードの弟ノードは、図７において矢印７４で示されるように、ノードＩＤが１８の“ｐｒｉｃｅ”ノードである。したがってトラバース処理部１４は、トラバース要求６１７に応じてノードＩＤ＝１８を取得する。そしてトラバース処理部１４は、ノードＩＤ＝１８の“ｐｒｉｃｅ”ノードのノード情報を取得する（ステップＳ１１）。トラバース処理部１４はまた、この“ｐｒｉｃｅ”ノードの子ノードの値（つまり“ｐｒｉｃｅ”）である“８５．９５”も取得する。トラバース処理部１４は、この値を“ｐｒｉｃｅ”ノードのノード情報に含める。このノード情報は、トラバース要求６１７に対するトラバース結果６１８として構造化文書検索クライアント２０に返される（ステップＳ１２）。
【００５４】
このように構造化文書検索クライアント２０は、ノードＩＤが２１の“ｆｉｒｓｔ”ノードを基点として、親ノード（“ａｕｔｈｏｒ”ノード）、当該親ノードの弟ノード（“ｐｕｂｌｉｓｈｅｒ”ノード）、当該弟ノードの弟ノード（“ｐｒｉｃｅ”ノード）と順に辿るためのトラバース要求を用いることで、ソートの条件である“ｐｒｉｃｅ”ノードの情報を取得することができる。
【００５５】
次に構造化文書検索クライアント２０は、ノードＩＤが３３の“ｆｉｒｓｔ”ノードを基点として、フィルタリングの条件である“ｌａｓｔ”ノードの情報を取得するために、以下に述べるトラバース要求６１９を構造化文書検索システム１０に発行する。このトラバース要求６１９は、ノードＩＤが３３の“ｆｉｒｓｔ”ノードを基点に、兄ノードへのトラバースを指示する。
【００５６】
構造化文書検索システム１０のトラバース処理部１４は、構造化文書検索クライアント２０からのトラバース要求６１９に応じて構造情報テーブル３１を参照することにより、先のトラバース要求６０３と同様にして、ノードＩＤが３３の“ｆｉｒｓｔ”ノードの兄のノードＩＤを取得する（ステップＳ６，Ｓ８）。ここでは、図７から明らかなように、ノードＩＤが３３のノードの兄ノードは、ノードＩＤが３２の“ｌａｓｔ”ノードである。したがってトラバース処理部１４は、トラバース要求６１９に応じてノードＩＤ＝３２を取得する。トラバース処理部１４は、ノードＩＤ＝３２に固有のノード情報ブロック３２を参照して、当該ノードＩＤ＝３２の“ｌａｓｔ”ノードのノード情報を取得する（ステップＳ１１）。またトラバース処理部１４は、この“ｌａｓｔ”ノードの子ノードの値（つまり“ｌａｓｔ ｎａｍｅ”）である“Ｇｅｒｂｅｒｇ”も取得する。トラバース処理部１４は、この値を“ｌａｓｔ”ノードのノード情報に含める。このノード情報は、トラバース要求６１９に対するトラバース結果６２０として構造化文書検索クライアント２０に返される（ステップＳ１２）。
【００５７】
このように、トラバース結果６２０は、“Ｇｅｒｂｅｒｇ”を“ｌａｓｔ ｎａｍｅ”として含む。つまりトラバース結果６２０は、“Ｓｔｅｖｅｎｓ”を“ｌａｓｔ ｎａｍｅ”として含んでいない。この場合、構造化文書検索クライアント２０は、トラバース結果６２０から、ノードＩＤが３３の“ｆｉｒｓｔ”ノードの兄ノード、つまりノードＩＤが３２の“ｌａｓｔ”ノードが、フィルタリング条件を満たしていないと判定する。そこで構造化文書検索クライアント２０は、トラバース要求の発行を終了する。構造化文書検索システム１０の要求処理部１２は、トラバース要求の待ち状態となってから（ステップＳ４）、例えば一定期間を超えて構造化文書検索クライアント２０からトラバース要求が発行されない場合（ステップＳ５）、構造化文書検索システム１０におけるトラバース処理を終了する。なお、構造化文書検索クライアント２０から処理の終了が通知された場合にも、要求処理部１２は構造化文書検索システム１０におけるトラバース処理を終了する。
【００５８】
このように本実施形態においては、ＸＰａｔｈを用いた検索の結果（ＸＰａｔｈ検束結果）で示される全てのノードの各々について、そのノードを基点として、ＸＭＬＤＢ１１内で１つの仮想的なＸＭＬ文書１１０の部分木として管理されている、実際のＸＭＬ文書の木構造上で、親子兄弟ノードを自由に辿るトラバース処理を実現できる。このトラバース処理により、ソートやフィルタリング処理に必要な最小限のデータのみの検索が可能である。
【００５９】
また、実際のＸＭＬ文書、即ちＸＭＬ文書１１１，１１２及び１１３は、ＸＭＬＤＢ１１内では、図４及び図７からも明らかなように、１つの仮想的なＸＭＬ文書１１０の部分木として管理される。したがって、上述したＸＭＬ文書１１１，１１２及び１１３の各々の木構造（部分木）内だけでなく、図７において矢印７５乃至７８で示されるように、ＸＰａｔｈ検索によって特定された基点ノード（ここでは、ノードＩＤが３３の“ｆｉｒｓｔ”ノード）を基点に、トラバース処理によって文書から文書へと辿ることができる。つまり、１つの仮想的なＸＭＬ文書１１０の部分木として管理される複数の実ＸＭＬ文書に渡る横断的な検索を行うことができる。この図７の例では、ＸＭＬ文書１１３の“ｂｏｏｋ”ノードから“ｂｉｂ”ノードを介してＸＭＬ文書１１２の“ｂｏｏｋ”ノードを辿る様子が示されている。しかし、ＸＭＬ文書１１３の“ｂｏｏｋ”ノードから兄ノードへのトラバースを要求することで、ＸＭＬ文書１１３の“ｂｏｏｋ”ノードからＸＭＬ文書１１２の“ｂｏｏｋ”ノードを直接辿ることもできる。
【００６０】
ところで、ＸＭＬには、“タグ”（要素）の“属性”という概念がある。この“属性”（属性ノード）は、ＸＭＬまたはＤＯＭ（Document Object Model）の分野では、通常、“タグ”（タグノード）と異なって、親子兄弟といった関係とは切り離される。しかし、例えば図２に示したような以下のＸＭＬ文書
＜ｂｏｏｋ  ｙｅａｒ＝“１９６５”＞
＜ｔｉｔｌｅ＞……＜／ｔｉｔｌｅ＞
＜ａｕｔｈｏｒ＞……＜／ａｕｔｈｏｒ＞
：
において、“ｂｏｏｋ”ノードの属性である“ｙｅａｒ”ノードも、“ｔｉｔｌｅ”ノードや“ａｕｔｈｏｒ”ノードといったタグノードと同様に、“ｂｏｏｋ”ノードの子ノードの１つと考えることができる。そこで、属性ノードを、当該属性ノードに対応するタグノードの子ノード（例えば長男のノード）と見なすことにより、当該属性ノードもタグノードと全く同様に扱うことができる。
【００６１】
上記実施形態では、説明を簡略化するために、ＸＭＬ文書１１１，１１２及び１１３の木構造が共通であることを前提としている。しかし本実施形態におけるトラバース処理では、現在の基点ノードに対する、親ノード、子ノードといった相対的な位置情報で、トラバース先（検索対象）が指定されるため、パスの記述を意識することなく縦横にＸＭＬＤＢ１１を走査することができる。そのため、ＸＭＬ文書１１１，１１２及び１１３の木構造が共通でなく、パスが不明であっても、ＸＰｓｔｈ検索で検索されたノードの近傍の検索を行うことができる。
【００６２】
また上記実施形態では、構造化文書検索クライアント２０から構造化文書検索システム１０に対して逐次トラバース要求が発行される。しかし、ＸＭＬ文書１１１，１１２及び１１３の木構造が構造化文書検索クライアント２０側で予め分かっている場合には、
構造化文書検索クライアント２０から構造化文書検索システム１０に対し、更に具体的に述べるならば構造化文書検索クライアント２０からＡＰＩ１５に対し、１回だけトラバース要求が発行される構成とすることも可能である。ここでは、ＸＰａｔｈ検索（ＸＱｕｅｒｙ検索）で検索されたノードのノードＩＤを基点ノードのノードＩＤとし、当該基点ノードのノードＩＤと、当該基点ノードを基点としてＸＭＬＤＢ１１内を辿る方向の組み合わせだけを、トラバース要求によって構造化文書検索クライアント２０からＡＰＩ１５に通知すれば良い。以後、ＡＰＩ１５が、構造化文書検索クライアント２０からのトラバース要求に従って、上記実施形態におけるトラバース要求６０３，６０５及び６０７等に相当するトラバース要求を逐次要求処理部１２に発行すれば良い。
【００６３】
上記実施形態では、ＸＭＬ文書１１１，１１２及び１１３の最上位ノード（“ｂｏｏｋ”ノード）が、仮想的なＸＭＬ文書１１０の最上位ノード（“ｂｉｂ”ノード）の子ノードとして管理される。しかし、ＸＭＬＤＢ１１に格納される実際のＸＭＬ文書を、例えば文書種類毎に分類し、その文書種類に固有のノードを“ｂｉｂ”ノードの子ノードとして管理すると共に、その文書種類に属するＸＭＬ文書の最上位ノードを、その文書種類に固有のノードの子ノードとして管理しても良い。このようにすると、同一の文書種類に属する複数のＸＭＬ文書の横断検索をより効率的に行うことができる。更に、文書種類を、例えば大分類、中分類及び小分類に分け、それぞれ対応する大分類ノード、中分類ノード及び小分類ノードを用意しても良い。この場合、ＸＭＬ文書を、“ｂｉｂ”ノード−大分類ノード−中分類ノード−小分類ノード−ＸＭＬ文書の最上位ノードといった木構造の部分木として管理できる。
【００６４】
なお、本発明は、上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合せにより種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除しても良い。
【図面の簡単な説明】
【００６５】
【図１】本発明の一実施形態に係るトラバース機能を持つ構造化文書検索システム１０の構成を示すブロック図。
【図２】ＸＭＬＤＢ１１におけるＸＭＬ文書格納の概念図。
【図３】図２に示すＸＭＬ文書１１１，１１２及び１１３のうちのＸＭＬ文書１１１がＸＭＬＤＢ１１に格納された時点における、当該ＸＭＬＤＢ１１のデータ構造例を示す図。
【図４】図２に示すＸＭＬ文書１１１，１１２及び１１３が、当該ＸＭＬ文書１１１，１１２及び１１３の順番で全てＸＭＬＤＢ１１に格納された時点における、当該ＸＭＬＤＢ１１のデータ構造例を示す図。
【図５】構造化文書検索システム１０における、トラバース処理を含む検索処理の手順を示すフローチャート。
【図６】構造化文書検索クライアント２０と構造化文書検索システム１０との間の動作手順を示すシーケンスチャート。
【図７】ＸＭＬ文書１１１，１１２及び１１３を木構造の部分木とする１つの仮想的なＸＭＬ文書１１０を対象とするトラバース処理の例を示す図。
【符号の説明】
【００６６】
１０…構造化文書検索システム、１１…ＸＭＬＤＢ（ＸＭＬデータベース、構造化文書データベース）、１２…要求処理部、１３…検索処理部、１４…トラバース処理部、１５…ＡＰＩ（アプリケーションインタフェース）、２０…構造化文書検索クライアント、３１…構造情報テーブル、３２…ノード情報ブロック。
【図１】
2006127229.tif 000003
【図２】
2006127229.tif 000004
【図３】
2006127229.tif 000005
【図４】
2006127229.tif 000006
【図５】
2006127229.tif 000007
【図６】
2006127229.tif 000008
【図７】
2006127229.tif 000009