(57)【要約】【課題】何が条件に加えられていて、何が除外されているかが容易に分かるようにブール式を可視化するための装置、方法およびプログラムを提供すること。【解決手段】可視化すべきブール式が、リーフノードがこのブール式中のオペランドを表し、リーフノード以外のノードがブール式中のオペレータを表すバイナリツリーの形で入力される。入力されたバイナリツリーは、複数の領域からなる２次元の入れ子表現に変換され、この入れ子表現から可視化のための絵画表現が作図されて表示される。ブール式が文字列式で与えられた場合には、文字列式がバイナリツリーに変換される。【選択図】  図３
2008097467.tif 000002
【特許請求の範囲】
【請求項１】
ブール式を可視化するための装置であって、
可視化すべきブール式を、リーフノードが前記ブール式中のオペランドを表し、リーフノード以外のノードが前記ブール式中のオペレータを表すバイナリツリーの形で入力する入力部と、
前記バイナリツリーを複数の領域からなる２次元の入れ子表現に変換する変換部と、
前記入れ子表現から可視化のための絵画表現を作図する作図部と、
前記入力部により入力されたバイナリツリー、前記変換部により作成された入れ子表現、および前記作図部により作図された絵画表現を記憶する記憶部と、
前記絵画表現を可視表示する表示部と
を含む、ブール式可視化装置。
【請求項２】
前記変換部は、
前記入力部により入力されたバイナリツリーの各リーフノードを、ブール演算のオペランドとして機能する入れ子オブジェクトに変換するリーフノード変換部と、
前記入れ子オブジェクトをオペランドに用いてブール演算を実行することにより、２次元の入れ子表現を作成するツリー演算部と、
前記入れ子表現作成のための論理演算を実行するＡＮＤ演算部、ＯＲ演算部およびＮＯＴ演算部と
を含む、請求項１に記載の装置。
【請求項３】
前記入力部は、前記ブール式が文字列式で与えられた場合には、該文字列式をバイナリツリーに変換する、請求項１または２に記載の装置。
【請求項４】
前記入力部は、前記文字列式を通常のツリーに変換し、次いで該ツリーをバイナリツリーに変換する、請求項３に記載の装置。
【請求項５】
前記バイナリツリーのリーフノードは、オペランドを表すラベルとＮＯＴフラグを持ち、リーフノード以外のノードは、ＡＮＤまたはＯＲの属性とＮＯＴフラグを持つ、請求項３または４に記載の装置。
【請求項６】
前記入れ子表現は、複数のノードを含む少なくとも１つの入れ子オブジェクトからなる、請求項１乃至５のいずれかに記載の装置。
【請求項７】
前記変換部は、前記バイナリツリーのリーフノードを、該リーフノードのラベルと、フラグを持つ入れ子オブジェクトに変換し、該フラグが第１の値のときは該リーフノードのオペランドを強調表示させ、該フラグが第２の値のときは該オペランドを囲む領域を強調表示させる、請求項６に記載の装置。
【請求項８】
前記変換部は、前記リーフノードの入れ子オブジェクトを前記バイナリツリーの上位ノードで指定されたオペレータおよび当該入れ子オブジェクトのフラグに従って演算することにより、複数のノードを含む少なくとも１つの入れ子オブジェクトを作成する、請求項７に記載の装置。
【請求項９】
前記複数のノードのそれぞれは、（１）オペランドもしくは全要素を示すラベルと、当該ノードが強調表示されるかどうかを示すフラグを持つか、または（２）別の入れ子オブジェクトへのポインタと、ユーザ定義のラベルと、当該ノードが強調表示されるかどうかを示すフラグを持つ、請求項８に記載の装置。
【請求項１０】
前記演算がＮＯＴの場合には、演算対象の入れ子オブジェクトに含まれる全ノードのフラグが反転される、請求項９に記載の装置。
【請求項１１】
前記演算がＡＮＤの場合には、演算対象となる第１および第２の入れ子オブジェクトが、強調表示されているノードが唯１つあり、下位ノードを持たない第１のタイプ、自分自身が強調表示されていて、自分の上位ノードが強調表示されていないようなノードが唯１つある第２のタイプ、およびそれ以外の第３のタイプのいずれに属するかを判断し、前記第１および第２の入れ子オブジェクトのタイプに応じて、ノードの追加およびフラグの反転を選択的に実行する、請求項９に記載の装置。
【請求項１２】
（１）前記第１の入れ子オブジェクトが前記第１のタイプである場合は、前記第２の入れ子オブジェクトの最上位の全要素ノードのフラグが偽であれば、前記第１の入れ子オブジェクトのフラグが真のノードのフラグを偽にして、該ノードの中に、前記第２の入れ子オブジェクトの全要素ノードのすべての下位ノードを追加し、前記第２の入れ子オブジェクトの最上位の全要素ノードのフラグが真であれば、前記第１の入れ子オブジェクトのフラグが真のノードの中に、前記第２の入れ子オブジェクトの全要素ノードのすべての下位ノードを追加し、
（２）前記第１および第２の入れ子オブジェクトがいずれも前記第１のタイプではなく、前記第２の入れ子オブジェクトが前記第２のタイプの場合は、それぞれの入れ子オブジェクトに含まれるフラグが真のノードの下位ノードを取り除いて、第１のタイプの入れ子オブジェクト同士のＡＮＤ演算を実行し、その演算結果に含まれるフラグが真のノードに取り除いた下位ノードを追加し、
（３）前記第１の入れ子オブジェクトが前記第１のタイプではなく、前記第２の入れ子オブジェクトが前記第３のタイプの場合は、全要素ノードの中に前記第２の入れ子オブジェクトへのポインタを持つ、フラグが真のノードのみを追加した新たな入れ子オブジェクトを作成し、該新たな入れ子オブジェクトと前記第１の入れ子オブジェクトとのＡＮＤ演算を実行し、前記第２の入れ子オブジェクトは前記第１の入れ子オブジェクトの従属入れ子オブジェクトとして追加し、
（４）その他の場合は、前記第１の入れ子オブジェクトと前記第２の入れ子オブジェクトを入れ替えて、（１）〜（３）の演算を実行する、請求項１１に記載の装置。
【請求項１３】
前記演算がＯＲの場合は、演算対象となる第１および第２の入れ子オブジェクトのルートノードのフラグが偽であれば、前記第１の入れ子オブジェクトのルートノードの中に前記第２の入れ子オブジェクトのルートノードのすべての下位ノードを追加し、さもなければ、前記第１の入れ子オブジェクト及び前記第２の入れ子オブジェクトの全フラグを反転してからＡＮＤ演算を実行し、その結果の全フラグを反転する、請求項１２に記載の装置。
【請求項１４】
前記作図部は、
（１）全要素ノードに対応する矩形を描き、該全要素ノードのフラグが真であれば、該全要素ノードを強調表示し、
（２）描画された矩形と対応付けられたノードにまだ矩形と対応付けられていない下位ノードがあれば、該下位ノードに対応する矩形を前記描画された矩形の内部に、前記描画された矩形の内部の他の矩形と重ならないように描画する
請求項９乃至１３のいずれかに記載の装置。
【請求項１５】
ブール式を可視化するための方法であって、
可視化すべきブール式を、リーフノードが前記ブール式中のオペランドを表し、リーフノード以外のノードが前記ブール式中のオペレータを表すバイナリツリーの形で入力して記憶するステップと、
前記バイナリツリーを複数の領域からなる２次元の入れ子表現に変換して記憶するステップと、
前記入れ子表現から可視化のための絵画表現を作図して記憶するステップと、
前記絵画表現を表示するステップと
を含む、ブール式可視化方法。
【請求項１６】
ブール式を可視化するために、コンピュータを、
可視化すべきブール式を、リーフノードが前記ブール式中のオペランドを表し、リーフノード以外のノードが前記ブール式中のオペレータを表すバイナリツリーの形で入力する入力部、
前記バイナリツリーを複数の領域からなる２次元の入れ子表現に変換する変換部、
前記入れ子表現から可視化のための絵画表現を作図する作図部、
前記入力部により入力されたバイナリツリー、前記変化部により作成された入れ子表現、および前記作図により作図された絵画表現を記憶する記憶部、ならびに
前記絵画表現を表示する表示部
として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はブール式を可視化するための装置、方法およびプログラムに関するものであり、特に検索条件や集合演算を示す任意のブール式を、「何が条件に加えられていて、何が除外されているか」という点を人間が理解しやすいように可視化するための方法、装置およびプログラムに関するものである。
【背景技術】
【０００２】
検索ツールや集合演算で使用されるブール式は、一般に、文字列式、ツリー形式、逆ポーランド記法、またはベン図で表現される。文字列式は、例えば、（Ａ  ＡＮＤ  （ＮＯＴ  （（Ｂ  ＡＮＤ  Ｃ  ＡＮＤ  （ＮＯＴ  Ｄ））  ＯＲ  Ｅ）））のように記述される。ここで、Ａ〜Ｅはブール式のオペランド（被演算子）であり、ＡＮＤ、ＯＲ、ＮＯＴはオペレータ（演算子）である。検索式の場合は、それぞれのキーワードがオペランドになる。この文字列式をツリー形式にすると図１のように表される。図１の（Ａ）は通常のツリー、（Ｂ）はバイナリツリーを示している。逆ポーランド記法は、オペレータを演算対象であるオペランドの後ろに置くようにしたもので、上述の文字列式は“Ａ  Ｂ  Ｃ  ＡＮＤ  Ｄ  ＮＯＴ  ＡＮＤ  Ｅ  ＯＲ  ＮＯＴ  ＡＮＤ”のように表現される。ベン図は、各オペランドに対応する閉曲線を用いて領域を２Ｎ個（Ｎはオペランドの数）に分割するようにしたもので、上述の文字列式は、例えば、図２のように表現される。
【０００３】
これらの表現方法はいずれも、専門知識のないユーザに即座に意味を伝えることができるものではない。そのため、ブール式を少しでも分かり易く示すための工夫がなされてきた。例えば、米国特許第５５９２６６３号明細書は、データベース検索の集合の量と、集合と集合の間にある論理的な関係を図式によって提示し、図式上の矩形の領域を指示して集合を演算操作すること、およびデータを抽出することを可能にするグラフィックユーザインタフェースを開示している。また、米国特許第６９１００３１号明細書は、データ検索システムにおいて、データ検索の結果を人間が認識できる形で提示するユーザインタフェースを開示している。いずれも、境界で仕切られた各領域の面積が、対応する部分集合の要素数を反映するように可視化を行っているが、ベン図に基づく可視化のため、集合の数が多くなると複雑になってしまい、何が条件に加えられていて、何が除外されているかが即座に伝わらない。
【０００４】
ＣＡＤの分野では、例えばhttp://www.f-lohmueller.de/pov_tut/csg/povcsg1e.htmに述べられているようなＣＳＧ（ConstructiveSolid Geometry）と呼ばれる集合演算が知られている。これは、３次元空間上の図形（部分集合）をオペランドとする集合演算で、union、merge、intersection、differenceといったブール演算が定義されており、複雑な図形の作図を可能にしている。しかし、これもベン図と同様に、結果の図形からだけでは、どの箇所が追加・削除されているかは明らかでない。
【特許文献１】米国特許第５５９２６６３号明細書
【特許文献２】米国特許第６９１００３１号明細書
【非特許文献１】http://www.f-lohmueller.de/pov_tut/csg/povcsg1e.htm
【発明の開示】
【発明が解決しようとする課題】
【０００５】
従って、本発明の目的は、何が条件に加えられていて、何が除外されているかが容易に分かるようにブール式を可視化するための装置、方法およびプログラムを提供することにある。
【課題を解決するための手段】
【０００６】
従来の可視化手法は、例えば図２に示すように、集合の部分的な重なりを利用しているため見づらくなっているが、本発明は２次元の入れ子表現を採用して、このような部分的な重なりを排除することにより、何が条件に加えられていて、何が除外されているかが容易に分かるようにしている。もちろん、入れ子表現によってブール式の正確さが失われることはない。本発明によれば、可視化すべきブール式が、リーフノードがこのブール式中のオペランドを表し、リーフノード以外のノードがブール式中のオペレータを表すバイナリツリーの形で入力される。入力されたバイナリツリーは、複数の領域からなる２次元の入れ子表現に変換され、この入れ子表現から可視化のための絵画表現が作図されて表示される。ブール式が文字列式で与えられることもあるが、その場合は、文字列式がバイナリツリーに変換される。本発明は、このような可視化手法のための装置、方法およびプログラムを提供する。
【発明を実施するための最良の形態】
【０００７】
本発明に従うブール式可視化装置の一実施形態を図３に示す。図３のブール式可視化装置３０は、可視化すべきブール式を、リーフノードがブール式中のオペランドを表し、リーフノード以外のノードがブール式中のオペレータを表すバイナリツリーの形で入力する入力部３１、バイナリツリーを複数の領域からなる２次元の入れ子表現に変換する変換部３２、入れ子表現から可視化のための絵画表現を作図する作図部３３、作図された絵画表現を表示する表示部３４、ならびにこれらの機能部によってアクセスされ、入力部３１により入力されたバイナリツリー、変換部３２により作成された入れ子表現、および作図部により作図された絵画表現を記憶する記憶部３５を含む。以下、本発明をテキストマイニング等の検索ツールに応用した実施形態について説明するが、もちろん、本発明は検索ツールで使用される検索式に限らず、任意のブール式に適用可能である。
【０００８】
入力部３１は、検索ツール（図示せず）から与えられる文字列のブール式を図１（Ｂ）のようなバイナリツリーに変換して、記憶部３５に記憶する。例えば、テキストマイニングにおいては、（Ａ  ＡＮＤ  （！（（Ｂ  ＡＮＤ  Ｃ  ＡＮＤ  （！Ｄ））  ＯＲ  Ｅ）））のような括弧付きの文字列式が自動的に作成される。「！」はＮＯＴ演算を表す記号である。本実施形態では、このような括弧付きの文字列式をベースに可視化を行う。括弧付きの文字列式では、ＡＮＤ演算は、例えば、（Ａ  ＡＮＤ  Ｂ  ＡＮＤ  Ｃ）のように表され、ＯＲ演算は（Ａ  ＯＲ  Ｂ  ＯＲ  Ｃ）のように表され、ＮＯＴ演算は（！Ａ）のように表される。演算対象となるオペランドＡ、Ｂ、Ｃなどは、それ自体が別の文字列式のこともある。また、ブール式の可視化では、分かりやすさが最優先されるべきであるから、使用されるオペレータをＡＮＤ、ＯＲおよびＮＯＴに制限するのが好ましい。与えられた文字列式が、ＮＡＮＤ、ＮＯＲなどの他のオペレータを含んでいた場合には、そのような文字列式は、ＡＮＤ、ＯＲおよびＮＯＴのみを含む等価な文字列式に変換される。このような変換は周知であるから、詳細については省略する。
【０００９】
入力部３１は、上述のような括弧付きの文字列式を一番外側の括弧から順に処理することによってバイナリツリーに変換する。文字列式からバイナリツリーへの変換も周知であるが、簡単に説明すると、一番外側の括弧を除くすべての括弧を中身ごと削除し、それを別のオペランドとして保管して、ツリーを作成する。上述の例では、最初は（Ａ  ＡＮＤ  Ｆ）を処理して、ＡＮＤをルートノードとし、ＡおよびＦを子ノードとするツリーを作成する。ここで、Ｆ＝（！（（Ｂ  ＡＮＤ  Ｃ  ＡＮＤ  （！Ｄ））  ＯＲ  Ｅ））である。次にオペランドＦを同様にして処理する。この例では、括弧の直後に「！」があるので、オペランドＦに対応する子ノードのＮＯＴフラグをオンにし、「！」に続くオペランドＧ＝（（Ｂ  ＡＮＤ  Ｃ  ＡＮＤ  （！Ｄ））  ＯＲ  Ｅ）を処理する。これは、オペランドＨ＝（Ｂ  ＡＮＤ  Ｃ  ＡＮＤ  （！Ｄ）とオペランドＥのＯＲ演算を表しているので、入力部１２は、先ほどのオペランドＦに対応する子ノードをＯＲノードとし、ＨおよびＥをその子ノードとするツリーを出力する。続いて、オペランドＨを同様にして処理し、最終的には図１（Ａ）に示すような通常のツリーを作成する。
【００１０】
通常のツリーをバイナリツリーに変換するため、入力部３１は、作成したツリーに含まれるＡＮＤノードおよびＯＲノードのうち、子ノードを３個以上持っているものがあるかどうかを調べ、もしあれば、第１の子ノードだけを残して、当該ノードと同じオペレータのノードを第２の子ノードとし、その下に元の第２〜第Ｎの子ノードを追加する。入力部３１は、ＡＮＤノードおよびＯＲノードのそれぞれの子ノードが２つになるまでこの処理を繰り返すことにより、図１（Ｂ）のようなバイナリツリーを作成し、記憶部３５に記憶する。
【００１１】
入力部３１が記憶部３５に記憶するバイナリツリーのデータ構造の一例を図４に示す。このバイナリツリーは図１（Ｂ）に示したものである。図示のように、バイナリツリーの各ノードは、ＩＤ、タイプ、左の子ノード、右の子ノード、ＮＯＴフラグ、およびラベルを属性として持つ。ＩＤは、バイナリツリーのルートノードから順に、例えば深さ優先で番号付けされるが、各ノードを一意的に識別できるものであれば、他の番号付け方式を使用してもよい。タイプは、当該ノードがＡＮＤノード、ＯＲノードおよびリーフノードのいずれであるかを示す。左の子ノードおよび右の子ノードは、当該ノードの左側および右側の子ノードのＩＤを示す。当該ノードがリーフノードであれば、子ノードはないので、これらの属性はｎｕｌｌに設定される。ＮＯＴフラグは、当該ノードが反転されるか否かを示す真（例えば「１」）または偽（例えば「０」）の値を取る。ラベルは、リーフノードを表す１以上の文字を含み、ＡＮＤノードおよびＯＲノードの場合はｎｕｌｌに設定される。
【００１２】
変換部３２は、前述のように、バイナリツリーを複数の領域からなる２次元の入れ子表現に変換するもので、図５に示すように、入力部３１により作成されたバイナリツリーの各リーフノードを、本発明に従うブール演算のオペランドとして機能する入れ子オブジェクトに変換するリーフノード変換部５０、それらの入れ子オブジェクトをオペランドに用いてブール演算を実行することにより、２次元の入れ子表現を作成するツリー演算部５１、ならびに入れ子表現作成のための論理演算を実行するＡＮＤ演算部５２、ＯＲ演算部５３およびＮＯＴ演算部５４を含む。
【００１３】
リーフノード変換部５０は、図４に示すデータ構造の９つのエントリのうち、ノードタイプが「リーフ」のものを読み取ることによって、バイナリツリーの各リーフノードを、そのＮＯＴフラグの値に応じて図６に示すような入れ子オブジェクトに変換する。図示のように、リーフノード変換部５０は、ＮＯＴフラグが真の場合は、当該リーフノードを囲む領域（当該リーフノードだけが集合の要素になっているので、これは「全要素」領域である）を強調表示させ、ＮＯＴフラグが偽の場合は、当該リーフノードを強調表示させる。その結果、例えば図１（Ｂ）のバイナリツリーであれば、各リーフノードが図７のように変換される。リーフノード変換部４０が作成する入れ子オブジェクトは、対応するリーフノードのラベルと、当該リーフノードが強調表示されるか否かを示すフラグを持つ。このフラグは、ＮＯＴフラグと同じく真または偽の値を取り、真であれば、対応するリーフノードが強調表示され、偽であれば強調表示されない。４つのオペレータノード７０、７２、７３、７４および５つのリーフノード７１、７５、７６、７７、７８を含む図７のバイナリツリーでは、オペランドＡ、Ｂ、ＣおよびＥのリーフノード７１、７５、７６および７８に対応する入れ子オブジェクトは、それぞれラベル「Ａ」、「Ｂ］、「Ｃ」および「Ｅ］と、真のフラグを持ち、オペランドＤのリーフノード７７に対応する入れ子オブジェクトはラベル「Ｄ」と、偽のフラグを持つ。
【００１４】
リーフノード変換部５０により作成されて、記憶部３５に記憶される入れ子オブジェクトのデータ構造の例を図８に示す。図８の「ＩＤ」は図４の「ＩＤ」と同じである。「ルートノードのフラグ」は、対応するリーフノードを囲む領域（「全要素」領域）が強調表示されるか否かを示すもので、リーフノードのフラグの反転形になっている。図６は図８のデータ構造をイメージ的に表したものであり、図６のイメージそのものが記憶部３５に記憶されるわけではない。
【００１５】
ツリー演算部５１は、ＡＮＤ演算部５２、ＯＲ演算部５３およびＮＯＴ演算部５４と協働して、図７に示すようなツリー構造から２次元の入れ子表現を生成する。次に、このような入れ子表現を生成するために、ツリー演算部５１、ＡＮＤ演算部５２、ＯＲ演算部５３およびＮＯＴ演算部５４がどのように働くかを、図９のフローチャートを参照しながら説明する。
【００１６】
最初のステップＳ１で、ツリー演算部５１は、共通の親Ａを持つリーフノードのペアＢ、Ｃが存在するか否かをチェックする。これは、例えば、図４のデータ構造において、「左の子ノード」および「右の子ノード」の欄にｎｕｌｌ以外のＩＤが書き込まれているエントリを探索することにより実行される。もしそのようなペアが存在しなければ、演算対象がなくなったので終了し、さもなければステップＳ２に進んで、ＡがＡＮＤノードか否かをチェックする。もしＡＮＤノードであれば、ステップＳ３に進んで、ＡＮＤ演算部５２にＡＮＤ演算を実行させる。ツリー演算部４２は、次のステップＳ４でＡのＮＯＴフラグが真か否かをチェックし、もし真であれば、ステップＳ５に進んで、ＮＯＴ演算部５４にＡＮＤ演算結果Ｘの全ノードのフラグを反転させた後、ステップＳ１に戻る。ＡのＮＯＴフラグが真でなければ、ステップＳ４から直接ステップＳ１に戻る。
【００１７】
ステップＳ２において、ＡがＡＮＤノードでなければ、すなわちＡがＯＲノードであれば、ステップＳ６に進んで、ＯＲ演算部５３にＯＲ演算を実行させる。後はアンド演算の場合と同じく、ステップＳ４からステップＳ１に戻るか、またはステップＳ４からステップＳ５を経由してステップＳ１に戻る。
【００１８】
ＡＮＤ演算部５２が実行するＡＮＤ演算のフローを図１０に示す。ＡＮＤ演算部５２は、最初のステップＳ３１で演算対象となる２つの入れ子オブジェクトを取り出す。図４の例で説明すると、例えばＩＤが４のＡＮＤノードに対応するＡＮＤ演算を実行する場合は、そのオペランドはＩＤが５および８のリーフノードであるから、ＡＮＤ演算部５２は、図８のデータ構造からＩＤが５および８のエントリを演算対象の入れ子オブジェクトとして取り出す。ＡＮＤ演算部５２は、取り出した入れ子オブジェクトが次に挙げる３つのタイプのうちのどれに属するかに応じて異なったＡＮＤ演算、すなわち入れ子オブジェクトの結合を実行する。
（１）第１のタイプ：強調表示されているノードが唯１つあり、下位ノードを持たない。
（２）第２のタイプ：自分自身が強調表示されていて、自分の上位ノードが強調表示されていないようなノードが唯１つある。
（３）第３のタイプ：第１のタイプおよび第２のタイプに属さないオペランド。
【００１９】
各タイプの例を図１１に示す。図１１において、第１のタイプの例は第２のタイプでもある。第３のタイプは、第１のタイプおよび第２のタイプに属さないすべての入れ子オブジェクトを含むから、図示の例以外にも、例えば、１つの強調表示されない矩形領域の中に２つの強調表示された矩形領域が重なることなく並んでいるような入れ子オブジェクト（後述するように、２つのオペランドのＯＲ演算に対応）も含まれる。
【００２０】
ＡＮＤ演算部５２は、次のステップＳ３２で、第１オペランドとなる入れ子オブジェクトが第１のタイプか否かを判断する。もし第１のタイプであれば、第２オペランドのタイプに関係なくステップＳ３３に進んで、第２オペランドとなる入れ子オブジェクトのルートノードすなわち全要素ノードのフラグが真か否かを、例えば図８の対応するエントリをアクセスすることによって判断する。ここでは、バイナリツリーのオペレータノードの下にある２つのリーフノードのうち、左側のリーフノードを第１オペランドとし、右側のリーフノードを第２オペランドとしているが、これは逆でも構わない。
【００２１】
第２オペランドの最上位の全要素ノードのフラグが偽であれば、ステップ３４に進んで、第１オペランドのフラグが真のノードすなわち強調表示ノードのフラグを偽にして、該ノードの中に、第２オペランドの全要素ノードのすべての下位ノードを追加する。第２オペランドの最上位の全要素ノードのフラグが真であれば、ステップ３５に進んで、第１オペランドの強調表示ノードの中に、第２オペランドの全要素ノードのすべての下位ノードを追加する。
【００２２】
ステップＳ３２において、第１オペランドが第１のタイプでなければ、ステップＳ３６に進んで、第２オペランドのタイプを調べる。第２オペランドが第１のタイプではなく、第２のタイプの場合は、ステップＳ３７に進んで、それぞれのオペランドに含まれる強調表示ノードの下位ノードを取り除いて、上述の第１のタイプのオペランド同士のＡＮＤ演算を実行し、その演算結果に含まれる強調表示ノードに取り除いた下位ノードを追加する。
【００２３】
第２オペランドが第３のタイプの場合は、ステップＳ３６からステップＳ３８に進んで、全要素ノードの中に第２オペランドへのポインタを持つ、フラグが真のノードのみを追加した新たな入れ子オブジェクトを作成し、この新たな入れ子オブジェクトと第１オペランドとのＡＮＤ演算を実行し、第２オペランドは第１オペランドの従属入れ子オブジェクトとして追加する。
【００２４】
その他の場合は、第１オペランドと第２オペランドを入れ替えて、上記の定義に従ったＡＮＤ演算を実行する。すなわち、ステップＳ３１で取り出した２つのオペランドのタイプが「第１オペランドのタイプ＞第２オペランドのタイプ」という関係にあると（例えば、第１オペランドのタイプが３で、第２オペランドのタイプが１）、ステップＳ３２以降で、第１オペランドと第２オペランドを入れ替えてＡＮＤ演算を実行する。
【００２５】
図１２は、上述のようなタイプに応じたＡＮＤ演算の例を示したものである。図から明らかなように、本発明におけるＡＮＤ演算は、可視性を考慮して、基本的に、一方のオペランドの要素の中に他方のオペランドのすべての要素を包含させる構成となっている。例えば、両オペランドが第１のタイプであるＡＮＤ演算(図１２の第２行第２列の演算)では、第１オペランドの要素Ｇの中に第２オペランドの要素ＡおよびＢが包含されている。少なくとも１つのオペランドが第３のタイプの場合(図１０のステップＳ３８におけるＡＮＤ演算)は、上述のように、第３のタイプのオペランドへのポインタを持った、フラグが真のノードが他方のオペランドに追加され、当該オペランドの要素は、図１３に示すように、他方のオペランドとは別個に可視化される。
【００２６】
図１３は、図１２の第４行第４列のＡＮＤ演算の結果を示したもので、図１２に示される演算結果中の第２オペランドのラベルと、第２オペランドの実際の要素とがポインタを示す矢印によって関連付けられている。図１３の演算結果は、左側の主入れ子オブジェクトと、該主入れ子オブジェクトに対してポインタによって関連付けられた右側の従属入れ子オブジェクトから成っており、この演算結果が別の論理演算のオペランドとして使用されることもあるが、その場合は、主入れ子オブジェクトだけが演算対象のオペランドとなる。
【００２７】
図９のステップＳ６でＯＲ演算部５３が実行するＯＲ演算のフローを図１４に示す。ＯＲ演算部５３は、ステップＳ６１で、演算対象となる第１オペランドおよび第２オペランドに対応する入れ子オブジェクトのルートノードのフラグがいずれも偽か否かを調べる。もし両方のフラグが偽であれば、ステップＳ６２に進んで、第１オペランドに対応する入れ子オブジェクトのルートノードの中に第２オペランドに対応する入れ子オブジェクトのルートノードのすべての下位ノードを追加する。例えば、図７の一番下のＡＮＤノード７４がＯＲノードであったなら、ＯＲ演算部５３は、図１２に示される３種類の第１オペランドのうち、第３のタイプとして示されるような入れ子オブジェクトを出力する。その他の場合、すなわち少なくとも一方のフラグが真であれば、ＯＲ演算部５３は、ステップＳ６３に進んで、ＮＯＴ（（ＮＯＴ  第１オペランド）ＡＮＤ（ＮＯＴ  第２オペランド））の演算を実行する。図１４のステップＳ６３では、第１オペランドをＡ、第２オペランドをＢで示している。ドモルガンの定理から、これは第１オペランドと第２オペランドのＯＲ演算と等価であることがわかる。前述のＡＮＤ演算の観点からは、ステップＳ６３の演算は、第１オペランド及び第２オペランドがいずれも第２のタイプである場合のＡＮＤ演算（図１０のステップＳ３７）を実行して、その結果の全フラグを反転することに相当する。従って、ステップＳ６３の演算は、ＡＮＤ演算部５２およびＮＯＴ演算部５４で実行することも可能である。ＯＲ演算部５３によるＯＲ演算は、基本的には、ルートノードすなわち全要素ノードの中に両オペランドの要素を重なり合わないように並置する。
【００２８】
ＮＯＴ演算部５４は、演算対象となるオペランドに対応する入れ子オブジェクトの全ノードのフラグを反転させた入れ子オブジェクトを出力する。
【００２９】
次に、図７のバイナリツリーを例にとって図９の流れを具体的に説明すると、４つのオペレータノード７０、７２、７３および７４のうち、その下にリーフノードのペアを持っているのはＡＮＤノード７４だけであるから、最初のステップＳ１では、ノード７４、７５および７８からなるサブツリー（７４、７５、７８）が選択され、ステップＳ２を経由して、ステップＳ３で、図１５の（１）に示す入れ子オブジェクトがＸとして作成され、サブツリー（７４、７５、７８）がＸで置き換えられる。ここでの演算は、図１０のステップＳ３４におけるＡＮＤ演算に相当する。
【００３０】
図３の変換部３２に含まれるツリー演算部５１は、図１５の（１）に示す入れ子オブジェクトを、図１６の（１）に示すようなデータ構造の形で記憶部３５に記憶する。図１６において、「ノード」は入れ子オブジェクトを構成する複数の矩形領域に対応し、「ラベル」はユーザにより指定される各ノードの名前を示し、「フラグ」は当該ノードが強調表示される（真）か否（偽）かを示し、「ポインタ」は図１３に示すような従属入れ子オブジェクトがもしあれば、その識別子を指定し（従属入れ子オブジェクトがなければｎｕｌｌ）、「子ノード」は当該ノードの子ノードの番号を示す。
【００３１】
図９に戻って、図７の例では、ＡＮＤノード７４のＮＯＴフラグは偽であるから、ステップＳ４からステップＳ１に戻り、次のサブツリーが選択される。この時点では、サブツリー（７４、７５、７８）が入れ子オブジェクトＸに置き換わっていて、ＡＮＤノード７３のリーフノードになっているので、ステップＳ１で次に選択されるサブツリーは、ノード７３、Ｘおよび７７からなるものである。今回もＡＮＤ演算であるから、ステップＳ３で図１５の（２）に示す入れ子オブジェクトが新たなＸとして作成される。ここでは、リーフノード７７にある第２オペランドＤのルートノード（全要素ノード）のフラグが真であるから、図１０のステップＳ３５におけるＡＮＤ演算が実行され、その結果、図１６の（１）に示すデータ構造が（２）のように修正されて記憶部３５に記憶される。
【００３２】
次は、同様にしてノード７２、Ｘおよび７６からなるサブツリーがステップＳ１で選択される。今回はＯＲ演算が実行されるので、ステップＳ２からステップＳ６に進む。図１５の（２）の入れ子オブジェクトおよび図７の入れ子オブジェクト７６はいずれもルートノード（全要素ノード）のフラグが偽（強調表示されない）であるから、図１４のステップＳ６１における判定がＹＥＳとなって、ステップＳ６２のＯＲ演算が実行され、図１５の（３）に示すような入れ子オブジェクトが新たなＸとして作成され、そのデータ構造が図１６の（３）のように修正される。ＯＲノード７２のＮＯＴフラグが真であるから、ステップＳ５でＸの全ノードのフラグが反転され、図１５の（４）に示すような入れ子オブジェクトが新たなＸとして作成される。この新たなＸのデータ構造は、図１６の（３）に示すデータ構造のフラグをすべて逆にしただけであるから、図１６には示していない。
【００３３】
最後の繰り返しループでは、同様にしてＡＮＤノード７０、リーフノード７１および図１５の（４）に示す入れ子オブジェクトからなるサブツリーが選択され、ステップＳ３でＡＮＤ演算（具体的には、図１０のステップＳ３５におけるＡＮＤ演算）が実行されて、図１５の（５）に示すような入れ子オブジェクトが作成される。この入れ子オブジェクトのデータ構造は図１６の（５）のようになっており、これが最終的な２次元の入れ子表現として、変換部１４から記憶部３５に記憶される。
【００３４】
作図部１６は、変換部１４で作成された入れ子表現から可視化のための絵画表現を作図して、記憶部３５に記憶するもので、その動作の流れを図１６に示す。作図部１６は、最初のステップＳ７１で、図１６の（５）に示されるデータ構造に記述されているルートノードすなわち全要素ノードに対応する矩形を描き、全要素ノードのフラグが真であれば、その矩形領域を強調表示する。図１６の（５）の例では、全要素ノードのフラグは偽であるから、矩形領域は強調表示されない。矩形の描画は、ＨＴＭＬのテーブルや、ＰｏｗｅｒＰｏｉｎｔ（Ｒ）の矩形等を用いることによって実行可能である。
【００３５】
続いて、ステップＳ７２で、描画された矩形ａと対応付けられたノードＡが、まだ矩形と対応付けられていない下位ノードＢを持つかどうかをチェックする。これは、図１６の（５）に示すデータ構造における子ノードの欄を調べればわかる。ノードＡがそのような下位ノードＢを持っていれば、ステップＳ７３に進んで、下位ノードＢに対応する矩形ｂを矩形ａの内部に描画し、Ｂのフラグが真であれば、矩形ｂを強調表示する。矩形ｂの描画に際しては、矩形ａの内部にある他の矩形と重ならないようにする必要がある。最後に、矩形ｂにノードＢのラベルを付与して、ステップＳ７１に戻る。ステップＳ７１で下位ノードが見つからなければ終了する。
【００３６】
図１６の（５）の例では、ポインタの欄はすべてｎｕｌｌであるが、もしいずれかのノードがポインタを持っていると、作図部３３は、そのポインタにより示される従属入れ子オブジェクトについて上と同様な操作を実行し、図１３に示すように、ポインタを持ったノードと従属入れ子オブジェクトを矢印で結ぶ。
【００３７】
表示部３４は、作図部３３により作図された絵画表現を記憶部３５から読み出して、スクリーンに可視表示する。
【００３８】
実際の検索例として、例えば、Ｗｉｎｄｏｗｓ（Ｒ）９５、Ｗｉｎｄｏｗｓ（Ｒ）  ９８またはＷｉｎｄｏｗｓ（Ｒ）  ２０００（ただし、セカンドエディションを除く）でブルースクリーン以外のシステムエラーについて検索したい場合は、検索のためのブール式は、（（Ｗｉｎｄｏｗｓ（Ｒ）  ９５  ＯＲ  Ｗｉｎｄｏｗｓ（Ｒ）  ９８  ＯＲ  （Ｗｉｎｄｏｗｓ（Ｒ）  ２０００  ＡＮＤ  （！セカンドエディション）））  ＡＮＤ  （システムエラー  ＡＮＤ  （！ブルースクリーン）））となり、これに本発明を適用すると、例えば図１８に示すような可視表示が得られる。ユーザにとっては、どのような条件で検索しているのかが一目でわかるので、本発明を従来の検索ツールに組み込めば、ユーザフレンドリィな検索ツールをユーザに提供することができる。
【００３９】
本発明は、ハードウェア、ソフトウエア、またはハードウェアおよびソフトウエアの組み合わせとして実現可能である。ハードウェアとソフトウエアの組み合わせによる実行において、所定のプログラムを有するコンピュータシステムにおける実行が典型的な例として挙げられる。かかる場合、該所定プログラムが該コンピュータシステムにロードされ実行されることにより、該プログラムは、コンピュータシステムを制御し、本願発明にかかる処理を実行させる。このプログラムは、任意の言語・コード・表記によって表現可能な命令群から構成される。そのような命令群は、システムが特定の機能を直接、または１．他の言語・コード・表記への変換、２．他の媒体への複製、のいずれか一方もしくは双方が行われた後に、実行することを可能にするものである。もちろん、本願発明は、そのようなプログラム自体のみならず、プログラムを記録した媒体もその範囲に含むものである。本願発明の機能を実行するためのプログラムは、フロッピー（Ｒ）・ディスク、ＭＯ、ＣＤ−ＲＯＭ、ＤＶＤ、ハードディスク装置、ＲＯＭ、ＭＲＡＭ、ＲＡＭ等の任意のコンピュータ読み取り可能な記録媒体に格納することができる。かかるプログラムは、記録媒体への格納のために、通信回線で接続する他のコンピュータシステムからダウンロードしたり、他の記録媒体から複製したりすることができる。また、かかるプログラムは、圧縮し、または複数に分割して、単一または複数の記録媒体に格納することもできる。
【００４０】
図１９は、上述のコンピュータシステムのハードウェア構成例を示したものである。コンピュータシステム２００は、システムバス２０６に繋がった複数のプロセッサ２０２および２０４を備えた対称型マルチプロセッサ（ＳＭＰ）であるが、シングル・プロセッサ・システムであってもよい。システムバス２０６にはメモリコントローラ／キャッシュ２０８も繋がっており、これはローカルメモリ２０９に対するインターフェースを提供する。Ｉ／Ｏバスブリッジ２１０がシステムバス２０６に繋がっており、Ｉ／Ｏバス２１２に対するインターフェースを提供する。メモリコントローラ／キャッシュ２０６とＩ／Ｏバスブリッジ２１０は、図示されているように１つにすることもある。
【００４１】
Ｉ／Ｏバス２１２に繋がったＰＣＩバスブリッジ２１４は、ＰＣＩローカルバス２１６に対するインターフェースを提供する。いくつかのモデムをＰＣＩローカルバス２１６に接続することもある。典型的なＰＣＩバスの実装では、４つのＰＣＩ拡張用スロットないしは拡張用コネクタを備えている。図示しないネットワークに対する通信リンクは、拡張ボードを介してＰＣＩローカルバス２１６に接続されたモデム２１８およびネットワークアダプタ２２０を通して提供される。
【００４２】
追加のＰＣＩバスブリッジ２２２および２２４は、追加のＰＣＩローカルバス２２６および２２８のためのインターフェースを提供し、それにより追加のモデムやネットワークアダプタを扱うことが可能となる。メモリマップト（メモリ空間に配置された）グラフィクスアダプタ２３０およびハードディスクドライブ２３２もまた、図示したようにＩ／Ｏローカルバス２１２に直接または間接に接続される。図には示していないが、グラフィクスアダプタ２３０には図３の表示部３４が接続されている。
【００４３】
図１９に示したハードウェア構成は一例に過ぎず、他のハードウェア構成を採用することも可能である。例えば、光ディスクデバイスなどの他の周辺デバイスを、図示のハードウェアに加えてあるいはそれに代えて使用することができる。図示された例は本発明に関するアーキテクチャ上の制限を意図するものではない。
【００４４】
以上、本発明の最良の実施形態について詳細に説明してきたが、本発明は上述の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の範囲内で様々な変更・修正が可能であることは言うまでもない。
【図面の簡単な説明】
【００４５】
【図１】ブール式のツリー構造表現の例を示す図。
【図２】ブール式のベン図表現を示す図。
【図３】本発明に従うブール式可視化装置の構成を示すブロック図。
【図４】図１（Ｂ）に示すバイナリツリーのデータ構造を示す図。
【図５】図３に示す変換部の詳細な構成を示すブロック図。
【図６】バイナリツリーにおける各リーフノードの入れ子オブジェクト表現を示す図。
【図７】図１（Ｂ）に示すバイナリツリーの各リーフノードを入れ子オブジェクトに変換した後の構成を示す図。
【図８】図７に示すバイナリツリーのリーフノードのデータ構造を示す図。
【図９】本発明に従ってブール式を可視化するための演算のフローを示すフローチャート。
【図１０】図５に示すＡＮＤ演算部によるＡＮＤ演算のフローを示すフローチャート。
【図１１】ＡＮＤ演算の対象となるオペランドの３つのタイプの例を示す図。
【図１２】オペランドのタイプに応じたＡＮＤ演算の例をテーブルの形で示す図。
【図１３】主入れ子オブジェクトと、該主入れ子オブジェクトに対してポインタにより関連付けられる従属入れ子オブジェクトからなる入れ子表現の一例を示す図。
【図１４】図５に示すＯＲ演算部によるＯＲ演算のフローを示すフローチャート。
【図１５】図７に示すバイナリツリーを本発明に従って可視化する場合の各演算の結果である入れ子オブジェクトのイメージを段階的に示す図。
【図１６】図１５に示す入れ子オブジェクトのデータ構造を示す図。
【図１７】図３に示す作図部による絵画表現の作図フローを示すフローチャート。
【図１８】実際の検索式を本発明に従って可視化した例を示す図。
【図１９】本発明を実施し得るコンピュータシステムのハードウェア構成の一例を示すブロック図。
【図１】
2008097467.tif 000003
【図２】
2008097467.tif 000004
【図３】
2008097467.tif 000005
【図４】
2008097467.tif 000006
【図５】
2008097467.tif 000007
【図６】
2008097467.tif 000008
【図７】
2008097467.tif 000009
【図８】
2008097467.tif 000010
【図９】
2008097467.tif 000011
【図１０】
2008097467.tif 000012
【図１１】
2008097467.tif 000013
【図１２】
2008097467.tif 000014
【図１３】
2008097467.tif 000015
【図１４】
2008097467.tif 000016
【図１５】
2008097467.tif 000017
【図１６】
2008097467.tif 000018
【図１７】
2008097467.tif 000019
【図１８】
2008097467.tif 000020
【図１９】
2008097467.tif 000021