(57)【要約】［課題］部品間の意味関係と、部品の３次元情報とを利用した、柔軟な検索を可能にする。［解決手段］本発明の実施形態としての検索装置は、部品間に成立する意味関係、および前記部品の３次元情報を記憶する記憶手段と、前記意味関係を利用して部品の条件を定義する第１検索条件と、前記３次元情報とを利用して部品の条件を定義する第２検索条件とを含む入力検索式を解析して構造情報を生成する解析手段と、前記意味関係に基づく検索式を解釈および実行可能な第１検索手段と、前記３次元情報に基づく検索式を解釈および実行可能な第２検索手段と、前記構造情報において前記第１検索条件に対応する部分から第１の検索式を生成し、前記第２検索条件に対応する部分から第２の検索式を生成する生成手段と、前記第１検索手段による前記第１の検索式の検索結果と、前記第２検索手段による前記第２の検索式の検索結果を統合する検索結果統合手段とを備える。
2016079792.tif 000002
【特許請求の範囲】
【請求項１】
３次元空間に配置された部品について、前記部品間に成立する意味関係、および前記部品の３次元情報を記憶する記憶手段と、
前記意味関係を利用して部品の条件を定義する第１検索条件と、前記３次元情報を利用して部品の条件を定義する第２検索条件とを含み、前記第１検索条件と前記第２検索条件を満たす部品の入力検索式を解析することにより、前記入力検索式の構造情報を生成する解析手段と、
前記意味関係に基づく検索式を解釈および実行可能な第１検索手段と、
前記３次元情報に基づく検索式を解釈および実行可能な第２検索手段と、
前記構造情報において前記第１検索条件に対応する部分から、前記第１検索手段により解釈可能な第１の検索式を生成し、前記構造情報において前記第２検索条件に対応する部分から、前記第２検索手段により解釈可能な第２の検索式を生成し、前記第１の検索式と前記第２の検索式の検索結果を統合するための統合情報を生成する生成手段と、
前記第１検索手段による前記第１の検索式の検索結果と、前記第２検索手段による前記第２の検索式の検索結果を前記統合情報に基づき統合することにより、前記入力検索式を満たす部品を特定する検索結果統合手段と、
を備えた検索装置。
【請求項２】
前記統合情報は、前記第１の検索式の検索結果を、前記第２の検索式に適用して、前記第１の検索式の検索結果のうち、前記第２の検索式を満たす検索結果を抽出することを記述したスクリプトであり、前記検索結果統合手段は、前記スクリプトに従って、前記第１の検索式の検索結果に基づき前記第２の検索式を実行することで、前記入力検索式を満たす部品を特定する
請求項１に記載の検索装置。
【請求項３】
前記生成手段は、前記スクリプトを、前記構造情報において前記第２検索条件に対応する部分の最後の文の演算子に基づいて、予め用意されたテンプレートから選択する
請求項２に記載の検索装置。
【請求項４】
前記入力検索式は、複数の文を含み
前記生成手段は、前記文が、予め定めた３次元検索用の関数を含むか否かにより、前記第１検索条件に関連する部分に属するか、前記第２検索条件に関連する部分に属するかを判断する
請求項１ないし３のいずれか一項に記載の検索装置。
【請求項５】
前記第２検索条件は、３次元空間内の指定範囲に前記部品の全部または一部が含まれことを要求する
請求項１ないし４のいずれか一項に記載の検索装置。
【請求項６】
前記第１の検索式は、所定の問い合わせ言語で記述され、前記第２の検索式は、手続型言語で記述された
請求項１ないし５のいずれか一項に記載の検索装置。
【請求項７】
前記構造情報は、前記構文木である
請求項１ないし６のいずれか一項に記載の検索装置。
【請求項８】
前記検索結果統合手段は、前記特定した部品を表す情報を出力する
請求項１ないし７のいずれか一項に記載の検索装置。
【請求項９】
前記検索結果統合手段は、前記特定した部品を表す情報として、前記特定した部品を識別するテキスト、または、前記特定した部品の３次元情報を出力する
請求項８に記載の検索装置。
【請求項１０】
検索式を入力するための入力手段をさらに備え、
前記解析手段は、前記入力手段で入力された検索式を解析する
請求項１ないし９のいずれか一項に記載の検索装置。
【請求項１１】
前記検索結果統合手段により出力された情報を表示する表示手段
をさらに備えた請求項１ないし１０のいずれか一項に記載の検索装置。
【請求項１２】
前記部品を、建物を構成する部品である
請求項１ないし１１のいずれか一項に記載の検索装置。
【請求項１３】
３次元空間に配置された部品について、前記部品間に成立する意味関係、および前記部品の３次元情報を記憶する記憶手段に基づき、前記意味関係を利用して部品の条件を定義する第１検索条件と、前記３次元情報を利用して部品の条件を定義する第２検索条件とを含み、前記第１検索条件と前記第２検索条件を満たす部品の入力検索式を解析することにより、前記入力検索式の構造情報を生成する解析ステップと、
前記構造情報において前記第１検索条件に対応する部分から、前記意味関係に基づく検索式を解釈および実行可能な第１検索手段により解釈可能な形式を有する第１の検索式を生成し、前記構造情報において前記第２検索条件に対応する部分から、前記３次元情報に基づく検索式を解釈および実行可能な第２検索手段により解釈可能な形式を有する第２の検索式を生成し、前記第１の検索式と前記第２の検索式の検索結果の統合手順を表す統合情報を生成する生成ステップと、
前記第１検索手段による前記第１の検索式の検索結果と、前記第２検索手段による前記第２の検索式の検索結果を前記統合情報に基づき統合することにより、前記入力検索式を満たす部品を特定する検索結果統合ステップと
をコンピュータが実行する検索方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、検索装置および検索方法に関する。
【背景技術】
【０００２】
従来の検索技術として、ビル情報モデルに含まれる建物の情報を、ビル情報の意味モデル（例えば、ＩＦＣ（Ｉｎｄｕｓｔｒｙ  Ｆｏｕｎｄａｔｉｏｎ  Ｃｌａｓｓｅｓ，ＩＳＯ１６７３９）に代表されるスキーマにて定義される）に従って検索するものがあった。しかしながら、建物部品の形状および位置といった、建物部品の３Ｄ情報を活用しておらず、柔軟な検索機能を提供しているとは言えなかった。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１３−１９０８４９号公報
【特許文献２】特開２０１３−１７１５７９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本発明の実施形態は、部品間の意味関係と、部品の３次元情報とを利用した、柔軟な検索を可能にしようとするものである。
【課題を解決するための手段】
【０００５】
本発明の実施形態は、記憶手段と、解析手段と、第１検索手段と、第２検索手段と、生成手段と、検索結果統合手段とを備える。【０００６】
前記記憶手段は、３次元空間に配置された部品について、前記部品間に成立する意味関係、および前記部品の３次元情報を記憶する。【０００７】
前記解析手段は、前記意味関係を利用して部品の条件を定義する第１検索条件と、前記３次元情報を利用して部品の条件を定義する第２検索条件とを含み、前記第１検索条件と前記第２検索条件を満たす部品の入力検索式を解析することにより、前記入力検索式の構造情報を生成する。【０００８】
前記第１検索手段は、前記意味関係に基づく検索式を解釈および実行可能である。【０００９】
前記第２検索手段は、前記３次元情報に基づく検索式を解釈および実行可能である。【００１０】
前記生成手段は、前記構造情報において前記第１検索条件に対応する部分から、前記第１検索手段により解釈可能な第１の検索式を生成し、前記構造情報において前記第２検索条件に対応する部分から、前記第２検索手段により解釈可能な第２の検索式を生成し、前記第１の検索式と前記第２の検索式の検索結果を統合するための統合情報を生成する。【００１１】
前記検索結果統合手段は、前記第１検索手段による前記第１の検索式の検索結果と、前記第２検索手段による前記第２の検索式の検索結果を前記統合情報に基づき統合することにより、前記入力検索式を満たす部品を特定する。
【図面の簡単な説明】
【００１２】
【図１】本実施形態に係る検索装置のブロック図。
【図２】クラス図の例を示す図。
【図３】建物内のある箇所の平面図を模式的に示す図。
【図４】検索式を構文解析して得られる構文木を示す図。
【図５】構文木を、up関係を辿った階層構造で表した図。
【図６】ブロック間の階層構造を示す図。
【図７】構文木を２つに分離する例を示す図。
【図８】本実施形態に係る検索装置の全体の動作のフローチャート。
【図９】解析処理の詳細動作のフローチャート。
【図１０】検索式分離処理の詳細な動作のフローチャート。
【図１１】検索処理および統合処理の詳細な動作のフローチャート。
【図１２】検索装置のハードウェア構成例を示す図。
【発明を実施するための形態】
【００１３】
以下、図面を参照しながら、本発明の実施形態について説明する。
【００１４】
図１に、本実施形態に係る検索装置のブロック図を示す。建物情報ＤＢ（記憶手段）１０６には、３次元空間に配置される部品（あるいはオブジェクト）として、建物を構成する部品間に成立する意味関係を表す情報（関係モデル）が記憶されている。また建物情報ＤＢ１０６には、各部品の３次元（３Ｄ）情報あるいは３Ｄモデルが格納されている。３次元情報は、形状情報(geometry)を含む。この形状情報(geometory情報)は、建物の占める空間の絶対座標系にて記述されており、従って、物品の位置情報も含んでいる。建物情報ＤＢ１０６の詳細は後述する。
【００１５】
検索式入力手段２０１は、検索式を入力するためのインターフェイスである。検索式入力手段２０１で入力される検索式は、意味関係を利用して部品の条件を定義する第１検索条件と、３次元情報を利用して部品の条件を定義する第２検索条件とを含み、第１検索条件と第２検索条件を満たす部品を検索するものである。検索式入力手段２０１は、一例として、タッチパネル、マウス、およびキーボード等のユーザにより操作されるインターフェイスでもよいし、検索式が格納された記憶装置でもよいし、記録媒体からデータを読み出す読み出しドライブ等でもよい。記憶装置は、ＳＳＤ、ハードディスク、ＵＳＢメモリ等の永続的に情報を記憶する装置または不揮発性メモリでもよいし、ＤＲＡＭ等の揮発性のメモリでもよい。読み出しドライブは、一例として、ＤＶＤ、ＣＤ−ＲＯＭ等のドライブである。
【００１６】
解析手段１０１は、検索式入力手段２０１に接続されており、検索式入力手段２０１から入力された検索式を構文解析して、検索式の構造情報を生成する。具体的に、検索式分離手段１０２が解釈可能な形式、例えば木構造に変換する。ここでは木構造に変換する場合を想定する。解析手段１０１は、検索式分離手段１０２に接続されており、変換により得られた木構造の検索式を、検索式分離手段１０２に出力する。
【００１７】
検索式分離手段１０２は、解析手段１０１から木構造を受け取り、意味関係に基づく検索に関連する部分と、３Ｄ空間検索（空間検索とも呼ぶ）に関連する部分とに分解し、それぞれから意味関連検索手段１０４（第１検索手段）により解釈可能な検索式（意味関連検索式）および３Ｄ空間検索手段１０５（第２検索手段）により解釈可能な検索式（３Ｄ空間検索式）を生成する。３Ｄ空間検索とは、３Ｄ空間において、３Ｄ情報を利用した検索、例えば、３Ｄ空間において、指定した範囲に含まれるオブジェクト（部品）を検索するものである。範囲の指定は、任意の方法でよく、例えば起点（視点）と、方位と、形状とによって指定してもよいし、３Ｄ空間において複数の範囲の交差領域でもよい。オブジェクトが、指定された範囲に含まれるとは、オブジェクトの全部が当該範囲に含まれるとしてもよいし、オブジェクトの少なくとも一部が当該範囲に含まれるとしてもよい。また、検索式分離手段１０２は、意味関連検索式の検索結果と、３Ｄ空間検索式の検索結果との統合手順を表す統合情報（統合スクリプト）を生成する。統合スクリプトの一形態は、意味関連検索式の実行結果（検索結果）を、３Ｄ空間検索式に適用して、意味関連検索式の検索結果のうち、３Ｄ空間検索式を満たす検索結果を抽出することを記述したスクリプトである。  
【００１８】
意味関連検索手段１０４は、検索式分離手段１０２に接続されており、検索式分離手段１０２から意味関連検索式を受け取る。意味関連検索手段１０４は、当該意味関連検索式に基づき、建物情報ＤＢ１０６を検索し、検索結果として、所望の建物部品（オブジェクト）を取得する。意味関連検索手段１０４は、例えば所定の問い合わせ言語で記述された検索式を解釈および実行可能である。意味関連検索手段１０４の動作は、検索結果統合手段１０３により制御可能である。
【００１９】
３Ｄ空間検索手段１０５は、検索式分離手段１０２に接続されており、検索式分離手段１０２から３Ｄ空間検索式を受け取る。３Ｄ空間検索手段１０５は、当該３Ｄ空間検索式に基づき、建物情報ＤＢ１０６における３Ｄ情報を用いて検索を行う。３Ｄ空間検索手段１０５は、例えば所定の手続型言語で記述された検索式を解釈および実行可能である。３Ｄ空間検索手段１０５の動作は、検索結果統合手段１０３により制御可能である。
【００２０】
検索結果統合手段１０３は、検索式分離手段１０２に接続されており、検索式分離手段１０２から統合スクリプトを受け取る。また検索結果統合手段１０３は、意味関連検索手段１０４と３Ｄ空間検索手段１０５に接続されており、統合スクリプトに基づき、意味関連検索手段１０４の検索結果と３Ｄ空間検索手段１０５の検索結果を統合する。具体的に、検索結果統合手段１０３は、統合スクリプトに従って、意味関連検索式の検索結果に基づき３Ｄ空間検索式を実行することで、検索式入力手段から入力された検索式を満たす部品を特定する。検索結果統合手段１０３は、得られた結果の情報（検索式入力手段２０１で入力された検索式を満たす部品を表す情報）を検索結果表示手段２０２に出力する。
【００２１】
検索結果表示手段２０２は、検索結果統合手段１０３に接続されており、検索結果統合手段１０３から入力された検索結果（部品）を表す情報を表示する。検索結果表示手段２０２は、検索結果を表示する画面装置であり、一例として、液晶表示ディスプレイである。単独の独立したディスプレイでもよいし、携帯端末のディスプレイでもよい。テキストとして出力することもできるし、検索された部品を、３Ｄ画像で表示することもできる。
【００２２】
ここで、前述したように、建物情報ＤＢ１０６には、建物を構成する部品（あるいはオブジェクト）間に成立する意味関係の情報（関係モデル）が記憶されている。関係モデルは、一例としてビル情報モデル（ＢＩＭ：Ｂｕｉｌｄｉｎｇ  Ｉｎｆｏｒｍａｔｉｏｎ  Ｍｏｄｅｌ）である。関係モデルの形式は任意で良いが、一例として、関係モデルが、建物を構成する部品毎にクラス分けされたエンティティと、エンティティ間に成り立つ関係（意味関係）とを含む。例えば、エンティティ間の接続関係を含む意味情報を規定するＩＦＣ（Ｉｎｄｕｓｔｒｙ  Ｆｏｕｎｄａｔｉｏｎ  Ｃｌａｓｓｅｓ，ＩＳＯ１６７３９）をスキーマとしたデータベース（関係モデル）でもよい。この場合、関係モデルは、クラス図によって表現されてもよい。
【００２３】
図２に、ＩＳＯ  １６７３９：２０１３  Ｉｎｄｕｓｔｒｙ  Ｆｏｕｎｄａｔｉｏｎ  Ｃｌａｓｓｅｓ  （ＩＦＣ）  ｆｏｒ  ｄａｔａ  ｓｈａｒｉｎｇ  ｉｎ  ｔｈｅ  ｃｏｎｓｔｒｕｃｔｉｏｎ  ａｎｄ  ｆａｃｉｌｉｔｙ  ｍａｎａｇｅｍｅｎｔ  ｉｎｄｕｓｔｒｉｅｓから抜粋したクラス図を示す。矩形の枠が製品または部品のクラスを表し、矩形の四隅が弧状にカーブしている枠は、クラス間の関係を表すクラス（この例ではＩｆｃＲｅｌＳｐａｃｅＢｏｕｎｄａｒｙ）である。直線の実線で結合された矩形間は、上位から下位方向へ、ｉｓ−ａ関係を表している。例えばＩｆｃＰｒｏｄｕｃｔはＩｆｃＥｌｅｍｅｎｔである（ＩｆｃＰｒｏｄｕｃｔ  ｉｓ  ａｎ  ＩｆｃＥｌｅｍｅｎｔ．）。
【００２４】
意味情報の一例として、例えばドア（ＩｆｃＤｏｏｒ）に接続する部屋（ＩｆｃＳｐａｃｅ）が、関係（ＩｆｃＲｅｌＳｐａｃｅＢｏｕｎｄａｒｙ）によって紐づけられている。具体的に、ドア（ＩｆｃＤｏｏｒ）から部屋（ＩｆｃＳｐａｃｅ）方向へ辿る場合は、プロパティとして、（ＩＮＶ）ＰｒｏｖｉｄｅｓＢｏｕｎｄａｒｉｅｓ  Ｓ［０：？］とＲｅｌａｔｉｎｇＳｐａｃｅとを介して紐付けられ、部屋（ＩｆｃＳｐａｃｅ）からドア（ＩｆｃＤｏｏｒ）方向へ辿る場合は、（ＩＮＶ）ＢｏｕｎｄｅｄＢｙ  Ｓ［０：？］とＲｅｌａｔｅｄＢｕｉｌｄｉｎｇＥｌｅｍｅｎｔとを介して紐付けられる。
【００２５】
「ＡＢＳ」はＡＢＳＴＲＡＣＴのことであり、「ＡＢＳ」が記入された矩形のクラスは、抽象クラスのことである。「ＡＢＳ」が記入されていない矩形のクラスは、インスタンスの生成が可能な通常のクラスである。
【００２６】
以下、具体的な事例に基づき、建物情報ＤＢ１０６について、さらに詳細に説明する。
【００２７】
建物情報ＤＢ１０６では、オブジェクト指向の考え方に従って、建物を構成する部品（インスタンス）が、型（クラス）毎に分類されている。インスタンスは、固有の状態を持つオブジェクトであり、クラスを実体化したものである。また、クラス間の継承に関する関係(前述したis_a関係）、構造上の階層関係（has_a関係）および、クラス間に成立する建物特有の関係(例：接続）が記録されている。また、各部品のプロパティ（属性）に関する情報を有している。
【００２８】
また、前述したように、建物情報ＤＢ１０６は、各部品の形状情報を持っている。この形状情報は、建物の占める空間の絶対座標系にて記述されている。
【００２９】
また建物情報ＤＢ１０６には、オブジェクト指向ＤＢの考え方に従って、検索のための手段が具備されていてもよい。このように検索手段を備えた建物情報ＤＢの例として、BIMserverがある。BIMserverは、ビルの情報を、BIM標準に従って記述されたIFCファイルから読み込み、これをオブジェクト指向の考え方に沿ってデータベースとして保持する。BIMserverは、このデータベースを利用して、ＳＱＬに代表される検索式を実行する検索サービスを提供している。外部の装置は、検索式をＢＩＭサーバに送信し、ＢＩＭサーバから検索結果を受け取る。ＢＩＭをデータベースに保存し、これに対して検索を行う言語の既存技術の例としては、BIMQL（Building Information Model Query Language）がある。
【００３０】
以下、部品（オブジェクト）間に成立する関係（「接続」等の意味関係）に関する情報を利用した検索の例を示す。
（例１）ドアを介して接続する２つの部屋を想定し、２つの部屋の床の高さの差分が２００ｍｍ以上であるドアを見つける検索の例を示す。この検索式の例を、以下に検索式１として示す。検索式は、検索式入力手段２０１から入力する。検索式を直接入力する他、３Ｄモデルエディタを用いるならば、ドアと部屋の接続、床間の関係を３Ｄ図として入力してもよい。この場合、入力された３Ｄ図を、解析手段１０１または別の任意の手段で、検索式に展開する。ここで、検索式は、３Ｄ空間上での具体的な状況を記述するものであり、手続き的な処理または制御構文を持たないものを想定する。説明のため、本実施形態で用いる検索式は、ＳＱＬ風の文法に準拠するものとする。なお、下記のＡｂｓ（）は絶対値を計算する関数である。
＜検索式１＞
Select $Var1
Where $Var1.type == IfcDoor
Rooms = $Var1.ConnectedSpace
Abs(Rooms[0].floor.height ?Rooms[1].floor.height) > 200
【００３１】
IfcDoorは、型（type）が、"Door"であるインスタンスを指定している。この検索式では、Where以下の条件を満たすインスタンスを検索し、Select文で$Var1として返す。インスタンスから接続する部屋（複数）をConnectedSpace プロパティを利用して、$Var1.ConnectedSpaceで取得して、取得した部屋数をRoomsに代入する。取得した部屋Rooms[0]、Rooms[1]のフロアの高さ（Rooms[0].floor.height 、Rooms[1].floor.height）の差の絶対値をAbs()により求め、当該絶対値が20cmより大きいDoorインスタンスを、$Var1として選択している。
【００３２】
（例２）別の例として、建物内のコーナー（角）のうち、鏡が設置されてない角を見つける検索の例を示す。この検索式の例を、以下に検索式２として示す。
＜検索式２＞
Select $Var1
Where $Var1.type == IfcCorner
$Var.Mirror == null
【００３３】
IfcCornerは、型（type）が、"Corner"であるインスタンスを指定している。Mirrorプロパティの値がヌル（null）、すなわち鏡が設置されていないCornerインスタンスを見つけ、$Var1として返している。
【００３４】
次に、３Ｄ空間検索の検索例を示す。例えば、ある起点（視点）から、ある方位に対して、30度の円錐の範囲に含まれるオジェクトを検索する場合の検索式の例を示す。以下の検索式３がその一例である。
＜検索式３＞
Cone =3DCone(poinsts,dir,30)
Objects=3DGetInclude(Cone)
【００３５】
3DCone(poinsts,dir,30)は、起点pointsから、dirの方向に見て30度の円錐を表すオブジェクトを表す。このオブジェクトを代入文により、Coneに与えている。3DInclude(Cone)で、このConeに含まれるオブジェクト（部品）を取得して、代入文により、Objectsに与えている。
【００３６】
ここでは、３Ｄ空間内で指定された範囲に含まれるオブジェクトを取得する例を示したが、指定されたオブジェクト同士が交差する領域を取得する命令（3DIntersect）もある。また、指定されたオブジェクト同士の論理演算、たとえば指定されたオブジェクト同士が交差するか否かの論理演算命令（Intersect）などもある。その他、３Ｄ空間に関する様々な命令が存在する。
【００３７】
以下では、部品間の意味関係の情報を利用した検索（意味関係検索）と、３Ｄ空間検索を組み合わせた例を示す。本実施形態では、このような検索式を検索式入力手段２０１から入力する。この検索式の例を、検索式４に示す。図３に検索式４の内容を模式的に表した建物内のある箇所の平面図を示す。直線上の通路が途中で直角に曲がっており、角部には鏡が配置されている。
＜検索式４＞
--------------------------------------------------
Select $Var1
Where $Var1.Type == IfcCorner
$Var1.Mirror !=null
Connections = $Var.AdjacentConnections
Cone1= 3DCorn(Connections[0].points,Connections[0].dir, 30)
Cone2= 3DCorn(Connections[1].points,Connections[1].dir,30)
Intersect = 3DIntersect(Cone1,Cone2)
3DIsIntersect(Cone1,Cone2)
3DInclude(Intersect, $Var.Mirror.geometory)
(3DIntercept(Connections[0].points,$Var.Mirror.geometory) ||
3DIntercept(Connections[1].points,$Var.Mirror.geometory))
--------------------------------------------------
【００３８】
この事例では、角(IfcCorner)に鏡が設置してある場合でも、視界を遮る他のオブジェクト（障害物）により、角につながる経路から鏡が見えないこととなる角を検索している（なお図３では障害物を明示していない）。検索式入力手段２０１では、上記の検索式を直接入力してもよいし、３Ｄエディタを用いて、角に鏡が設置してあるが、角に向かう経路からの視野角で鏡が見えない場合を、３Ｄ画面で定義して、これを検索式に３Ｄエディタまたは別の変換アプリケーションにより展開して、入力してもよい。
【００３９】
IfcCornerは、型（type）が、"Corner"であるインスタンスを指定している。この検索式では、Where以下の条件を満たすインスタンスを検索し、Select文で$Var1として返す。$Var1.Mirror !=nullは、Mirrorプロパティの値がヌル（null）でない、すなわち鏡が設置されていることを示す。「!」は否定を表す。
【００４０】
$Var.AdjacentConnectionsは、角の接続点(Connections)を表し、これをConnectionsとして取得している。ここでは２つの接続点Connections[0]およびConnections[1]が取得される。
【００４１】
3DCorn(Connections[0].points,Connections[0].dir, 30)は、接続点Connections[0]の位置または座標点（Connections[0].points）から、当該接続点に設定されている方向（Connections[0].dir）に見て、30度の円錐を指し、これをCone1に入力している。
【００４２】
同様に、3DCorn(Connections[1].points,Connections[1].dir, 30)は、接続点Connections[1]の位置または座標点（Connections[1].points）から、当該接続点に設定されている方向（Connections[1].dir）に見て、30度の円錐を指し、これをCone2に入力している。
【００４３】
3DIntersect(Cone1,Cone2)は、円錐Cone1,Cone2が交差する空間（交差部）を表し、これをIntersectに入力している。
【００４４】
3DIsIntersect(Cone1,Cone2)は、円錐Cone1,Cone2が交差しているか否かを判定する論理式である。交差していれば真、交差していなければ偽を返す。
【００４５】
3DInclude(Intersect, $Var.Mirror.geometory)は、交差部Intersectが 鏡の幾何形状（$Var.Mirror.geometory）を含んでいるかを判定する論理式である。鏡の幾何形状を含んでいれば真、含んでいなければ偽を返す。幾何形状を含んでいるとは、ここでは幾何形状の全てを包含している場合を想定しているが、一部が包含されている場合を指すように定義してもよい。
【００４６】
3DIntercept(Connections[0].points,$Var.Mirror.geometory)は、接続点の位置（Connections[0].points）と、鏡の幾何形状との間に、視界を阻害しているオブジェクト（障害物）があるかを判定する論理式である。障害物があれば真、なければ偽を返す。
【００４７】
同様に、3DIntercept(Connections[1].points,$Var.Mirror.geometory)は、接続点の位置（Connections[1].points）と、鏡の幾何形状との間に障害物があるかを判定する論理式である。障害物があれば真、なければ偽を返す。
【００４８】
「||」は、論理和（OR）を表す。
よって、 (3DIntercept(Connections[0].points,$Var.Mirror.geometor) ||
3DIntercept(Connections[1].points,$Var.Mirror.geometory))
は、接続点の位置（Connections[0].points）と、鏡の幾何形状との間、および接続点の位置（Connections[1].points）と、鏡の幾何形状との間の少なくとも一方に障害物がある場合に真を返す。それ以外の場合は、偽を返す。
【００４９】
上述の検索式では、上記のすべての条件が真となるようなインスタンスを検索する。
【００５０】
検索式４は、ＳＱＬ風に宣言的に記述されるが、３Ｄ空間検索の部分は、手続き型の処理が行われるので、後述するように、３Ｄ空間検索の部分と、そうでない部分（意味関連検索の部分）に分離して、それぞれに適合した（すなわち、意味関連検索手段および３Ｄ空間検索手段により解釈可能な）検索式を生成する。
【００５１】
解析手段１０１は、検索式を解析して、検索式の構造情報を生成する。具体的に、検索式の構造情報として、検索式を、検索式の文法に従った構文木に展開する、検索式に不整合またはエラーがある場合は、この旨を、表示装置を介してユーザに通知してもよい。構文木の生成は、既存の任意の手法を用いればよく、具体例については後述する。
【００５２】
検索式分離手段１０２は、構文木を解析し、意味関連検索に係る部分（部分木）と、３Ｄ空間検索に係る部分（部分木）に分離し、それぞれから意味関連検索式と３Ｄ空間検索式（３Ｄ空間検索関数）を生成する。また、検索式分離手段１０２は、意味関連検索式と３Ｄ空間検索式の統合手順を表す情報（統合スクリプト）を生成する。
【００５３】
上述した検索式４から構文木を生成し、それぞれ意味関連検索に係る部分（部分木）と、３Ｄ空間検索に係る部分（部分木）に分離し、それぞれから意味関連検索式と３Ｄ空間検索式（３Ｄ空間検索関数）を生成する例を以下に示す。
【００５４】
＜意味関連検索式１＞
Select $Var1, $Connections
Where $Var1.Type == IfcCorner
$Var1.Mirror !=null
$Connections = $Var1.AdjacentConnections
【００５５】
$Var1, $Connectionsは、以下の３Ｄ空間検索関数への引数cornerおよびconnectionsとしてそれぞれ渡される。意味関連検索式の読み方は、前述した説明から自明であるため省略する。なお、意味関連検索式で取得される角は、１つとは限らず、建物内に鏡のない角が複数あれば、複数の角が取得される。意味関連検索式１は、所定の問い合わせ言語で記述される。
【００５６】
＜３Ｄ空間検索関数１＞
function 3Dfunc1(corner,connections){
var Cone1= 3DCorn(connections[0].points,connections[0].dir,30)
var Cone2= 3DCorn(connections[1].points,connections[1].dir,30)
Intersect = 3DIntersect(Cone1,Cone2)
if (3DIsIntersect(Cone1,Cone2) &&
3DInclude(Intersect, corner.Mirror.geometory) &&
(3DIntercept(connections[0].points,corner.Mirror.geometor) ||
3DIntercept(connections[1].points,corner.Mirror.geometory)))
return true;
else
return false;
}
【００５７】
３Ｄ空間検索関数は、手続き型言語の関数形式で表現され、かつ変数定義や、条件文から構成されている。この関数は、戻り値として、真（true）または偽（false）を返す。関数3Dfunc1は、cornerとconnectionsを引数に有し、これらを意味関連検索式の実行結果（検索結果）として受け取る。
【００５８】
２つの円錐3DCorn(conns[0].points,connections[0].dir, 30)、
3DCorn(conns[1].points,connections[1].dir,30)を、それぞれCone1およびCone2に代入している。Cone1およびCone2は、それぞれvarによって定義されている。
3DIsIntersect(Cone1,Cone2)が成立し、
かつ3DInclude(Intersect, corner.Mirror.geometory)が成立し、
かつ、(3DIntercept(conns[0].points,corner.Mirror.geometory) ||
3DIntercept(conns[1].points,corner.Mirror.geometory)))が成立した場合、真（true）が返され、それ以外の場合は、偽（false）が返される。
【００５９】
また検索式分離手段１０２は、意味関連検索式と３Ｄ空間検索式の統合手順を表す情報（統合スクリプト）を生成する。以下は統合スクリプトの例である。
＜統合スクリプト１＞
(let res1 意味関連検索結果
(booleanfilter 
(map (fun x (3Dfunc1 (get2nd x))) res1)
(map (get1st res1))
)
)
【００６０】
統合スクリプトの処理では、集合演算（map処理）とフィルタ処理（booleanfilter処理）が行われる。統合スクリプトは、本実施形態では関数型言語風の記述を採用しているが、他の形式で記述してもかまわない。
【００６１】
“()”はリストを表し、リストの最初が、“union”, “map”, “let”, “get1st”, “get2nd”, “booleanfilter”であるものは、以下の意味をもつ特別なリストであるとする（なお、上記の例では、“union”は含まれていない）。
・(let a b)はbを変数aに代入する
・(union リスト１  リスト２）は、リスト１，２の和集合を、リストとして計算する。例えば、union(a,b)(a,c)の結果は、(a,b,c)となる。
・mapは 、f()内の各要素についてf()を適用し、その結果の集合を取るもので、(map fun1 (a b c d))の場合、(fun1(a), fun1(b), fun1(c), fun1(d))となる。
・(get1st (a b))は(a)を得、(get2nd (a b))は(b)を得るものとする
・(booleanfilter (true false false true) (1 2 3 4))は、true/falseに応じて、(1 2 3 4)をフィルタリングする。具体的に(1 2 3 4)のうち、対応する値がtrueの要素のみを取り出す。この場合、(1 4)を得る。
・(map (fun x (3Dfunc1 (get2nd x))) res1) のfun xは無名関数を定義する。簡単な例として、 (fun x x*2)を考える。これは 無名関数(x)=x*2  を意味する。この場合、(map (fun x x*2) (1 2 3 4))は、(map 無名関数 (1 2 3 4))になり、さらにこれは、(無名関数(1) 無名関数(２) 無名関数(３) 無名関数(４))となる。無名関数(x)=x*2に相当するため、 (2 4 6 8)が得られる。同様にして、(map (fun x (3Dfunc1 (get2nd x))) res1)も考えればよい。
【００６２】
意味関連検索手段１０４は、意味関連検索式１を元に検索を行い、検索結果の集合（統合スクリプトの「意味関連検索結果」に対応）を得る。検索結果の集合の各要素は、3Dfunction1の引数となり、それぞれ（$Var1,Connections）である。検索結果の集合を、検索結果統合手段１０３に渡す。
【００６３】
ここで、統合スクリプトに記載されているmapおよびbooleanfiterの処理について簡単な事例で説明する。
map f(a,b,c,d)は、f()内の各要素についてf()を適用し、その結果の集合を取る処理であり、この場合、{f(a),f(b),f(c),f(d)}が得られる。
booleanfilter {false,true,true,false}{a,b,c,d}は、{a,b,c,d}のうち、対応する値が真（true）の要素のみを取り出し、この場合、(b,c)となる。
従って、
booleanfilter
map f(a,b,c,d)
{a,b,c,d}
は、
booleanfilter
{f(a),f(b),f(c),f(d)}
{a,b,c,d}と表される。さらに、f(a),f(b),f(c),f(d)が、それぞれfalse,true,true,falseであれば、
booleanfilter
{false,true,true,false}
{a,b,c,d}となり、
最終的に(b,c)が得られる。
【００６４】
検索結果統合手段１０３は、意味関連検索手段１０４の出力である検索結果の集合に対して、map関数が示すように、当該集合内の全ての要素（検索結果）に、３Ｄ空間検索手段１０５を用いて計算を実施する。例えば、意味関連検索手段１０４の出力である検索結果集合の要素数が３の場合、すなわち、意味関連検索結果が｛要素１、要素２、要素３｝の場合は、3Dfunc1（要素１）、3Dfunc1（要素２）、3Dfunc1（要素３）を計算する。
【００６５】
３Ｄ空間検索手段１０５は、意味関連検索手段１０４の検索結果に基づき与えられた引数に対して、３Ｄ空間検索を実施（先に示した３Ｄ検索関数１を実施）し、結果をtrueまたはfalseで返す。上記の例では、3Dfunc1（要素１）、3Dfunc1（要素２）、3Dfunc1（要素３）のそれぞれを計算し、結果をtrueまたはfalseで返す。
【００６６】
検索結果統合手段１０３は、３Ｄ空間検索手段１０５から返された検索結果の集合（trueまたはfalseの要素から構成される集合から）に基づき、booleanfilterにより、trueに対応する、意味関連検索手段１０４の検索結果を選択する。上記の例では、3Dfunc1（要素１）、3Dfunc1（要素２）、3Dfunc1（要素３）がそれぞれtrue,false,trueであったとすると、
booleanfilter
{ true,false,true }
{要素１、要素２、要素３}
からtrueの要素が選択され、{要素１、要素３}となる。
【００６７】
このように、建物情報ＤＢ１０６に対する検索を、３Ｄ空間検索に関連する部分と、３Ｄ空間検索に関連しない部分（意味関連検索に関連する部分）に分離し、それぞれを統合させて、所望の検索結果を得ることができる。
【００６８】
次に、別の例として、検索式入力手段２０１から、以下の検索式５が入力された場合の処理を示す。
＜検索式５＞
Select $Var1,Objects
Where $Var1.Type == IfcCorner
$Var1.Mirror !=null
Connections = $Var.AdjacentConnections
Cone1= 3DCorn(Connections[0].points,Connections[0].dir, 30)
Objects = 3DGetInclude(Cone1)
【００６９】
Select文で、Objectsが追加されている。末尾の文では、3DGetInclude(Cone1)により円錐（Cone1）内に含まれるオブジェクトを取得して、変数Objectsに代入している。取得されるオブジェクトの個数は０または１つとは限らず、複数の場合もある。検索式５では、鏡が設置された角について、当該角の接続点から、ある方向（dir）を見たときの30度の円錐内に含まれるオブジェクトを取得し、当該角のインスタンス（$Var1）と、取得されたオブジェクト（Objects）を返す。
【００７０】
解析手段１０１は、検索式５を構文解析して、構文木を生成する。図４に、検索式５を構文解析して得られる構文木を示す。なお、“eq”、“assign”、“and”等は、演算子、すなわち分の意味を表す情報である。“3dassign”および“3dfunc”は構文解析の結果、３Ｄ空間検索に関する文であると解析されたことを指している。図４に示すように構文木は１３個の文から構成される。
【００７１】
図４において、“ID”は文の番号、“OP”は演算子、“args”は引数、“up”はこの文の上位の文のID、“invars”は文が参照する変数リスト、“outvars”は文が出力する変数リストであるとする。ここで論理演算子(and等)は引数として、下位の文ＩＤがリストとして与えられているものとする。また、演算子が3dassigneであるＩＤ１０の{"Cone1",11}等の「11」は、文ＩＤが１１の文を指す。構文木を、up関係を辿った階層構造で表すと図５のようになる。
【００７２】
検索式分離手段１０２は、解析された構文木を、意味関連検索に関する部分（部分木）と、３Ｄ空間検索に関連する部分（部分木）に分解し、それぞれを意味関連検索式と、３Ｄ空間検索関数（３Ｄ空間検索式）に展開する。また検索式分離手段１０２は、意味関連検索式および３Ｄ空間検索式の検索結果を統合するための統合スクリプトを生成し、統合スクリプトを検索結果統合手段１０３に渡す。以下、より具体的に示す。
【００７３】
構文木の中で、３Ｄ空間検索に関連する部分(3dassign,3dfunc)を特定し、構文木をブロック(BLK)という単位で分離する。ここで構文木の全体を全体ブロックBLK0と表すと、構文木（BLK0）は、ブロックBLK1およびブロックBLK2の２つに分離できる。すなわち、BLK0、BLK1およびBLK2の階層構造は図６のようになる。
【００７４】
構文木（BLK0）のうち、BLK1の部分木（ブロック）は、図７の枠３０１で示すように文１〜文８までの８個の文からなる。一方、BLK2の部分木（ブロック）は、図７の枠３０２で示すように文９〜１３までの５個の文からなる。このように構文木は、２つブロックに分離できる。
【００７５】
（引数の抽出処理）
各々のブロックの変数invars、outvarsを特定する。この際、ブロック内でoutvarsがinvarsに対応している場合は、これはブロック内での入出力に相当し、特定の対象から除外する。すなわち、ブロック内での入出力でないものを、ブロックのinvars,outvarsとして特定する。この結果、以下のようになる。
BLK0のinvarsは無し（すなわち{}）、outvarsは、{$Var1,Objects}となる。
BLK1のinvarsは無し（すなわち{}）、outvarsは、{$Var1,Connections}となる。
BLK2のinvarsは、{Connections}、outvarsは、{Objects}となる。
【００７６】
（意味関連検索式作成）
引数の抽出処理で特定したBLK1におけるoutvarをselect文の引数に追加する。具体的には、元の検索文のSelect文の引数（$Var1、Objects）を、$Var1,Connectionsに置き換える動作になる。置き換え後の部分木を、SQL風の元の検索式の形式に戻すことにより、以下の意味関連検索式を得る。これにより、ブロック（BLK1）が意味関連検索式へ展開されたことになる。
【００７７】
Select $Var1, Connections
Where $Var1.Type == IfcCorner
$Var1.Mirror !=null
Connections = $Var.AdjacentConnections
【００７８】
（３Ｄ空間検索関数作成）
BLK2のinvarsは、関数の引数に設定する。3dasignの文に基づき代入式を生成する。3dfuncの文の引数を、所定のルールで展開して関数を生成する。本例ではこの関数が代入文の入力側となっている。BLK2のoutvarsは、返り値に設定する（例えばreturn命令でoutvarsを返す）。この結果、以下の３Ｄ空間検索関数（３Ｄ空間検索式）が得られる。これにより、ブロック（BLK2）が３Ｄ空間検索関数へ展開されたことになる。なお、木構造を３Ｄ空間検索関数の形式にするルールは事前に定められている。
【００７９】
function 3Dfunc1(Connections){
var Cone1= 3DCorn(Connections[0].points,Connections[0].dir, 30)
var Objects = 3DGetInclude(Cone1)
return Objects;
}
【００８０】
（統合スクリプト作成）
［ブロック間の変数の依存関係を明確化］
ブロック間の変数の依存関係を把握する。各々のブロックの変数invars、outvarsは、上述したように以下の通りである。
【００８１】
BLK0,{},{$Var1,Objects}
BLK1,{},{$Var1,Connections}
BLK2,{Connections},{Objects}
【００８２】
変数の依存関係を抽出する（変数間のやりとりを分析する）と、BLK1では、$Var1からConnectionsへの依存関係が得られる。BLK2では、ConnectionsからObjectへの依存関係が得られる。よって、Objectsは、最初に与えられる$Var1に１対１対応していることが分かる。
【００８３】
$Var1は複数検索され得るため、全体の返り値の形式は、以下のように、$Var1とObjectsの組みのリストになる。もちろんリストの要素数が１の場合もあり得る。{$Var1,Objects}が１つの要素に相当する。
{{$Var1,Objects},{$Var1,Objects},....{$Var1,Objects}}
【００８４】
［テンプレートの選択］
BLK2の最終出力の文が、演算子が3dassignまたは3dfuncの文であるため、以下の型のテンプレートを選択する。
【００８５】
(let res1 意味関連検索結果
(map 処理 res1)
)
)
【００８６】
上述したように、()はリストを表し、リストの最初が“union”、 “map”、 “let”等の場合は、特別なリストであるとする。“union”、 “map”、 “let”等について、再度簡単に説明すると以下の通りである。
・(let a b)は、bを変数aに代入する。
・(union リスト１  リスト２）は、リスト１，２の和集合をリストとして計算する。
・(map fun1 (a b c d))は、fun1を各要素に展開して、(fun(a) fun(b) fun(c))となる。
・(get1st (a b))は、(a)を得、(get2nd (a b))は、(b)を得る。
【００８７】
［引数の分析］
上述したように、意味関連検索結果が{$Var1,Connections}のリストを返すのに対し、３Ｄ空間検索関数 は Connectionsを入力として、Objectsを出力する。全体の検索結果は、{$Var1,Objects}のリストであるから、意味関連検索結果を
res1={{$Var1,Connections},{$Var1,Connections},...,{$Var1,Connections}}と表すと、リストres1内のそれぞれの要素に対して、当該要素内の１番目の要素（第１サブ要素）と、当該要素内の２番目の要素（第２サブ要素）を３Ｄ空間検索関数に入力して、検索結果の組のリストを得ることになる。
【００８８】
リストres1内のそれぞれの要素に対して、「処理」した結果のリストを得るための記述は以下の通りである。
(map 「処理」  元のリスト=res1)
【００８９】
「処理」が、当該要素内の１番目の要素（第１サブ要素）と、当該要素内の２番目の要素（第２サブ要素）を３Ｄ空間検索関数に入力して検索された結果との組
(fun x ((get1st x) (3dfunc (get2nd x)))
に対応する。fun xは、前述したように無名関数(x)を表す。xは、当該要素を表し、例えば、get1st xは、xの１番目の要素（第１サブ要素）を得る。
よって、最終的に統合スクリプトは、以下のように得られる。
【００９０】
(let res1 意味関連検索結果
(map (fun x ((get1st x) (3dfunc (get2nd x)) res1)
)
【００９１】
なお、上述した説明から理解されるように、「let res1 意味関連検索結果」は、意味関連検索結果{{$Var1,Connections},{$Var1,Connections},...,{$Var1,Connections}}をres1にすべて代入することを意味する。
【００９２】
次に、さらに別の例として、検索式入力手段２０１から、以下の検索式６が入力された場合の処理を示す。検索式５と異なる点として、末尾の文に“In($Var1.Mirror, Objects)”が追加されている。「In($Var1.Mirror, Objects)」は、$Var1.Mirrorが Objects集合に含まれるかを表す。$Var1.Mirrorが Objects集合に含まれることを、集合演算で記述すると、$Var1.Mirror∈Objects、となる。
【００９３】
＜検索式６＞
Select $Var1
Where $Var1.Type == IfcCorner
$Var1.Mirror !=null
Connections = $Var.AdjacentConnections
Cone1= 3DCorn(Connections[0].points,Connections[0].dir, 30)
Objects = 3DGetInclude(Cone1)
In($Var1.Mirror, Objects)
【００９４】
検索式６に対して統合スクリプトを生成するまでの処理を以下に示す。なお、構文木およびその生成過程の説明は省略する。
【００９５】
（統合スクリプト作成）
［テンプレートの選択］
ブロックBLK2の最終出力の文が、演算子が3dassignまたは3dfuncの文でないため、以下の型のテンプレートを選択する。すなわち、最終出力の文は、「In($Var1.Mirror, Objects)」に対応する文であり、これは論理演算の文に相当する(演算子（OP）はinである。)。
【００９６】
(let res1 意味関連検索結果
(booleanfilter 
(map 処理 res1) 結果リスト)
)
)
【００９７】
［引数の分析］
まず、意味関連検索結果が{$Var1,Connections}のリストを返すのに対し、３Ｄ空間検索関数 は Connectionsを入力として、Objectsを出力する。全体の検索結果は、{$Var1 }のリストであるから、意味関連検索結果を
res1={{$Var1,Connections},{$Var1,Connections},...,{$Var1,Connections}}と表すと、リストres1内のそれぞれの要素内の２番目の要素（第２サブ要素）を３Ｄ空間検索関数に入力して、検索結果の組であるtrue/falseのリストを求める。$Var1.Mirrorが Objects集合に含まれていればtrue（真）、含まれていなければfalse（偽）である。そして、true/falseに応じて、trueに対応する要素のみを選択し、さらに選択した要素（すなわち{$Var1,Connections}）の１番目の要素（第１サブ要素）を抽出したリストを、最終的に得る。
【００９８】
リストres1内のそれぞれの要素に対して、「処理」した結果のリストを得るための記述は以下の通りである。
(map 「処理」  元のリスト=res1)
【００９９】
「結果リスト」は、{$Var1,Connections}の１番目の要素（第１サブ要素）のリストであるため
(map get1st res1)
と表される。
【０１００】
「処理」は、３Ｄ空間検索関数に、２番目の要素（第２サブ要素）を入力した結果であるので
(fun x (3dfunc (get2nd x))
と表される。
よって、最終的に、以下の統合スクリプトを得る。
【０１０１】
(let res1 意味関連検索結果
(booleanfilter 
(map (fun x (3dfunc (get2nd x)) res1) 
(map get1st res1))
)
)
【０１０２】
このように、検索式６のように３Ｄ空間検索式の最後が、論理式である場合は、式が成立するか否かに応じて答えを絞り込むbooleanfilterを用いる。
【０１０３】
図８に、本実施形態に係る検索装置の全体の動作のフローチャートを示す。解析手段１０１が、検索式入力手段２０１から入力された検索式に対して解析処理を行い、構文木を生成する（Ｓ１０１）。図９に解析処理の詳細動作のフローチャートを示す。検索式入力部より入力された検索式に対して、構文解析を実施し（Ｓ２０１）、エラーがある場合はエラーを表示終了し（Ｓ２０２）、エラーが無い場合は、構文木を作成して（Ｓ２０３）、終了する。
【０１０４】
次に、図８において、検索式分離手段１０２は、構文木に基づき、検索式分離処理を行う。図１０に、検索式分離処理の詳細な動作のフローチャートを示す。構文木に対して、３Ｄ空間検索に係る部分を特定し（Ｓ３０１）、特定した部分（部分木）を構文木から分離する（Ｓ３０２）。分離した部分から引数を特定（抽出）する（Ｓ３０３）。また、構文木のうち、ステップＳ３０１で特定した部分以外の部分から、意味関連検索式を作成する（Ｓ３０４）。３Ｄ空間検索に係る部分と、抽出した引数とから３Ｄ空間検索関数（３Ｄ空間検索式）を作成する（Ｓ３０５）。最後に、意味関連検索式の検索結果と、３Ｄ空間検索関数の検索結果を統合するための統合スクリプトを生成する（Ｓ３０６）。統合スクリプトの一形態は、意味関連検索式の実行結果（検索結果）を、３Ｄ空間検索式に適用して、意味関連検索式の検索結果のうち、３Ｄ空間検索式を満たす検索結果を抽出することを記述したスクリプトである。なお、本フローのステップの順序は図１０に限定されない。
【０１０５】
次に、図８において、意味関連検索手段１０４および３Ｄ空間検索手段１０５により検索処理を行い、続いて検索結果統合手段１０３が統合処理を行う（Ｓ１０３）。図１１に検索処理および統合処理の詳細な動作のフローチャートを示す。意味関連検索手段１０４が意味関連検索式を用いて意味関連検索を行い（Ｓ４０１）、次に意味関連検索の検索結果と３Ｄ空間検索式に基づき３Ｄ空間検索を実施し（Ｓ４０２）、最後に、統合スクリプトに従って、これらの検索結果を統合する（Ｓ４０３）。より詳細には、統合スクリプトに従って、意味関連検索式の検索結果に基づき３Ｄ空間検索式を実行することで、検索式入力手段から入力された検索式を満たす部品を特定する。検索結果統合手段１０３は、得られた結果（検索された部品の情報）を出力する。
【０１０６】
図１２は、検索装置のハードウェア構成例を示す。検索装置は、ＣＰＵ４０１、入力部４０２、表示部４０３、通信部４０４、主記憶部４０５、外部記憶部４０６を備え、これらはバス４０７により相互に通信可能に接続される。
【０１０７】
入力部４０２は、キーボード、マウス等の入力デバイスを備える。表示部４０３は、ＬＣＤ（Liquid Crystal Display）、ＣＲＴ（Cathode Ray Tube）等の表示ディスプレイを含む。通信部４０４は、無線または有線の通信手段を有し、所定の通信方式で通信を行う。
【０１０８】
外部記憶部４０６は、例えば、ＨＤＤ、ＳＳＤ、メモリ装置、ＣＤ−Ｒ、ＣＤ−ＲＷ、ＤＶＤ−ＲＡＭ、ＤＶＤ−Ｒ等の記憶媒体等を含む。外部記憶部４０６は、図１の各処理部の機能を、ＣＰＵ４０１に実行させるためのプログラムを記憶している。また、建物情報ＤＢ１０６も、外部記憶部４０６に含まれる。ここでは、外部記憶部４０６を１つのみ示しているが、複数存在しても構わない。
【０１０９】
主記憶部４０５は、ＣＰＵ４０１による制御の下で、外部記憶部４０６に記憶された制御プログラムを展開し、当該プログラムの実行時に必要なデータ、当該プログラムの実行により生じたデータ等を記憶する。主記憶部４０５は、例えば不揮発性メモリ等の任意のメモリを含む。
【０１１０】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１１１】
１０１：解析手段
１０２：検索式分離手段（生成手段）
１０３：検索結果統合手段
１０４：意味関連検索手段
１０５：３Ｄ空間検索手段
１０６：建物情報ＤＢ（記憶手段）
２０１：検索式入力手段
２０２：検索結果表示手段
４０１：ＣＰＵ
４０２：入力部
４０３：表示部
４０４：通信部
４０５：主記憶装置
４０６：補助記憶装置
４０７：バス
【図１】
2016079792.tif 000003
【図２】
2016079792.tif 000004
【図３】
2016079792.tif 000005
【図４】
2016079792.tif 000006
【図５】
2016079792.tif 000007
【図６】
2016079792.tif 000008
【図７】
2016079792.tif 000009
【図８】
2016079792.tif 000010
【図９】
2016079792.tif 000011
【図１０】
2016079792.tif 000012
【図１１】
2016079792.tif 000013
【図１２】
2016079792.tif 000014
【国際調査報告】
2016079792.tif 000015
2016079792.tif 000016
2016079792.tif 000017