(57)【特許請求の範囲】
【請求項１】
ユーザがコンピュータシステムと対話することができるユーザインターフェイスを生成するためのシステムであって、
不完全なユーザインターフェイスを有し、かつ、前記アプリケーションのユーザインターフェイスデザイナの複数の意図を表す情報を記憶するアプリケーションと、
ここで、前記複数の意図は、前記不完全なユーザインターフェイスと関連付けられており、各意図を表す情報は、ユーザインターフェイスを生成する際に使用されるパラメータのセットと対応付けられ、かつ、前記ユーザへ質問を提出することと、ある情報を前記ユーザに提示することと、前記ユーザが実行すべきタスクを定義することとのうち少なくとも１つを含み、
前記アプリケーションの前記不完全なユーザインターフェイスは、前記１つまたは複数の意図が実現されるときに完成されるものであり、
前記複数の意図を実現するための１つまたは複数のコードモジュールを有するエキスパートシステムとを記憶する記憶装置
を具え、
ここで、前記コンピュータシステムは、前記エキスパートシステムを用いて、前記複数の意図を表す情報のうちの何れか１つを前記アプリケーションから受信し、前記受信された各意図を表す情報を用いて、該受信された意図を表す情報で表される意図を実現するための対応するコードモジュールを識別かつアクティブ化し、
対応する各コードモジュールは、どのタイプのユーザインターフェイスパターンが所与の状況において適切であるかを決定するためのガイドライン、規定、および原理から抽出されたルールのセットを含み、
前記コンピュータシステムは、受信された各意図を表す情報が供給された前記パラメータのセットを使用して、前記対応するコードモジュールに、ルールを前記ルールのセットから選択かつ実行させ、
前記コンピュータシステムは、完成されたユーザインターフェイスを、選択かつ実行された前記ルールと関連付けられたテンプレートから生成することを特徴とするシステム。
【請求項２】
前記生成されたユーザインターフェイスは、
グラフィカルユーザインターフェイス、コマンドラインインターフェイス、および、オーディオユーザインターフェイスのうち少なくとも１つを含むことを特徴とする請求項１記載のシステム。
【請求項３】
情報を外部要因として格納する外部要因のソースをさらに具え、
前記外部要因のソースは、前記アプリケーションの動作環境ならびに前記ユーザの背景に関係付けられた情報を含み、
前記コンピュータシステムは、前記外部要因を用いて、前記対応するコードモジュールに、ルールを前記ルールのセットから選択かつ実行させることを特徴とする請求項１記載のシステム。
【請求項４】
前記外部要因は、前記アプリケーションが動作中であるコンピュータのタイプ、前記アプリケーションが動作中であるオペレーティングシステムのタイプ、使用可能な入力デバイスのタイプ、使用可能な出力デバイスのタイプ、前記ユーザの前記背景、他のソフトウェアの存在、および、前記システム外部の他の事実のうちの少なくとも１つを含むことを特徴とする請求項３記載のシステム。
【請求項５】
前記パラメータのセットからの各パラメータは、
テキスト情報、前記ユーザが選択を行うことが予想される元の選択肢のセット、前記ユーザが操作することを許可されるいくつかのデータ、前記ユーザによって提出された質問へのデフォルト応答、前記ユーザが前記質問に応答する必要があることを表す指示、前記ユーザが前記質問に応答しないことができることを表す指示、前記ユーザとの対話に応答して受信されることが予想されるデータのタイプ、前記生成されたユーザインターフェイスの寸法に関する制約のセット、および、前記生成されたユーザインターフェイスが取ることができる前記ビジュアルスタイルの指示のうちの少なくとも１つを含むことを特徴とする請求項１記載のシステム。
【請求項６】
エキスパートシステムを有するコンピュータシステムによって、ユーザがコンピュータシステムと対話するためのユーザインターフェイスを生成するための方法であって、
ユーザインターフェイス目標は、不完全なユーザインターフェイスと関連付けられており、
前記コンピュータシステムが、前記ユーザインターフェイス目標を、前記エキスパートシステムを用いることにより前記ユーザインターフェイス目標を表す情報を記憶するアプリケーションから受信するステップと、
ここで、該ユーザインターフェイス目標は、前記ユーザに提出される質問と、前記ユーザに通信されるいくつかの情報と、前記ユーザによって実行されるタスクのうちの少なくとも１つを含み、
前記コンピュータシステムが、前記ユーザインターフェイス目標に対応するユーザインターフェイスを生成する際に使用されるパラメータのセットを、前記エキスパートシステムを用いることにより前記アプリケーションから受信するステップと、
ここで、各パラメータは、前記ユーザに提示するための情報と、前記ユーザによって実行される前記タスクのための情報と、前記生成されたユーザインターフェイスを制約するための情報とのうちの少なくとも１つを含み、
前記コンピュータシステムが、ユーザインターフェイスを、前記エキスパートシステムを用いることおよびコードモジュールのセットからコードモジュールを選択することによって生成するステップと
を具え、
ここで、各コードモジュールは、前記ユーザインターフェイス目標を実現するための異なる種類のテンプレートへのアクセス機能を備えることにより、ユーザインターフェイスを複数のテンプレートから生成するように設計され、
前記コードモジュールを選択するステップは、どのタイプのユーザインターフェイスパターンが所与の状況において適切であるかを決定するためのガイドライン、規定、および、原理から抽出された、前記コードモジュールに含まれるルールのセットからルールを選択するステップを含み、
前記ルールを選択するステップは、前記パラメータのセットを用いて行われ、
前記ユーザインターフェイスは、前記選択されたルールが実行されたとき、テンプレートから生成されることを特徴とする方法。
【請求項７】
前記コンピュータシステムが、外部要因のセットを前記エキスパートシステムによって選択的に検査するステップをさらに具え、
各要因は、前記コンピュータシステムの動作環境および前記ユーザの背景から選択され、
前記ルールを選択するステップは、前記外部要因のセットをさらに用いて行われることを特徴とする請求項６記載の方法。
【請求項８】
ユーザインターフェイス目標は、前記ユーザに単一のテキスト文字列を供給させることと、前記ユーザに単一の数を供給させることと、前記ユーザに単一の項目をリストから選び取らせることと、前記ユーザにいくつかの項目をリストから選び取らせることと、前記ユーザにリストにおける前記項目を好ましい順序で配列させることと、前記ユーザに項目のリストを管理させることと、前記ユーザに項目を所与の構造に編成させることと、前記ユーザに１つまたは複数のオペレーションをリスト内で項目の選択において適用させることとのうちの少なくとも１つを含むことを特徴とする請求項６記載の方法。
【請求項９】
ユーザインターフェイスを作成するためのシステムであって、
ａ）少なくとも１つのユーザインターフェイスデザイナの意図が記述されたプログラミングコードを含むアプリケーションと、
ここで、該少なくとも１つの意図を表す情報は、関連付けられたパラメータのセットを含み、
ｂ）少なくとも１つの意図を表す情報および前記関連付けられたパラメータのセットを受信するためのエキスパートシステムと
を記憶する記憶装置を具え、
該エキスパートシステムは、複数のコードモジュールを含み、前記コードモジュールの各々は、ルールのセットを含み、前記ルールの各々は、テンプレートに関連付けられており、
前記ユーザインターフェイスを作成するためのシステムは、前記少なくとも１つの意図を表す情報および前記関連付けられたパラメータのセットを受信することに応答して、該エキスパートシステムを使用して、
ｉ）前記複数のコードモジュールからコードモジュールを選択し、
ｉｉ）ルールを、前記選択されたコードモジュールに含まれた前記ルールのセットから選択し、
ｉｉｉ）ユーザインターフェイスを、前記選択されたルールに関連付けられた前記テンプレートに従って生成する
ことを特徴とするシステム。
【請求項１０】
関連付けられたディスプレイを有するコンピュータ上でアプリケーションのためのユーザインターフェイスを生成する方法であって、
ａ）前記コンピュータが、ユーザインターフェイスデザイナによりアプリケーションに含まれるプログラミングコードで記述された少なくとも１つの意図と、前記少なくとも１つの意図に関連付けられたパラメータのセットとをエキスパートシステムに供給するステップと、
ｂ）前記コンピュータが、前記エキスパートシステムが前記少なくとも１つの意図を表す情報と該関連付けられたパラメータのセットとを受信することに応答して、前記エキスパートシステムを用いて、
ｉ）コードモジュールを複数のコードモジュールから選択するステップと、
ｉｉ）ルールを、前記選択されたコードモジュール内のルールのセットから選択するステップと、
ｉｉｉ）ユーザインターフェイスを、前記選択されたルールに関連付けられたテンプレートから生成するステップとを有し、
ｃ）前記コンピュータが、前記ユーザインターフェイスを前記アプリケーションに供給するステップと、
ｄ）前記コンピュータが、前記アプリケーションが前記ユーザインターフェイスを受信することに応答して、前記アプリケーションを用いて、ユーザインターフェイスを前記ディスプレイ上で生成するステップと
を具えたことを特徴とする方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、一般にエキスパートシステムに関し、より詳細には、ユーザインターフェイスデザイナの意図をアプリケーションから受信し、この意図を、ユーザインターフェイス設計のガイドライン、規定および原理の形で実施されるような、ユーザインターフェイスの分野におけるエキスパートの知識に基づく１組のプログラムのルールからユーザインターフェイスを生成するための意思決定を行うことによって実現する１つのソフトウェアに関する。
【０００２】
（関連出願の相互参照）
なお、本願は、２００１年２月２７日出願の米国仮特許出願第６０／２７２，００６号の特典を主張し、これを参照により明白に本明細書に組み込んだものである。
【０００３】
【従来の技術】
ユーザインターフェイスは、プログラムまたはオペレーティングシステムの一部分であり、これを介してユーザがコンピューティングデバイスに結果に到達するように命令することができ、かつこれを介してデバイスが情報をユーザに運ぶことができる。コンピューティングデバイスの例は、コンピュータ、電話などの携帯用電子デバイス、およびインタラクティブテレビユニットである（以下で、コンピュータという用語を使用して、一般にすべてのコンピューティングデバイスを指す）。
【０００４】
グラフィカルユーザインターフェイスは、コンピュータのモニタまたは他のタイプのディスプレイ（テレビなど）を出力デバイスとして、および、ディスプレイに影響を及ぼす１つまたは複数の入力デバイス、通常はコンピュータのキーボード、およびマウスなどのポインティングデバイスを使用するユーザインターフェイスである。コンピュータはスクリーンにおいて情報をユーザに表示する。スクリーンは、ディスプレイの閲覧可能な領域全体を取り上げることができ、あるいは、視聴可能な領域の一部のみをウィンドウの形式において取り上げることができる。別のユーザインターフェイスの実施例はオーディオユーザインターフェイスであり、これはユーザがマイクロフォン入力デバイスを介してコンピュータに話し、コンピュータがスピーカ出力デバイスを介して応答するものである。いくつかのユーザインターフェイスは、複数の対話のモード（たとえば、グラフィカルおよびオーディオ）をサポートする。
【０００５】
ソフトウェアプログラマはユーザインターフェイスをプログラミング言語により作成し、これによりコンピュータの入力および出力デバイスへのアクセスが可能になる。しかし、これらのユーザインターフェイスを初めから作成する必要はない。たとえば、図１を参照すると、ユーザインターフェイスルーチンの集まりを、Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標）オペレーティングシステム１１８（以下「Ｗｉｎｄｏｗｓ（登録商標）１１８」）など、オペレーティングシステムに常駐するライブラリ（図示せず）に記憶することができる。ライブラリにおけるユーザインターフェイスルーチンを呼び出すため、ソフトウェアプログラマは関数呼出しを配置し、プログラム１１６における適切な場所でライブラリにおいて対応するルーチンを呼び出す。プログラム１１６を動作中であるコンピュータが関数呼出しに来たとき、コンピュータが関数呼出しを実行し、関数呼出しを、ライブラリにおいて対応するユーザインターフェイスルーチンからのサービスのための要求に変換する。
【０００６】
各関数呼出しは、入力引数のセットを含む。入力引数は、関数呼出しがコンピュータによって実行されたとき、対応するユーザインターフェイスルーチンに沿って渡される。各ルーチンはユーザインターフェイスを、ダイアログボックス１２０など、特定のテンプレートから提示するように設計され、これはユーザからの応答を処理する特殊なウィンドウである。入力引数は、ダイアログボックス１２０の提示に影響を与えることができる情報を提供する。各関数呼出しは、１つのルーチンにおいて単一のテンプレートとの１対１の対応を有する。各関数呼出しについて、特定のテンプレートの正確なインスタンスが現れるという期待がある。逸脱がある可能性はなく、これは、いかなる逸脱もＷｉｎｄｏｗｓ（登録商標）１１８においてバグと見なされるからである。
【０００７】
図２ないし図５は、メッセージボックス１２４〜１３０を例示し、これらはあるタイプのダイアログボックス１２０である。各メッセージボックスが形成される元のテンプレートはタイトルバー１０２を含み、これはメッセージボックスの最上部にある水平のスペースであり、メッセージボックスの名前を含むものであり、また、閉じるボタン１０４を含み、これは通常はタイトルバーの右隅に位置し、その上にｘマークが付いている正方形のボタンである。メッセージボックス用のテンプレートは、メッセージを含むためのスクリーン１０６、ならびにユーザがメッセージボックスと対話することができる１つまたは複数のボタンも含む。
【０００８】
図２におけるメッセージボックス１２４は、メッセージ「Ｈｅｌｌｏ  ｗｏｒｌｄ！」を、ＯＫボタン１０８と共にユーザに提示する。図２のメッセージボックス１２４を作成するための関数呼出しは、ｍｅｓｓａｇｅＢｏｘ（「Ｈｅｌｌｏ  Ｗｏｒｌｄ！」、ＯＫ）という形式にすることができ、これは「ｍｅｓｓａｇｅＢｏｘ」という名前および２つの入力引数「Ｈｅｌｌｏ  Ｗｏｒｌｄ」および「ＯＫ」を有する関数呼出しである。
【０００９】
図３のメッセージボックス１２６は、図２のメッセージボックス１２４に類似している。ただし、図３のメッセージボックス１２６は、キャンセルボタン１１０も含んでいる。
【００１０】
図３のメッセージボックスの１２６を作成するための関数呼出しは、ｍｅｓｓａｇｅＢｏｘ（「Ｈｅｌｌｏ  Ｗｏｒｌｄ！」、ＯＫ＿ＣＡＮＣＥＬ）という形式を有することができる。
【００１１】
図４のメッセージボックス１２８は、図２および図３のメッセージボックス１２４、１２６と同様に、メッセージ「Ｈｅｌｌｏ  Ｗｏｒｌｄ！」を含む。この違いは、図４のメッセージボックス１２８はＹＥＳボタン１１４、ＮＯボタン１１２、ならびにキャンセルボタン１１０を含むが、ＯＫボタン１０８を含んでいないことである。メッセージボックス１２８を作成するための関数呼出しは、ｍｅｓｓａｇｅＢｏｘ（「Ｈｅｌｌｏ  Ｗｏｒｌｄ！」、ＹＥＳ＿ＮＯ＿ＣＡＮＣＥＬ）という形式を有することができる。
【００１２】
図５のメッセージボックス１３０を作成する関数呼出しへの入力引数は、長いテキスト文字列「Ｃａｌｌ  ｍｅ  Ｉｓｈｍａｅｌ．．．」およびＯＫボタン１０８を含む。図５のメッセージボックス１３０を作成する関数呼出しに対応するユーザインターフェイスルーチンは、図５のメッセージボックス１３０の垂直のスペースを増大して、長いテキスト文字列を収容するようにする。図５のメッセージボックス１３０を作成するための関数呼出しの形式は、ｍｅｓｓａｇｅＢｏｘ（「Ｃａｌｌ  ｍｅ  Ｉｓｈｍａｅｌ．．．」、ＯＫ）など、シグネチャを含む。
【００１３】
図２ないし図５は、関数呼出しｍｅｓｓａｇｅＢｏｘ（．．．）がプログラム１１６から作成され、Ｗｉｎｄｏｗｓ（登録商標）１１８におけるｍｅｓｓａｇｅＢｏｘテンプレートが、メッセージボックス１２４〜１３０を作成するために使用されることを例示している。メッセージボックステンプレートの修正は、ある情報を、入力引数を介して関数呼出しｍｅｓｓａｇｅＢｏｘ（．．．）へ供給することによって行うことができるが、修正されたメッセージボックスはなお一種のメッセージボックスであり、Ｗｉｎｄｏｗｓ（登録商標）１１８によって逸脱が行われることはない。
【００１４】
ユーザインターフェイスは、直接、ソフトウェアプログラマが使用するプログラミング言語において、図１ないし図５を参照して上述したように構築することができるが、これらはよりしばしば、専用ユーザインターフェイス開発ツールを使用して構築される。たとえば、グラフィカルユーザインターフェイスはしばしば、フォームパッケージと呼ばれるツールを使用して構築される。フォームパッケージは通常プログラマに、ユーザが見るであろうものを近似するスクリーン（フォームとも呼ばれる）を提示する。フォームパッケージにより、プログラマは個別のグラフィカルユーザインターフェイスコントロール（たとえば、ボタン、テキストエントリボックス、リストボックス）をスクリーンに追加することができ、コントロールをスクリーン上で配置することができる。
【００１５】
また、フォームパッケージにより、プログラマは、どのようにスクリーンおよびそのコントロールが、ユーザがボタンコントロール上をマウスによりクリックしたときなど、ユーザのアクションに反応するべきであるかを指示することもできる。通常、プログラマは、コンピュータコードにルーチンを書き込み、次いでスクリーン上のコントロールをこれらのルーチンに接続することによって、これらの反応を明示的に定義する。次いで、特定のユーザイベントが、関連付けられたコードルーチンの実行をトリガする。
【００１６】
プログラム用のグラフィカルユーザインターフェイスは、１つまたは複数のスクリーンからなる可能性がある。フォームパッケージによって、プログラマは、何のスクリーンをプログラマが望むとしてもそれによりユーザインターフェイスを構築する際に完全な自由が可能となる。
【００１７】
しかし、この自由には複数のミスをおかす可能性が付いてくる。プログラマは、そのユーザが適切に理解かつ使用するためには複雑すぎるユーザインターフェイスを作成する可能性がある。プログラマは、不注意により、バグのあるユーザインターフェイスを作成する可能性がある。バグの一例は、可能な入力条件の範囲全体を正しく処理できないことである。
【００１８】
問題の見込みを減らすために、プログラマは通常、手動でユーザインターフェイスのガイドラインおよびデファクトな規定に従うことを学んでおり、これらは、どのようにユーザインターフェイスが現れ、どのような挙動を示すべきであるかを提案するものである。
【００１９】
たとえば、図１３は、グラフィカルユーザインターフェイスにおけるあるタイプのスクリーンであり、ユーザが４項目のうち１つを選択するように求められるものである。ウィンドウ７０２はテキスト７０４を含み、これがユーザに対してオプションボタン７０６、７０８、７１０および７１２から選択を行うように指図する。この例では、オプションボタン７０６が選択された状態で図示される。オプションボタン７０６、７０８、７１０および７１２のうちただ１つのみを、所与の時間に選択することができる。ユーザはボタンのうち１つを選択し、次いでＯＫボタン７１４をクリックして、自分が完了したことを指示する。ユーザはキャンセルボタン７１６をクリックして、選択を行うことを希望しないことを指示することもできる。
【００２０】
このスクリーンにおける作業での規定の一例として、ＯＫボタン７１４およびキャンセルボタン７１６がオプションボタン７０６、７０８、７１０および７１２の下になる標準の配置を考察する。この規定は、ユーザが最初にオプションボタンと対話し、次にＯＫボタンまたはキャンセルボタンと対話するであろうという事実、および、人は通常スクリーンを上から下へ読むという事実から生じる。ボタン７１４、７１６をオプションボタンの右側に配置することも受け入れ可能（かつ規定内）であり、これは英語（および他の複数の言語）が左から右へ読まれるからである。しかし、ボタン７１４、７１６をスクリーンの最上部でオプションボタンの７０８〜７１２の上に置くことは受け入れ可能ではなく、これはユーザがＯＫボタン７１４またはキャンセルボタン７１６を、オプションを選択する前に押す可能性が高くなるからである。
【００２１】
図１３に示すスクリーン上のコントロールは、よく知られているパターンを形成する。複数のプログラマは、スクリーンの特有の目的が異なる場合でも、図１３に示すパターンに従うスクリーンを作成する。結局は、グラフィカルユーザインターフェイスのユーザがこのようなパターンに慣れるようになる可能性があり、それによりプログラムによる彼らの効率が向上する。彼らはまた、スクリーンが以前に見たことのあるパターンに準拠していた場合、新しいスクリーンをより迅速に学習できる可能性がある。
【００２２】
大抵のソフトウェアプログラミング環境は、このようなユーザインターフェイスパターンを利用するためのいかなる方法も提供しない。プログラマが自分のプログラムにおいて、図１３に示すものと同じパターンに従う選択肢の選択スクリーンを使用することを望んだ場合、彼は通常、基本グラフィカルユーザインターフェイスコントロールを使用して、スクラッチ（ｓｃｒａｔｃｈ）からこのようなスクリーンを作成するために、フォームパッケージを使用しなければならない。プログラマは一般に、スクリーンの外観および挙動を初めから定義するので、ユーザインターフェイスを不正確に実施する可能性があり、それにより、不注意によりバグを導入する可能性がある。これは、プログラマが、よく知られたパターンに従うスクリーンを作成しようとしているときでさえ、起こる可能性がある。
【００２３】
単純なユーザインターフェイスパターンでさえも、プログラマが正しくパターンに従うことが困難である可能性がある。プログラマは、ユーザがいずれかの利点をパターンの使用から得るために、いくつかの正しい詳細を得ることが必要である。このような詳細の実施例には、それだけに限定されるものではないが、正しいコントロールのセットの選択、従来の、或いはそうでない場合は意味のあるラベルをこれらのコントロールのために提供すること、コントロールをスクリーン上に正しく配列すること、ユーザ入力のすべての使用可能なモード（キーボード、ポインティングデバイス、音声認識など）をサポートすること、すべての条件およびエラーを正しく処理すること、インターフェイスを様々なロケールおよび言語において正しく使用できるようにすること、およびインターフェイスを、様々な身体的障害（色盲、近視、盲目、身体的協調が遅いなど）を有する人々が正しく使用できるようにすることが含まれる。
【００２４】
さらに、どのタイプのユーザインターフェイスパターンが所与の状況において適切であるかを決定するためのガイドラインは、ありふれたものではない。プログラマがユーザに一連の選択肢を提示し、ユーザに選択肢のうち厳密に１つを選択するように要求することを望む状況を考察する。プログラマがＭｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標）オペレーティングシステム上で使用するためのグラフィカルユーザインターフェイスを作成中であると仮定する。Ｍｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎは、１セットのユーザインターフェイスガイドラインを、Ｗｉｎｄｏｗｓ（登録商標）用に設計されたプログラム向けに発行している（「Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標）Ｕｓｅｒ  Ｅｘｐｅｒｉｅｎｃｅ：Ｏｆｆｉｃｉａｌ  Ｇｕｉｄｅｌｉｎｅｓ  ｆｏｒ  Ｕｓｅｒ  Ｉｎｔｅｒｆａｃｅ  Ｄｅｖｅｌｏｐｅｒｓ  ａｎｄ  Ｄｅｓｉｇｎｅｒｓ」、Ｍｉｃｒｏｓｏｆｔ  Ｐｒｅｓｓ、１９９９年）。これらのガイドラインは、以下のような少なくとも３つの異なるタイプのコントロールを提案しており、これらをこの状況において使用することができる。
【００２５】
１）オプションボタン：「オプションボタンは、ラジオボタンとも呼ばれ、制限された相互排他的な選択肢のセット内の単一の選択を表す。すなわち、ユーザはオプションのセットのうち１つのみを選択することができる。したがって、常にオプションボタンを２つまたはそれ以上のセットにおいてグループ化する．．．。オプションボタンの使用を、小さいセットのオプション、通常は７つあるいはそれ未満だが、常に少なくとも２つに制限する。さらに選択肢が必要である場合、単一選択リストボックスまたはドロップダウンリストボックスなど、異なるタイプのコントロールの使用を考察する。」（１６４ページ）
２）単一選択リストボックス：「リストボックスは、ユーザのための選択肢のリストを表示するためのコントロールである．．．。リストボックスは、複数の選択肢を表示するために最適であり、これは数またはコンテンツにおいて変わるものである．．．。単一選択リストボックスは、ただ１つの項目をリストにおいて選択するように設計される。したがって、コントロールは、オプションボタンのグループに類似した相互排他的なオペレーションを提供するが、ただし、リストボックスは複数の項目をより効率的に処理することができる。単一選択リストボックスを、少なくとも３から８の選択肢を示すために十分に高く定義する．．．どこでリストボックスが使用されるかの設計制約に応じて行う。」（１７０〜１７４ページ）
３）ドロップダウンリストボックス：「単一選択リストボックスと同様に、ドロップダウンリストボックスは、単一の項目のみをリストから選択することに備えており、違いは、リストが要求において表示されることである。．．．。ドロップダウンリストボックスは、スペースを節約して使用し、かつクラッタを低減するために効果的な方法であるが、これらは、項目のブラウズおよび選択のために、単一選択リストボックスより多くのユーザの労力を必要とする。」（１７５ページ）
【００２６】
【発明が解決しようとする課題】
信じられないことに、どのコントロールを使用するべきであるかについての決定は、プログラマに委ねられている。プログラマは状況をすぐに評価し、これを、使用可能なガイドラインおよび規定と比較し、次いで適切な選択を行わなければならない。適切なパターンの選択に失敗することは、ユーザを混乱させる危険性がある。
【００２７】
プログラマの決定を複雑にするものは、プログラマがプログラムを記述中であるときに、プログラマが通常は、ユーザインターフェイスが使用されるであろう厳密な条件を知ることができないことである。プログラムはユーザに選択肢のリストを提供する必要があり、ただし選択肢の数は、変化する要因に応じて大幅に変わる（たとえば、プログラムは、現在コンピュータネットワークに接続している人のリストを表示する必要がある）。プログラマはしばしば意思決定を、このような要因についての論理的あるいは推定された値の範囲に基づいて行うことを強いられる。プログラムの記述時に行われた決定の結果、実際には不適当なユーザインターフェイスとなるおそれがある。
【００２８】
そこで、本発明の目的は、適切なユーザインターフェイスパターンを識別かつ構築する負担の多くをエキスパートシステムに移動させ、該システムはユーザインターフェイス設計のガイドライン、規定および原理に従うようにプログラムされたエキスパートシステムを提供することにある。
【００２９】
【課題を解決するための手段】
プログラマはアプリケーションを従来の方法で記述するが、アプリケーション用の完全なユーザインターフェイスを作成する必要はない。その代わりに、プログラマはコードを記述して、ユーザインターフェイスの目的についての自分の意図を反映し、これらのいくつかのコードがエキスパートシステムを呼び出し、これがアプリケーションのユーザインターフェイスを完成する。エキスパートシステムは、適切なユーザインターフェイスをその場で生成し、このインターフェイスをアプリケーションに返す。
【００３０】
次いで、アプリケーションがこのユーザインターフェイスを呼び出し、これがユーザの対話をコントロールする。ユーザインターフェイスがアプリケーションと、必要なように通信する。ユーザインターフェイスは結局、ユーザインターフェイスがある指示をユーザの対話から受信したとき、コントロールをアプリケーションに返す。ユーザインターフェイスをオンザフライで生成する代わりに、別法として、エキスパートシステムがユーザインターフェイスを、後にアプリケーションのランタイム中に使用するために生成し、記憶する。プログラマはエキスパートシステムを使用して、アプリケーションのユーザインターフェイス全体またはその一部のみを生成することができる。
【００３１】
本発明の前述の態様および複数の付随の利点は、以下の詳細な説明を、添付の図面と共に取られるときに参照することによって、これがよりよく理解されるようになるので、より容易に理解されるようになるであろう。
【００３２】
【発明の実施の形態】
以下、図面を参照して、本発明の実施の形態を詳細に説明する。
【００３３】
図６は、本発明を実施することができる適切なコンピューティングシステム環境２００の一例を示す。
【００３４】
コンピューティングシステム環境２００は適切なコンピューティング環境の一実施例でしかなく、本発明の使用または機能性の範囲について、いかなる限定も示唆するように意図されるものではない。コンピューティング環境２００は、例示かつ記載されたコンポーネントのいずれか１つまたは組み合わせに関するいかなる従属性または要件も有するものとして解釈されるべきではない。
【００３５】
本発明は、複数の他の汎用または専用コンピューティングシステム環境または構成により動作する。本発明による使用のために適切である可能性のある周知のコンピューティングシステム、環境および／または構成の例には、それだけに限定されるものではないが、パーソナルコンピュータ、サーバコンピュータ、ハンドヘルドまたはラップトップデバイス、マルチプロセッサシステム、マイクロプロセッサベースのシステム、セットトップボックス、プログラマブルな家庭用電化製品、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータ、上のシステムまたはデバイスのいずれかを含む分散コンピューティング環境などが含まれる。
【００３６】
本発明を一般に、コンピュータによって実行されるプログラムモジュールなど、コンピュータ実行可能命令に関連して記載する。一般に、プログラムモジュールには、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造などが含まれ、これらは特定のタスクを実行するか、あるいは特定の抽象データタイプを実施する。
【００３７】
本発明はまた、分散コンピューティング環境においても実施することができ、ここではタスクが、通信ネットワークを介してリンクされるリモート処理デバイスによって実行される。分散コンピューティング環境では、プログラムモジュールが、記憶デバイスを含む、ローカルおよびリモートコンピューティング記憶媒体に位置することができる。
【００３８】
図６を参照すると、本発明を実施するためのシステムは、汎用コンピューティングデバイスをコンピュータ２１０の形式において含む。コンピュータ２１０のコンポーネントは、それだけに限定されるものではないが、処理装置２２０、システムメモリ２３０およびシステムバス２２１を含むことができ、システムバス２２１は、システムメモリを含む様々なシステムコンポーネントを処理装置２２０に結合する。システムバス２２１はいくつかのタイプのバス構造のいずれにすることもでき、これにはメモリバスまたはメモリコントローラ、周辺バス、および様々なバスアーキテクチャのいずれかを使用するローカルバスが含まれる。
【００３９】
例として、それだけに限定されるものではないが、このようなバスアーキテクチャには、業界標準アーキテクチャ（ＩＳＡ）バス、マイクロチャネルアーキテクチャ（ＭＣＡ）バス、拡張ＩＳＡ（ＥＩＳＡ）バス、Ｖｉｄｅｏ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｓｔａｎｄａｒｄｓ  Ａｓｓｏｃｉａｔｉｏｎ（ＶＥＳＡ）ローカルバス、周辺コンポーネント相互接続（ＰＣＩ）バスが含まれ、これはＭｅｚｚａｎｉｎｅバスとしても知られている。
【００４０】
コンピュータ２１０は通常、さまざまなコンピュータ可読媒体を含む。コンピュータ可読媒体は、コンピュータ２１０によってアクセスすることができるいかなる使用可能な媒体にすることもでき、揮発性および不揮発性媒体、取外し可能および取外し不能媒体を含む。例として、それだけに限定されるものではないが、コンピュータ可読媒体は、コンピュータ記憶媒体および通信媒体を含むことができる。コンピュータ記憶媒体は、揮発性および不揮発性、取外し可能および取外し不能媒体を含み、これは、コンピュータ可読命令、データ構造、プログラムモジュールまたは他のデータなど、情報を記憶するためのいずれかの方法または技術において実施される。
【００４１】
コンピュータ可読媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリまたは他のメモリ技術、ＣＤ−ＲＯＭ、デジタル多用途ディスク（ＤＶＤ）または他の光ディスク記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置または他の磁気記憶デバイス、または他のいかなるコンピュータ記憶媒体をも含むが、これに限定されるものではない。
【００４２】
通信媒体は通常、コンピュータ可読命令、データ構造、プログラムモジュール、または、搬送波などの変調データ信号における他のデータ、またはいかなる情報送達媒体をも含む他の移送メカニズムを実施する。「変調データ信号」という用語は、１つまたは複数のその特性セットを有するか、あるいは信号における情報を符号化するような方法で変更された信号を意味する。例として、それだけに限定されるものではないが、通信媒体は、ワイヤードネットワークまたはダイレクトワイヤード接続などのワイヤード媒体、および、音波、ＲＦ赤外線および他のワイヤレス媒体などのワイヤレス媒体を含む。上のいずれかの組み合わせも、コンピュータ可読媒体の範囲内に含まれるべきである。
【００４３】
システムメモリ２３０は、読み取り専用メモリ（ＲＯＭ）２３１およびランダムアクセスメモリ（ＲＡＭ）２３２など、揮発性および／または不揮発性メモリの形式におけるコンピュータ記憶媒体を含む。基本入出力システム２３３（ＢＩＯＳ）は、起動中など、情報をコンピュータ２１０内の要素の間で転送するための助けとなる基本ルーチンを含み、通常はＲＯＭ２３１に記憶される。ＲＡＭ２３２は通常、データおよびまたはプログラムモジュールを含み、これらは即時にアクセス可能であり、かつ／またはそのとき処理装置２２０によって操作を加えられている。例として、それだけに限定されるものではないが、図６はオペレーティングシステム２３４、アプリケーションプログラム２３５、他のプログラムモジュール２３６およびプログラムデータ２３７を例示する。
【００４４】
コンピュータ２１０は他の取外し可能／取外し不能、揮発性／不揮発性コンピュータ記憶媒体も含むことができる。例としてのみ、図６は、取外し不能な不揮発性磁気媒体から読み取りあるいはこれに書き込むためのハードディスクドライブ２４１、取外し可能な不揮発性磁気ディスク２５２から読み取りあるいはこれに書き込むための磁気ディスクドライブ２５１、および、ＣＤ−ＲＯＭまたは他の光媒体など、取外し可能な不揮発性光ディスク２５６から読み取りあるいはこれに書き込むための光ディスクドライブ２５５を例示する。
【００４５】
例示的動作環境において使用することができる他の取外し可能／取外し不能、揮発性／不揮発性コンピュータ記憶媒体は、それだけに限定されるものではないが、磁気テープカセット、フラッシュメモリカード、デジタル多用途ディスク、デジタルビデオテープ、ソリッドステートＲＡＭ、ソリッドステートＲＯＭなどを含む。ハードディスクドライブ２４１は通常、インターフェイス２４０などの取外し不能メモリインターフェイスを介してシステムバス２２１へ接続され、磁気ディスク書き込み２５１および光ディスクドライブ２５５は通常、インターフェイス２５０などの取外し可能メモリインターフェイスによってシステムバス２２１へ接続される。
【００４６】
上述かつ図６において例示されたドライブおよびそれらの関連付けられたコンピュータ記憶媒体は、コンピュータ２１０のためのコンピュータ可読命令、データ構造、プログラムモジュールおよび他のデータを提供する。図６では、たとえば、ハードディスクドライブ２４１が、オペレーティングシステム２４４、アプリケーションプログラム２４５、他のプログラムモジュール２４６およびプログラムデータ２４７を記憶するものとして例示される。
【００４７】
これらのコンポーネントは、オペレーティングシステム２３４、アプリケーションプログラム２３５、他のプログラムモジュール２３６およびプログラムデータ２３７と同じものにするかあるいはそれらと異なるようにすることができる。オペレーティングシステム２４４、アプリケーションプログラム２４５、他のプログラムモジュール２４６およびプログラムデータ２４７には、ここでは異なる番号が与えられて、最低でもそれらが異なるコピーであることが例示される。ユーザが、コマンドおよび情報をコンピュータ２１０へ、キーボード２６２、および、一般にマウス、トラックボールまたはタッチパッドと呼ばれるポインティングデバイス２６１などの入力デバイスを介して入力することができる。他の入力デバイス（図示せず）には、マイクロフォン、ジョイスティック、ゲームパッド、衛星放送受信アンテナ、スキャナなどが含まれる可能性がある。
【００４８】
これらおよび他の入力デバイスがしばしば処理装置２２０へ、システムバスに結合されたユーザ入力インターフェイス２６０を介して接続されるが、これを、パラレルポート、ゲームポートまたはユニバーサルシリアルバス（ＵＳＢ）など、他のインターフェイスおよびバス構造によって接続することができる。モニタ２９１または他のタイプの表示デバイスもまた、ビデオインターフェイス２９０などのインターフェイスを介してシステムバス２２１へ接続される。モニタに加えて、コンピュータは、スピーカ２９７およびプリンタ２９６など、他の周辺出力デバイスも含むことができ、これらは入出力周辺インターフェイス２９５を介して接続することができる。
【００４９】
コンピュータ２１０は、ネットワーク環境において、リモートコンピュータ２８０など、１つまたは複数のリモートコンピュータへの論理接続を使用して動作することができる。リモートコンピュータ２８０は、パーソナルコンピュータ、サーバ、ルータ、ネットワークＰＣ、ピアデバイス、または他の共通ネットワークノードにすることができ、通常は、コンピュータ２１０に関して上に記載した要素の複数またはすべてを含むが、記憶デバイス２８１のみを図６に例示した。図６に示す論理接続は、ローカルエリアネットワーク（ＬＡＮ）２７１および広域ネットワーク（ＷＡＮ）２７３を含むが、他のネットワークも含むことができる。このようなネットワーク環境は、オフィス、企業全体のコンピュータネットワーク、イントラネットおよびインターネットにおいて一般的である。
【００５０】
ＬＡＮネットワーキング環境において使用するとき、ネットワークインターフェイスまたはアダプタ２７０を介してコンピュータ２１０がＬＡＮ２７１へ接続される。ＷＡＮネットワーキング環境において使用するとき、コンピュータ２１０が通常はモデム２７２、または、インターネットなどのＷＡＮ２７３を介して通信を確立するための他の手段を含む。モデム２７２は、内部あるいは外部にすることができ、入出力周辺インターフェイス２９５または他の適切なメカニズムを介してシステムバス２２１へ接続することができる。ネットワーク環境では、コンピュータ２１０に関して示したプログラムモジュール、またはその一部を、リモート記憶デバイスに記憶することができる。例として、それだけに限定されるものではないが、図６はリモートアプリケーションプログラム２８５を、メモリデバイス２８１上に常駐するものとして例示する。図示のネットワーク接続は例示のためのものでしかなく、通信リンクをコンピュータの間で確立する他の手段を使用することができることは理解されよう。
【００５１】
図７は、本発明の好ましい実施形態を実施するために適切なコンピュータ３０２を示す。メモリ３０４の領域は、プログラマによって記述されたアプリケーション３０６を含む。このアプリケーション３０６がエキスパートシステム３０８を呼び出す。エキスパートシステム３０８は、アプリケーション３０６からそれに渡された情報を考察し、場合によっては永久記憶デバイス３１２、または、ネットワーク３１８を介して接続された別のコンピュータ３２０上に記憶された外部要因も検査する。
【００５２】
エキスパートシステム３０８はユーザインターフェイス３１０を生成し、ユーザインターフェイス３１０をアプリケーション３０６へ返す。アプリケーション３０６は、ユーザインターフェイス３１０が作成された直後、あるいは、生成されたユーザインターフェイス３１０がすでに記憶されていた場合はランタイムに、ユーザインターフェイス３１０を呼び出してユーザと対話する。ユーザインターフェイス３１０がこの対話をコントロールし、これは、情報を、出力デバイス３１４を介してユーザへ通信し、かつ入力を、入力デバイス３１６を介してユーザから受信することによって行う。対話が完了したとき、ユーザインターフェイス３１０は、対話のいかある結果も呼び出し側のプログラム３０６へ返す。
【００５３】
プログラマまたはユーザインターフェイスデザイナは、ユーザインターフェイス３１０を生成するプロセスを、ユーザインターフェイス目標または自分の意図をエキスパートシステム３０８に指示することによって開始する。図８は、ユーザインターフェイス目標または意図（以下で、ユーザインターフェイス目標３２４または意図３２４とする）の、エキスパートシステム３０８への通信をより詳細に例示する。意図３２４はアプリケーション３０６に記憶される。アプリケーション３０６は、不完全なユーザインターフェイスを有する可能性がある。意図３２４がエキスパートシステム３０８に通信されて、ユーザインターフェイス３１０が生成されたとき、アプリケーション３０６の不完全なユーザインターフェイスが完成される。意図３２４を実施するための複数の適切な技術を使用することができる。
【００５４】
１つの適切な技術は、情報３２４をアプリケーション３０６へ関数呼出しとして記憶することを含む。各関数呼出しは、それに関連付けられたパラメータ３２６のセットを有する。様々な種類のユーザインターフェイス目標または意図が可能であり、これらは、何の種類の質問をユーザに尋ねるべきであるか、何の種類の情報をユーザに通信するべきであるか、または何の種類のタスクをユーザに実行させるべきであるかなどである。このようなユーザインターフェイス目標または意図の例には、以下が含まれる。
【００５５】
１）ユーザに単一のテキスト文字列を供給させること。
２）ユーザに単一の数（たとえば、ゼロより大きい整数）を供給させること。
３）ユーザに、単一の項目をリストから選び取らせること。
４）ユーザに、いくつかの項目をリストから選び取らせること。
５）ユーザに、リストにおける項目を好ましい順序で配列させること。
６）ユーザに項目のリストを管理させること（項目の追加、項目の編集、それらの削除）。
７）ユーザに項目を所与の構造（たとえば階層）において編成させること。
８）ユーザに２つのコンテナの間で項目を移動あるいはコピーさせること（たとえば、２つのフォルダの間のファイル）。
９）ユーザに１つまたは複数のオペレーションを、リストにおける項目の選択において適用させること。
【００５６】
ユーザインターフェイス目標または意図３２４の指示に加えて、プログラマはパラメータ３２６をエキスパートシステム３０８に供給することができ、これらがさらにプログラマの意図を指定し、あるいはそうでない場合はエキスパートシステム３０８を、意味のあるユーザインターフェイスの生成において支援する。エキスパートシステム３０８は、指定されたユーザインターフェイス目標または意図に応じて、プログラマにいくつかのパラメータ３２６を供給するように要求することもできる。他のパラメータはオプショナルにすることができる。パラメータ３２６の例には、以下が含まれる。
【００５７】
１）プログラマがユーザに提供することを望む質問または命令のテキスト
２）ユーザが選択を行うことが予想される元の選択肢（たとえば、テキスト文字列のリスト）
３）プログラマが、ユーザが操作できるようにすることを望むデータ
４）質問へのデフォルト応答
５）ユーザが質問に応答することが要求されるかどうか、あるいはユーザが質問から選ぶことができるかどうかの指示
６）プログラマが、ユーザとの対話に応答して受信することが予想されるデータのタイプ（妥当性検査のため、かつもっとも有効となる表示のタイプを決定するため）
７）プログラマが、生成されたユーザインターフェイスに課すことを望む可能性のある、水平および垂直のスペースの量における制約
８）プログラマが生成されたユーザインターフェイスにおいて好むであろうビジュアルスタイルの指示（たとえば、エキスパートシステムが、ユーザがすぐにタスクに集中することができる保守的なビジュアルスタイルを有するユーザインターフェイスを生成するべきか、あるいは楽しませるための、視覚的に魅力のあるスタイルを有するユーザインターフェイスを生成するべきか）。
【００５８】
エキスパートシステム３０８は、それが使用可能な外部要因も検査することができ、これはどのユーザインターフェイスがもっとも適切であるかについての意思決定において行われる。これらの外部要因には、以下が含まれる可能性がある。
【００５９】
１）プログラムが何のタイプのコンピュータ上で動作中であるか。たとえば、デバイスの中央プロセッサの速度が、ユーザインターフェイスが実行するために受け入れ可能な処理量に制限を課す可能性がある。
【００６０】
２）プログラムが何のオペレーティングシステム上で動作中であるか。複数の現在のオペレーティングシステムが類似したユーザインターフェイスを提供するが、各オペレーティングシステムは、ある種類の対話がどのように行われるべきであるかについて、それ自体の規定を定義することができる。
【００６１】
３）何のタイプの入力デバイスが使用可能であるか。大抵のパーソナルコンピュータは少なくともコンピュータキーボードを有し、マウスなどのポインティングデバイスも有する。他のデバイスは、タッチスクリーン、音声入力用のマイクロフォン、および他の入力デバイスを有する可能性がある。たとえば、電話は数値キーパッドを有する。
【００６２】
４）何のタイプの出力デバイスが使用可能であるか。大抵のデバイスはスクリーンを有し、この場合、様々なスクリーン属性である、その物理サイズ、その解像度（それが表示できるピクセル数）、およびそれが何色を表示できるかが、関連したものとなる可能性がある。別の例の出力デバイスは、オーディオスピーカである。
【００６３】
５）これらの質問が尋ねられる対象の典型的なユーザは誰であるか。関連した要因には、通常のユーザの年齢、国籍および文化的背景、読み書きする言語、一般的なコンピュータ経験の程度、身体的能力、およびユーザが製品を使用するであろう物理的環境が含まれる可能性がある。
【００６４】
６）この質問が尋ねられている対象の特定の個人について、何が知られているか。エキスパートシステムは、先に識別された個人について、上の一般的なユーザ属性に対する特定の回答を含むことができる。
【００６５】
７）特定のユーザによる、過去におけるこの質問または類似の質問の経験の履歴がどのようなものであるか。たとえば、ユーザがこの質問に以前に直面したことが一度もなかった場合、彼はより明示的な支援を提供するユーザインターフェイスを必要とする可能性がある。他方では、ユーザがこの質問に以前に何度も直面しており、常に同じ応答を提供していた場合、エキスパートシステムは、ユーザの通常の応答をデフォルトとして提供することができ、あるいは、エキスパートシステムは、何もユーザに表示せずに即座にデフォルトの応答を返すユーザインターフェイスを生成することができる。
【００６６】
８）他の何のソフトウェアがマシン上で使用可能であるか。エキスパートシステムは他のソフトウェアアプリケーションを、それが質問を尋ねるために使用するユーザインターフェイスの形成において、使用するように決定することができる。
【００６７】
９）エキスパートシステムがアクセスを有する様々なデータの現在値が何であるか。エキスパートシステムはユーザインターフェイスを、日時など、それがマシンを介して知覚することができる世界についての様々な事実に基づいて選択することができる。加えて、マシンが他のデバイスのネットワーク（インターネットなど）へのアクセスを有する場合、エキスパートシステムが、ネットワークからのデータを使用して、その選択およびユーザインターフェイスの設計を通知できるようにすることが可能である。
【００６８】
重要なことに、エキスパートシステム３０８によって意図について生成されたユーザインターフェイスは根本的に、異なる入力条件下で、あるいは等しい入力条件下でさえ、異なる可能性がある（外部要因が変化している可能性があるため）。すなわち、エキスパートシステム３０８は、プログラマに、同じ意図および同じセットのパラメータ３２６と共に複数の回数呼び出された場合、それが同じユーザインターフェイスを生成するという保証を提供することができない。
【００６９】
エキスパートシステム３０８がグラフィカルユーザインターフェイスを生成中であった場合、生成されたユーザインターフェイス３１０は、単一のスクリーン、複数のスクリーンのシーケンスを含み、あるいはスクリーンをまったく含まない可能性がある。本明細書では「スクリーン」を使用して、一般に、出力デバイス上の可視の表示領域全体、またはより大きいディスプレイ内に含まれたウィンドウ、またはウィンドウの一部のいずれかを指す。生成されたユーザインターフェイスは、ページファンクション（ｐａｇｅｆｕｎｃｔｉｏｎｓ）においてカプセル化されたスクリーンを含むことができる。スクリーンを含んでいる、生成されたユーザインターフェイスでは、スクリーン上のコントロールが呼び出し毎に変わる可能性があり、コントロールの属性であるそれらのラベル、位置、サイズ、含まれる値などについてもそうなる可能性がある。エキスパートシステム３０８は、グラフィカルユーザインターフェイス以外の他のタイプのユーザインターフェイス（たとえば、オーディオユーザインターフェイス）を生成することもできる。
【００７０】
図９を参照すると、エキスパートシステム３０８が、コードモジュールまたはコンポーネント３３４〜３３８の集まりとして実施される。各コードモジュールは、単一のタイプのユーザインターフェイス目標または意図について、適切なユーザインターフェイスを生成するように設計される。
【００７１】
換言すれば、各コードモジュールは、ユーザインターフェイス目標または意図を実現するために、異なる種類のテンプレートへのアクセスを有している。プログラマは、自分のユーザインターフェイス目標または意図を、関連コードモジュールを呼び出すアプリケーション３０６用のプログラミングコードを記述することによって指示する。適切に呼び出されるために、コードモジュールはアプリケーション３０６に、あるパラメータを供給するように要求する可能性がある。呼び出しにおいて、コードモジュールは、アプリケーション３０６が追加のオプショナルのパラメータを指定できるようにすることもできる。これらの要求されたパラメータおよびオプショナルのパラメータは、意図毎に（よって、コードモジュール毎に）異なる可能性がある。コードモジュールは、要求されたパラメータおよびオプショナルのパラメータを評価し、いかなる関連した外部要因をも検査して、どの種類のユーザインターフェイスが適切であるかを決定する。
【００７２】
図９のように、アプリケーション３０６は、プログラマの様々な意図を表すための記述されたいくつかのコードを含み、これは、項目のリストをオーダーするための意図３３２、項目をリストから選択するための意図３３０、および他の意図３４０などである。アプリケーション３０６に記憶された各意図は、エキスパートシステム３０８において、対応するコードモジュールまたはコンポーネントを呼び出すことができ、これらはＯｒｄｅｒコンポーネント３３６、チューズ（Ｃｈｏｏｓｅ）コンポーネント３３４および他のコンポーネント３３８である。Ｃｈｏｏｓｅコンポーネント３３４は、ユーザが項目をリストから選択すること３３０を助けるための意図に対応する。ユーザが項目をリストから選択すること３３０を助けるための意図が正しくＣｈｏｏｓｅコンポーネント３３４を呼び出すために、意図は特定のプログラムのフォームにおいて記述され、これは関数呼出しＣｈｏｏｓｅ（．．．）３２４Ａなどである。関数呼出し３２４Ａのためのパラメータは、ユーザが選択するための元である項目のリスト３２６Ａを含むことができる。
【００７３】
類似の方法で、Ｏｒｄｅｒコンポーネント３３６は、項目のリストをオーダーするための意図３３２に対応する。項目のリストをオーダーするための意図３３２が、Ｏｒｄｅｒコンポーネント３３６を、関数呼出しＯｒｄｅｒ（．．．）３２４Ａを介して呼び出す。項目のリスト３２６Ｂは、関数呼出し３２４Ｂのためのパラメータを構成する。アプリケーション３０６上の他の意図３４０は、エキスパートシステム３０８において対応するコンポーネント３３８を有する。コンポーネント３３８の中の適切なコンポーネントが、関数呼出しに含まれるべき適切なパラメータのセットを伴う関数呼出しによって、呼び出される。
【００７４】
エキスパートシステムのコードモジュールが、何の種類のユーザインターフェイスが適切であるかを決定した後、モジュールはユーザインターフェイス３１０の適切な表現を生成し、この表現をアプリケーション３０６へ返す。本発明の様々な実施形態のために適切な動作環境は、オブジェクト指向の環境を含む。ユーザインターフェイス３１０は、プログラム実行中に動的に作成されるオブジェクトとして表現することができ、これをプログラムファンクションの間で渡すことができ、そのメンバファンクションが呼び出されるようにすることができ、これらのメンバファンクションが結果を呼び出し側プログラムに返すようにすることができる。このようなオブジェクトは、マシンの入力および出力デバイスと対話して、ユーザとの要求された対話を実行する。本発明の実施形態を、オブジェクト指向ではない環境においても実施できることは、当業者には理解されよう。
【００７５】
エキスパートシステム３０８がユーザインターフェイス３１０を生成し、これをアプリケーション３０６に返した後、呼び出し側プログラム３０６は通常、生成されたユーザインターフェイス３１０を即座に呼び出す。しかし、アプリケーション３０６がユーザインターフェイス３１０の表現を記憶媒体（たとえば、ディスク）に、後にアプリケーション３０６（または、潜在的に異なるプログラム）によって使用するために記憶することも可能である。ユーザインターフェイス３１０の表現を別のコンピュータへ、そのコンピュータ上のプログラムによる記憶または呼び出しのために伝送することもできる。
【００７６】
しかし、ユーザインターフェイスが生成された時間とそれが使用される時間の間に経過する時間が長いほど、様々な外部要因が、それらがエキスパートシステム３０８によって検査されたときのそれらの値から変化している可能性がより高く、それにより潜在的にユーザインターフェイスが、新しいセットの外部要因の下で不適切にされることに留意されたい。
【００７７】
図７は、アプリケーション３０６、エキスパートシステム３０８、および生成されたユーザインターフェイス３１０を、すべてが同じコンピュータ３０２上に常駐するものとして示すが、これらのコンポーネントが、ネットワークを介して通信する分離したコンピュータ上で存在できることは、当業者には理解されよう。たとえば、エキスパートシステム３０８は、インターネットサーバ（図示せず）上のプロセスの形式を取ることができ、これはユーザインターフェイスを、Ｗｏｒｌｄ  Ｗｉｄｅ  Ｗｅｂブラウザにおける表示に適切な、完全あるいは部分的にＨＴＭＬ（ハイパーテキストマークアップ言語）ページの形式において返す。
【００７８】
図１０は、エキスパートシステム３０８の呼び出しにおいて実行されるステップの流れ図である。
【００７９】
ステップ４０２では、アプリケーション３０６は、エキスパートシステム３０８に渡されるパラメータのセットを計算する。「計算する」という用語は、ユーザインターフェイスデザイナによって事前定義されたパラメータ、または、アプリケーション３０６による目的のために収集、解析あるいは適合されるパラメータの包含を意味する。
【００８０】
ステップ４０４では、アプリケーション３０６がプログラマの意図を反映し、これは関連したエキスパートシステムのコードモジュールを呼び出し、かつ関連パラメータに渡すことによって行う。エキスパートシステム３０８は、適切なユーザインターフェイス３１０の表現を生成し、返す。
【００８１】
ステップ４０６では、アプリケーション３０６がこの生成されたユーザインターフェイス３１０を呼び出す。アプリケーション３０６は、生成されたユーザインターフェイス３１０が何の形式を取るかを承知していない。アプリケーション３０６は、いつユーザインターフェイスが処理を終了したか、および対話の結果が何であったかを通知されることが予想できることのみを知っている。処理がステップ４０８へ進行し、アプリケーション３０６は、ユーザとの対話の結果を使用して、いかなる必要なオペレーションも実行することができる。
【００８２】
エキスパートシステム３０８がアプリケーション３０６に、エキスパートシステム３０８自体にこの生成されたユーザインターフェイス３１０を直接呼び出すようにさせるためのオプションを提供することが可能である。この場合、生成されたユーザインターフェイス３１０を返すのではなく、エキスパートシステム３０８がユーザとの対話の結果を返す。アプリケーション３０６の観点から、このようなオプションは効果的にステップ４０４および４０６を単一のステップに結合する。
【００８３】
図１１は、プロセス５００を例示し、これはエキスパートシステム３０８が意図またはユーザインターフェイス目標３２４をアプリケーション３０６から受信したところである。
【００８４】
ブロック５０２では、エキスパートシステム３０８がユーザインターフェイス目標３２４を、ファンクション呼び出しなど、適切なメカニズムを介して受信する。ファンクション呼び出しと共に、ブロック５０４で、エキスパートシステム３０８は、ファンクション呼び出しに関連付けられたパラメータのセットを受信する。
【００８５】
次に、ブロック５０６では、エキスパートシステム３０８は複数のコードモジュール３３４〜３３８の中でコードモジュールを選択し、これは、複数のユーザインターフェイス目標の中で、受信されたユーザインターフェイス目標に対応するものである。プロセス５００は次にブロック５０８へ流れ、ここでエキスパートシステム３０８が、選択されたコードモジュール内のルールのセットからルールを選択する。ルールのセットはプログラムにより、選択されたコードモジュールにおいて定義される。
【００８６】
各コードモジュール３３４〜３３８は、ユーザインターフェイス設計のガイドライン、規定および原理から抽出された異なるルールを含む。これらの抽出されたルールの一例を、以下で図１２を参照して論ずる。ルールが選択された後、プロセス５００がブロック５１０に入る。このとき、選択されたルールを選択かつ実行しているので、エキスパートシステム３０８がユーザインターフェイスを、選択されたルールに関連付けられたテンプレートから生成する。モジュール内の各ルールは、異なるテンプレートに対応する。
【００８７】
図１２は、ユーザに単一の項目を選択肢のリストから選択させる汎用目標に対処するように設計された、コードモジュールまたはコンポーネント３３４の実施内のルールのセットを示す。
【００８８】
この例では、エキスパートシステム３０８が、Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標）オペレーティングシステム上で使用するためのグラフィカルユーザインターフェイスを生成し、Ｍｉｃｒｏｓｏｆｔによって示されたガイドライン（「Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標）Ｕｓｅｒ  Ｅｘｐｅｒｉｅｎｃｅ：Ｏｆｆｉｃｉａｌ  Ｇｕｉｄｅｌｉｎｅｓ  ｆｏｒ  Ｕｓｅｒ  Ｉｎｔｅｒｆａｃｅ  Ｄｅｖｅｌｏｐｅｒｓ  ａｎｄ  Ｄｅｓｉｇｎｅｒｓ」、Ｍｉｃｒｏｓｏｆｔ  Ｐｒｅｓｓ、１９９９年）に従って、どのタイプのコントロールがそのタスクにもっとも適切であるかを決定する。この場合のエキスパートシステム３０８は、コードモジュールが呼び出されたとき、アプリケーション３０６に選択肢のリスト３２６Ａを供給するように要求する。プログラマはオプショナルに、エキスパートシステム３０８によって生成されたいかなるスクリーンのサイズをも制限する制約を供給することができる（たとえば、スクリーンが特定のディスプレイ上に、あるいは先に存在するウィンドウ内に適合できるようにするため）。次いで、エキスパートシステム３０８は、どの種類のユーザインターフェイスが、プログラマの目標を満たすことにおいてもっとも適切となるかを決定する。
【００８９】
ステップ６０２では、エキスパートシステム３０８は、ユーザに提供される選択肢の数をカウントする。ステップ６０４で、エキスパートシステム３０８が、選択肢のカウントがゼロであるかどうかを決定する。それがゼロであった場合、ユーザが選択を行うことはない。この場合、処理がステップ６０６へ進行し、エキスパートシステム３０８が、可視のスクリーンを含んでいないユーザインターフェイス３１０を生成する。後に呼び出されると、このユーザインターフェイス３１０は即座にアプリケーション３０６に戻り、ユーザによって選択が行われなかったことを示す結果を返す。
【００９０】
カウントがゼロより大きかった場合、処理がステップ６０８へ進行する。ここで、エキスパートシステム３０８が、選択肢のカウントがちょうど１であるかどうかを決定する。そうであった場合、処理がステップ６１０へ進行し、エキスパートシステムが、可視のスクリーンを含んでいないユーザインターフェイス３１０を再度生成する。後に呼び出されると、このユーザインターフェイス３１０は即座にアプリケーション３０６に戻り、ユーザが唯一の使用可能な選択肢を選択したことを示す結果を返す。
【００９１】
カウントが１より大きかった場合、処理がステップ６１２に進行する。このステップで、エキスパートシステム３０８が、カウントが８より小さい（すなわち、２以上であり、かつ７以下でもある）かどうかを決定する。そうであった場合、処理がステップ６１４へ進行し、エキスパートシステム３０８がユーザインターフェイス３１０を生成する。後によびだされると、このユーザインターフェイス３１０が、オプションボタンを使用して使用可能な選択肢を示す単一のスクリーンを表示する。このようなスクリーンの一実施例を、図１３に示す。
【００９２】
カウントが８以上であった場合、処理がステップ６１６へ進行する。このステップで、エキスパートシステム３０８が、生成されたユーザインターフェイスで使用可能な垂直のスペースの量においていずれかの制約があるかどうかを考察し、そうであった場合、少なくとも３つの項目を表示する単一選択リストボックスを表示するために十分な垂直のスペースがあるかどうかを考察する。十分な余地があった場合、処理がステップ６１８へ進行し、エキスパートシステム３０８がユーザインターフェイス３１０を生成する。後に呼び出されると、このユーザインターフェイス３１０が、使用可能な選択肢を単一選択リストボックスにおいて示す単一のスクリーンを示す。このようなスクリーンの一例を図１４に示す。
【００９３】
そうでない場合（リストボックスのために十分な余地がなかった場合）、処理がステップ６２０へ進行し、エキスパートシステム３０８がユーザインターフェイス３１０を生成する。後に呼び出されると、このユーザインターフェイス３１０は、使用可能な選択肢をドロップダウンリストボックスにおいて示す単一のスクリーンを表示する。このようなスクリーンの一実施例を図１６に示す。処理が完了した後、エキスパートシステム３０８がアプリケーション３０６に戻り、生成されたユーザインターフェイス３１０を返す。
【００９４】
図１３は、エキスパートシステム３０８によって生成されたグラフィカルユーザインターフェイススクリーンの一例であり、ユーザが４つの項目のうち１つを選択するように尋ねられるものである。ウィンドウ７０２はテキスト７０４を含み、これがユーザに、オプションボタン７０６、７０８、７１０および７１２から選択を行うように指図する。
【００９５】
この例では、オプションボタン７０６が選択された状態で図示される。オプションボタン７０６、７０８、７１０および７１２のうち１つのみを、所与の時間に選択することができる。ユーザはボタンのうち１つを選択し、次いでＯＫボタン７１４をクリックして、自分が終了したことを指示する。ウィンドウが閉じられ、ユーザインターフェイスがユーザの選択をアプリケーション３０６に返す。ユーザが、図示のスクリーン状態においてＯＫボタン７１４を押した場合、この最初のオプションがアプリケーション３０６に返される（このオプションを、たとえば、第１の選択を示す整数１、または、この選択のテキストについてのテキスト文字列「赤」として返すことができる）。
【００９６】
その代わりにユーザがキャンセルボタン７１６をクリックした場合、ウィンドウが閉じられ、呼び出し側のプログラムに、ユーザが選択を行わなかったことが通知される（たとえば、整数−１など、使用可能な選択肢のセットにおいて意味を有していない、特殊なヌル値を返すことによる）。
【００９７】
図１４は、エキスパートシステム３０８によって生成されたグラフィカルユーザインターフェイススクリーンの一例であり、ユーザが１０項目のうち１つを選択するように尋ねられるものである。単一のウィンドウ８０２がテキスト８０４を含み、これがユーザに、１０項目を含む（１０項目のすべては図示されない）単一選択リストボックス８０６から選択を行うように指図する。リストボックス８０６は、８項目を示すために十分な高さでしかない。ユーザはリストボックス８０６をスクロールして、すべての項目を見なければならない。ユーザがリスト項目のうち１つを選択し、次いでＯＫボタン８０８をクリックして、自分が終了したことを指示する。ウィンドウが閉じられ、ユーザインターフェイスがユーザの選択をアプリケーション３０６に返す。その代わりにユーザがキャンセルボタン８１０をクリックした場合、ウィンドウが閉じられ、アプリケーション３０６に、ユーザが選択を行わなかったことが通知される。
【００９８】
図１５〜図１６は、エキスパートシステム３０８によって生成されたグラフィカルユーザインターフェイスにおけるスクリーンの別の例を示し、ここではユーザが再度、１０項目のうち１つを選択するように尋ねられる（１０項目のすべては図示されない）。このとき、プログラマは、ユーザインターフェイスが使用することができる出力ディスプレイのサイズにおいて、いくつかの制約を確立している。
【００９９】
図１４に示すスクリーンのように、図１５に示すウィンドウ９０２はテキスト９０４を含み、これがユーザに選択を行うように指図する。しかしここでは、単一選択リストボックス８０６を使用するために十分な垂直のスペースがない。この場合、エキスパートシステム３０８は、その代わりに、選択肢のより小型の表現であるドロップダウンリストボックス９０６を選択している。ドロップダウンリストボックス９０６は最初に、単一の行に折りたたまれている。ドロップダウン矢印９０８をクリックすることによって、ユーザがこれを展開してリストボックス９１４を示すことができる。このリストボックス９１４は、使用可能な選択肢の一部を表示する。ユーザはリストをスクロールして、残りを見なければならない。ユーザはリストボックス９１４における項目のうち１つを選択し、次いでドロップダウン矢印９０８をもう一度クリックして、その最初の状態に戻す。
【０１００】
次いで、ユーザがＯＫボタン９１０をクリックして、自分が終了したことを指示する。ウィンドウが閉じ、ユーザインターフェイスがユーザの選択をアプリケーション３０６へ返す。ユーザがキャンセルボタン６１２をクリックした場合、ウィンドウ９０２が代わりに閉じられ、アプリケーション３０６に、ユーザが選択を行わなかったことが通知される。
【０１０１】
エキスパートシステム３０８は、プログラマによって作成されたプログラムから分離可能なコンポーネントであり、別々に更新あるいはそうでない場合は修正することができる。したがって、同じマシン上の複数のプログラムが、エキスパートシステム３０８の同じインスタンスを呼び出すことができる。エキスパートシステム３０８が、後続のバージョンにおける追加のユーザインターフェイスの知識により改良あるいは修正されるとき、エキスパートシステム３０８は異なる意思決定を行うことができる。同じ意図またはユーザインターフェイス目標、パラメータのセットおよび外部要因が与えられると、異なるバージョンのエキスパートシステム３０８は、異なるユーザインターフェイスを生成することができる。
【０１０２】
複雑なユーザインターフェイスの構築において、エキスパートシステム３０８はそれ自体を再帰的に呼び出して、ユーザインターフェイスの一部を構築することができる。たとえば、複数のスクリーンを有する複雑なグラフィカルユーザインターフェイスを生成することができるコードモジュールは、他のコードモジュールを呼び出して、個々のスクリーンを生成することができる。
【０１０３】
プログラマは、エキスパートシステム３０８の、ユーザインターフェイス設計原理の既存の知識を、安心して利用することができる。プログラマは、新しいコードモジュールを作成し、かつこれらをエキスパートシステム３０８自体に追加することによって、ユーザインターフェイス設計原理の新しい知識（場合によっては、ある特定の領域におけるもの）を体系化するための能力を有することもできる。これにより、この知識が他のプログラマにも使用可能になる。
【０１０４】
以上から、本発明の処理は、以下のようにまとめることができる。
【０１０５】
エキスパートシステムは、ユーザインターフェイスデザイナの１つ又は複数の意図を実現するための１つ又は複数のコンポーネントを含む。各意図は、エキスパートシステムによって受信されたとき、受信された意図を実現するための対応するコンポーネントを識別し、アクティブ化する。各コンポーネントは、プログラムにより、ユーザインターフェイス設計のガイドライン、規定および原理から抽出されたルールのセットを含む。パラメータのセットには、受信された各意図も供給されて、対応するコンポーネントを支援してルールをルールのセットから選択かつ実行する。各ルールは、ユーザインターフェイスを、他のルールによって使用された他のテンプレートとは異なるテンプレートから生成する。
【０１０６】
なお、本発明の好ましい実施形態を例示し、記載したが、特許請求の範囲の範囲内で、本発明の精神および範囲から逸脱することなく、様々な変更をその中で行うことができることは理解されよう。
【０１０７】
独占的な所有権または特権が主張される本発明の実施形態は、以下のように定義される。
【０１０８】
【発明の効果】
以上説明したように、本発明によれば、不完全なユーザインターフェイスを有しかつアプリケーションのユーザインターフェイスデザイナの複数の意図を記憶するように適合されたアプリケーションと、複数の意図を実現するための１つ又は複数のコンポーネントを有するエキスパートシステムとを設けたので、適切なユーザインターフェイスパターンを識別かつ構築する負担の多くをエキスパートシステムに移動させ、該エキスパートシステムをユーザインターフェイス設計のガイドライン、規定、原理に従うようにプログラムすることができる。
【図面の簡単な説明】
【図１】プログラムにおけるユーザインターフェイス関数呼出し、オペレーティングシステムにおける特定のユーザインターフェイスルーチン、および、特定のテンプレートからのユーザインターフェイスの対応する提示の間の１対１の対応を例示するブロック図である。
【図２】ユーザインターフェイス関数呼出しへのユーザ引数の値に依存する、メッセージボックスの様々な提示を例示する図である。
【図３】ユーザインターフェイス関数呼出しへのユーザ引数の値に依存する、メッセージボックスの様々な提示を例示する図である。
【図４】ユーザインターフェイス関数呼出しへのユーザ引数の値に依存する、メッセージボックスの様々な提示を例示する図である。
【図５】ユーザインターフェイス関数呼出しへのユーザ引数の値に依存する、メッセージボックスの様々な提示を例示する図である。
【図６】コンピューティングデバイスを例示するブロック図である。
【図７】本発明の一実施形態である、ユーザインターフェイスを生成するためのエキスパートシステムを含むコンピューティングシステムを例示するブロック図である。
【図８】本発明の一実施形態である、ユーザインターフェイスを生成するためのエキスパートシステムへの、ユーザインターフェイスデザイナの意図およびパラメータをより詳細に例示するブロック図である。
【図９】本発明の一実施形態である、１つまたは複数のユーザインターフェイスデザイナの意図をエキスパートシステムへ送信するアプリケーションの間の対話、および、エキスパートシステムが１つまたは複数の意図をアプリケーションから受信してユーザインターフェイスを生成することを、より詳細に示すブロック図である。
【図１０】本発明の一実施形態である、エキスパートシステムを呼び出すための方法を例示するプロセス図である。
【図１１】本発明の一実施形態である、エキスパートシステムがユーザインターフェイスデザイナの意図を実現してユーザインターフェイスを生成する方法を例示する別のプロセス図である。
【図１２】本発明の一実施形態である、エキスパートシステムのサンプルコードモジュールまたはコンポーネント内の、ユーザインターフェイスデザイナの意図を実現するため、より詳細には、ユーザに使用可能な選択肢を示すための方法を示すプロセス図である。
【図１３】本発明の一実施形態である、ユーザがオプションボタンを使用して選択するために使用可能な選択肢を例示するブロック図である。
【図１４】本発明の一実施形態である、使用可能な選択肢をユーザへ、単一選択リストボックスにおいて示すスクリーンを例示するブロック図である。
【図１５】本発明の一実施形態である、ドロップダウンリストボックスの選択された選択肢を示す単一のスクリーンのブロック図である。
【図１６】本発明の一実施形態である、使用可能な選択肢をユーザへ、ドロップダウンリストボックスにおいて示す単一のスクリーンを例示するブロック図である。
【符号の説明】
３０２、３２０  コンピュータ
３０６  アプリケーション
３０８  エキスパートシステム
３１０  ユーザインターフェイス
３１２  永久記憶装置
３１４  入力デバイス
３１６  出力デバイス
３２４、３３０、３３２、３４０  意図
３２４  目標
３２６  パラメータ
３３４  Ｃｈｏｏｓｅコンポーネント
３３６  Ｏｒｄｅｒコンポーネント
３３８  他のコンポーネント
【図１】
0004718747.tif 000002
【図２】
0004718747.tif 000003
【図３】
0004718747.tif 000004
【図４】
0004718747.tif 000005
【図５】
0004718747.tif 000006
【図６】
0004718747.tif 000007
【図７】
0004718747.tif 000008
【図８】
0004718747.tif 000009
【図９】
0004718747.tif 000010
【図１０】
0004718747.tif 000011
【図１１】
0004718747.tif 000012
【図１２】
0004718747.tif 000013
【図１３】
0004718747.tif 000014
【図１４】
0004718747.tif 000015
【図１５】
0004718747.tif 000016
【図１６】
0004718747.tif 000017