(57)【要約】【課題】複雑な検索クエリをＢＤＤ法に基づいて評価する場合に、評価に要する処理時間を削減すること。【解決手段】検索装置１００は、検索クエリを受け付けた場合に、ＢＤＤ構築部１６０ｅが、ＢＤＤ法に基づいて、第１ダイアグラムデータ１５０ｇを作成する。そして、ＢＤＤ変換部１６０ｆが、第１ダイアグラムデータ１５０ｇに基づいて、起点となるノードから所定複数レベル先の到達ノードまで到達する各レベルの変数の真偽条件をビット列表記した第２ダイアグラムデータ１５０ｈを作成し、ダイアグラム実行部１６０ｇが、第２ダイアグラムデータ１５０ｈと、論理値テーブル１５０ｅとを比較することにより、検索クエリを評価する。【選択図】        図４
2010044523.tif 000002
【特許請求の範囲】
【請求項１】
検索装置が、
複数の変数からなる論理条件を含む検索条件を受け付けるステップと、
記憶装置に記憶された各検索対象データを各変数の真偽結果に基づく論理ビット列に変換するステップと、
前記検索条件をＢＤＤ法を用いて、起点変数から所定レベル以上の到達変数まで到達するための各レベルの変数の真偽を示したビット列と前記起点変数との組合せを前記到達変数に対応付けた遷移テーブルを作成するステップと、
遷移先の到達変数を起点変数とし、前記検索対象データの論理ビット列のうち前記起点変数から所定桁数のビット列を取り出し、前記起点変数および前記ビット列の組合せと、前記遷移テーブルとを基にして遷移先となる前記到達変数を特定することにより前記検索対象データの検索条件に関する真偽判定を行うステップと、
を実行することを特徴とする真偽判定方法。
【請求項２】
前記起点変数のレベルと前記所定レベルとの差を前記起点変数に対応付けたレベルテーブルを前記記憶装置に記憶させておき、前記真偽判定を行うステップにおいて、前記レベルテーブルに基づいて、前記ビット列の前記所定桁数を決定することを特徴とする請求項１に記載の真偽判定方法。
【請求項３】
第１の到達変数のレベルが前記所定レベルを超えている場合には、前記第１の到達変数を起点変数とした次の第２の到達変数に遷移するビット列の先頭ビットに、前記第１の到達変数のレベルから前記所定レベルを差し引いた数のダミー値を挿入することで、ビット列の桁数を所定桁数に統一することを特徴とする請求項１に記載の真偽判定方法。
【請求項４】
前記起点変数と前記到達変数との間に中間変数が含まれ、前記到達変数のレベルが前記所定レベルを超えている場合には、前記所定レベルから、前記到達変数に遷移する一つ前の中間変数のレベルを差し引き、差し引いた値から更に１を差し引いた数のダミー値を前記起点変数から前記到達変数まで遷移するビット列の後ろに挿入することで、ビット列の桁数を所定桁数に統一することを特徴とする請求項１または３に記載の真偽判定方法。
【請求項５】
前記到達変数を除く遷移先の変数のレベルと遷移元の変数のレベルとのレベル差が２以上の場合には、遷移先の変数のレベルから遷移元の変数のレベルを差し引き、差し引いた値から更に１を差し引いた数のダミー値を遷移元の変数から遷移先の変数に遷移するビット列の後ろに挿入することで、ビット列の桁数を所定桁数に統一することを特徴とする請求項１または３に記載の真偽判定方法。
【請求項６】
各変数の間にダミー変数を挿入することにより、初期の変数から最終の変数までの遷移回数を統一することを特徴とする請求項１、３、４または５に記載の真偽判定方法。
【請求項７】
前記遷移テーブルに、変数の論理値が求まっているか否かの状態を示す不明論理変数を追加し、前記起点変数および前記ビット列の組合せと、前記遷移テーブルとを基にして、遷移先となる前記到達変数を特定した結果、前記不明論理変数に対応する変数の論理値が必要となった場合に、論理値の必要となった変数の論理値を算出すると共に、前記不明論理変数の状態を論理値が求まっている状態に設定することを特徴とする請求項１〜６のいずれか一つに記載の真偽判定方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、論理式を含む検索クエリの真偽を判定して、階層構造を有する文書データから該当するデータを検索する検索装置の真偽判定方法に関するものである。
【背景技術】
【０００２】
近年、ＸＭＬ（Extensible  Markup  Language）等のマークアップ言語によって文書データ（以下、ＸＭＬデータと表記する）が作成され、各種のコンピュータで利用されている。ＸＭＬは、異なるシステム間であっても、インターネット等を介して、構造化された文書や構造化されたデータの供給を容易にすることができるため、ますます多用されている。
【０００３】
そして、ＸＭＬデータの特定の照合位置を指定するものとして、検索クエリが用いられる。この検索クエリは、ＸＭＬデータのための標準クエリ言語であり、ＸＭＬデータの複雑な木構造に対して検索式を記述する能力を持つ。
【０００４】
また、近年では、検索クエリを用いてＸＭＬデータを検索する場合に、ＢＤＤ（Binary  Decision  Diagrams）法を用いて検索クエリを２分木で表現し、検索クエリに該当するデータがＸＭＬデータ中に存在するか否かを評価する技術も存在する。
【０００５】
なお、特許文献１では、論理回路シミュレーションを実行する場合に、ＪＵＭＰ命令を用いてＢＤＤを表現し、命令メモリに書き込みを実行することで、高速に代入演算を実行可能とする技術が開示されている。
【０００６】
【特許文献１】特開２０００−３３０７８６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
しかしながら、複数の論理変数と論理演算子とが組み合わされた複雑な検索クエリをＢＤＤ法に基づいて評価する場合に、論理変数毎に処理を実行する必要があるため、評価に要する処理時間が大きくなってしまうという問題があった。
【０００８】
すなわち、複雑な検索クエリをＢＤＤ法に基づいて評価する場合に、評価に要する処理時間を削減することが重要な課題となっている。
【０００９】
この発明は、上述した従来技術による問題点を解消するためになされたものであり、複雑な検索クエリをＢＤＤ法に基づいて評価する場合に、評価に要する処理時間を削減することができる真偽判定方法を提供することを目的とする。
【課題を解決するための手段】
【００１０】
上述した課題を解決し、目的を達成するため、この真偽判定方法は、検索装置が、複数の変数からなる論理条件を含む検索条件を受け付けるステップと、記憶装置に記憶された各検索対象データを各変数の真偽結果に基づく論理ビット列に変換するステップと、前記検索条件をＢＤＤ法を用いて、起点変数から所定レベル以上の到達変数まで到達するための各レベルの変数の真偽を示したビット列と前記起点変数との組合せを前記到達変数に対応付けた遷移テーブルを作成するステップと、遷移先の到達変数を起点変数とし、前記検索対象データの論理ビット列のうち前記起点変数から所定桁数のビット列を取り出し、前記起点変数および前記ビット列の組合せと、前記遷移テーブルとを基にして遷移先となる前記到達変数を特定することにより前記検索対象データの検索条件に関する真偽判定を行うステップと、を実行することを要件とする。
【発明の効果】
【００１１】
この真偽判定方法によれば、検索装置が検索条件の真偽を判定する場合に、所定桁数のビット列と遷移テーブルとを基にして遷移先となる到達変数を特定することにより検索対象データの検索条件に関する真偽判定を行うので、１ビット毎に真偽判定を行う手間を省き、真偽判定にかかる処理時間を短縮することができる。
【発明を実施するための最良の形態】
【００１２】
以下に添付図面を参照して、この発明に係る真偽判定方法の好適な実施の形態を詳細に説明する。
【実施例１】
【００１３】
まず、周知技術のＢＤＤ（Binary  Decision  Diagrams）法について説明する。このＢＤＤ法は、論理変数の入力順序を定義することにより、検索クエリの論理式を２分木で表現し、検索クエリの検索対象となるデータが存在するか否かを評価する方法である。図１は、周知技術のＢＤＤを説明するための図である。
【００１４】
例えば、論理式「a  and  b  or  c  and  d」をそのまま２分木で表現すると、２分木２０のように表現することができる。図１に示すように、この２分木２０は、論理式の論理変数「ａ〜ｄ」に対応するノード「Ａ〜Ｄ」を有する。なお、２分木２０の構造は、レベルテーブル２０ａおよび遷移テーブル２０ｂによって定義されている。
【００１５】
レベルテーブル２０ａは、各ノードのレベルと、ノードに対応する論理変数を管理するテーブルである。例えば、レベルテーブル２０ａの１段目では、ノード「Ｄ」のレベルが「０」であり、ノード「Ｄ」に対応する論理変数が「ｄ」である旨の情報が登録されている。そして、各ノードに割り当てられたレベルが、入力順序となっている（図１に示す例では、入力順序は、ｄ、ｃ、ｂ、ａの順となる）。
【００１６】
遷移テーブル２０ｂは、各ノードの論理値と、論理値に対応したノードの遷移先を管理するテーブルである。例えば、遷移テーブル２０ｂの１段目では、ノード「Ｄ」の論理値が「０」である場合に、ノード「Ｂ」に遷移する旨の情報が登録されている。
【００１７】
そして、論理変数ａ〜ｄの論理値が、論理値テーブル１０ａのように既に計算されているものとすれば、文書ＩＤ「０」の各論理変数の論理値は、「a=0  b=1  c=0  d=1」なので、２分木２０より、文書ＩＤ「０」の文書データに対する論理式の評価結果は「０（偽；文書ＩＤ「０」の文書データ中に検索クエリの検索対象となるデータが存在しない）」となる。
【００１８】
一方、文書ＩＤ「１」の各論理変数の論理値は、「a=1  b=1  c=1  d=0」なので、２分木２０より、文書ＩＤ「１」の文書データに対する論理式の評価結果は「１（真；文書ＩＤ「１」の文書データ中に検索クエリの検索対象となるデータが存在する）」となる。
【００１９】
しかしながら、従来の技術では、図１に示したように、「ノードに対応する論理変数の論理値を読み出し、読み出した論理値に基づいて次のノードに遷移し、遷移先のノードに対応する論理変数の論理値を読み出し、」というように、１論理変数ごとに処理を行っているために、検索クエリを評価するための処理時間が大きくなってしまうという問題があった。
【００２０】
次に、本実施例１にかかる検索装置の概要および特徴について説明する。図２は、本実施例１にかかる検索装置の概要および特徴を説明するための図である。同図に示すように、本実施例１にかかる検索装置は、検索クエリ（一例として、検索クエリの論理式を「A  and  B  or(C  and  D  or  E)and(F  or  G  and  H」とする）を取得して検索クエリを評価する場合に、ＢＤＤ法に基づいて、第１の２分木を生成する。この第１の２分木は、論理変数「Ａ〜Ｈ」に対応するノード「Ａ〜Ｈ」を有している。
【００２１】
そして、検索装置は、第１の２分木を変換して、多ビット（図２に示す例では、４ビット、あるいは２ビット）毎にノードの遷移先を判定できる第２の２分木（図２の下段）を生成し、この第２の２分木を用いて検索クエリを評価する。
【００２２】
このように、本実施例１にかかる検索装置は、第１の２分木から第２の２分木を生成し、多ビット毎にノードの遷移先を判定するので、複雑な検索クエリをＢＤＤ法に基づいて評価する場合でも、評価に要する処理時間を削減することが可能となる。
【００２３】
具体的に、従来の技術では、第１の２分木をそのまま利用するため、１論理変数毎に処理を行う必要があり、各論理変数に基づいてノードの遷移先を一つずつ判定することにより、順にノードを辿っていく必要があった。例えば、各変数の論理値が、「H=1  G=0  F=1  E=1  D=0  C=0  B=1  A=0」の場合に、検索クエリを評価するには、「ノードＨ、Ｇ、Ｆ、Ｅ」において、４回ノードの遷移先を判定する必要がある。
【００２４】
一方、本実施例１の検索装置は、第１の２分木を第２の２分木に変換して多ビット（図２の例では４ビット）毎に処理を行うため、「ノードＨ」において１回ノードの遷移先を判定するだけで検索クエリを評価できる（各論理変数の論理値が、「H=1  G=0  F=1  E=1  D=0  C=0  B=1  A=0」の場合）。
【００２５】
ただし、図２において、初期ノードをノードＨとし、各論理変数Ａ〜Ｈの入力順序は、論理変数Ｈ〜Ａの順に定義されているものとする。すなわち、４ビット毎に処理を行う場合には、論理変数「Ｈ、Ｇ、Ｆ、Ｅ」に対応する論理値「１０１１」に基づいて、ノードの遷移先を判定した後に、論理変数「Ｄ、Ｃ、Ｂ、Ａ」に対応する論理値「００１０」に基づいて、ノードの遷移先を判定する。また、第２の２分木の多ビットに含まれる「＊」は、１でも０でもよい旨を示す。例えば、「１１＊１」は、「１１０１」または「１１１１」に対応する。
【００２６】
次に、本実施例１にかかる検索装置を備えた検索システムの構成について説明する。図３は、本実施例１にかかる検索システムの構成を示す図である。同図に示すように、この検索システムは、端末装置６０と検索装置１００とを有し、端末装置６０および検索装置１００は、ネットワーク５０によって接続されている。
【００２７】
端末装置６０は、入力装置（図示略）を介して利用者から検索クエリを入力された場合に、検索クエリを検索装置１００に送信し、検索装置１００からの検索結果を出力装置（図示略）に出力する装置である。
【００２８】
検索装置１００は、端末装置６０から検索クエリを受信した場合に、検索クエリを評価し、ＸＭＬデータから該当するデータを検索して検索結果を端末装置６０に送信する装置である。以下において、本実施例１にかかる検索装置１００の構成を具体的に説明する。
【００２９】
図４は、本実施例１にかかる検索装置１００の構成を示す機能ブロック図である。同図に示すように、この検索装置１００は、入力部１１０と、出力部１２０と、無線通信制御ＩＦ部１３０と、入出力制御ＩＦ部１４０と、記憶部１５０と、制御部１６０とを有する。
【００３０】
入力部１１０は、各種の情報を入力する入力手段であり、例えば、キーボードやマウス、マイクなどによって構成される。なお、後述するモニタ（出力部１２０）も、マウスと協働してポインティングデバイス機能を実現する。
【００３１】
出力部１２０は、各種の情報を出力する手段であり、モニタ（若しくはディスプレイ、タッチパネル）やスピーカなどによって構成される。通信制御ＩＦ部１３０は、主に端末装置６０との間における通信を制御する手段である。なお、入出力制御ＩＦ部１４０は、入力部１１０、出力部１２０、通信制御ＩＦ部１３０、記憶部１５０、制御部１６０によるデータの入出力を制御する手段である。
【００３２】
記憶部１５０は、制御部１６０による各種処理に必要なデータおよびプログラムを記憶する記憶手段である。特に本発明に密接に関連するものとして、記憶部１５０は、ＸＭＬデータ１５０ａと、検索クエリ１５０ｂと、分解検索クエリ１５０ｃと、抽出結果テーブル１５０ｄと、論理値テーブル１５０ｅと、変換論理式データ１５０ｆと、第１ダイアグラムデータ１５０ｇと、第２ダイアグラムデータ１５０ｈと、評価結果テーブル１５０ｉと、検索結果データ１５０ｊとを有する。
【００３３】
ここで、ＸＭＬデータ１５０ａは、要素識別子「＜」、「＜／」等により要素が区切られた階層構造を有する文書データである。図５は、本実施例１にかかるＸＭＬデータ１５０ａのデータ構造の一例を示す図である。なお、同図に示す例では、「<busyo>」、「</busyo>」で区切られる要素（以下、「busyo」の要素）が３種類ある。ここでは、説明の便宜上、「name」要素に「第一開発部」、「ID」要素に「２２２２」を有する「busyo」の要素を第１要素とする。また、「name」要素に「第一研究部」、「ID」要素に「３３３３」を有する「busyo」の要素を第２要素とし、「name」要素に「第三開発部」、「ID」要素に「１２２３」を有する「busyo」の要素を第３要素とする。
【００３４】
検索クエリ１５０ｂは、ＸＭＬデータ１５０ａから照合位置のデータを取り出すためのデータである。図６は、本実施例１にかかる検索クエリ１５０ｂのデータ構造の一例を示す図である。同図に示す検索クエリ１５０ｂは、「busyo」の各要素のうち、「name」の要素に「開発部」を含み、かつ「ＩＤ」の要素に「"1.*3"」（先頭の数字が１、末尾の数値が３となる数列）を含む要素を選択し、選択した要素の「name」に登録された文書データを検索対象として指定する検索クエリである。
【００３５】
例えば、図５に示したＸＭＬデータ１５０ａに対して、図６に示した検索クエリ１５０ｂが指定された場合には、第３要素、すなわち、「name」の要素に「第３開発部」、「ID」の要素に「１２２３」を有する「busyo」の要素が検索クエリ１５０ｂの条件を満たすので、かかる第３要素の「name」に登録された文書データ「第三開発部」が検索対象のデータとなる。
【００３６】
分解検索クエリ１５０ｃは、検索クエリ１５０ｂが検索クエリ分解部１６０ａ（後述する）によって分解された結果得られるデータである。図７は、本実施例１にかかる分解検索クエリ１５０ｃのデータ構造の一例を示す図である。
【００３７】
図７に示すように、この分解検索クエリ１５０ｃは、検索クエリ１５０ｂ（図６参照）を論理変数および論理演算子で表した論理式「Q=q1  and  q2」と、各論理変数ｑ１，ｑ２の評価式「q1./busyo/name="開発部"」、「q2./busyo/ID=="1.*3"」と、検索結果を送信する際の定義式「Return  /busyo/name/text()」を有する。
【００３８】
ここで、論理変数ｑ１，ｑ２には、評価式の評価結果に応じて、「１（真）」または「０（偽）」の論理変数が算出される。例えば、ｑ１の評価式「q1./busyo/name="開発部"」によって第１要素を評価すると、「name」の要素に、開発部が含まれているので、評価結果は「１」となる。一方、ｑ２の評価式「q2./busyo/ID=="1.*3"」によって第１要素を評価すると、「ID」の要素に、該当文書データが含まれないので、評価結果は「０」となる。
【００３９】
抽出結果テーブル１５０ｄは、評価式（図７のｑ１，ｑ２参照）の評価対象となる情報と、検索クエリ１５０ｂの評価結果が真であった場合に、端末装置６０に返答する項目を管理するテーブルである。図８は、本実施例１にかかる抽出結果テーブル１５０ｄのデータ構造の一例を示す図である。
【００４０】
図８に示すように、この抽出結果テーブル１５０ｄは、データ種別と、第１論理変数情報と、第２論理変数情報と、返答項目とを有する。なお、データ種別「Ｄａｔａ０〜２」は、図５に示した、第１〜３要素の情報にそれぞれ対応する。
【００４１】
例えば、図８の１段目では、データ種別「Ｄａｔａ０」の第１論理変数情報（ここでは、評価式ｑ１の文書「開発部」が存在しているか否かを示す情報）が「○（存在している）」、第２論理変数情報（ここでは、評価式ｑ２の比較対象となる情報）が「２２２２」、返答項目が「第一開発部」となっている。
【００４２】
論理値テーブル１５０ｅは、各評価式の評価結果を管理するテーブルである。図９は、本実施例１にかかる論理値テーブル１５０ｅのデータ構造の一例を示す図である。同図に示すように、この論理値テーブル１５０ｅは、データ種別と、第１論理値と、第２論理値とを有する。
【００４３】
ここで、第１論理値は、評価式（例えば、評価式ｑ１）による第１論理変数の評価結果であり、第２論理値は、評価式（例えば、評価式ｑ２）による第２論理変数の評価結果である。
【００４４】
変換論理式データ１５０ｆは、論理式（図７参照）が、論理式変換部１６０ｄ（後述する）によって逆ポーランド表記に変換されたデータである。第１ダイアグラムデータ１５０ｇは、ＢＤＤ構築部１６０ｅ（後述する）によって作成されるデータである。
【００４５】
図１０は、本実施例１にかかる第１ダイアグラムデータ１５０ｇのデータ構造の一例を示す図である。同図に示すように、この第１ダイアグラムデータ１５０ｇは、第１レベルテーブル１５１および第１遷移テーブル１５２を有する。
【００４６】
第１レベルテーブル１５１は、各ノードのレベルと、ノードに対応する論理変数を管理するテーブルである。例えば、第１レベルテーブル１５１の１段目では、ノード「ｑ１」のレベルが「０」であり、ノード「ｑ１」に対応する論理変数が「ｑ１」である旨の情報が登録されている。なお、第１レベルテーブル１５１において、レベル「２」のノードが最終レベルのノードとなり、ノード「０」あるいはノード「１」が、検索クエリ１５０ｂの評価結果となる。
【００４７】
第１遷移テーブル１５２は、各ノードの論理値と、論理値に対応したノードの遷移先を管理するテーブルである。例えば、第１遷移テーブル１５２の１段目では、ノード「ｑ１」の論理値が「０」である場合に、ノード「０」に遷移する旨の情報が登録されている。なお図１０に示す第１レベルテーブル１５１および第１遷移テーブル１５２によって、図１０の下段に示す２分木が定義される。
【００４８】
第２ダイアグラムデータ１５０ｈは、第１ダイアグラムデータ１５０ｇが、ＢＤＤ変換部１６０ｆ（後述する）によって変換されたデータである。この第２ダイアグラムデータ１５０ｈは、第２レベルテーブルおよび第２遷移テーブルを有しており、第２レベルテーブルおよび第２遷移テーブルによって定義される２分木は、多ビット毎に評価を行うことができる。第２レベルテーブルおよび第２遷移テーブルの説明は後述する。
【００４９】
評価結果テーブル１５０ｉは、各データ種別（例えば、Ｄａｔａ０〜２）に対する評価結果を管理するテーブルである。図１１は、本実施例１にかかる評価結果テーブル１５０ｉのデータ構造の一例を示す図である。同図に示すように、この評価結果テーブル１５０ｉは、データ種別と評価結果とを対応付けて記憶している。
【００５０】
例えば、図１１の１段目では、データ種別「Ｄａｔａ０」に対する論理式の評価結果が「０（偽）」である旨の情報が登録されている。なお、図１１の３段目では、データ種別「Ｄａｔａ２」に対する論理式の評価結果が「１（真）」である旨の情報が登録されている。
【００５１】
検索結果データ１５０ｊは、ＸＭＬデータ１５０ａに対する検索クエリ１５０ｂの検索結果を記憶するデータである。図１２は、本実施例１にかかる検索結果データ１５０ｊのデータ構造の一例を示す図である。この検索結果データ１５０ｊは、評価結果テーブル１５０ｉ（図１１参照）の評価結果が「１」となるデータ種別の返答項目が記憶されている。図１１を参照すると、この場合は、データ種別「Ｄａｔａ２」の評価結果が「１」となっているので、データ種別「Ｄａｔａ２」の返答項目が、検索結果データ１５０ｊに記憶される。
【００５２】
図４の説明に戻ると、制御部１６０は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する制御手段であり、特に本発明に密接に関連するものとしては、図４に示すように、検索クエリ分解部１６０ａと、抽出結果テーブル生成部１６０ｂと、論理値算出部１６０ｃと、論理式変換部１６０ｄと、ＢＤＤ構築部１６０ｅと、ＢＤＤ変換部１６０ｆと、ダイアグラム実行部１６０ｇと、検索結果出力部１６０ｈとを有する。
【００５３】
このうち、検索クエリ分解部１６０ａは、端末装置６０から検索クエリを受信した場合に、受信した検索クエリを検索クエリ１５０ｂとして記憶部１５０に記憶すると共に、周知の手法を用いて、検索クエリ１５０ｂ（図６参照）から分解検索クエリ１５０ｃ（図７参照）を生成する手段である。
【００５４】
抽出結果テーブル生成部１６０ｂは、分解検索クエリ１５０ｃに含まれる評価式に基づいて、第１〜ｎ（ｎ＞１）論理変数および返答項目をＸＭＬデータ１５０ａから抽出し、抽出結果テーブル１５０ｄを生成する手段である。
【００５５】
例えば、検出結果テーブル生成部１６０ｂは、評価式が「busyo/name="開発部"」である場合には、「busyo」要素を親とする「name」要素に「開発部」が含まれているか否かを判定し、含まれている場合には、「○」を抽出結果テーブル１５０ｄに登録し、含まれていない場合には「×」を抽出結果テーブル１５０ｄに登録する。
【００５６】
また、抽出結果テーブル生成部１６０ｂは、評価式が「/busyo/ID=="1.*3"」である場合には、「busyo」要素を親とする「ID」要素に含まれる数列をＸＭＬデータ１５０ａから抽出し、抽出結果テーブル１５０ｆに登録する。
【００５７】
論理値算出部１６０ｃは、分解検索クエリ１５０ｃの評価式と、抽出結果テーブル１５０ｄとを比較することにより、評価式の論理値を算出する手段である。論理値算出部１６０ｃは、算出結果を論理値テーブル１５０ｅ（図９参照）に登録する。なお、評価式ｑ１の論理値を求める際に、第１論理変数情報が「○」の場合には論理値を「１」とし、「×」の場合には論理値を「０」とする。
【００５８】
論理式変換部１６０ｄは、逆ポーランド表記を用いることにより、検索クエリの論理式（例えば、Q=q1  and  q2）を変換する手段である。論理式変換部１６０ｄは、論理式「ｑ１＆ｑ２」を、逆ポーランド表記を用いて変換すると、「ｑ１ｑ２＆」となる。論理式変換部１６０ｄは、変換した論理式のデータを、変換論理式データ１５０ｆとして記憶部１５０に記憶する。
【００５９】
ＢＤＤ構築部１６０ｅは、変換論理式データ１５０ｆに基づいて、第１ダイアグラムデータ１５０ｇを生成する手段である。ＢＤＤ構築部１６０ｅは、変換論理式データ１５０ｆ（逆ポーランド表記の論理式）の文字を先頭から順次読み出し、読み出した文字（論理演算子、論理変数等）に応じて、第１レベルテーブル１５１、第１遷移テーブル１５２に各種の情報を登録する。
【００６０】
以下において、ＢＤＤ構築部１６０ｅが、論理変数を読み出した場合の処理、否定（〜）を読み出した場合の処理、ＡＮＤ（＆）を読み出した場合の処理、ＯＲ（｜）を読み出した場合の処理、終了時の処理（最後の文字を読み出した後の処理）について順に説明する。なお、ＢＤＤ構築部１６０ｅは、先頭（Ｔｏｐ）スタック、Ｔｒｕｅスタック、Ｆａｌｓｅスタックを保持しているものとする。
【００６１】
（論理変数を読み出した場合の処理）
ＢＤＤ構築部１６０ｅが、論理変数を読み出した場合には、新しいノード変数を定義し、定義したノード変数、現在のレベル、読み出した論理変数からなるエントリを第１レベルテーブル１５１に追加する。
【００６２】
また、ＢＤＤ構築部１６０ｅは、定義したノード変数を先頭スタックにプッシュ（一時記憶部＜スタック＞にノード変数を登録する；以下同様）し、定義したノード変数１つからなる集合をＴｒｕｅスタック、Ｆａｌｓｅスタックにプッシュすると共に、現在のレベルに１を加算する。
【００６３】
（否定「〜」を読み出した場合の処理）
ＢＤＤ構築部１６０ｅは、否定を読み出した場合には、新しくユニークなノード変数Ｔ，Ｆを定義し、Ｔｒｕｅスタックをポップ（一時記憶部＜スタック＞に最後に登録された情報を取り出す；以下同様）し、ポップした集合内の各ノード変数において、ノード変数、論理値１、遷移先ノード変数Ｆからなるエントリを第１遷移テーブル１５２に追加する。
【００６４】
また、ＢＤＤ構築部１６０ｅは、Ｆａｌｓｅスタックをポップし、ポップした集合内の各ノード変数において、ノード変数、論理値０、遷移先ノード変数Ｔからなるエントリを第１遷移テーブル１５２に追加する。ＢＤＤ構築部１６０ｅは、Ｔｒｕｅスタックにノード変数Ｔからなる集合をプッシュし、Ｆａｌｓｅスタックにノード変数Ｆからなる集合をプッシュする。
【００６５】
（ＡＮＤ「＆」を読み出した場合の処理）
ＢＤＤ構築部１６０ｅは、ＡＮＤを読み出した場合には、先頭スタックをポップし、ポップしたノード変数をＡとする。そして、ＢＤＤ構築部１６０ｅは、Ｔｒｕｅスタックを２回ポップし、１回目にポップした集合をＴｒｕｅスタックにプッシュする。
【００６６】
ＢＤＤ構築部１６０ｅは、２回目にポップした集合内の各ノード変数をノード項目として、論理値１、遷移先ノード変数Ａとをあわせたエントリを第１遷移テーブル１５２に追加する。また、ＢＤＤ構築部１６０ｅは、Ｆａｌｓｅスタックを２回ポップし、１回目および２回目にポップした集合内のノード変数すべてからなる集合をＦａｌｓｅスタックにプッシュする。
【００６７】
（ＯＲ「｜」を読み出した場合の処理）
ＢＤＤ構築部１６０ｅは、ＯＲを読み出した場合には、先頭スタックをポップし、ポップしたノード変数をＡとする。そして、ＢＤＤ構築部１６０ｅは、Ｆａｌｓｅスタックを２回ポップし、１回目にポップした集合をＦａｌｓｅスタックにプッシュする。
【００６８】
ＢＤＤ構築部１６０ｅは、２回目にポップした集合内の各ノード変数をノード項目として、論理値０、遷移先ノード変数Ａをあわせたエントリを第１遷移テーブル１５２に追加する。また、ＢＤＤ構築部１６０ｅは、Ｔｒｕｅスタックを２回ポップし、１回目および２回目にポップした集合内のノード変数全てからなる集合をＴｒｕｅスタックにプッシュする。
【００６９】
（終了時の処理）
ＢＤＤ構築部１６０ｅは、新しいノード変数０，１を定義し、定義したノード変数、現在のレベル、論理変数ＮＵＬＬからなるエントリを第１レベルテーブル１５１に追加する。また、ＢＤＤ構築部１６０ｅは、Ｔｒｕｅスタックをポップし、ポップした集合内の各ノード変数において、論理値１と遷移先ノード変数１とを合わせたエントリを第１遷移テーブル１５２に追加する。
【００７０】
ＢＤＤ構築部１６０ｅは、Ｆａｌｓｅスタックをポップし、ポップした集合内の各ノード変数において、論理値０と遷移先ノード変数０とを合わせたエントリを第１遷移テーブル１５２に追加する。そして、ＢＤＤ構築部１６０ｅは、第１遷移テーブル１５２において、遷移先項目がノード変数Ｔ，Ｆとして生成されたノード変数である全てのエントリに対し、そのノード変数をノード項目としてもつエントリを削除し、削除したエントリの遷移先ノード変数を該当エントリの遷移先項目として上書きする。
【００７１】
次に、ＢＤＤ構築部１６０ｅの処理を具体的に説明する。ここでは、一例として、変換論理式データ１５０ｆが「ＨＧ＆Ｆ｜ＥＤ〜Ｃ＆｜〜＆ＢＡ＆｜」であるものとする。図１３〜図１５は、ＴＯＰスタックとＴｒｕｅスタックとＦａｌｓｅスタックの状態変化を示す図であり、図１６〜図２４は、第１レベルテーブル１５１と第１遷移テーブル１５２の状態変化を示す図である。
【００７２】
（「Ｈ」Ｇ＆Ｆ｜ＥＤ〜Ｃ＆｜〜＆ＢＡ＆｜）
まず、ＢＤＤ構築部１６０ｅは、「Ｈ」を読み、（Ｈ＜ノード＞，０＜レベル＞，Ｈ＜論理変数＞）を第１レベルテーブル１５１に追加し、「Ｈ」を先頭スタック、Ｔｒｕｅスタック、Ｆａｌｓｅスタックにプッシュする。また、現在のレベル「０」に１を加算する。
【００７３】
（Ｈ「Ｇ」＆Ｆ｜ＥＤ〜Ｃ＆｜〜＆ＢＡ＆｜）
ＢＤＤ構築部１６０ｅは、「Ｇ」を読み、（Ｇ，１，Ｇ）を第１レベルテーブル１５１に追加し、「Ｇ」を先頭スタック、Ｔｒｕｅスタック、Ｆａｌｓｅスタックにプッシュする。また、現在のレベル「１」に１を加算する（図１３のステップＳ２０および図１６の左側参照）。
【００７４】
（ＨＧ「＆」Ｆ｜ＥＤ〜Ｃ＆｜〜＆ＢＡ＆｜）
ＢＤＤ構築部１６０ｅは、「＆」を読み、先頭スタック「Ｇ」をポップする。そして、ＢＤＤ構築部１６０ｅは、Ｔｒｕｅスタックを２回ポップし、１回目にポップした集合「Ｇ」をＴｒｕｅスタックにプッシュする。
【００７５】
また、ＢＤＤ構築部１６０ｅは、２回目にポップした集合「Ｈ」のノード変数が「Ｈ」なので、（Ｈ＜ノード＞，１＜論理値＞，Ｇ＜遷移先＞）を第１遷移テーブル１５２に追加する（図１６の右側参照）。ＢＤＤ構築部１６０ｅは、Ｆａｌｓｅスタックを２回ポップし、１回目および２回目にポップした集合内のノード変数全てからなる集合「Ｈ，Ｇ」をＦａｌｓｅスタックにプッシュする（図１３のステップＳ２１）。
【００７６】
（ＨＧ＆「Ｆ」｜ＥＤ〜Ｃ＆｜〜＆ＢＡ＆｜）
ＢＤＤ構築部１６０ｅは、「Ｆ」を読み、（Ｆ，２，Ｆ）を第１レベルテーブル１５１に追加し、「Ｆ」を先頭スタック、Ｔｒｕｅスタック、Ｆａｌｓｅスタックにプッシュする（図１３のステップＳ２２および図１７の左側参照）。また、現在のレベル「２」に１を加算する。
【００７７】
（ＨＧ＆Ｆ「｜」ＥＤ〜Ｃ＆｜〜＆ＢＡ＆｜）
ＢＤＤ構築部１６０ｅは、「｜」を読み、先頭スタック「Ｆ」をポップする。そして、ＢＤＤ構築部１６０ｅは、Ｆａｌｓｅスタックを２回ポップし、１回目にポップした集合「Ｆ」をＦａｌｓｅスタックにプッシュする。
【００７８】
ＢＤＤ構築部１６０ｅは、２回目にポップした集合「Ｈ，Ｇ」内の各ノード変数をノード項目として、論理値０と遷移先ノード変数「Ｆ」とを合わせたエントリを第１遷移テーブル１５２に追加する（図１７の右側参照）。
【００７９】
ＢＤＤ構築部１６０ｅは、Ｔｒｕｅスタックを２回ポップし、１回目および２回目にポップした集合内のノード変数全てからなる集合「Ｇ，Ｆ」をＴｒｕｅスタックにプッシュする（図１３のステップＳ２３）。
【００８０】
（ＨＧ＆Ｆ｜「Ｅ」Ｄ〜Ｃ＆｜〜＆ＢＡ＆｜）
ＢＤＤ構築部１６０ｅは、「Ｅ」を読み、（Ｅ，３，Ｅ）を第１レベルテーブル１５１に追加し、「Ｅ」を先頭スタック、Ｔｒｕｅスタック、Ｆａｌｓｅスタックにプッシュする。また、現在のレベル「３」に１を加算する。
【００８１】
（ＨＧ＆Ｆ｜Ｅ「Ｄ」〜Ｃ＆｜〜＆ＢＡ＆｜）
ＢＤＤ構築部１６０ｅは、「Ｄ」を読み、（Ｄ，４，Ｄ）を第１レベルテーブル１５１に追加し、「Ｄ」を先頭スタック、Ｔｒｕｅスタック、Ｆａｌｓｅスタックにプッシュする。また、現在のレベル「４」に１を加算する（図１３のステップＳ２４および図１８の左側参照）。
【００８２】
（ＨＧ＆Ｆ｜ＥＤ「〜」Ｃ＆｜〜＆ＢＡ＆｜）
ＢＤＤ構築部１６０ｅは、「〜」を読み、ユニークなノード「Ｄｔ」、「Ｄｆ」を定義し、Ｔｒｕｅスタックをポップし、ポップした集合内「Ｄ」のノード変数において、ノード変数「Ｄ」、論理値１、遷移先ノード変数「Ｄｆ」からなるエントリを第１遷移テーブル１５２に追加する。
【００８３】
ＢＤＤ構築部１６０ｅは、Ｆａｌｓｅスタックをポップし、ポップした集合内「Ｄ」のノード変数において、ノード変数「Ｄ」、論理値０、遷移先ノード変数「Ｄｔ」からなるエントリを第１遷移テーブル１５２に追加する（図１８の右側参照）。また、ＢＤＤ構築部１６０ｅは、Ｔｒｕｅスタックに「Ｄｔ」をプッシュし、Ｆａｌｓｅスタックに「Ｄｆ」をプッシュする（図１３のステップＳ２５）。
【００８４】
（ＨＧ＆Ｆ｜ＥＤ〜「Ｃ」＆｜〜＆ＢＡ＆｜）
ＢＤＤ構築部１６０ｅは、「Ｃ」を読み、（Ｃ，５，Ｃ）を第１レベルテーブル１５１に追加し、「Ｃ」を先頭スタック、Ｔｒｕｅスタック、Ｆａｌｓｅスタックにプッシュする。また、現在のレベル「５」に１を加算する（図１４のステップＳ２６および図１９の左側参照）。
【００８５】
（ＨＧ＆Ｆ｜ＥＤ〜Ｃ「＆」｜〜＆ＢＡ＆｜）
ＢＤＤ構築部１６０ｅは、「＆」を読み、先頭スタック「Ｃ」をポップする。そして、ＢＤＤ構築部１６０ｅは、Ｔｒｕｅスタックを２回ポップし、１回目にポップした集合「Ｃ」をＴｒｕｅスタックにプッシュする。
【００８６】
また、ＢＤＤ構築部１６０ｅは、２回目にポップした集合「Ｄｔ」のノード変数が「Ｄｔ」なので、（Ｄｔ，１，Ｃ）を第１遷移テーブル１５２に追加する（図１９の右側参照）。ＢＤＤ構築部１６０ｅは、Ｆａｌｓｅスタックを２回ポップし、１回目および２回目にポップした集合内のノード変数全てからなる集合「Ｄｆ，Ｃ」をＦａｌｓｅスタックにプッシュする（図１４のステップＳ２７）。
【００８７】
（ＨＧ＆Ｆ｜ＥＤ〜Ｃ＆「｜」〜＆ＢＡ＆｜）
ＢＤＤ構築部１６０ｅは、「｜」を読み、先頭スタック「Ｄ」をポップする。そして、ＢＤＤ構築部１６０ｅは、Ｆａｌｓｅスタックを２回ポップし、１回目にポップした集合「Ｄｆ，Ｃ」をＦａｌｓｅスタックにプッシュする。
【００８８】
ＢＤＤ構築部１６０ｅは、２回目にポップした集合「Ｅ」のノード変数をノード項目として、論理値０と遷移先ノード変数「Ｄ」とを合わせたエントリを第１遷移テーブル１５２に追加する（図２０の左側参照）。
【００８９】
ＢＤＤ構築部１６０ｅは、Ｔｒｕｅスタックを２回ポップし、１回目および２回目にポップした集合内のノード変数全てからなる集合「Ｅ，Ｃ」をＴｒｕｅスタックにプッシュする（図１４のステップＳ２８）。
【００９０】
（ＨＧ＆Ｆ｜ＥＤ〜Ｃ＆｜「〜」＆ＢＡ＆｜）
ＢＤＤ構築部１６０ｅは、「〜」を読み、ユニークなノード「Ｃｔ」、「Ｃｆ」を定義し、Ｔｒｕｅスタックをポップし、ポップした集合内「Ｅ，Ｃ」のノード変数において、ノード変数「Ｃ」、論理値１、遷移先ノード変数「Ｃｆ」からなるエントリを第１遷移テーブル１５２に追加する。また、ノード変数「Ｅ」、論理値１、遷移先ノード変数「Ｃｆ」からなるエントリを第１遷移テーブル１５２に追加する。
【００９１】
ＢＤＤ構築部１６０ｅは、Ｆａｌｓｅスタックをポップし、ポップした集合内「Ｄｆ，Ｃ」の各ノード変数において、ノード変数「Ｃ」、論理値０、遷移先ノード変数「Ｃｔ」からなるエントリを第１遷移テーブル１５２に追加すると共に、ノード変数「Ｄｆ」、論理値０、遷移先ノード変数「Ｃｔ」からなるエントリを第１遷移テーブル１５２に追加する（図２０の右側参照）。また、ＢＤＤ構築部１６０ｅは、「Ｃｔ」をＴｒｕｅスタックにプッシュし、「Ｃｆ」をＦａｌｓｅスタックにプッシュする（図１４のステップＳ２９）。
【００９２】
（ＨＧ＆Ｆ｜ＥＤ〜Ｃ＆｜〜「＆」ＢＡ＆｜）
ＢＤＤ構築部１６０ｅは、「＆」を読み、先頭スタック「Ｅ」をポップする。そして、ＢＤＤ構築部１６０ｅは、Ｔｒｕｅスタックを２回ポップし、一回目にポップした集合「Ｃｔ」をＴｒｕｅスタックにプッシュする。
【００９３】
また、ＢＤＤ構築部１６０ｅは、２回目にポップした集合「Ｇ，Ｆ」内の各ノード変数が「Ｇ，Ｆ」なので、（Ｇ，１，Ｅ）および（Ｆ，１，Ｅ）を第１遷移テーブル１５２に追加する（図２１の左側参照）。ＢＤＤ構築部１６０ｅは、Ｆａｌｅｓスタックを２回ポップし、１回目および２回目にポップした集合内のノード変数全てからなる集合「Ｃｆ，Ｆ」をＦａｌｓｅスタックにプッシュする（図１４のステップＳ３０）。
【００９４】
（ＨＧ＆Ｆ｜ＥＤ〜Ｃ＆｜〜＆「Ｂ」Ａ＆｜）
ＢＤＤ構築部１６０ｅは、「Ｂ」を読み、（Ｂ，６，Ｂ）を第１レベルテーブル１５１に登録し、「Ｂ」を先頭スタック、Ｔｒｕｅスタック、Ｆａｌｓｅスタックにプッシュする。また、現在のレベル「６」に１を加算する。
【００９５】
（ＨＧ＆Ｆ｜ＥＤ〜Ｃ＆｜〜＆Ｂ「Ａ」＆｜）
ＢＤＤ構築部１６０ｅは、「Ａ」を読み、（Ａ，７，Ａ）を第１レベルテーブル１５１に登録し、「Ａ」を先頭スタック、Ｔｒｕｅスタック、Ｆａｌｓｅスタックにプッシュする。また、現在のレベル「７」に１を加算する。
【００９６】
（ＨＧ＆Ｆ｜ＥＤ〜Ｃ＆｜〜＆ＢＡ「＆」｜）
ＢＤＤ構築部１６０ｅは、「＆」を読み、先頭スタック「Ａ」をポップする。そして、ＢＤＤ構築部１６０ｅは、Ｔｒｕｅスタックを２回ポップし、１回目にポップした集合「Ａ」をＴｒｕｅスタックにプッシュする。
【００９７】
また、ＢＤＤ構築部１６０ｅは、２回目にポップした集合「Ｂ」のノード変数が「Ｂ」なので、（Ｂ，１，Ａ）を第１遷移テーブル１５２に追加する（図２１の右側参照）。ＢＤＤ構築部１６０ｅは、Ｆａｌｓｅスタックを２回ポップし、１回目および２回目にポップした集合内のノード変数全てからなる集合「Ｂ，Ａ」をＦａｌｓｅスタックにプッシュする（図１５のステップＳ３１）。
【００９８】
（ＨＧ＆Ｆ｜ＥＤ〜Ｃ＆｜〜＆ＢＡ＆「｜」）
ＢＤＤ構築部１６０ｅは、「｜」を読み、先頭トラック「Ｂ」をポップする。そして、ＢＤＤ構築部１６０ｅは、Ｆａｌｓｅスタックを２回ポップし、１回目にポップした集合「Ｂ，Ａ」をＦａｌｓｅスタックにプッシュする。
【００９９】
ＢＤＤ構築部１６０ｅは、２回目にポップした集合「Ｃｆ，Ｆ」の各ノード変数をノード項目として、ノード変数「Ｃｆ」、論理値０、遷移先ノード変数「Ｂ」と、ノード変数「Ｆ」、論理値０、遷移先ノード変数「Ｂ」を第１遷移テーブル１５２に追加する（図２２参照）。
【０１００】
ＢＤＤ構築部１６０ｅは、Ｔｒｕｅスタックを２回ポップし、１回目および２回目にポップした集合内のノード変数全てからなる集合「Ａ，Ｃｔ」をＴｒｕｅスタックにプッシュする（図１５のステップＳ３２）。
【０１０１】
（終了時の処理）
ＢＤＤ構築部１６０ｅは、新しいノード変数「０」、「１」を定義し、定義したノード変数、現在のレベル、論理変数ＮＵＬＬからなるエントリを第１レベルテーブル１５１に追加する。そして、ＢＤＤ構築部１６０ｅは、Ｔｒｕｅスタックをポップし、ポップした集合内「Ａ，Ｃｔ」の各ノード変数において、論理値１と遷移先ノード変数１とを合わせたエントリ（Ｃｔ，１，１）および（Ａ，１，１）を第１遷移テーブル１５２に追加する。
【０１０２】
ＢＤＤ構築部１６０ｅは、Ｆａｌｓｅスタックをポップし、ポップした集合内「Ｂ，Ａ」の各ノード変数において、論理値０と遷移先ノード変数０とを合わせたエントリ（Ｂ，０，０）および（Ａ，０，０）を第１遷移テーブル１５２に登録する（図１５のステップＳ３３および図２３参照）。
【０１０３】
ＢＤＤ構築部１６０ｅは、第１遷移テーブル１５２（図２３参照）において、遷移先がノード変数Ｔ，Ｆとして生成されたノード変数（例えば、Ｄｔ，Ｄｆ，Ｃｔ，Ｃｆ）である全てのエントリに対し、そのノード変数をノード項目としてもつエントリを削除し、削除したエントリの遷移先ノード変数を該エントリの遷移先項目として上書きする（図１５のステップＳ３４および図２４参照）。
【０１０４】
例えば、ＢＤＤ構築部１６０ｅは、
（Ｅ，１，Ｃｆ）、（Ｃｆ，０，Ｂ）を（Ｅ，１，Ｂ）に変換し、
（Ｄ，０，Ｄｔ）、（Ｄｔ，１，Ｃ）を（Ｄ，０，Ｃ）に変換し、
（Ｄ，１，Ｄｆ）、（Ｄｆ，０，Ｃｔ）を（Ｄ，１，Ｃｔ）に変換し、
（Ｄ，１，Ｃｔ）、（Ｃｔ，１，１）を（Ｄ，１，１）に変換し、
（Ｃ、０、Ｃｔ）、（Ｃｔ、１，１）を（Ｄ，１，１）に変換する。
【０１０５】
ＢＤＤ変換部１６０ｆは、第１の２分木を第２の２分木となるように、第１ダイアグラムデータ１５０ｇを変換して第２ダイアグラムデータ１５０ｈを生成する手段である（第１の２分木および第２の２分木については図２参照）。ＢＤＤ変換部１６０ｆは、第１ダイアグラムデータ１５０ｇに基づいて、起点となるノードから所定複数レベル先のノードまで到達する各レベルの変数の真偽条件をビット列表記することで、第２ダイアグラムデータ１５０ｈを作成する。
【０１０６】
図２５は、本実施例１にかかる第２ダイアグラムデータ１５０ｈのデータ構造の一例を示す図である。ただし、図２６に示す第１ダイアグラムデータ１５０ｇを変換したものが、図２５に示す第２ダイアグラムデータ１５０ｈとなる。図２６は、ＢＤＤ変換部１６０ｆの処理を説明するための第１ダイアグラムデータ１５０ｇを示す図である。
【０１０７】
図２５に示すように、この第２ダイアグラムデータ１５０ｈは、第２レベルテーブル１５３と、第２遷移テーブル１５４とを有する。第２レベルテーブル１５３は、ノードと、各ノードのレベルと、各ノードに入力する入力ビット数とを管理するテーブルである。例えば、第２レベルテーブル１５３の１段目では、ノード「Ｈ」のレベルが「０」であり、ノード「Ｈ」に入力されるビット数（ノードＨにおいて比較される論理値の数）が「４」である旨の情報が登録されている。
【０１０８】
第２遷移テーブル１５４は、ノードと、各ノードに入力される論理値と、論理値に対応したノードの遷移先を管理するテーブルである。例えば、第２遷移テーブル１５４の１段目では、ノード「Ｈ」にて入力されるビット列が「１１＊１（１１０１あるいは１１１１）」の場合に、ノード「１」に遷移する旨の情報が登録されている。なお、図２５に示す第２レベルテーブル１５３および第２遷移テーブル１５４によって、図２５の上段に示す２分木（第２の２分木）が定義される。
【０１０９】
続いて、具体例を用いて、ＢＤＤ変換部１６０ｆの処理について説明する。図２７〜図３０は、本実施例１にかかるＢＤＤ変換部１６０ｆの処理を説明するための図である。図２７〜図３０で説明する処理を実行することにより、図２６に示した第１ダイアグラムデータ１５０ａから、図２５に示した第２ダイアグラムデータ１５０ｈが作成され、多ビット毎に遷移先のノードを判定することが可能となる。なお、変換対象とする第１ダイアグラムデータ１５０ｇについては、図２６に示した第１ダイアグラムデータ１５０ｇ（第１レベルテーブル１５１、第１遷移テーブル１５２）を用いて説明する。
【０１１０】
まず、ＢＤＤ変換部１６０ｆは、カレントレベルを「０」に設定し、ＢＤＤの初期状態であるノード「Ｈ」を、始点ノード集合に追加する。ＢＤＤ変換部１６０ｆは、初期状態となるノード「Ｈ」を、レベル「０」と入力ビット数「Ｎ」（Ｎは自然数；ここでは一例として、Ｎ＝４とする）とを第２レベルテーブル１５３に登録する。
【０１１１】
ＢＤＤ変換部１６０ｆは、始点ノード集合「Ｈ」の始点ノードに対して、始点ノードとして始点ノード「Ｈ」を、遷移ビット列として空列を、終点ノードとして始点ノード「Ｈ」をパススタックにスタックし、始点ノード集合を空にする（図２６のステップＳ４０）。ここで、パススタックは、ＢＤＤ変換部１６０ｆが保持しており、始点ノード、遷移ビット列、終点ノードを対応付けて記憶している。
【０１１２】
ＢＤＤ変換部１６０ｆは、パススタックから始点ノード「Ｈ」、遷移ビット列「空欄」、終点ノード「Ｈ」をポップし、遷移ビット列を複製し、０および１をそれぞれ加える。また、第１遷移テーブル１５２を参照し、ポップした終点ノード「Ｈ」の論理値「０」および「１」でのそれぞれの遷移先ノード「Ｇ」、「Ｆ」を得、（遷移先ノードのレベル）−（終点ノード「Ｈ」のレベル）−１個の「＊」を各遷移ビット列に追加する。遷移先ノード「Ｆ」のレベル「２」から終点ノード「Ｈ」のレベル「０」を差し引くと「２」となるので、１個の「＊」がビット列「０」の後ろに追加される。そして、始点ノード「Ｈ」、ビット列「０＊」、終点ノード「Ｆ」をパススタックにスタックする。
【０１１３】
一方、ＢＤＤ変換部１６０ｆは、遷移先ノード「Ｇ」のレベル「１」から終点ノード「Ｈ」のレベル「０」を差し引くと「１」となるので、０個の「＊」がビット列「１」の後ろに追加される。そして、始点ノード「Ｈ」、ビット列「１」、終点ノード「Ｇ」をパススタックにスタックする（図２７のステップＳ４１）。
【０１１４】
ＢＤＤ変換部１６０ｆは、パススタックから始点ノード「Ｈ」、遷移ビット列「１」、終点ノード「Ｇ」をポップし、遷移ビット列を複製し、０および１をそれぞれ加える。また、第１遷移テーブル１５２を参照し、ポップした終点ノード「Ｇ」の遷移先ノードの論理値「０」および「１」でのそれぞれの遷移先ノード「Ｅ」、「Ｆ」を得、（遷移先ノードのレベル）−（終点ノード「Ｈ」のレベル）−１個の「＊」を各遷移ビット列に追加する。遷移先ノード「Ｆ」のレベル「２」から終点ノード「Ｇ」のレベル「１」を差し引くと「１」となるので、０個の「＊」がビット列「１０」の後ろに追加される。そして、始点ノード「Ｈ」、ビット列「１０」、終点ノード「Ｆ」をパススタックにスタックする。
【０１１５】
一方、ＢＤＤ変換部１６０ｆは、遷移先ノード「Ｅ」のレベル「３」から終点ノード「Ｇ」のレベル「１」を差し引くと「２」となるので、１個の「＊」がビット列「１１」の後ろに追加される。そして、始点ノード「Ｈ」、ビット列「１１＊」、終点ノード「Ｅ」をパススタックにスタックする。（図２７のステップＳ４２）。
【０１１６】
ＢＤＤ変換部１６０ｆは、パススタックから始点ノード「Ｈ」、遷移ビット列「１１＊」、終点ノード「Ｅ」をポップし、遷移ビット列を複製し、０および１をそれぞれ加える。また、第１遷移テーブル１５２を参照し、ポップした終点ノード「Ｅ」の遷移先ノードの論理値「０」および「１」でのそれぞれの遷移先ノード「１」、「Ｄ」を得、（遷移先ノードのレベル）−（終点ノード「Ｈ」のレベル）−１個の「＊」を各遷移ビット列に追加する。遷移先ノード「Ｄ」のレベル「４」から終点ノード「Ｅ」のレベル「３」を差し引くと「１」となるので、０個の「＊」がビット列「１１＊０」の後ろに追加される。そして、始点ノード「Ｈ」、ビット列「１１＊０」、終点ノード「Ｄ」をパススタックにスタックする。
【０１１７】
一方、ＢＤＤ変換部１６０ｆは、遷移先ノード「１」のレベル「８」から終点ノード「Ｅ」のレベル「３」を差し引くと「５」となるので、４個の「＊」がビット列「１１＊１」の後ろに追加される。そして、始点ノード「Ｈ」、ビット列「１１＊１」（先頭から５ビット目以降のビット列はカットされる）、終点ノード「１」をパススタックにスタックする（図２７のステップＳ４３）。
【０１１８】
ＢＤＤ変換部１６０ｆは、パススタックから始点ノード「Ｈ」、遷移ビット列「１１＊１」、終点ノード「１」をポップする。ここで、（終点ノード「１」のレベル）−（カレントレベル「０」）がＮ（４）以上であるため、ＢＤＤ変換部１６０ｆは、第２レベルテーブル１５３に終点ノード「１」、レベル「２」、入力ビット数「４」を登録する。また、ＢＤＤ変換部１６０ｆは、第２遷移テーブル１５４に、始点ノード「Ｈ」、論理値「１１＊１」、遷移先（終点ノード）「１」を登録する。
【０１１９】
ＢＤＤ変換部１６０ｆは、パススタックから始点ノード「Ｈ」、遷移ビット列「１１＊０」、終点ノード「Ｄ」をポップする。ここで、（終点ノード「Ｄ」のレベル）−（カレントレベル「０」）がＮ（４）以上であるため、ＢＤＤ変換部１６０ｆは、第２レベルテーブル１５３に、終点ノード「Ｄ」、レベル「１」、入力ビット数「４」を登録する。また、ＢＤＤ変換部１６０ｆは、第２遷移テーブル１５４に、始点ノード「Ｈ」、論理値「１１＊０」、遷移先（終点ノード）「Ｄ」を登録する。なお、終点ノード「Ｄ」は、最終レベルのノードではないので、ノード「Ｄ」を始点ノード集合に登録する（図２８のステップＳ４４）。
【０１２０】
ＢＤＤ変換部１６０ｆは、パススタックから始点ノード「Ｈ」、遷移ビット列「１０」、終点ノード「Ｆ」をポップし、遷移ビット列を複製し、０および１をそれぞれ加える。また、第１遷移テーブル１５２を参照し、ポップした終点ノード「Ｆ」の遷移先ノードの論理値「０」および「１」でのそれぞれの遷移先ノード「Ｅ」、「Ｂ」を得、（遷移先ノードのレベル）−（終点ノード「Ｆ」のレベル）−１個の「＊」を各遷移ビット列に追加する。遷移先ノード「Ｅ」のレベル「３」から終点ノード「Ｆ」のレベル「２」を差し引くと「１」となるので、０個の「＊」がビット列「１０１」の後ろに追加される。そして、始点ノード「Ｈ」、ビット列「１０１」、終点ノード「Ｅ」をパススタックにスタックする。
【０１２１】
続いて、ＢＤＤ変換部１６０ｆは、始点ノード「Ｈ」、ビット列「１０１」、終点ノード「Ｅ」をポップし、遷移ビット列を複製し、０および１をそれぞれ加える。また、第１遷移テーブル１５２を参照し、ポップした終点ノード「Ｅ」の遷移先ノードの論理値「０」および「１」でのそれぞれの遷移先ノード「Ｄ」、「１」を得、（遷移先ノードのレベル）−（終点ノード「Ｅ」のレベル）−１個の「＊」を各遷移ビット列に追加する。
【０１２２】
ＢＤＤ変換部１６０ｆは、遷移先ノード「Ｄ」のレベル「４」から終点ノード「Ｅ」のレベル「３」を差し引くと「１」となるので、０個の「＊」がビット列「１０１０」の後ろに追加される。そして、始点ノード「Ｈ」、ビット列「１０１０」、終点ノード「Ｄ」をパススタックにスタックする。
【０１２３】
ＢＤＤ変換部１６０ｆは、始点ノード「Ｈ」、ビット列「１０１０」、終点ノード「Ｄ」をパススタックからポップする。ここで、（終点ノード「Ｄ」のレベル）−（カレントレベル「０」）がＮ（４）以上であるため、第２遷移テーブル１５４に、始点ノード「Ｈ」、論理値「１０１０」、遷移先（終点ノード）「Ｄ」を登録する。
【０１２４】
ところで、ＢＤＤ変換部１６０ｆは、遷移先ノード「１」のレベル「８」から終点ノード「Ｅ」のレベル「３」を差し引くと「５」となるので、４個の「＊」がビット列「１０１１」の後ろに追加される。そして、始点ノード「Ｈ」、ビット列「１０１１」（先頭から５ビット目以降のビット列はカットされる）、終点ノード「１」をパススタックにスタックする。
【０１２５】
ＢＤＤ変換部１６０ｆは、パススタックから始点ノード「Ｈ」、遷移ビット列「１０１１」、終点ノード「１」をポップする。ここで、（終点ノード「１」のレベル）−（カレントレベル「０」）がＮ（４）以上であるため、ＢＤＤ変換部１６０ｆは、第２遷移テーブル１５４に、始点ノード「Ｈ」、論理値「１０１１」、遷移先（終点ノード）「１」を登録する。
【０１２６】
また、ＢＤＤ変換部１６０ｆは、遷移先ノード「Ｂ」のレベル「６」から終点ノード「Ｆ」のレベル「２」を差し引くと「４」となるので、３個の「＊」がビット列「１００」の後ろに追加される。そして、始点ノード「Ｈ」、ビット列「１００＊」（先頭から５ビット目以降のビット列はカットされる）、終点ノード「Ｂ」をパススタックにスタックする（図２８のステップＳ４５）。
【０１２７】
ＢＤＤ変換部１６０ｆは、パススタックから始点ノード「Ｈ」、遷移ビット列「１００＊」、終点ノード「Ｂ」をポップする。ここで、（終点ノード「Ｂ」のレベル）−（カレントレベル「０」）がＮ（４）以上であるため、ＢＤＤ変換部１６０ｆは、第２レベルテーブル１５３に、終点ノード「Ｂ」、レベル「１」、入力ビット「２」を登録する。また、ＢＤＤ変換部１６０ｆは、第２遷移テーブル１５４に、始点ノード「Ｈ」、論理値「１００＊」、遷移先（終点ノード）「Ｂ」を登録する。なお、終点ノード「Ｂ」は、最終レベルのノードではないので、ノード「Ｂ」を始点ノード集合に登録する（図２８のステップＳ４６）。
【０１２８】
ＢＤＤ変換部１６０ｆは、パススタックから始点ノード「Ｈ」、遷移ビット列「０＊」、終点ノード「Ｆ」をポップし、遷移ビット列を複製し、０および１をそれぞれ加える。また、第１遷移テーブル１５２を参照し、ポップした終点ノード「Ｆ」の遷移先ノードの論理値「０」および「１」でのそれぞれの遷移先ノード「Ｅ」、「Ｂ」を得、（遷移先ノードのレベル）−（終点ノード「Ｆ」のレベル）−１個の「＊」を各遷移ビット列に追加する。遷移先ノード「Ｂ」のレベル「６」から終点ノード「Ｆ」のレベル「２」を差し引くと「４」となるので、３個の「＊」がビット列「０＊０」の後ろに追加される。そして、始点ノード「Ｈ」、ビット列「０＊０＊」（先頭から５ビット目以降のビット列はカットされる）、終点ノード「Ｂ」をパススタックにスタックする。
【０１２９】
ＢＤＤ変換部１６０ｆは、パススタックから始点ノード「Ｈ」、遷移ビット列「０＊０＊」、終点ノード「Ｂ」をポップする。ここで、（終点ノード「Ｂ」のレベル）−（カレントレベル「０」）がＮ（４）以上であるため、ＢＤＤ変換部１６０ｆは、第２遷移テーブル１５４に、始点ノード「Ｈ」、論理値「０＊０＊」、遷移先（終点ノード）「Ｂ」を登録する。
【０１３０】
一方、ＢＤＤ変換部１６０ｆは、遷移先ノード「Ｅ」のレベル「３」から終点ノード「Ｆ」のレベル「２」を差し引くと「１」となるので、０個の「＊」がビット列「０＊１」の後ろに追加される。そして、始点ノード「Ｈ」、ビット列「０＊１」、終点ノード「Ｅ」をパススタックにスタックする。
【０１３１】
ＢＤＤ変換部１６０ｆは、始点ノード「Ｈ」、ビット列「０＊１」、終点ノード「Ｅ」をパススタックからポップし、遷移ビット列を複製し、０および１をそれぞれ加える。また、第１遷移テーブル１５２を参照し、ポップした終点ノード「Ｅ」の遷移先ノードの論理値「０」および「１」でのそれぞれの遷移先ノード「Ｄ」、「１」を得、（遷移先ノードのレベル）−（終点ノード「Ｅ」のレベル）−１個の「＊」を各遷移ビット列に追加する。遷移先ノード「Ｄ」のレベル「４」から終点ノード「Ｅ」のレベル「３」を差し引くと「１」となるので、０個の「＊」がビット列「０＊１０」の後ろに追加される。そして、始点ノード「Ｈ」、ビット列「０＊１０」、終点ノード「Ｄ」をパススタックにスタックする。
【０１３２】
ＢＤＤ変換部１６０ｆは、始点ノード「Ｈ」、ビット列「０＊１０」、終点ノード「Ｄ」をパススタックからポップする。ここで、（終点ノード「Ｄ」のレベル）−（カレントレベル「０」）がＮ（４）以上であるため、ＢＤＤ変換部１６０ｆは、第２遷移テーブル１５４に、始点ノード「Ｈ」、論理値「０＊１０」、遷移先（終点ノード）「Ｄ」を登録する。
【０１３３】
一方、ＢＤＤ変換部１６０ｆは、遷移先ノード「１」のレベル「８」から終点ノード「Ｅ」のレベル「３」を差し引くと「５」となるので、４個の「＊」がビット列「０＊１１」の後ろに追加される。そして、始点ノード「Ｈ」、ビット列「０＊１１」（先頭から５ビット目以降のビット列はカットされる）、終点ノード「１」をパススタックにスタックする。
【０１３４】
ＢＤＤ変換部１６０ｆは、始点ノード「Ｈ」、ビット列「０＊１１」、終点ノード「Ｄ」をパススタックからポップする。ここで、（終点ノード「１」のレベル）−（カレントレベル「０」）がＮ（４）以上であるため、ＢＤＤ変換部１６０ｆは、第２遷移テーブル１５４に、始点ノード「Ｈ」、論理値「０＊１１」、遷移先（終点ノード）「１」を登録する（図２８のステップＳ４７）。
【０１３５】
ＢＤＤ変換部１６０ｆは、パススタックが空になったので、カレントレベル「０」にＮ（４）を加算し、カレントレベルを「４」に設定する。また、ＢＤＤ変換部１６０ｆは、始点ノード集合の各始点ノード「Ｄ」、「Ｂ」に対応して、パススタックに情報をスタックする。具体的には、始点ノード「Ｄ」、遷移ビット列「空欄」、終端ノード「Ｄ」、始点ノード「Ｂ」、遷移ビット列「空欄」、終端ノード「Ｂ」をパススタックにスタックする（図２９のステップＳ４８）。
【０１３６】
ＢＤＤ変換部１６０ｆは、始点ノード集合を空にする。ＢＤＤ変換部１６０ｆは、パススタックから始点ノード「Ｄ」、遷移ビット列「空欄」、終点ノード「Ｄ」をポップする。そして、ポップした遷移ビット列を複製し、０および１をそれぞれ加える。また、第１遷移テーブル１５２を参照し、ポップした終点ノード「Ｄ」の論理値「０」および「１」でのそれぞれの遷移先ノード「Ｂ」、「Ｃ」を得、（遷移先ノードのレベル）−（終点ノード「Ｄ」のレベル）−１個の「＊」を各遷移ビット列に追加する。
【０１３７】
ＢＤＤ変換部１６０ｆは、遷移先ノード「Ｂ」のレベル「６」から終点ノード「Ｄ」のレベル「４」を差し引くと「２」となるので、１個の「＊」がビット列「０」の後ろに追加される。そして、始点ノード「Ｄ」、ビット列「０＊」、終点ノード「Ｂ」をパススタックにスタックする。
【０１３８】
また、ＢＤＤ変換部１６０ｆは、遷移先ノード「Ｃ」のレベル「５」から終点ノード「Ｄ」のレベル「４」を差し引くと「１」となるので、０個の「＊」がビット列「１」の後ろに追加される。そして、始点ノード「Ｄ」、ビット列「１」、終点ノード「Ｃ」をパススタックにスタックする。
【０１３９】
ＢＤＤ変換部１６０ｆは、始点ノード「Ｄ」、ビット列「１」、終点ノード「Ｃ」をパススタックからポップする。そして、ポップした遷移ビット列を複製し、０および１をそれぞれ加える。また、第１遷移テーブル１５２を参照し、ポップした終点ノード「Ｃ」の論理値「０」および「１」でのそれぞれの遷移先ノード「Ｂ」、「１」を得、（遷移先ノードのレベル）−（終点ノード「Ｃ」のレベル）−１個の「＊」を各遷移ビット列に追加する。
【０１４０】
ＢＤＤ変換部１６０ｆは、遷移先ノード「Ｂ」のレベル「６」から終点ノード「Ｃ」のレベル「５」を差し引くと「１」となるので、０個の「＊」がビット列「１０」の後ろに追加される。そして、始点ノード「Ｄ」、ビット列「１０」、終点ノード「Ｂ」をパススタックにスタックする。
【０１４１】
一方、ＢＤＤ変換部１６０ｆは、遷移先ノード「１」のレベル「８」から終点ノード「Ｃ」のレベル「５」を差し引くと「３」となるので、２個の「＊」がビット列「１１」の後ろに追加される。そして、始点ノード「Ｄ」、ビット列「１１＊＊」、終点ノード「１」をパススタックにスタックする。
【０１４２】
ＢＤＤ変換部１６０ｆは、始点ノード「Ｄ」、ビット列「１１＊＊」、終点ノード「１」をパススタックからポップする。ここで、（終点ノード「１」のレベル）−（カレントレベル「４」）がＮ（４）以上であるため、第２遷移テーブル１５４に、始点ノード「Ｄ」、論理値「１１＊＊」、遷移先（終点ノード）「１」を登録する（図２９のステップＳ４９）。
【０１４３】
ＢＤＤ変換部１６０ｆは、パススタックから始点ノード「Ｄ」、遷移ビット列「１０」、終点ノード「Ｂ」をポップする。そして、ポップした遷移ビット列を複製し、０および１をそれぞれ加える。また、第１遷移テーブル１５２を参照し、ポップした終点ノード「Ｂ」の論理値「０」および「１」でのそれぞれの遷移先ノード「０」、「Ａ」を得、（遷移先ノードのレベル）−（終点ノード「Ｂ」のレベル）−１個の「＊」を各遷移ビット列に追加する。
【０１４４】
ＢＤＤ変換部１６０ｆは、遷移先ノード「０」のレベル「８」から終点ノード「Ｂ」のレベル「６」を差し引くと「２」となるので、１個の「＊」がビット列「１００」の後ろに追加される。そして、始点ノード「Ｄ」、ビット列「１００＊」、終点ノード「０」をパススタックにスタックする。
【０１４５】
ＢＤＤ変換部１６０ｆは、始点ノード「Ｄ」、ビット列「１００＊」、終点ノード「０」をパススタックからポップする。ここで、（終点ノード「０」のレベル）−（カレントレベル「４」）がＮ（４）以上であるため、第２遷移テーブル１５４に、始点ノード「Ｄ」、論理値「１００＊」、遷移先（終点ノード）「０」を登録する。
【０１４６】
一方、ＢＤＤ変換部１６０ｆは、遷移先ノード「Ａ」のレベル「７」から終点ノード「Ｂ」のレベル「６」を差し引くと「１」となるので、０個の「＊」がビット列「１０１」の後ろに追加される。そして、始点ノード「Ｄ」、ビット列「１０１」、終点ノード「Ａ」をパススタックにスタックする。（図２９のステップＳ５０）。
【０１４７】
ＢＤＤ変換部１６０ｆは、パススタックから始点ノード「Ｄ」、遷移ビット列「１０１」、終点ノード「Ａ」をポップし、遷移ビット列を複製し、０および１をそれぞれ加える。また、第１遷移テーブル１５２を参照し、ポップした終点ノード「Ａ」の論理値「０」および「１」でのそれぞれの遷移先ノード「０」、「１」を得る。ＢＤＤ変換部１６０ｆは、遷移先ノード「０」のレベル「８」から終点ノード「Ａ」のレベル「７」を差し引くと「１」となるので、０個の「＊」がビット列「１０１０」の後ろに追加される。そして、始点ノード「Ｄ」、ビット列「１０１０」、終点ノード「０」をパススタックにスタックする。
【０１４８】
ＢＤＤ変換部１６０ｆは、始点ノード「Ｄ」、ビット列「１０１０」、終点ノード「０」をパススタックからポップする。ここで、（終点ノード「０」のレベル）−（カレントレベル「４」）がＮ（４）以上であるため、第２遷移テーブル１５４に、始点ノード「Ｄ」、論理値「１０１０」、遷移先（終点ノード）「０」を登録する。
【０１４９】
一方、ＢＤＤ変換部１６０ｆは、遷移先ノード「１」のレベル「８」から終点ノード「Ａ」のレベル「７」を差し引くと「１」となるので、０個の「＊」がビット列「１０１１」の後ろに追加される。そして、始点ノード「Ｄ」、ビット列「１０１１」、終点ノード「１」をパススタックにスタックする。
【０１５０】
ＢＤＤ変換部１６０ｆは、始点ノード「Ｄ」、ビット列「１０１１」、終点ノード「１」をパススタックからポップする。ここで、（終点ノード「１」のレベル）−（カレントレベル「４」）がＮ（４）以上であるため、第２遷移テーブル１５４に、始点ノード「Ｄ」、論理値「１０１１」、遷移先（終点ノード）「１」を登録する（図２９のステップＳ５１）。
【０１５１】
ＢＤＤ変換部１６０ｆは、パススタックから始点ノード「Ｄ」、遷移ビット列「０＊」、終点ノード「Ｂ」をポップし、遷移ビット列を複製し、０および１をそれぞれ加える。そして、ＢＤＤ変換部１６０ｆは、第１遷移テーブル１５２を参照し、ポップした終点ノード「Ｂ」の論理値「０」および「１」でのそれぞれの遷移先ノード「０」、「Ａ」を得る。ＢＤＤ変換部１６０ｆは、遷移先ノード「０」のレベル「８」から終点ノード「Ｂ」のレベル「６」を差し引くと「２」となるので、１個の「＊」がビット列「０＊０」の後ろに追加される。そして、始点ノード「Ｄ」、ビット列「０＊０＊」、終点ノード「０」をパススタックにスタックする。
【０１５２】
ＢＤＤ変換部１６０ｆは、始点ノード「Ｄ」、ビット列「０＊０＊」、終点ノード「０」をパススタックからポップする。ここで、（終点ノード「０」のレベル）−（カレントレベル「４」）がＮ（４）以上であるため、第２遷移テーブル１５４に、始点ノード「Ｄ」、論理値「０＊０＊」、遷移先（終点ノード）「０」を登録する。
【０１５３】
一方、ＢＤＤ変換部１６０ｆは、遷移先ノード「Ａ」のレベル「７」から終点ノード「Ｂ」のレベル「６」を差し引くと「１」となるので、０個の「＊」がビット列「０＊１」の後ろに追加される。そして、始点ノード「Ｄ」、ビット列「０＊１」、終点ノード「Ａ」をパススタックにスタックする。（図３０のステップＳ５２）。
【０１５４】
ＢＤＤ変換部１６０ｆは、パススタックから始点ノード「Ｄ」、遷移ビット列「０＊１」、終点ノード「Ａ」をポップし、遷移ビット列を複製し、０および１をそれぞれ加える。そして、ＢＤＤ変換部１６０ｆは、第１遷移テーブル１５２を参照し、ポップした終点ノード「Ａ」の論理値「０」および「１」でのそれぞれの遷移先ノード「１」、「０」を得る。ＢＤＤ変換部１６０ｆは、遷移先ノード「０」のレベル「８」から終点ノード「Ａ」のレベル「７」を差し引くと「１」となるので、０個の「＊」がビット列「０＊１０」の後ろに追加される。そして、始点ノード「Ｄ」、ビット列「０＊１０」、終点ノード「０」をパススタックにスタックする。
【０１５５】
ＢＤＤ変換部１６０ｆは、始点ノード「Ｄ」、ビット列「０＊１０」、終点ノード「０」をパススタックからポップする。ここで、（終点ノード「０」のレベル）−（カレントレベル「４」）がＮ（４）以上であるため、第２遷移テーブル１５４に、始点ノード「Ｄ」、論理値「０＊１０」、遷移先（終点ノード）「０」を登録する。
【０１５６】
一方、ＢＤＤ変換部１６０ｆは、遷移先ノード「１」のレベル「８」から終点ノード「Ａ」のレベル「７」を差し引くと「１」となるので、０個の「＊」がビット列「０＊１１」の後ろに追加される。そして、始点ノード「Ｄ」、ビット列「０＊１１」、終点ノード「１」をパススタックにスタックする。
【０１５７】
ＢＤＤ変換部１６０ｆは、始点ノード「Ｄ」、ビット列「０＊１１」、終点ノード「１」をパススタックからポップする。ここで、（終点ノード「１」のレベル）−（カレントレベル「４」）がＮ（４）以上であるため、第２遷移テーブル１５４に、始点ノード「Ｄ」、論理値「０＊１１」、遷移先（終点ノード）「１」を登録する（図３０のステップＳ５３）。
【０１５８】
ＢＤＤ変換部１６０ｆは、パススタックから始点ノード「Ｂ」、遷移ビット列「空欄」、終点ノード「Ｂ」をポップし、遷移ビット列を複製し、０および１をそれぞれ加える。そして、ＢＤＤ変換部１６０ｆは、第１遷移テーブル１５２を参照し、ポップした終点ノード「Ｂ」の論理値「０」および「１」でのそれぞれの遷移先ノード「０」、「Ａ」を得る。遷移先ノード「Ａ」のレベル「７」から終点ノード「Ｂ」のレベル「６」を差し引くと「１」となるので、０個の「＊」がビット列「１」の後ろに追加される。そして、始点ノード「Ｂ」、ビット列「１」、終点ノード「Ａ」をパススタックにスタックする。
【０１５９】
一方、ＢＤＤ変換部１６０ｆは、遷移先ノード「０」のレベル「８」から終点ノード「Ｂ」のレベル「６」を差し引くと「２」となるので、１個の「＊」がビット列「０」の後ろに追加される。そして、始点ノード「Ｂ」、ビット列「０＊」、終点ノード「０」をパススタックにスタックする。
【０１６０】
ＢＤＤ変換部１６０ｆは、始点ノード「Ｂ」、ビット列「０＊」、終点ノード「０」をパススタックからポップする。ここで、（終点ノード「０」のレベル）−（カレントレベル「４」）がＮ（４）以上であるため、第２遷移テーブル１５４に、始点ノード「Ｂ」、論理値「０＊」、遷移先（終点ノード）「０」を登録する（図３０のステップＳ５４）。
【０１６１】
ＢＤＤ変換部１６０ｆは、パススタックから始点ノード「Ｂ」、遷移ビット列「１」、終点ノード「Ａ」をポップし、遷移ビット列を複製し、０および１をそれぞれ加える。そして、ＢＤＤ変換部１６０ｆは、第１遷移テーブル１５２を参照し、ポップした終点ノード「Ａ」の論理値「０」および「１」でのそれぞれの遷移先ノード「０」、「１」を得る。遷移先ノード「０」のレベル「８」から終点ノード「Ａ」のレベル「７」を差し引くと「１」となるので、０個の「＊」がビット列「１０」の後ろに追加される。そして、始点ノード「Ｂ」、ビット列「１０」、終点ノード「０」をパススタックにスタックする。
【０１６２】
ＢＤＤ変換部１６０ｆは、始点ノード「Ｂ」、ビット列「１０」、終点ノード「０」をパススタックからポップする。ここで、（終点ノード「０」のレベル）−（カレントレベル「４」）がＮ（４）以上であるため、第２遷移テーブル１５４に、始点ノード「Ｂ」、論理値「１０」、遷移先（終点ノード）「０」を登録する。
【０１６３】
一方、ＢＤＤ変換部１６０ｆは、遷移先ノード「１」のレベル「８」から終点ノード「Ｂ」のレベル「６」を差し引くと「２」となるので、１個の「＊」がビット列「１１」の後ろに追加される。そして、始点ノード「Ｂ」、ビット列「１１」、終点ノード「１」をパススタックにスタックする。
【０１６４】
ＢＤＤ変換部１６０ｆは、始点ノード「Ｂ」、ビット列「１１」、終点ノード「１」をパススタックからポップする。ここで、（終点ノード「１」のレベル）−（カレントレベル「４」）がＮ（４）以上であるため、第２遷移テーブル１５４に、始点ノード「Ｂ」、論理値「１１」、遷移先（終点ノード）「１」を登録する（図３０のステップＳ５５）。
【０１６５】
このように、ＢＤＤ変換部１６０ｆは、ステップＳ４０〜Ｓ５５の処理を実行することにより、図２６に示す第１ダイアグラムデータ１５０ｇを図２５に示す第２ダイアグラムデータ１５０ｈに変換する。
【０１６６】
図４の説明に戻ると、ダイアグラム実行部１６０ｇは、論理値テーブル１５０ｅと、第２ダイアグラムデータ１５０ｈとを比較して、最終的な論理値が「１（真）」であるか否かを判定する手段である。
【０１６７】
そして、ダイアグラム実行部１６０ｇは、判定結果が「１」となったデータ種別に対応する返答項目を評価結果テーブル１５０ｉから検出し、検出した返答項目を検索結果データ１５０ｊとして記憶部１５０に記憶する。例えば、データ種別「Ｄａｔａ３」の判定結果が「１」となる場合には、返答項目「第三開発部」を検索結果データ１５０ｊとして記憶する。
【０１６８】
ここで、ダイアグラム実行部１６０ｇの処理を具体的に説明する。図３１および図３２は、本実施例１にかかるダイアグラム実行部１６０ｇの処理を説明するための図である。なお、前提条件として、第２ダイアグラムデータ１５０ｈのデータ構造を、図２５に示したデータ構造とする。また、データ種別を、「Ｄａｔａ０」、「Ｄａｔａ１」とし、Ｄａｔａ０の各論理値を「H＝0、G＝1、F＝1、E＝0、D＝0、C＝0、B＝1、A＝1」とし、Ｄａｔａ１の論理値を「H＝1、G＝0、F＝0、E＝1、D＝0、C＝1、B＝1、A＝0」とする。また、入力順序は、第１レベルテーブル１５１（図２６参照）のレベル順に従うため、「Ｈ、Ｇ、Ｆ、Ｅ、Ｄ、Ｃ、Ｂ、Ａ」の順となる。
【０１６９】
まず、ダイアグラム実行部１６０ｇが、「Ｄａｔａ０」の真偽を判定する場合について説明する。ダイアグラム実行部１６０ｇは、初期ノードとなるノード「Ｈ」の入力ビット数が「４」であるため（図２５の第２レベルテーブル１５３を参照）、「Ｄａｔａ０」のビット列「０１１０００１１」のうち、上位４ビット「０１１０」と、第２遷移テーブル１５４とを比較し、遷移先ノード「Ｄ」を得る（図３１のステップＳ６０）。
【０１７０】
そして、ダイアグラム実行部１６０ｇは、遷移先ノード「Ｄ」の入力ビット数が「４」であるため、残りのビット列「００１１」と、第２遷移テーブル１５４とを比較し、遷移先ノード「１（真）」を得る。ダイアグラム実行部１６０ｇは、評価結果テーブル１５０ｉにおいて、データ種別「Ｄａｔａ０」に対応する評価結果に「１（真）」を登録する（図３１のステップＳ６１）。
【０１７１】
次に、ダイアグラム実行部１６０ｇが、「Ｄａｔａ１」の真偽を判定する場合について説明する。ダイアグラム実行部１６０ｇは、初期ノードとなるノード「Ｈ」の入力ビット数が「４」であるため、「Ｄａｔａ１」のビット列「１００１０１１０」のうち、上位４ビット「１００１」と、第２遷移テーブル１５４とを比較し、遷移先ノード「Ｂ」を得る（図３２のステップＳ６２）。
【０１７２】
そして、ダイアグラム実行部１６０ｇは、遷移先ノード「Ｂ」の入力ビット数が「２」であるため、残りのビット列「０１１０」のうち、下位２ビット「１０」と、第２遷移テーブル１５４とを比較し、遷移先ノード「０（偽）」を得る。ダイアグラム実行部１６０ｇは、評価結果テーブル１５０ｉにおいて、データ種別「Ｄａｔａ１」に対応する評価結果に「０（偽）」を登録する（図３２のステップＳ６３）。
【０１７３】
検索結果出力部１６０ｈは、記憶部１５０に記憶された検索結果データ１５０ｊを端末装置６０（図３参照）に送信する手段である。端末装置６０は、検索結果データ１５０ｊを受信した場合に、受信した検索結果データ１５０ｊをモニタ画面に出力する。図３３は、検索結果データを出力したモニタ画面の一例を示す図である。
【０１７４】
次に、本実施例１にかかる検索装置１００の処理手順について説明する。図３３は、本実施例１にかかる検索装置１００の処理手順を示すフローチャートである。同図に示すように、検索装置１００は、検索クエリを受信し（ステップＳ１０１）、検索クエリ分解部１６０ａが、分解検索クエリ１５０ｃを生成する（ステップＳ１０２）。
【０１７５】
続いて、抽出結果テーブル生成部１６０ｂが、分解検索クエリ１５０ｃに対応するデータを抽出して抽出結果テーブル１５０ｄに登録し（ステップＳ１０３）、論理値算出部１６０ｃが論理値を算出して論理値テーブル１５０ｅに登録する（ステップＳ１０４）。
【０１７６】
そして、ＢＤＤ構築部１６０ｅがＢＤＤ入力順序を決定し（ステップＳ１０５）、ＢＤＤ構築処理を実行する（ステップＳ１０６）。ＢＤＤ変換部１６０ｆは、ＢＤＤ変換処理を実行することにより、第１ダイアグラムデータ１５０ｇを第２ダイアグラムデータ１５０ｈに変換する（ステップＳ１０７）。
【０１７７】
ダイアグラム実行部１６０ｇは、論理式判定ダイアグラム実行処理を実行し（ステップＳ１０８）、評価結果データを格納し（ステップＳ１０９）、検索結果出力部１６０ｈが、返答項目出力処理を実行する（ステップＳ１１０）。
【０１７８】
次に、図３４のステップＳ１０６に示したＢＤＤ構築処理について説明する。図３５は、本実施例１にかかるＢＤＤ構築処理の処理手順を示すフローチャートである。図３５に示すように、ＢＤＤ構築部１６０ｅは、現在のレベルを０に設定し（ステップＳ１２１）、逆ポーランド表記の初めの文字を読み出し（ステップＳ１２２）、読み出した文字が論理変数か否かを判定する（ステップＳ１２３）。
【０１７９】
文字が論理変数である場合には（ステップＳ１２４，Ｙｅｓ）、ＢＤＤ構築部１６０ｅは、論理変数対応処理を実行し（ステップＳ１２５）、ステップＳ１３６に移行する。一方、文字が論理変数でない場合には（ステップＳ１２４，Ｎｏ）、文字が「ＮＯＴ」であるか否かを判定する（ステップＳ１２６）。
【０１８０】
文字が「ＮＯＴ」の場合には（ステップＳ１２７，Ｙｅｓ）、ＢＤＤ構築部１６０ｅは、ＮＯＴ対応処理を実行し（ステップＳ１２８）、ステップＳ１３６に移行する。一方、文字が「ＮＯＴ」でない場合には（ステップＳ１２７，Ｎｏ）、文字が「ＡＮＤ」であるか否かを判定する（ステップＳ１２９）。
【０１８１】
文字が「ＡＮＤ」の場合には（ステップＳ１３０，Ｙｅｓ）、ＢＤＤ構築部１６０ｅは、ＡＮＤ対応処理を実行し（ステップＳ１３１）、ステップＳ１３６に移行する。一方、文字が「ＡＮＤ」でない場合には（ステップＳ１３０，Ｎｏ）、文字が「ＯＲ」であるか否かを判定する（ステップＳ１３２）。
【０１８２】
文字が「ＯＲ」ではない場合には（ステップＳ１３３，Ｎｏ）、ＢＤＤ構築部１６０ｅは、エラーを出力部１２０に出力する（ステップＳ１３４）。一方、文字が「ＯＲ」の場合には（ステップＳ１３３，Ｙｅｓ）、ＯＲ対応処理を実行する（ステップＳ１３５）。
【０１８３】
続いて、ＢＤＤ構築部１６０ｅは、次の文字が存在するか否かを判定し（ステップＳ１３６）、次の文字が存在する場合には（ステップＳ１３７，Ｙｅｓ）、次の文字を読み出し（ステップＳ１３８）、ステップＳ１２３に移行する。一方、次の文字が存在しない場合には（ステップＳ１３７，Ｎｏ）、終了処理を実行する（ステップＳ１３９）。
【０１８４】
次に、図３５のステップＳ１２５に示した論理変数対応処理について説明する。図３６は、本実施例１にかかる論理変数対応処理の処理手順を示すフローチャートである。図３６に示すように、ＢＤＤ構築部１６０ｅは、新しいノード変数を定義し（ステップＳ１４１）、定義したノード変数、現在のレベル、読み出した論理変数からなるエントリを第１レベルテーブル１５１に追加する（ステップＳ１４２）。
【０１８５】
そして、ＢＤＤ構築部１６０ｅは、定義したノード変数を先頭スタックにプッシュし（ステップＳ１４３）、定義したノード変数１つからなる集合をＴｒｕｅスタック、Ｆａｌｓｅスタックにプッシュし（ステップＳ１４４）、現在のレベルに１を加算する（ステップＳ１４５）。
【０１８６】
次に、図３５のステップＳ１２８に示したＮＯＴ対応処理について説明する。図３７は、本実施例１にかかるＮＯＴ対応処理の処理手順を示すフローチャートである。図３７に示すように、ＢＤＤ構築部１６０ｅは、新しくユニークなノード変数Ｔ，Ｆを定義し（ステップＳ１５１）、Ｔｒｕｅスタックをポップし、ポップした集合内の各変数において、ノード変数、論理値１、遷移先ノード変数Ｆからなるエントリを第１遷移テーブル１５２に追加する（ステップＳ１５２）。
【０１８７】
そして、ＢＤＤ構築部１６０ｅは、Ｆａｌｓｅスタックをポップし、ポップした集合内の各ノード変数において、ノード変数、論理値０、遷移先ノード変数Ｔからなるエントリを第１遷移テーブル１５２に追加し（ステップＳ１５３）、Ｔｒｕｅスタックにノード変数Ｔからなる集合をプッシュし、Ｆａｌｓｅスタックにノード変数Ｆからなる集合をプッシュする（ステップＳ１５４）。
【０１８８】
次に、図３５のステップＳ１３１に示したＡＮＤ対応処理について説明する。図３８は、本実施例１にかかるＡＮＤ対応処理の処理手順を示すフローチャートである。図３８に示すように、ＢＤＤ構築部１６０ｅは、先頭スタックをポップし、ポップしたノードを変数Ａに設定し（ステップＳ１６１）、Ｔｒｕｅスタックを２回ポップし、１回目にポップした集合をＴｒｕｅスタックにプッシュする（ステップＳ１６２）。
【０１８９】
そして、ＢＤＤ構築部１６０ｅは、２回目にポップした集合内の各ノード変数をノード項目として、論理値１、遷移先ノード変数Ａと合わせたエントリを第１遷移テーブル１５２に追加し（ステップＳ１６３）、Ｆａｌｅｓスタックを２回ポップし、１回目および２回目にポップした集合内のノード変数全てからなる集合をＦａｌｅｓスタックにプッシュする（ステップＳ１６４）。
【０１９０】
次に、図３５のステップＳ１３５に示したＯＲ対応処理について説明する。図３９は、本実施例１にかかるＯＲ対応処理の処理手順を示すフローチャートである。図３９に示すように、ＢＤＤ構築部１６０ｅは、先頭スタックをポップし、ポップしたノードを変数Ａに設定し（ステップＳ１７１）、Ｆａｌｓｅスタックを２回ポップし、１回目にポップした集合をＦａｌｓｅスタックにプッシュする（ステップＳ１７２）。
【０１９１】
そして、ＢＤＤ構築部１６０ｅは、２回目にポップした集合内の各ノード変数をノード項目として、論理値０、遷移先ノード変数Ａと合わせたエントリを第１遷移テーブル１５２に追加し（ステップＳ１７３）、Ｔｒｕｅスタックを２回ポップし、１回目および２回目にポップした集合内のノード変数全てからなる集合をＴｒｕｅスタックにプッシュする（ステップＳ１７４）。
【０１９２】
次に、図３５のステップＳ１３９に示した終了処理について説明する。図４０は、本実施例１にかかる終了処理の処理手順を示すフローチャートである。図４０に示すように、ＢＤＤ構築部１６０ｅは、新しいノード変数０，１を定義し、定義したノード変数、現在のレベル、論理変数ＮＵＬＬからなるエントリを第１レベルテーブル１５１に追加し（ステップＳ１８１）、Ｔｒｕｅスタックをポップし、ポップした集合内の各ノード変数において論理値１と遷移先ノード変数１とを合わせたエントリを第１遷移テーブル１５２に追加する（ステップＳ１８２）。
【０１９３】
そして、ＢＤＤ構築部１６０ｅは、Ｆａｌｅｓスタックをポップし、ポップした集合内の各ノード変数において、論理値０と、遷移先ノード変数０とを合わせたエントリを第１遷移テーブル１５２に追加し（ステップＳ１８３）、第１遷移テーブル１５２において、遷移先項目がノード変数Ｔ，Ｆとして生成されたノード変数である全てのエントリに対し、そのノード変数をノード項目として、エントリを削除し、削除したエントリの遷移先ノード変数を該エントリの遷移先項目として上書きする（ステップＳ１８４）。
【０１９４】
次に、図３４のステップＳ１０７に示したＢＤＤ変換処理について説明する。図４１および図４２は、本実施例１にかかるＢＤＤ変換処理の処理手順を示すフローチャートである。図４１に示すように、ＢＤＤ変換部１６０ｆは、カレントレベルを０に設定し（ステップＳ２０１）、ＢＤＤの初期状態であるノードを始点ノード集合に追加する（ステップＳ２０２）。
【０１９５】
そして、ＢＤＤ変換部１６０ｆは、初期状態となる始点ノードを、レベル０と入力ビット数Ｎ（例えば、４）とともに第２レベルテーブル１５３に登録し（ステップＳ２０３）、始点ノード集合の各始点ノードに対して、始点ノードとして始点ノードを、遷移ビット列として空列を、終点ノードとして始点ノードをパススタックにスタックし（ステップＳ２０４）、始点ノード集合を空に設定する（ステップＳ２０５）。
【０１９６】
続いて、ＢＤＤ変換部１６０ｆは、パススタックから始点ノード、遷移ビット列、終点ノードをポップし（ステップＳ２０６）、終点ノードのレベルからカレントレベルを減算し、減算した値がＮ以上であるか否かを判定する（ステップＳ２０７）。
【０１９７】
減算した値がＮ未満である場合には（ステップＳ２０８，Ｎｏ）、ＢＤＤ変換部１６０ｆは、ポップした遷移ビット列を複製し、０および１をそれぞれ加え、第１遷移テーブル１５２を参照し、ポップしたノードの論理値０および１でのそれぞれの遷移先のノードを取得し、（遷移先ノードのレベル）−（終点ノードのレベル）−１分の「＊」を遷移ビット列にそれぞれ更に追加し、取得した各遷移先ノードをそれぞれの終点ノードとして、それぞれパススタックにスタックし（ステップＳ２０９）、ステップＳ２０６に移行する。
【０１９８】
一方、減算した値がＮ以上である場合には（ステップＳ２０８，Ｙｅｓ）、終点ノードが第２レベルテーブル１５３に存在するか否かを判定し（ステップＳ２１０）、存在しない場合には（ステップＳ２１１，Ｎｏ）、第２レベルテーブル１５３にノードを終点ノードとし、（終点ノードのレベル）÷Ｎをレベルとし、Ｎ−（割り算の余り）を入力ビット数とするエントリを第２遷移テーブル１５４に登録し（ステップＳ２１２）、ステップＳ２１３に移行する。
【０１９９】
一方、終点ノードが第２レベルテーブル１５３に存在する場合には（ステップＳ２１１，Ｙｅｓ）、第２遷移テーブル１５４に、ノードを始点ノードとし、論理値を遷移ビット列の先頭Ｎビットとし、遷移先を終点ノードとするエントリを登録する（ステップＳ２１３）。
【０２００】
ＢＤＤ変換部１６０ｆは、終点ノードが最終レベルではない場合に、終点ノードを始点ノードに追加し（ステップＳ２１４）、パススタックが空か否かを判定し（ステップＳ２１５）、パススタックが空ではない場合には（ステップＳ２１６，Ｎｏ）、ステップＳ２０６に移行する。
【０２０１】
一方、パススタックが空の場合には（ステップＳ２１６，Ｙｅｓ）、カレントレベルにＮを加算し（ステップＳ２１７）、カレントレベルが最終レベル以上か否かを判定し（ステップＳ２１８）、最終レベル未満の場合には（ステップＳ２１９，Ｎｏ）、ステップＳ２０４に移行する。一方、カレントレベルが最終レベル以上の場合には（ステップＳ２１９）、ＢＤＤ変換処理を終了する。
【０２０２】
次に、図３４のステップＳ１０８に示した論理式判定ダイアグラム実行処理について説明する。図４３は、本実施例１にかかる論理式判定ダイアグラム実行処理の処理手順を示すフローチャートである。図４３に示すように、抽出結果テーブル生成部１６０ｂが抽出結果テーブル１５０ｄを作成し（ステップＳ２２１）、論理値算出部１６０ｃが論理値テーブル１５０ｅを作成する（ステップＳ２２２）。
【０２０３】
そして、ダイアグラム実行部１６０ｇは、初期ノードを現在のノードに設定し（ステップＳ２２３）、第２レベルテーブル１５３を参照し、現在のノードのレベルを取得し（ステップＳ２２４）、レベルが最終レベルか否かを判定する（ステップＳ２２５）。
【０２０４】
現在のレベルが最終レベルではない場合には（ステップＳ２２６，Ｎｏ）、論理値テーブル１５０ｅを参照し、現在のノードに対応する入力ビット列を取得する（ステップＳ２２７）。また、ダイアグラム実行部１６０ｇは、第２遷移テーブル１５４を参照し、遷移先の情報を取得し（ステップＳ２２８）、現在のノードを遷移先のノードに設定し（ステップＳ２２９）、ステップＳ２２４に移行する。
【０２０５】
一方、現在のレベルが最終レベルの場合には（ステップＳ２２６，Ｙｅｓ）、ダイアグラム実行部１６０ｇは、ノードに割り当てられている真偽値を評価結果テーブル１５０ｉに登録する（ステップＳ２３０）。そして、ダイアグラム実行部１６０ｇは、全ての文書データを選択したか否かを判定し（ステップＳ２３１）、全ての文書データを選択していない場合には（ステップＳ２３２，Ｎｏ）、ステップＳ２２３に移行する。全ての文書データを選択した場合には（ステップＳ２３２，Ｙｅｓ）、論理式判定ダイアグラム実行処理を終了する。
【０２０６】
次に、図３４のステップＳ１１０に示した返答項目出力処理について説明する。図４４は、本実施例１にかかる返答項目出力処理の処理手順を示すフローチャートである。図４４に示すように、検索結果出力部１６０ｈは、評価結果テーブル１５０ｉを参照し（ステップＳ２４１）、評価結果が真（１）であるか否かを判定する（ステップＳ２４２）。
【０２０７】
評価結果が偽の場合には（ステップＳ２４３，Ｎｏ）、ステップＳ２４６に移行する。一方、評価結果が真の場合には（ステップＳ２４３，Ｙｅｓ）、抽出結果テーブル１５０ｄから、対応する返答項目を抽出し（ステップＳ２４４）、返答項目を出力する（ステップＳ２４５）。
【０２０８】
そして、検索結果出力部１６０ｈは、次の候補が存在するか否かを判定し（ステップＳ２４６）、次の候補が存在する場合には（ステップＳ２４７，Ｙｅｓ）、ステップＳ２４１に移行する。一方、次に候補が存在しない場合には（ステップＳ２４７，Ｎｏ）、返答項目出力処理を終了する。
【０２０９】
上述してきたように、本実施例１にかかる検索装置１００は、検索クエリを受け付けた場合に、ＢＤＤ構築部１６０ｅが、ＢＤＤ法に基づいて、第１ダイアグラムデータ１５０ｇを作成する。そして、ＢＤＤ変換部１６０ｆが、第１ダイアグラムデータ１５０ｇに基づいて、起点となるノードから所定複数レベル先の到達ノードまで到達する各レベルの変数の真偽条件をビット列表記した第２ダイアグラムデータ１５０ｈを作成し、ダイアグラム実行部１６０ｇが、第２ダイアグラムデータ１５０ｈと、論理値テーブル１５０ｅとを比較することにより、検索クエリを評価するので、多ビット毎にノードの遷移先を判定可能とすることができ、複雑な検索クエリを評価する場合にでも、評価に要する処理時間を削減することができる。
【実施例２】
【０２１０】
次に、本実施例２にかかる検索装置の概要及び特徴について説明する。図４５−１は、本実施例２にかかる検索装置の概要および特徴を説明するための図である。本実施例２にかかる検索装置は、上述した実施例１の検索装置と同様にして、第１の２分木を変換して、多ビット（本実施例２ではビット列の桁を固定）毎にノードの遷移先を判定できる第２の２分木を生成する。
【０２１１】
そして、本実施例２にかかる検索装置は、更に、遷移先を判定するビット列にダミー値「＊」を挿入することで、最終的な真偽を判定するまでに、比較対象となるビット列の桁を統一する。また、本実施例２にかかる検索装置は、各ノード間にダミーノードを挿入することで、初期ノードから最終レベルのノードに至るまでの遷移回数を固定する。
【０２１２】
ここで、実施例１に示したように、第２の２分木（図２の下段参照）を作成すると、最終的な真偽を判定するまでに、比較対象となるビット列の桁が変動するため、検索装置は、遷移先のノード毎に比較するビット列の桁数を判定する必要があり、必ずしも効率的に真偽判定を実施することができない。
【０２１３】
しかしながら、本実施例２にかかる検索装置は、ダミー値「＊」を挿入することで、最終的な真偽を判定するまでのビット列の桁を固定することができ、遷移先のノード毎に比較するビット列の桁を判定する必要を無くし、効率的に真偽判定を実施することを可能にする。また、各ノード間にダミーノードを挿入することで、初期ノードから最終レベルのノードに至るまでの遷移回数を固定でき、真偽判定にかかる制御を容易にする。
【０２１４】
図４５−１の第２の２分木と、図２の第２の２分木とを比較すると、図４５−１では、ノード「Ｈ」と、ノード「１」との間にダミーノード「１’」を挿入すると共に、ノード「Ｂ」からノード「０」に遷移するビット列の上位に「＊＊」を挿入することで、最終的な真偽を判定するまでに利用するビット列の桁を「４」に統一し、遷移回数を「２」に統一している。一方、図２では、最終的な真偽を判定するまでに利用する比較対象となるビット列の桁が「４」または「２」となり、遷移回数が「１」または「２」となるので、図２の第２の２分木のほうが、図４５の第２の２分木よりも、真偽判定にかかる処理が複雑になってしまう。
【０２１５】
次に、ビット列の桁数を所定桁数に統一する場合の検索装置の処理の概要を説明する。図４５−２は、ビット列の桁数を所定桁数に統一する場合の処理の概要を説明するための図である。ここでは、図４５−２を用いて、３つのケースについて説明する。
【０２１６】
まず、第１のケースとして、第１の到達変数のレベルが所定レベルを超えており、第１の到達変数を起点変数とした次の第２到達変数に遷移するビット列を作成する場合にについて説明する。ここでは、説明の便宜上、第１の到達変数をノード「Ｂ（レベル６）」、所定レベル４（ビット列を４桁に統一する場合）、第２の到達変数をノード「１（レベル８）」とする。
【０２１７】
検索装置は、第１の到達変数のレベル「６」から所定レベル「４」を差し引いた数「２」のダミー値「＊＊」をビット列の先頭ビットに挿入する。すなわち、第１の到達変数から第２の到達変数まで遷移するビット列「１１」の先頭ビットにダミービット「＊＊」を挿入することで、ビット列「＊＊１１」を作成し、ビット列の桁を４に統一する。
【０２１８】
続いて、第２のケースとして、起点変数と到達変数との間に複数の中間変数が含まれており、起点変数と中間変数のレベル差、および隣接する中間変数のレベル差が１で、到達変数のレベルが所定レベルを超えている場合に、起点変数から到達変数まで遷移するビット列を生成する場合について説明する。
【０２１９】
ここでは、説明の便宜上、起点変数をノード「Ｈ（レベル０）」、中間変数をノード「Ｇ（レベル１）」、「Ｆ（レベル２）」、到達変数「Ｂ（レベル６）」、所定レベル４（ビット列を４桁に統一する場合）とする。
【０２２０】
検索装置は、所定レベル「４」から到達変数（ノードＢ）に遷移する一つ前の中間変数（ノードＦ）のレベル２を差し引き、差し引いた値から更に１を差し引いた数「１」のダミー値「＊」を起点変数から到達変数まで遷移するビット列「１００」の後ろに挿入することで、ビット列「１００＊」を作成し、ビット列の桁を４に統一する。
【０２２１】
続いて、第３のケースとして、起点変数と到達変数との間に複数の中間変数が含まれており、遷移先の変数のレベルと遷移元の変数のレベルとのレベル差が２以上で、到達変数のレベルが所定レベルを超えている場合に、起点変数から到達変数まで遷移するビット列を生成する場合について説明する。
【０２２２】
ここでは、説明の便宜上、起点変数をノード「Ｈ（レベル０）」、中間変数をノード「Ｆ（レベル２）」、到達変数をノード「Ｂ（レベル６）」、所定レベル４（ビット列を４桁に統一する場合）とする。
【０２２３】
検索装置は、遷移先の変数のレベルから遷移元の変数のレベルを差し引き、差し引いた値から更に１を差し引いた数のダミー値を遷移元の変数から遷移先の変数まで遷移するビット列の後ろに挿入する。具体的には、遷移先の変数（ノードＦ）のレベル２から遷移元の変数（ノードＨ）のレベル０を差し引き、差し引いた値から更に１を差し引いた数「１」を遷移元の変数（ノードＨ）から遷移先の変数（ノードＦ）に遷移するビット列「０」に挿入してビット列「０＊」を作成する。
【０２２４】
なお、起点変数（ノードＨ）から到達変数（ノードＢ）に遷移するまでのビット列（中間変数をノードＦとする）は、起点変数（ノードＨ）から中間変数（ノードＦ）に遷移するビット列「０＊」に、中間変数（ノードＦ）から到達変数（ノードＢ）に遷移するビット「０」を付加したビット列「０＊０」となる。そして、検索装置は、ビット列の桁を「４」に統一するために、ビット列「０＊０」の後ろに「＊」を付与して、起点変数（ノードＨ）から到達変数（ノードＢ）に遷移するビット列「０＊０＊」を作成することで、ビット列の桁を４に統一する。
【０２２５】
次に、本実施例２にかかる検索装置の構成について説明する。図４６は、本実施例２にかかる検索装置２００の構成を示す機能ブロック図である。なお、本実施例２にかかる検索装置２００を備えた検索システムの構成は、実施例１の検索システムの構成と同様である。
【０２２６】
図４６に示すように、この検索装置２００は、入力部２１０と、出力部２２０と、通信制御ＩＦ部２３０と、入出力制御ＩＦ部２４０と、記憶部２５０と、制御部２６０とを有する。
【０２２７】
入力部２１０は、各種の情報を入力する入力手段であり、例えば、キーボードやマウス、マイクなどによって構成される。なお、後述するモニタ（出力部２２０）も、マウスと協働してポインティングデバイス機能を実現する。
【０２２８】
出力部２２０は、各種の情報を出力する手段であり、モニタ（若しくはディスプレイ、タッチパネル）やスピーカなどによって構成される。通信制御ＩＦ部２３０は、主に端末装置６０との間における通信を制御する手段である。なお、入出力制御ＩＦ部２４０は、入力部２１０、出力部２２０、通信制御ＩＦ部２３０、記憶部２５０、制御部２６０によるデータの入出力を制御する手段である。
【０２２９】
記憶部２５０は、制御部２６０による各種処理に必要なデータおよびプログラムを記憶する記憶手段である。特に本発明に密接に関連するものとして、記憶部２５０は、ＸＭＬデータ２５０ａと、検索クエリ２５０ｂと、分解検索クエリ２５０ｃと、抽出結果テーブル２５０ｄと、論理値テーブル２５０ｅと、変換論理式データ２５０ｆと、第１ダイアグラムデータ２５０ｇと、第２ダイアグラムデータ２５０ｈと、評価結果テーブル２５０ｉと、検索結果データ２５０ｊとを有する。
【０２３０】
ここで、ＸＭＬデータ２５０ａは、要素識別子「＜」、「＜／」等により要素が区切られた階層構造を有する文書データである。このＸＭＬデータ２５０ａのデータ構造は、図５に示したＸＭＬデータ１５０ａのデータ構造と同様である。
【０２３１】
検索クエリ２５０ｂは、ＸＭＬデータ２５０ａから照合位置のデータを取り出すためのデータである。この検索クエリ２５０ｂのデータ構造は、図６に示した検索クエリ１５０ｂのデータ構造と同様である。
【０２３２】
分解検索クエリ２５０ｃは、検索クエリ２５０ｂが検索クエリ分解部２６０ａ（後述する）によって分解された結果得られるデータである。この分解検索クエリ２５０ｃのデータ構造は、図７に示した分解検索クエリ１５０ｃのデータ構造と同様である。
【０２３３】
抽出結果テーブル２５０ｄは、評価式（図７のｑ１，ｑ２参照）の評価対象となる情報と、検索クエリ２５０ｂの評価結果が真であった場合に、端末装置６０に返答する項目を管理するテーブルである。この抽出結果テーブル２５０ｄのデータ構造は、図８に示した抽出結果テーブル１５０ｄのデータ構造と同様である。
【０２３４】
論理値テーブル２５０ｅは、各評価式の評価結果を管理するテーブルである。この論理値テーブル２５０ｅのデータ構造は、図９に示した論理値テーブル１５０ｅのデータ構造と同様である。
【０２３５】
変換論理式データ２５０ｆは、論理式（図７参照）が、論理式変換部２６０ｄ（後述する）によって逆ポーランド表記に変換されたデータである。第１ダイアグラムデータ２５０ｇは、ＢＤＤ構築部２６０ｅ（後述する）によって作成されるデータである。この第１ダイアグラムデータ２５０ｇのデータ構造は、図１０に示した第１ダイアグラムデータ１５０ｇと同様である。なお、本実施例２において、第１ダイアグラムデータ２５０ｇは、第１レベルテーブル２５１および第１遷移テーブル２５２を有する。
【０２３６】
第２ダイアグラムデータ２５０ｈは、第１ダイアグラムデータ２５０ｇが、ＢＤＤ変換部２６０ｆ（後述する）によって変換されたデータである。この第２ダイアグラムデータ２５０ｈは、第２遷移テーブル２５３を有しており、第２遷移テーブル２５３によって定義される２分木は、多ビット毎に評価を行うことができる。
【０２３７】
評価結果テーブル２５０ｉは、各データ種別（例えば、Ｄａｔａ０〜２）に対する評価結果を管理するテーブルである。この評価結果テーブル２５０ｉのデータ構造は、図１１に示した評価結果テーブル１５０ｉのデータ構造と同様である。
【０２３８】
検索結果データ２５０ｊは、ＸＭＬデータ２５０ａに対する検索クエリ２５０ｂの検索結果を記憶するデータである。この検索結果データ２５０ｊのデータ構造は、図１２に示した検索結果データ１５０ｊのデータ構造と同様である。
【０２３９】
制御部２６０は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する制御手段である。特に本発明に密接に関連するものとしては、図４６に示すように、検索クエリ分解部２６０ａと、抽出結果テーブル生成部２６０ｂと、論理値算出部２６０ｃと、論理式変換部２６０ｄと、ＢＤＤ構築部２６０ｅと、ＢＤＤ変換部２６０ｆと、ダイアグラム実行部２６０ｇと、検索結果出力部２６０ｈとを有する。
【０２４０】
このうち、検索クエリ分解部２６０ａは、端末装置６０から検索クエリを受信した場合に、受信した検索クエリを検索クエリ２５０ｂとして記憶部２５０に記憶すると共に、周知の手法を用いて、検索クエリ２５０ｂから分解検索クエリ２５０ｃを生成する手段である。
【０２４１】
抽出結果テーブル生成部２５０ｂは、分解検索クエリ２５０ｃに含まれる評価式に基づいて、第１〜ｎ（ｎ＞１）論理変数および返答項目をＸＭＬデータ２５０ａから抽出し、抽出結果テーブル２５０ｄを生成する手段である。
【０２４２】
論理値算出部２６０ｃは、分解検索クエリ２５０ｃの評価式と、抽出結果テーブル２５０ｄとを比較することにより、評価式の論理値を算出する手段である。論理値算出部２６０ｃは、算出結果を論理値テーブル２５０ｅに登録する。
【０２４３】
論理式変換部２６０ｄは、逆ポーランド表記を用いることにより、検索クエリの論理式（例えば、Q=q1  and  q2）を変換する手段である。論理式変換部２６０ｄは、論理式「ｑ１＆ｑ２」を、逆ポーランド表記を用いて変換すると、「ｑ１ｑ２＆」となる。論理式変換部２６０ｄは、変換した論理式のデータを、変換論理式データ２５０ｆとして記憶部２５０に記憶する。
【０２４４】
ＢＤＤ構築部２６０ｅは、変換論理式データ２５０ｆに基づいて、第１ダイアグラムデータ２５０ｇを生成する手段である。ＢＤＤ構築部２６０ｅは、変換論理式データ２５０ｆ（逆ポーランド表記の論理式）の文字を先頭から順次読み出し、読み出した文字（論理演算子、論理変数）に応じて、第１レベルテーブル２５１、第１遷移テーブル２５２に各種の情報を登録する。なお、ＢＤＤ構築部２６０ｅの具体的な処理の内容は、実施例１に示したＢＤＤ構築部２６０ｅと同様であるため説明を省略する。
【０２４５】
ＢＤＤ変換部２６０ｆは、第１の２分木を第２の２分木（図４５参照）となるように、第１ダイアグラムデータ２５０ｇを変換して第２ダイアグラムデータ２５０ｈを生成する手段である。図４７は、本実施例２にかかる第２ダイアグラムデータ２５０ｈのデータ構造の一例を示す図である。ただし、図２６に示す第１ダイアグラムデータ２５０ｇを変換したものが、図４７に示す第２ダイアグラムデータ２５０ｈとなる。
【０２４６】
図４７に示すように、この第２ダイアグラムデータ２５０ｈは、第２遷移テーブル２５３を有する。第２遷移テーブル２５３は、ノードと、各ノードに入力される論理値と、論理値に対応するノードの遷移先を管理するテーブルである。
【０２４７】
例えば、第２遷移テーブル２５３の１段目では、ノード「Ｈ」に入力されるビット列が「１１＊１（１１０１あるいは１１１１）」の場合に、ノード「１’」に遷移する旨の情報が登録されている。なお、図４７に示す第２遷移テーブル２５３によって、図４５に示す２分木（第２の２分木）が定義される。
【０２４８】
続いて、具体例を用いて、ＢＤＤ変換部２６０ｆの処理について説明する。図４８〜図５０は、本実施例２にかかるＢＤＤ変換部２６０ｆの処理を説明するための図である。図４８〜図５０で説明する処理を実行することにより、図２６に示した第１ダイアグラムデータから、図４７に示した第２ダイアグラムデータ２５０ｈが作成され、多ビット毎に遷移先のノードを判定することが可能となる。また、ビット列および遷移回数が統一されるので、データ検索時に検索装置２００にかかる負担が軽減される。まず、図４８に示すように、ＢＤＤ変換部２６０ｆは、カレントレベルを「０」に設定し、ＢＤＤの初期状態であるノード「Ｈ」を始点ノード集合に追加する。
【０２４９】
そして、ＢＤＤ変換部２６０ｆは、始点ノード集合「Ｈ」の始点ノードに対して、始点ノードとして始点ノード「Ｈ」を、遷移ビット列として「空欄」を、終点ノードとして始点ノード「Ｈ」をパススタックにスタックし、始点ノード集合を空にする。ここで、パススタックは、ＢＤＤ変換部２６０ｆが保持しており、始点ノード、遷移ビット列、終点ノードを対応付けて記憶している。
【０２５０】
ＢＤＤ変換部２６０ｆは、パススタックから始点ノード「Ｈ」、遷移ビット列「空欄」、終点ノード「Ｈ」をポップし、遷移ビット列を複製し、０および１をそれぞれ加える。そして、ＢＤＤ変換部２６０ｆは、第１遷移テーブル２５２を参照し、ポップした終点ノード「Ｈ」の論理値「０」および「１」でのそれぞれの遷移先ノード「Ｇ」、「Ｆ」を得、（遷移先ノードのレベル）−（終点ノード「Ｈ」のレベル）−１個の「＊」を各遷移ビット列に追加する。遷移先ノード「Ｆ」のレベル「２」から終点ノード「Ｈ」のレベル「０」を差し引くと「２」となるので、１個の「＊」がビット列「０」の後ろに追加される。そして、始点ノード「Ｈ」、ビット列「０＊」、終点ノード「Ｆ」をパススタックにスタックする。
【０２５１】
一方、ＢＤＤ変換部２６０ｆは、遷移先ノード「Ｇ」のレベル「１」から終点ノード「Ｈ」のレベル「０」を差し引くと「１」となるので、０個の「＊」がビット列「１」の後ろに追加される。そして、始点ノード「Ｈ」、ビット列「１」、終点ノード「Ｇ」をパススタックにスタックする（図２７のステップＳ４０のパススタックと同様）。
【０２５２】
ＢＤＤ変換部２６０ｆは、パススタックから始点ノード「Ｈ」、遷移ビット列「１」、終点ノード「Ｇ」をポップし、遷移ビット列を複製し、０および１をそれぞれ加える。また、第１遷移テーブル２５２を参照し、ポップした終点ノード「Ｇ」の遷移先ノードの論理値「０」および「１」でのそれぞれの遷移先ノード「Ｅ」、「Ｆ」を得、（遷移先ノードのレベル）−（終点ノード「Ｈ」のレベル）−１個の「＊」を各遷移ビット列に追加する。遷移先ノード「Ｆ」のレベル「２」から終点ノード「Ｇ」のレベル「１」を差し引くと「１」となるので、０個の「＊」がビット列「１０」の後ろに追加される。そして、始点ノード「Ｈ」、ビット列「１０」、終点ノード「Ｆ」をパススタックにスタックする。
【０２５３】
一方、ＢＤＤ変換部２６０ｆは、遷移先ノード「Ｅ」のレベル「３」から終点ノード「Ｇ」のレベル「１」を差し引くと「２」となるので、１個の「＊」がビット列「１１」の後ろに追加される。そして、始点ノード「Ｈ」、ビット列「１１＊」、終点ノード「Ｅ」をパススタックにスタックする（図２７のステップＳ４１のパススタックと同様）。
【０２５４】
ＢＤＤ変換部２６０ｆは、パススタックから始点ノード「Ｈ」、遷移ビット列「１１＊」、終点ノード「Ｅ」をポップし、遷移ビット列を複製し、０および１をそれぞれ加える。また、第１遷移テーブル２５２を参照し、ポップした終点ノード「Ｅ」の遷移先ノードの論理値「０」および「１」でのそれぞれの遷移先ノード「１」、「Ｄ」を得、（遷移先ノードのレベル）−（終点ノード「Ｈ」のレベル）−１個の「＊」を各遷移ビット列に追加する。遷移先ノード「Ｄ」のレベル「４」から終点ノード「Ｅ」のレベル「３」を差し引くと「１」となるので、０個の「＊」がビット列「１１＊０」の後ろに追加される。そして、始点ノード「Ｈ」、ビット列「１１＊０」、終点ノード「Ｄ」をパススタックにスタックする。
【０２５５】
一方、ＢＤＤ変換部２６０ｆは、遷移先ノード「１」のレベル「８」から終点ノード「Ｅ」のレベル「３」を差し引くと「５」となるので、４個の「＊」がビット列「１１＊１」の後ろに追加される。そして、始点ノード「Ｈ」、ビット列「１１＊１」（先頭から５ビット目以降のビット列はカットされる）、終点ノード「１」をパススタックにスタックする（図２７のステップＳ４３のパススタックと同様）。
【０２５６】
ＢＤＤ変換部２６０ｆは、パススタックから始点ノード「Ｈ」、遷移ビット列「１１＊１」、終点ノード「１」をポップする。ここで、（終点ノード「１」のレベル）−（カレントレベル「０」）がＮ（４）以上であるため、ＢＤＤ変換部２６０ｆは、第２遷移テーブル２５３に、始点ノード「Ｈ」、論理値「１１＊１」、遷移先（終点ノード）「１」を登録すると共に、終点ノード「１」を始点ノード集合に追加する。
【０２５７】
ＢＤＤ変換部２６０ｆは、パススタックから始点ノード「Ｈ」、遷移ビット列「１１＊０」、終点ノード「Ｄ」をポップする。ここで、（終点ノード「Ｄ」のレベル）−（カレントレベル「０」）がＮ（４）以上であるため、ＢＤＤ変換部２６０ｆは、第２遷移テーブル２５３に、始点ノード「Ｈ」、論理値「１１＊０」、遷移先（終点ノード）「Ｄ」を登録すると共に、終点ノード「Ｄ」を始点ノード集合に登録する（図４８のステップＳ７０）。
【０２５８】
ＢＤＤ変換部２６０ｆは、パススタックから始点ノード「Ｈ」、遷移ビット列「１０」、終点ノード「Ｆ」をポップし、遷移ビット列を複製し、０および１をそれぞれ加える。また、第１遷移テーブル２５２を参照し、ポップした終点ノード「Ｆ」の遷移先ノードの論理値「０」および「１」でのそれぞれの遷移先ノード「Ｅ」、「Ｂ」を得、（遷移先ノードのレベル）−（終点ノード「Ｆ」のレベル）−１個の「＊」を各遷移ビット列に追加する。遷移先ノード「Ｅ」のレベル「３」から終点ノード「Ｆ」のレベル「２」を差し引くと「１」となるので、０個の「＊」がビット列「１０１」の後ろに追加される。そして、始点ノード「Ｈ」、ビット列「１０１」、終点ノード「Ｅ」をパススタックにスタックする。
【０２５９】
続いて、ＢＤＤ変換部２６０ｆは、始点ノード「Ｈ」、ビット列「１０１」、終点ノード「Ｅ」をポップし、遷移ビット列を複製し、０および１をそれぞれ加える。また、第１遷移テーブル２５２を参照し、ポップした終点ノード「Ｅ」の遷移先ノードの論理値「０」および「１」でのそれぞれの遷移先ノード「Ｄ」、「１」を得、（遷移先ノードのレベル）−（終点ノード「Ｅ」のレベル）−１個の「＊」を各遷移ビット列に追加する。
【０２６０】
ＢＤＤ変換部２６０ｆは、遷移先ノード「Ｄ」のレベル「４」から終点ノード「Ｅ」のレベル「３」を差し引くと「１」となるので、０個の「＊」がビット列「１０１０」の後ろに追加される。そして、始点ノード「Ｈ」、ビット列「１０１０」、終点ノード「Ｄ」をパススタックにスタックする。
【０２６１】
ＢＤＤ変換部２６０ｆは、始点ノード「Ｈ」、ビット列「１０１０」、終点ノード「Ｄ」をパススタックからポップする。ここで、（終点ノード「Ｄ」のレベル）−（カレントレベル「０」）がＮ（４）以上であるため、第２遷移テーブル２５３に、始点ノード「Ｈ」、論理値「１０１０」、遷移先（終点ノード）「Ｄ」を登録する。
【０２６２】
ところで、ＢＤＤ変換部２６０ｆは、遷移先ノード「１」のレベル「８」から終点ノード「Ｅ」のレベル「３」を差し引くと「５」となるので、４個の「＊」がビット列「１０１１」の後ろに追加される。そして、始点ノード「Ｈ」、ビット列「１０１１」（先頭から５ビット目以降のビット列はカットされる）、終点ノード「１」をパススタックにスタックする。
【０２６３】
ＢＤＤ変換部２６０ｆは、パススタックから始点ノード「Ｈ」、遷移ビット列「１０１１」、終点ノード「１」をポップする。ここで、（終点ノード「１」のレベル）−（カレントレベル「０」）がＮ（４）以上であるため、ＢＤＤ変換部２６０ｆは、第２遷移テーブル２５３に、始点ノード「Ｈ」、論理値「１０１１」、遷移先（終点ノード）「１」を登録する。
【０２６４】
また、ＢＤＤ変換部２６０ｆは、遷移先ノード「Ｂ」のレベル「６」から終点ノード「Ｆ」のレベル「２」を差し引くと「４」となるので、３個の「＊」がビット列「１００」の後ろに追加される。そして、始点ノード「Ｈ」、ビット列「１００＊」（先頭から５ビット目以降のビット列はカットされる）、終点ノード「Ｂ」をパススタックにスタックする（図４８のステップＳ７１）。
【０２６５】
ＢＤＤ変換部２６０ｆは、パススタックから始点ノード「Ｈ」、遷移ビット列「１００＊」、終点ノード「Ｂ」をポップする。ここで、（終点ノード「Ｂ」のレベル）−（カレントレベル「０」）がＮ（４）以上であるため、ＢＤＤ変換部２６０ｆは、第２遷移テーブル２５３に、始点ノード「Ｈ」、論理値「１００＊」、遷移先（終点ノード）「Ｂ」を登録する。また、ＢＤＤ変換部２６０ｆは、終点ノード「Ｂ」を始点ノード集合に登録する（図４８のステップＳ７２）。
【０２６６】
ＢＤＤ変換部２６０ｆは、パススタックから始点ノード「Ｈ」、遷移ビット列「０＊」、終点ノード「Ｆ」をポップし、遷移ビット列を複製し、０および１をそれぞれ加える。また、第１遷移テーブル２５２を参照し、ポップした終点ノード「Ｆ」の遷移先ノードの論理値「０」および「１」でのそれぞれの遷移先ノード「Ｅ」、「Ｂ」を得、（遷移先ノードのレベル）−（終点ノード「Ｆ」のレベル）−１個の「＊」を各遷移ビット列に追加する。遷移先ノード「Ｂ」のレベル「６」から終点ノード「Ｆ」のレベル「２」を差し引くと「４」となるので、３個の「＊」がビット列「０＊０」の後ろに追加される。そして、始点ノード「Ｈ」、ビット列「０＊０＊」（先頭から５ビット目以降のビット列はカットされる）、終点ノード「Ｂ」をパススタックにスタックする。
【０２６７】
ＢＤＤ変換部２６０ｆは、パススタックから始点ノード「Ｈ」、遷移ビット列「０＊０＊」、終点ノード「Ｂ」をポップする。ここで、（終点ノード「Ｂ」のレベル）−（カレントレベル「０」）がＮ（４）以上であるため、ＢＤＤ変換部１６０ｆは、第２遷移テーブル１５４に、始点ノード「Ｈ」、論理値「０＊０＊」、遷移先（終点ノード）「Ｂ」を登録する。
【０２６８】
一方、ＢＤＤ変換部２６０ｆは、遷移先ノード「Ｅ」のレベル「３」から終点ノード「Ｆ」のレベル「２」を差し引くと「１」となるので、０個の「＊」がビット列「０＊１」の後ろに追加される。そして、始点ノード「Ｈ」、ビット列「０＊１」、終点ノード「Ｅ」をパススタックにスタックする。
【０２６９】
ＢＤＤ変換部２６０ｆは、始点ノード「Ｈ」、ビット列「０＊１」、終点ノード「Ｅ」をパススタックからポップし、遷移ビット列を複製し、０および１をそれぞれ加える。また、第１遷移テーブル２５２を参照し、ポップした終点ノード「Ｅ」の遷移先ノードの論理値「０」および「１」でのそれぞれの遷移先ノード「Ｄ」、「１」を得、（遷移先ノードのレベル）−（終点ノード「Ｅ」のレベル）−１個の「＊」を各遷移ビット列に追加する。遷移先ノード「Ｄ」のレベル「４」から終点ノード「Ｅ」のレベル「３」を差し引くと「１」となるので、０個の「＊」がビット列「０＊１０」の後ろに追加される。そして、始点ノード「Ｈ」、ビット列「０＊１０」、終点ノード「Ｄ」をパススタックにスタックする。
【０２７０】
ＢＤＤ変換部２６０ｆは、始点ノード「Ｈ」、ビット列「０＊１０」、終点ノード「Ｄ」をパススタックからポップする。ここで、（終点ノード「Ｄ」のレベル）−（カレントレベル「０」）がＮ（４）以上であるため、ＢＤＤ変換部２６０ｆは、第２遷移テーブル２５４に、始点ノード「Ｈ」、論理値「０＊１０」、遷移先（終点ノード）「Ｄ」を登録する。
【０２７１】
一方、ＢＤＤ変換部２６０ｆは、遷移先ノード「１」のレベル「８」から終点ノード「Ｅ」のレベル「３」を差し引くと「５」となるので、４個の「＊」がビット列「０＊１１」の後ろに追加される。そして、始点ノード「Ｈ」、ビット列「０＊１１」（先頭から５ビット目以降のビット列はカットされる）、終点ノード「１」をパススタックにスタックする。
【０２７２】
ＢＤＤ変換部１６０ｆは、始点ノード「Ｈ」、ビット列「０＊１１」、終点ノード「Ｄ」をパススタックからポップする。ここで、（終点ノード「１」のレベル）−（カレントレベル「０」）がＮ（４）以上であるため、ＢＤＤ変換部１６０ｆは、第２遷移テーブル１５４に、始点ノード「Ｈ」、論理値「０＊１１」、遷移先（終点ノード）「１」を登録する（図４８のステップＳ７３）。
【０２７３】
ＢＤＤ変換部２６０ｆは、カレントレベルを「４」に設定し、始点ノード集合からノード「Ｂ」を取り出して始点ノードとする。そして、（始点ノード「Ｂ」のレベル「６」）−（カレントレベル「４」）個の「＊」を遷移ビット列とする。ＢＤＤ変換部２６０ｆは、始点ノード「Ｂ」、遷移ビット列「＊＊」、終点ノード「Ｂ」をパススタックにスタックする。
【０２７４】
ＢＤＤ変換部２６０ｆは、始点ノード集合からノード「Ｄ」を取り出して始点ノードとする。そして、（始点ノード「Ｄ」のレベル「４」）−（カレントレベル「４」）個の「＊」を遷移ビット列とする（この場合は、差分した結果が０となるので、遷移ビット列は空欄となる）。ＢＤＤ変換部２６０ｆは、始点ノード「Ｄ」、遷移ビット列「空欄」、終点ノード「Ｄ」をパススタックにスタックする。
【０２７５】
ＢＤＤ変換部２６０ｆは、始点ノード集合からノード「１」を取り出して始点ノードとする。ここで、始点ノード「１」のレベルとカレントレベルとの差分が、４（Ｎ）以上となるので、ＢＤＤ変換部２６０ｆは、ノード「１」のダミーノード「１’」を定義する。そして、ＢＤＤ変換部２６０ｆは、第２遷移テーブル２５３を参照し、遷移先がノード「１」となっている項目をダミーノード「１’」に書き換える。
【０２７６】
また、ＢＤＤ変換部２６０ｆは、始点ノードとしてダミーノード「１’」を、遷移ビット列として「＊」Ｎ（本実施例２では４）ビット（＊＊＊＊）を、終点ノードとして始点ノード「１」をパススタックにスタックする（図４９のステップＳ７４）。
【０２７７】
ＢＤＤ変換部２６０ｆは、パススタックから始点ノード「１’」、遷移ビット列「＊＊＊＊」、終点ノード「１」をポップし、始点ノード「１’」、遷移ビット列「＊＊＊＊」、終点ノード「１」を、第２遷移テーブル２５３に登録する。
【０２７８】
ＢＤＤ変換部２６０ｆは、パススタックから始点ノード「Ｄ」、遷移ビット列「空欄」、終点ノード「Ｄ」をポップする。そして、ポップした遷移ビット列を複製し、０および１をそれぞれ加える。また、第１遷移テーブル２５２を参照し、ポップした終点ノード「Ｄ」の論理値「０」および「１」でのそれぞれの遷移先ノード「Ｂ」、「Ｃ」を得、（遷移先ノードのレベル）−（終点ノード「Ｄ」のレベル）−１個の「＊」を各遷移ビット列に追加する。
【０２７９】
ＢＤＤ変換部２６０ｆは、遷移先ノード「Ｂ」のレベル「６」から終点ノード「Ｄ」のレベル「４」を差し引くと「２」となるので、１個の「＊」がビット列「０」の後ろに追加される。そして、始点ノード「Ｄ」、ビット列「０＊」、終点ノード「Ｂ」をパススタックにスタックする。
【０２８０】
また、ＢＤＤ変換部２６０ｆは、遷移先ノード「Ｃ」のレベル「５」から終点ノード「Ｄ」のレベル「４」を差し引くと「１」となるので、０個の「＊」がビット列「１」の後ろに追加される。そして、始点ノード「Ｄ」、ビット列「１」、終点ノード「Ｃ」をパススタックにスタックする。
【０２８１】
ＢＤＤ変換部２６０ｆは、始点ノード「Ｄ」、ビット列「１」、終点ノード「Ｃ」をパススタックからポップする。そして、ポップした遷移ビット列を複製し、０および１をそれぞれ加える。また、第１遷移テーブル２５２を参照し、ポップした終点ノード「Ｃ」の論理値「０」および「１」でのそれぞれの遷移先ノード「Ｂ」、「１」を得、（遷移先ノードのレベル）−（終点ノード「Ｃ」のレベル）−１個の「＊」を各遷移ビット列に追加する。
【０２８２】
ＢＤＤ変換部２６０ｆは、遷移先ノード「Ｂ」のレベル「６」から終点ノード「Ｃ」のレベル「５」を差し引くと「１」となるので、０個の「＊」がビット列「１０」の後ろに追加される。そして、始点ノード「Ｄ」、ビット列「１０」、終点ノード「Ｂ」をパススタックにスタックする。
【０２８３】
一方、ＢＤＤ変換部２６０ｆは、遷移先ノード「１」のレベル「８」から終点ノード「Ｃ」のレベル「５」を差し引くと「３」となるので、２個の「＊」がビット列「１１」の後ろに追加される。そして、始点ノード「Ｄ」、ビット列「１１＊＊」、終点ノード「１」をパススタックにスタックする。
【０２８４】
ＢＤＤ変換部２６０ｆは、始点ノード「Ｄ」、ビット列「１１＊＊」、終点ノード「１」をパススタックからポップする。ここで、（終点ノード「１」のレベル）−（カレントレベル「４」）がＮ（４）以上であるため、第２遷移テーブル２５３に、始点ノード「Ｄ」、論理値「１１＊＊」、遷移先（終点ノード）「１」を登録する。また、始点ノード集合にノード「１」を登録する（図４９のステップＳ７５）。
【０２８５】
ＢＤＤ変換部２６０ｆは、パススタックから始点ノード「Ｄ」、遷移ビット列「１０」、終点ノード「Ｂ」をポップする。そして、ポップした遷移ビット列を複製し、０および１をそれぞれ加える。また、第１遷移テーブル１５２を参照し、ポップした終点ノード「Ｂ」の論理値「０」および「１」でのそれぞれの遷移先ノード「０」、「Ａ」を得、（遷移先ノードのレベル）−（終点ノード「Ｂ」のレベル）−１個の「＊」を各遷移ビット列に追加する。
【０２８６】
ＢＤＤ変換部２６０ｆは、遷移先ノード「０」のレベル「８」から終点ノード「Ｂ」のレベル「６」を差し引くと「２」となるので、１個の「＊」がビット列「１００」の後ろに追加される。そして、始点ノード「Ｄ」、ビット列「１００＊」、終点ノード「０」をパススタックにスタックする。
【０２８７】
ＢＤＤ変換部２６０ｆは、始点ノード「Ｄ」、ビット列「１００＊」、終点ノード「０」をパススタックからポップする。ここで、（終点ノード「０」のレベル）−（カレントレベル「４」）がＮ（４）以上であるため、第２遷移テーブル２５３に、始点ノード「Ｄ」、論理値「１００＊」、遷移先（終点ノード）「０」を登録する。また、始点ノード集合にノード「０」を登録する。
【０２８８】
一方、ＢＤＤ変換部２６０ｆは、遷移先ノード「Ａ」のレベル「７」から終点ノード「Ｂ」のレベル「６」を差し引くと「１」となるので、０個の「＊」がビット列「１０１」の後ろに追加される。そして、始点ノード「Ｄ」、ビット列「１０１」、終点ノード「Ａ」をパススタックにスタックする（図４９のステップＳ７６）。
【０２８９】
ＢＤＤ変換部２６０ｆは、パススタックから始点ノード「Ｄ」、遷移ビット列「１０１」、終点ノード「Ａ」をポップし、遷移ビット列を複製し、０および１をそれぞれ加える。また、第１遷移テーブル２５２を参照し、ポップした終点ノード「Ａ」の論理値「０」および「１」でのそれぞれの遷移先ノード「０」、「１」を得る。ＢＤＤ変換部２６０ｆは、遷移先ノード「０」のレベル「８」から終点ノード「Ａ」のレベル「７」を差し引くと「１」となるので、０個の「＊」がビット列「１０１０」の後ろに追加される。そして、始点ノード「Ｄ」、ビット列「１０１０」、終点ノード「０」をパススタックにスタックする。
【０２９０】
ＢＤＤ変換部２６０ｆは、始点ノード「Ｄ」、ビット列「１０１０」、終点ノード「０」をパススタックからポップする。ここで、（終点ノード「０」のレベル）−（カレントレベル「４」）がＮ（４）以上であるため、第２遷移テーブル１５４に、始点ノード「Ｄ」、論理値「１０１０」、遷移先（終点ノード）「０」を登録する。
【０２９１】
一方、ＢＤＤ変換部２６０ｆは、遷移先ノード「１」のレベル「８」から終点ノード「Ａ」のレベル「７」を差し引くと「１」となるので、０個の「＊」がビット列「１０１１」の後ろに追加される。そして、始点ノード「Ｄ」、ビット列「１０１１」、終点ノード「１」をパススタックにスタックする。
【０２９２】
ＢＤＤ変換部１６０ｆは、始点ノード「Ｄ」、ビット列「１０１１」、終点ノード「１」をパススタックからポップする。ここで、（終点ノード「１」のレベル）−（カレントレベル「４」）がＮ（４）以上であるため、第２遷移テーブル１５４に、始点ノード「Ｄ」、論理値「１０１１」、遷移先（終点ノード）「１」を登録する（図４９のステップＳ７７）。
【０２９３】
ＢＤＤ変換部２６０ｆは、パススタックから始点ノード「Ｄ」、遷移ビット列「０＊」、終点ノード「Ｂ」をポップし、遷移ビット列を複製し、０および１をそれぞれ加える。そして、ＢＤＤ変換部１６０ｆは、第１遷移テーブル２５２を参照し、ポップした終点ノード「Ｂ」の論理値「０」および「１」でのそれぞれの遷移先ノード「０」、「Ａ」を得る。ＢＤＤ変換部２６０ｆは、遷移先ノード「０」のレベル「８」から終点ノード「Ｂ」のレベル「６」を差し引くと「２」となるので、１個の「＊」がビット列「０＊０」の後ろに追加される。そして、始点ノード「Ｄ」、ビット列「０＊０＊」、終点ノード「０」をパススタックにスタックする。
【０２９４】
ＢＤＤ変換部２６０ｆは、始点ノード「Ｄ」、ビット列「０＊０＊」、終点ノード「０」をパススタックからポップする。ここで、（終点ノード「０」のレベル）−（カレントレベル「４」）がＮ（４）以上であるため、第２遷移テーブル２５３に、始点ノード「Ｄ」、論理値「０＊０＊」、遷移先（終点ノード）「０」を登録する。
【０２９５】
一方、ＢＤＤ変換部２６０ｆは、遷移先ノード「Ａ」のレベル「７」から終点ノード「Ｂ」のレベル「６」を差し引くと「１」となるので、０個の「＊」がビット列「０＊１」の後ろに追加される。そして、始点ノード「Ｄ」、ビット列「０＊１」、終点ノード「Ａ」をパススタックにスタックする（図５０のステップＳ７８）。
【０２９６】
ＢＤＤ変換部２６０ｆは、パススタックから始点ノード「Ｄ」、遷移ビット列「０＊１」、終点ノード「Ａ」をポップし、遷移ビット列を複製し、０および１をそれぞれ加える。そして、ＢＤＤ変換部２６０ｆは、第１遷移テーブル２５２を参照し、ポップした終点ノード「Ａ」の論理値「０」および「１」でのそれぞれの遷移先ノード「１」、「０」を得る。ＢＤＤ変換部２６０ｆは、遷移先ノード「０」のレベル「８」から終点ノード「Ａ」のレベル「７」を差し引くと「１」となるので、０個の「＊」がビット列「０＊１０」の後ろに追加される。そして、始点ノード「Ｄ」、ビット列「０＊１０」、終点ノード「０」をパススタックにスタックする。
【０２９７】
ＢＤＤ変換部２６０ｆは、始点ノード「Ｄ」、ビット列「０＊１０」、終点ノード「０」をパススタックからポップする。ここで、（終点ノード「０」のレベル）−（カレントレベル「４」）がＮ（４）以上であるため、第２遷移テーブル２５３に、始点ノード「Ｄ」、論理値「０＊１０」、遷移先（終点ノード）「０」を登録する。
【０２９８】
一方、ＢＤＤ変換部２６０ｆは、遷移先ノード「１」のレベル「８」から終点ノード「Ａ」のレベル「７」を差し引くと「１」となるので、０個の「＊」がビット列「０＊１１」の後ろに追加される。そして、始点ノード「Ｄ」、ビット列「０＊１１」、終点ノード「１」をパススタックにスタックする。
【０２９９】
ＢＤＤ変換部１６０ｆは、始点ノード「Ｄ」、ビット列「０＊１１」、終点ノード「１」をパススタックからポップする。ここで、（終点ノード「１」のレベル）−（カレントレベル「４」）がＮ（４）以上であるため、第２遷移テーブル１５４に、始点ノード「Ｄ」、論理値「０＊１１」、遷移先（終点ノード）「１」を登録する（図５０のステップＳ７９）。
【０３００】
ＢＤＤ変換部２６０ｆは、パススタックから始点ノード「Ｂ」、遷移ビット列「＊＊」、終点ノード「Ｂ」をポップし、遷移ビット列を複製し、０および１をそれぞれ加える。そして、ＢＤＤ変換部２６０ｆは、第１遷移テーブル２５２を参照し、ポップした終点ノード「Ｂ」の論理値「０」および「１」でのそれぞれの遷移先ノード「０」、「Ａ」を得る。遷移先ノード「Ａ」のレベル「７」から終点ノード「Ｂ」のレベル「６」を差し引くと「１」となるので、０個の「＊」がビット列「＊＊１」の後ろに追加される。そして、始点ノード「Ｂ」、ビット列「＊＊１」、終点ノード「Ａ」をパススタックにスタックする。
【０３０１】
一方、ＢＤＤ変換部２６０ｆは、遷移先ノード「０」のレベル「８」から終点ノード「Ｂ」のレベル「６」を差し引くと「２」となるので、１個の「＊」がビット列「＊＊０」の後ろに追加される。そして、始点ノード「Ｂ」、ビット列「＊＊０＊」、終点ノード「０」をパススタックにスタックする。
【０３０２】
ＢＤＤ変換部２６０ｆは、始点ノード「Ｂ」、ビット列「＊＊０＊」、終点ノード「０」をパススタックからポップする。ここで、（終点ノード「０」のレベル）−（カレントレベル「４」）がＮ（４）以上であるため、第２遷移テーブル２５３に、始点ノード「Ｂ」、論理値「＊＊０＊」、遷移先（終点ノード）「０」を登録する（図５０のステップＳ８０）。
【０３０３】
ＢＤＤ変換部２６０ｆは、パススタックから始点ノード「Ｂ」、遷移ビット列「＊＊１」、終点ノード「Ａ」をポップし、遷移ビット列を複製し、０および１をそれぞれ加える。そして、ＢＤＤ変換部１６０ｆは、第１遷移テーブル１５２を参照し、ポップした終点ノード「Ａ」の論理値「０」および「１」でのそれぞれの遷移先ノード「０」、「１」を得る。遷移先ノード「０」のレベル「８」から終点ノード「Ａ」のレベル「７」を差し引くと「１」となるので、０個の「＊」がビット列「＊＊１０」の後ろに追加される。そして、始点ノード「Ｂ」、ビット列「＊＊１０」（先頭から５ビット目以降のビット列はカットされる）、終点ノード「０」をパススタックにスタックする。
【０３０４】
ＢＤＤ変換部２６０ｆは、始点ノード「Ｂ」、ビット列「＊＊１０」、終点ノード「０」をパススタックからポップする。ここで、（終点ノード「０」のレベル）−（カレントレベル「４」）がＮ（４）以上であるため、第２遷移テーブル２５３に、始点ノード「Ｂ」、論理値「＊＊１０」、遷移先（終点ノード）「０」を登録する。
【０３０５】
一方、ＢＤＤ変換部２６０ｆは、遷移先ノード「１」のレベル「８」から終点ノード「Ｂ」のレベル「６」を差し引くと「２」となるので、１個の「＊」がビット列「＊＊１１」の後ろに追加される。そして、始点ノード「Ｂ」、ビット列「＊＊１１」（先頭から５ビット目以降のビット列はカットされる）、終点ノード「１」をパススタックにスタックする。
【０３０６】
ＢＤＤ変換部２６０ｆは、始点ノード「Ｂ」、ビット列「＊＊１１」、終点ノード「１」をパススタックからポップする。ここで、（終点ノード「１」のレベル）−（カレントレベル「４」）がＮ（４）以上であるため、第２遷移テーブル２５３に、始点ノード「Ｂ」、論理値「＊＊１１」、遷移先（終点ノード）「１」を登録する（図５０のステップＳ８１）。
【０３０７】
このように、ＢＤＤ変換部２６０ｆは、ステップＳ７０〜Ｓ８１の処理を実行することにより、図２６に示す第１ダイアグラムデータ２５０ｇを図４７に示す第２ダイアグラムデータ２５０ｈに変換する。
【０３０８】
図４６の説明に戻ると、ダイアグラム実行部２６０ｇは、論理値テーブル２５０ｅと、第２ダイアグラムデータ２５０ｈとを比較して、最終的な論理値が「１（真）」であるか否かを判定する手段である。なお、本実施例２にかかるダイアグラム実行部２６０ｇは、実施例１に示したダイアグラム実行部１６０ｇとは異なり、所定桁数のビット列を用いて判定を行う。
【０３０９】
そして、ダイアグラム実行部２６０ｇは、判定結果が「１」となったデータ種別に対応する返答項目を評価結果テーブル２５０ｉから検出し、検出した返答項目を検索結果データ２５０ｊとして記憶部２５０に記憶する。例えば、データ種別「Ｄａｔａ２」の判定結果が「１」となる場合には、返答項目「第三開発部」を検索結果データ１５０ｊとして記憶する。
【０３１０】
ここで、ダイアグラム実行部２６０ｇの処理を具体的に説明する。図５１および図５２は、本実施例２にかかるダイアグラム実行部２６０ｇの処理を説明するための図である。なお、前提条件として、第２ダイアグラムデータ２５０ｈのデータ構造を、図４７に示したデータ構造とする。また、データ種別を、「Ｄａｔａ０」、「Ｄａｔａ１」とし、Ｄａｔａ０の各論理値を「H＝0、G＝1、F＝1、E＝0、D＝0、C＝0、B＝1、A＝1」とし、Ｄａｔａ１の論理値を「H＝1、G＝0、F＝0、E＝1、D＝0、C＝1、B＝1、A＝0」とする。また、入力順序は、第１レベルテーブル２５１（図２６参照）のレベル順に従うため、「Ｈ、Ｇ、Ｆ、Ｅ、Ｄ、Ｃ、Ｂ、Ａ」の順となる。また、比較対象となるビット列の桁を「４」とする。
【０３１１】
まず、ダイアグラム実行部２６０ｇが、「Ｄａｔａ０」の真偽を判定する場合について説明する。ダイアグラム実行部２６０ｇは、「Ｄａｔａ０」のビット列「０１１０００１１」のうち、上位４ビット「０１１０」と、第２遷移テーブル２５３とを比較し、遷移先ノード「Ｄ」を得る（図５１のステップＳ９０）。
【０３１２】
そして、ダイアグラム実行部２６０ｇは、残りのビット列「００１１」と、第２遷移テーブル２５３とを比較し、遷移先ノード「１（真）」を得る。ダイアグラム実行部２６０ｇは、評価結果テーブル２５０ｉにおいて、データ種別「Ｄａｔａ０」に対応する評価結果に「１（真）」を登録する（図５１のステップＳ９１）。
【０３１３】
次に、ダイアグラム実行部２６０ｇが、「Ｄａｔａ１」の真偽を判定する場合にについて説明する。ダイアグラム実行部２６０ｇは、「Ｄａｔａ１」のビット列「１００１０１１０」のうち、上位４ビット「１００１」と、第２遷移テーブル２５３とを比較し、遷移先ノード「Ｂ」を得る（図５２のステップＳ９２）。
【０３１４】
そして、ダイアグラム実行部２６０ｇは、残りのビット列「０１１０」と、第２遷移テーブル２５３とを比較し、遷移先ノード「０（偽）」を得る。ダイアグラム実行部２６０ｇは、評価結果テーブル２５０ｉにおいて、データ種別「Ｄａｔａ１」に対応する評価結果に「０（偽）」を登録する（図５２のステップＳ９３）。
【０３１５】
検索結果出力部２６０ｈは、記憶部２５０に記憶された検索結果データ２５０ｊを端末装置６０（図３参照）に送信する手段である。端末装置６０は、検索結果データ２５０ｊを受信した場合に、受信した検索結果データ２５０ｊをモニタ画面に出力する。
【０３１６】
次に、本実施例２にかかる検索装置２００の処理手順について説明する。図５３は、本実施例２にかかる検索装置２００の処理手順を示すフローチャートである。同図に示すように、検索装置２００は、検索クエリを受信し（ステップＳ３０１）、検索クエリ分解部２６０ａが、分解検索クエリ２５０ｃを生成する（ステップＳ３０２）。
【０３１７】
続いて、抽出結果テーブル生成部２６０ｂが、分解検索クエリ２５０ｃに対応するデータを抽出して抽出結果テーブル２５０ｄに登録し（ステップＳ３０３）、論理値算出部２６０ｃが論理値を算出して論理値テーブル２５０ｅに登録する（ステップＳ３０４）。
【０３１８】
そして、ＢＤＤ構築部２６０ｅがＢＤＤ入力順序を決定し（ステップＳ３０５）、ＢＤＤ構築処理を実行する（ステップＳ３０６）。ＢＤＤ変換部２６０ｆは、ＢＤＤ変換処理を実行することにより、第１ダイアグラムデータ２５０ｇを第２ダイアグラムデータ２５０ｈに変換する（ステップＳ３０７）。
【０３１９】
ダイアグラム実行部２６０ｇは、論理式判定ダイアグラム実行処理を実行し（ステップＳ３０８）、評価結果データを格納し（ステップＳ３０９）、検索結果出力部２６０ｈが、返答項目出力処理を実行する（ステップＳ３１０）。
【０３２０】
ここで、図５３のステップＳ３０６に示したＢＤＤ構築処理は、図３５に示したＢＤＤ構築処理と同様である。また、図５３のステップＳ３１０に示した返答項目出力処理は、図４４に示した返答項目出力処理と同様である。
【０３２１】
次に、図５３のステップＳ３０７に示したＢＤＤ変換処理について説明する。図５４および図５５は、本実施例２にかかるＢＤＤ変換処理の処理手順を示すフローチャートである。図５４に示すように、ＢＤＤ変換部２６０ｆは、カレントレベルを０に設定し（ステップＳ３１１）、ＢＤＤの初期状態であるノードを始点ノード集合に追加する（ステップＳ３１２）。
【０３２２】
続いて、ＢＤＤ変換部２６０ｆは、始点ノード集合から一つノードを取り除き、取り除いたノードを始点ノードに設定し（ステップＳ３１３）、（始点ノードのレベル）−（カレントレベル）がＮ（例えば、４）以上であるか否かを判定する（ステップＳ３１４）。
【０３２３】
Ｎ以上である場合には（ステップＳ３１５，Ｙｅｓ）、第２遷移テーブル２５３の遷移先が始点ノードとなっている項目をダミーノードに書き換え（ステップＳ３１６）、始点ノードとしてダミーノードを、遷移ビット列として「＊」Ｎビットを、終点ノードとして始点ノードをパススタックにスタックし（ステップＳ３１７）、ステップＳ３１９に移行する。
【０３２４】
一方、Ｎ未満の場合は（ステップＳ３１５，Ｎｏ）、始点ノードとして始点ノードを、遷移ビット列として（始点ノードのレベル）−（カレントレベル）分の「＊」を、終点ノードとして始点ノードをパススタックにスタックする（ステップＳ３１８）。
【０３２５】
続いて、ＢＤＤ変換部２６０ｆは、始点ノード集合が空か否かを判定し（ステップＳ３１９）、空ではない場合には（ステップＳ３２０，Ｎｏ）、ステップＳ３１３に移行する。一方、始点ノード集合が空の場合には（ステップＳ３２０，Ｙｅｓ）、図５５に示すように、パススタックから始点ノード、遷移ビット列、終点ノードをポップする（ステップＳ３２１）。
【０３２６】
そして、ＢＤＤ変換部２６０ｆは、終点ノードのレベルからカレントレベルを減算し、減算した値がＮ以上であるか否かを判定する（ステップＳ３２２）。減算した値がＮ未満の場合には（ステップＳ３２３，Ｎｏ）、ポップした遷移ビット列を複製し、０および１をそれぞれ加え、第１遷移テーブル２５２を参照し、ポップしたノードの論理値０および１でのそれぞれの遷移先ノードを取得する。また、（遷移先ノードのレベル）−（終点ノードのレベル）−１分の「＊」を遷移ビット列にそれぞれ更に追加し、取得した遷移先ノードをそれぞれの終点ノードとして追加し、取得した各遷移先ノードをそれぞれの終端ノードとして、それぞれパススタックにスタックし（ステップＳ３２４）、ステップＳ３２１に移行する。
【０３２７】
一方、ＢＤＤ変換部２６０ｆは、減算した値がＮ以上の場合には（ステップＳ３２３，Ｙｅｓ）、第２遷移先テーブルにノードを始点ノードとし、論理値を遷移ビット列の先頭Ｎビットとし、遷移先のノードを終点ノードとするエントリを登録する（ステップＳ３２５）。
【０３２８】
ＢＤＤ変換部２６０ｆは、終点ノードを始点ノード集合に追加し（ステップＳ３２６）、パススタックが空か否かを判定し（ステップＳ３２７）、パススタックが空ではない場合には（ステップＳ３２８，Ｎｏ）、ステップＳ３２１に移行する。
【０３２９】
一方、パススタックが空の場合には（ステップＳ３２８，Ｙｅｓ）、カレントレベルにＮを加算し（ステップＳ３２９）、カレントレベルが最終レベル以上であるか否かを判定する（ステップＳ３３０）。カレントレベルが最終レベル未満の場合には（ステップＳ３３１）、ステップＳ３１３に移行する。カレントレベルが最終レベル以上の場合には（ステップＳ３３１，Ｙｅｓ）、ＢＤＤ変換処理を終了する。
【０３３０】
次に、図５３のステップＳ３０８に示した論理式判定ダイアグラム実行処理について説明する。図５６は、本実施例２にかかる論理式判定ダイアグラム実行処理の処理手順を示すフローチャートである。図５６に示すように、抽出結果テーブル生成部２６０ｂが抽出結果テーブル２５０ｄを作成し（ステップＳ３４１）、論理値算出部２６０ｃが論理値テーブル２５０ｅを作成する（ステップＳ３４２）。
【０３３１】
そして、ダイアグラム実行部２６０ｇは、初期ノードを現在のノードとし、現在のレベルを０に設定し（ステップＳ３４３）、現在のレベルが最終レベルか否かを判定する（ステップＳ３４４）。
【０３３２】
現在のレベルが最終レベルではない場合に（ステップＳ３４５，Ｎｏ）、論理値テーブル２５０ｅを参照し、現在のレベルの入力ビット列を取得し（ステップＳ３４６）、第２遷移テーブル２５３を参照し、遷移先の情報を取得する（ステップＳ３４７）。
【０３３３】
続いて、ダイアグラム実行部２６０ｇは、現在のノードを遷移先のノードに設定し（ステップＳ３４８）、現在のレベルに１を加算し（ステップＳ３４９）、ステップＳ３４４に移行する。
【０３３４】
一方、現在のレベルが最終レベルの場合には（ステップＳ３４５，Ｙｅｓ）、ノードに割り当てられている真偽値を評価結果テーブル２５０ｉに登録し（ステップＳ３５０）、全ての文書データを選択したか否かを判定する（ステップＳ３６０）。全ての文書データを選択していない場合には（ステップＳ３７０，Ｎｏ）、ステップＳ３４３に移行する。一方、全ての文書データを選択している場合には（ステップＳ３７０，Ｙｅｓ）、論理式判定ダイアグラム実行処理を終了する。
【０３３５】
上述してきたように、本実施例２にかかる検索装置２００は、第２ダイアグラムデータ２５０ｈを作成する場合に、遷移先を判定するビット列にダミー値「＊」あるいは、遷移先のノードの間にダミーノードを挿入することで、最終的な真偽を判定するまでに、比較対象となるビット列の桁を固定するので、遷移先のノード毎に比較するビット列の桁を判定する必要を無くし、効率的に真偽判定を実施することを可能にする。
【０３３６】
また、本実施例２にかかる検索装置２００は、ダミーノードを挿入して、初期ノードから最終レベルのノードに遷移するまでの遷移回数を固定するので、真偽判定にかかる処理をシンプルにし、検索装置２００にかかる処理負荷を軽減することができる。
【０３３７】
ところで、本実施例２にかかる検索装置２００は、一例として、ダミー値「＊」およびダミーノードを用いて、第２ダイアグラムデータ２５０ｈを作成したが、ダミー値のみを挿入してビット列を固定した第２ダイアグラムデータ２５０ｈを作成しても良いし、ダミーノードのみを挿入して遷移回数を固定した第２ダイアグラムデータ２５０ｈを作成しても良い。
【実施例３】
【０３３８】
次に、本実施例３にかかる検索装置の概要および特徴について説明する。図５７は、本実施例３にかかる検索装置の概要および特徴を説明するための図である。本実施例３にかかる検索装置は、論理変数の論理値が求まっているか否かの状態を表す論理変数（以下、不明論理変数）を用いて、第１の２分木を構築し、実施例１または実施例２に示した手法を用いて、第１の２分木を第２の２分木に変換し、論理式の真偽を判定する。入力されるビット列によっては、論理変数（例えば、計算コストの高い論理変数）の論理値を求めなくとも、最終的な真偽を判定することができる。
【０３３９】
ここで、計算コストの高い論理変数（論理値が「１」か「０」かを計算する時間が所定時間以上となる論理変数）は、できれば計算しないでおくことが望ましい。従って、計算コストの高い論理変数に対応する不明論理変数を作成することにより、真偽判定にかかる検索装置の処理負荷を軽減させることが出来る。
【０３４０】
図５７に示す第１の２分木は、論理式「A  and  B  or  (C  and  D  or  E)and  (F  or  G  and  H)」の第１の２分木を示す。また、図５７において、計算コストの高い論理変数を「Ａ」、「Ｃ」とする。そして、「Ａ」の不明論理変数を「Ａ？」とし、論理変数「Ａ」と不明論理変数「Ａ？」とを用いて、論理変数「Ａ」の値を示す。本実施例３では、論理変数と、かかる論理変数に対応する不明論理変数を用いて、論理変数の３つの状態を定義する。具体的には、「a?=0  a=0」の場合には、Ａの論理値が求まっていない旨を示し、「a?=1  a=0」の場合には、Ａの論理値が「０」である旨を示し、「a?=1  a=1」の場合には、Ａの論理値が「１」であることを示す。なお、不明論理変数と、不明論理変数に対応する論理変数の初期値は「０」となる。
【０３４１】
同様に、「Ｃ」の不明論理変数を「Ｃ？」とし、論理変数「Ｃ」と不明論理変数「Ｃ？」とを用いて、論理変数「Ｃ」の値を示す。具体的には、「c?=0  c=0」の場合には、Ｃの論理値が求まっていない旨を示し、「c?=1  c=0」の場合には、Ｃの論理値が「０」である旨を示し、「c?=1  c=１」の場合には、Ｃの論理値が「１」であることを示す。
【０３４２】
なお、図５７に示す「Ａｘ」は、論理変数「Ａ」の不定最終ノードを示す。ビット列を第２の２分木に入力し、最終的に、不定最終ノード「Ａｘ」に到達した場合には、論理変数「Ａｘ」の論理値が必要となる。検索装置は、不定最終ノード「Ａｘ」に到達した場合には、論理変数「Ａ」の論理値を求めると共に、不明論理変数「Ａ？」の値を「１」に設定した後に、不定最終ノード「Ａｘ」の一つ前のノード「Ａ？」から比較をやり直すことで、真値判定を行う。
【０３４３】
同様に、図５７に示す「Ｃｘ」は、論理変数「Ｃ」の不定最終ノードを示す。ビット列を第２の２分木に入力し、最終的に、不定最終ノード「Ｃｘ」に到達した場合には、論理変数「Ｃｘ」の論理値が必要となる。検索装置は、不定最終ノード「Ｃｘ」に到達した場合には、論理変数「Ｃ」の論理値を求めると共に、不明論理変数「Ｃ？」の値を「１」に設定した後に、不定最終ノード「Ｃｘ」の一つ前のノード「Ｄ」から比較をやり直すことで、真値判定を行う。
【０３４４】
具体的に、第２の２分木に入力する各論理値を「H＝1、G＝1、F＝0、E＝1、D＝0、C?＝0、C＝0、B＝1、A?＝0、A＝0」（Ａ、Ｃの論理値は不明）とすると、初期ノード「Ｈ」からノード「１」に遷移するため、計算コストの高い論理変数「Ａ、Ｃ」の論理値を求めなくとも、論理式の真偽（この場合は真）を判定することができる。
【０３４５】
一方、第２の２分木に入力する各論理値を「H＝1、G＝1、F＝0、E＝0、D＝1、C?＝0、C＝0、B＝1、A?＝0、A＝0」（Ａ、Ｃの論理値は不明）とすると、初期ノード「Ｈ」からノード「Ｄ」を介して不定最終ノード「Ｃｘ」に遷移する。この場合は、論理変数「Ｃ」の論理値を求める必要があるので、論理変数「Ｃ」の論理値を求め、不明論理変数「Ｃ？」の値を「１」に設定した後に、再度、ノード「Ｄ」にビット列を入力する。
【０３４６】
例えば、論理変数「Ｃ」の論理値を「１」とすれば、各論理値は、「H＝1、G＝1、F＝0、E＝0、D＝1、C?＝1、C＝1、B＝1、A？＝0、A＝0」（Ａの論理値は不明）となり、ノード「Ｄ」に各論理値「D＝1、C?＝1、C＝1、B＝1」を入力すると、ノード「Ｄ」を介しからノード「１」に遷移するため、計算コストの高い全ての論理変数を求めなくとも、論理式の真偽を判定することができる（この場合では、論理変数Ａの論理値を求める必要がない）。
【０３４７】
次に、本実施例３にかかる検索装置の構成について説明する。図５８は、本実施例３にかかる検索装置３００の構成を示す機能ブロック図である。なお、本実施例３にかかる検索装置３００を備えた検索システムの構成は、実施例１の検索システムの構成と同様である。
【０３４８】
図５８に示すように、この検索装置３００は、入力部３１０と、出力部３２０と、通信制御ＩＦ部３３０と、入出力制御ＩＦ部３４０と、記憶部３５０と、制御部３６０とを有する。
【０３４９】
入力部３１０は、各種の情報を入力する入力手段であり、例えば、キーボードやマウス、マイクなどによって構成される。なお、後述するモニタ（出力部３２０）も、マウスと協働してポインティングデバイス機能を実現する。
【０３５０】
出力部３２０は、各種の情報を出力する手段であり、モニタ（若しくはディスプレイ、タッチパネル）やスピーカなどによって構成される。無線制御ＩＦ部３３０は、主に端末装置６０との間における通信を制御する手段である。なお、入出力制御ＩＦ部３４０は、入力部３１０、出力部３２０、通信制御ＩＦ部３３０、記憶部３５０、制御部３６０によるデータの入出力を制御する手段である。
【０３５１】
記憶部３５０は、制御部３６０による各種処理に必要なデータおよびプログラムを記憶する記憶手段である。特に本発明に密接に関連するものとして、記憶部３５０は、ＸＭＬデータ３５０ａと、検索クエリ３５０ｂと、分解検索クエリ３５０ｃと、計算量見積テーブル３５０ｄと、計算量テーブル３５０ｅと、抽出結果テーブル３５０ｆと、論理値テーブル３５０ｇと、変換論理式データ３５０ｈと、第１ダイアグラムデータ３５０ｉと、第２ダイアグラムデータ３５０ｊと、評価結果テーブル３５０ｋと、検索結果データ３５０ｌとを有する。
【０３５２】
ここで、ＸＭＬデータ３５０ａは、要素識別子「＜」、「＜／」等により要素が区切られた階層構造を有する文書データである。このＸＭＬデータ３５０ａのデータ構造は、図５に示したＸＭＬデータ１５０ａのデータ構造と同様である。
【０３５３】
検索クエリ３５０ｂは、ＸＭＬデータ３５０ａから照合位置のデータを取り出すためのデータである。この検索クエリ３５０ｂのデータ構造は、図６に示した検索クエリ１５０ｂのデータ構造と同様である。
【０３５４】
分解検索クエリ３５０ｃは、検索クエリ３５０ｂが検索クエリ分解部３６０ａ（後述する）によって分解された結果得られるデータである。この分解検索クエリ３５０ｃのデータ構造は、図７に示した分解検索クエリ１５０ｃのデータ構造と同様である。
【０３５５】
計算量見積テーブル３５０ｄは、論理変数の論理値を評価する評価式の計算コストを管理するテーブルである。図５９は、本実施例３にかかる計算量見積テーブル３５０ｄのデータ構造の一例を示す図である。同図に示すように、この計算量見積テーブル３５０ｄは、評価式種別と、計算コストとを対応付けて記憶している。例えば、評価式種別は、単純検索、正規表現、数値演算、日時計算、近傍検索を有する。また、各評価式種別に対応する計算コストの値は、ユーザの経験により適宜設定・更新される。
【０３５６】
ここで、単純検索に分類される評価式は、所定の文書データが、検索対象の要素に含まれているか否かを判定する評価式である。例えば、図７の評価式ｑ１が単純検索の評価式に該当する。
【０３５７】
正規表現に分類される評価式は、各種の複雑な処理を要する評価式である。数値演算に分類される評価式は、比較や四則演算、複雑な関数を含む（単なる一致判定は含まない）評価式である。例えば、図７の評価式ｑが数値演算に該当する。
【０３５８】
日時計算に分類される評価式は、２００８年１月以後・以前などのように、様々なフォーマットに対応しながら判定する評価式である。近傍検索に分類される評価式は、「情報」と「統合」の間が五文字以内などのように、文字間隔などを数える必要がある評価式である。
【０３５９】
計算量テーブル３５０ｅは、評価式に対応する計算コストを管理するテーブルである。図６０は、本実施例３にかかる計算量テーブル３５０ｅのデータ構造の一例を示す図である。同図に示すように、この計算量テーブル３５０ｅは、評価式識別情報と、計算コストとを対応付けて記憶している。ここでは、評価式「ｑ１」の計算コストが「１」、評価式「ｑ２」の計算コストが「１００」となっている。
【０３６０】
抽出結果テーブル３５０ｆは、評価式（図７のｑ１，ｑ２参照）の評価対象となる情報と、検索クエリ３５０ｂの評価結果が真であった場合に、端末装置６０に返答する項目を管理するテーブルである。この抽出結果テーブル３５０ｆのデータ構造は、図８に示した抽出結果テーブル１５０ｄのデータ構造と同様である。
【０３６１】
論理値テーブル３５０ｇは、各評価式の評価結果を管理するテーブルである。この論理値テーブル３５０ｇのデータ構造は、図９に示した論理値テーブル１５０ｅのデータ構造と同様である。ただし、初期段階では、計算コストの大きい論理値は「？」とする。例えば、評価式「ｑ２」の計算コストが大きい（所定値以上）場合には、第２論理値（ｑ２）の値を「？」とし、「ｑ２」の値が必要になった場合に、「１」または「０」が登録される。
【０３６２】
変換論理式データ３５０ｈは、論理式（図７参照）が、論理式変換部３６０ｅ（後述する）によって逆ポーランド表記に変換されたデータである。第１ダイアグラムデータ３５０ｉは、ＢＤＤ構築部３６０ｆ（後述する）によって作成されるデータである。
【０３６３】
この第１ダイアグラムデータ３５０ｉのデータ構造は、図１０に示した第１ダイアグラムデータ１５０ｇと同様である。ただし、本実施例３にかかる第１ダイアグラムデータ３５０ｉは、通常の論理変数、ノードのほかに、計算コストが所定値以上となる論理変数の不明論理変数、および、不定最終ノードを有する。また、本実施例３において、第１ダイアグラムデータ３５０ｉは、第１レベルテーブル３５１および第１遷移テーブル３５２を有する。
【０３６４】
第２ダイアグラムデータ３５０ｊは、第１ダイアグラムデータ３５０ｉが、ＢＤＤ変換部３６０ｇ（後述する）によって変換されたデータである。この第２ダイアグラムデータ３５０ｊは、第２レベルテーブル、第２遷移テーブルを有している（第２レベルテーブル、第２遷移テーブルのデータ構造は、上記実施例２と同様）。この第２ダイアグラムデータ３５０ｊのデータ構造は、図２５に示した、第２レベルテーブル１５３と、第２遷移テーブル１５４と同様である。ただし、本実施例３にかかる第２ダイアグラムデータ３５０ｊは、通常のノードの他に、不明論理変数に対応するノードおよび不定最終ノードを有する。
【０３６５】
評価結果テーブル３５０ｋは、各データ種別（例えば、Ｄａｔａ０〜２）に対する評価結果を管理するテーブルである。この評価結果テーブル３５０ｋのデータ構造は、図１１に示した評価結果テーブル１５０ｉのデータ構造と同様である。
【０３６６】
検索結果データ３５０ｌは、ＸＭＬデータ３５０ａに対する検索クエリ３５０ｂの検索結果を記憶するデータである。この検索結果データ３５０ｂのデータ構造は、図１２に示した検索結果データ１５０ｊのデータ構造と同様である。
【０３６７】
制御部３６０は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する制御手段である。特に本発明に密接に関連するものとしては、図５８に示すように、検索クエリ分解部３６０ａと、計算量見積部３６０ｂと、抽出結果テーブル生成部３６０ｃと、論理値算出部３６０ｄと、論理式変換部３６０ｅと、ＢＤＤ構築部３６０ｆと、ＢＤＤ変換部３６０ｇと、ダイアグラム実行部３６０ｈと、検索結果出力部３６０ｉとを有する。
【０３６８】
このうち、検索クエリ分解部３６０ａは、端末装置６０から検索クエリを受信した場合に、受信した検索クエリを検索クエリ３５０ｂとして記憶部３５０に記憶すると共に、周知の手法を用いて、検索クエリ３５０ｂから分解検索クエリ３５０ｃを生成する手段である。
【０３６９】
計算量見積部３６０ｂは、分解検索クエリ３５０ｃに含まれる各評価式（図７に示す例では、評価式ｑ１、ｑ２）の計算コストを判定し、計算量テーブル３５０ｅ（図６０参照）を生成する処理部である。計算量見積部３６０ｂは、分解検索クエリ３５０ｃの評価式と、計算量見積テーブル（図５９参照）とを比較することにより、評価式の計算コストを判定する。
【０３７０】
抽出結果テーブル生成部３６０ｃは、分解検索クエリ３５０ｃに含まれる評価式に基づいて、第１〜ｎ（ｎ＞１）論理変数および返答項目をＸＭＬデータ３５０ａから抽出し、抽出結果テーブル３５０ｆを生成する手段である。
【０３７１】
論理値算出部３６０ｄは、評価式の計算コストに基づいて、計算コストの少ない評価式を評価し（計算コストが所定値未満となる論理変数の論理値を算出し）、論理値テーブル３５０ｇを生成するする手段である。また、論理値算出部３６０ｄは、ダイアグラム実行部３６０ｂからの要求に応じて、算出することが必要になった論理変数の論理値を算出する。
【０３７２】
論理式変換部３６０ｅは、逆ポーランド表記を用いることにより、検索クエリの論理式（例えば、Q=q1  and  q2）を変換する手段である。論理式変換部３６０ｅは、論理式「ｑ１＆ｑ２」を、逆ポーランド表記を用いて変換すると、「ｑ１ｑ２＆」となる。論理式変換部３６０ｅは、変換した論理式のデータを、変換論理式データ３５０ｈとして記憶部３５０に記憶する。
【０３７３】
ＢＤＤ構築部３６０ｆは、変換論理式データ３５０ｆに基づいて、第１ダイアグラムデータ３５０ｉを生成する手段である。ＢＤＤ構築部３６０ｆは、変換論理式データ３５０ｆ（逆ポーランド表記の論理式）の文字を先頭から順次読み出し、読み出した文字（論理演算子、論理変数）に応じて、第１レベルテーブル３５１、第２レベルテーブルに各種の情報を登録する。
【０３７４】
本実施例３にかかるＢＤＤ構築部３６０ｆは、特に、計算コストの大きい論理変数が論理式に含まれている場合に、計算コストの大きい論理変数に対応する不明論理変数および不定最終ノードを作成して、第２の２分木を作成する。なお、不明論理変数のノードを、不明論理ノードとする。
【０３７５】
以下において、ＢＤＤ構築部３６０ｆが、第１ダイアグラムデータ３５０ｉを作成する処理について具体的に説明する。図６１〜６５は、本実施例３にかかるＢＤＤ構築部３６０ｆの処理を説明するための図である。図６１〜６５に示す処理を実行することで、計算コストの高い論理変数の不明論理変数および不定最終ノードが２分木に組み込まれる。結果として、計算コストの高い論理変数の論理値を算出していなくても、第２の２分木を作成することができ、多ビット毎にノードの遷移先を判定することができる。
【０３７６】
ここで、前提条件として、論理変数「Ａ」、「Ｃ」の計算コストが１００以上であるものとする。なお、ＢＤＤ構築部３６０ｆは、一旦、実施例１に示したＢＤＤ構築部１６０ｅと同様の手法を用いて、第１ダイアグラムデータを作成した後に、計算コストの大きい論理変数を検索して、不明論理変数および最終ノードを利用した第１ダイアグラムデータ３５０ｉを作成する。
【０３７７】
ここでは説明の便宜上、実施例１のＢＤＤ構築部１６０ｅの手法を用いて生成した第１ダイアグラムデータを図６１の上段に示す第１ダイアグラムデータ３５０ｉとする。ＢＤＤ構築部３６０ｆは、第１レベルテーブル３５１の先頭エントリをカレントエントリとし、現在のレベルを０に設定する。カレントエントリのノード「Ｄ」は、計算コストが所定値未満のノードであるため、そのまま、ノード「Ｄ」、レベル「０」、論理変数「ｄ」を新レベルテーブルに登録する（図６１のステップＳ４００、および、ステップＳ４０１）。新レベルテーブルは、ＢＤＤ構築部３６０ｆが保持しているものとする。
【０３７８】
ＢＤＤ構築部３６０ｆは、現在のレベルに１を加算し、第１レベルテーブル３５１の次のエントリ（図６１の第１レベルテーブル３５１の２段目）を、カレントエントリに設定する。カレントエントリのノード「Ｃ」は、計算コストが所定値以上のノードであるため、ノード「Ｃ」に対応する不明論理ノード「Ｃ？」、現在のレベル「１」、論理変数（不明論理変数）「ｃ？」を登録する。また、論理変数「Ｃ」に対応する不定最終ノード「Ｃｘ」および論理変数「ｃ」を新レベルテーブルに登録する。
【０３７９】
その後、ＢＤＤ構築部３６０ｆは、現在のレベルに１を加算し、ノード「Ｃ」、レベル「２」、論理変数「ｃ」を新レベルテーブルに登録する（図６２のステップＳ４０２）。
【０３８０】
ＢＤＤ構築部３６０ｆは、現在のレベルに１を加算し、第１レベルテーブル３５１の次のエントリ（図６１の第１レベルテーブル３５１の３段目）をカレントエントリに設定する。カレントエントリのノード「Ｂ」は、計算コストが所定値未満のノードであるため、そのまま、ノード「Ｂ」、レベル「３」、論理変数「ｂ」を新レベルテーブルに登録する。
【０３８１】
続いて、ＢＤＤ構築部３６０ｆは、現在のレベルに１を加算し、第１レベルテーブル３５１の次のエントリ（図６１の第１レベルテーブル３５１の４段目）をカレントエントリに設定する。カレントエントリのノード「Ａ」は、計算コストが所定値以上のノードであるため、ノード「Ａ」に対応する不明論理ノード「Ａ？」、現在のレベル「４」、論理変数（不明論理変数）「ａ？」を登録する。また、論理変数「Ａ」に対応する不定最終ノード「Ａｘ」および論理変数「ａ」を新レベルテーブルに登録する。
【０３８２】
その後、ＢＤＤ構築部３６０ｆは、現在のレベルに１を加算し、ノード「Ａ」、レベル「５」、論理変数「ａ」を新レベルテーブルに登録する。続いて、ＢＤＤ構築部３６０ｆは、第１レベルテーブル３５１の次のエントリ（図６１の第１レベルテーブル３５１の５段目）をカレントエントリに設定する。カレントエントリのノード「１」は、最終レベルのノードであるため、ノード「１」、レベル「６」を新レベルテーブルに登録する。
【０３８３】
続いて、ＢＤＤ構築部３６０ｆは、第１レベルテーブル３５１の次のエントリ（図６１の第１レベルテーブル３５１の６段目）をカレントエントリに設定する。カレントエントリのノード「０」は、最終レベルのノードであるため、ノード「０」、レベル「６」を新レベルテーブルに登録する（図６２のステップＳ４０３）。
【０３８４】
ＢＤＤ構築部３６０ｆは、新レベルテーブルの不定最終ノード「Ｃｘ」、「Ａｘ」のレベルを最終レベル「６」に設定する。また、ＢＤＤ構築部３６０ｆは、第１遷移テーブル３５２の先頭エントリをカレントエントリとし、ノード「Ｄ」、論理値「０」の遷移先ノード「Ｂ」を得る。遷移先ノード「Ｂ」の計算コストは所定値未満であるため、第１遷移テーブル３５２をそのままにする（図６３のステップＳ４０４）。
【０３８５】
ＢＤＤ構築部３６０ｆは、第１遷移テーブル３５２の２段目のエントリをカレントエントリとし、ノード「Ｄ」、論理値「１」の遷移先ノード「Ｃ」を得る。遷移先ノード「Ｃ」の計算コストは、所定値以上であるため、ＢＤＤ構築部３６０ｆは、遷移先ノード「Ｃ」を遷移先ノード「Ｃ？」に書き換える（図６３のステップＳ４０５）。
【０３８６】
続いて、ＢＤＤ構築部３６０ｆは、第１遷移テーブル３５２の３段目のエントリをカレントエントリとし、ノード「Ｃ」、論理値「０」の遷移先ノード「Ｂ」を得る。ノード「Ｃ」の計算コストは、所定値以上であり論理値が「０」であるため、ＢＤＤ構築部３６０ｆは、不明論理ノード「Ｃ？」、論理値「０」、不定最終ノード「Ｃｘ」を第１遷移テーブル３５２に登録する（図６４のステップＳ４０６）。
【０３８７】
続いて、ＢＤＤ構築部３６０ｆは、第１遷移テーブル３５２の４段目のエントリをカレントエントリとし、ノード「Ｃ」、論理値「１」の遷移先ノード「１」を得る。ノード「Ｃ」の計算コストは、所定値以上であり、論理値が「１」であるため、ＢＤＤ構築部３６０ｆは、不明論理ノード「Ｃ？」、論理値「１」、読み出したノード「Ｃ」を第１遷移テーブル３５２に登録する（図６４のステップＳ４０７）。
【０３８８】
ＢＤＤ構築部３６０ｆは、第１遷移テーブル３５２の５段目のエントリをカレントエントリとし、ノード「Ｂ」、論理値「０」の遷移先ノード「０」を得る。遷移先ノード「０」の計算コストは、所定値未満であるため、ＢＤＤ構築部３６０ｆは、第１遷移テーブル３５２をそのままにする。
【０３８９】
続いて、ＢＤＤ構築部３６０ｆは、第１遷移テーブル３５２の６段目のエントリをカレントエントリとし、ノード「Ｂ」、論理値「１」の遷移先ノード「Ａ」を得る。遷移先ノード「Ａ」の計算コストは、所定値以上であるため、ＢＤＤ構築部３６０ｆは、遷移先を「Ａ？」に書き換える（図６５のステップＳ４０８）。
【０３９０】
ＢＤＤ構築部３６０ｆは、第１遷移テーブル３５２の７段目のエントリをカレントエントリとし、ノード「Ａ」、論理値「０」の遷移先ノード「０」を得る。ノード「Ａ」の計算コストは、所定値以上であり、論理値が「０」であるため、ＢＤＤ構築部３６０ｆは、不明論理ノード「Ａ？」、論理値「０」、不定最終ノード「Ａｘ」を第１遷移テーブル３５２に登録する。
【０３９１】
続いて、ＢＤＤ構築部３６０ｆは、第１遷移テーブル３５２の８段目のエントリをカレントエントリとし、ノード「Ａ」、論理値「１」の遷移先ノード「１」を得る。ノード「Ａ」の計算コストは、所定値以上であり、論理値が「１」であるため、ＢＤＤ構築部３６０ｆは、不明論理ノード「Ａ？」、論理値「１」、読み出したノード「Ａ」を第１遷移テーブル３５２に登録する（図６５のステップＳ４０９）。そして、ＢＤＤ構築部３６０ｆは、新レベルテーブルによって、第１レベルテーブル３５１を更新する。
【０３９２】
図５８の説明に戻ると、ＢＤＤ変換部３５０ｇは、第１の２分木を第２の２分木となるように、第１ダイアグラムデータ３５０ｉを変換して第２ダイアグラムデータ３５０ｊを作成する手段である。なお、第１ダイアグラムデータ３５０ｉを第２ダイアグラムデータ３５０ｊに変換する手法は、実施例１に示したＢＤＤ変換部１６０ｆあるいは実施例２に示したＢＤＤ変換部２６０ｆと同様である。
【０３９３】
ダイアグラム実行部３６０ｈは、論理値テーブル３５０ｇと、第２ダイアグラムデータ３５０ｊとを比較して、最終的な論理値が「１（真）」であるか否かを判定する手段である。
【０３９４】
そして、ダイアグラム実行部３６０ｈは、判定結果が「１」となったデータ種別に対応する返答項目を評価結果テーブル３５０ｋから検出し、検出した返答項目を検索結果データ３５０ｌとして記憶部３５０に記憶する。例えば、データ種別「Ｄａｔａ３」の判定結果が「１」となる場合には、返答項目「第三開発部」を検索結果データ３５０ｌとして記憶する。
【０３９５】
ところで、ダイアグラム実行部３６０ｈが、論理値テーブル３５０ｇを参照し、論理値が「？」となる論理変数（計算コストが所定値以上となる論理変数）が存在する場合には、計算コストの高い論理変数に対応する不明論理変数を定義し、該当する論理変数および不明論理変数の値を「０」した状態で、ビット列を作成し、第２ダイアグラムデータ３５０ｊと比較して、最終的な真偽を求める。
【０３９６】
また、ダイアグラム実行部３６０ｈは、最終的な論理値を算出する過程で、論理値が「？」となる論理変数の値が必要となった場合には、該当する論理変数の論理値を算出する（論理値算出部３６０ｄに論理変数の論理値の算出要求を行う）。そして、該当する論理変数の論理値が「１」の場合には、論理変数「１」、不明論理変数「１」としてビット列を作成し、第２ダイアグラムデータ３５０ｊと比較して、最終的な真偽を求める。
【０３９７】
一方、該当する論理変数の論理値が「０」の場合には、論理変数「０」、不明論理変数「１」としてビット列を作成し、第２ダイアグラムデータ３５０ｊと比較して、最終的な真偽を求める。
【０３９８】
例えば、論理変数「Ｈ、Ｇ、Ｆ、Ｅ、Ｄ、Ｃ、Ｂ、Ａ」の論理値のビット列を作成して、最終的な真偽を判定する場合に、「H＝1、G＝1、F＝1、E＝1、D＝0、C＝?、B＝1、A＝?」の場合（論理変数Ａ、Ｃの計算コストが所定値以上の場合）には、不明論理変数「Ｃ？」、「Ａ？」を定義する。そして、論理変数「Ｃ＝０」、不明論理変数「Ｃ？＝０」、論理変数「Ａ＝０」、不明論理変数「Ａ？＝０」として、ビット列「H＝1、G＝1、F＝1、E＝1、D＝0、C?＝0、C＝0、B＝1、A?＝0、A＝0」を作成する。
【０３９９】
一例として、第２の２分木を図５７の下段に示す第２の２分木であるとし、かかる第２の２分木と、ビット列「H＝1、G＝1、F＝1、E＝1、D＝0、C?＝0、C＝0、B＝1、A?＝0、A＝0」とを比較すると、初期ノード「Ｈ」からノード「１」に遷移する。従って、論理変数「Ｃ」、「Ａ」の論理値を求めなくとも、最終的な真偽を求めることができる。
【０４００】
一方、論理変数「Ｈ、Ｇ、Ｆ、Ｅ、Ｄ、Ｃ、Ｂ、Ａ」の論理値のビット列を作成して、最終的な真偽を判定する場合に、「H＝1、G＝1、F＝1、E＝0、D＝1、C＝?、B＝1、A＝?」の場合には、不明論理変数「Ｃ？」を定義する。そして、論理変数「Ｃ＝０」、不明論理変数「Ｃ？＝０」、論理変数「Ａ＝０」、不明論理変数「Ａ？＝０」として、ビット列「H＝1、G＝1、F＝1、E＝0、D＝1、C＝0、C?＝0、B＝1、A?＝0、A＝0」を作成する。
【０４０１】
第２の２分木を図５７の下段に示す第２の２分木であるとし、かかる第２の２分木と、ビット列「H＝1、G＝1、F＝1、E＝0、D＝1、C?＝0、C＝0、B＝1、A?＝0、A＝0」とを比較すると、初期ノード「Ｈ」から不定最終ノード「Ｃｘ」に遷移する。この場合には、論理変数「Ｃ」の論理値を算出する必要がある。ここでは、論理変数「Ｃ」の論理値を算出した結果、論理変数「Ｃ」の論理値が「１」であったとすると、「Ｃ＝１」、「Ｃ？＝１」となる。
【０４０２】
ダイアグラム実行部３６０ｈは、不定最終ノード「Ｃｘ」の一つ前のノード「Ｄ」にビット列「D＝1、C?＝1、C＝1、B＝1」を入力すると、ノード「Ｄ」からノード「１」に遷移する。従って、論理変数「Ａ」の論理値を求めなくても、最終的な真偽を求めることができる。
【０４０３】
検索結果出力部３６０ｉは、記憶部３５０に記憶された検索結果データ３５０ｌを端末装置６０（図３参照）に送信する手段である。端末装置６０は、検索結果データ３５０ｌを受信した場合に、受信した検索結果データ３５０ｌをモニタ画面に出力する。
【０４０４】
次に、本実施例３にかかる検索装置３００の処理手順について説明する。図６６は、本実施例３にかかる検索装置３００の処理手順を示すフローチャートである。同図に示すように、検索装置３００は、検索クエリを受信し（ステップＳ４１１）、検索クエリ分解部３６０ａが、分解検索クエリ３５０ｃを生成する（ステップＳ４１２）。
【０４０５】
続いて、計算量見積部３６０ｂが、各論理変数の計算量（計算コスト）を見積り（ステップＳ４１３）、抽出結果テーブル生成部３６０ｃが、分解検索クエリ３５０ｃに対応するデータを抽出して抽出結果テーブル３５０ｆに登録し（ステップＳ４１４）、論理値算出部３６０ｄが、計算量（計算コスト）が閾値未満となる論理変数の論理値を算出する（ステップＳ４１５）。
【０４０６】
続いて、ＢＤＤ構築部３６０ｆがＢＤＤ入力順序を決定し（ステップＳ４１６）、ＢＤＤ構築処理１およびＢＤＤ構築処理２を実行する（ステップＳ４１７、４１８）。ＢＤＤ変換部３６０ｇは、ＢＤＤ変換処理を実行することにより、第１ダイアグラムデータ３５０ｉを第２ダイアグラムデータ３５０ｊに変換する（ステップＳ４１９）。
【０４０７】
そして、ダイアグラム実行部３６０ｈは、論理式判定ダイアグラム実行処理を実行し（ステップＳ４２０）、評価結果データを格納し（ステップＳ４２１）、検索結果出力部３６０ｉが、返答項目出力処理を実行する（ステップＳ４２２）。
【０４０８】
ここで、図６６のステップＳ４１７に示したＢＤＤ構築処理１は、図３５に示したＢＤＤ構築処理と同様である。また、図６６のステップＳ４２２に示した返答項目出力処理は、図４４に示した返答項目出力処理と同様である。
【０４０９】
次に、図６６のステップＳ４１８に示したＢＤＤ構築処理２について説明する。図６７および図６８は、本実施例３にかかるＢＤＤ構築処理２の処理手順を示すフローチャートである。図６７および図６８の処理を実行することにより、計算コストの高い論理変数に対応する不明論理ノードおよび不定最終ノードが第１ダイアグラムデータ３５０ｉに組み込まれる。図６７に示すように、ＢＤＤ構築部３６０ｆが第１レベルテーブル３５１の先頭エントリをカレントエントリとし、現在のレベルを「０」に設定し（ステップＳ４３１）、カレントエントリのレベルが最終レベルか否かを判定する（ステップＳ４３２）。
【０４１０】
カレントエントリが最終レベルの場合には（ステップＳ４３３，Ｙｅｓ）、新レベルテーブルに、読み出したノード、現在のレベル、論理変数を登録し（ステップＳ４３４）、ステップＳ４４１に移行する。
【０４１１】
カレントエントリが最終レベルではない場合には（ステップＳ４３３，Ｎｏ）、計算コストが所定値以上か否かを判定し（ステップＳ４３５）、所定値未満の場合には（ステップＳ４３６，Ｎｏ）、ステップＳ４３９に移行する。
【０４１２】
一方、計算コストが所定値以上の場合には（ステップＳ４３６，Ｙｅｓ）、新レベルテーブルに、読み出した論理変数に対応した不明論理ノード、現在のレベル、論理変数と、不定最終ノード（読み出した論理変数に対応する不定最終ノード）、論理変数とを登録する（ステップＳ４３７）。
【０４１３】
そして、ＢＤＤ構築部３６０ｆは、現在のレベルに１を加算し（ステップＳ４３８）、新レベルテーブルに、読み出したノード、現在のレベル、論理変数を登録し（ステップＳ４３９）、現在のレベルに１を加算する（ステップＳ４４０）。
【０４１４】
ＢＤＤ構築部３６０ｆは、第１レベルテーブル３５１中の全てのエントリを選択したか否かを判定し（ステップＳ４４１）、全てを選択していない場合には（ステップＳ４４２，Ｎｏ）、カレントエントリを次のエントリに設定し（ステップＳ４４３）、ステップＳ４３２に移行する。
【０４１５】
第１レベルテーブル３５１中の全てのエントリを選択した場合には（ステップＳ４４２，Ｙｅｓ）、図６８において、仮登録されているノード（不定最終ノード）のレベル項目に現在のレベル（最終レベル）を登録し（ステップＳ４４４）、第１遷移テーブル３５２の先頭エントリをカレントエントリに設定する（ステップＳ４４５）。
【０４１６】
続いて、ＢＤＤ構築部３６０ｆは、遷移先ノードに対応する論理変数の計算コストが所定値以上か否かを判定し（ステップＳ４４６）、所定値未満の場合には（ステップＳ４４７，Ｎｏ）、ステップＳ４４９に移行する。
【０４１７】
遷移先ノードに対応する論理変数の計算コストが所定値以上の場合には（ステップＳ４４７，Ｙｅｓ）、遷移先項目を遷移先ノードに対応する論理変数の不明論理ノードに書き換え（ステップＳ４４８）、カレントエントリのノードに対応する論理変数の計算コストが所定値以上か否かを判定する（ステップＳ４４９）。
【０４１８】
カレントエントリのノードに対応する論理変数の論理値の計算コストが所定値未満の場合には（ステップＳ４５０，Ｎｏ）、ステップＳ４５５に移行する。一方、ノードに対応する論理変数の論理値の計算コストが所定値以上の場合には（ステップＳ４５０，Ｙｅｓ）、論理値が０か否かを判定する（ステップＳ４５１）。
【０４１９】
論理値が１の場合には（ステップＳ４５２，Ｎｏ）、第１遷移テーブル３５２に、カレントエントリのノードの不明論理ノード、論理値を１、遷移先を、読み出したノード（カレントエントリのノード）とするエントリを追加し（ステップＳ４５３）、ステップＳ４５５に移行する。
【０４２０】
一方、論理値が０の場合には（ステップＳ４５２，Ｙｅｓ）、第１遷移テーブル３５２に、カレントエントリのノードの不明論理ノード、論理値を０、遷移先を、カレントエントリに対応する不定最終ノードとするエントリを追加する（ステップＳ４５４）。
【０４２１】
そして、ＢＤＤ構築部３６０ｆは、カレントエントリが追加されたエントリか否かを判定し（ステップＳ４５５）、追加されたエントリでない場合には（ステップＳ４５６，Ｎｏ）、カレントエントリを次のエントリに設定し（ステップＳ４５７）、ステップＳ４４６に移行する。一方、カレントエントリが追加されたエントリの場合には（ステップＳ４５６，Ｙｅｓ）、ＢＤＤ構築処理２を終了する。
【０４２２】
次に、図６６のステップＳ４２０に示した論理式判定ダイアグラム実行処理について説明する。図６９および図７０は、本実施例３にかかる論理式判定ダイアグラム実行処理の処理手順を示すフローチャートである。図６９に示すように、抽出結果テーブル生成部３６０ｃが、抽出結果テーブル３５０ｆを作成し（ステップＳ４６１）、論理値算出部３６０ｄが、計算量見積テーブル３５０ｄを参照し、計算量の少ない（計算コストが所定値未満の）論理変数の論理値を算出する（ステップＳ４６２）。
【０４２３】
続いて、ダイアグラム実行部３６０ｈは、初期ノードを現在のノードとし、現在のステップを０に設定し（ステップＳ４６３）、第２レベルテーブルを参照し、現在のノードのレベルと論理変数列（ビット列）を取得する（ステップＳ４６４）。
【０４２４】
ダイアグラム実行部３６０ｈは、取得したノードのレベルが最終レベルか否かを判定し（ステップＳ４６５）、ノードのレベルが最終レベルではない場合には（ステップＳ４６６，Ｎｏ）、論理変数列の論理値列を読み出す（ステップＳ４６７）。
【０４２５】
続いて、ダイアグラム実行部３６０ｈは、第２遷移テーブルを参照し、遷移先情報を取得し（ステップＳ４６８）、現在のノードを遷移先のノードに設定し（ステップＳ４６９）、ステップＳ４６６に移行する。
【０４２６】
一方、取得したノードのレベルが最終レベルの場合には（ステップＳ４６６，Ｙｅｓ）、図７０に示すように、最終的な評価値（真または偽）が得られたか否かを判定し（ステップＳ４７０）、最終的な評価値が得られていない場合には（ステップＳ４７１，Ｎｏ）、評価に必要な論理変数の論理値を抽出結果テーブル３５０ｆから算出し、論理値列を更新する（ステップＳ４７２）。そして、論理値を算出した論理変数に対応する不明論理変数を１に設定し（ステップＳ４７３）、現在のノードを一つ前の状態に戻し（ステップＳ４７４）、ステップＳ４６４に移行する。
【０４２７】
ところで、最終的な評価結果を得られた場合には（ステップＳ４７１，Ｙｅｓ）、ノードに割り当てられている真偽値を評価結果テーブル３５０ｋに登録し（ステップＳ４７５）、全ての文書データを選択したか否かを判定する（ステップＳ４７６）。全ての文書データを選択していない場合には（ステップＳ４７７，Ｎｏ）、未選択の文書データを選択し（ステップＳ４７８）、ステップＳ４６３に移行する。一方、全ての文書データを選択した場合には（ステップＳ４７７，Ｙｅｓ）、論理式判定ダイアグラム実行処理を終了する。
【０４２８】
上述してきたように、本実施例３にかかる検索装置３００は、計算量見積部３６０ｂが、各論理変数の計算コストを見積もり、ＢＤＤ構築部３６０ｆが、不明論理変数を利用して計算コストの高い論理変数の論理値を未算出のままの状態にして、ダイアグラム実行部３６０ｈが第２ダイアグラムデータ３５０ｊを評価する。そして、第２ダイアグラムデータ３５０ｊを評価する過程において、計算コストの高い論理変数が必要になった場合（不定最終ノードに遷移した場合）にはじめて、かかる論理変数の論理値を算出するので、第２計算コストの高い論理変数の論理値を算出する機会を減らし、検索装置の処理負荷を軽減させることが出来る。
【０４２９】
なお、上述した本実施例１〜３にかかる検索装置は、一例として、第２遷移テーブル（例えば、図２５参照）を作成し、ノードと論理値との組合せから遷移先となるノードを判定していたが、必ずしも、第２遷移テーブルを作成して、遷移先となるノードを判定しなくてもよい。例えば、ノードと論理値との組合せをビット列で表現し、表現したビット列に対応するメモリアドレスに遷移先のノードを登録しておき、ノードと論理値とが特定された場合に、ノードと論理値との組合せからなるビット列に対応するメモリアドレスを参照することにより、遷移先のノードを特定することができる。
【０４３０】
また、ノードと論理値との組合せをビット列で表現する場合、ダミー値は全ビット列パターンに変換することが出来る。例えば、「１＊＊」は、「１００」、「１０１」、「１１０」、「１１１」に変換することが出来る。
【０４３１】
ところで、本実施例において説明した各処理のうち、自動的に行われるものとして説明した処理の全部または一部を手動的に行うこともでき、あるいは、手動的に行われるものとして説明した処理の全部あるいは一部を公知の方法で自動的に行うこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
【０４３２】
また、図４、図４６、図５８に示した検索装置１００、２００、３００の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。さらに、各装置にて行われる各処理機能は、その全部または任意の一部がＣＰＵおよび当該ＣＰＵにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【０４３３】
図７１は、実施例にかかる検索装置１００（あるいは検索装置２００，３００）を構成するコンピュータ４００のハードウェア構成を示す図である。図７１に示すように、このコンピュータ（検索装置）４００は、入力装置４０１、モニタ４０２、ＲＡＭ（Random  Access  Memory）４０３、ＲＯＭ（Read  Only  Memory）４０４、記憶媒体からデータを読み取る媒体読取装置４０５、他の装置（例えば、端末装置６０）との間でデータの送受信を行う通信装置４０６、ＣＰＵ（Central  Processing  Unit）４０７、ＨＤＤ（Hard  Disk  Drive）４０８をバス４０９で接続して構成される。
【０４３４】
そして、ＨＤＤ４０８には、上記した検索装置１００（あるいは検索装置２００，３００）の機能と同様の機能を発揮する検索プログラム４０８ｂが記憶されている。ＣＰＵ４０７が、検索プログラム４０８ｂを読み出して実行することにより、検索プロセス４０７ａが起動される。ここで、検索プロセス４０７ａは、図４に示した、検索クエリ分解部１６０ａ、抽出結果テーブル生成部１６０ｂ、論理値算出部１６０ｃ、論理式変換部１６０ｄ、ＢＤＤ構築部１６０ｅ、ＢＤＤ変換部１６０ｆ、ダイアグラム実行部１６０ｇ、検索結果出力部１６０ｈに対応する（あるいは、検索プロセス４０７ａは、図４６の制御部２６０に示した各機能部２６０ａ〜２６０ｈ、図５８の制御部３６０に示した各機能部３６０ａ〜３６０ｉに対応する）。
【０４３５】
また、ＨＤＤ４０８は、ＸＭＬデータ１５０ａ、検索クエリ１５０ｂ、分解検索クエリ１５０ｃ、抽出結果テーブル１５０ｄ、論理値テーブル１５０ｅ、変換論理式データ１５０ｆ、第１ダイアグラムデータ１５０ｇ、第２ダイアグラムデータ１５０ｈ、評価結果テーブル１５０ｉ、検索結果データ１５０ｊに対応する各種データ４０８ａを記憶する。（あるいは、各種データ４０８は、図４６に示した各データ２５０ａ〜２５０ｊ、図５８に示した各データ３５０ａ〜３５０ｌに対応する）。ＣＰＵ４０７は、ＨＤＤ４０８に格納された各種データ４０８ａを読み出して、ＲＡＭ４０３に格納し、ＲＡＭ４０３に格納された各種データ４０３ａを利用して、検索クエリを評価する。
【０４３６】
ところで、図７１に示した検索プログラム４０８ｂは、必ずしも最初からＨＤＤ４０８に記憶させておく必要はない。たとえば、コンピュータに挿入されるフレキシブルディスク（ＦＤ）、ＣＤ−ＲＯＭ、ＤＶＤディスク、光磁気ディスク、ＩＣカードなどの「可搬用の物理媒体」、または、コンピュータの内外に備えられるハードディスクドライブ（ＨＤＤ）などの「固定用の物理媒体」、さらには、公衆回線、インターネット、ＬＡＮ、ＷＡＮなどを介してコンピュータに接続される「他のコンピュータ（またはサーバ）」などに検索プログラム４０８ｂを記憶しておき、コンピュータがこれらから検索プログラム４０８ｂを読み出して実行するようにしてもよい。
【０４３７】
上記の実施例を含む実施形態に関し、以下の付記を開示する。
【０４３８】
（付記１）検索装置が、
複数の変数からなる論理条件を含む検索条件を受け付けるステップと、
記憶装置に記憶された各検索対象データを各変数の真偽結果に基づく論理ビット列に変換するステップと、
前記検索条件をＢＤＤ法を用いて、起点変数から所定レベル以上の到達変数まで到達するための各レベルの変数の真偽を示したビット列と前記起点変数との組合せを前記到達変数に対応付けた遷移テーブルを作成するステップと、
遷移先の到達変数を起点変数とし、前記検索対象データの論理ビット列のうち前記起点変数から所定桁数のビット列を取り出し、前記起点変数および前記ビット列の組合せと、前記遷移テーブルとを基にして遷移先となる前記到達変数を特定することにより前記検索対象データの検索条件に関する真偽判定を行うステップと、
を実行することを特徴とする真偽判定方法。
【０４３９】
（付記２）前記起点変数のレベルと前記所定レベルとの差を前記起点変数に対応付けたレベルテーブルを前記記憶装置に記憶させておき、前記真偽判定を行うステップにおいて、前記レベルテーブルに基づいて、前記ビット列の前記所定桁数を決定することを特徴とする付記１に記載の真偽判定方法。
【０４４０】
（付記３）第１の到達変数のレベルが前記所定レベルを超えている場合には、前記第１の到達変数を起点変数とした次の第２の到達変数に遷移するビット列の先頭ビットに、前記第１の到達変数のレベルから前記所定レベルを差し引いた数のダミー値を挿入することで、ビット列の桁数を所定桁数に統一することを特徴とする付記１に記載の真偽判定方法。
【０４４１】
（付記４）前記起点変数と前記到達変数との間に中間変数が含まれ、前記到達変数のレベルが前記所定レベルを超えている場合には、前記所定レベルから、前記到達変数に遷移する一つ前の中間変数のレベルを差し引き、差し引いた値から更に１を差し引いた数のダミー値を前記起点変数から前記到達変数まで遷移するビット列の後ろに挿入することで、ビット列の桁数を所定桁数に統一することを特徴とする付記１または３に記載の真偽判定方法。
【０４４２】
（付記５）前記到達変数を除く遷移先の変数のレベルと遷移元の変数のレベルとのレベル差が２以上の場合には、遷移先の変数のレベルから遷移元の変数のレベルを差し引き、差し引いた値から更に１を差し引いた数のダミー値を遷移元の変数から遷移先の変数に遷移するビット列の後ろに挿入することで、ビット列の桁数を所定桁数に統一することを特徴とする付記１または３に記載の真偽判定方法。
【０４４３】
（付記６）各変数の間にダミー変数を挿入することにより、初期の変数から最終の変数までの遷移回数を統一することを特徴とする付記１、３、４または５に記載の真偽判定方法。
【０４４４】
（付記７）前記遷移テーブルに、変数の論理値が求まっているか否かの状態を示す不明論理変数を追加し、前記起点変数および前記ビット列の組合せと、前記遷移テーブルとを基にして、遷移先となる前記到達変数を特定した結果、前記不明論理変数に対応する変数の論理値が必要となった場合に、論理値の必要となった変数の論理値を算出すると共に、前記不明論理変数の状態を論理値が求まっている状態に設定することを特徴とする付記１〜６のいずれか一つに記載の真偽判定方法。
【０４４５】
（付記８）コンピュータに、
複数の変数からなる論理条件を含む検索条件を受け付ける受付手順と、
記憶装置に記憶された各検索対象データを各変数の真偽結果に基づく論理ビット列に変換する変換手順と、
前記検索条件をＢＤＤ法を用いて、起点変数から所定レベル以上の到達変数まで到達するための各レベルの変数の真偽を示したビット列と前記起点変数との組合せを前記到達変数に対応付けた遷移テーブルを作成する作成手順と、
遷移先の到達変数を起点変数とし、前記検索対象データの論理ビット列のうち前記起点変数から所定桁数のビット列を取り出し、前記起点変数および前記ビット列の組合せと、前記遷移テーブルとを基にして遷移先となる前記到達変数を特定することにより前記検索対象データの検索条件に関する真偽判定を行う判定手順と、
を実行させることを特徴とする真偽判定プログラム。
【０４４６】
（付記９）前記起点変数のレベルと前記所定レベルとの差を前記起点変数に対応付けたレベルテーブルを前記記憶装置に記憶させる記憶手順を更に実行させ、前記判定手順において、前記レベルテーブルに基づいて、前記ビット列の前記所定桁数を決定することを特徴とする付記８に記載の真偽判定プログラム。
【０４４７】
（付記１０）前記作成手順は、第１の到達変数のレベルが前記所定レベルを超えている場合には、前記第１の到達変数を起点変数とした次の第２の到達変数に遷移するビット列の先頭ビットに、前記第１の到達変数のレベルから前記所定レベルを差し引いた数のダミー値を挿入することで、ビット列の桁数を所定桁数に統一することを特徴とする付記８に記載の真偽判定プログラム。
【図面の簡単な説明】
【０４４８】
【図１】周知技術のＢＤＤを説明するための図である。
【図２】本実施例１にかかる検索装置の概要および特徴を説明するための図である。
【図３】本実施例１にかかる検索システムの構成を示す図である。
【図４】本実施例１にかかる検索装置の構成を示す機能ブロック図である。
【図５】本実施例１にかかるＸＭＬデータのデータ構造の一例を示す図である。
【図６】本実施例１にかかる分解検索クエリのデータ構造の一例を示す図である。
【図７】本実施例１にかかる検索クエリのデータ構造の一例を示す図である。
【図８】本実施例１にかかる抽出結果テーブルのデータ構造の一例を示す図である。
【図９】本実施例１にかかる論理値テーブルのデータ構造の一例を示す図である。
【図１０】本実施例１にかかる第１ダイアグラムデータのデータ構造の一例を示す図である。
【図１１】本実施例１にかかる評価結果テーブルのデータ構造の一例を示す図である。
【図１２】本実施例１にかかる検索結果データのデータ構造の一例を示す図である。
【図１３】ＴＯＰスタックとＴｒｕｅスタックとＦａｌｓｅスタックの状態変化を示す図（１）である。
【図１４】ＴＯＰスタックとＴｒｕｅスタックとＦａｌｓｅスタックの状態変化を示す図（２）である。
【図１５】ＴＯＰスタックとＴｒｕｅスタックとＦａｌｓｅスタックの状態変化を示す図（３）である。
【図１６】第１レベルテーブルと第１遷移テーブルの状態変化を示す図（１）である。
【図１７】第１レベルテーブルと第１遷移テーブルの状態変化を示す図（２）である。
【図１８】第１レベルテーブルと第１遷移テーブルの状態変化を示す図（３）である。
【図１９】第１レベルテーブルと第１遷移テーブルの状態変化を示す図（４）である。
【図２０】第１レベルテーブルと第１遷移テーブルの状態変化を示す図（５）である。
【図２１】第１レベルテーブルと第１遷移テーブルの状態変化を示す図（６）である。
【図２２】第１レベルテーブルと第１遷移テーブルの状態変化を示す図（７）である。
【図２３】第１レベルテーブルと第１遷移テーブルの状態変化を示す図（８）である。
【図２４】第１レベルテーブルと第１遷移テーブルの状態変化を示す図（９）である。
【図２５】本実施例１にかかる第２ダイアグラムデータのデータ構造の一例を示す図である。
【図２６】ＢＤＤ変換部の処理を説明するための第１ダイアグラムデータを示す図である。
【図２７】本実施例１にかかるＢＤＤ変換部の処理を説明するための図（１）である。
【図２８】本実施例１にかかるＢＤＤ変換部の処理を説明するための図（２）である。
【図２９】本実施例１にかかるＢＤＤ変換部の処理を説明するための図（３）である。
【図３０】本実施例１にかかるＢＤＤ変換部の処理を説明するための図（４）である。
【図３１】本実施例１にかかるダイアグラム実行部の処理を説明するための図（１）である。
【図３２】本実施例１にかかるダイアグラム実行部の処理を説明するための図（２）である。
【図３３】検索結果データを出力したモニタ画面の一例を示す図である。
【図３４】本実施例１にかかる検索装置の処理手順を示すフローチャートである。
【図３５】本実施例１にかかるＢＤＤ構築処理の処理手順を示すフローチャートである。
【図３６】本実施例１にかかる論理変数対応処理の処理手順を示すフローチャートである。
【図３７】本実施例１にかかるＮＯＴ対応処理の処理手順を示すフローチャートである。
【図３８】本実施例１にかかるＡＮＤ対応処理の処理手順を示すフローチャートである。
【図３９】本実施例１にかかるＯＲ対応処理の処理手順を示すフローチャートである。
【図４０】本実施例１にかかる終了処理の処理手順を示すフローチャートである。
【図４１】本実施例１にかかるＢＤＤ変換処理の処理手順を示すフローチャート（１）である。
【図４２】本実施例１にかかるＢＤＤ変換処理の処理手順を示すフローチャート（２）である。
【図４３】本実施例１にかかる論理式判定ダイアグラム実行処理の処理手順を示すフローチャートである。
【図４４】本実施例１にかかる返答項目出力処理の処理手順を示すフローチャートである。
【図４５−１】本実施例２にかかる検索装置の概要および特徴を説明するための図である。
【図４５−２】ビット列の桁数を所定桁数に統一する場合の処理の概要を説明するための図である。
【図４６】本実施例２にかかる検索装置の構成を示す機能ブロック図である。
【図４７】本実施例２にかかる第２ダイアグラムデータのデータ構造の一例を示す図である。
【図４８】本実施例２にかかるＢＤＤ変換部の処理を説明するための図（１）である。
【図４９】本実施例２にかかるＢＤＤ変換部の処理を説明するための図（２）である。
【図５０】本実施例２にかかるＢＤＤ変換部の処理を説明するための図（３）である。
【図５１】本実施例２にかかるダイアグラム実行部の処理を説明するための図（１）である。
【図５２】本実施例２にかかるダイアグラム実行部の処理を説明するための図（２）である。
【図５３】本実施例２にかかる検索装置の処理手順を示すフローチャートである。
【図５４】本実施例２にかかるＢＤＤ変換処理の処理手順を示すフローチャート（１）である。
【図５５】本実施例２にかかるＢＤＤ変換処理の処理手順を示すフローチャート（２）である。
【図５６】本実施例２にかかる論理式判定ダイアグラム実行処理の処理手順を示すフローチャートである。
【図５７】本実施例３にかかる検索装置の概要および特徴を説明するための図である。
【図５８】本実施例３にかかる検索装置の構成を示す機能ブロック図である。
【図５９】本実施例３にかかる計算量見積テーブルのデータ構造の一例を示す図である。
【図６０】本実施例３にかかる計算量テーブルのデータ構造の一例を示す図である。
【図６１】本実施例３にかかるＢＤＤ構築部の処理を説明するための図（１）である。
【図６２】本実施例３にかかるＢＤＤ構築部の処理を説明するための図（２）である。
【図６３】本実施例３にかかるＢＤＤ構築部の処理を説明するための図（３）である。
【図６４】本実施例３にかかるＢＤＤ構築部の処理を説明するための図（４）である。
【図６５】本実施例３にかかるＢＤＤ構築部の処理を説明するための図（５）である。
【図６６】本実施例３にかかる検索装置の処理手順を示すフローチャートである。
【図６７】本実施例３にかかるＢＤＤ構築処理２の処理手順を示すフローチャート（１）である。
【図６８】本実施例３にかかるＢＤＤ構築処理２の処理手順を示すフローチャート（２）である。
【図６９】本実施例３にかかる論理式判定ダイアグラム実行処理の処理手順を示すフローチャート（１）である。
【図７０】本実施例３にかかる論理式判定ダイアグラム実行処理の処理手順を示すフローチャート（２）である。
【図７１】実施例にかかる検索装置を構成するコンピュータのハードウェア構成を示す図である。
【符号の説明】
【０４４９】
１０ａ  論理値テーブル
２０    ２分木
２０ａ  レベルテーブル
２０ｂ  遷移テーブル
５０    ネットワーク
６０    端末装置
１００，２００，３００    検索装置
１１０，２１０，３１０    入力部
１２０，２２０，３２０    出力部
１３０，２３０，３３０    通信制御ＩＦ部
１４０，２４０，３４０    入出力制御ＩＦ部
１５０，２５０，３５０    記憶部
１５０ａ，２５０ａ，３５０  ＸＭＬデータ
１５０ｂ，２５０ｂ，３５０ｂ  検索クエリ
１５０ｃ，２５０ｃ，３５０ｃ  分解検索クエリ
１５０ｄ，２５０ｄ，３５０ｆ  抽出結果テーブル
１５０ｅ，２５０ｅ，３５０ｇ  論理値テーブル
１５０ｆ，２５０ｆ，３５０ｈ  変換論理式データ
１５０ｇ，２５０ｇ，３５０ｉ  第１ダイアグラムデータ
１５０ｈ，２５０ｈ，３５０ｊ  第２ダイアグラムデータ
１５０ｉ，２５０ｉ，３５０ｋ  評価結果テーブル
１５０ｊ，２５０ｊ，３５０ｌ  検索結果データ
１５１，２５１，３５１    第１レベルテーブル
１５２，２５２，３５２    第１遷移テーブル
１５３    第２レベルテーブル
１５４，２５３    第２遷移テーブル
１６０，２６０，３６０    制御部
１６０ａ，２６０ａ，３６０ａ  検索クエリ分解部
１６０ｂ，２６０ｂ，３６０ｃ  抽出結果テーブル生成部
１６０ｃ，２６０ｃ，３６０ｄ  論理値算出部
１６０ｄ，２６０ｄ，３６０ｅ  論理式変換部
１６０ｅ，２６０ｅ，３６０ｆ  ＢＤＤ構築部
１６０ｆ，２６０ｆ，３６０ｇ  ＢＤＤ変換部
１６０ｇ，２６０ｇ，３６０ｈ  ダイアグラム実行部
１６０ｈ，２６０ｈ，３６０ｉ  検出結果出力部
３５０ｄ  計算量見積テーブル
３５０ｅ  計算量テーブル
３６０ｂ  計算量見積部
４００    コンピュータ
４０１    入力装置
４０２    モニタ
４０３    ＲＡＭ
４０３ａ，４０８ａ  各種データ
４０４    ＲＯＭ
４０５    媒体読取装置
４０６    通信装置
４０７    ＣＰＵ
４０８    ＨＤＤ
４０８ｂ  検索プログラム
４０９    バス
【図１】
2010044523.tif 000003
【図２】
2010044523.tif 000004
【図３】
2010044523.tif 000005
【図４】
2010044523.tif 000006
【図５】
2010044523.tif 000007
【図６】
2010044523.tif 000008
【図７】
2010044523.tif 000009
【図８】
2010044523.tif 000010
【図９】
2010044523.tif 000011
【図１０】
2010044523.tif 000012
【図１１】
2010044523.tif 000013
【図１２】
2010044523.tif 000014
【図１３】
2010044523.tif 000015
【図１４】
2010044523.tif 000016
【図１５】
2010044523.tif 000017
【図１６】
2010044523.tif 000018
【図１７】
2010044523.tif 000019
【図１８】
2010044523.tif 000020
【図１９】
2010044523.tif 000021
【図２０】
2010044523.tif 000022
【図２１】
2010044523.tif 000023
【図２２】
2010044523.tif 000024
【図２３】
2010044523.tif 000025
【図２４】
2010044523.tif 000026
【図２５】
2010044523.tif 000027
【図２６】
2010044523.tif 000028
【図２７】
2010044523.tif 000029
【図２８】
2010044523.tif 000030
【図２９】
2010044523.tif 000031
【図３０】
2010044523.tif 000032
【図３１】
2010044523.tif 000033
【図３２】
2010044523.tif 000034
【図３３】
2010044523.tif 000035
【図３４】
2010044523.tif 000036
【図３５】
2010044523.tif 000037
【図３６】
2010044523.tif 000038
【図３７】
2010044523.tif 000039
【図３８】
2010044523.tif 000040
【図３９】
2010044523.tif 000041
【図４０】
2010044523.tif 000042
【図４１】
2010044523.tif 000043
【図４２】
2010044523.tif 000044
【図４３】
2010044523.tif 000045
【図４４】
2010044523.tif 000046
【図４５−１】
2010044523.tif 000047
【図４５−２】
2010044523.tif 000048
【図４６】
2010044523.tif 000049
【図４７】
2010044523.tif 000050
【図４８】
2010044523.tif 000051
【図４９】
2010044523.tif 000052
【図５０】
2010044523.tif 000053
【図５１】
2010044523.tif 000054
【図５２】
2010044523.tif 000055
【図５３】
2010044523.tif 000056
【図５４】
2010044523.tif 000057
【図５５】
2010044523.tif 000058
【図５６】
2010044523.tif 000059
【図５７】
2010044523.tif 000060
【図５８】
2010044523.tif 000061
【図５９】
2010044523.tif 000062
【図６０】
2010044523.tif 000063
【図６１】
2010044523.tif 000064
【図６２】
2010044523.tif 000065
【図６３】
2010044523.tif 000066
【図６４】
2010044523.tif 000067
【図６５】
2010044523.tif 000068
【図６６】
2010044523.tif 000069
【図６７】
2010044523.tif 000070
【図６８】
2010044523.tif 000071
【図６９】
2010044523.tif 000072
【図７０】
2010044523.tif 000073
【図７１】
2010044523.tif 000074