(57)【特許請求の範囲】
【請求項１】
要素識別子により要素が区切られた階層構造を有する文書データに対する検索式を取得した場合に、該検索式に対応するデータを前記文書データから検索する検索装置の検索方法であって、
前記検索装置は、
前記検索式を取得した場合に、当該検索式を記憶装置に記憶する記憶ステップと、
前記検索式に対応するデータを前記文書データから検索する場合に、前記検索式の木構造が末端ノードを１個有している検索式であるか否かを当該検索式に基づいて判定する判定ステップと、
前記判定ステップにより、前記検索式の木構造が末端ノードを１個有している検索式であると判定された場合に、前記文書データに含まれる各要素識別子を固有の識別情報に変換したバイナリデータを生成し、当該バイナリデータと前記検索式との一致不一致の判定を実行することにより、当該検索式に対応するデータを前記文書データから検索する検索ステップと、
を含んだことを特徴とする検索方法。
【請求項２】
前記判定ステップは、更に、前記検索式の木構造が末端ノードを２個有しており、かつ前記検索式の木構造のルートの次ステップポインタで示されるノードとなる第２ステップの末端ノードのポインタによって接続されるノードが存在しないか否かを判定し、
前記検索ステップは、更に、前記検索式の木構造が末端ノードを２個有しており、かつ前記第２ステップの末端ノードのポインタによって接続されるノードが存在しない場合に、前記文書データに含まれる各要素識別子を固有の識別情報に変換したバイナリデータを生成し、当該バイナリデータと前記検索式との一致不一致の判定を実行することにより、当該検索式に対応するデータを前記文書データから検索することを特徴とする請求項１に記載の検索方法。
【請求項３】
前記判定ステップは、更に、前記検索式の最長パスに含まれるノードの数を判定し、当該ノードの数が所定値以下であるか否かを判定し、
前記検索ステップは、更に、前記検索式の最長パスに含まれるノードの数が所定値以下である場合に、前記文書データに含まれる各要素識別子を固有の識別情報に変換したバイナリデータを生成し、当該バイナリデータと前記検索式との一致不一致の判定を実行することにより、当該検索式に対応するデータを前記文書データから検索することを特徴とする請求項１に記載の検索方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、要素識別子により要素が区切られた階層構造を有する文書データに対する検索式を取得した場合に、該検索式に対応するデータを前記文書データから検索する検索装置の検索方法などに関するものである。
【背景技術】
【０００２】
近年、コンピュータで処理される文書データとして、ＸＭＬ（Extensible  Markup  Language）等のマークアップ言語が利用されている。このＸＭＬは、異なる情報システムの間で、特にインターネットを介して、構造化された文書や構造化されたデータの共有を容易にすることが出来るため、コンピュータにおいてますます多用されてきている（以下、ＸＭＬに基づいて記述された階層構造をなす文書データをＸＭＬデータと表記する）。
【０００３】
そして、ＸＭＬデータの特定の照合位置を指定するものとして、ＸＰａｔｈ（XML  Path  Language）クエリが用いられる（以下、クエリと表記する）。この、クエリは、ＸＭＬデータのための標準クエリ言語であり、ＸＭＬの複雑な木構造に対して検索式を記述する能力を持つ。かかるクエリに基づいてＸＭＬデータからデータを検出する技術は、例えば下記に示す技術が存在する。
【０００４】
非特許文献１では、ＸＭＬデータをスキャンして、ＸＰａｔｈ（クエリ）を評価するための階層リストを構築し、構築した階層リスト構造をスキャンして、ＸＭＬデータ内のＸＰａｔｈの照合位置の組み合わせを求めることで、最終的な回答の位置を検出するという技術が公開されている。また、特許文献１では、ＸＭＬデータから逐次的に文書木を作成しつつ、クエリを評価するという技術が公開されている。
【０００５】
【非特許文献１】Lu.Qin,J.X.Yu,B.Ding,"TwigList:Make  Twig  Pattern  Matching  Fast",Proc.of  DASFAA'07,850-862,LNCS  4443,Springer-Verlag.
【特許文献１】特許第３８３２８３０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、上述した公知技術を利用して、ＸＭＬデータからクエリの照合位置を求める場合に、処理負荷の大きい階層管理を行う必要があるという問題があった。かかる階層管理は、ＸＭＬデータ中において、入力クエリで注目するノード間の階層を監視し、かつ、クエリに対応する照合位置の組合せを探すために、何度も同じ位置を繰り返し読み込まなければならないため装置にかかる負荷が大きくなってしまう。
【０００７】
すなわち、処理の重たい階層管理を出来るだけ行うことなく、ＸＭＬデータからクエリの照合位置を求めることが極めて重要な課題となっている。
【０００８】
この発明は、上述した従来技術による問題点を解消するためになされたものであり、処理の重たい階層管理を出来るだけ行うことなく、ＸＭＬデータからクエリの照合位置を求めることが出来る検索方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
上述した課題を解決し、目的を達成するため、この検索方法は、要素識別子により要素が区切られた階層構造を有する文書データに対する検索式を取得した場合に、該検索式に対応するデータを前記文書データから検索する検索装置の検索方法であって、前記検索装置は、前記検索式を取得した場合に、当該検索式を記憶装置に記憶する記憶ステップと、前記検索式に対応するデータを前記文書データから検索する場合に、階層管理が必要となる検索式か否かを当該検索式に基づいて判定する判定ステップと、前記判定ステップにより階層管理が不要な検索式であると判定された場合に、階層管理を行うことなく前記検索式に対応するデータを前記文書データから検索する検索ステップと、を含んだことを要件とする。
【００１０】
また、検索方法は、上記の検索方法において、前記検索ステップは、前記判定ステップにより階層管理が不要な検索式であると判定された場合に、文書データに含まれる各要素識別子を固有の識別情報に変換したバイナリデータを生成し、当該バイナリデータと前記検索式との一致不一致の判定を実行することにより、当該検索式に対応するデータを前記文書データから検索することを要件とする。
【００１１】
また、検索方法は、上記の検索方法において、前記判定ステップは、前記検索式の木構造が末端ノードを１個有している場合に、階層管理が不要であると判定することを要件とする。
【００１２】
また、検索方法は、上記の検索方法において、前記判定ステップは、前記検索式の木構造が末端ノードを２個有しており、かつ第２ステップとなる末端ノードのポインタによって接続されるノードが存在しない場合に、階層管理が不要であると判定することを要件とする。
【００１３】
また、検索方法は、上記の検索方法において、前記判定ステップは、前記検索式の最長パスに含まれるノードの数を判定し、当該ノードの数が所定値以下の場合に、階層管理が不要であると判定することを要件とする。
【発明の効果】
【００１４】
この検索方法によれば、検索装置が、検索式を取得した場合に、検索式を記憶装置に記憶し、検索式に対応するデータを文書データから検索する場合に、階層管理が必要となる検索式か否かを当該検索式に基づいて判定し、階層管理が不要な検索式であると判定された場合に、階層管理を行うことなく検索式に対応するデータを前記文書データから検索するので、クエリに応じて、装置にかかる負荷を軽減させ、データ検索の効率を向上させることが出来る。
【００１５】
また、この検索方法によれば、階層管理が不要な検索式であると判定された場合に、文書データに含まれる各要素識別子を固有の識別情報に変換したバイナリデータを生成し、当該バイナリデータと検索式との一致不一致の判定を実行することにより、検索式に対応するデータを文書データから検索するので、装置にかかる負荷を軽減させ、クエリの照合位置を高速に検出可能となる。
【００１６】
また、この検索方法によれば、検索式の木構造が末端ノードを１個有している場合に、階層管理が不要であると判定するので、階層管理が必要か否かを正確に判定することが出来る。
【００１７】
また、この検索方法によれば、検索式の木構造が末端ノードを２個有しており、かつ第２ステップとなる末端ノードのポインタによって接続されるノードが存在しない場合に、階層管理が不要であると判定するので、階層管理が必要か否かを正確に判定することが出来る。
【００１８】
また、この検索方法によれば、検索式の最長パスに含まれるノードの数を判定し、当該ノードの数が所定値以下の場合に、階層管理が不要であると判定するので、クエリが易クラスに属するか否かの判定を効率よく実行することができ、装置にかかる負担を軽減させることが出来る。
【発明を実施するための最良の形態】
【００１９】
以下に添付図面を参照して、この発明に係る検索方法の好適な実施の形態を詳細に説明する。
【実施例１】
【００２０】
（ＸＭＬデータについて）
まず、本実施例１で利用するＸＭＬ（Extensible  Markup  Language）データについて説明する。図１は、ＸＭＬデータのデータ構造の一例を示す図である。同図に示すように、このＸＭＬデータは、要素識別子「＜」、「＜／」等により要素が区切られた階層構造を有している。そして、図１のＸＭＬデータの木表現は、図２のように表すことができる。
【００２１】
図２は、ＸＭＬデータの木表現の一例を示す図である。同図に示すように、ＸＭＬデータの木表現では、ＸＭＬデータは、ノードＩＤ１，３，４，６，７，９，１０，１２，１３，１５，１６，１８，１９，２１，２２，２４，２５，２７，２８の要素ノードと、ノードＩＤ２，５，８，１１，１４，１７，２０，２３，２６，２９のテキストノードとを有し、それぞれの要素ノード、テキストノードをそれぞれ接続している。例えば、要素ノードのSyain１は、テキストノードの「シグマ戦隊中原ジャー」２、要素ノードのACT３，１２，２１に接続されている。
【００２２】
そして、ＸＰａｔｈ（XML  Path  Language）クエリ（以下、クエリと表記する）を指定することによって、上記のＸＭＬデータからクエリの照合位置のデータを取得することが可能となる。なお、Ｗ３Ｃ（World  Wide  Web  Consortium）によるクエリのサブセットは、下記のように定義される。
Path::="/"RPath
RPath::=Step("/"Step)*
Step::=Axis"::"Ntest("["Pred"]")?  （？は、０回または１回の繰り返しを示す）
Axis::="child"
Ntest::=tagname|"*"|"text()"|"node()"
Pred::=Expr
Expr::=RPath
【００２３】
例えば、クエリが、
Q1=/Syain/ACT/chara/name
と指定された場合には、「/Syain/ACT/chara/name」で表される要素ノードname７，１６，２５のデータ（図３の回答Ａ、Ｃ、Ｅ参照；図３は、クエリに対するデータを説明するための図である。）を取得することが出来る。
【００２４】
また、クエリが、
Q2=/Syain/ACT[chara/name]/cast
と指定された場合には、子供の要素ノードとなる「chara/name」を有するACT３，１２，２１に接続された要素ノードcast９，１８，２７のデータ（図３の回答Ｂ、Ｄ、Ｆ参照）を取得することが出来る。なお、本実施例１で利用するクエリは、子供軸のみを有し、兄弟方向の軸は含まないものとする。
【００２５】
（本実施例１にかかる検索装置について）
次に、本実施例１にかかる検索装置について説明する。本実施例１にかかる検索装置は、クエリに対応するデータをＸＭＬデータから検索する場合に、階層管理が必要となるクエリか否かを、このクエリに基づいて判定し、階層管理が不要な検索式であると判定した場合に、階層管理を行うことなくクエリに対応するデータをＸＭＬデータから検索する。このように、本実施例１にかかる検索装置は、クエリに応じて処理の重い階層管理を行うことなく、ＸＭＬデータからデータを検索するので、検索装置にかかる負担を軽減し、データの検索効率を向上させることが出来る。
【００２６】
図４は、本実施例１にかかる検索装置１００の構成を示す機能ブロック図である。同図に示すように、この検索装置１００は、入力部１１０と、出力部１２０と、通信制御ＩＦ部１３０と、入出力制御ＩＦ部１４０と、記憶部１５０と、制御部１６０とを備えて構成される。なお、この検索装置１００は、ネットワークを介して端末装置（図示略）に接続されているものとする。
【００２７】
このうち、入力部１１０は、各種の情報を入力する入力手段であり、キーボードやマウス、マイクなどによって構成され、例えば、上述したＸＭＬデータに関する各種の情報を受け付けて入力する。なお、後述するモニタ（出力部１２０）も、マウスと協働してポインティングデバイス機能を実現する。
【００２８】
出力部１２０は、各種の情報を出力する出力手段であり、モニタ（若しくはディスプレイ、タッチパネル）やスピーカなどによって構成され、例えば、上述したＸＭＬデータに関する各種の情報を出力する。
【００２９】
通信制御ＩＦ部１３０は、端末装置との間における通信を制御する手段である。入出力制御ＩＦ部１４０は、入力部１１０、出力部１２０、通信制御ＩＦ部１３０、記憶部１５０、制御部１６０によるデータの入出力を制御する手段である。
【００３０】
記憶部１５０は、制御部１６０による各種処理に必要なデータおよびプログラムを記憶する記憶手段（格納手段）であり、特に本発明に密接に関連するものとしては、図４に示すように、ＸＭＬデータ１５０ａ、パスＩＤテーブル１５０ｂ、ＢＩＮデータ１５０ｃ、クエリ木１５０ｄ、イベント定義表１５０ｅ、イベントテーブル１５０ｆを備える。
【００３１】
このうち、ＸＭＬデータ１５０ａは、上述したように要素識別子「＜」、「＜／」等により要素が区切られた階層構造を有する文書データである（図１参照）。パスＩＤテーブル１５０ｂは、ＸＭＬデータ１５０ａに含まれるパスとパスＩＤ（Identification）とを対応付けたデータである。
【００３２】
図５は、パスＩＤテーブル１５０ｂのデータ構造の一例を示す図である。同図に示すように、このパスＩＤテーブル１５０ｂでは、パスとパスＩＤとが対応付けられており、例えば、パス「/Syain」はパスＩＤ「１」に対応付けられている。
【００３３】
ＢＩＮデータ１５０ｃは、ＸＭＬデータ１５０ａに含まれる各要素をパスＩＤテーブル１５０ｂのパスＩＤに置き換えたデータである。図６は、ＢＩＮデータのデータ構造の一例を示す図である。例えば、ＸＭＬデータ１５０ａ（図１参照）の１段目に位置する「<Syain>シグマ戦隊中原ジャー」の「<Syain>」は、パスＩＤテーブル（図５参照）のパス「/Syain」（パスＩＤ「１」）に対応するため、ＢＩＮデータ１５０ｃの１段目のように「[1シグマ戦隊中原ジャー」と変換される。このように、ＸＭＬデータ１５０ａをＢＩＮデータ１５０ｃに変換することにより、パス照合におけるタグ階層の管理を省くことが出来る。
【００３４】
クエリ木１５０ｄは、クエリから構築されるクエリ木を記憶するデータであり、かかるクエリ木は複数のステップ構造体から構成される。ここで、ステップは、（軸、タグ名、述部）の三項組で表される（本実施例１では、軸は子供軸のみを取り扱う）。そして、例えば、「/A[B]/C[D  or  E]/F」と表されるクエリは、「A[B]」と「C[D  or  E]」と「F」という３つのステップを持つ。
【００３５】
図７は、ステップ構造体のデータ構造を説明するための図である。同図に示すように、このステップ構造体は、パスＩＤ（イベントＩＤ）と、述部ポインタと、次ステップポインタとを有する。このうち、述部ポインタは、述部を示すステップ構造体のポインタであり、次ステップポインタは、次ステップとなるステップ構図体のポインタである。なお、クエリ木のルートとなるステップ構造体を、Ｒｏｏｔと表記し、Ｒｏｏｔの次ステップ構造体で示されるステップ構造体を、クエリ木の「第２ステップ」と表記する。
【００３６】
ここで、クエリに対するクエリ木の一例を示す。図８および図９は、クエリ木の一例を示す図である。図８のクエリ木は、クエリ「/Syain/ACT/[chara/name]cast」（パスＩＤ表記では「２［５］６」によって表される；パスＩＤに関しては図５参照）のクエリ木を示している。同図に示すように、このクエリ木は、パスＩＤ「２，５，６」のステップ構造体から構成され、パスＩＤ「２」のステップ構造体の述部ポインタは、パスＩＤ「２」のステップ構造体に接続され、パスＩＤ「２」のステップ構造体の次ステップポインタは、パスＩＤ「６」のステップ構造体に接続されている。
【００３７】
そして、パスＩＤ「５，６」の述部ポインタおよび次ステップポインタはNull（⊥）に設定される。ここで、Nullは、配下に接続されるステップ構造体が存在しない旨を示す。図８において、パスＩＤ「２」のステップ構造体が「Ｒｏｏｔ」となり、パスＩＤ「６」のステップ構造体が「第２ステップ」となる。なお、図８の右側の図は、図８の左側に示したクエリ木の簡易表記である。
【００３８】
図９のクエリ木は、クエリ「/Syain/[ACT[id]/chara]/ACT/cast」（パスＩＤ表記では「１［２［３］４］６」によって表される；パスＩＤに関しては図５参照）のクエリ木を示している。同図に示すように、このクエリ木は、パスＩＤ「１，２，３，４，６」のステップ構造体から構成され、パスＩＤ「１」のステップ構造体の述部ポインタは、パスＩＤ「２」のステップ構造体に接続され、パスＩＤ「２」のステップ構造体の述部ポインタは、パスＩＤ「３」のステップ構造体に接続されている。
【００３９】
また、パスＩＤ「１」のステップ構造体の次ステップポインタは、パスＩＤ「６」のステップ構造体に接続され、パスＩＤ「２」のステップ構造体の次ステップポインタは、パスＩＤ４のステップ構造体に接続されている。そして、パスＩＤ３，４，６の述部ポインタおよび次ステップポインタはNullに設定される。図９において、パスＩＤ１のイベント構造体が「Ｒｏｏｔ」となり、パスＩＤ６のステップ構造体が「第２ステップ」となる。なお、図９の右側の図は、図９の左側に示したクエリ木の簡易表記である。
【００４０】
イベント定義表１５０ｅは、クエリに含まれるイベント種類とパスＩＤとを対応付けたデータである。図１０は、イベント定義表１５０ｅのデータ構造の一例を示す図である。同図に示すように、このイベント定義表１５０ｅは、定義ＩＤと、パスＩＤと、イベント種類とを対応付けて記憶している。なお、定義ＩＤは、パスＩＤとイベント種類との組み合わせを識別する情報である。
【００４１】
イベント種類となる集合ETYPE(Q)は、パスヒットイベントＺ１、・・・、Ｚｎ、クエリ開始イベントＳ、文脈ノードイベントＣを有する。ここで、パスヒットイベントは、該当パスにヒットした旨を示すイベントであり、クエリ開始イベントは、クエリの開始パスにヒットした旨を示すイベントであり、文脈ノードイベントは、クエリの終了パスにヒットした旨を示すイベントである。
【００４２】
例えば、クエリが、
Q=/Syain/ACT[chara/name]/cast（パス表記では、２［５］６）
と指定され、イベント種類の集合が、
ETYPE(Q)={Z1,Z2,Z3}
と指定されている場合には、図１０に示したイベント定義表１５０ｅが生成される。
【００４３】
イベントテーブル１５０ｆは、ＢＩＮデータ１５０ｃおよびイベント定義表１５０ｅを基にして生成されるデータであり、イベント定義表１５０ｅにヒットしたＢＩＮデータの各種情報を記憶する。図１１は、イベントテーブル１５０ｆのデータ構造の一例を示す図である。同図に示すように、このイベントテーブル１５０ｆは、イベントＩＤと、イベント種類と、オフセットとを対応付けて記憶している。このうち、イベントＩＤは、イベントを識別する情報であり、オフセットは、イベントが発生した時点のデータ位置を示す。
【００４４】
制御部１６０は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する制御手段であり、特に本発明に密接に関連するものとしては、図４に示すように、ＢＩＮデータ生成部１６０ａ、クエリ受信部１６０ｂ、クエリ木構築部１６０ｃ、クエリクラス判定部１６０ｄ、イベントテーブル生成部１６０ｅ、イベントテーブル集計部１６０ｆ、分岐クエリ評価部１６０ｇ、回答発信部１６０ｈを備える。
【００４５】
このうち、ＢＩＮデータ生成部１６０ａは、ＸＭＬデータ１５０ａとパスＩＤテーブル１５０ｂとを比較して、ＸＭＬデータ１５０ａに含まれる各要素をパスＩＤに置き換えることによりＢＩＮデータを生成する手段である。図１２は、ＢＩＮデータ生成部１６０ａの処理を説明するための図である。
【００４６】
例えば、ＢＩＮデータ生成部１６０ａは、図１２において、ＸＭＬデータ１５０ａの１段目に位置する「<Syain>シグマ戦隊中原ジャー」の「<Syain>」は、パスＩＤテーブル１５０ｂのパス「/Syain」（パスＩＤ「１」）に対応するため、ＢＩＮデータ１５０ｃの１段目を「[1シグマ戦隊中原ジャー」とする。ＢＩＮデータ生成部１６０ａは、他の段も同様に、パスＩＤテーブル１５０ｂと比較して、各要素をパスＩＤに置き換えていくことで、ＢＩＮデータ１５０ｃを生成する。
【００４７】
クエリ受信部１６０ｂは、ネットワークを介して端末装置からクエリの情報を受信する手段である。クエリ受信部１６０ｂは、受信したクエリの情報をクエリ木構築部１６０ｃに出力する。クエリ木構築部１６０ｃは、クエリを基にしてクエリ木１５０ｄ（図８、図９参照）を構築する手段である。
【００４８】
クエリクラス判定部１６０ｄは、クエリ木に基づいて、クエリが易クラスに属するか難クラスに属するかを判定する手段である。検索装置１００は、クエリが易クラスに属する場合には、階層管理を行うことなく、クエリに対応するデータを検索する。一方、検索装置１００は、クエリが難クラスに属する場合には、従来と同様にして、階層管理を行うことで、クエリに対応するデータを検索する。
【００４９】
具体的に、クエリクラス判定部１６０ｄの説明を行うと、まず、クエリクラス判定部１６０ｄは、クエリ木の葉の数を検出する。ここで、クエリ木の「葉の数」とは、クエリ木（図８、図９参照）を構成するステップ構造体のうち、「葉」であるものの数を示す。図１３は、クエリ木の葉の数を説明するための図である。
【００５０】
図１３の左側は、クエリ「/Syain/ACT/[chara/name]/cast」のクエリ木を示し、かかるクエリ木の末端ノード（葉）の数が２つであるため、葉の数は、２つとなる。図１３の右側は、クエリ「/Syain[ACT[id]/chara]/ACT/cast」のクエリ木を示し、かかるクエリ木の末端ノード（葉）の数が３つであるため、葉の数は、３つとなる。
【００５１】
続いて、クエリクラス判定部１６０ｄは、第１の条件および第２の条件に基づいて、クエリクラスの判定を行う。ここで、第１の条件は、「クエリの葉が１つである」という条件であり、第２の条件は、「クエリの葉の数が２つであり、かつ第２ステップが存在し、かつ第２ステップの述部ポインタおよび次ステップポインタが共にNullである」という条件である。
【００５２】
クエリクラス判定部１６０ｄは、クエリが第１の条件または第２の条件のいずれか一方で成り立つ場合に、クエリを易クラスに属すると判定する。一方、クエリクラス判定部１６０ｄは、クエリが第１の条件または第２の条件で成り立たない場合には、クエリを難クラスに属すると判定する。
【００５３】
ここで、クエリクラス判定部１６０ｄの説明を、図１３を用いて説明すると、図１３の左側に示すクエリ木は、葉の数が「２」であり、第２ステップの述部ポインタおよび次ステップポインタが共にNullであるため、第２の条件が成立する。従って、クエリクラス判定部１６０ｄは、クエリ「/Syain/ACT/[chara/name]/cast」が易クラスに属すると判定する。
【００５４】
また、図１３の右側に示すクエリ木は、葉の数が「３」であるため、第１の条件および第２の条件が成立しない。従って、クエリクラス判定部１６０ｄは、クエリ「/Syain[ACT[id]/chara]/ACT/cast」が難クラスに属すると判定する。
【００５５】
図１４は、葉の数は「２」であるが難クラスに属するクエリの例を示す図である。図１４の左側は、クエリ「/A[B]C[D]」のクエリ木を示す。かかるクエリ木は、葉の数が「２」であるが、第２ステップの述部ポインタがNullではないため、第１の条件および第２の条件が成立しない。従って、クエリクラス判定部１６０ｄは、クエリ「/A[B]C[D]」が難クラスに属すると判定する。
【００５６】
例えば、図１４の右側に示すＢＩＮデータからクエリ「/A[B]C[D]」に対応するデータを検索する場合には、論理式評価のみで簡易に評価できない。なぜなら、ＢＩＮデータ中のＣ１が解でないことを正しく計算するためには、文脈候補（Ｃ１とＣ２）ごとに、Ｄの存在の有無を管理しなければならない（階層管理する必要がある）。従って、クエリ「/A[B]C[D]」は、難クエリに属することとなる。
【００５７】
イベントテーブル生成部１６０ｅは、クエリクラス判定部１６０ｄから判定結果を取得し、クエリが易クラスに属していると判定されている場合に、クエリからイベント定義表１５０ｅ（図１０参照）を生成すると共に、ＢＩＮデータ１５０ｃとイベント定義表１５０ｅとを比較することで、イベントテーブル１５０ｆ（図１１参照）を生成する手段である。
【００５８】
まず、イベントテーブル生成部１６０ｅがイベント定義表１５０ｅを生成する場合の処理について説明すると、イベントテーブル生成部１６０ｅは、例えば、クエリが、
Q=/Syain/ACT[chara/name]/cast（パスＩＤ表記では２［５］６）
と指定され、イベント種類の集合が
ETYPE(Q)={Z1,Z2,Z3}
と指定されている場合には、クエリのパスＩＤと、イベント種類の集合を対応させることにより、図１０に示したイベント定義表１５０ｅを生成する。
【００５９】
上記の条件では、パスＩＤ「２」がイベント種類「Ｚ１」に対応し、パスＩＤ「５」がイベント種類「Ｚ２」に対応し、パスＩＤ「６」がイベント種類「Ｚ３」に対応する。また、パスＩＤ「２」は、クエリの開始パスであるため、イベント種類に「Ｓ」を含ませる。パスＩＤ「６」は、クエリの終了パスであるため、イベント種類に「Ｃ」を含ませる。
【００６０】
続いて、イベントテーブル生成部１６０ｅがイベントテーブル１５０ｆを生成する場合の処理について説明する。図１５は、イベントテーブル生成部１６０ｅの処理を説明するための図である。同図に示すように、イベントテーブル生成部１６０ｅは、ＢＩＮデータ１５０ｃを１文字ずつスキャンして、タグ開始記号「［」を検出するたびに、オフセットの値を１だけ加算する。なお、本実施例１では、説明の便宜上、オフセットの値を、イベントが発生した際の、ノードのノードＩＤ（図２参照）をオフセットとする。
【００６１】
また、イベントテーブル生成部１６０ｅは、タグ開始記号「［」の後ろ（直後）に、イベント定義表１５０ｅに含まれるパスＩＤを検出した場合には、ＩＤに１を加算して、イベントテーブルに現在のＩＤ、イベント種類、オフセットを登録する。下記において、イベントテーブル生成部１６０ｅの処理を、図１５を用いて説明する。
【００６２】
まず、ＢＩＮデータ１５０ｃの位置「１００１」において、タグ開始記号「［」の後に、イベント定義表１５０ｅに含まれるパスＩＤは検出されない。ＢＩＮデータ１５０ｃの位置「１００２」において、タグ開始記号「［」の後に、イベント定義表１５０ｅに含まれるパスＩＤ「２」が検出されるので、イベント（１）が発生し、イベントテーブル生成部１６０ｅは、ＩＤ「１」、イベント種類「Ｚ１、Ｓ」、オフセット「３」（図２のノードＩＤ「３」のACTに対応）をイベントテーブル１５０ｆに登録する。
【００６３】
ＢＩＮデータ１５０ｃの位置「１００３」において、タグ開始記号「［」の後に、イベント定義表１５０ｅに含まれるパスＩＤは検出されない。ＢＩＮデータ１５０ｃの位置「１００４」において、タグ開始記号「［」の後に、イベント定義表１５０ｅに含まれるパスＩＤは検出されない。ＢＩＮデータ１５０ｃの位置「１００５」において、タグ開始記号「［」の後に、イベント定義表１５０ｅに含まれるパスＩＤ「５」が検出され、イベント（２）が発生し、イベントテーブル生成部１６０ｅは、ＩＤ「２」、イベント種類「Ｚ２」、オフセット「７」（図２のノードＩＤ「７」のnameに対応）をイベントテーブル１５０ｆに登録する。
【００６４】
ＢＩＮデータ１５０ｃの位置「１００６」において、イベント定義表１５０ｅに含まれるパスＩＤは検出されない。ＢＩＮデータ１５０ｃの位置「１００７」において、タグ開始記号「［」の後に、イベント定義表１５０ｅに含まれるパスＩＤ「６」が検出されるので、イベント（３）が発生し、イベントテーブル生成部１６０ｅは、イベントＩＤ「３」、イベント種類「Ｚ３、Ｃ」、オフセット「９」（図２のノードＩＤ「９」のcastに対応）をイベントテーブル１５０ｆに登録する。
【００６５】
ＢＩＮデータ１５０ｃの位置「１００８」において、イベント定義表１５０ｅに含まれるパスＩＤは検出されない。ＢＩＮデータ１５０ｃの位置「１００９」において、タグ開始記号「［」の後に、イベント定義表１５０ｅに含まれるパスＩＤは検出されない。ＢＩＮデータ１５０ｃの位置「１０１０」において、タグ開始記号「［」の後に、イベント定義表１５０ｅに含まれるパスＩＤは検出されない。
【００６６】
ＢＩＮデータ１５０ｃの位置「１０１１」において、タグ開始記号「［」の後に、イベント定義表１５０ｅに含まれるパスＩＤ「２」が検出されるので、イベント（１）が発生し、イベントテーブル生成部１６０ｅは、イベントＩＤ「４」、イベント種類「Ｚ１、Ｓ」、オフセット「１２」（図２のノードＩＤ「１２」のACTに対応）をイベントテーブル１５０ｆに登録する。ＢＩＮデータ１５０ｃの位置「１０１２」において、タグ開始記号「［」の後に、イベント定義表１５０ｅに含まれるパスＩＤは検出されない。
【００６７】
ＢＩＮデータ１５０ｃの位置「１０１３」において、タグ開始記号「［」の後に、イベント定義表１５０ｅに含まれるパスＩＤは検出されない。ＢＩＮデータ１５０ｃの位置「１０１４」において、タグ開始記号「［」の後に、イベント定義表１５０ｅに含まれるパスＩＤ「５」が検出されるので、イベント（２）が発生し、イベントテーブル生成部１６０ｅは、イベントＩＤ「５」、イベント種類「Ｚ２」、オフセット「１６」（図２のノードＩＤ「１６」のnameに対応）をイベントテーブル１５０ｆに登録する。
【００６８】
ＢＩＮデータ１５０ｃの位置「１０１５」において、イベント定義表１５０ｅに含まれるパスＩＤは検出されない。ＢＩＮデータ１５０ｃの位置「１０１６」において、タグ開始記号「［」の後に、イベント定義表１５０ｅに含まれるパスＩＤ「６」が検出されるので、イベント（３）が発生し、イベントテーブル生成部１６０ｅは、イベントＩＤ「６」、イベント種類「Ｚ３、Ｃ」、オフセット「１８」（図２のノードＩＤ「１８」のcastに対応）をイベントテーブル１５０ｆに登録する。
【００６９】
ＢＩＮデータ１５０ｃの位置「１０１７」において、イベント定義表１５０ｅに含まれるパスＩＤは検出されない。ＢＩＮデータ１５０ｃの位置「１０１８」において、タグ開始記号「［」の後に、イベント定義表１５０ｅに含まれるパスＩＤは検出されない。ＢＩＮデータ１５０ｃの位置「１０１９」において、タグ開始記号「［」の後に、イベント定義表１５０ｅに含まれるパスＩＤは検出されない。
【００７０】
ＢＩＮデータ１５０ｃの位置「１０２０」において、タグ開始記号「［」の後に、イベント定義表１５０ｅに含まれるパスＩＤ「２」が検出されるので、イベント（１）が発生し、イベントテーブル生成部１６０ｅは、イベントＩＤ「７」、イベント種類「Ｚ１、Ｓ」、オフセット「２１」（図２のノードＩＤ「２１」のACTに対応）をイベントテーブル１５０ｆに登録する。ＢＩＮデータ１５０ｃの位置「１０２１」において、イベント定義表１５０ｅに含まれるパスＩＤは検出されない。
【００７１】
ＢＩＮデータ１５０ｃの位置「１０２２」において、イベント定義表１５０ｅに含まれるパスＩＤは検出されない。ＢＩＮデータ１５０ｃの位置「１０２３」において、タグ開始記号「［」の後に、イベント定義表１５０ｅに含まれるパスＩＤ「５」が検出されるので、イベント（２）が発生し、イベントテーブル生成部１６０ｅは、イベントＩＤ「８」、イベント種類「Ｚ２」、オフセット「２５」（図２のノードＩＤ「２５」のnameに対応）をイベントテーブル１５０ｆに登録する。
【００７２】
ＢＩＮデータ１５０ｃの位置「１０２４」において、イベント定義表１５０ｅに含まれるパスＩＤは検出されない。ＢＩＮデータ１５０ｃの位置「１０２５」において、タグ開始記号「［」の後に、イベント定義表１５０ｅに含まれるパスＩＤ「６」が検出されるので、イベント（３）が発生し、イベントテーブル生成部１６０ｅは、イベントＩＤ「９」、イベント種類「Ｚ３、Ｃ」、オフセット「２７」（図２のノードＩＤ「２７」のcastに対応）をイベントテーブル１５０ｆに登録する。
【００７３】
なお、ＢＩＮデータ１５０ｃの位置「１０２６」〜「１０２９」において、タグ開始記号「［」の後に、イベント定義表１５０ｅに含まれるパスＩＤは検出されない。このように、イベントテーブル生成部１６０ｅが、ＢＩＮデータ１５０ｃの位置「１００１」〜「１０２９」と、イベント定義表１５０ｅとを比較することで、イベントテーブル１５０ｆを生成する。
【００７４】
イベントテーブル集計部１６０ｆは、イベントテーブル１５０ｆの各種情報を集計することにより、クエリに対応するデータの位置（オフセット）を検出する手段である。そして、イベントテーブル集計部１６０ｆは、検出した情報を回答発信部１６０ｈに出力する。
【００７５】
図１６は、イベントテーブル集計部１６０ｆの処理を説明するための図である。図４において、ビットベクトル（Tupleベクトル）は、所定のイベントが存在するか否かを管理するためのベクトルである。
【００７６】
本実施例１にかかるビットベクトルは、一例として、クエリ開始イベントＳ以外のイベント（２）、（３）が存在するか否かを管理する。従って、第１の要素と第２の要素からなる２次元のベクトルとなり、イベント（２）（Ｚ２に対応）が存在する場合には、第１の要素にビットを立てる。一方、イベント（３）（Ｚ３に対応）が存在する場合には、第２の要素にビットを立てる。
【００７７】
イベントテーブル集計部１６０ｆは、イベントテーブル１５０ｆを集計していく過程において、イベント種類「Ｓ」を検出し、ビットベクトルが（１，１）となっている場合（クエリの照合位置にヒットした場合）に、Ａｎｓリストに登録された値を出力し、ビットベクトルを初期化する。
【００７８】
また、イベントテーブル集計部１６０ｆは、イベント種類「Ｃ」を検出した場合には、かかるイベントに対応するオフセットの値をＡｎｓリストに登録する。なお、Ａｎｓリストの初期値は「φ」に設定されている。以下において、イベントテーブル集計部１６０ｆの処理を、図１６を用いて説明する。イベントテーブル集計部１６０ｆは、ＩＤ「１」から順に、イベントテーブル１５０ｆの集計を行う。
【００７９】
イベントテーブル集計部１６０ｆは、イベントテーブル１５０ｆのＩＤ「１」において、イベント種類「Ｚ１」および「Ｓ」を検出する。しかし、ビットベクトルが（０，０）となっているため、Ａｎｓリストのオフセットを出力しない。
【００８０】
イベントテーブル集計部１６０ｆは、イベントテーブル１５０ｆのＩＤ「２」において、イベント種類「Ｚ２」を検出する。従って、イベントテーブル集計部１６０ｆは、ビットベクトルを（１，０）に設定する。
【００８１】
イベントテーブル集計部１６０ｆは、イベントテーブル１５０ｆのＩＤ「３」において、イベント種類「Ｚ３」および「Ｃ」を検出する。従って、イベントテーブル集計部１６０ｆは、ビットベクトルを（１，１）に設定し、オフセット「９」をＡｎｓリストに登録する。
【００８２】
イベントテーブル集計部１６０ｆは、イベントテーブル１５０ｆのＩＤ「４」において、イベント種類「Ｚ１」および「Ｓ」を検出し、かつビットベクトルが（１，１）に設定されているため、Ａｎｓリストの値「９」を出力する。そして、イベント集計部１６０ｆは、ビットベクトルおよびＡｎｓリストを初期化する。
【００８３】
イベントテーブル集計部１６０ｆは、イベントテーブル１５０ｆのＩＤ「５」において、イベント種類「Ｚ２」を検出する。従って、イベントテーブル集計部１６０ｆは、ビットベクトルを（０，１）に設定する。
【００８４】
イベントテーブル集計部１６０ｆは、イベントテーブル１５０ｆのＩＤ「６」において、イベント種類「Ｚ３」および「Ｃ」を検出する。従って、イベントテーブル集計部１６０ｆは、ビットベクトルを（１，１）に設定し、オフセット「１８」をＡｎｓリストに登録する。
【００８５】
イベントテーブル集計部１６０ｆは、イベントテーブル１５０ｆのＩＤ「７」において、イベント種類「Ｚ１」および「Ｓ」を検出し、かつビットベクトルが（１，１）に設定されているため、Ａｎｓリストの値「１８」を出力する。そして、イベント集計部１６０ｆは、ビットベクトルおよびＡｎｓリストを初期化する。
【００８６】
イベントテーブル集計部１６０ｆは、イベントテーブル１５０ｆのＩＤ「８」において、イベント種類「Ｚ２」を検出する。従って、イベントテーブル集計部１６０ｆは、ビットベクトルを（０，１）に設定する。
【００８７】
イベントテーブル集計部１６０ｆは、イベントテーブル１５０ｆのＩＤ「９」において、イベント種類「Ｚ３」および「Ｃ」を検出する。従って、イベントテーブル集計部１６０ｆは、ビットベクトルを（１，１）に設定し、オフセット「２７」をＡｎｓリストに登録する。
【００８８】
なお、ＩＤ「９」においてイベント列が終了するので、ビットベクトルのチェックおよびＡｎｓリストの出力を実行する。図１６に示す例では、ビットベクトルを（１，１）に設定されているので、イベントテーブル集計部１６０ｆは、Ａｎｓリストの値「２７」が出力される。イベントテーブル集計部１６０ｆは、ビットベクトルが（０，０）、（１，０）、（０，１）に設定されている場合には、Ａｎｓリストの値を出力しない。
【００８９】
図４の説明に戻ると、分岐クエリ評価部１６０ｇは、クエリクラス判定部１６０ｄによって、クエリが難クラスに属すると判定された場合に、周知技術（例えば、非特許文献１）の手法を用いて、クエリに対応するデータをＸＭＬデータ１５０ａから検索する手段である。
【００９０】
すなわち、分岐クエリ評価部１６０ｇは、ＸＭＬデータ１５０ａをスキャンして、クエリを評価するための階層リストを構築し、構築した階層リスト構造をスキャンして、ＸＭＬデータ１５０ａ内のクエリの照合位置の組み合わせを求めることで、最終的な回答の位置を検出し、検出結果を回答発信部１６０ｈに出力する。
【００９１】
回答発信部１６０ｈは、クエリに対応するデータを端末装置（クエリを送信した端末装置）に出力する手段である。具体的に、回答発信部１６０ｈは、イベントテーブル集計部１６０ｆから、集計結果となるオフセット（クエリの照合位置）の情報を取得した場合には、取得したオフセットと、ＢＩＮデータ１５０ｃとを比較することによって、オフセットに対応するデータを検出し、検出結果を端末装置に出力する。また、回答発信部１６０ｈは、分岐クエリ評価部１６０ｇから検出結果を取得した場合には、取得した検出結果を端末装置に出力する。
【００９２】
次に、本実施例１にかかる検索装置１００の処理手順について説明する。図１７は、本実施例１にかかる検索装置１００の処理手順を示すフローチャートである。同図に示すように、本実施例１にかかる検索装置１００は、端末装置からクエリの情報を取得した場合に、クエリ木構築部１６０ｃがクエリ木１５０ｄを生成し（ステップＳ１０１）、クエリクラス判定部１６０ｄがクエリクラス判定処理を実行する（ステップＳ１０２）。
【００９３】
そして、クエリが易クラスに属すると判定された場合には（ステップＳ１０３，Ｙｅｓ）、イベントテーブル生成部１６０ｅがイベントテーブル生成処理を実行し（ステップＳ１０４）、イベントテーブル集計部１６０ｆがイベント集計処理を実行し（ステップＳ１０５）、回答発信部１６０ｈが、検出結果を端末装置に出力する（ステップＳ１０６）。
【００９４】
一方、クエリクラス判定部１６０ｄによって、クエリが難クラスに属すると判定された場合には（ステップＳ１０３，Ｎｏ）分岐クエリ評価部１６０ｇが階層リスト構造を構築し（ステップＳ１０７）、階層リスト構造をスキャンして、クエリの埋め込みを求めることにより文脈ノードを検出し（ステップＳ１０８）、ステップＳ１０６に移行する。
【００９５】
次に、図１７のステップＳ１０２に示したクエリクラス判定処理について説明する。このクエリクラス判定処理は、主手続きと副手続きが存在する。図１８は、クエリクラス判定処理の主手続きを示すフローチャートであり、図１９は、クエリクラス判定処理の副手続きを示すフローチャートである。
【００９６】
図１８に示すように、クエリクラス判定部１６０ｄは、Ｓ＝Ｒｏｏｔと初期化し、Numleaf＝０と初期化し（ステップＳ２０１）、Ｓの次ステップポインタが存在するか否かを判定し（ステップＳ２０２）、次ステップポインタが存在しない場合には（ステップＳ２０３，Ｎｏ）、Ｓの述部ポインタが存在するか否かを判定する（ステップＳ２０４）。
【００９７】
そして、Ｓの述部ポインタが存在する場合には（ステップＳ２０５，Ｙｅｓ）、Ｓの述部ポインタに対応するステップ構造体を入力として、副手続きを実行し（ステップＳ２０６）、ステップＳ２０８に移行する。
【００９８】
一方、Ｓの述部ポインタが存在しない場合には（ステップＳ２０５，Ｎｏ）、Numleafに１を加算し（ステップＳ２０７）、Numleafの値が１以下か否かを判定する（ステップＳ２０８）。そして、Numleafの値が１以下となる場合には（ステップＳ２０９，Ｙｅｓ）、クエリクラス判定部１６０ｄは、クエリを易クラスと判定する（ステップＳ２１０）。一方、Numleafの値が１よりも大きい場合には（ステップＳ２０９，Ｎｏ）、クエリクラス判定部１６０ｄは、クエリを難クラスと判定する（ステップＳ２１１）。
【００９９】
ところで、ステップＳ２０３に戻ると、Ｓの次ステップポインタが存在する場合には（ステップＳ２０３，Ｙｅｓ）、Ｓの述部ポインタが存在するか否かを判定し（ステップＳ２１２）、Ｓの述部ポインタが存在しない場合には（ステップＳ２１３，Ｎｏ）、ステップＳ２１５に移行する。
【０１００】
一方、Ｓの述部ポインタが存在する場合には（ステップＳ２１３，Ｙｅｓ）、Ｓの述部ポインタに対応するステップ構造体を入力として、副手続きを実行し（ステップＳ２１４）、Ｓの次ステップポインタをＳに代入する（ステップＳ２１５）。
【０１０１】
そして、クエリクラス判定部１６０ｄは、Ｓに次ステップポインタまたは述部ポインタが存在するか否かを判定し（ステップＳ２１６）、存在しない場合には（ステップＳ２１７，Ｎｏ）、ステップＳ２０８に移行する。一方、Ｓに次ステップポインタまたは述部ポインタが存在する場合には（ステップＳ２１７，Ｙｅｓ）、ステップＳ２１１に移行する。
【０１０２】
次に、ステップＳ２０６およびステップＳ２１４に示した副手続きについて説明する。図１９に示すように、クエリクラス判定部１６０ｄは、副手続きにおいて、Ｓに部分木のルート構造体（ステップ構造体）を代入し（ステップＳ３０１）、Ｓの次ステップポインタが存在するか否かを判定する（ステップＳ３０２）。
【０１０３】
Ｓの次ステップポインタが存在しない場合には（ステップＳ３０３，Ｎｏ）、Ｓの述部ポインタが存在するか否かを判定し（ステップＳ３０４）、Ｓの述部ポインタが存在する場合には（ステップＳ３０５，Ｙｅｓ）、Ｓの述部ポインタに対するステップ構造体を入力として、副手続きを実行し（ステップＳ３０６）、副手続きを終了する。一方、Ｓの述部ポインタが存在しない場合には（ステップＳ３０５，Ｎｏ）、Numleafに１を加算し（ステップＳ３０７）、副手続きを終了する。
【０１０４】
ところで、ステップＳ３０３の説明に戻ると、Ｓの次ステップポインタが存在する場合に（ステップＳ３０３，Ｙｅｓ）、Ｓの述部ポインタが存在するか否かを判定し（ステップＳ３０８）、Ｓの述部ポインタが存在しない場合には（ステップＳ３０９，Ｎｏ）、ステップＳ３１１に移行する。
【０１０５】
一方、Ｓの述部ポインタが存在する場合には（ステップＳ３０９，Ｙｅｓ）、Ｓの述部ポインタに対応するステップ構造体を入力として、副手続きを実行し（ステップＳ３１０）、Ｓの次ステップポインタをＳに代入し（ステップＳ３１１）、ステップＳ３０２に移行する。なお、図１９のステップＳ３０６およびステップＳ３１０に示した副手続きは、図１９と同様の副手続きを再度実行する。
【０１０６】
次に、図１７のステップＳ１０４に示したイベントテーブル生成処理について説明する。図２０は、イベントテーブル生成処理の処理手順を示すフローチャートである。同図に示すように、イベントテーブル生成部１６０ｅは、イベントテーブル１５０ｆを空テーブルとして初期化し、オフセットを初期化する（ステップＳ４０１）。
【０１０７】
そして、イベントテーブル生成部１６０ｅは、ＢＩＮデータ１５０ｃを１文字ずつスキャンし、タグ開始記号「［」を検出するたびに、オフセットに１を加算する。また、タグ開始記号「［」の直後に、イベント定義表１５０ｅに含まれるパスＩＤを検出した場合に、イベントテーブルのＩＤに１を加算し、イベントテーブルに（ＩＤ、イベント種類、オフセット）を登録し（ステップＳ４０２）、イベントテーブルを出力する（ステップＳ４０３）。
【０１０８】
次に、図１７のステップＳ１０５に示したイベント集計処理について説明する。図２１は、イベント集計処理の処理手順を示すフローチャートである。同図に示すように、イベントテーブル集計部１６０ｆは、ビットベクトル（Tupleベクトル）および文脈ノードリスト（Ａｎｓリスト）を初期化し（ステップＳ５０１）、全イベントの処理が終了したか否かを判定する（ステップＳ５０２）。
【０１０９】
そして、全イベントの処理が終了している場合には（ステップＳ５０３，Ｙｅｓ）、ビットベクトルの全要素が１か否かを判定し（ステップＳ５０４）、全要素が１の場合には（ステップＳ５０５，Ｙｅｓ）、文脈ノードリストを出力し（ステップＳ５０６）、イベント集計処理を終了する。一方、全要素が１ではない場合には（ステップＳ５０５，Ｎｏ）、そのままイベント集計処理を終了する。
【０１１０】
ところで、ステップＳ５０３に戻ると、全イベントの処理が終了していない場合には（ステップＳ５０３，Ｎｏ）、イベントテーブル１５０ｆから次のイベントを取得し（ステップＳ５０７）、イベント種類がＳか否かを判定する（ステップＳ５０８）。
【０１１１】
イベント種類がＳではない場合には（ステップＳ５０９，Ｎｏ）、ビットベクトルの該当要素を１に設定する。また、イベント種類がＣの場合には、オフセットを文脈ノードリストに追加し（ステップＳ５１０）、ステップＳ５０２に移行する。
【０１１２】
一方、イベント種類がＳの場合には（ステップＳ５０９，Ｙｅｓ）、ビットベクトルの全要素が１か否かを判定し（ステップＳ５１１）、全要素が１ではない場合には（ステップＳ５１２，Ｎｏ）、ステップＳ５１４に移行する。
【０１１３】
一方、ビットベクトルの全要素が１の場合には（ステップＳ５１２，Ｙｅｓ）、文脈ノードリストを出力し（ステップＳ５１３）、ビットベクトルおよび文脈ノードリストを初期化し（ステップＳ５１４）、ステップＳ５０２に移行する。
【０１１４】
上述してきたように、本実施例１にかかる検索装置１００は、クエリクラス判定部１６０ｄが、クエリが易クラスに属するか難クラスに属するかを判定し、クエリクラス判定部１６０ｄが易クラスに属すると判定した場合に、イベントテーブル生成部１６０ｅがイベント定義表１５０ｅおよびイベントテーブル１５０ｆを生成し、イベントテーブル集計部１６０ｆがイベントテーブル１５０ｆを集計することによりクエリに対応するデータを検索するので、クエリが易クラスに属する場合に、装置にかかる負荷を軽減させ、データ検索の効率を向上させることが出来る。
【０１１５】
なお、実際に利用されるクエリの多くは、階層管理が不要な易クラスに属していることが現状であり、難クラスに属していることは稀であるため、本実施例１にかかる検索装置１００の実用上の効果は大きいと考えられる。
【実施例２】
【０１１６】
次に、上述した実施例１にかかる検索装置に対する第１の拡張例（文字列の部分一致への拡張）を実施例２として説明する。本実施例２にかかる検索装置が利用するクエリは、文字列を含む。そして、実施例１で示したクエリの定義「Expr::=RPath」は、文字列の部分一致を扱えるように、下記のように拡張される。
Expr::=RPath|contains(RPath,string)
【０１１７】
例えば、クエリが、
Q3=/Syain/ACT[contains(chara/name,"レッド")]/cast
と指定された場合には、図２に示した各ノードのうち、要素ノードcast９のデータ（図３の回答Ｂ）を取得することが出来る。上記のクエリＱ３は、/Syain/ACT要素（要素ノードACT３，１２，２１）のうち、その要素ノードのchara要素が文字列「レッド」を含む要素ノード（要素ノードACT３）のcast要素（要素ノードcast９）を回答するクエリである。
【０１１８】
次に、本実施例２にかかる検索装置の構成について説明する。図２２は、本実施例２にかかる検索装置２００の構成を示す機能ブロック図である。同図に示すように、この検索装置２００は、入力部２１０と、出力部２２０と、通信制御ＩＦ部２３０と、入出力制御ＩＦ部２４０と、記憶部２５０と、制御部２６０とを備えて構成される。
【０１１９】
このうち、入力部２１０は、各種の情報を入力する入力手段であり、キーボードやマウス、マイクなどによって構成され、例えば、上述したＸＭＬデータに関する各種の情報を受け付けて入力する。なお、後述するモニタ（出力部２２０）も、マウスと協働してポインティングデバイス機能を実現する。
【０１２０】
出力部２２０は、各種の情報を出力する出力手段であり、モニタ（若しくはディスプレイ、タッチパネル）やスピーカなどによって構成され、例えば、上述したＸＭＬデータに関する各種の情報を出力する。
【０１２１】
通信制御ＩＦ部２３０は、端末装置との間における通信を制御する手段である。入出力制御ＩＦ部２４０は、入力部２１０、出力部２２０、通信制御ＩＦ部２３０、記憶部２５０、制御部２６０によるデータの入出力を制御する手段である。
【０１２２】
記憶部２５０は、制御部２６０による各種処理に必要なデータおよびプログラムを記憶する記憶手段（格納手段）であり、特に本発明に密接に関連するものとしては、図２２に示すように、ＸＭＬデータ２５０ａ、パスＩＤテーブル２５０ｂ、ＢＩＮデータ２５０ｃ、クエリ木２５０ｄ、イベント定義表２５０ｅ、イベントテーブル２５０ｆを備える。
【０１２３】
このうち、ＸＭＬデータ２５０ａ、パスＩＤテーブル２５０ｂ、ＢＩＮデータ２５０ｃ、クエリ木２５０ｄは、実施例１に示したＸＭＬデータ１５０ａ、パスＩＤテーブル１５０ｂ、ＢＩＮデータ１５０ｃ、クエリ木１５０ｄと同様であるため、説明を省略する。
【０１２４】
イベント定義表２５０ｅは、クエリに含まれるイベント種類とパスＩＤとを対応付けたデータである。図２３は、本実施例２にかかるイベント定義表２５０ｅのデータ構造の一例を示す図である。同図に示すように、このイベント定義表２５０ｅは、定義ＩＤと、パスＩＤと、イベント種類とを対応付けて記憶している。なお、定義ＩＤは、パスＩＤとイベント種類との組み合わせを識別する情報である。
【０１２５】
イベント種類となる集合ETYPE(Q)は、パスヒットイベントＺ１、・・・、Ｚｎ（クエリに含まれるパスＩＤのうち、contains内のパスＩＤ以外の全てのパスＩＤに対応付ける）、パス＋キーワードヒットイベントＡ１、・・・、Ａｍ、クエリ開始イベントＳ、文脈ノードイベントＣを有する。ここで、パス＋キーワードヒットイベントは、該当キーワードにヒットした旨を示すイベントである。
【０１２６】
例えば、クエリが、
Q=/Syain/ACT[contains(chara/name,"レッド")]/cast（パス表記では、/2[contains(5,レッド)]6）
と指定され、イベント種類の集合が、
ETYPE(Q)={Z1,A1,Z2}
と指定されている場合には、図２３に示したイベント定義表が生成される。
【０１２７】
イベントテーブル２５０ｆは、クエリから生成されるオートマトンにＢＩＮデータ２５０ｃを代入し、イベントが発生した場合に、かかるイベントの情報（イベントＩＤ、イベント種類、オフセット）を記憶するデータである。図２４は、本実施例２にかかるイベントテーブル２５０ｆのデータ構造の一例を示す図である。同図に示すように、このイベントテーブル２５０ｆは、イベントＩＤ、イベント種類、オフセットを対応付けて記憶している。
【０１２８】
制御部２６０は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する制御手段であり、特に本発明に密接に関連するものとしては、図２２に示すように、ＢＩＮデータ生成部２６０ａ、クエリ受信部２６０ｂ、クエリ木構築部２６０ｃ、クエリクラス判定部２６０ｄ、イベントテーブル生成部２６０ｅ、イベントテーブル集計部２６０ｆ、分岐クエリ評価部２６０ｇ、回答発信部２６０ｈを備える。
【０１２９】
このうち、ＢＩＮデータ生成部２６０ａ、クエリ受信部２６０ｂ、クエリ木構築部２６０ｃ、クエリクラス判定部２６０ｄ、分岐クエリ評価部２６０ｇ、回答発信部２６０ｈは、図４に示した、ＢＩＮデータ生成部１６０ａ、クエリ受信部１６０ｂ、クエリ木構築部１６０ｃ、クエリクラス判定部１６０ｄ、分岐クエリ評価部１６０ｇ、回答発信部１６０ｈと同様であるため、説明を省略する。
【０１３０】
イベントテーブル生成部２６０ｅは、クエリクラス判定部２６０ｄから判定結果を取得し、クエリが易クラスに属していると判定されている場合に、クエリからイベント定義表２５０ｅ（図２３参照）を生成すると共に、クエリのオートマトンを利用してイベントテーブル２５０ｆ（図２４参照）を生成する手段である。
【０１３１】
まず、イベントテーブル生成部２６０ｅがイベント定義表２５０ｅを生成する処理について説明すると、イベントテーブル生成部２６０ｅは、例えば、クエリが、
Q=/Syain/ACT[contains(chara/name,"レッド")]/cast（パス表記では、/2[contains(5,レッド)]6）
と指定され、イベント種類の集合が、
ETYPE(Q)={Z1,A1,Z2}
と指定されている場合には、クエリのパスＩＤおよび文字列と、イベント種類の集合を対応させることにより、図２３に示したイベント定義表２５０ｅを生成する。
【０１３２】
上記の条件では、パスＩＤ「２」がイベント種類「Ｚ１」に対応し、パスＩＤ、文字列「[contains(5,レッド)]」がイベント種類「Ａ１」に対応し、パスＩＤ「６」がイベント種類「Ｚ２」に対応する。また、パスＩＤ「２」は、クエリの開始パスであるため、イベント種類に「Ｓ」を含ませる。パスＩＤ「６」は、クエリの終了パスであるため、イベント種類に「Ｃ」を含ませる。
【０１３３】
続いて、イベントテーブル生成部２６０ｅがイベントテーブル２５０ｆを生成する場合の処理について説明する。イベントテーブル生成部２６０ｅは、イベントテーブル２５０ｆを生成する前準備として、クエリのオートマトンを生成する。なお、イベントテーブル生成部２６０ｅがクエリからオートマトンを生成する場合には、例えば、特願２００７−１９５０８１に記載された手法を用いれば良い。
【０１３４】
図２５は、本実施例２にかかるクエリのオートマトンのデータ構造の一例を示す図である。図２５に示すオートマトンは、クエリ「/Syain/ACT[contains(chara/name,"レッド")]/cast（パス表記では、/2[contains(5,レッド)]6）」から生成されるオートマトンである。このオートマトンは、複数のノード構造体５０〜５５、イベント構造体６０〜６２を有する。なお、図２５の「ε」は、無条件で矢印の方向に処理が移行することを示す。
【０１３５】
イベントテーブル生成部２６０ｅは、図２５に示したオートマトンにＢＩＮデータ２５０ｃを順次代入することで、イベントテーブル２５０ｆを生成する。以下において、イベントテーブル生成部２６０ｅが、イベントテーブル２５０ｆを生成する処理を、図２６のＢＩＮデータ２５０ｃの位置「１００１」〜「１０２９」に分けて説明する。図２６は、本実施例２にかかるイベントテーブル生成部２６０ｅの処理を説明するための図である。なお、イベントテーブル生成部２６０ｅは、実施例１と同様にして、オフセットの値を、イベントが発生した際の、ノードのノードＩＤ（図２参照）をオフセットとする。
【０１３６】
（ＢＩＮデータ２５０ｃの位置「１００１」）
イベントテーブル生成部２６０ｅは、ＢＩＮデータ２５０ｃの位置「１００１」に対応するデータ「［１シグマ戦隊中原ジャー」をオートマトンに代入する。すると、かかるデータは、ノード構造体５０を始点とし、ノード構造体５２に移行した段階で、次に対応する数字が存在しなくなるため、ノード構造体５０に戻り、位置「１００１」の検索を終了する。
【０１３７】
（ＢＩＮデータ２５０ｃの位置「１００２」）
イベントテーブル生成部２６０ｅは、ＢＩＮデータ２５０ｃの位置「１００２」に対応するデータ「［２」をオートマトンに代入する。すると、かかるデータは、ノード構造体５０を始点とし、イベント構造体６０に到達する。イベント構造体６０に到達した時点で、イベント（１）（イベント定義ＩＤ（１））が発生し、イベントテーブル生成部２６０ｅは、イベントＩＤ「１」、イベント種類「Ｚ１、Ｓ」、オフセット「３」をイベントテーブル２５０ｆに登録する。なお、イベント種類は、イベント定義ＩＤと、イベント定義表２５０ｅ（図２３参照）を比較することで特定される。
【０１３８】
（ＢＩＮデータ２５０ｃの位置「１００３」）
イベントテーブル生成部２６０ｅは、ＢＩＮデータ２５０ｃの位置「１００３」に対応するデータ「［３１］３」をオートマトンに代入する。すると、かかるデータは、ノード構造体５０を始点とし、ノード構造体５２に移行した段階で、次に対応する数字が存在しなくなるため、ノード構造体５０に戻り、位置「１００３」の検索を終了する。
【０１３９】
（ＢＩＮデータ２５０ｃの位置「１００４」）
イベントテーブル生成部２６０ｅは、ＢＩＮデータ２５０ｃの位置「１００４」に対応するデータ「［４」をオートマトンに代入する。すると、かかるデータは、ノード構造体５０を始点とし、ノード構造体５２に移行した段階で、次に対応する数字が存在しなくなるため、ノード構造体５０に戻り、位置「１００４」の検索を終了する。
【０１４０】
（ＢＩＮデータ２５０ｃの位置「１００５」）
イベントテーブル生成部２６０ｅは、ＢＩＮデータ２５０ｃの位置「１００５」に対応するデータ「［５シグマレッド］５」をオートマトンに代入する。すると、かかるデータは、ノード構造体５０を始点とし、イベント構造体６１に到達する。イベント構造体６１に到達した時点で、イベント（２）が発生し、イベントテーブル生成部２６０ｅは、イベントＩＤ「２」、イベント種類「Ａ１」、オフセット「８」をイベントテーブル２５０ｆに登録する。
【０１４１】
（ＢＩＮデータ２５０ｃの位置「１００６」）
イベントテーブル生成部２６０ｅは、ＢＩＮデータ２５０ｃの位置「１００６」に対応するデータ「］４」をオートマトンに代入する。すると、かかるデータは、ノード構造体５０を始点とし、ノード構造体５１に移行した段階で、ノード構造体５０に戻り、位置「１００６」の検索を終了する。
【０１４２】
（ＢＩＮデータ２５０ｃの位置「１００７」）
イベントテーブル生成部２６０ｅは、ＢＩＮデータ２５０ｃの位置「１００７」に対応するデータ「［６」をオートマトンに代入する。すると、かかるデータは、ノード構造体５０を始点とし、イベント構造体６２に到達する。イベント構造体６２に到達した時点で、イベント（３）が発生し、イベントテーブル生成部２６０ｅは、イベントＩＤ「３」、イベント種類「Ｚ２、Ｃ」、オフセット「９」をイベントテーブル２５０ｆに登録する。
【０１４３】
（ＢＩＮデータ２５０ｃの位置「１００８」）
イベントテーブル生成部２６０ｅは、ＢＩＮデータ２５０ｃの位置「１００８」に対応するデータ「［７浅井達哉］７」をオートマトンに代入する。すると、かかるデータは、ノード構造体５０を始点とし、ノード構造体５２に移行した段階で、次に対応する数字が存在しなくなるため、ノード構造体５０に戻り、位置「１００８」の検索を終了する。
【０１４４】
（ＢＩＮデータ２５０ｃの位置「１００９」）
イベントテーブル生成部２６０ｅは、ＢＩＮデータ２５０ｃの位置「１００９」に対応するデータ「］６」をオートマトンに代入する。すると、かかるデータは、ノード構造体５０を始点とし、ノード構造体５１に移行した段階で、ノード構造体５０に戻り、位置「１００９」の検索を終了する。
【０１４５】
（ＢＩＮデータ２５０ｃの位置「１０１０」）
イベントテーブル生成部２６０ｅは、ＢＩＮデータ２５０ｃの位置「１０１０」に対応するデータ「］２」をオートマトンに代入する。すると、かかるデータは、ノード構造体５０を始点とし、ノード構造体５１に移行した段階で、ノード構造体５０に戻り、位置「１０１０」の検索を終了する。
【０１４６】
（ＢＩＮデータ２５０ｃの位置「１０１１」）
イベントテーブル生成部２６０ｅは、ＢＩＮデータ２５０ｃの位置「１０１１」に対応するデータ「［２」をオートマトンに代入する。すると、かかるデータは、ノード構造体５０を始点とし、イベント構造体６０に到達する。イベント構造体６０に到達した時点で、イベント（１）が発生し、イベントテーブル生成部２６０ｅは、イベントＩＤ「４」、イベント種類「Ｚ１、Ｓ」、オフセット「１２」をイベントテーブル２５０ｆに登録する。
【０１４７】
（ＢＩＮデータ２５０ｃの位置「１０１２」）
イベントテーブル生成部２６０ｅは、ＢＩＮデータ２５０ｃの位置「１０１２」に対応するデータ「［３２］３」をオートマトンに代入する。すると、かかるデータは、ノード構造体５０を始点とし、ノード構造体５２に移行した段階で、次に対応する数字が存在しなくなるので、ノード構造体５０に戻り、位置「１０１２」の検索を終了する。
【０１４８】
（ＢＩＮデータ２５０ｃの位置「１０１３」）
イベントテーブル生成部２６０ｅは、ＢＩＮデータ２５０ｃの位置「１０１３」に対応するデータ「［４」をオートマトンに代入する。すると、かかるデータは、ノード構造体５０を始点とし、ノード構造体５２に移行した段階で、次に対応する数字が存在しなくなるので、ノード構造体５０に戻り、位置「１０１３」の検索を終了する。
【０１４９】
（ＢＩＮデータ２５０ｃの位置「１０１４」）
イベントテーブル生成部２６０ｅは、ＢＩＮデータ２５０ｃの位置「１０１４」に対応するデータ「［５シグマブルー］５」をオートマトンに代入する。すると、かかるデータは、ノード構造体５０を始点とし、ノード構造体５２に移行した段階で、次に対応する数字が存在しなくなるので、ノード構造体５０に戻り、位置「１０１４」の検索を終了する。
【０１５０】
（ＢＩＮデータ２５０ｃの位置「１０１５」）
イベントテーブル生成部２６０ｅは、ＢＩＮデータ２５０ｃの位置「１０１５」に対応するデータ「］４」をオートマトンに代入する。すると、かかるデータは、ノード構造体５０を始点とし、ノード構造体５１に移行した段階で、ノード構造体５０に戻り、位置「１０１５」の検索を終了する。
【０１５１】
（ＢＩＮデータ２５０ｃの位置「１０１６」）
イベントテーブル生成部２６０ｅは、ＢＩＮデータ２５０ｃの位置「１０１６」に対応するデータ「［６」をオートマトンに代入する。すると、かかるデータは、ノード構造体５０を始点とし、イベント構造体６２に到達する。イベント構造体６２に到達した時点で、イベント（３）が発生し、イベントテーブル生成部２６０ｅは、イベントＩＤ「５」、イベント種類「Ｚ２、Ｃ」、オフセット「１８」をイベントテーブル２５０ｆに登録する。
【０１５２】
（ＢＩＮデータ２５０ｃの位置「１０１７」）
イベントテーブル生成部２６０ｅは、ＢＩＮデータ２５０ｃの位置「１０１７」に対応するデータ「［７多湖真一郎］７」をオートマトンに代入する。すると、かかるデータは、ノード構造体５０を始点とし、ノード構造体５２に移行した段階で、次に対応する数字が存在しなくなるため、ノード構造体５０に戻り、位置「１０１７」の検索を終了する。
【０１５３】
（ＢＩＮデータ２５０ｃの位置「１０１８」）
イベントテーブル生成部２６０ｅは、ＢＩＮデータ２５０ｃの位置「１０１８」に対応するデータ「］６」をオートマトンに代入する。すると、かかるデータは、ノード構造体５０を始点とし、ノード構造体５１に移行した段階で、ノード構造体５０に戻り、位置「１０１８」の検索を終了する。
【０１５４】
（ＢＩＮデータ２５０ｃの位置「１０１９」）
イベントテーブル生成部２６０ｅは、ＢＩＮデータ２５０ｃの位置「１０１９」に対応するデータ「］２」をオートマトンに代入する。すると、かかるデータは、ノード構造体５０を始点とし、ノード構造体５１に移行した段階で、ノード構造体５０に戻り、位置「１０１９」の検索を終了する。
【０１５５】
（ＢＩＮデータ２５０ｃの位置「１０２０」）
イベントテーブル生成部２６０ｅは、ＢＩＮデータ２５０ｃの位置「１０２０」に対応するデータ「［２」をオートマトンに代入する。すると、かかるデータは、ノード構造体５０を始点とし、イベント構造体６０に到達する。イベント構造体６０に到達した時点で、イベント（１）が発生し、イベントテーブル生成部２６０ｅは、イベントＩＤ「６」、イベント種類「Ｚ１、Ｓ」、オフセット「２１」をイベントテーブル２５０ｆに登録する。
【０１５６】
（ＢＩＮデータ２５０ｃの位置「１０２１」）
イベントテーブル生成部２６０ｅは、ＢＩＮデータ２５０ｃの位置「１０２１」に対応するデータ「［３３］３」をオートマトンに代入する。すると、かかるデータは、ノード構造体５０を始点とし、ノード構造体５２に移行した段階で、次に対応する数字が存在しなくなるため、ノード構造体５０に戻り、位置「１０２１」の検索を終了する。
【０１５７】
（ＢＩＮデータ２５０ｃの位置「１０２２」）
イベントテーブル生成部２６０ｅは、ＢＩＮデータ２５０ｃの位置「１０２２」に対応するデータ「［４」をオートマトンに代入する。すると、かかるデータは、ノード構造体５０を始点とし、ノード構造体５２に移行した段階で、次に対応する数字が存在しなくなるため、ノード構造体５０に戻り、位置「１０２２」の検索を終了する。
【０１５８】
（ＢＩＮデータ２５０ｃの位置「１０２３」）
イベントテーブル生成部２６０ｅは、ＢＩＮデータ２５０ｃの位置「１０２３」に対応するデータ「［５シグマピンク］５」をオートマトンに代入する。すると、かかるデータは、ノード構造体５０を始点とし、ノード構造体５２に移行した段階で、次に対応する数字が存在しなくなるため、ノード構造体５０に戻り、位置「１０２３」の検索を終了する。
【０１５９】
（ＢＩＮデータ２５０ｃの位置「１０２４」）
イベントテーブル生成部２６０ｅは、ＢＩＮデータ２５０ｃの位置「１０２４」に対応するデータ「］４」をオートマトンに代入する。すると、かかるデータは、ノード構造体５０を始点とし、ノード構造体５１に移行した段階で、ノード構造体５０に戻り、位置「１０２４」の検索を終了する。
【０１６０】
（ＢＩＮデータ２５０ｃの位置「１０２５」）
イベントテーブル生成部２６０ｅは、ＢＩＮデータ２５０ｃの位置「１０２５」に対応するデータ「［６」をオートマトンに代入する。すると、かかるデータは、ノード構造体５０を始点とし、イベント構造体６２に到達する。イベント構造体６２に到達した時点で、イベント（３）が発生し、イベントテーブル生成部２６０ｅは、イベントＩＤ「７」、イベント種類「Ｚ２、Ｃ」、オフセット「２７」をイベントテーブル２５０ｆに登録する。
【０１６１】
（ＢＩＮデータ２５０ｃの位置「１０２６」〜「１０２９」）
なお、ＢＩＮデータ２５０ｃの位置「１０２６」〜「１０２９」において、イベントは発生しない。このように、イベントテーブル生成部２６０ｅは、ＢＩＮデータ２５０ｃの位置「１００１」〜「１０２９」のデータを、オートマトンに代入することで、イベントテーブル２５０ｆを生成する。
【０１６２】
イベントテーブル集計部２６０ｆは、イベントテーブル２５０ｆの各種情報を集計することにより、クエリに対応するデータの位置（オフセット）を検出する手段である。そして、イベントテーブル集計部２６０ｆは、検出した情報を回答発信部２６０ｈに出力する。
【０１６３】
図２７は、本実施例２にかかるイベントテーブル集計部２６０ｆの処理を説明するための図である。図２７において、ビットベクトル（Tupleベクトル）は、所定のイベントが存在するか否かを管理するためのベクトルである。
【０１６４】
本実施例２にかかるビットベクトルは、一例として、クエリ開始イベントＳ以外のイベント（２）、（３）が存在するか否かを管理する。従って、ビットベクトルは、第１の要素と第２の要素からなる２次元のベクトルとなり、イベント（２）（Ａ１に対応）が存在する場合には、第１の要素にビットを立てる。一方、イベント（３）（Ｚ２に対応）が存在する場合には、第２の要素にビットを立てる。
【０１６５】
そして、イベントテーブル集計部２６０ｆは、イベントテーブル２５０ｆを集計していく過程において、イベント種類「Ｓ」を検出し、ビットベクトルが（１，１）となっている場合（クエリの照合位置にヒットした場合）に、Ａｎｓリストに登録された値を出力し、ビットベクトルを初期化する。
【０１６６】
また、イベントテーブル集計部２６０ｆは、イベント種類「Ｃ」を検出した場合には、かかるイベントに対応するオフセットの値をＡｎｓリストに登録する。なお、Ａｎｓリストの初期値は「φ」に設定されている。以下において、イベントテーブル集計部２６０ｆの処理を、図２７を用いて説明する。イベントテーブル集計部２６０ｆは、ＩＤ「１」から順に、イベントテーブル２５０ｆの集計を行う。
【０１６７】
イベントテーブル集計部２６０ｆは、イベントテーブル２５０ｆのＩＤ「１」において、イベント種類「Ｚ１」および「Ｓ」を検出する。しかし、ビットベクトルが（０，０）となっているため、Ａｎｓリストを出力しない。
【０１６８】
イベントテーブル集計部２６０ｆは、イベントテーブル２５０ｆのＩＤ「２」において、イベント種類「Ａ１」を検出する。従って、イベントテーブル集計部２６０ｆは、ビットベクトルを（１，０）に設定する。
【０１６９】
イベントテーブル集計部２６０ｆは、イベントテーブル２５０ｆのＩＤ「３」において、イベント種類「Ｚ２」および「Ｃ」を検出する。従って、イベントテーブル集計部２６０ｆは、ビットベクトルを（１，１）に設定し、オフセット「９」をＡｎｓリストに登録する。
【０１７０】
イベントテーブル集計部２６０ｆは、イベントテーブル２５０ｆのＩＤ「４」において、イベント種類「Ｚ１」および「Ｓ」を検出し、かつビットベクトルが（１，１）に設定されているため、Ａｎｓリストの値「９」を出力する。そして、イベント集計部２６０ｆは、ビットベクトルおよびＡｎｓリストを初期化する。
【０１７１】
イベントテーブル集計部２６０ｆは、イベントテーブル２５０ｆのＩＤ「５」において、イベント種類「Ｚ２」および「Ｃ」を検出する。従って、イベントテーブル集計部２６０ｆは、ビットベクトルを（０，１）に設定し、オフセット「１８」をＡｎｓリストに登録する。
【０１７２】
イベントテーブル集計部２６０ｆは、イベントテーブル２５０ｆのＩＤ「６」において、イベント種類「Ｚ１」および「Ｓ」を検出する。しかし、ビットベクトルが（０，１）となっているため、Ａｎｓリストのオフセットを出力することなく、ビットベクトルおよびＡｎｓリストを初期化する。
【０１７３】
イベントテーブル集計部２６０ｆは、イベントテーブル２５０ｆのＩＤ「７」において、イベント種類「Ｚ２」および「Ｃ」を検出する。従って、イベントテーブル集計部２６０ｆは、ビットベクトルを（０，１）に設定し、オフセット「２７」をＡｎｓリストに登録する。
【０１７４】
なお、ＩＤ「７」においてイベント列が終了するので、ビットベクトルのチェックおよびＡｎｓリストの出力を実行する。図２７に示す例では、ビットベクトルを（０，１）に設定されているので、イベントテーブル集計部２６０ｆは、Ａｎｓリストの値を出力しない。
【０１７５】
上述してきたように、本実施例２にかかる検索装置２００は、クエリクラス判定部２６０ｄが、クエリが易クラスに属するか難クラスに属するかを判定し、クエリクラス判定部２６０ｄが易クラスに属すると判定した場合に、イベントテーブル生成部２６０ｅがクエリのオートマトンを作成して、ＢＩＮデータ２５０ｃを代入することでイベントテーブル２５０ｆを生成し、イベントテーブル集計部２６０ｆがイベントテーブル２５０ｆを集計することによりクエリに対応するデータを検索するので、クエリに文字列が含まれる場合であっても、クエリが易クラスに属する場合に、装置にかかる負荷を軽減させ、データ検索の効率を向上させることが出来る。
【実施例３】
【０１７６】
次に、上述した実施例１にかかる検索装置に対する第２の拡張例（論理式への拡張）を実施例３として説明する。本実施例３にかかる検索装置が利用するクエリは、論理式を含む。そして、実施例１で示したクエリの定義「Pred::=Expr」は、論理式を扱えるように、下記のように拡張される。
Pred::=Expr|Expr  "and"  Expr|Expr  "or"  Expr|"not"  Expr
Step::=Axis"::"Ntest("["Pred"]")*
ここで、Step行における「*」は、０回以上の繰り返しを表す。なお、Predの２回以上の繰り返しは、andと同じ意味になる。例えば、クエリ「/A[B][C]」と、クエリ「/A[B  and  C]」の意味は同じである。
【０１７７】
例えば、クエリが、
Q4=/Syain/ACT[contains(chara/name,レッド)or  cast]/id
と指定された場合には、図２に示した各ノードのうち、論理条件を満たす要素ノードid４、１３、２２のデータ（図３の回答Ｇ、回答Ｈ，回答Ｉ）を取得することが出来る。上記のクエリＱ４は、/Syain/ACT要素（要素ノードACT３，１２，２１）のうち、その要素ノードのchara要素が文字列「レッド」を含む要素ノード（要素ノードACT３）あるいは要素ノードcastを含む要素ノード（要素ノードACT３，１２，２１）のid要素（要素ノードid４，１３，２２）を回答するクエリである。
【０１７８】
次に、本実施例３にかかる検索装置の構成について説明する。図２８は、本実施例３にかかる検索装置の構成を示す機能ブロック図である。同図に示すように、この検索装置３００は、入力部３１０と、出力部３２０と、通信制御ＩＦ部３３０と、入出力制御ＩＦ部３４０と、記憶部３５０と、制御部３６０とを備えて構成される。
【０１７９】
このうち、入力部３１０は、各種の情報を入力する入力手段であり、キーボードやマウス、マイクなどによって構成され、例えば、上述したＸＭＬデータに関する各種の情報を受け付けて入力する。なお、後述するモニタ（出力部３２０）も、マウスと協働してポインティングデバイス機能を実現する。
【０１８０】
出力部３２０は、各種の情報を出力する出力手段であり、モニタ（若しくはディスプレイ、タッチパネル）やスピーカなどによって構成され、例えば、上述したＸＭＬデータに関する各種の情報を出力する。
【０１８１】
通信制御ＩＦ部３３０は、端末装置との間における通信を制御する手段である。入出力制御ＩＦ部３４０は、入力部３１０、出力部３２０、通信制御ＩＦ部３３０、記憶部３５０、制御部３６０によるデータの入出力を制御する手段である。
【０１８２】
記憶部３５０は、制御部３６０による各種処理に必要なデータおよびプログラムを記憶する記憶手段（格納手段）であり、特に本発明に密接に関連するものとしては、図２８に示すように、ＸＭＬデータ３５０ａ、パスＩＤテーブル３５０ｂ、ＢＩＮデータ３５０ｃ、クエリ木３５０ｄ、イベント定義表３５０ｅ、イベントテーブル３５０ｆを備える。
【０１８３】
このうち、ＸＭＬデータ３５０ａ、パスＩＤテーブル３５０ｂ、ＢＩＮデータ３５０ｃは、実施例１に示したＸＭＬデータ１５０ａ、パスＩＤテーブル１５０ｂ、ＢＩＮデータ１５０ｃと同様であるため、説明を省略する。
【０１８４】
クエリ木３５０ｄは、クエリから構築されるクエリ木を記憶するデータであり、かかるクエリ木は複数のステップ構造体から構成される。ここで、ステップは、（軸、タグ名、述部）の三項組で表される（本実施例３では、軸は子供軸のみを取り扱う）。
【０１８５】
図２９は、本実施例３にかかるステップ構造体のデータ構造を説明するための図である。同図に示すように、このステップ構造体は、パスＩＤ（イベントＩＤ）と、複数の述部ポインタ（クエリに論理式が含まれる場合には、ステップ構造体は、複数の述部ポインタを持てる）と、次ステップポインタとを有する。このうち、述部ポインタは、述部を示すステップ構造体のポインタであり、次ステップポインタは、次ステップとなるステップ構図体のポインタである。なお、クエリ木のルートとなるステップ構造体を、Ｒｏｏｔと表記し、Ｒｏｏｔの次ステップ構造体で示されるステップ構造体を、クエリ木の「第２ステップ」と表記する。
【０１８６】
ここで、クエリに対するクエリ木の一例を示す。図３０および図３１は、本実施例３にかかるクエリ木の一例を示す図である。図３０のクエリ木は、クエリ「/A[B  or  C[D]]E」のクエリ木を示している。
【０１８７】
図３０に示すように、このクエリ木は、パスＩＤ「Ａ，Ｂ，Ｃ，Ｄ，Ｅ」のステップ構造体から構成され、パスＩＤ「Ａ」のステップ構造体の述部ポインタは、パスＩＤ「Ａ，Ｂ」のステップ構造体に接続され、パスＩＤ「Ｃ」のステップ構造体の述部ポインタは、パスＩＤ「Ｃ」のステップ構造体に接続されている。また、パスＩＤ「Ａ」のステップ構造体の次ステップポインタは、パスＩＤ「Ｅ」のステップ構造体に接続されている。
【０１８８】
そして、パスＩＤ「Ｂ，Ｄ，Ｅ」のステップ構造体の述部ポインタおよび次ステップポインタはNull（⊥）に設定され、パスＩＤ「Ｃ」のステップ構造体の次ステップポインタはNull（⊥）に設定されている。図３０において、パスＩＤ「Ａ」のステップ構造体が「Ｒｏｏｔ」となり、パスＩＤ「Ｅ」のステップ構造体が「第２ステップ」となる。なお、図３０の右側の図は、図３０の左側に示したクエリ木の簡易表記である。
【０１８９】
図３１のクエリ木は、クエリ「/A[B  and  C[D]  or  E[F]G]」のクエリ木を示している。同図に示すように、このクエリ木は、パスＩＤ「Ａ，Ｂ，Ｃ，Ｄ，Ｅ，Ｆ，Ｇ」のステップ構造体から構成され、パスＩＤ「Ａ」のステップ構造体の述部ポインタは、パスＩＤ「Ｂ，Ｃ，Ｅ」のステップ構造体に接続されている。
【０１９０】
また、パスＩＤ「Ｃ」のステップ構造体の述部ポインタは、パスＩＤ「Ｄ」のステップ構造体に接続され、パスＩＤ「Ｅ」のステップ構造体の述部ポインタは、パスＩＤ「Ｆ」のステップ構造体に接続されている。また、パスＩＤ「Ｅ」のステップ構造体の次ステップポインタは、パスＩＤ「Ｇ」のステップ構造体に接続されている。
【０１９１】
そして、パスＩＤ「Ｂ，Ｄ，Ｆ，Ｇ」のステップ構造体の述部ポインタおよび次ステップポインタはNull（⊥）に設定され、パスＩＤ「Ａ，Ｃ」のステップ構造体の次ステップポインタはNull（⊥）に設定されている。図３１において、パスＩＤ「Ａ」のステップ構造体が「Ｒｏｏｔ」となり、第２ステップのステップ構造体は存在しない。なお、図３１の下側の図は、図３１の上側に示したクエリ木の簡易表記である。
【０１９２】
イベント定義表３５０ｅは、クエリに含まれるイベント種類とパスＩＤとを対応付けたデータである。図３２は、本実施例３にかかるイベント定義表３５０ｅのデータ構造の一例を示す図である。同図に示すように、このイベント定義表３５０ｅは、定義ＩＤと、パスＩＤと、イベント種類とを組合せて記憶している。なお、定義ＩＤは、パスＩＤとイベント種類との組み合わせを識別する情報である。
【０１９３】
イベント種類となる集合ETYPE(Q)は、パスヒットイベントＺ１、・・・、Ｚｎ（クエリに含まれるパスＩＤのうち、contains内のパスＩＤ以外の全てのパスＩＤに対応付ける）、パス＋キーワードヒットイベントＡ１、・・・、Ａｍ、クエリ開始イベントＳ、文脈ノードイベントＣを有する。ここで、パス＋キーワードヒットイベントは、該当キーワードにヒットした旨を示すイベントである。
【０１９４】
例えば、クエリが、
Q=/Syain/ACT[contains(chara/name,"レッド")  or  cast]/id（パス表記では、/2[contains(5,レッド)  or  6]3）
と指定され、イベント種類の集合が、
ETYPE(Q)={Z1,A1,Z2,Z3}
と指定されている場合には、図３２に示したイベント定義表が生成される。
【０１９５】
イベントテーブル３５０ｆは、クエリから生成されるオートマトンにＢＩＮデータ３５０ｃを代入し、イベントが発生した場合に、かかるイベントの情報（イベントＩＤ、イベント種類、オフセット）を記憶するデータである。図３３は、本実施例３にかかるイベントテーブル３５０ｆのデータ構造の一例を示す図である。同図に示すように、このイベントテーブル３５０ｆは、イベントＩＤ、イベント種類、オフセットを対応付けて記憶している。
【０１９６】
制御部３６０は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する制御手段であり、特に本発明に密接に関連するものとしては、図２８に示すように、ＢＩＮデータ生成部３６０ａ、クエリ受信部３６０ｂ、クエリ木構築部３６０ｃ、クエリクラス判定部３６０ｄ、イベントテーブル生成部３６０ｅ、クエリ変換処理部３６０ｆ、イベントテーブル集計部３６０ｇ、分岐クエリ評価部３６０ｈ、回答発信部３６０ｉを備える。
【０１９７】
このうち、ＢＩＮデータ生成部３６０ａ、クエリ受信部３６０ｂ、分岐クエリ評価部３６０ｈ、回答発信部３６０ｉは、図４に示した、ＢＩＮデータ生成部１６０ａ、クエリ受信部１６０ｂ、分岐クエリ評価部１６０ｇ、回答発信部１６０ｈと同様であるため、説明を省略する。
【０１９８】
クエリ木構築部３６０ｃは、クエリを基にして、クエリ木３５０ｄ（図３０、図３１参照）を構築する手段である。
【０１９９】
クエリクラス判定部３６０ｄは、クエリ木に基づいて、クエリが易クラスに属するか難クラスに属するかを判定する手段である。検索装置３００は、クエリが易クラスに属する場合には、階層管理を行うことなく、クエリに対応するデータを検索する。一方、検索装置３００は、クエリが難クラスに属する場合には、従来と同様にして、階層管理を行うことで、クエリに対応するデータを検索する。
【０２００】
具体的に、クエリクラス判定部３６０ｄの説明を行うと、まず、クエリクラス判定部３６０ｄは、クエリ木の葉の数を検出する。クエリクラス判定部３６０ｄは、クエリ木の任意の部分木（ステップ構造体）Ｓに対して、Ｓの葉の数Numleaf(S)を、「葉のみで構成される部分木Ｓ」と「葉ではない部分木Ｓ」とにわけて下記のように定義する。
【０２０１】
（葉のみで構成される部分木Ｓの葉の数；葉の条件１）
葉のみで構成される部分木Ｓ（部分木Ｓの次ステップポインタおよび述部ポインタがNull）に対しては、
NumLeaf(S)=1
と定義する。
【０２０２】
（葉ではない部分木Ｓの葉の数；葉の条件２）
葉ではない部分木Ｓに対して、Ｓの部分木をそれぞれＮ、Ｐ１、・・・Ｐｍ（ｍ≧０）とおく。ここで、部分木Ｎは、部分木Ｓの次ステップポインタをルートとする部分木であり、部分木Ｐ１、・・・Ｐｍは、部分木Ｓの述部ポインタをルートとする部分木である。このとき、部分木Ｓの葉の数NumLeaf(S)は条件に応じて下記のように定義される。
【０２０３】
具体的に、部分木Ｓの次ステップポインタが存在し、述部ポインタが１つも存在しない場合（葉の条件２−１）には、葉の数NumLeaf(S)は、
NumLeaf(S)=NumLeaf(N)
となる。また、部分木Ｓの述部ポインタが１つ以上存在し、次ステップポインタが存在しない場合（葉の条件２−２）には、葉の数NumLeaf(S)は、
NumLeaf(S)=Max{NumLeaf(P1),...,NumLeaf(Pm)}
となる。また、部分木Ｓの次ステップポインタが存在し、かつ述部ポインタが１つ以上存在する場合（葉の条件２−３）には、葉の数NumLeaf(S)は、
NumLeaf(S)=NumLeaf(N)+Max{NumLeaf(P1),...,NumLeaf(Pm)}
となる。
【０２０４】
次に、部分木の葉の数の具体例について説明する。図３４は、部分木の葉の数を説明するための図である。図３４の左側は、クエリ「/A[B  or  C[D]E」の部分木（クエリ木）を示しており、図３４の右側は、クエリ「/A[B  and  C[D]  or  E[F]G]」の部分木（クエリ木）を示している。
【０２０５】
まず、クエリ「/A[B  or  C[D]E」の部分木の葉の数について説明する。図３４の左側に示すように、かかるクエリの部分木は、上記の葉の条件２−３に対応するので、部分木Ｑの葉の数NumLeaf(Q)は、
NumLeaf(Q)=NumLeaf(N)+Max{NumLeaf(P1),NumLeaf(P2)}
となる。ここで、NumLeaf(N)は、部分木「Ｎ」の葉の数「１」となり、NumLeaf(P1)は、部分木「Ｐ１」の葉の数「１」となり、NumLeaf(P2)は、部分木「Ｐ２」の葉の数「１」となるので、結論として、部分木Ｑの葉の数NumLeaf(Q)は、
NumLeaf(Q)=1+Max{1,1}=2
となる。
【０２０６】
次に、クエリ「/A[B  and  C[D]  or  E[F]G]」の部分木の葉の数について説明する。図３４の右側に示すように、かかるクエリの部分木は、上記の葉の条件２−２に対応するので、部分木Ｑの葉の数NumLeaf(Q)は、
NumLeaf(Q)=Max{NumLeaf(P1),NumLeaf(P2),NumLeaf(P3)}
となる。ここで、NumLeaf(P1)は、部分木「Ｐ１」の葉の数「１」となり、NumLeaf(P2)は、部分木「Ｐ２」の葉の数「１」となり、NumLeaf(P3)は、部分木「Ｐ３」の葉の数「２」となるので、結論として、部分木Ｑの葉の数NumLeaf(Q)は、
NumLeaf(Q)=Max{1,1,2}=2
となる。
【０２０７】
続いて、クエリクラス判定部３６０ｄは、第１の条件および第２の条件に基づいて、クエリクラスの判定を行う。ここで、第１の条件は、「クエリの葉が１つである」という条件であり、第２の条件は、「クエリの葉の数が２つであり、かつ第２ステップが存在し、かつ第２ステップの述部ポインタおよび次ステップポインタが共にNullである」という条件である。
【０２０８】
クエリクラス判定部３６０ｄは、クエリが第１の条件または第２の条件のいずれか一方で成り立つ場合に、クエリを易クラスに属すると判定する。一方、クエリクラス判定部３６０ｄは、クエリが第１の条件または第２の条件で成り立たない場合には、クエリを難クラスに属すると判定する。
【０２０９】
ここで、クエリクラス判定部３６０ｄの説明を、図３４を用いて説明すると、図３４の左側に示すクエリ木は、葉の数が「２」であり、第２ステップの述部ポインタおよび次ステップポインタが共にNullであるため、第２の条件が成立する。従って、クエリクラス判定部３６０ｄは、クエリ「/A[B  or  C[D]E」が易クラスに属すると判定する。
【０２１０】
また、図３４の右側に示すクエリ木は、葉の数が「２」であるが、第２ステップが存在しないため、第１の条件および第２の条件が成立しない。従って、クエリクラス判定部３６０ｄは、クエリ「/A[B  and  C[D]  or  E[F]G]」が難クラスに属すると判定する。
【０２１１】
図２８の説明に戻ると、イベントテーブル生成部３６０ｅは、クエリクラス判定部３６０ｄから判定結果を取得し、クエリが易クラスに属していると判定されている場合に、クエリからイベント定義表３５０ｅ（図３２参照）を生成すると共に、クエリのオートマトンを利用してイベントテーブル３５０ｆ（図３３参照）を生成する手段である。
【０２１２】
まず、イベントテーブル生成部３６０ｅがイベント定義表３５０ｅを生成する処理について説明すると、イベントテーブル生成部３６０ｅは、例えば、クエリが、
Q=/Syain/ACT[contains(chara/name,"レッド")  or  cast]/id（パス表記では、/2[contains(5,レッド)  or  6]3）
と指定され、イベント種類の集合が、
ETYPE(Q)={Z1,A1,Z2,Z3}
と指定されている場合には、クエリのパスＩＤおよび文字列と、イベント種類の集合を対応させることにより、図３２に示したイベント定義表３５０ｅを生成する。
【０２１３】
上記の条件では、パスＩＤ「２」がイベント種類「Ｚ１」に対応し、パスＩＤ、文字列「[contains(5,レッド)]」がイベント種類「Ａ１」に対応し、パスＩＤ「６」がイベント種類「Ｚ２」に対応し、パスＩＤ「３」がイベント種類「Ｚ３」に対応する。また、パスＩＤ「２」は、クエリの開始パスであるため、イベント種類に「Ｓ」を含ませる。パスＩＤ「３」は、クエリの終了パスであるため、イベント種類に「Ｃ」を含ませる。
【０２１４】
続いて、イベントテーブル生成部３６０ｅがイベントテーブル３５０ｆを生成する場合の処理について説明する。イベントテーブル生成部３６０ｅは、イベントテーブル３５０ｆを生成する前準備として、クエリのオートマトンを生成する。
【０２１５】
図３５は、本実施例３にかかるクエリのオートマトンのデータ構造の一例を示す図である。図３５に示すオートマトンは、クエリ「/Syain/ACT[contains(chara/name,"レッド")  or  cast]/id（パス表記では、/2[contains(5,レッド)  or  6]3」から生成されるオートマトンである。このオートマトンは、複数のノード構造体７０〜７５、イベント構造体８０〜８３を有する。
【０２１６】
イベントテーブル生成部３６０ｅは、図３５に示したオートマトンにＢＩＮデータ３５０ｃを順次代入することで、イベントテーブル３５０ｆを生成する。以下において、イベントテーブル生成部３６０ｅが、イベントテーブル３５０ｆを生成する処理を、図３６のＢＩＮデータ３５０ｃの位置「１００１」〜「１０２９」に分けて説明する。図３６は、本実施例３にかかるイベントテーブル生成部３６０ｅの処理を説明するための図である。なお、イベントテーブル生成部３６０ｅは、実施例１と同様にして、オフセットの値を、イベントが発生した際の、ノードのノードＩＤ（図２参照）をオフセットとする。
【０２１７】
（ＢＩＮデータ３５０ｃの位置「１００１」）
イベントテーブル生成部３６０ｅは、ＢＩＮデータ３５０ｃの位置「１００１」に対応するデータ「［１シグマ戦隊中原ジャー」をオートマトンに代入する。すると、かかるデータは、ノード構造体７０を始点とし、ノード構造体７２に移行した段階で、次に対応する数字が存在しなくなるため、ノード構造体７０に戻り、位置「１００１」の検索を終了する。
【０２１８】
（ＢＩＮデータ３５０ｃの位置「１００２」）
イベントテーブル生成部３６０ｅは、ＢＩＮデータ３５０ｃの位置「１００２」に対応するデータ「［２」をオートマトンに代入する。すると、かかるデータは、ノード構造体７０を始点とし、イベント構造体８０に到達する。イベント構造体８０に到達した時点で、イベント（１）（イベント定義ＩＤ（１））が発生し、イベントテーブル生成部３６０ｅは、イベントＩＤ「１」、イベント種類「Ｚ１、Ｓ」、オフセット「３」をイベントテーブル３５０ｆに登録する。なお、イベント種類は、イベント定義ＩＤと、イベント定義表３５０ｅ（図３２参照）を比較することで特定される。
【０２１９】
（ＢＩＮデータ３５０ｃの位置「１００３」）
イベントテーブル生成部３６０ｅは、ＢＩＮデータ３５０ｃの位置「１００３」に対応するデータ「［３１］３」をオートマトンに代入する。すると、かかるデータは、ノード構造体７０を始点として、イベント構造体８３に到達する。イベント構造体８３に到達した時点で、イベント（４）が発生し、イベントテーブル生成部３６０ｅは、イベントＩＤ「２」、イベント種類「Ｚ３，Ｃ」、オフセット「４」をイベントテーブル３５０ｆに登録する。
【０２２０】
（ＢＩＮデータ３５０ｃの位置「１００４」）
イベントテーブル生成部３６０ｅは、ＢＩＮデータ３５０ｃの位置「１００４」に対応するデータ「［４」をオートマトンに代入する。すると、かかるデータは、ノード構造体７０を始点とし、ノード構造体７２に移行した段階で、次に対応する数字が存在しなくなるため、ノード構造体７０に戻り、位置「１００４」の検索を終了する。
【０２２１】
（ＢＩＮデータ３５０ｃの位置「１００５」）
イベントテーブル生成部３６０ｅは、ＢＩＮデータ３５０ｃの位置「１００５」に対応するデータ「［５シグマレッド］５」をオートマトンに代入する。すると、かかるデータは、ノード構造体７０を始点とし、イベント構造体８１に到達する。イベント構造体８１に到達した時点で、イベント（２）が発生し、イベントテーブル生成部３６０ｅは、イベントＩＤ「３」、イベント種類「Ａ１」、オフセット「８」をイベントテーブル３５０ｆに登録する。
【０２２２】
（ＢＩＮデータ３５０ｃの位置「１００６」）
イベントテーブル生成部３６０ｅは、ＢＩＮデータ３５０ｃの位置「１００６」に対応するデータ「］４」をオートマトンに代入する。すると、かかるデータは、ノード構造体７０を始点とし、ノード構造体７１に移行した段階で、ノード構造体７０に戻り、位置「１００６」の検索を終了する。
【０２２３】
（ＢＩＮデータ３５０ｃの位置「１００７」）
イベントテーブル生成部３６０ｅは、ＢＩＮデータ３５０ｃの位置「１００７」に対応するデータ「［６」をオートマトンに代入する。すると、かかるデータは、ノード構造体７０を始点とし、イベント構造体８２に到達する。イベント構造体８２に到達した時点で、イベント（３）が発生し、イベントテーブル生成部３６０ｅは、イベントＩＤ「４」、イベント種類「Ｚ２」、オフセット「９」をイベントテーブル３５０ｆに登録する。
【０２２４】
（ＢＩＮデータ３５０ｃの位置「１００８」）
イベントテーブル生成部３６０ｅは、ＢＩＮデータ３５０ｃの位置「１００８」に対応するデータ「［７浅井達哉］７」をオートマトンに代入する。すると、かかるデータは、ノード構造体７０を始点とし、ノード構造体７２に移行した段階で、次に対応する数字が存在しなくなるため、ノード構造体７０に戻り、位置「１００８」の検索を終了する。
【０２２５】
（ＢＩＮデータ３５０ｃの位置「１００９」）
イベントテーブル生成部３６０ｅは、ＢＩＮデータ３５０ｃの位置「１００９」に対応するデータ「］６」をオートマトンに代入する。すると、かかるデータは、ノード構造体７０を始点とし、ノード構造体７１に移行した段階で、ノード構造体７０に戻り、位置「１００９」の検索を終了する。
【０２２６】
（ＢＩＮデータ３５０ｃの位置「１０１０」）
イベントテーブル生成部３６０ｅは、ＢＩＮデータ３５０ｃの位置「１０１０」に対応するデータ「］２」をオートマトンに代入する。すると、かかるデータは、ノード構造体７０を始点とし、ノード構造体７１に移行した段階で、ノード構造体７０に戻り、位置「１０１０」の検索を終了する。
【０２２７】
（ＢＩＮデータ３５０ｃの位置「１０１１」）
イベントテーブル生成部３６０ｅは、ＢＩＮデータ３５０ｃの位置「１０１１」に対応するデータ「［２」をオートマトンに代入する。すると、かかるデータは、ノード構造体７０を始点とし、イベント構造体８０に到達する。イベント構造体８０に到達した時点で、イベント（１）が発生し、イベントテーブル生成部３６０ｅは、イベントＩＤ「５」、イベント種類「Ｚ１、Ｓ」、オフセット「１２」をイベントテーブル３５０ｆに登録する。
【０２２８】
（ＢＩＮデータ３５０ｃの位置「１０１２」）
イベントテーブル生成部３６０ｅは、ＢＩＮデータ３５０ｃの位置「１０１２」に対応するデータ「［３２］３」をオートマトンに代入する。すると、かかるデータは、ノード構造体７０を始点とし、イベント構造体８３に到達する。イベント構造体８３に到達した時点で、イベント（４）が発生し、イベントテーブル生成部３６０ｅは、イベントＩＤ「６」、イベント種類「Ｚ３、Ｃ」、オフセット「１３」をイベントテーブル３５０ｆに登録する。
【０２２９】
（ＢＩＮデータ３５０ｃの位置「１０１３」）
イベントテーブル生成部３６０ｅは、ＢＩＮデータ３５０ｃの位置「１０１３」に対応するデータ「［４」をオートマトンに代入する。すると、かかるデータは、ノード構造体７０を始点とし、ノード構造体７２に移行した段階で、次に対応する数字が存在しなくなるので、ノード構造体７０に戻り、位置「１０１３」の検索を終了する。
【０２３０】
（ＢＩＮデータ３５０ｃの位置「１０１４」）
イベントテーブル生成部３６０ｅは、ＢＩＮデータ３５０ｃの位置「１０１４」に対応するデータ「［５シグマブルー］５」をオートマトンに代入する。すると、かかるデータは、ノード構造体７０を始点とし、ノード構造体７２に移行した段階で、次に対応する数字が存在しなくなるので、ノード構造体７０に戻り、位置「１０１４」の検索を終了する。
【０２３１】
（ＢＩＮデータ３５０ｃの位置「１０１５」）
イベントテーブル生成部３６０ｅは、ＢＩＮデータ３５０ｃの位置「１０１５」に対応するデータ「］４」をオートマトンに代入する。すると、かかるデータは、ノード構造体７０を始点とし、ノード構造体７１に移行した段階で、ノード構造体７０に戻り、位置「１０１５」の検索を終了する。
【０２３２】
（ＢＩＮデータ３５０ｃの位置「１０１６」）
イベントテーブル生成部３６０ｅは、ＢＩＮデータ３５０ｃの位置「１０１６」に対応するデータ「［６」をオートマトンに代入する。すると、かかるデータは、ノード構造体７０を始点とし、イベント構造体８２に到達する。イベント構造体８２に到達した時点で、イベント（３）が発生し、イベントテーブル生成部３６０ｅは、イベントＩＤ「７」、イベント種類「Ｚ２」、オフセット「１８」をイベントテーブル３５０ｆに登録する。
【０２３３】
（ＢＩＮデータ３５０ｃの位置「１０１７」）
イベントテーブル生成部３６０ｅは、ＢＩＮデータ３５０ｃの位置「１０１７」に対応するデータ「［７多湖真一郎］７」をオートマトンに代入する。すると、かかるデータは、ノード構造体７０を始点とし、ノード構造体７２に移行した段階で、次に対応する数字が存在しなくなるため、ノード構造体７０に戻り、位置「１０１７」の検索を終了する。
【０２３４】
（ＢＩＮデータ３５０ｃの位置「１０１８」）
イベントテーブル生成部３６０ｅは、ＢＩＮデータ３５０ｃの位置「１０１８」に対応するデータ「］６」をオートマトンに代入する。すると、かかるデータは、ノード構造体７０を始点とし、ノード構造体７１に移行した段階で、ノード構造体７０に戻り、位置「１０１８」の検索を終了する。
【０２３５】
（ＢＩＮデータ３５０ｃの位置「１０１９」）
イベントテーブル生成部３６０ｅは、ＢＩＮデータ３５０ｃの位置「１０１９」に対応するデータ「］２」をオートマトンに代入する。すると、かかるデータは、ノード構造体７０を始点とし、ノード構造体７１に移行した段階で、ノード構造体７０に戻り、位置「１０１９」の検索を終了する。
【０２３６】
（ＢＩＮデータ３５０ｃの位置「１０２０」）
イベントテーブル生成部３６０ｅは、ＢＩＮデータ３５０ｃの位置「１０２０」に対応するデータ「［２」をオートマトンに代入する。すると、かかるデータは、ノード構造体７０を始点とし、イベント構造体８０に到達する。イベント構造体８０に到達した時点で、イベント（１）が発生し、イベントテーブル生成部３６０ｅは、イベントＩＤ「８」、イベント種類「Ｚ１、Ｓ」、オフセット「２１」をイベントテーブル３５０ｆに登録する。
【０２３７】
（ＢＩＮデータ３５０ｃの位置「１０２１」）
イベントテーブル生成部３６０ｅは、ＢＩＮデータ３５０ｃの位置「１０２１」に対応するデータ「［３３］３」をオートマトンに代入する。すると、かかるデータは、ノード構造体７０を始点とし、イベント構造体８３に到達する。イベント構造体８３に到達した時点で、イベント（４）が発生し、イベントテーブル生成部３６０ｅは、イベントＩＤ「９」、イベント種類「Ｚ３、Ｃ」、オフセット「２２」をイベントテーブル３５０ｆに登録する。
【０２３８】
（ＢＩＮデータ３５０ｃの位置「１０２２」）
イベントテーブル生成部３６０ｅは、ＢＩＮデータ３５０ｃの位置「１０２２」に対応するデータ「［４」をオートマトンに代入する。すると、かかるデータは、ノード構造体７０を始点とし、ノード構造体７２に移行した段階で、次に対応する数字が存在しなくなるため、ノード構造体７０に戻り、位置「１０２２」の検索を終了する。
【０２３９】
（ＢＩＮデータ３５０ｃの位置「１０２３」）
イベントテーブル生成部３６０ｅは、ＢＩＮデータ３５０ｃの位置「１０２３」に対応するデータ「［５シグマピンク］５」をオートマトンに代入する。すると、かかるデータは、ノード構造体７０を始点とし、ノード構造体７２に移行した段階で、次に対応する数字が存在しなくなるため、ノード構造体７０に戻り、位置「１０２３」の検索を終了する。
【０２４０】
（ＢＩＮデータ３５０ｃの位置「１０２４」）
イベントテーブル生成部３６０ｅは、ＢＩＮデータ３５０ｃの位置「１０２４」に対応するデータ「］４」をオートマトンに代入する。すると、かかるデータは、ノード構造体７０を始点とし、ノード構造体７１に移行した段階で、ノード構造体７０に戻り、位置「１０２４」の検索を終了する。
【０２４１】
（ＢＩＮデータ３５０ｃの位置「１０２５」）
イベントテーブル生成部３６０ｅは、ＢＩＮデータ３５０ｃの位置「１０２５」に対応するデータ「［６」をオートマトンに代入する。すると、かかるデータは、ノード構造体７０を始点とし、イベント構造体８２に到達する。イベント構造体８２に到達した時点で、イベント（３）が発生し、イベントテーブル生成部３６０ｅは、イベントＩＤ「１０」、イベント種類「Ｚ２」、オフセット「２７」をイベントテーブル３５０ｆに登録する。
【０２４２】
（ＢＩＮデータ３５０ｃの位置「１０２６」〜「１０２９」）
なお、ＢＩＮデータ３５０ｃの位置「１０２６」〜「１０２９」において、イベントは発生しない。このように、イベントテーブル生成部３６０ｅは、ＢＩＮデータ３５０ｃの位置「１００１」〜「１０２９」のデータを、オートマトンに代入することで、イベントテーブル３５０ｆを生成する。
【０２４３】
図２８の説明に戻ると、クエリ変換処理部３６０ｆは、クエリの論理式を生成（階層構造を有し、易クラスに属するクエリを階層構造を持たないフラットな論理式として評価するためのクエリ変換処理を実行）する手段である。クエリ変換処理部３６０ｆがクエリから評価する論理式（以下、評価論理式）を生成する場合には、例えば、周知技術であるＢＤＤ（Binary  Decision  Diagram）等を利用すればよい。
【０２４４】
図３７は、クエリ変換処理部３６０ｆの処理を説明するための図である。なお、ここでは一例として、クエリ「2/[contains(5,"レッド")  or  6]3」（パスＩＤ表記）の評価論理式を求める場合について説明する。同図に示すように、クエリ変換処理部３６０ｆは、クエリ「2/[contains(5,"レッド")  or  6]3」のパスＩＤ（またはcontains関数全体）を、イベント列の定義ＩＤに置き換える（ステップＳ１０）。
【０２４５】
そして、クエリ変換処理部３６０ｆは、述部の「［］」を、論理式の補助記号である「（）」に置き換えてandで繋ぎ（ステップＳ１１）、開始イベントに相当する定義ＩＤ（通常は（１））を除去することで、評価論理式「((2)or(3))and(4)」を生成する（ステップＳ１２）。クエリ変換処理部３６０ｆは、評価論理式の情報をイベントテーブル集計部３６０ｇに出力する。
【０２４６】
イベントテーブル集計部３６０ｇは、イベントテーブル３５０ｆの各種情報を集計すると共に、評価論理式に基づいて、クエリに対応するデータの位置（オフセット）を検出する手段である。そして、イベントテーブル集計部３６０ｇは、検出したオフセットの情報を回答発信部３６０ｉに出力する。
【０２４７】
図３８は、本実施例３にかかるイベントテーブル集計部３６０ｇの処理を説明するための図である。図３８において、ビットベクトル（Tupleベクトル）は、所定のイベントが存在するか否かを管理するためのベクトルである。
【０２４８】
本実施例３にかかるビットベクトルは、一例として、クエリ開始イベントＳ以外のイベント（２）、（３）、（４）が存在するか否かを管理する。従って、ビットベクトルは、第１の要素、第２の要素、第３の要素からなる３次元のベクトルとなり、イベント（２）（Ａ１に対応）が存在する場合には、第１の要素にビットを立てる。また、イベント（３）（Ｚ２に対応）が存在する場合には、第２の要素にビットを立てる。また、イベント（４）（Ｚ３に対応）が存在する場合には、第３の要素にビットを立てる。
【０２４９】
そして、イベントテーブル集計部３６０ｇは、イベントテーブル３５０ｆを集計していく過程において、イベント種類「Ｓ」を検出し、ビットベクトルが評価論理式を満たす場合、クエリの照合位置にヒットしたとして、Ａｎｓリストに登録された値を出力し、ビットベクトルを初期化する。
【０２５０】
イベントテーブル集計部３６０ｇは、例えば、評価論理式が図３７に示される評価論理式「((2)or(3))and(4)」である場合には、イベント種類「Ｚ１」および「Ｓ」を検出した時点で、ビットベクトルが（１，１，１）、（１，０，１）あるいは（０，１，１）となっていれば、評価論理式を満たすので、Ａｎｓリストに登録された値を出力する。
【０２５１】
図３８の説明に移行すると、イベントテーブル集計部３６０ｇは、イベントテーブル３５０ｆのＩＤ「１」において、イベント種類「Ｓ」を検出する。しかし、ビットベクトルが（０，０，０）となっているため、評価論理式を満たさず、Ａｎｓリストを出力しない。
【０２５２】
イベントテーブル集計部３６０ｇは、イベントテーブル３５０ｆのＩＤ「２」において、イベント種類「Ｚ３」、「Ｃ」を検出する。従って、イベントテーブル集計部３６０ｇは、ビットベクトルを（０，０，１）に設定し、オフセット「４」をＡｎｓリストに登録する。
【０２５３】
イベントテーブル集計部３６０ｇは、イベントテーブル３５０ｆのＩＤ「３」において、イベント種類「Ａ１」を検出する。従って、イベントテーブル集計部３６０ｇは、ビットベクトルを（１，０，１）に設定する。
【０２５４】
イベントテーブル集計部３６０ｇは、イベントテーブル３５０ｆのＩＤ「４」において、イベント種類「Ｚ２」を検出する。従って、イベントテーブル集計部３６０ｇは、ビットベクトルを（１，１，１）に設定する。
【０２５５】
イベントテーブル集計部３６０ｇは、イベントテーブル３５０ｆのＩＤ「５」において、イベント種類「Ｚ１」および「Ｓ」を検出し、かつビットベクトルが（１，１，１）に設定されている（評価論理式を満たす）ため、Ａｎｓリストの値「４」を出力する。そして、イベント集計部３６０ｇは、ビットベクトルおよびＡｎｓリストを初期化する。
【０２５６】
イベントテーブル集計部３６０ｇは、イベントテーブル３５０ｆのＩＤ「６」において、イベント種類「Ｚ３」、「Ｃ」を検出する。従って、イベントテーブル集計部３６０ｇは、ビットベクトルを（０，０，１）に設定し、オフセット「１３」をＡｎｓリストに登録する。
【０２５７】
イベントテーブル集計部３６０ｇは、イベントテーブル３５０ｆのＩＤ「７」において、イベント種類「Ｚ２」を検出する。従って、イベントテーブル集計部３６０ｇは、ビットベクトルを（０，１，１）に設定する。
【０２５８】
イベントテーブル集計部３６０ｇは、イベントテーブル３５０ｆのＩＤ「８」において、イベント種類「Ｚ１」および「Ｓ」を検出し、かつビットベクトルが（０，１，１）に設定されている（評価論理式を満たす）ため、Ａｎｓリストの値「１３」を出力する。そして、イベント集計部３６０ｇは、ビットベクトルおよびＡｎｓリストを初期化する。
【０２５９】
イベントテーブル集計部３６０ｇは、イベントテーブル３５０ｆのＩＤ「９」において、イベント種類「Ｚ３」、「Ｃ」を検出する。従って、イベントテーブル集計部３６０ｇは、ビットベクトルを（０，０，１）に設定し、オフセット「２２」をＡｎｓリストに登録する。
【０２６０】
イベントテーブル集計部３６０ｇは、イベントテーブル３５０ｆのＩＤ「１０」において、イベント種類「Ｚ２」を検出する。従って、イベントテーブル集計部３６０ｇは、ビットベクトルを（０，１，１）に設定する。
【０２６１】
なお、ＩＤ「１０」においてイベント列が終了するので、ビットベクトルのチェックおよびＡｎｓリストの出力を実行する。図３８に示す例では、ビットベクトルを（０，１，１）が評価論理式を満たすので、イベントテーブル集計部３６０ｇは、Ａｎｓリストの値を出力する。
【０２６２】
上述してきたように、本実施例３にかかる検索装置３００は、クエリクラス判定部３６０ｄが、クエリが易クラスに属するか難クラスに属するかを判定し、クエリクラス判定部３６０ｄが易クラスに属すると判定した場合に、イベントテーブル生成部３６０ｅがクエリのオートマトンを作成して、ＢＩＮデータ３５０ｃを代入することでイベントテーブル３５０ｆを生成し、イベントテーブル集計部３６０ｇがイベントテーブルを集計し、評価論理式に基づいてクエリに対応するデータを検索するので、クエリに論理式が含まれる場合であっても、クエリが易クラスに属する場合に、装置にかかる負荷を軽減させ、データ検索の効率を向上させることが出来る。
【実施例４】
【０２６３】
次に、本実施例４にかかる検索装置について説明する。本実施例４にかかる検索装置は、「クエリ木の高さ」に基づいて、クエリが易クラスに属するか難クラスに属するかを判定する。図３９は、クエリ木の高さを説明するための図である。
【０２６４】
クエリ木の高さとは、クエリ木の最長パスに含まれるノードの数で定義される。例えば、図３９において、クエリＡ（Q=2[5]6）は、最長パスに含まれるノードの数が「２」となるので、クエリ木の高さが「２」となる。
【０２６５】
また、クエリＢ（Q=1[2[3]4]6）は、最長パスに含まれるノードの数が「３」となるので、クエリ木の高さが「３」となる。また、クエリＣ（Q=A[B]C[D]）は、最長パスに含まれるノードの数が「３」となるので、クエリ木の高さが「３」となる。
【０２６６】
また、クエリＤ（Q=/A[B  or  C[D]]E）は、最長パスに含まれるノードの数が「３」となるので、クエリの高さが「３」となる。また、クエリＥ（Q=/A[B  and  C[D]  or  E[F]G]）は、最長パスに含まれるノードの数が「４」となるので、クエリ木の高さが「４」となる。
【０２６７】
本実施例４にかかる検索装置は、クエリ木の高さが「２以下」となるクエリを易クラスと判定し、それ以外のクエリを難クラスと判定する。従って、図３９に示す例では、検索装置は、クエリＡを易クラスと判定し、クエリＢ〜Ｅを難クラスと判定する（なお、クエリＤは、本来ならば易クラスに属する）。
【０２６８】
このように、本実施例４にかかる検索装置は、一部の易クラスを拾いきれない場合があるものの、葉の数に基づいた判定と比較して、単純な手法によってクエリが易クラスに属するか否かを判定するので、クエリによるデータ検索の効率をさらに向上させることが出来る。
【０２６９】
次に、本実施例４にかかる検索装置４００の構成について説明する。図４０は、本実施例４にかかる検索装置４００の構成を示す機能ブロック図である。同図に示すように、この検索装置４００は、入力部４１０と、出力部４２０と、通信制御ＩＦ部４３０と、入出力制御ＩＦ部４４０と、記憶部４５０と、制御部４６０とを備えて構成される。
【０２７０】
このうち、入力部４１０は、各種の情報を入力する入力手段であり、キーボードやマウス、マイクなどによって構成され、例えば、上述したＸＭＬデータに関する各種の情報を受け付けて入力する。なお、後述するモニタ（出力部４２０）も、マウスと協働してポインティングデバイス機能を実現する。
【０２７１】
出力部４２０は、各種の情報を出力する出力手段であり、モニタ（若しくはディスプレイ、タッチパネル）やスピーカなどによって構成され、例えば、上述したＸＭＬデータに関する各種の情報を出力する。
【０２７２】
通信制御ＩＦ部４３０は、端末装置との間における通信を制御する手段である。入出力制御ＩＦ部４４０は、入力部４１０、出力部４２０、通信制御ＩＦ部４３０、記憶部４５０、制御部４６０によるデータの入出力を制御する手段である。
【０２７３】
記憶部４５０は、制御部４６０による各種処理に必要なデータおよびプログラムを記憶する記憶手段（格納手段）であり、特に本発明に密接に関連するものとしては、図４０に示すように、ＸＭＬデータ４５０ａ、パスＩＤテーブル４５０ｂ、ＢＩＮデータ４５０ｃ、クエリ木４５０ｄ、イベント定義表４５０ｅ、イベントテーブル４５０ｆを備える。
【０２７４】
ここで、ＸＭＬデータ４５０ａ、パスＩＤテーブル４５０ｂ、ＢＩＮデータ４５０ｃ、クエリ木４５０ｄ、イベント定義表４５０ｅ、イベントテーブル４５０ｆに関する説明は、図４に示したＸＭＬデータ１５０ａ、パスＩＤテーブル１５０ｂ、ＢＩＮデータ１５０ｃ、クエリ木１５０ｄ、イベント定義表１５０ｅ、イベントテーブル１５０ｆに関する説明と同様であるため説明を省略する。
【０２７５】
制御部４６０は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する制御手段であり、特に本発明に密接に関連するものとしては、図４０に示すように、ＢＩＮデータ生成部４６０ａ、クエリ受信部４６０ｂ、クエリ木構築部４６０ｃ、クエリクラス判定部４６０ｄ、イベントテーブル生成部４６０ｅ、イベントテーブル集計部４６０ｆ、分岐クエリ評価部４６０ｇ、回答発信部４６０ｈを備える。
【０２７６】
ここで、ＢＩＮデータ生成部４６０ａ、クエリ受信部４６０ｂ、クエリ木構築部４６０ｃ、イベントテーブル生成部４６０ｅ、イベントテーブル集計部４６０ｆ、分岐クエリ評価部４６０ｇ、回答発信部４６０ｈに関する説明は、図４に示したＢＩＮデータ生成部１６０ａ、クエリ受信部１６０ｂ、クエリ木構築部１６０ｃ、イベントテーブル生成部１６０ｅ、イベントテーブル集計部１６０ｆ、分岐クエリ評価部１６０ｇ、回答発信部１６０ｈに関する説明と同様であるため説明を省略する。
【０２７７】
クエリクラス判定部４６０ｄは、クエリ木の高さ（図３９参照）に基づいて、クエリが易クラスに属するか難クラスに属するかを判定する手段である。具体的に、クエリクラス判定部４６０ｄは、クエリ木の高さが２以下となるクエリを易クラスと判定し、クエリ木の高さが２より大きいクエリを難クラスと判定する。
【０２７８】
次に、本実施例４にかかる検索装置４００の処理手順について説明する。なお、本実施例４にかかる検索装置４００の処理手順は、図１７に示した処理手順と同様であるため説明を省略する。但し、図１７のステップＳ１０２に示したクエリクラス判定処理が、実施例１の処理と異なるので、以下において、本実施例４にかかるクエリクラス判定処理の処理手順について説明する。
【０２７９】
本実施例４にかかるクエリクラス判定処理は、主手続きと副手続きが存在する。図４１は、本実施例４にかかるクエリクラス判定処理の主手続きを示すフローチャートであり、図４２は、本実施例４にかかるクエリクラス判定処理の副手続きを示すフローチャートである。
【０２８０】
図４１に示すように、クエリクラス判定部４６０ｄは、Ｓ＝Ｒｏｏｔと初期化し、ＭａｘおよびＣｕｒを１に設定して初期化する（ステップＳ６０１）。ここで、Ｍａｘは大域変数であり、Ｃｕｒは局所変数である。
【０２８１】
クエリクラス判定部４６０ｄは、Ｓの次ステップポインタが存在するか否かを判定し（ステップＳ６０２）、次ステップポインタが存在しない場合には（ステップＳ６０３，Ｎｏ）、Ｓの述部ポインタが存在するか否かを判定する（ステップＳ６０４）。
【０２８２】
Ｓの述部ポインタが存在しない場合には（ステップＳ６０５，Ｎｏ）、ステップＳ６０９に移行する。一方、Ｓの述部ポインタが存在する場合には（ステップＳ６０５，Ｙｅｓ）、Ｓの述部ポインタを入力として、副手続きを実行する（ステップＳ６０６）。
【０２８３】
そして、クエリクラス判定部４６０ｄは、Ｍａｘの値が２以下か否かを判定し（ステップＳ６０７）、Ｍａｘの値が２以下である場合には（ステップＳ６０８，Ｙｅｓ）、易クラスと判定する（ステップＳ６０９）。一方、Ｍａｘの値が２より大きい場合には（ステップＳ６０８，Ｎｏ）、難クラスと判定する（ステップＳ６１０）。
【０２８４】
ところで、ステップＳ６０３に戻ると、Ｓの次ステップポインタが存在する場合には（ステップＳ６０３，Ｙｅｓ）、Ｓの述部ポインタが存在するか否かを判定し（ステップＳ６１１）、Ｓの述部ポインタが存在しない場合には（ステップＳ６１２，Ｎｏ）、ステップＳ６１４に移行する。
【０２８５】
一方、Ｓの述部ポインタが存在する場合には（ステップＳ６１２，Ｙｅｓ）、Ｓの述部ポインタを入力として、副手続きを実行し（ステップＳ６１３）、Ｓの次ステップポインタをＳに代入する（ステップＳ６１４）。
【０２８６】
続いて、クエリクラス判定部４６０ｄは、Ｓに次ステップポインタあるいは述部ポインタが存在するか否かを判定し（ステップＳ６１５）、存在する場合には（ステップＳ６１６，Ｙｅｓ）、ステップＳ６１０に移行し、存在しない場合には（ステップＳ６１６，Ｎｏ）、ステップＳ６０７に移行する。
【０２８７】
次に、図４１のステップＳ６０６およびステップＳ６１３に示した副手続きについて説明する。図４２に示すように、クエリクラス判定部４６０ｄは、副手続きにおいて、Ｓの次ステップポインタが存在するか否かを判定し（ステップＳ７０１）、Ｓの次ステップポインタが存在しない場合には（ステップＳ７０２，Ｎｏ）、Ｓの述部ポインタが存在するか否かを判定する（ステップＳ７０３）。
【０２８８】
そして、Ｓの述部ポインタが存在する場合には（ステップＳ７０４，Ｙｅｓ）、Ｓの述部ポインタを入力として、副手続きを実行する（ステップＳ７０５）。一方、Ｓの述部ポインタが存在しない場合には（ステップＳ７０４，Ｎｏ）、Ｃｕｒの値がＭａｘの値よりも大きいか否かを判定する（ステップＳ７０６）。
【０２８９】
続いて、Ｃｕｒの値がＭａｘの値よりも大きくない場合には（ステップＳ７０７，Ｎｏ）、そのまま副手続きを終了する。一方、Ｃｕｒの値がＭａｘの値よりも大きい場合には（ステップＳ７０７，Ｙｅｓ）、ＭａｘにＣｕｒの値を代入し（ステップＳ７０８）、副手続きを終了する。
【０２９０】
ところで、ステップＳ７０２の説明に戻ると、Ｓの次ステップポインタが存在する場合には（ステップＳ７０２，Ｙｅｓ）、Ｓの述部ポインタが存在するか否かを判定し（ステップＳ７０９）、Ｓの述部ポインタが存在しない場合には（ステップＳ７１０，Ｎｏ）、ステップＳ７１２に移行する。
【０２９１】
一方、Ｓの述部ポインタが存在する場合には（ステップＳ７１０，Ｙｅｓ）、Ｓの述部ポインタを入力として、副手続きを実行し（ステップＳ７１１）、Ｃｕｒに１を加算した値をＣｕｒの値とし（ステップＳ７１２）、Ｓの次ステップポインタをＳに代入し（ステップＳ７１３）、ステップＳ７０１に移行する。なお、図４２のステップＳ７０５およびステップＳ７１１に示した副手続きは、図４２と同様の副手続きを再度実行する。
【０２９２】
このように、本実施例４にかかる検索装置４００は、クエリクラス判定部４６０ｄがクエリ木の高さに基づいて、クエリが易クラスに属するか難クラスに属するかを判定し、クエリが易クラスに属すると判定された場合に、イベントテーブル生成部４６０ｅがイベント定義表４５０ｅおよびイベントテーブル４５０ｆを生成し、イベントテーブル集計部４６０ｆがイベントテーブル４５０ｆを集計することによりクエリに対応するデータを検索するので、クエリが易クラスに属するか否かの判定処理の処理負荷を軽減すると共に、データ検索の効率を向上させることが出来る。
【実施例５】
【０２９３】
次に、上記の実施例３において説明した第２の拡張例において、クエリが易クラスに属するか難クラスに属するかをクエリの高さ（最長パスに含まれるノードの数）によって判定する場合を、実施例５として説明する。本実施例５にかかる検索装置は、上記の実施例４と同様にして、クエリの高さが２以下となるクエリを易クラスと判定し、それ以外のクエリを難クラスと判定する。
【０２９４】
次に、本実施例５にかかる検索装置５００の構成について説明する。図４３は、本実施例５にかかる検索装置５００の構成を示す機能ブロック図である。同図に示すように、この検索装置５００は、入力部５１０と、出力部５２０と、通信制御ＩＦ部５３０と、入出力制御ＩＦ部５４０と、記憶部５５０と、制御部５６０とを備えて構成される。
【０２９５】
このうち、入力部５１０は、各種の情報を入力する入力手段であり、キーボードやマウス、マイクなどによって構成され、例えば、上述したＸＭＬデータに関する各種の情報を受け付けて入力する。なお、後述するモニタ（出力部５２０）も、マウスと協働してポインティングデバイス機能を実現する。
【０２９６】
出力部５２０は、各種の情報を出力する出力手段であり、モニタ（若しくはディスプレイ、タッチパネル）やスピーカなどによって構成され、例えば、上述したＸＭＬデータに関する各種の情報を出力する。
【０２９７】
通信制御ＩＦ部５３０は、端末装置との間における通信を制御する手段である。入出力制御ＩＦ部５４０は、入力部５１０、出力部５２０、通信制御ＩＦ部５３０、記憶部５５０、制御部５６０によるデータの入出力を制御する手段である。
【０２９８】
記憶部５５０は、制御部５６０による各種処理に必要なデータおよびプログラムを記憶する記憶手段（格納手段）であり、特に本発明に密接に関連するものとしては、図４３に示すように、ＸＭＬデータ５５０ａ、パスＩＤテーブル５５０ｂ、ＢＩＮデータ５５０ｃ、クエリ木５５０ｄ、イベント定義表５５０ｅ、イベントテーブル５５０ｆを備える。
【０２９９】
ここで、ＸＭＬデータ５５０ａ、パスＩＤテーブル５５０ｂ、ＢＩＮデータ５５０ｃ、クエリ木５５０ｄ、イベント定義表５５０ｅ、イベントテーブル５５０ｆに関する説明は、図２８に示したＸＭＬデータ３５０ａ、パスＩＤテーブル３５０ｂ、ＢＩＮデータ３５０ｃ、クエリ木３５０ｄ、イベント定義表３５０ｅ、イベントテーブル３５０ｆに関する説明と同様であるため、説明を省略する。
【０３００】
制御部５６０は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する制御手段であり、特に本発明に密接に関連するものとしては、図４３に示すように、ＢＩＮデータ生成部５６０ａ、クエリ受信部５６０ｂ、クエリ木構築部５６０ｃ、クエリクラス判定部５６０ｄ、イベントテーブル生成部５６０ｅ、クエリ変換処理部５６０ｆ、イベントテーブル集計部５６０ｇ、分岐クエリ評価部５６０ｈ、回答発信部５６０ｉを備える。
【０３０１】
ここで、ＢＩＮデータ生成部５６０ａ、クエリ受信部５６０ｂ、クエリ木構築部５６０ｃ、イベントテーブル生成部５６０ｅ、クエリ変換処理部５６０ｆ、イベントテーブル集計部５６０ｇ、分岐クエリ評価部５６０ｈ、回答発信部５６０ｉに関する説明は、図２８に示したＢＩＮデータ生成部３６０ａ、クエリ受信部３６０ｂ、クエリ木構築部３６０ｃ、イベントテーブル生成部３６０ｅ、クエリ変換処理部３６０ｆ、イベントテーブル集計部３６０ｇ、分岐クエリ評価部３６０ｈ、回答発信部３６０ｉに関する説明と同様であるため、説明を省略する。
【０３０２】
クエリクラス判定部５６０ｄは、クエリ木の高さ（図３９参照）に基づいて、クエリが易クラスに属するか何クラスに属するかを判定する手段である。具体的に、クエリクラス判定部５６０ｄは、クエリ木の高さが２以下となるクエリを易クラスと判定し、クエリ木の高さが２より大きいクエリを難クラスと判定する。なお、クエリ木の高さの算出方法は、下記のフローチャートにおいて説明する。
【０３０３】
次に、クエリクラス判定部５６０ｄが実行するクエリクラス判定処理について説明する。なお、本実施例５にかかるクエリクラス判定処理は、主手続きと副手続きが存在する。図４４および図４５は、本実施例５にかかるクエリクラス判定処理の主手続きを示すフローチャートであり、図４６は、本実施例５にかかるクエリクラス判定処理の副手続きを示すフローチャートである。
【０３０４】
図４４および図４５に示すように、クエリクラス判定部５６０ｄは、Ｑ＝Ｒｏｏｔと初期化し、Ｍａｘの値およびＣｕｒの値を１に設定して初期化する（ステップＳ８０１）。ここで、Ｍａｘは大域変数であり、Ｃｕｒは局所変数である。
【０３０５】
そして、クエリクラス判定部５６０ｄは、Ｑの次ステップポインタが存在するか否かを判定し（ステップＳ８０２）、Ｑの次ステップポインタが存在しない場合には（ステップＳ８０３，Ｎｏ）、Ｑの述部ポインタが存在するか否かを判定する（ステップＳ８０４）。
【０３０６】
Ｑの述部ポインタが存在しない場合には（ステップＳ８０５，Ｎｏ）、ステップＳ８１０に移行する。一方、Ｑの述部ポインタが存在する場合には（ステップＳ８０５，Ｙｅｓ）、Ｑの述部部分木をＰ１、・・・Ｐｍに設定する（ステップＳ８０６）。
【０３０７】
続いて、クエリクラス判定部５６０ｄは、Ｐ１、・・・Ｐｍに対してそれぞれ副手続きを実行し（ステップＳ８０７）、Ｍａｘ（Ｑ）＝ｍａｘ｛Ｍａｘ（Ｐ１）、・・・、Ｍａｘ（Ｐｍ）｝と設定する（ステップＳ８０８）。
【０３０８】
そして、クエリクラス判定部５６０ｄは、Ｍａｘの値が２以下である場合には（ステップＳ８０９，Ｙｅｓ）、易クラスと判定する（ステップＳ８１０）。一方、Ｍａｘの値が２より大きい場合には（ステップＳ８０９，Ｎｏ）、難クラスと判定する（ステップＳ８１１）。
【０３０９】
ところで、ステップＳ８０３の説明に戻ると、Ｑのステップポインタが存在する場合には（ステップＳ８０３，Ｙｅｓ）、Ｑの述部ポインタが存在するか否かを判定し（ステップＳ８１２）、Ｑの述部ポインタが存在しない場合には（ステップＳ８１３，Ｎｏ）、ステップＳ８１６に移行する。
【０３１０】
一方、Ｑの述部ポインタが存在する場合には（ステップＳ８１３，Ｙｅｓ）、Ｑの述部部分木をＰ１、・・・Ｐｍに設定し（ステップＳ８１４）、Ｐ１、・・・Ｐｍに対してそれぞれ副手続きを実行し（ステップＳ８１５）、次ステップポインタに述部ポインタまたは次ステップポインタが存在するか否かを判定する（ステップＳ８１６）。
【０３１１】
そして、述部ポインタまたは次ステップポインタが存在する場合には（ステップＳ８１７，Ｙｅｓ）、ステップＳ８２２に移行する。一方、述部ポインタまたは次ステップポインタが存在しない場合には（ステップＳ８１７，Ｎｏ）、Ｍａｘ（Ｑ）＝ｍａｘ｛Ｍａｘ（Ｐ１）、・・・、Ｍａｘ（Ｐｍ）｝と設定する（ステップＳ８１８）。
【０３１２】
クエリクラス判定部５６０ｄは、Ｍａｘ（Ｑ）の値が２以下か否かを判定し（ステップＳ８１９）、Ｍａｘ（Ｑ）の値が２以下である場合には（ステップＳ８２０，Ｙｅｓ）、易クラスと判定する（ステップＳ８２１）。一方、Ｍａｘ（Ｑ）の値が２より大きい場合には（ステップＳ８２０，Ｎｏ）、難クラスと判定する（ステップＳ８２２）。
【０３１３】
次に、図４４のステップＳ８０７および図４５のステップＳ８１５に示した副手続きについて説明する。図４６に示すように、クエリクラス判定部５６０ｄは、Ｑ（述部部分木）の次ステップポインタが存在するか否かを判定し（ステップＳ９０１）、Ｑの次ステップポインタが存在しない場合には（ステップＳ９０２，Ｎｏ）、Ｑの述部ポインタが存在するか否かを判定する（ステップＳ９０３）。
【０３１４】
そして、Ｑの述部ポインタが存在しない場合には（ステップＳ９０４，Ｎｏ）、Ｍａｘ（Ｐ）の値をＣｕｒの値に設定し（ステップＳ９０５）、Ｍａｘ（Ｐ）を返す（ステップＳ９０６）。
【０３１５】
一方、Ｑの述部ポインタが存在する場合には（ステップＳ９０４，Ｙｅｓ）、述部ポインタの述部部分木をＰ１、・・・Ｐｍに設定し（ステップＳ９０７）、Ｐ１、・・・Ｐｍに対してそれぞれ副手続きを実行し（ステップＳ９０８）、Ｍａｘ（Ｐ）＝ｍａｘ｛Ｍａｘ（Ｐ１）、・・・、Ｍａｘ（Ｐｍ）｝と設定し（ステップＳ９０９）、ステップＳ９０６に移行する。
【０３１６】
ところで、ステップＳ９０２の説明に戻ると、Ｑの次ステップポインタが存在する場合には（ステップＳ９０２，Ｙｅｓ）、次ステップポインタの構造体に対して副手続きを実行し（ステップＳ９１０）、Ｑの述部ポインタが存在するか否かを判定する（ステップＳ９１１）。
【０３１７】
そして、Ｑの述部ポインタが存在しない場合には（ステップＳ９１２，Ｎｏ）、Ｍａｘ（Ｐ）の値にＭａｘ（Ｎ）（次ステップポインタの構造体にかかるＭａｘの値）の値を設定し（ステップＳ９１３）、ステップＳ９０６に移行する。
【０３１８】
一方、Ｑの述部ポインタが存在する場合には（ステップＳ９１２，Ｙｅｓ）、述部ポインタの述部部分木をＰ１、・・・Ｐｍに設定し（ステップＳ９１４）、Ｐ１、・・・Ｐｍに対して、それぞれ副手続きを実行する（ステップＳ９１５）。
【０３１９】
そして、クエリクラス判定部５６０ｄは、Ｍａｘ（Ｐ）＝ｍａｘ｛Ｍａｘ（Ｎ）、Ｍａｘ（Ｐ１）、・・・Ｍａｘ（Ｐｍ）｝と設定し（ステップＳ９１６）、ステップＳ９０６に移行する。なお、図４６のステップＳ９０８、ステップＳ９１０、ステップＳ９１５に示した副手続きは、図４６と同様の副手続きを再度実行する。
【０３２０】
このように、本実施例５にかかる検索装置５００は、クエリクラス判定部５６０ｄがクエリ木の高さに基づいて、クエリが易クラスに属するか難クラスに属するかを判定し、クエリクラス判定部５６０ｄが易クラスに属すると判定した場合に、イベントテーブル生成部５６０ｅがクエリのオートマトンを作成して、ＢＩＮデータ５５０ｃを代入することでイベントテーブル５５０ｆを生成し、イベントテーブル集計部５６０ｇがイベントテーブルを集計し、評価論理式に基づいてクエリに対応するデータを検索するので、クエリに論理式が含まれる場合であっても、クエリが易クラスに属するか否かを効率よく判定でき、装置にかかる負荷を軽減させ、データ検索の効率を向上させることが出来る。
【０３２１】
なお、上述した実施例１〜５では、一例として、Ｗ３Ｃの定めたデータ記法（ＸＭＬ）とクエリ記法（ＸＰａｔｈ）に基づいて記述されたデータとクエリに対して、本願発明を適用する場合について説明したが、本発明はこれに限定されるものではなく、例えば、Ｗ３Ｃの仕様から外れた「階層構造を有する文書データ」や「階層構造を有するクエリ」に対しても適用することが出来る。
【０３２２】
ところで、本実施例において説明した各処理のうち、自動的に行われるものとして説明した処理の全部または一部を手動的に行うこともでき、あるいは、手動的に行われるものとして説明した処理の全部あるいは一部を公知の方法で自動的に行うこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
【０３２３】
また、図４、図２２、図２８に示した検索装置１００，２００，３００の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。さらに、各装置にて行われる各処理機能は、その全部または任意の一部がＣＰＵおよび当該ＣＰＵにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【０３２４】
ここでは、一例として、実施例１にかかる検索装置１００のコンピュータのハードウェア構成について説明する。図３９は、実施例１にかかる検索装置１００を構成するコンピュータのハードウェア構成を示す図である。図３９に示すように、このコンピュータ（検索装置）６００は、入力装置６１０、モニタ６２０、ＲＡＭ（Random  Access  Memory）６３０、ＲＯＭ（Read  Only  Memory）６４０、記憶媒体からデータを読み取る媒体読取装置６５０、他の装置（端末装置）との間でデータの送受信を行う通信装置６６０、ＣＰＵ（Central  Processing  Unit）６７０、ＨＤＤ（Hard  Disk  Drive）６８０をバス６９０で接続して構成される。
【０３２５】
そして、ＨＤＤ６８０には、上記した検索装置１００の機能と同様の機能を発揮する検索プログラム６８０ｂが記憶されている。ＣＰＵ６７０が検索プログラム６８０ｂを読み出して実行することにより、検索プロセス６７０ａが起動される。ここで、検索プロセス６７０ａは、図４のＢＩＮデータ生成部１６０ａ、クエリ受信部１６０ｂ、クエリ木構築部１６０ｃ、クエリクラス判定部１６０ｄ、イベントテーブル生成部１６０ｅ、イベントテーブル集計部１６０ｆ、分岐クエリ評価部１６０ｇ、回答発信部１６０ｈに対応する。
【０３２６】
また、ＨＤＤ６８０は、図４に示したＸＭＬデータ１５０ａ、パスＩＤテーブル１５０ｂ、ＢＩＮデータ１５０ｃ、クエリ木１５０ｄ、イベント定義表１５０ｅ、イベントテーブル１５０ｆに対応する各種データ６８０ａを記憶する。ＣＰＵ６７０は、ＨＤＤ６８０に格納された各種データ６８０ａを読み出して、ＲＡＭ６３０に格納し、ＲＡＭ６３０に格納された各種データ６３０ａを用いて、クエリに対応するデータを検索する。
【０３２７】
ところで、図４７に示した検索プログラム６８０ｂは、必ずしも最初からＨＤＤ６８０に記憶させておく必要はない。たとえば、コンピュータに挿入されるフレキシブルディスク（ＦＤ）、ＣＤ−ＲＯＭ、ＤＶＤディスク、光磁気ディスク、ＩＣカードなどの「可搬用の物理媒体」、または、コンピュータの内外に備えられるハードディスクドライブ（ＨＤＤ）などの「固定用の物理媒体」、さらには、公衆回線、インターネット、ＬＡＮ、ＷＡＮなどを介してコンピュータに接続される「他のコンピュータ（またはサーバ）」などに検索プログラム６８０ｂを記憶しておき、コンピュータがこれらから検索プログラム６８０ｂを読み出して実行するようにしてもよい。
【０３２８】
上記の実施例を含む実施形態に関し、以下の付記を開示する。
【０３２９】
（付記１）要素識別子により要素が区切られた階層構造を有する文書データに対する検索式を取得した場合に、該検索式に対応するデータを前記文書データから検索する検索装置の検索方法であって、
前記検索装置は、
前記検索式を取得した場合に、当該検索式を記憶装置に記憶する記憶ステップと、
前記検索式に対応するデータを前記文書データから検索する場合に、階層管理が必要となる検索式か否かを当該検索式に基づいて判定する判定ステップと、
前記判定ステップにより階層管理が不要な検索式であると判定された場合に、階層管理を行うことなく前記検索式に対応するデータを前記文書データから検索する検索ステップと、
を含んだことを特徴とする検索方法。
【０３３０】
（付記２）前記検索ステップは、前記判定ステップにより階層管理が不要な検索式であると判定された場合に、文書データに含まれる各要素識別子を固有の識別情報に変換したバイナリデータを生成し、当該バイナリデータと前記検索式との一致不一致の判定を実行することにより、当該検索式に対応するデータを前記文書データから検索することを特徴とする付記１に記載の検索方法。
【０３３１】
（付記３）前記判定ステップは、前記検索式の木構造が末端ノードを１個有している場合に、階層管理が不要であると判定することを特徴とする付記１または２に記載の検索方法。
【０３３２】
（付記４）前記判定ステップは、前記検索式の木構造が末端ノードを２個有しており、かつ第２ステップとなる末端ノードのポインタによって接続されるノードが存在しない場合に、階層管理が不要であると判定することを特徴とする付記１、２または３に記載の検索方法。
【０３３３】
（付記５）前記判定ステップは、前記検索式の最長パスに含まれるノードの数を判定し、当該ノードの数が所定値以下の場合に、階層管理が不要であると判定することを特徴とする付記１または２に記載の検索方法。
【０３３４】
（付記６）前記検索ステップは、前記検索式に論理式条件が含まれる場合に、当該論理式条件を評価し、前記バイナリデータと前記検索式との一致不一致の判定結果および前記論理式条件の評価結果に基づいて前記検索式に対応するデータを前記文書データから検索することを特徴とする付記２、３または４に記載の検索方法。
【０３３５】
（付記７）要素識別子により要素が区切られた階層構造を有する文書データに対する検索式を取得した場合に、該検索式に対応するデータを前記文書データから検索する検索装置であって、
前記検索式に対応するデータを前記文書データから検索する場合に、階層管理が必要となる検索式か否かを当該検索式に基づいて判定する判定手段と、
前記判定手段によって階層管理が不要な検索式であると判定された場合に、階層管理を行うことなく前記検索式に対応するデータを前記文書データから検索する検索手段と、
を有することを特徴とする検索装置。
【０３３６】
（付記８）前記検索手段は、前記判定手段により階層管理が不要な検索式であると判定された場合に、文書データに含まれる各要素識別子を固有の識別情報に変換したバイナリデータを生成し、当該バイナリデータと前記検索式との一致不一致の判定を実行することにより、当該検索式に対応するデータを前記文書データから検索することを特徴とする付記７に記載の検索装置。
【０３３７】
（付記９）前記判定手段は、前記検索式の木構造が末端ノードを１個有している場合に、階層管理が不要であると判定することを特徴とする付記７または８に記載の検索装置。
【０３３８】
（付記１０）前記判定手段は、前記検索式の木構造が末端ノードを２個有しており、かつ第２ステップとなる末端ノードのポインタによって接続されるノードが存在しない場合に、階層管理が不要であると判定することを特徴とする付記７、８または９に記載の検索装置。
【０３３９】
（付記１１）前記判定手段は、前記検索式の最長パスに含まれるノードの数を判定し、当該ノードの数が所定値以下の場合に、階層管理が不要であると判定することを特徴とする請求項７または８に記載の検索装置。
【０３４０】
（付記１２）前記検索手段は、前記検索式に論理式条件が含まれる場合に、当該論理式条件を評価し、前記バイナリデータと前記検索式との一致不一致の判定結果および前記論理式条件の評価結果に基づいて前記検索式に対応するデータを前記文書データから検索することを特徴とする付記８、９または１０に記載の検索装置。
【産業上の利用可能性】
【０３４１】
以上のように、本発明にかかる検索方法は、検索式によって文書データからデータを検索する検索システムなどに有用であり、特に、処理負荷の大きい階層管理を出来るだけ実行することなく、文書データから検索式に対応するデータを検索する必要がある場合に適している。
【図面の簡単な説明】
【０３４２】
【図１】ＸＭＬデータのデータ構造の一例を示す図である。
【図２】ＸＭＬデータの木表現の一例を示す図である。
【図３】クエリに対するデータを説明するための図である。
【図４】本実施例１にかかる検索装置の構成を示す機能ブロック図である。
【図５】パスＩＤテーブルのデータ構造の一例を示す図である。
【図６】ＢＩＮデータのデータ構造の一例を示す図である。
【図７】ステップ構造体のデータ構造を説明するための図である。
【図８】クエリ木の一例を示す図（１）である。
【図９】クエリ木の一例を示す図（２）である。
【図１０】イベント定義表のデータ構造の一例を示す図である。
【図１１】イベントテーブルのデータ構造の一例を示す図である。
【図１２】ＢＩＮデータ生成部の処理を説明するための図である。
【図１３】クエリ木の葉の数を説明するための図である。
【図１４】葉の数は「２」であるが難クラスに属するクエリの例を示す図である。
【図１５】イベントテーブル生成部の処理を説明するための図である。
【図１６】イベントテーブル集計部の処理を説明するための図である。
【図１７】本実施例１にかかる検索装置の処理手順を示すフローチャートである。
【図１８】クエリクラス判定処理の主手続きを示すフローチャートである。
【図１９】クエリクラス判定処理の副手続きを示すフローチャートである。
【図２０】イベントテーブル生成処理の処理手順を示すフローチャートである。
【図２１】イベント集計処理の処理手順を示すフローチャートである。
【図２２】本実施例２にかかる検索装置の構成を示す機能ブロック図である。
【図２３】本実施例２にかかるイベント定義表のデータ構造の一例を示す図である。
【図２４】本実施例２にかかるイベントテーブルのデータ構造の一例を示す図である。
【図２５】本実施例２にかかるクエリのオートマトンのデータ構造の一例を示す図である。
【図２６】本実施例２にかかるイベントテーブル生成部の処理を説明するための図である。
【図２７】本実施例２にかかるイベントテーブル集計部の処理を説明するための図である。
【図２８】本実施例３にかかる検索装置の構成を示す機能ブロック図である。
【図２９】本実施例３にかかるステップ構造体のデータ構造を説明するための図である。
【図３０】本実施例３にかかるクエリ木の一例を示す図（１）である。
【図３１】本実施例３にかかるクエリ木の一例を示す図（２）である。
【図３２】本実施例３にかかるイベント定義表のデータ構造の一例を示す図である。
【図３３】本実施例３にかかるイベントテーブルのデータ構造の一例を示す図である。
【図３４】部分木の葉の数を説明するための図である。
【図３５】本実施例３にかかるクエリのオートマトンのデータ構造の一例を示す図である。
【図３６】本実施例３にかかるイベントテーブル生成部の処理を説明するための図である。
【図３７】クエリ変換処理部の処理を説明するための図である。
【図３８】本実施例３にかかるイベントテーブル集計部の処理を説明するための図である。
【図３９】クエリ木の高さを説明するための図である。
【図４０】本実施例４にかかる検索装置の構成を示す機能ブロック図である。
【図４１】本実施例４にかかるクエリクラス判定処理の主手続きを示すフローチャートである。
【図４２】本実施例４にかかるクエリクラス判定処理の副手続きを示すフローチャートである。
【図４３】本実施例５にかかる検索装置の構成を示す機能ブロック図である。
【図４４】本実施例５にかかるクエリクラス判定処理の主手続きを示すフローチャート（１）である。
【図４５】本実施例５にかかるクエリクラス判定処理の主手続きを示すフローチャート（２）である。
【図４６】本実施例５にかかるクエリクラス判定処理の副手続きを示すフローチャートである。
【図４７】実施例１にかかる検索装置を構成するコンピュータのハードウェア構成を示す図である。
【符号の説明】
【０３４３】
１００，２００，３００，４００，５００    検索装置
１１０，２１０，３１０，４１０，５１０    入力部
１２０，２２０，３２０，４２０，５２０    出力部
１３０，２３０，３３０，４３０，５３０    通信制御ＩＦ部
１４０，２４０，３４０，４４０，５４０    入出力制御ＩＦ部
１５０，２５０，３５０，４５０，５５０    記憶部
１５０ａ，２５０ａ，３５０ａ，４５０ａ，５５０ａ  ＸＭＬデータ
１５０ｂ，２５０ｂ，３５０ｂ，４５０ｂ，５５０ｂ  パスＩＤテーブル
１５０ｃ，２５０ｃ，３５０ｃ，４５０ｃ，５５０ｃ  ＢＩＮデータ
１５０ｄ，２５０ｄ，３５０ｄ，４５０ｄ，５５０ｄ  クエリ木
１５０ｅ，２５０ｅ，３５０ｅ，４５０ｅ，５５０ｅ  イベント定義表
１５０ｆ，２５０ｆ，３５０ｆ，４５０ｆ，５５０ｆ  イベントテーブル
１６０，２６０，３６０，４６０，５６０    制御部
１６０ａ，２６０ａ，３６０ａ，４６０ａ，５６０ａ  ＢＩＮデータ生成部
１６０ｂ，２６０ｂ，３６０ｂ，４６０ｂ，５６０ｂ  クエリ受信部
１６０ｃ，２６０ｃ，３６０ｃ，４６０ｃ，５６０ｃ  クエリ木構築部
１６０ｄ，２６０ｄ，３６０ｄ，４６０ｄ，５６０ｄ  クエリクラス判定部
１６０ｅ，２６０ｅ，３６０ｅ，４６０ｅ，５６０ｅ  イベントテーブル生成部
１６０ｆ，２６０ｆ，３６０ｇ，４６０ｆ，５６０ｇ  イベントテーブル集計部
１６０ｇ，２６０ｇ，３６０ｈ，４６０ｇ，５６０ｈ  分岐クエリ評価部
１６０ｈ，２６０ｈ，３６０ｉ，４６０ｈ，５６０ｉ  回答発信部
３６０ｆ，５６０ｆ  クエリ変換処理部
【図１】
0005228498.tif 000002
【図２】
0005228498.tif 000003
【図３】
0005228498.tif 000004
【図４】
0005228498.tif 000005
【図５】
0005228498.tif 000006
【図６】
0005228498.tif 000007
【図７】
0005228498.tif 000008
【図８】
0005228498.tif 000009
【図９】
0005228498.tif 000010
【図１０】
0005228498.tif 000011
【図１１】
0005228498.tif 000012
【図１２】
0005228498.tif 000013
【図１３】
0005228498.tif 000014
【図１４】
0005228498.tif 000015
【図１５】
0005228498.tif 000016
【図１６】
0005228498.tif 000017
【図１７】
0005228498.tif 000018
【図１８】
0005228498.tif 000019
【図１９】
0005228498.tif 000020
【図２０】
0005228498.tif 000021
【図２１】
0005228498.tif 000022
【図２２】
0005228498.tif 000023
【図２３】
0005228498.tif 000024
【図２４】
0005228498.tif 000025
【図２５】
0005228498.tif 000026
【図２６】
0005228498.tif 000027
【図２７】
0005228498.tif 000028
【図２８】
0005228498.tif 000029
【図２９】
0005228498.tif 000030
【図３０】
0005228498.tif 000031
【図３１】
0005228498.tif 000032
【図３２】
0005228498.tif 000033
【図３３】
0005228498.tif 000034
【図３４】
0005228498.tif 000035
【図３５】
0005228498.tif 000036
【図３６】
0005228498.tif 000037
【図３７】
0005228498.tif 000038
【図３８】
0005228498.tif 000039
【図３９】
0005228498.tif 000040
【図４０】
0005228498.tif 000041
【図４１】
0005228498.tif 000042
【図４２】
0005228498.tif 000043
【図４３】
0005228498.tif 000044
【図４４】
0005228498.tif 000045
【図４５】
0005228498.tif 000046
【図４６】
0005228498.tif 000047
【図４７】
0005228498.tif 000048