(57)【特許請求の範囲】
【請求項１】
複数のノードを含む階層構造の構造化文書を格納するデータベースを有し、クライアント端末からの構造化文書問い合わせ命令に従って、前記データベースから当該問い合わせ命令によって指定される条件に合致する構造化文書のノードを含む新たな形式の文書を取得する構造化文書検索システムにおいて、
前記構造化文書問い合わせ命令を解析する解析手段であって、前記構造化文書問い合わせ命令に、当該問い合わせ命令によって指定される条件に合致する目的の構造化文書のノードの前記データベースにおける相対的な格納位置を示す格納位置情報を当該問い合わせ命令に対する結果の中に埋め込むことを指定する特別の指定情報が含まれているかを解析する解析手段と、
前記構造化文書問い合わせ命令に前記特別の指定情報が含まれている場合に、当該問い合わせ命令によって指定される条件に合致する目的の構造化文書のノードの前記データベースにおける相対的な格納位置を示す格納位置情報を取得する格納位置情報取得手段と、
前記構造化文書問い合わせ命令に対する結果を、当該問い合わせ命令を発行したクライアント端末に返す結果出力手段であって、前記構造化文書問い合わせ命令に前記特別の指定情報が含まれている場合、前記格納位置情報取得手段によって取得された格納位置情報が埋め込まれた前記構造化文書問い合わせ命令に対する結果を返す結果出力手段と
を具備することを特徴とする構造化文書検索システム。
【請求項２】
前記データベースは、当該データベースに格納されている構造化文書に含まれる文字列、数値または文書構造毎に、当該文字列、数値または文書構造を含むノードの各々の前記格納位置情報を含む索引データを格納しており、
前記格納位置情報取得手段は、前記目的の構造化文書のノードの前記格納位置情報を前記データベースに格納されている索引データから取得する
ことを特徴とする請求項１記載の構造化文書検索システム。
【請求項３】
前記特別の指定情報は、前記目的の構造化文書のノードの前記格納位置情報が埋め込まれるべき当該問い合わせ命令に対する結果中の位置を指定し、
前記結果出力手段は、前記特別の指定情報によって指定された位置に前記目的の構造化文書のノードの前記格納位置情報が埋め込まれた前記構造化文書問い合わせ命令に対する結果を返す
ことを特徴とする請求項１記載の構造化文書検索システム。
【請求項４】
前記特別の指定情報は、前記構造化文書問い合わせ命令に対する結果に埋め込まれるべき前記目的の構造化文書のノードの前記格納位置情報の形式を指定し、
前記結果出力手段は、前記特別の指定情報によって指定された形式で前記目的の構造化文書のノードの前記格納位置情報が埋め込まれた前記構造化文書問い合わせ命令に対する結果を返す
ことを特徴とする請求項１記載の構造化文書検索システム。
【請求項５】
前記構造化文書問い合わせ命令に、構造化文書のノードの前記格納位置情報が含まれている場合に、当該格納位置情報によって特定される構造化文書のノードを前記データベースから取得するノード取得手段を更に具備し、
前記結果出力手段は、前記ノード取得手段によって取得された構造化文書のノードに対応する情報を含む結果を、前記格納位置情報を含む前記構造化文書問い合わせ命令を発行したクライアント端末に返す
ことを特徴とする請求項１記載の構造化文書検索システム。
【請求項６】
クライアント端末からの構造化文書問い合わせ命令に従って、複数のノードを含む階層構造の構造化文書を格納するデータベースから当該問い合わせ命令によって指定される条件に合致する構造化文書のノードを含む新たな形式の文書を取得するデータベースサーバコンピュータに、
前記構造化文書問い合わせ命令を解析するステップであって、前記構造化文書問い合わせ命令に、当該問い合わせ命令によって指定される条件に合致する目的の構造化文書のノードの前記データベースにおける相対的な格納位置を示す格納位置情報を当該問い合わせ命令に対する結果の中に埋め込むことを指定する特別の指定情報が含まれているかを解析するステップと、
前記構造化文書問い合わせ命令に前記特別の指定情報が含まれている場合に、当該問い合わせ命令によって指定される条件に合致する目的の構造化文書のノードの前記データベースにおける相対的な格納位置を示す格納位置情報を取得するステップと、
前記構造化文書問い合わせ命令に対する結果を、当該問い合わせ命令を発行したクライアント端末に返すステップであって、前記構造化文書問い合わせ命令に前記特別の指定情報が含まれている場合、前記取得された格納位置情報が埋め込まれた前記構造化文書問い合わせ命令に対する結果を返すステップと
を実行させるためのプログラム。
【請求項７】
前記データベースは、当該データベースに格納されている構造化文書に含まれる文字列、数値または文書構造毎に、当該文字列、数値または文書構造を含むノードの各々の前記格納位置情報を含む索引データを格納しており、
前記取得するステップでは、前記目的の構造化文書のノードの前記格納位置情報が前記データベースに格納されている索引データから取得される
ことを特徴とする請求項６記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、構造化文書を格納するデータベースからクライアント端末により要求された構造化文書の少なくとも一部を取得するのに好適な構造化文書検索システム及びプログラムに関する。
【背景技術】
【０００２】
近年、ＸＭＬ（Extensible Markup Language）形式の文書（ＸＭＬ文書）やＨＴＭＬ（HyperText Markup Language）形式の文書（ＨＴＭＬ文書）のような構造化文書が登録されたデータベースが出現している。このようなデータベースは、構造化文書データベースと呼ばれる。構造化文書は、意味的な構造、あるいは表示のための構造を持つ文書として知られている。ＸＭＬでは、タグと呼ばれる文字列で階層的な構造が表現される。ＸＭＬ形式の構造化文書、つまりＸＭＬ文書において、１組のタグ（開始タグ及び終了タグの組）で囲まれた部分はノードと呼ばれ、当該ＸＭＬ文書の一部分をなす。
【０００３】
さて、ＸＭＬの普及に伴い、リレーショナルデータベースにおけるＳＱＬ（Structured Query Language）のような、ＸＭＬデータベースを管理するサーバ（データベースサーバ）に問い合わせを行うための問い合わせ言語（検索言語）が検討もしくは策定されている。このような問い合わせ言語の１つとして、ＷＷＷ（World Wide Web）コンソーシアムで策定されているＸＱｕｅｒｙが知られている。
【０００４】
例えば、特許文献１は、ＸＱｕｅｒｙのような構造化文書問い合わせ言語（つまり構造化文書問い合わせ命令）を適用する構造化文書検索システムを開示している。このようなシステムでは、ＸＱｕｅｒｙを用いたデータベースサーバへの問い合わせの結果として、構造化文書データベースから構造化文書の一部、全体、または、構造化文書の複数部分を含む新たな形式の構造化文書が取得される。
【０００５】
また、例えばデータベースサーバ上で動作するデータベース管理システム（Database Management System: ＤＢＭＳ）を始めとする、大規模な検索処理を行うシステムにおいては、上記特許文献１にも記載されているように、予め作成された索引（インデックス）を用いて検索速度を向上させる手法を適用するのが一般的である。
【特許文献１】特開２００５−２２７８５１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
上記したように、構造化文書問い合わせ命令（構造化文書問い合わせ言語）を適用する従来の構造化文書検索システム（従来の技術）では、当該問い合わせ命令によるデータベースサーバ（データベースサーバ上のＤＢＭＳ）への問い合わせに対して、構造化文書データベースから構造化文書の少なくとも一部を含む新たな形式の構造化文書が当該問い合わせ命令に対する結果（検索結果）として取得される。
【０００７】
しかしながら、従来の技術においては、検索結果として取得される構造化文書の部分を直接特定する手段（例えば、格納位置を直接示す手段）が存在しない。そこで従来の技術では、検索結果中の情報を用いて新たにデータベースサーバ上のＤＢＭＳへ変更或いは更新等を要求する場合に、１度目と同様の検索または場合によっては１度目よりも複雑な検索を行って、変更或いは更新等が必要な位置を特定する必要がある。このため従来の技術においては、データベースサーバに負荷がかかり、余分に検索処理を行う分、結果を取得するのに時間を要する。
【０００８】
本発明は上記事情を考慮してなされたものでその目的は、構造化文書問い合わせ命令に対する結果として取得される構造化文書の一部分を特定する情報を当該結果中に含めることができる構造化文書検索システム及びプログラムを提供することにある。
【課題を解決するための手段】
【０００９】
本発明の１つの観点によれば、構造化文書を格納するデータベースを有し、クライアント端末からの構造化文書問い合わせ命令に従って、前記データベースから当該問い合わせ命令によって指定される条件に合致する構造化文書の一部、全体または構造化文書の複数部分を含む新たな形式の文書を取得する構造化文書検索システムが提供される。このシステムは、前記構造化文書問い合わせ命令を解析する解析手段であって、前記構造化文書問い合わせ命令に、当該問い合わせ命令によって指定される条件に合致する目的の構造化文書の一部分を特定する情報を当該問い合わせ命令に対する結果の中に埋め込むことを指定する特別の指定情報が含まれているかを解析する解析手段と、前記構造化文書問い合わせ命令に前記特別の指定情報が含まれている場合に、当該問い合わせ命令によって指定される条件に合致する目的の構造化文書の一部分を特定する情報を取得する特定情報取得手段と、前記構造化文書問い合わせ命令に対する結果を、当該問い合わせ命令を発行したクライアント端末に返す結果出力手段であって、前記構造化文書問い合わせ命令に前記特別の指定情報が含まれている場合、前記特定情報取得手段によって取得された情報が埋め込まれた前記構造化文書問い合わせ命令に対する結果を返す結果出力手段とを具備する。
【発明の効果】
【００１０】
本発明によれば、構造化文書問い合わせ命令に特別の指定情報が含まれている場合に、当該問い合わせ命令によって指定される条件に合致する目的の構造化文書の一部分を特定する情報を取得して、当該取得された特定する情報が埋め込まれた結果を当該問い合わせ命令を発行したクライアント端末に返すことができる。このため、クライアント端末に返された結果中の特定する情報を利用して新たな構造化文書問い合わせ命令を発行するならば、当該特定する情報に基づいて、構造化文書の一部分を効率的に取得することができ、高速で且つデータベースサーバへの負荷が低い検索処理が可能になる。
【発明を実施するための最良の形態】
【００１１】
以下、本発明の実施の形態につき図面を参照して説明する。  
図１は本発明の一実施形態に係る構造化文書検索システムを含むクライアント−サーバシステムの構成を示すブロック図である。クライアント−サーバシステムは、主として、データベースサーバ（データベースサーバコンピュータ）１０と、複数のクライアント端末とから構成される。複数のクライアント端末はクライアント端末２０を含む。クライアント端末２０上では、データベースサーバ１０を利用するクライアントソフトウェア２１が動作する。クライアント端末２０を含む複数のクライアント端末は、ローカルエリアネットワーク（ＬＡＮ）のようなネットワーク３０を介してデータベースサーバ１０と接続されている。なお、図１にはクライアント端末２０以外のクライアント端末は省略されている。
【００１２】
データベースサーバ１０は、ハードディスクドライブのような２次記憶装置４０と接続されている。データベースサーバ１０及び２次記憶装置４０は構造化文書検索システム５０を構成する。２次記憶装置４０はデータベース４１を格納する。データベース４１は、例えば構造化文書の１つであるＸＭＬ形式の文書（ＸＭＬ文書）を保存する構造化文書データベース（ＸＭＬ文書データベース）である。本実施形態において、データベース４１を識別するための情報、例えば名前（データベース名）は、“書籍データベース”である。図１では、作図の都合上、２次記憶装置４０には１つのデータベース４１だけが格納されている。しかし、２次記憶装置４０に複数のデータベースが格納されていても構わない。
【００１３】
図２はデータベース４１のデータ構造例を示す。本実施形態において、データベース４１は２次記憶装置４０に格納される一種のファイル（書籍データベースファイル）として管理される。データベース４１は、ＸＭＬ文書部４１１と索引部４１２とから構成される。ＸＭＬ文書部４１１には、複数のＸＭＬ文書が格納されている。本実施形態では、ＸＭＬ文書部４１１をデータベース（ＸＭＬ文書データベース）と呼ぶこともある。
【００１４】
ＸＭＬ文書部４１１に格納されるＸＭＬ文書（“書籍データベース”という名前のデータベース）の一例を図３に示す。図３の例では、ｂｏｏｋｓノードの直下（１つ下位の階層）に、３つのｂｏｏｋノードが存在する。各ｂｏｏｋノードの直下には、いずれも、ｔｉｔｌｅノード、ａｕｔｈｏｒノード及びｔａｂｌｅｏｆｃｏｎｔｅｎｔｓノード（目次ノード）が存在する。
【００１５】
再び図２を参照すると、索引部４１２には、ＸＭＬ文書部４１１に格納されているＸＭＬ文書に含まれている文字列（語彙）毎に、当該文字列を含むノードの各々を特定する索引データ（文字列索引データ）、例えば当該文字列を含むノードの各々の格納位置を示す索引データが格納される。ここで、各ノードの格納位置を示す索引データには、データベース４１における当該ノードの相対的な格納位置（つまりオフセット）の情報が用いられる。図２の例では、索引部４１２に格納される索引データは、タイトルＡという文字列を含むノードのデータベース４１におけるオフセットの一覧（オフセット一覧）、タイトルＢという文字列を含むノードのオフセットの一覧、タイトルＣという文字列を含むノードのオフセットの一覧、著者Ｘという文字列を含むノードのオフセットの一覧、及び著者Ｙという文字列を含むノードのオフセットの一覧等を有する。なお、各ノードの格納位置の情報として、２次記憶装置４０における格納位置を示す情報を用いることも可能である。また上述の索引データ（文字列索引データ）に限らず、ＸＭＬ文書部４１１に格納されているＸＭＬ文書に含まれている数値または文書構造毎に、当該数値または文書構造を含むノードの各々を特定する索引データ（数値索引データまたは構造索引データ）を用いることも可能である。
【００１６】
図１において、データベースサーバ１０は、当該サーバ１０上で動作するデータベース管理システム（ＤＢＭＳ）１１を含む。本実施形態において、ＤＢＭＳ１１は、データベースサーバ（データベースサーバコンピュータ）１０が特定のプログラム（データベース管理プログラム）を読み取って実行することによって実現される。このプログラムは、コンピュータ読み取り可能な記憶媒体に予め格納して頒布可能である。また、このプログラムが、ネットワーク３０を介してデータベースサーバ１０にダウンロードされても構わない。
【００１７】
ＤＢＭＳ１１は、クライアント端末２０からの構造化文書問い合わせ（構造化文書問い合わせ命令）を実行するクエリエンジン１１０を含む。クエリエンジン１１０は、解析部１２０とオペレータ実行部１３０と結果出力部１４０から構成される。
【００１８】
解析部１２０は、クライアント端末２０からの構造化文書問い合わせ命令を解析し、その解析結果に応じてオペレータ実行部１３０を動作させる。解析部１２０は、問い合わせ命令に対する結果を生成する結果生成部１２１を含む。結果生成部１２１によって生成される結果は、オペレータ実行部１３０を動作させることにより取得される、問い合わせ命令の指定する条件に合致する構造化文書の一部、全体または構造化文書の複数部分を含む新たな形式の文書を含む。なお、結果生成部１２１が解析部１２０から独立して設けられていても構わない。
【００１９】
オペレータ実行部１３０は、解析部１２０の解析結果に応じた動作を行うのに必要な複数のオペレータを含む。即ちオペレータ実行部１３０は、索引サーチ部１３１、ドキュメントサーチ部１３２、マージ部１３３、位置取得部１３４、ノード取得部１３５及びドキュメント読込部１３６等の各種オペレータを含む。
【００２０】
索引サーチ部１３１は、解析部１２０により解析された文字列を含むノードの各々を特定するための情報の一覧、例えば当該各ノードのデータベース４１における相対的な格納位置（オフセット）を示す情報の一覧（つまりオフセットの一覧）をデータベース４１の索引部４１２から検索することで、当該文字列を含むノード（ＸＭＬ文書）を検索する。ドキュメントサーチ部１３２は、解析部１２０により解析された文字列を含むＸＭＬ文書（ドキュメント）をデータベース４１のＸＭＬ文書部４１１から検索する。
【００２１】
マージ部１３３は、検索結果をマージする。マージ部１３３の動作の具体例を挙げる。例えば、クライアント端末２０からの問い合わせに従い、文字列”abc”及び”def”の少なくとも一方を含むＸＭＬ文書を検索するものとする。この場合、索引サーチ部１３１により、文字列”abcを含むＸＭＬ文書群が検索される。同様に索引サーチ部１３１により、文字列”def”を含むＸＭＬ文書群が検索される。マージ部１３３は、索引サーチ部１３１による２回の検索で取得されたＸＭＬ文書群を、文字列”abc”及び”def”の少なくとも一方を含むＸＭＬ文書群としてマージする。
【００２２】
位置取得部１３４は、解析部１２０により解析された文字列を含む各ノードを特定するための情報を取得する特定情報取得手段である。ここでは位置取得部１３４は、解析部１２０により解析された文字列を含む各ノードの格納位置（データベース内のオフセット）を示す文字列を取得する。ノード取得部１３５は、解析部１２０により解析されたオフセット（格納位置）の情報に従って、そのオフセット位置のノード（ＸＭＬ文書の一部分）の情報を取得する構造化文書部分取得手段である。ドキュメント読込部１３６は、解析部１２０により解析されたオフセット位置のＸＭＬ文書（ドキュメント）をデータベース４１から読み込む。結果出力部１４０は、結果生成部１２１によって生成された問い合わせに対する結果を問い合わせ元に返す。
【００２３】
次に本実施形態の動作について説明する。まず、クライアント端末２０上で動作するクライアントソフトウェア２１に従って当該クライアント端末２０からデータベースサーバ１０のＤＢＭＳ１１に対し、例えばＸＱｕｅｒｙを用いた構造化文書問い合わせ（問い合わせ命令）が発行されたものとする。この問い合わせ（１度目の問い合わせ）の一例を図４に示す。
【００２４】
図４において、問い合わせの１行目の文字列「for $b in fn:doc ("書籍データベース.xml")/books/book」は、書籍データベース（書籍データベース.xml）という名前のデータベースファイル（ドキュメント）におけるｂｏｏｋｓノードの直下（１つ下位の階層）のｂｏｏｋノードを変数ｂとして宣言することを表す。問い合わせの２行目の文字列「where $b/author = "著者Ｙ"」は、$b（変数ｂ）で示されるノード（つまりノード$b）の直下のauthorノードの内容が著者Ｙであるという変数ｂの条件を表すｗｈｅｒｅ文である。
【００２５】
図４において、問い合わせの３行目の文字列「return <id>node-id($b)</id>{$b/title}」は、当該問い合わせに対する結果（検索結果）として、<id>node-id($b)</id>{$b/title}で表される文字列を返すべきことを表すｒｅｔｕｒｎ文である。ここで、開始タグ<id>及び終了タグ</id>で挟まれた「node-id($b)」は、変数ｂの条件を満たすノード（ノード$b）を特定するための文字列、例えば当該ノード$bの該当するデータベース（データベースファイル）内での格納位置を表す文字列を検索結果内にｉｄノードとして埋め込むことを指定する関数（特別の指定情報）である。また「{$b/title}」は、変数ｂの条件を満たすｂｏｏｋノードの直下のｔｉｔｌｅノードを検索結果の一部として返すことを表す。
【００２６】
つまり、図４に示す問い合わせは、書籍データベース内のｂｏｏｋｓノード直下のｂｏｏｋノードであるノード$bのうち、その直下のａｕｔｈｏｒノードの内容が著者Ｙに等しいノード$bについて、<id>node-id($b)</id>{$b/title}で表される文字列を返すことを表す。
【００２７】
さて、クライアント端末２０によって発行された図４に示す問い合わせ（クエリ）は、ネットワーク３０を介してデータベースサーバ１０に送信される。データベースサーバ１０上では、ＤＢＭＳ１１が動作している。ＤＢＭＳ１１は、クライアント端末２０によって発行された問い合わせ（クエリ）を受信する。するとＤＢＭＳ１１のクエリエンジン１１０では、受信された問い合わせに対する処理（検索処理）が図５のフローチャートに示す手順で次のように実行される。
【００２８】
まずクエリエンジン１１０の解析部１２０は、受信された図４に示す問い合わせを解析する（ステップＳ１）。このステップＳ１において解析部１２０は、問い合わせの解析結果に基づいて、オペレータ実行部１３０内のいずれのオペレータをどの順番で動作させるかを表すスケジュール（プラン）を決定する。
【００２９】
図４に示す問い合わせの場合、解析部１２０はステップＳ１において、当該問い合わせから変数ｂの条件と関数node-id($b)とを検出する。また解析部１２０は、変数ｂの条件を満足するノード$bの直下のｔｉｔｌｅノードの内容を検索結果の一部として返す必要があることを検出する。
【００３０】
この場合、解析部１２０はまず、変数ｂの条件、つまりノード$bのうち当該ノード$bの直下のauthorノードの内容が著者Ｙであるという条件を満足するノード$bのオフセット一覧を、索引サーチ部１３１により検索（取得）させることを決定する。次に解析部１２０は、取得されるオフセット一覧の中から、ノードの構造が「/books/book」と一致するノード$bのオフセットの一覧を、オペレータ実行部１３０のドキュメントサーチ部１３２により取得させることを決定する。次に解析部１２０は、関数node-id($b)（特別の指定情報）に従い、ノード$bのオフセットの一覧から当該ノード$bのオフセット位置を示す文字列をオペレータ実行部１３０の位置取得部１３４により取得させることを決定する。また解析部１２０は、ノード$bの直下のｔｉｔｌｅノードの情報をドキュメント読込部１３６により読み込ませることを決定する。
【００３１】
解析部１２０は、問い合わせの解析によって決定されたスケジュールに従って、オペレータ実行部１３０内の幾つかのオペレータを逐次動作させる（ステップＳ２）。図４に示す問い合わせの場合、このステップＳ２は、図６のフローチャート示す手順で次のように実行される。
【００３２】
まず、オペレータ実行部１３０の索引サーチ部１３１は、クライアント端末２０からの問い合わせで指定された“書籍データベース”という名前のデータベース４１の索引部４１２を検索して、著者Ｙという文字列を含むノードのオフセット一覧を取得する（ステップＳ１１）。
【００３３】
するとオペレータ実行部１３０のドキュメントサーチ部１３２は、索引サーチ部１３１によって取得されたノード$bのオフセット一覧から、ノードの構造が指定の「/books/book」と一致するノード$bのオフセットの一覧を選択されたノード$bのオフセットの一覧として取得する（ステップＳ１２）。ノードの構造は、索引サーチ部１３１によって取得されたノード$bのオフセット一覧に含まれているオフセットに基づき、データベース４１の該当する位置に格納されているノードを含むドキュメントから特定可能である。
【００３４】
“書籍データベース”という名前の図２のデータ構造のデータベース４１の例では、図４に示す問い合わせで指定される条件に合致するノード$bは、当該ノード$bの直下のｔｉｔｌｅノードの内容がタイトルＢとタイトルＣの２つのｂｏｏｋノードである。この２つのｂｏｏｋノードは、図２の例では、データベース（データベースファイル）４１内のそれぞれオフセット０ｘ０００２００００と０ｘ０００３００００の位置に格納されている。
【００３５】
結果生成部１２１は、ドキュメントサーチ部１３２によって上記ノード$b（選択されたノード$b）のオフセットの一覧が取得されると（ステップＳ１２）、当該オフセットの一覧に基づいて、問い合わせ中のｒｅｔｕｒｎ文で指定された形式に適合する検索結果を表す文字列を組み立てる（ステップＳ１３）。ここでは、問い合わせに対する検索結果として、<id>node-id($b)</id>{$b/title}で表される文字列で返すことが当該問い合わせ中のｒｅｔｕｒｎ文により指定されている。この場合、上記ステップＳ１３では、検索結果を表す文字列を取得するための処理が、オペレータ実行部１３０の位置取得部１３４及びドキュメント読込部１３６を用いて次のように行われる。
【００３６】
まず、位置取得部１３４は、上記ステップＳ１２で取得されたオフセット一覧、即ち選択されたノード$bのオフセットの一覧から、当該一覧中の各ノード$b（つまり目的とする各ノード$b）のオフセット位置を示す文字列を関数node-id($b)で指定される位置情報（オフセット）として抽出する（ステップＳ１３ａ）。ここでは、０ｘ０００２００００及び０ｘ０００３００００が抽出される。
【００３７】
一方、ドキュメント読込部１３６は、上記一覧中の各ノード$bのオフセット位置に従って、{$b/title}で表されるｔｉｔｌｅノードの情報をデータベース４１のＸＭＬ文書部４１１から読み込む（ステップＳ１３ｂ）。ここでは、タイトルＢ及びタイトルＣが読み込まれる。
【００３８】
結果生成部１２１は上記ステップＳ１３において、抽出された文字列０ｘ０００２００００及び０ｘ０００３００００並びに読み込まれたタイトルＢ及びタイトルＣとから、図４に示す問い合わせに対する結果として、図７に示す結果を生成する。
【００３９】
図７において、１行目の開始タグ<id>及び終了タグ</id>で挟まれた文字列０ｘ０００２００００は、当該１行目が、データベース４１のオフセット０ｘ０００２００００の位置に格納されているｂｏｏｋノードの情報であることを示す。同様に、２行目の開始タグ<id>及び終了タグ</id>で挟まれた文字列０ｘ０００３００００は、当該２行目が、データベース４１のオフセット０ｘ０００３００００の位置に格納されているｂｏｏｋノードの情報であることを示す。
【００４０】
このように本実施形態によれば、ＸＭＬ文書（構造化文書）の一部分（クライアント端末２０からの図４に示す問い合わせによって指定された条件に合致するｂｏｏｋノード）を一意に特定するための情報（文字列）０ｘ０００２００００及び０ｘ０００３００００を、検索結果内の必要な部分のみに指定の形式で埋め込むことができる。この結果には、上記２つのｂｏｏｋノードの直下のｔｉｔｌｅノードの情報が含まれている。ここでは、全ての問い合わせに対する結果に、当該問い合わせによって指定された条件に合致するノードを一意に特定するための情報が埋め込まれるのではないことに注意されたい。つまり本実施形態では、問い合わせ中に前記特別の指定情報（つまり指定の条件に合致するノードを特定するための情報を結果中に埋め込むことを指定する特別の指定情報）が含まれている場合に限り、当該問い合わせに対する検索結果の必要な部分に、上記特定するための情報が埋め込まれる。これにより、検索結果のデータ量を必要最小限にすることができる。
【００４１】
図７に示す結果は結果出力部１４０によりネットワーク３０を介してクライアント端末２０に返される（ステップＳ３）。クライアント端末２０は、図７に示す結果が図４に示す問い合わせに対する結果として返されると、クライアントソフトウェア２１に従って、当該図７に示す結果から生成される書籍のタイトル一覧を画面に表示する。この一覧は、ユーザによって指定された条件に合致する書籍のタイトルを表し、タイトルＢとタイトルＣを含む。ユーザは、クライアント端末２０を操作することにより、タイトル一覧の中から例えば必要とする目次のタイトルを選択する。ここでは、タイトルＢの目次を取得するために、当該タイトルＢが選択されたものとする。
【００４２】
この場合、クライアント端末２０は、ユーザによって選択されたタイトルＢの目次を取得するためのＸＱｕｅｒｙを用いた問い合わせ（問い合わせ命令）を発行する。この問い合わせの一例を図８に示す。
【００４３】
図８において、問い合わせ（２度目の問い合わせ）の１行目の文字列「let $b = node-with-id("0x00020000")」は、変数$bへnode-with-id関数が返すノードを代入することを表すlet文である。このlet文中の「node-with-id(“0x00020000”)」は、データベース４１内のオフセット０ｘ００２００００の位置に格納されているノード、つまり図４に示す１度目の問い合わせに対する結果として返された著者Ｙという文字列を含み、且つノードの構造が「/books/book」と一致するｂｏｏｋノードのうち、ユーザによって選択されたタイトルＢのｂｏｏｋノードの位置（データベース４１内のオフセット）を直接指定する。また、図８における問い合わせの２行目の文字列「return {$b/tableofcontents}」は、当該問い合わせに対する結果（検索結果）として、$b（変数ｂ）で示されるノード（つまりノード$b）の直下のtableofcontentsノードを返すべきことを表す。
【００４４】
クライアント端末２０によって発行された図８に示す問い合わせ（クエリ）はデータベースサーバ１０によって受信される。するとデータベースサーバ１０のクエリエンジン１１０に含まれている解析部１２０は、図８に示す問い合わせを解析して、オペレータ実行部１３０内のいずれのオペレータをどの順番で動作させるかを表すスケジュールを決定する。この場合、オペレータ実行部１３０では、解析部１２０の制御の下で図９のフローチャートに示す手順の処理が次のように実行される。
【００４５】
まずオペレータ実行部１３０のノード取得部１３５は、node-with-id関数で指定された文字列０ｘ０００２００００に基づき、当該文字列がデータベース４１内のオフセット０ｘ００２００００を表していると認識し、当該オフセット０ｘ００２００００の位置に格納されているノードを目的のノード$bとして取得する（ステップＳ２１）。このように本実施形態では、node-with-id関数により目的のノードの位置（オフセット位置）が直接指定されるため、ノード取得部１３５は当該目的のノードを速やかに取得することができる。ここでは、タイトルＢのｔｉｔｌｅノードを子ノードとするｂｏｏｋノードが目的のノード$bとして取得される。
【００４６】
ところで従来技術では、図４に示す問い合わせに相当する問い合わせ（１度目の問い合わせ）のrerturn文は「<id>node-id($b)</id>」を含まず、「return {$b/title}」のように表されるのが一般的である。この場合、問い合わせに対する結果として「<title>タイトルＢ</title>」及び「<title>タイトルＣ</title>」のみが返される。
【００４７】
この結果から、タイトルＢの目次を取得することがユーザによって指定された場合、クライアント端末２０は従来技術であれば、次のような２度目の問い合わせ
for $b in fn:doc ("書籍データベース.xml")/books/book
where $b/author = "著者Ｙ" and $b/title = "タイトルＢ"
return {$b/tableofcontents}
を発行することになる。この場合、書籍データベースという名前のデータベースファイルにおけるｂｏｏｋｓノードの直下のｂｏｏｋノードをノード$bとして取得し、そのノード$bのうち、その直下のａｕｔｈｏｒノードの内容が著者Ｙに等しく、且つ、その直下のｔｉｔｌｅノードの内容がタイトルＢに等しいノードを取得するための複雑な検索処理を必要とする。このため従来技術では、２度目の問い合わせに対する処理に時間を要し、データベースサーバにも過大な負荷がかかる。
【００４８】
さて本実施形態において、ノード取得部１３５によって目的のノード$bの情報が取得されると（ステップＳ２１）、結果生成部１２１は当該取得された目的のノード$bの情報に基づいて、問い合わせ中のｒｅｔｕｒｎ文で指定された形式に適合する検索結果を表す文字列を組み立てる（ステップＳ２２）。ここでは、問い合わせに対する検索結果として、{$b/tableofcontents}で表される文字列で返すことが当該問い合わせ中のｒｅｔｕｒｎ文により指定されている。この場合、上記ステップＳ２２では、検索結果を表す文字列を取得するための処理がオペレータ実行部１３０のドキュメント読込部１３６を用いて次のように行われる。
【００４９】
ドキュメント読込部１３６は、{$b/tableofcontents}に基づき、ステップＳ２１で取得されたノード$bの直下のtableofcontentsノードの情報をデータベース４１から読み込む（ステップＳ２２ａ）。ここでは、タイトルＢのｔｉｔｌｅノードを子ノードとするｂｏｏｋノードの直下のtableofcontentsノードの情報が読み出される。
【００５０】
結果生成部１２１は上記ステップＳ２２において、ドキュメント読込部１３６によって読み込まれたノード$bの直下のtableofcontentsノードの情報に基づき、図８に示す問い合わせ中のｒｅｔｕｒｎ文で指定された当該問い合わせに対する検索結果を生成する。ここでは、ノード$bはタイトルＢのｔｉｔｌｅノードを子ノードとするｂｏｏｋノードである。したがって図８に示す問い合わせに対する検索結果として、タイトルＢのｔｉｔｌｅノードを子ノードとするｂｏｏｋノードの直下のtableofcontentsノードの情報が生成される。
【００５１】
結果生成部１２１によって生成された結果は結果出力部１４０によりネットワーク３０を介してクライアント端末２０に返される。クライアント端末２０は、結果出力部１４０により返されたノード$bの直下のtableofcontentsノードの情報に基づき、目次Ｂを画面に表示する
以上、ＸＭＬ文書（構造化文書）のデータベース４１を対象とする検索、つまりＸＭＬ文書（構造化文書）の検索が可能な構造化文書検索システムに適用した実施形態について説明した。しかし本発明は、ＸＭＬ文書（構造化文書）以外のデータベース、例えばオブジェクト思考データベースを対象とする検索にも適用可能である。
【００５２】
なお、本発明は、上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合せにより種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。
【図面の簡単な説明】
【００５３】
【図１】本発明の一実施形態に係る構造化文書検索システムを含むクライアント−サーバシステムの構成を示すブロック図。
【図２】図１中のデータベース４１のデータ構造例を示す図。
【図３】図２中のＸＭＬ文書部４１１に格納されるＸＭＬ文書（データベースファイル）の一例を示す図。
【図４】同実施形態における１度目の問い合わせの一例を示す図。
【図５】同実施形態における問い合わせに対する処理の手順を示すフローチャート。
【図６】図４に示す１度目の問い合わせの受信時における図５のステップＳ２の詳細な手順を示すフローチャート。
【図７】図４に示す問い合わせに対する結果の一例を示す図。
【図８】同実施形態における２度目の問い合わせの一例を示す図。
【図９】図８に示す２度目の問い合わせの受信時における処理手順を示すフローチャート。
【符号の説明】
【００５４】
１０…データベースサーバ、１１…データベース管理システム（ＤＢＭＳ）、２０…クライアント端末、３０…ネットワーク、４０…２次記憶装置、４１…データベース、５０…構造化文書検索システム、１１０…クエリエンジン、１２０…解析部、１３０…オペレータ実行部、１３１…索引サーチ部、１３２…ドキュメントサーチ部、１３３…マージ部、１３４…位置取得部（特定情報取得手段）、１３５…ノード取得部（構造化文書部分取得手段）、１３６…ドキュメント読込部、４１１…ＸＭＬ文書部、４１２…索引部。
【図１】
0004406397.tif 000002
【図２】
0004406397.tif 000003
【図３】
0004406397.tif 000004
【図４】
0004406397.tif 000005
【図５】
0004406397.tif 000006
【図６】
0004406397.tif 000007
【図７】
0004406397.tif 000008
【図８】
0004406397.tif 000009
【図９】
0004406397.tif 000010