(57)【要約】【課題】ユビキタスコンピューティング環境におけるコンポーネントの構成を簡素化する。【解決手段】履歴コンテキストデータは、環境またはロギングサービスにおけるコンポーネント間で分散し、また特定のコンポーネントまたはロギングサービスに保存することができる。履歴コンテキストデータの使用は、抽象アプリケーションと抽象コンポーネントを使って、関係する環境内でコンポーネント構成を創作する、あるいは再現するのに役立つ。抽象アプリケーションは、特定のコンポーネントとの接続を創出するよう指定できる。抽象アプリケーションはまた、汎化し、特定のコンポーネントとの接続を創出することなく、利用可能なコンポーネントからどのコンポーネントを使用すべきか、機能を実行するには、選択されたコンポーネントをどのように接続するかを判断することにより、所望の機能を実行するコンポーネント接続を創出できるようにすることも可能である。【選択図】図１９
2004192650.tif 000002
【特許請求の範囲】
【請求項１】
複数のコンポーネントの第一のセットを構成するためのコンピュータ制御による方法であって、前記１乃至複数のコンポーネントの一部は、コンポーネントを示すコンポーネントコンテキストを有し、
前記第一のセットの第一のコンポーネント構成の表現を取得するステップと、
前記第一のコンポーネント構成の前記表現に基づいて第二のコンポーネント構成をインスタンス化するステップと、
を含むことを特徴とするコンピュータ制御方法。
【請求項２】
請求項１に記載のコンピュータ制御方法であって、
前記第一のコンポーネント構成の前記表現の一部は、前記複数のコンポーネントの前記コンポーネントコンテキストの間で分散されることを特徴とするコンピュータ制御方法。
【請求項３】
請求項１に記載のコンピュータ制御方法であって、
前記第一のコンポーネント構成の前記表現は、抽象アプリケーションであることを特徴とするコンピュータ制御方法。
【請求項４】
請求項１に記載のコンピュータ制御方法であって、さらに、
前記第一のコンポーネント構成の前記表現から抽象アプリケーションをユーザに創作させるステップを含むことを特徴とするコンピュータ制御方法。
【請求項５】
コンポーネントを示すコンポーネントコンテキストを有する複数のコンポーネントを探索する探索機構と、
前記探索機構によって探索された前記複数のコンポーネントの第一のセットの第一のコンポーネント構成の表現を取得するよう構成された取得機構と、
前記第一のコンポーネント構成の前記表現に基づいて第二のコンポーネント構成をインスタンス化するよう構成されたインスタンス化機構と、
を備えることを特徴とするコンピュータ制御装置。
【請求項６】
請求項５に記載のコンピュータ制御装置であって、
前記第一のコンポーネント構成の前記表現の一部は、前記複数のコンポーネントの前記コンポーネントコンテキストの間で分散され、
前記取得機構は、前記部分を再現するよう構成されていることを特徴とするコンピュータ制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は一般に、たとえば、ユビキタスコンピューティング環境におけるコンポーネントの構成を簡素化するために、コンポーネントコンテキストの履歴を収集し、使用するテクノロジーに関する。
【背景技術】
【０００２】
データ通信環境において、さまざまなベンダが特定のサービスのための製品を提供している。これまで、環境内の任意のコンポーネントが相互に通信できるよう、ドメインごとに異なる所定のプロトコル一式が必要とされてきた。ベンダによって必要な所定のプロトコルが異なるという問題は、既存のプロトコル基準を採用することで一部対処されている。しかしながら、プロトコルの基準も異なる。
【０００３】
任意のコンポーネントが互いの優先されるべき知識（アプリオリ・ナレッジ:a priori knowledge）を持たずに通信しようとする場合、両当事者は特にドメイン別のプロトコルを優先的に知っていなければならない。ひとつの任意のコンポーネントは、１乃至複数の標準化されたプロトコルを理解するよう特にプログラムされている必要がある。このように、新しい、未知のコンポーネントが方程式に入った場合、アプリケーションは、その新規コンポーネントと通信するのに使用される新たな標準化されたプロトコルを理解するようプログラムしなおさなければならない。このように、各アプリケーションは、先ず特定の標準化されたプロトコル一式を使用するよう明確に書かなければ、そのプロトコルと関連するコンポーネントと通信することができない。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
現在、ユビキタスコンピューティング環境は、ネットワークの効果を見込んでいない。つまり、環境に新たなコンポーネントが加えられた場合、追加されたコンポーネントの機能を環境に加えること以上の能力はない。
【０００５】
ユビキタスコンピュータ環境に係わる問題のひとつは、ユーザが特定のタスクに対応するようにコンポーネントの集合を再構成する必要性がしばしば生じる点である。たとえば、あるユーザがプレゼンテーションでコンポーネントを使おうとする時、このユーザはその都度、プレゼンテーションに必要なコンポーネントを構成しなければならない。この構成プロセスはえてして時間がかかり、エラーが発生しやすい。
【０００６】
既存のコンテキスト履歴ロギングシステムの問題は、コンテキストの履歴データが異なるシステムの間で分散されているため、中央集中化されたサービスからはアクセスできないという点である。
【課題を解決するための手段】
【０００７】
本明細書では、ユビキタスコンピューティング環境におけるコンポーネントの構成を簡素化するための方法、装置およびコンピュータプログラムの実施形態を開示する。特に、複数のコンポーネントの第一のセットを構成するためのコンピュータ制御による方法であって、前記１乃至複数のコンポーネントの一部は、コンポーネントを示すコンポーネントコンテキストを有し、前記第一のセットの第一のコンポーネント構成の表現を取得するステップと、前記第一のコンポーネント構成の前記表現に基づいて第二のコンポーネント構成をインスタンス化するステップとを含む。
【０００８】
ユビキタスコンピューティング環境におけるコンポーネントの構成を簡素化するための装置も開示される。この装置は、複数のコンポーネントを探索するよう構成された探索メカニズムであって、その複数のコンポーネントのいくつかが、それが何かを明らかにできるコンポーネントコンテキストを有するものを備える。この装置はまた、探索メカニズムによって探索された複数のコンポーネントの第一のセットの第一のコンポーネント構成を表現するものを取得する取得メカニズムを備える。さらに、この装置は、前記第一のコンポーネント構成の表現に基づき、第二のコンポーネント構成をインスタンス化するよう構成されたインスタンス化メカニズムを有する。この装置は、プログラム製品を実行することにより、コンピュータまたはコンピュータ化されたデバイスの上でも実現できる。
【発明の効果】
【０００９】
本発明によれば、コンポーネントにコンテキストデータを記録する能力を持たせることで、コンポーネントによってコンポーネントのために実行されるオペレーションのコンテキスト履歴を得ることができる。このように、コンテキスト履歴を得ることができるためにユビキタスコンピューティング環境におけるコンポーネントの使用を簡素化することができる。
【発明を実施するための最良の形態】
【００１０】
本発明の実施形態によるコンテキスト情報を提供するためのシステム１０が図１に示されている。システム１０は、コンピュータ１２、プリンタ１４（多機能デバイスを含む）、携帯情報端末機器（ＰＤＡ）１６およびサーバ１８（以下、「コンポーネント１２〜１８」とする）を含み、これらがネットワーク２０によって相互に連結されている。ただし、システム１０は、これら以外の種類および数のシステムやデバイスで構成することもできる。
【００１１】
図２に示すように、本発明の実施形態では、コンピュータ１２は中央処理ユニット（ＣＰＵ）２２、記憶装置２４、Ｉ／Ｏユニット２６で構成され、これらが１つまたは複数のバスによって相互に連結されている。
【００１２】
図３に示すように、コンピュータ１２はＰＤＡ１６に接続されている。ＰＤＡ１６は、コンテキストインタフェース、ノーティフィケーションインタフェース、ユーザインタフェースおよびデータソースインタフェースからなる汎用インタフェースセット１６ａをメモリに保存しているか、あるいはこれにアクセスできる。これを以下、「関連している」と表現する。具体的なインタフェースの数および／または組み合わせは異なってもよく、デバイスＰＤＡ１６の種類や、それが望む、または提供する能力および／またはサービスに依存する。
【００１３】
汎用インタフェースセット１６ａ内の各インタフェースは、ＰＤＡ１６に特有でありながら、コンピュータ１２が理解、実行し、それがＰＤＡ１６とコンテキストデータを通信、転送し、ＰＤＡ１６に関するコンテキストデータの変化について、コンピュータ１２にイベントノーティフィケーションを送り、コンピュータ１２がユーザインタフェースを受け取って、コンピュータ１２のユーザが変更後のコンテキストデータを見ることができるようにし、あるいはコンピュータ１２がＰＤＡ１６からのデータを受けることができるようにする命令、動作セットおよび／またはその他のデータによって構成される。
【００１４】
特に、コンテキストインタフェースは、コンテキストオブジェクト１６ｃを要求し、これにアクセスするｇｅｔＣｏｎｔｅｘｔ（）オペレーションによって構成されており、これについてさらに詳述する。コンテキストデータには、ＰＤＡ１６に関する情報、たとえばその種類、所有者、使用履歴、ＰＤＡ１６が現在使用中か、あるいはその他の動作状態情報、アイデンティティ、ネットワーク２０上のロケーション、物理的ロケーション、管理ドメイン、ＰＤＡ１６またはＰＤＡ１６に記憶されたファイルの１乃至複数のユーザに関する情報、あるいはその他、ＰＤＡ１６が提供するその他の種類の環境情報等が含まれる。さらに、コンテキストデータには、コンピュータ１２が理解し、実行することのできる、ＰＤＡ１６に特有のコンピュータ言語の命令も含まれる。
【００１５】
本発明の実施形態において、ＰＤＡ１６に関連するコンテキストオブジェクト１６ｃは、ｇｅｔＣｏｎｔｅｘｔ（）オペレーションを通じてコンピュータ１２によって取得されるようにすることができる。コンテキストオブジェクト１６ｃは、ｇｅｔＣｏｎｔｅｘｔ（）オペレーションによって戻される１乃至複数の動作、たとえばｇｅｔＰｒｏｐｅｒｔｙ（）やｓｅｔＰｒｏｐｅｒｔｙ（）オペレーションをサポートするオブジェクトのライブでのリモートリファレンスおよびその他、コンピュータ１２がＰＤＡ１６に関連する現在および／またはこれまでのコンテキストデータにアクセスすることを可能にする命令等である。ただし、オブジェクト１６ｃは、コンテキストデータを直接含んでもよい。ｇｅｔＰｒｏｐｅｒｔｙ（）オペレーションは、コンテキストデータをＰＤＡ１６からコンピュータ１２に戻すよう要求する命令を含むことができるため、コンピュータ１２はＰＤＡ１６に関連するコンテキストデータを読み取れる。ｓｅｔＰｒｏｐｅｒｔｙ（）オペレーションは、ＰＤＡ１６にコンテキストデータを提供するためにコンピュータ１２が実行する命令とデータを含むため、コンピュータ１２はＰＤＡ１６のコンテキストデータを更新または変更できる。
【００１６】
ノーティフィケーションインタフェース（たとえば、プロキシオブジェクトによって提供される）は、ｒｅｇｉｓｔｅｒ（）オペレーションによって構成され、これには、コンピュータ１２が、ＰＤＡ１６のコンテキストデータへの変更に関するノーティフィケーションを受け取るための、ＰＤＡ１６に関する聞き手（リスナー: listener）としてコンピュータ自身を登録することができるようにするために実行する命令、動作およびデータを含めることができる。ノーティフィケーションインタフェースには、コンポーネントパラメータとコンテキストパラメータを含む１乃至複数のパラメータを渡すことができる。コンポーネントパラメータは、ノーティフィケーションの受信者としてコンピュータ１２を識別する。コンテキストパラメータは、コンピュータ１２に関する現在および／または現在までのコンテキストデータであり、これは、コンピュータ１２にノーティフィケーションを送信すべきか否かを決定するための、ＰＤＡ１６に関するひとつまたは複数のプロパティを表す。
【００１７】
ユーザインタフェースは、ｇｅｔＵＩ（）オペレーションによって構成され、これには、ユーザウィンドウを生成するためにコンピュータ１２が実行できる命令、動作およびデータが含まれる。特に、ｇｅｔＵＩ（）オペレーションは、コンピュータ１２のユーザがＰＤＡ１６の機能（ＰＤＡ１６に関連するコンテキストデータへのアクセスを含む）にアクセスすることを可能にするユーザインタフェースウィンドウを生成し、表示するためにコンピュータ１２が実行できる命令を有するオブジェクトを、ＰＤＡ１６からコンピュータ１２に戻す。
【００１８】
データソースインタフェースは、コンピュータ１２がＰＤＡ１６からデータを受信できるようにするデータ転送セッションを確立するためのｂｅｇｉｎＴｒａｎｓｆｅｒＳｅｓｓｉｏｎ（）オペレーションによって構成される。さらに、ｂｅｇｉｎＴｒａｎｓｆｅｒＳｅｓｓｉｏｎ（）オペレーションは、コンテキストパラメータ等のパラメータを受け取ることができる。本発明の実施形態において、コンピュータ１２は、そのアイデンティティをＰＤＡ１６に知らせるためにそのコンテキストオブジェクトを呼ぶと、これをパラメータとしてｂｅｇｉｎＴｒａｎｓｆｅｒＳｅｓｓｉｏｎ（）オペレーションに渡す。ＰＤＡ１６は、コンテキストパラメータの中で提供されるコンテキストデータに基づき、コンピュータ１２にデータを転送するか、データ転送中にその挙動を変更するかを決定する。
【００１９】
上記のインタフェースと関連する動作は各々、モバイルコードで構成することができる。本発明の実施形態において、汎用インタフェースセット１６ａがコンピュータ１２に提供されると、本明細書で説明したように、コンピュータ１２が特定のインタフェースに関連する一連の命令およびその他のデータにアクセスし、これを実行することが可能となる。またさらに、インタフェースは他のインタフェースへの一連の命令またはリファレンスで構成することもでき、この場合、コンピュータ１２はそれに応じてデータを利用し、あるいは命令を実行する。
【００２０】
本発明の実施形態において、上記のモバイルコードを使用するか否かは任意である。
【００２１】
データオブジェクト１６ｂは、ＰＤＡ１６のプロキシオブジェクトであり、ＰＤＡ１６から受信され、コンピュータ１２に保存される。コンピュータ１２はデータオブジェクト１６ｂを通じて汎用インタフェースセット１６ａにアクセスできる。より具体的には、データオブジェクト１６ｂは、コンピュータ１２が知り、理解できると想定される、ＰＤＡ１６に関連する汎用インタフェースセット１６ａの中のインタフェースによって定義される各種のオペレーションをサポートする。たとえば、データオブジェクト１６ｂは、ＰＤＡ１６の開発者が決定したプロトコルおよび／またはデータフォーマットを使ったＰＤＡ１６との通信を専門とするコンテキストインタフェースのカスタム実装を提供する。
【００２２】
図４において、はじめにステップ３０で、コンピュータ１２は探索処理を実行し、ＰＤＡ１６がコンピュータにコンテキストデータを供給できるか判断する。
【００２３】
次に、ステップ３２で、探索されたＰＤＡ１６は、データオブジェクト１６ｂをコンピュータ１２に戻す。コンピュータ１２は、受け取ったデータオブジェクト１６ｂを点検し、ＰＤＡ１６に関連しているのはどの１乃至複数の汎用インタフェースであるかを判断する。コンピュータ１２は、ＰＤＡ１６が少なくともコンテキストインタフェースと関連していると判断し、したがって、ＰＤＡ１６はコンピュータにコンテキストデータを提供できる。
【００２４】
次に、ステップ３４で、コンピュータ１２はデータオブジェクト１６ｂにおいて定義された手順、命令および／またはデータを使い、ＰＤＡ１６と関連するｇｅｔＣｏｎｔｅｘｔ（）インタフェースを呼び出し、コンテキストオブジェクト１６ｃをＰＤＡ１６に要求する。コンピュータ１２がコンテキストオブジェクト１６ｃを通じてコンテキストデータへのアクセスを要求するため、オブジェクト１６ｃに含まれる命令は、その要求をＰＤＡ１６によってサポートされる第一のプロトコルに翻訳して、コンテキストデータへのアクセスを実現することができる。
【００２５】
次に、ステップ３６で、コンピュータ１２はコンテキストオブジェクト１６ｃを受け取り、関連するｇｅｔＰｒｏｐｅｒｔｙ（）オペレーションを呼び出して、ＰＤＡ１６からコンテキストデータを取り出す。さらに、コンピュータ１２がｇｅｔＰｒｏｐｅｒｔｙ（）オペレーションを実行する時、ＰＤＡ１６は命令、オペレーションまたはデータを直接コンピュータ１２に戻し、コンピュータが、ＰＤＡ１６から転送されているコンテキストデータを理解することができるようにすることもできる。また、コンテキストオブジェクト１６ｃは、コンテキストデータの要求をＰＤＡ１６に送信するものの、オブジェクト１６ｃがコンテキストデータを含むこともあり、この場合、コンピュータ１２はその中のデータにアクセスする。いずれの場合も、コンピュータ１２はＰＤＡ１６からコンテキストデータを受け取る。
【００２６】
図５に示すとおり、プリンタ１４はコンテキストインタフェースを含む汎用インタフェースセット１４ａと関連している。この実施形態におけるコンテキストインタフェースは、図３乃至図５に関して上述したコンテキストインタフェースと同じであるが、この実施形態の場合、コンピュータ１２によって実行されるプリンタ１４専用の命令がある点だけが異なる。
【００２７】
図６において、はじめにステップ５０で、コンピュータ１２は図３のステップ３０〜３２について上述した探索処理を実行するが、ステップ５０ではデータオブジェクト１４ｂを探索する。さらに、コンピュータ１２は、プリンタ１４が少なくともコンテキストインタフェースと関連していると判断し、プリンタ１４はコンピュータ１２にコンテキストデータを供給することができる。
【００２８】
次に、ステップ５２で、コンピュータ１２は、図３のステップ３４についてすでに説明したように、データオブジェクト１４ｂで定義された手順、命令および／またはデータを使い、プリンタ１４と関連するｇｅｔＣｏｎｔｅｘｔ（）インタフェースを呼び出して、コンテキストオブジェクト１４ｃを要求する。このようにして、コンピュータ１２はデータオブジェクト１４ｂを通じてプリンタ１４からコンテキストオブジェクト１４ｃを受け取る。
【００２９】
次に、ステップ５４で、コンピュータ１２はデータオブジェクト１４ｂに含まれるｇｅｔＰｒｏｐｅｒｔｙ（）オペレーションを呼び出して、プリンタ１４と関連するコンテキストデータを取り出す。この実施形態において、プリンタ１４と関連するコンテキストデータは、サーバ１８等の中央ロケーションに保存することができるが、コンピュータ１２またはＰＤＡ１６等、別の場所にコンテキストデータを保存することも可能である。このようにして、ｇｅｔＰｒｏｐｅｒｔｙ（）オペレーションに含まれ、コンピュータ１２によって実行される命令、オペレーションまたはデータは、プリンタ１４に関連するコンテキストデータをサーバ１８から取り出すようプリンタ１２に命令する。さらに、命令、オペレーションまたはデータは、ネットワーク２０上でのコンテキストデータのロケーション（つまり、サーバ１８）やその他、コンピュータ１２が実行し、それがサーバ１８から転送されているコンテキストデータを取り出して理解することができるようにする色々な命令を含むことがある。
【００３０】
コンポーネントがコンテキストデータを記録する能力により、そのコンポーネントは、そのコンポーネントによって、またはそのコンポーネントのために実行されるオペレーションのコンテキスト履歴を得ることができる。このコンテキスト履歴は、ユビキタスコンピューティング環境におけるコンポーネントの使用を簡素化するために使用できる。
【００３１】
コンポーネントは、そのコンポーネントを操作することのできる人と強力に関連させることが可能であり。これらのコンポーネントをエンティティと呼ぶ。その他のコンポーネントは人との強い関連を持たず、単純にコンポーネントと呼ばれる。
【００３２】
コンポーネントには、コンテキストを持ち、そのコンテキストを明らかにすることができるデバイスが含まれる。リクエスタコンポーネント（requester component）は、そのリクエスタコンポーネントのコンテキストをオペレーションの要求と一緒にサービスコンポーネントに送信することにより、サービスコンポーネントと相互作用する。サービスコンポーネントはリクエスタコンポーネントのコンテキストを受信するため、サービスコンポーネントはリクエスタコンポーネントのコンテキストと要求されたオペレーションの識別とを保存することができる。サービスコンポーネントが任意データを任意で含めることを可能にする任意拡張可能なデータ構造を使用する能力を有する場合、サーバコンポーネントは他のコンポーネントとの相互作用のコンテキスト履歴を、メタデータとして維持することができる。リクエスタコンポーネントのコンテキストは、サービスコンポーネントのコンテキストからの情報と組み合わせ、サービスコンポーネントのコンテキスト履歴に、何が行われたかだけでなく、どのエンティティ／コンポーネントがそのオペレーションを要求したか、いつ、どこでそのオペレーションが要求されたか、および要求されたオペレーションの結果も含めることができる。
【００３３】
さらに、コンポーネントは、コンポーネント自身が行ったコンテキストの変更（たとえば、プロパティ変更）の履歴も維持できる。
【００３４】
コンテキストメタデータにはプロパティメタデータが含まれ、アクセス管理（許可）、アクセス方針、履歴も含めることができる。アクセス管理は、どのコンポーネント／エンティティがそのコンテキスト（またはコンテキストの中の特定のコンテキストプロパティ）にアクセスできるか、あるいはコンポーネント／エンティティにオペレーションを実行するよう要求できるかを決定する。アクセス方針は、サービスコンポーネントにアクセスして要求を出すコンポーネント／アイデンティティを特定するのに必要な認証のレベルを決定し、コンテキスト履歴は、コンテキストレベルで実行されたオペレーションの履歴とコンテキストプロパティレベルで実行されたオペレーションの履歴の両方を含む。コンテキストプロパティレベルの履歴は、プロパティについて行われたアップデートの全部またはその中から選択されたもののログを維持する。このように、プロパティを前の状態まで辿ることができる。プロパティ履歴記録のひとつの実施形態を、以下に、図１１に関して説明する。
【００３５】
ユビキタスコンピューティング環境のひとつの問題は、この環境においてユーザがコンポーネントを選択することが面倒で、エラーを招きやすい点である。過去のコンポーネントの使用の履歴（使用履歴）を維持することにより、ユーザは簡単に以前の構成を呼び出して再利用または変更できる。さらに、履歴メタデータを使い、過去の使用パターンを検出し、意味形成（センスメイキング: sensemaking）のための情報を収集し、これらのパターンに基づく推論を確立することも可能である。
【００３６】
デバイスおよび／またはオペレーションからのコンテキストは、積み重ねることができる。つまり、特定のコンポーネント／エンティティは、それと相互作用したことのあるその他のコンポーネント／エンティティのコンテキストを含むことができ（るため、たとえば、コンポーネントのコンテキストには、どのコンポーネントがそのコンポーネントと相互作用したことがあるかに関する履歴、その理由、相互作用の結果を含めることができ）る。
【００３７】
コンポーネント／エンティティからのコンテキストは、連鎖させることもできる。つまり、各コンポーネントのコンテキストをコンポーネント間のデータフローに追加できる。たとえば、リクエスタエンティティがプレゼンテーションコンポーネントに情報を提供するよう要求した場合を考える。プレゼンテーションコンポーネントによって提供されたプレゼンテーション情報は、プレゼンテーションコンポーネントのコンテキストを含むであろう。そこで、エンティティがストレージコンポーネントにその情報を保存したいとすると、ストレージコンポーネントのコンテキストもプレゼンテーション情報と一緒に含めることができる。さらに、エンティティのコンテキストも含めることができる。このように、プレゼンテーション情報の中のメタデータは、そのデータの由来を提供する。
【００３８】
メタデータの連鎖により、コンポーネントはそれがアクセスするデータの履歴全体を判断できる。この情報には、どのコンポーネントがそのデータの供給源か、どのコンポーネントがそのデータにアクセスし、および／またはそのデータについて操作したか、いつ、どこでそのデータが保存されたか等が含まれる。各コンポーネントがデータを提供するため、提供するコンポーネントは既存のメタデータとともにそのメタデータを提供し、したがって、これを受け取るコンポーネントは、そのコンポーネント自身のメタデータと、既存のメタデータおよび提供するコンポーネントのメタデータを統合することができる。
【００３９】
履歴メタデータの結合は、ｇｅｔＰｒｏｐｅｒｔｙ（）およびｓｅｔＰｒｏｐｅｒｔｙ（）メソッドにフィールドを追加し、ｇｅｔＰｒｏｐｅｒｔｙＨｉｓｔｏｒｙ（）メソッドを追加することによってサポートできる。
Ｏｂｊｅｃｔ  ｇｅｔＰｒｏｐｅｒｔｙ（Ｓｔｒｉｎｇ  ｋｅｙ，  ＲＮＣ  ｒｅｑｕｅｓｔｅｒ）；
Ｖｏｉｄ  ｓｅｔＰｒｏｐｅｒｔｙ（Ｓｔｒｉｎｇ  ｋｅｙ，  Ｏｂｊｅｃｔ  ｖａｌｕｅ，  ＲＮＣ  ｒｅｑｕｅｓｔｅｒ，  Ｃａｕｓｅ  ｃａｕｓｅ，  Ｄａｔｅ  ｅｘｐｉｒａｔｉｏｎ）；
Ｈｉｓｔｏｒｙ  ｇｅｔＰｒｏｐｅｒｔｙＨｉｓｔｏｒｙ（Ｓｔｒｉｎｇ  ｋｅｙ，  ＲＮＣ  ｒｅｑｕｅｓｔｅｒ，  Ｄａｔｅ  ｓｉｎｃｅＷｈｅｎ）；
ｒｅｑｕｅｓｔｅｒの引数は、認証可能または不可能なコンポーネント、エンティティまたはアプリケーションとすることができる。ｃａｕｓｅの引数は、リクエスタによって定義され、アップデートの理由に関するより詳しい情報を得るためにリクエスタに戻されるトークンとすることができる。さらに、ｇｅｔＰｒｏｐｅｒｔｙとｓｅｔＰｒｏｐｅｒｔｙはどちらも、リクエスタのアイデンティティを提供する証明を含めるよう拡張できる。
【００４０】
リクエスタコンポーネントは、他のコンポーネントの履歴メタデータを取得して、他のコンポーネントのコンテキスト履歴を取得するか、あるいは特定の信頼性基準を満たす数値を得ることができる。したがって、リクエスタコンポーネントは、信頼できない、あるいは認証されていないエンティティ／コンポーネントが行った他のコンポーネントのプロパティへのアップデートや、認証メカニズムを迂回しながら行われたアップデート、あるいは古くなった数値を拒否できる。
【００４１】
コンポーネントはまた、そのコンテキスト履歴に、自分から行ったコンテキスト変更も追加できる。
【００４２】
図７乃至図１１は、メタデータを保存するために考えられるひとつの方法を示す。当業界で周知の別のメカニズムも使用できる（たとえば、以下の形態による記憶メタデータ：
ＳＥ．ｈｉｓｔｃｏｎｔｅｘｔ．ｏｐｅｒａｔｉｏｎ０２８４３．ｔｉｍｅｓｔａｍｐ＝Ｍａｙ  ２７，  ２００１
ＳＥ．ｈｉｓｔｃｏｎｔｅｘｔ．ｏｐｅｒａｔｉｏｎ０２８４３．ｏｐｅｒａｔｉｏｎ＝ｃｒｅａｔｅ  ｐｒｏｐ  ”ｌｏｃａｔｉｏｎ”
または
ＳＥ．ｈｉｓｔｃｏｎｔｅｘｔ．ｏｐｅｒａｔｉｏｎ０２８４３｛
Ｔｉｍｅｓｔａｍｐ＝Ｍａｙ  ２７，２００１
Ｏｐｅｒａｔｉｏｎ＝ｃｒｅａｔｅ  ｐｒｏｐ  ”ｌｏｃａｔｉｏｎ”
．．．｝
あるいは上記以外の表現）。
【００４３】
図７は、プロパティ集合７０３を含むコンテキスト集合７０１を表すコンテキスト図７００を示し、これには、オプションのコンテキストアクセス方針７０５、オプションのアクセス管理集合７０７、オプションの履歴集合７０９を含めることができる。プロパティ集合７０３は、コンテキスト集合７０１に関連するコンポーネント／エンティティのプロパティに関するメタデータを含み、これについて、図１０を参照しながら説明する。
【００４４】
コンテキスト集合７０１には、オプションのコンテキストアクセス方針７０５を含めることができる。オプションのコンテキストアクセス方針７０５は、そのコンポーネントへのアクセスを許可するためのメカニズムを特定するために使用される。この方針の一部は、コンポーネントに対し、アクセスを要求しているエンティティ／コンポーネントの認証を行うよう要求することができ、また、特定されたエンティティ／コンポーネントがコンテキスト集合７０１を含むコンポーネントにアクセスできるか否かを実行またはその他の方法で指示することができる。方針の例として、サービスコンポーネントと異なるロケーションにある、他の方法で認証されたエンティティへのアクセスを否認する方針や、瑕疵のある方針にかかわらず、特定のエンティティ／コンポーネントのアクセスを許可するバイパス方針、および／またはコンテキストモニタ等へのアクセスを許可する方針がある。
【００４５】
さらに、コンテキスト集合７０１は、オプションのアクセス管理集合７０７を含むことができる。オプションのアクセス管理集合７０７は、アクセス許可を特定のエンティティまたは特定の種類のエンティティに関連付けるメタデータを含むことができる。オプションのアクセス管理集合７０７については、図９を参照しながらさらに詳しく説明する。
【００４６】
さらに、コンテキスト集合７０１は、コンテキスト集合７０１と関連するコンポーネントへの過去のオペレーションを表す履歴メタデータを含むオプションの履歴集合７０９を含んでもよい。オプションの履歴集合７０９については、図８を参照しながらさらに詳しく説明する。他のプロパティ関係のデータ履歴は、プロパティ集合７０３の中で維持される。
【００４７】
図８は、コンテキスト履歴集合７０９を表すコンテキスト履歴図７２０を示す。オプションの履歴集合７０９は、少なくともひとつのコンテキスト履歴エントリ７２３を含む。コンテキスト履歴エントリ７２３は、オペレーションフィールド７２５、リクエスタフィールド７２７、時間フィールド７２９、理由フィールド７３１および状態フィールド７３３を含むことができる。
【００４８】
オペレーションフィールド７２５には、コンテキスト集合７０１にどのオペレーションが加えられたか（あるいは加えられようとしたか）を示す情報が含まれる。これらのオペレーションには、たとえば、コンテキストのプロパティ、アクセス管理、履歴の追加、削除、維持、変更等がある。
【００４９】
リクエスタフィールド７２７には、オペレーションフィールド７５に示されるオペレーションを呼び出したエンティティおよび／またはコンポーネントを特定する情報が含まれる。時間フィールド７２９には、そのオペレーションが要求され、および／または実行された時のタイムスタンプが含まれる。理由フィールド７３１には、要求するコンポーネント／エンティティによって明示されるオペレーションの理由を示す情報が含まれる。状態フィールド７３３には、コンテキスト履歴エントリ７２３の管理を助ける各種の状態が含まれる。
【００５０】
コンテキスト履歴集合７０９は、エンティティ／コンポーネントのコンテキストの使用履歴をまとめるのに使用できる。オプションの履歴集合７０９は、プロパティの削除と追加に関する履歴だけを含めばよい。特定のプロパティに関する履歴（またはコンテキスト集合７０１の中の他のエントリ）は、プロパティコンテキストの一部として保持できる（たとえば、図１０、図１１参照）。
【００５１】
図９は、アクセスエントリ７４３を含むアクセス管理集合７４１を表すアクセス管理図７４０を示す。アクセスエントリ７４３は、アクセス管理集合７４１に関連するコンテキストまたはプロパティ（図１０参照）にアクセスするための許可を有する（許可記録７４７の中に保存されている）エンティティまたはコンポーネントを特定するエンティティ／コンポーネント記録７４５を含む。本実施形態において、コンテキストおよびコンテキストプロパティに関するアクセス管理集合は同様の構造を有する。
【００５２】
エンティティ／コンポーネント記録７４５によって特定されるエンティティ／コンポーネントは、単独のユーザ、ユーザグループ、コンポーネント、コンポーネントの種類あるいはその他特定可能なエンティティおよび／またはコンポーネントのいずれであってもよい。
【００５３】
図１０は、プロパティエントリ７５３を含むプロパティ集合７０３を表すコンテキストプロパティ図７５０を示す。プロパティエントリ７５３は、そのプロパティの識別を含むキーフィールド７５５と、そのプロパティの数値を含む現在値フィールド７５７を含むことができる。プロパティエントリ７５３にはまた、オプションの有効期限フィールド７５９とオプションのプロパティアクセス方針フィールド７６１を含めてもよい。
【００５４】
キーフィールド７５５は、プロパティ識別子（一般に、人間が判読可能なテキストで、おそらくは国際化の対象となっている）を含む。
【００５５】
オプションの有効期限フィールド７５９により、プロパティ値を設定しているコンポーネントは、その数値が古くなる（信頼できないものとなる）と予想される時期を示すことができる。
【００５６】
プロパティエントリ７５３は、エンティティ／コンポーネントがオプションのプロパティアクセス方針フィールド７６１を含むプロパティにアクセスし、および／またはこれについて動作することができるか否かを指示するのに使用できるオプションのプロパティアクセス方針フィールド７６１を含むことができる。方針の例としては、サービスコンポーネントと異なるロケーションにある、他の方法で認証されたエンティティへのアクセスを否認する方針や、既存の方針にかかわらず、特定のエンティティ／コンポーネントのアクセスを許可するバイパス方針、および／またはコンテキストモニタ等へのアクセスを許可する方針がある。
【００５７】
主要キー／数値プロパティに加え、プロパティエントリ７５３には、オプションのプロパティ履歴集合７６３および／またはオプションのアクセス管理集合７６５を含めることができる。
【００５８】
オプションのアクセス管理集合７６５の構造は、アクセス管理集合７４１と同じにすることができ（ただし、同じにする必要はない）、これをコンテキストではなくプロパティに適用する。
【００５９】
オプションのプロパティ履歴集合７６３は一般に、コンテキスト履歴集合７０９とは異なり、使用および／または変更履歴を特定のプロパティとまとめるのに使用される。オプションのプロパティ履歴集合７６３については、図１１を参照しながら説明する。
【００６０】
図１１は、プロパティ履歴エントリ７７３を含むプロパティ履歴集合７６３を表すプロパティ履歴図７７０を示す。プロパティ履歴エントリ７７３は、特定のプロパティに加えられた変更履歴を維持するのに使用できる。プロパティ履歴エントリ７７３には、新数値フィールド７７５、旧数値フィールド７７７、リクエスタフィールド７７９、時間フィールド７８１および理由フィールド７８３を含めることができる。
【００６１】
新数値フィールド７７５は、時間フィールド７８１内に示される時刻の時点で現在値フィールド７５７に設定される数値を記憶する。旧数値フィールド７７７は、時間フィールド７８１に示された時刻の直前の、現在値フィールド７５７の数値を記憶する。リクエスタフィールド７７９は、プロパティの変化の原因となったコンポーネント／エンティティを特定する数値を記憶する。理由フィールド７８３は、なぜそのプロパティが変更されたかを示す数値を含むことができる。
【００６２】
コンテキスト履歴集合７０９とプロパティ履歴集合７６３を維持することにより、コンポーネントはそのコンポーネントと他のコンポーネントとの間の相互作用のコンテキスト履歴を累積する。さらに、コンテキストモニタも、そのコンテキストモニタが使用されている環境内でのコンポーネント間の相互作用のコンテキスト履歴を累積できる。各コンポーネントが有するコンポーネントコンテキストは、他のコンポーネントまたはコンテキストモニタによって明らかにできる。
【００６３】
このほか、コンポーネントは自分のプロパティを変更でき、これらの変更もまたそのコンポーネントのコンテキスト履歴の中に累積される。
【００６４】
図１２は、コンテキストアクセスプロセス１２００を示しており、「開始」１２０１から始まり、「要求受取」手順１２０３へと続く。「要求受取」手順１２０３は、利用可能な通信メカニズムを使い、リクエスタコンポーネントからのオペレーションおよびコンテキストを受け取る。
【００６５】
要求が受け取られると、コンテキストアクセスプロセス１２００は、不完全な状態（状態フィールド７３３に記憶できる）を有するコンテキスト履歴エントリ７２３を保存する「試行履歴保存」手順１２０５に続く。次に、「コンテキストアクセスチェック」判定手順１２０７がオプションのコンテキストアクセス方針７０５とオプションのアクセス管理集合７０７を使い、リクエスタコンポーネントのアイデンティティを検証し、そのリクエスタコンポーネントがコンテキスト集合７０１の抽象レベルで要求されたオペレーションを実行することを許可されているかを検証する。
【００６６】
「コンテキストアクセスチェック」判定手順１２０７は、そのオペレーションを要求したエンティティ／コンポーネント上でさまざまなチェックを実行する。これらのチェックには、１）あらゆるエンティティ／コンポーネントによるすべてのオペレーションを許可する、２）エンティティ／コンポーネントの識別を認証する、３）エンティティ／コンポーネントが要求されたオペレーションを実行する許可を持っていることを検証する、４）特定のエンティティ／コンポーネントについてユーザが指定した無効化（オーバーライド: override）があるか否かをチェックする、およびその他、オプションのコンテキストアクセス方針７０５によって定義される、あるいはオプションによるアクセス管理集合７０７によって要求されるその他のチェックのうちの少なくともひとつまたは複数が含まれる。
【００６７】
「コンテキストアクセスチェック」判定手順１２０７がリクエスタコンポーネント／エンティティへのアクセスを拒否すると、コンテキストアクセスプロセス１２００は、試行されたオペレーションをログ（記録）し、状態フィールド７３３を更新する「コンテキスト拒絶履歴保存」手順１２１１に続く。さらに、リクエスタコンポーネント／エンティティにも、アクセスの拒否を知らせることができる。
【００６８】
これに対し、「コンテキストアクセスチェック」判定手順１２０７がリクエスタコンポーネント／エンティティによるコンテキスト集合７０１へのアクセスを許可した場合、「コンテキストオペレーション」判定手順１２１５が、要求されたオペレーションはコンテキスト集合７０１の抽象レベルで実行されるべきかを決定する。そうであれば、コンテキストアクセスプロセス１２００は、「コンテキストオペレーション実行」手順１２１７に進み、ここで要求されたオペレーションが実行される。
【００６９】
要求されたオペレーションが完了すると、コンテキストアクセスプロセス１２００は、「コンテキスト履歴保存」手順１２１８に進み、この手順は「試行履歴保存」手順１２０５によって保存される履歴記録の中のオプションの履歴集合７０９にオペレーションの結果を保存し、これに従って状態フィールド７３３を更新する。
【００７０】
しかしながら、「コンテキストオペレーション」判定手順１２１５において、要求されたオペレーションがプロパティ集合７０３の抽象レベルで実行されることになった場合、コンテキストアクセスプロセス１２００は「プロパティアクセスチェック」判定手順１２１９に進み、これがキーフィールド７１５５を使って特定されたプロパティをプロパティエントリ７５３の中に位置づけ、「コンテキストアクセスチェック」判定手順１２０７によって実行されたものと同様のチェックを行うことができる（ただし、オプションのプロパティアクセス方針フィールド７６１および／またはオプションのアクセス管理集合７６５を使い、プロパティ集合７０３の抽象レベルとプロパティエントリ７５３そのものの中で）。要求されたオペレーションが許可されないと、コンテキストアクセスプロセス１２００は「プロパティ拒絶履歴保存」手順１２２３に進み、ここで、新たなプロパティ履歴エントリ７７３がオプションのプロパティ履歴集合７６３に追加され、そのプロパティについて要求されたオペレーションが拒否されたことが示される。次に、コンテキストアクセスプロセス１２００は、「コンテキスト履歴保存」手順１２１８に進み、状態フィールド７３３が更新される。
【００７１】
「プロパティアクセスチェック」判定手順１２１９において、要求されたオペレーションが許可されると、コンテキストアクセスプロセス１２００は「プロパティについて動作」手順１２２５に進み、特定された製品について要求されたオペレーションが試みられる。要求されたオペレーションの結果の状態は「プロパティ履歴保存」手順１２２７に送られ、これが新規のプロパティ履歴エントリ７７３をオプションのプロパティ履歴集合７６３に追加し、このようにして要求されたプロパティオペレーションの状態と結果が得られる。次に、コンテキストアクセスプロセス１２００は「コンテキスト履歴保存」手順１２１８に進み、状態フィールド７３３が更新される。
【００７２】
あるコンポーネントのコンテキストについて許可されるオペレーションには、プロパティ集合７０３にプロパティを追加する、あるいはここからプロパティを削除すること、オプションの履歴集合７０９へのアクセスを読み取ること、およびオプションのアクセス管理集合７０７への変更を許可することが含まれる。特定のプロパティの変更履歴は、そのプロパティそのものとともに、オプションのプロパティ履歴集合７６３の中に保存される。
【００７３】
あるプロパティについて許可されるオペレーションには、現在値フィールド７５７の数値および／またはオプションの有効期限フィールド７５９を変更すること、これらの数値にアクセスすること、あるいはオプションのプロパティ履歴集合７６３にアクセスすることが含まれる。
【００７４】
図１３は、サービスコンポーネントがその履歴メタデータを提供するのに使用できる履歴供給プロセス１３００を示す。履歴供給プロセス１３００は、リクエスタコンポーネント（たとえば、ｇｅｔＰｒｏｐｅｒｔｙＨｉｓｔｏｒｙ（）メソッドの呼び出しによる履歴検索メカニズム等）から呼び出された履歴要求を受け取ったところで、「開始」１３０１から始まる。履歴供給プロセス１３００は、要求が十分に形成されていることを検証できる「履歴要求点検」手順１３０３に続く。「履歴供給」手順１３０７は、要求された履歴メタデータを組み立て、組み立てられたメタデータをリクエスタコンポーネントに送信し、完了する。
【００７５】
エンティティ／コンポーネントのコンテキストに履歴およびアクセス情報が含まれると、リクエスタコンポーネント／エンティティは他のエンティティ／コンポーネントに履歴および許可情報を要求し、これらのコンポーネントのうちどれにリクエスタコンポーネント／エンティティがアクセスできるかを判断して、利用可能な履歴コンテキストに基づき、ユーザのためにオプションの優先順位を付けることができる。この優先順位付けは、コンポーネントのエンティティのアイデンティティおよび／またはコンテキストモニタから利用できる情報に基づいて行われる。この情報は、環境内のコンポーネントに要求し、ふるいにかけて使用できないコンポーネントを排除し、エンティティの選好に基づいて、また環境の状況に応じて変更する。この情報は、構成再構築メカニズムにより、構成確立メカニズムによってどのようなコンポーネント構成が確立できるかを判断するために使用される。
【００７６】
コンポーネント探索サービスは通常、探索コンポーネントがアクセスしたすべてのエンティティ／コンポーネントに関する情報を戻す。これはしばしば、大量の情報を探索コンポーネントのユーザに提供することになる。ユーザは、自分にとって関心のないコンポーネントをふるい落とすためのテンプレートを提供することができる。
【００７７】
コンテキスト情報は、２つの方法で分類される。つまり、動的対静的および状態対要求である。コンテキスト状態は、あるコンポーネント／エンティティのプロパティの数値を表す。要求コンテキストは、あるコンポーネント／エンティティのユーザにとっての前提条件を表す。動的コンテキストは、コンテキスト情報が実行中に更新されているときのものである。静的コンテキストは、定義されたときに特定され、定義しなおされるまで変更されない。このようなコンテキストの表現は、そのコンテキストが実際にどのように取得され、検証されるかに無関係である。
【００７８】
本発明のさらに別の面は、エンティティの使用履歴をコンポーネントの使用履歴と組み合わせ、戻されたコンポーネントを人気（またはその他のメトリクス）によって優先順位付けする。人気のメトリクスは、過去において使用されたコンポーネントが将来においても再び使用される可能性が高いため、興味深い。
【００７９】
利用可能なコンポーネント／エンティティおよび／またはコンポーネントの相互作用をフィルタにかけ、これに優先順位を付ける方法のひとつは、その履歴情報をフィルタにかけ、これに優先順位を付けるプロセスを適用することである。
【００８０】
図１４は、環境内のコンポーネントから履歴コンテキストを収集するために使用できるフィルタ／優先順位付けプロセス１４００を示す。フィルタ／優先順位付けプロセス１４００は、ユーザ、エンティティの要求、環境の変化の検出あるいはその他のトリガにより、「開始」１４０１から始まる。フィルタ／優先順位付けプロセス１４００は、「初期化」手順１４０３に進み、ここで、要求された初期化が行われ、次に、「履歴要求」手順１４０５に進む。「履歴要求」手順１４０５はまず、どのコンポーネントが環境内にあるかを検出し、履歴要求コマンドならびに創出（オリジネーティング: originating）コンポーネントのコンテキストとともに、環境内の関係するコンポーネント／エンティティの各々に送信する（ｇｅｔＰｒｏｐｅｒｔｙＨｉｓｔｏｒｙ（）メソッドを使う）。「履歴受取」手順１４０７は、コンポーネント／エンティティが「履歴要求」手順１４０５からの要求に応える際（図１３参照）に、そこから履歴を受け取る。リクエスタコンポーネントは次に、「履歴に基づくコンポーネントフィルタ」手順１４０９を使い、指定されたフィルタプロパティによる特定に従って、コンポーネントの履歴情報および／または受け取った履歴情報に基づき、コンポーネントをフィルタにかけ、これに優先順位を付ける。「履歴に基づくコンポーネントフィルタ」手順１４０９の結果は「履歴に基づくコンポーネント優先順位付け」手順１４１１に送られ、これが優先順位決定パラメータに応じてその結果を順番に並べる。コンポーネントを特定する優先順位付けされた情報は次に、「結果提示」手順１４１３によってコンポーネントの順位リストとして提示され、これにより、エンティティ／コンポーネントは、たとえばその過去のコンテキスト履歴およびその他利用可能な情報に基づいて、どのコンポーネントを使用するかを選択できる。
【００８１】
「結果提示」手順１４１３の結果は、聴覚的、視覚的、感覚的あるいはその他の情報提示方法を含むプレゼンテーションデバイスまたは方法を使って、ユーザに提示することができる。「結果提示」手順１４１３にはまた、別のコンポーネントに結果を送信し、その別のコンポーネントが記憶および／または提示できるようにすることを含めることもできる。
【００８２】
コンポーネントに対するコンテキスト要件は、実行時のユーザに関するコンテキスト状態とマッチさせ、使用不可能なコンポーネントを排除することができる。コンポーネントに関するコンテキスト履歴は、エンティティに関するコンテキスト履歴と組み合わせ、人気に応じてコンポーネントに優先順位を付けることが可能である。フィルタおよび優先順位付けテクニックは別々に使用できるものの、これらを組み合わせ、ある状況においてどのコンポーネントが有益かをエンティティが十分に理解できるようにしてもよい。
【００８３】
フィルタリングと優先順位付けがコンポーネント選択の援助を提供するのに不十分な場合がある。
【００８４】
多数のエンティティ／コンポーネントが各々のコンテキスト履歴を保持しているユビキタスコンピューティング環境において、エンティティ／コンポーネントが位置する環境またはその環境の使用に関する推論をたてることは可能である。したがって、その環境の中の状況が変化した場合、エンティティ／コンポーネントの相対的重要性もまた変化する可能性がある。たとえば、プレゼンテーション中、プレゼンタにとってはおそらくメディアデバイスがその部屋の中で最も高い関心の的であり、一方、画像変換サービスやキャラクタ認識コンポーネント等のコンポーネントはそれほどの重要性を持たないであろう。反対に、室内で、その他のデバイスより後者のコンポーネントのほうが容易により大きな重要性を持つことになる状況もある。
【００８５】
本発明のひとつの実施形態は、環境、コンポーネント／エンティティのグループおよび／または情報を観察することのできるコンテキストモニタまたはコンテキストモニタシステムである。これらのモニタは、コンポーネントと組み合わせる必要がないという点でコンポーネントを必要とせず、コンテキストモニタの機能は、どのコンポーネント／エンティティが、そのコンテキストモニタが担当するモニタ対象の環境に入ってきたかを観察し、環境の状況的評価を提供することである。
【００８６】
たとえば、会議室用のコンテキストモニタは、そのドメイン内に、その会議室内のすべてのプレゼンテーション媒体を有することができる。このコンテキストモニタはまた、室内のエンティティならびに照明、室温といった環境管理を監視することもできる。このコンテキストモニタはさらに、以前の事象の履歴も保持できる。このコンテキストモニタは、特定の数の人が室内にいることを検出し、情報を分析して環境の状況的評価を推定することが可能である。このコンテキストモニタはまた、一般にプレゼンテーションを行うのに使用されるソフトウェアコンポーネントの優先順位を高めることもできる。
【００８７】
このコンテキストモニタは、室内のコンポーネントについて行われたオペレーションを観察、記録し、この情報は推論エンジンに供給される。コンテキストモニタによって収集された、コンポーネントに対するオペレーションに関するデータは、フィルタにかけ、コンポーネント／エンティティおよび推論エンジンに供給することができる。コンポーネントは、複数のコンテキストモニタで監視してもよい。
【００８８】
図１５は、コンテキストモニタを開始するのに使用されるコンテキストモニタ初期化プロセス１５００を示す。コンテキストモニタ初期化プロセス１５００は、コンテキストモニタサービスが開始されると「開始」１５０１から始まり、必要な初期化を実施する「初期化」手順１５０３に進む。次に、コンテキストモニタ初期化プロセス１５００は、「探索スレッド開始」手順１５０５と「推論エンジンスレッド開始」手順１５０７を使って、さまざまなスレッドを開始する。
【００８９】
図１６は、「探索スレッド開始」手順１５０５によって呼び出すことができ、「開始」１５１３から始まる探索スレッド１５１２を示す。いったん開始されると、「初期化」手順１５１５はそのスレッドについての初期化を実施し、探索スレッド１５１２は「コンポーネント検出」手順１５１７に続く。「コンポーネント検出」手順１５１７は、環境内の他のエンティティ／コンポーネントを探索する。各エンティティ／コンポーネントが探索されると、探索スレッド１５１２は「コンポーネントに関するモニタスレッド開始」手順１５１９を開始し、探索されたコンポーネントと、監視対象となる環境内の他のコンポーネントとの間の通信とオペレーションを監視するスレッドを始める。探索スレッド１５１２は次に、「コンポーネント検出」手順１５１７に戻り、環境内の別のエンティティ／コンポーネントを探索する。
【００９０】
「コンポーネント検出」手順１５１７は、各種の方法でエンティティ／コンポーネントを検出できる。
【００９１】
図１７は、「推論エンジンスレッド開始」手順１５０７によって呼び出すことのできる推論エンジンスレッド１５２０を示す。推論エンジンスレッド１５２０は「開始」１５２１から始まり、「初期化」手順１５２３に進んで必要な初期化機能を実行する。次に、推論エンジンスレッド１５２０は「環境安定性判断」手順１５２５に進み、探索スレッド１５１２の活動を監視して、そのコンテキストモニタによって監視される環境がいつ、合理的推論をサポートするのに十分安定するかを判断する。推論エンジンそのものは、この判断を下すのに役立てるために使用でき、禁止対象の環境の過去における使用、ネットワーク接続されたカレンダリングシステムの日付、時刻、状態およびその他、推論エンジンが利用できる情報を考慮することができる。
【００９２】
「環境安定性判断」手順１５２５が満たされると、推論エンジンスレッド１５２０は「予備推論分析」手順１５２７に進み、環境内にあると検出されたエンティティ／コンポーネントを分析し、環境状況の予備評価を行う。
【００９３】
次に、「エンティティ／コンポーネント要求受取」手順１５２９は、リクエスタコンポーネントからの要求を待つ。要求を受け取ると、推論エンジンスレッド１５２０は「各要求分析」手順１５３１に進み、その要求に照らして、おそらく「予備推論分析」手順１５２７の結果を使って、その状況に推論エンジンを適用する。この分析結果は、「要求への応答」手順１５３３においてコンポーネント／エンティティ／コンピュータに戻され、推論エンジンスレッド１５２０は「エンティティ／コンポーネント要求受取」手順１５２９に戻り、次の要求を処理する。
【００９４】
図１８は、「コンポーネント検出」手順１５１７によって呼び出すことができるコンポーネント監視スレッド１５５０を示し、これは「開始」１５５１から始まり、「初期化」手順１５５３に進んで必要な初期化を行う。次に、コンポーネント監視スレッド１５５０は「履歴収集」手順１５５５に進み、ここでコンポーネント／エンティティからのコンテキスト履歴を取得し、コンテキスト履歴のどの部分が現在の環境に関係があるかを判断する。コンポーネント／エンティティからの関係するコンテキスト履歴は、「関係履歴の推論データベースとのマージ」手順１５５７によって推論データベースと併合される。次に、コンポーネント監視スレッド１５５０は、「コンポーネント相互作用監視および推論データベース更新」手順１５５９に進み、これがエンティティ／コンポーネントの他のエンティティ／コンポーネントとの相互作用を監視し、推論データベースを更新する。「コンポーネント相互作用監視および推論データベース更新」手順は、継続的にコンポーネント／エンティティの相互作用を監視し、更新を実行する。
【００９５】
「コンポーネント相互作用の監視および推論データベースの更新」手順１５５９は、監視対象のエンティティ／コンポーネントがある期間にわたり、他のコンポーネントと相互作用していないと判断した場合、コンポーネント監視スレッド１５５０はその監視対象のエンティティ／コンポーネントに休眠とマークする。定期的に、コンポーネント監視スレッド１５５０は「コンポーネント休眠」判定手順１５６１に進み、エンティティ／コンポーネントについて、それが休眠とマークされているか否かチェックする。そのエンティティ／コンポーネントが休眠とマークされていない場合、コンポーネント監視スレッド１５５０は「コンポーネント相互作用監視および推論データベース更新」手順１５５９に戻る。
【００９６】
しかしながら、「コンポーネント休眠」判定手順１５６１において、禁止対称のエンティティ／コンポーネントが休眠とマークされていると、監視対象のエンティティ／コンポーネントは、そのコンテキストモニタによって監視される環境内にはなくなっている可能性がある。すると、コンポーネント監視スレッド１５５０は「タイマスタート」手順１５６３に進み、タイムアウトタイマをスタートさせ、次に「休眠コンポーネントポーリング」手順１５６５に進んで監視対象のエンティティ／コンポーネントにメッセージを送り、応答を呼び出す。「タイマスタート」手順１５６３によってセットされたタイマが切れると、「コンポーネント応答」判定手順１５６７は、監視対象のモニタ／コンポーネントが応答したか否かを判断する。監視対象のエンティティ／コンポーネントが応答していれば、コンポーネント監視スレッド１５５０は「コンポーネントに非休眠とマーク」手順１５６９に進み、これがその監視対象のエンティティ／コンポーネントに非休眠とマークする。次に、コンポーネント監視スレッド１５５０は「コンポーネント相互作用監視および推論データベース更新」手順１５５９に進み、監視対象のエンティティ／コンポーネントの監視を続ける。
【００９７】
これに対し、「コンポーネント応答」判定手順１５６７において、監視対称のエンティティ／コンポーネントが応答していないと、コンポーネント監視スレッド１５５０は「スレッド終了」手順１５７１に進み、リソースを解除してスレッドを終了する。
【００９８】
実施形態の別の面は、コンテキスト情報を使ってセキュリティ情報にアクセスし、これに使用することである。つまり、セキュリティデータは、プログラムインタフェースを通じてセキュリティ情報を明確に表現することを要求するのではなく、コンテキストプロパティとして維持することができる。コンポーネントが相互からデータを得る、あるいは相互に対するオペレーションを要求すると、そのコンテキストによって提供されるセキュリティ情報をどのように使用するかは関係者に任せられる。したがって、異なるセキュリティモデルおよびテクニックについて、均一なプログラムインタフェースを使用することができる。
【００９９】
リクエスタコンポーネント／エンティティが、サービスコンポーネントに対するオペレーションを実行したい場合、リクエスタコンポーネントはセキュリティ情報をサービスコンポーネントに伝えなければならない。このセキュリティ情報は、コンテキストプロパティとすることができる。コンポーネント間のすべての通信において、コンテキストをパラメータとして渡すことが必要となるため、リクエスタコンポーネントからのセキュリティ情報をサービスコンポーネントに提供することができる。サービスコンポーネントがセキュリティ情報を使用すると決定した場合、これは、リクエスタコンポーネント／エンティティの証明を認証機関に送り、検証を受けることができる。また、エンティティは、リクエスタコンポーネント／エンティティによるその後の改良のために、ゲスト証明を提供することも可能である。
【０１００】
他のコンポーネントが「知る」ことのできるプロパティキーを有する、きわめて一般的使用されると特定のコンテキストパラメータがある。同様に、確実な証明で認証されるコンポーネントは、よく知られたキーを持つコンテキストプロパティを有する。セキュリティプロパティは単なるコンテキスト情報であるため、セキュリティプロパティは、他のコンテキストプロパティと同様に、コンポーネントのニーズに応じて要求してもしなくてもよい。さらに、証明プロパティをコンポーネントの残りのプロパティとともに提供することができる。
【０１０１】
サービスコンポーネント／エンティティに、セキュリティ情報を使用するか否かを決定させることにより、サービスコンポーネントは、特定の状況におけるアクセス方針の例外を容易に作ることができる。
【０１０２】
オプションのコンテキストアクセス方針７０５とオプションのプロパティアクセス方針フィールド７６１はそれぞれ、オプションのアクセス管理集合７０７およびオプションのアクセス管理集合７６５とともに使用することができる。これらの方針には、どのような種類の認証が必要で、どのような状況において認証を無効化できるかを決定するルールが含まれる。
【０１０３】
さらに、本発明の実施形態のこの面により、そのコンポーネントによって使用されるプログラムインタフェースを変更することを必要とせずに、認証戦略を変更する柔軟性が得られる。相互に信用される証明付与／認証機関が適当な場合もあれば、エンティティが相互に関する公開鍵を保有する、「公開鍵暗号方式」を使用するコンポーネントもある。さらに別のケースでは、ひとつのコンポーネントを別のコンポーネントに「ログオン」できるようにするパスワードを必要とする。これらのケースはいずれも、そのコンポーネントのコンテキストを使用する、同じプログラムインタフェースによって扱われる。
【０１０４】
以上、汎化されたコンポーネントコンテキスト、コンテキストモニタおよび履歴情報をフィルタにかけ、これに優先順位を付けるデバイスについて説明した。次に、コンテキスト履歴の使用に関係のあるその他のテクニックを紹介する。
【０１０５】
前述のように、コンポーネントに関するコンテキスト履歴には、データ転送要求、イベントノーティフィケーションおよび管理方法呼出等のコンポーネント間の相互作用が含まれる。各コンポーネントに関する利用履歴は、これらの相互作用を記録することによって構成できる。このような使用履歴により、オペレーションシーケンスを後に「プレイバック」することができる。さらに、相互に関係するコンポーネントの使用履歴を利用することで、コンテキストモニタは、ユーザがコンポーネント構成をどのように組み立てるかを自動的に推測でき、これらの一般的に使用される構成をユーザが容易に使用できるようにする。これに加え、ユーザはコンポーネント構成を明確に作り、記憶することができる。さらに、以下に説明するコンテキスト情報により、抽象(abstract)アプリケーションと抽象コンポーネントの創作が可能となる。
【０１０６】
ある環境におけるコンポーネントの使用履歴を使い、特定の時点でのその環境におけるコンポーネントの相互作用をシミュレートできる。これにより、問題発生後に、その問題の調査とデバッギングを行うことが可能となる。本発明のひとつの面には、環境内のコンポーネントの相互作用をリプレイするためにコンテキスト履歴を使用するシミュレータがある。さらに、このシミュレータは、提案されたコンポーネントプロトコルと機能を評価するのにも使うことができる。
【０１０７】
コンテキスト情報は、これらの機能をサポートするコンポーネントによって利用可能である必要がある。この情報は、ひとつまたは複数のコンポーネント上のコンテキスト情報として利用できる、および／またはロギングサービスから利用できるようにすることが可能である。
【０１０８】
この情報は、たとえば、コンテキストモニタ、環境の監視を担当するコンポーネント、および／またはコンポーネント履歴ロギングサービス等によって記録できる。さらに、この情報の一部は別のコンポーネント間で分散させ、分散された情報を別のコンポーネントから回復することもできる。
【０１０９】
このコンテキスト履歴により、次の機能が実現する。抽象アプリケーションと抽象コンポーネント、データマイニング機能、「実演によるプログラミング（プログラミング・バイ・デモンストレーション）」のような機能、エンティティに関する個人履歴情報を収集し、維持する機能。
【０１１０】
図に戻る。図１９は、本発明のさまざまな面を示すのに使用できるユビキタスコンピューティング環境１９００を示す。このユビキタスコンピューティング環境１９００は、エンティティコンポーネント１９０１、第一のコンポーネント１９０３、第二のコンポーネント１９０５、第三のコンポーネント１９０７、抽象コンポーネントサーバ１９０９、ファイルサーバ１９１１を含み、これらはすべて、前述のように、ローカル環境１９１３内で直接相互作用できる。ファイルサーバ１９１１は、これにアクセスするコンポーネントがそこまでの直接的または間接的通信経路を持っているかぎり、ローカル環境１９１３の内外いずれかに存在させることができる。
【０１１１】
エンティティコンポーネント１９０１は個人的ロギングサービス１９１５  と通信できるが、これは、ネットワーク通信を通じて、あるいは後に個人的ロギングサービスと同期させるためにエンティティコンポーネント１９０１上のキャッシュ内に保持することによって実現する。同様に、第二のコンポーネントは第二のコンポーネントのロギングサービス１９１７と通信でき、第三のコンポーネント１９０７は第三のコンポーネントのロギングサービス１９１９と通信できる。繰り返すが、履歴ロギングサービスは、ローカル環境１９１３の内外どちらでもよい。さらに、コンポーネントとその履歴サービスとの間の通信は、時間シフト方式である。
【０１１２】
ロギングサービスは単独のサーバでホストされても、多数のサーバ、コンポーネントまたはその他のデバイス間で分散させてもよい。
【０１１３】
ユビキタスコンピューティング環境におけるコンポーネント構成プロセスを簡素化するためのひとつのアプローチは、共通の使用シナリオを決定することによる。このような具体的な構成は汎化でき、ユーザは具体的で汎化された構成を利用して構成プロセスを簡素化する。
【０１１４】
ローカル環境１９１３におけるコンポーネントを使用できる状態に構成するための前述のメカニズムに従い、エンティティコンポーネント１９０１のユーザは、ローカル環境１９１３の中の利用可能なコンポーネントを探索し、そのユーザが希望する機能を実行するのに必要なコンポーネントを選択し、選択されたコンポーネント間の接続を構成し、その結果として得られた構成を適正に作動させなければならない。
【０１１５】
後述のように、結果として得られたコンポーネント構成を保存し、後に保存されたコンポーネント構成をインスタンス化しなおすことができる。さらに、コンポーネント構成を汎化することもできる。
【０１１６】
この例において、ユーザはある機能を実行するために利用可能なコンポーネントの第一のセットを構成した。少なくとも一部のコンポーネントは、前述のように、コンポーネントコンテキストを保持する。構成が確立すると、構成に関する情報は少なくとも構成されたコンポーネントに分散され、取得可能となる。
【０１１７】
本発明のさまざまな面は、このような環境におけるコンポーネントのセットアップとしようを簡素化することに向けられている。コンポーネントはそのコンテキストを、自分が相互作用する他のコンポーネントに送信するため、相互作用のコンテキストは、コンテキストモニタによってコンポーネントそのものの中に、あるいはコンテキストを保存するコンポーネントによってそれが関連するロギングサービスに記録することができる。したがって、コンポーネント構成に関する情報は、コンポーネントおよび／またはそのロギングサービス全体に分散させ、また完全にローカル化させることができる。
【０１１８】
エンティティは、コンテキストモニタ、コンポーネント構成に参加するコンポーネントのコンテキスト履歴および／またはログのデータマイニングによって、コンポーネント構成を表現したものを取得できる。このほか、いったんエンティティが利用可能なコンポーネントから一連のコンポーネントセットを構成すると、構成に関する情報は抽象アプリケーションとして保存し、また、構成されたコンポーネント全体に分散することができる。このように、いったん構成が確立すると、構成の再現を可能にする情報が存在する。したがって、コンポーネントが構成されるたびに、コンポーネント構成履歴情報を使用する構成支援ツールがより有効となる。
【０１１９】
コンポーネント構成の表現を取得するステップは、そのコンポーネントのメモリ、他のコンポーネントのメモリ、履歴ロギングサービス、データベースおよび／またはこれらの組み合わせから、その表現を取り出し、まずコンポーネントを構成し、現在のコンポーネントの構成からコンポーネント構成を生成するコンポーネントを含む。
【０１２０】
コンポーネント構成を表現する情報がいったん保存されると、この情報は、それを取り出すことによって取得でき、コンポーネント構成をインスタンス化して同等のコンポーネント構成を再現することができる。さらに、この情報を使い、抽象アプリケーションを作ることも可能である。このように、第一のコンポーネント構成の表現を使用し、第二のコンポーネント構成をインスタンス化することができ、第一のコンポーネント構成と第二のコンポーネント構成には、同様に構成された同一のコンポーネントを含むことができる。ただし、これを含む必要はない。
【０１２１】
本発明のひとつの面は、エンティティの履歴データログを保持するためのネットワークアクセス可能なサービスである。
【０１２２】
図２０は、あるコンポーネントがロギングサービスに情報をログするために使用できる「コンポーネント履歴ロギング」プロセス２０００を示す。「コンポーネント履歴ロギング」プロセス２０００は、別のコンポーネントとの接続が確立されたことを検出する「接続待機」手順２００１を含む。接続がいったん確立すると、「履歴ロギングサービスへの接続情報保存」手順２００３がその接続のコンテキストとそのコンポーネントに求められサービスをロギングサービスに送る。次に、「機能実行」手順２００５で、コンポーネントは、接続が確立された機能を実行する。最終的に、「構成終了検出」手順２００７において、コンポーネントは接続が終了したことを検出し、その後「構成後情報保存」手順２００９がコンポーネントのオペレーションに関係する情報をログする。このログされた情報には、オペレーションを実行するのに必要な時間、送信または受信されたデータのコピー、オペレーションの状態および／または、そのコンポーネントによって提供された機能の完了から収集されるその他の情報が含まれる。
【０１２３】
ログされた情報は一般に、タイムスタンプを含む。さらに、この情報にはコンポーネント状態情報またはその他のコンポーネントのコンテキストを含めることもできる。また、ローカル環境１９１３におけるコンポーネントに関するその他の識別またはコンテキスト情報をログすることも可能である。
【０１２４】
次に、抽象アプリケーションと抽象コンポーネントについて考える。本発明のこれらの面は、コンポーネント構成が特定の機能を実行することを目標としているコンポーネント構成の確立を簡素化するために使用される。
【０１２５】
抽象アプリケーションは、コンポーネント構成をインスタンス化するのに使用することができる。これによって、前に使用したコンポーネント構成を再現するための完全な情報探索プロセス、あるいはユーザがコンポーネント構成全体を再現することの必要性がなくなる。その最も単純な形態において、抽象アプリケーションは、抽象アプリケーションがインスタンス化されたときにそれが前に使用されたコンポーネント構成を正確に再現することができるような、十分に詳細な情報を含む。より汎化された形態では、抽象アプリケーションは当初のコンポーネント構成において使用されたコンポーネントとは別のコンポーネントを構成することができる。
【０１２６】
抽象アプリケーションは、プログラムされたテンプレート、モバイルコード、コンポーネント化可能なコンピュータまたはコンポーネント上で実行されるプログラムの使用、および／またはＪｉｎｉあるいはその他これに類するサービスの使用によって実現できる。抽象アプリケーションは、抽象アプリケーションの機能を実行するのに必要なコンポーネントに関する情報、コンポーネント間のデータおよび制御経路、コンポーネント状態の変更、コンポーネントイベント、ユーザインタフェース情報を含むことができる。抽象アプリケーションは、特定のコンポーネント構成をインスタンス化するのと同等に固定的(rigid)であっても、抽象アプリケーションが利用可能なコンポーネントのどれを使用するか、これらをどのように接続するかを決定できるように、抽象アプリケーションの機能を実行するために必要なコンポーネントの種類に関する汎化されたパラメータを含んでいてもよい。
【０１２７】
さらに、抽象アプリケーションは、ユーザインタフェース（ＵＩ）と関連付けることができる。抽象アプリケーションは、各コンポーネントの動作に特有の、より一般的なＵＩオプションを明らかにすることなく、投射タスクに関係するインタフェースを含むＵＩと関連付けることが可能である。たとえば、アプリケーションは自動的に、適当な順番で、適当な時間差をつけて、部屋の窓のブラインドを閉め、室内の照明を暗くし、投射スクリーンを下げ、プロジェクタのランプをつける。ユーザは単に、どのプレゼンテーションを行うかを選択し、開始スイッチを入れ、「次」および「戻る」スイッチを操作してプレゼンテーションの前進、後退を行うだけでよい。最終的に、プレゼンテーションが終わったところでユーザが「終了」スイッチを操作すれば、変更されたコンポーネントはプレゼンテーションを始める前の状態に戻る
【０１２８】
抽象アプリケーションは、コンポーネントを構成し、コンポーネントの状態、イベントリスニング関係を設定し、データおよび制御経路を確立するため、ユーザは時間がかかり、面倒で、エラーが発生しやすいユーザによるコンポーネント構成プロセスから解放される。抽象アプリケーションを使用すれば、ユーザのためのコンポーネント構成を再現するためにその環境内のコンポーネントのデータマイニングを行う必要性も軽減する。このように、抽象アプリケーションにより、コンポーネント構成を設定する際、時間が節約され、ユーザの相互作用が簡略化される。
【０１２９】
ローカル環境１９１３の中でコンポーネントを構成するためにコンポーネントまたはコンポーネント化可能なコンピュータを使用するほか、構成遠隔操作装置１９２７を使うこともできる。構成遠隔操作装置１９２７は、それがローカルコンテキストを維持せず、コンポーネントによって操作されないため、それ自体、コンポーネントではない。しかしながら、構成遠隔操作装置１９２７を使ってコンポーネント構成をインスタンス化することができる。これは、ローカル環境１９１３におけるコンポーネントを探索する構成遠隔操作装置１９２７によって実現し、構成遠隔操作装置１９２７のユーザはユーザがエンティティであるかのごとく、同様にコンポーネントを構成することができる。構成遠隔操作装置１９２７はまた、コンポーネントおよび／またはコンポーネントと通信可能なデバイスとの有線または無線接続を使った最小限のコンポーネントインタフェースを使い、ローカル環境１９１３の中のコンポーネントとのユーザインタフェースとして機能するよう構成してもよい。構成遠隔操作装置１９２７は、適当に構成されたコンポーネントとのユーザインタフェースにもなる。さらに、適当に構成されたコンポーネントが構成遠隔操作装置１９２７の代わりともなる。このほか、構成遠隔操作装置１９２７は、抽象アプリケーション記憶および／または取得し、これらを直接インスタンス化するか、あるいはこれらがインスタンス化されるようにすることができる。
【０１３０】
図２１は、「抽象アプリケーション定義」プロセス２１００を示し、ユーザはこれに従うことができる。「ユーザ構成」ステップ２１０１において、ユーザは一般にローカル環境１９１３に位置付けられる一連のコンポーネントを構成し、この一連のコンポーネントが協力して所望の機能またはオペレーションを実行するようにする。ユーザはこれを、ユーザと関連するコンポーネントを使って行うことができる。いったんコンポーネントが構成されると、ユーザは、構成を汎化してもよいが、汎化しなくてもよい。次に、「抽象アプリケーション保存」ステップ２１０５において、当初の構成が抽象アプリケーションとして保存される。
【０１３１】
「ユーザ構成」ステップ２１０１の間に、ユーザは一連のコンポーネントを明確に構成でき、あるいは既存の抽象アプリケーションをインスタンス化することにより、および／または利用可能なコンポーネントのデータマイニングにより、適当なコンポーネント構成を取得、インスタンス化できる。
【０１３２】
「選択的汎化」ステップ２１０３で、ユーザは特定の機能、種類および／または特徴を有するコンポーネントを特定することにより、抽象アプリケーションから１乃至複数の具体的コンポーネントを分離することができる。たとえば、当初のコンポーネント構成が特定のロケーションで特定のプロジェクタコンポーネントを使用した場合、抽象アプリケーションを汎化し、エンティティの現在のロケーションで、当初のプロジェクタコンポーネントと同じ機能を有するコンポーネントを使用することが可能である。このような汎化の例を以下で紹介する。
【０１３３】
表１は、コンポーネント構成を正確に表現したものを使った抽象アプリケーションのひとつの表現を示す。
【０１３４】
（表１）
2004192650.tif 000003
【０１３５】
表２は、汎化したものを示す。
【０１３６】
（表２）
2004192650.tif 000004
【０１３７】
「抽象アプリケーション保存」ステップ２１０５は、抽象アプリケーションをデフォルトロケーションおよび／またはユーザが指定するロケーションに保存する。抽象アプリケーションは、個人ロギングサービス１９１５、エンティティコンポーネント１９０１、ファイルサーバ１９１１、抽象コンポーネントサーバ１９０９の１乃至複数に保存し、また、コンポーネントによって直接アクセス可能な、あるいはネットワーク上でコンポーネントがアクセス可能なフロッピー（登録商標）ディスク、ＣＤ、ＤＶＤ、フラッシュメモリ等の有形媒体に記憶することができる。
【０１３８】
いったん抽象アプリケーションが保存されると、これを取得、インスタンス化して、第一のコンポーネントセット、あるいは第二のコンポーネントセットのいずれかでコンポーネント構成を再現することが可能である。
【０１３９】
ユーザは、コンポーネントの履歴ログのデータマイニングによって抽象アプリケーションを定義し、以前確立したコンポーネント構成を探索、選択することもできる。
【０１４０】
さらに、抽象アプリケーションは他の抽象アプリケーションを呼び出すことができる。たとえば、表３参照。
【０１４１】
（表３）
2004192650.tif 000005
【０１４２】
（表３（続き））
2004192650.tif 000006
【０１４３】
このように、ｔｅｘ  ｐｒｅｓｅｎｔａｔｉｏｎアプリケーションは、ｔｅｘ２ｐｄｆとｐｄｆ２ｖｉｄｅｏアプリケーションを呼び出す。
【０１４４】
図２２は、「抽象アプリケーション定義」プロセス２２００を示し、ユーザはこれを呼び出してコンポーネントのコンテキスト履歴から抽象アプリケーションを作ることができる。このプロセスは、コンポーネント構成を現在確立する必要がないため、図２１のプロセスとは異なる。その代わりに、「抽象アプリケーション定義」プロセス２２００は利用可能な履歴記録にアクセスし、対応するコンポーネント構成を実際に確立することを必要とせずに、抽象アプリケーションのためのコンポーネント構成を取得する。「パラメータ入力」手順２２０１において、「抽象アプリケーション定義」プロセス２２００は、所望のコンポーネント構成に関連するユーザからの情報にアクセスする。この情報には、コンポーネント構成を確立すべきロケーション、いつ同様のコンポーネント構成が確立されたか、使用されたコンポーネントの種類等のデータが含まれる。この情報は、「履歴記録アクセス」手順２２０３が適当なコンポーネントの履歴記録を検索するのに使用する。
【０１４５】
ユーザはまた、検索対象を特定の履歴ログに限定するか、あるいは検索対象を拡張することにより、どのコンポーネント履歴サービスにアクセスするかを制御できる。
【０１４６】
いったん履歴記録へのアクセスが行われると、「構成表現再現」手順２２０５が、ユーザが設定する条件を満たすコンポーネント構成の表現を再現する。「選択的汎化」手順２２０７により、ユーザは望みどおりにコンポーネント構成を汎化することができる。いったんコンポーネント構成が決定されると、これは、「抽象アプリケーション保存」ステップ２１０６とほぼ同様に動作する「抽象アプリケーション保存」手順２２０９により、抽象アプリケーションとして保存される。
【０１４７】
図２１と図２２のプロセスはどちらも、ユーザの相互作用を必要とする。この相互作用は、ユーザのコンポーネントにおいて行われても、あるいはコンピュータを使用するユーザが誘発してもよい。しかしながら、抽象アプリケーションを開発するにはこのほか、どのコンポーネント構成が一般に使用されているかを自動的に判断し、この一般に使用されたコンポーネント構成に対応する抽象アプリケーションを自動的に定義する方法もある。
【０１４８】
図２３は、データマイニングおよびコンピュータ学習テクニックを使って、一般に使用されるコンポーネント構成に対応する抽象アプリケーションを自動的に生成する「自動抽象アプリケーション定義」プロセス２３００を示す。「自動抽象アプリケーション定義」プロセス２３００はしばしば、特定の環境の中で実行するが、そのプロセスが環境内のコンポーネントの履歴データログにアクセスできるかぎり、環境の外で実行することも可能である。「自動抽象アプリケーション定義」プロセス２３００は、抽象コンポーネントサーバ１９０９、ファイルサーバ１９１１、コンテキストモニタ、コンポーネントあるいはその他適当に構成されたデバイスによって実行される。いったん抽象アプリケーションが定義されると、これは記憶され、コンポーネントおよび抽象コンポーネントサーバ１９０９によって利用可能となる。
【０１４９】
「履歴記録アクセス」手順２３０１は、標的とする環境に入ったコンポーネントに関する履歴記録を収集し、関係のある履歴をデータベースに記憶する。関係のある履歴には、まだデータベースに記憶されていないもの、コンポーネントの使用に関するもの、データベース上に記憶された既存の履歴から推論できるものとは累積されない履歴が含まれる。「使用パターン認識」手順２３０３は、定期的に実行され、データベース内の情報の評価によって、関連する環境における一般に使用されるコンポーネント構成が判断される。一般に使用されるコンポーネント構成がいったん判断されると、「使用パターンフィルタ」手順２３０５は、すでに認識された使用パターンを排除し、新たに検出された使用パターンだけを残す。これらの新たに検出された使用パターンは次に、「抽象アプリケーション自動生成」手順２３０７によって使用され、その使用パターンに対応するコンポーネント構成が自動的に生成され、汎化される。抽象アプリケーションは、いったん作られると、「抽象アプリケーション保存」手順２３０９によって保存され、コンポーネントにより使用可能となる。
【０１５０】
「抽象アプリケーション自動生成」手順２３０７は、探索的手法を使って、抽象アプリケーションに変換できるコンポーネント構成の認識と変換を簡素化することができる。コンポーネント構成から抽象アプリケーションへの変換で、構成におけるコンポーネントの種類とコンポーネントの特徴が認識される。
【０１５１】
図２４は、抽象アプリケーションのインスタンス化に使用される「抽象アプリケーション動作プロセス」２４００を示す。抽象アプリケーションが開始されると、これは、抽象アプリケーションがどのコンポーネントを利用できるかを決定する「利用可能コンポーネント探索」手順２４０１を実行する。次に、抽象アプリケーションの汎化レベルに応じて、アプリケーションは、「コンポーネントフィルタ」手順２４０３において、抽象アプリケーションは「利用可能コンポーネント探索」手順２４０１によって探索されたコンポーネントのうちどれを使用できるかを決定する。その結果特定されたコンポーネントから、アプリケーションは、「コンポーネント選択」手順２４０５においてどのコンポーネントをコンポーネント構成に組み込むかを選択する。「コンポーネント構成」手順２４０７において、抽象アプリケーションはコンポーネントの状態を判断し、必要に応じてコンポーネントの状態を設定し、コンポーネント間のデータおよび制御経路を確立し、ユーザインタフェースを取り付けることによってコンポーネントを構成し、このコンポーネント構成を動作できるよう準備する。その後、抽象コンポーネントは「構成コンポーネント使用」手順２４０９において、適当な制御メッセージを当的なコンポーネントに送信することにより、その機能を実行する。最後に、使用が完了したら、「構成終了」手順２４１１が構成を終了し、コンポーネントの各々をそのデフォルトまたは初期状態に戻すことができる。
【０１５２】
「コンポーネントフィルタ」手順２４０３は、抽象アプリケーションが必要とするコンポーネントを抽出する。抽象アプリケーションが汎化されていない場合、必要とされるコンポーネントは以前使用されたものとまったく同じコンポーネントであり、「コンポーネントフィルタ」手順２４０３は、これらのコンポーネントだけをフィルタから通す。抽象アプリケーションが汎化されている、あるいはユーザ入力を受け入れると、「コンポーネントフィルタ」手順２４０３は、汎化された制約に適合するすべてのコンポーネントをフィルタから通し、「コンポーネント選択」手順２４０５で使用できるようにする。たとえば、コンポーネント構成がビデオプロジェクタを汎化し、抽象アプリケーションがアクセスできる環境に複数のビデオプロジェクタがある場合、これらのビデオプロジェクタの各々はフィルタを通過する。汎化されたコンポーネントの中には、ユーザの介入がなければフィルタを通過できないものもある。
【０１５３】
「コンポーネント選択」手順２４０５は、「コンポーネントフィルタ」手順２４０３を通過したコンポーネントの中から、構成に使用すべきものを選択する。コンポーネント構成が汎化されないと、そのコンポーネント構成の中で特定されたコンポーネントだけが選択される。コンポーネント構成が汎化されていない場合は、おそらく、抽象アプリケーションは同様の機能を有する多数のコンポーネントを利用できる。この場合、「コンポーネント選択」手順２４０５は、複数のコンポーネントの各々からの履歴記録にアクセスする。次に、抽象アプリケーションはアクセスした履歴を評価し、そのコンポーネント構成に一番フィットするのはコンポーネントのどの構成かを判断する。「コンポーネント選択」手順２４０５は、抽象アプリケーションのユーザに支援を求め、その後の評価のためのユーザの応答を記憶しておくことができる。「コンポーネント選択」手順２４０５は、それが利用できるどの情報でも使用できる。これには、その抽象アプリケーションにアクセスしているエンティティのロケーション、そのロケーション内の他のエンティティ、そのロケーションにおける他のコンポーネント、利用可能なコンポーネントの機能および／または能力、コンテキストモニタからの情報、抽象コンポーネントサーバ１９０９からの情報、これらすべての利用可能な履歴等がある。
【０１５４】
「コンポーネント構成」手順２４０７は、特定のコンポーネントを構成するために、ハードコード化してもよい。これはまた、コンポーネントコンテキストおよび／または履歴ロギングサービスを調べ、選択されたコンポーネントが過去においてどのように構成されたかを判断し、今度はこれらをどのように構成すべきかを推論するために、機械学習機能を含めることもできる。さらに、「コンポーネント構成」手順２４０７は、その構成に使用できる選択されたコンポーネントからのモバイルコードを受け取ることが可能である。
【０１５５】
抽象アプリケーションは、既知の状態または構成にコンポーネントをセットする機能を持つことができる。コンポーネント状態のディスクリプタは、コンテキストプロパティ、不透明オブジェクト、あるいはそのコンポーネントにしか解釈できない識別子のいずれでもよい。プロジェクタコンポーネントに関するこのような状態の例としては電球の状態を表す状態やアクティブインプットを表す状態がある。状態変更コマンドの一例は、”ｂｕｌｂ＝ＯＮ；  ｉｎｐｕｔ＝ＲＧＢＡ”である。さらに、一部のコンポーネントは、コンテキストプロパティの変更に応答して状態を変更するよう構成することができる。
【０１５６】
抽象アプリケーションは、ファイルとして、コンポーネントコンテキスト、検索可能なデータベース、あるいはファイル構造の中に保存できる。このように、特定の属性を有する抽象アプリケーションは検索可能である。これにより、エンティティは、たとえば、そのエンティティの現在のロケーションにおいて利用可能なすべての抽象アプリケーション、経営幹部用会議室におけるすべての抽象アプリケーション、あるいは特定のプロジェクタを使用する可能性のあるすべての抽象アプリケーション等を検索することができる。さらに、ローカル環境１９１３は、あるコンポーネントがローカル環境１９１３に入ったとき、抽象アプリケーションをそのコンポーネントに自動的に提供するよう構成することも可能である。また、提供された抽象アプリケーションは自動的に実行する、あるいはユーザによる呼出があったときのみ実行するよう構成してもよい。
【０１５７】
図２５は、抽象アプリケーション２５０３とローカル環境１９１３とをインタフェースするコンポーネントインタフェース２５０１を含む抽象コンポーネント２５０１を示す。このように、抽象コンポーネント２５００は、サーバ上でインスタンス化されると、コンポーネントのすべての特徴を持つほか、抽象アプリケーション２５０３の機能を果たす。これらの特徴には、探索要求に応答する、履歴ロギングサービスを使用する、コンテキスト情報を提供する、自分自身のコンテキストを維持する機能のほかその他の機能が含まれる。
【０１５８】
抽象アプリケーションは、適当な抽象アプリケーションサーバに分散させ、これを電子メールの中に含め、これを特定のロケーションで利用可能な抽象コンポーネントの中に組み込むことにより、コンポーネントが利用できる状態となる。さらに、抽象アプリケーションの中には、ネットワークまたはその他のコンピュータ判読可能な媒体を介して、一般に販売その他提供されるものもある。
【図面の簡単な説明】
【０１５９】
【図１】本発明の実施形態によるコンテキスト情報を提供するためのシステムの全体構成図である。
【図２】コンテキスト情報を提供するためのシステムにおいて利用される任意コンポーネントの一例のブロック図である。
【図３】本発明の実施形態によるコンテキスト情報を提供するためのシステムの部分構成図である。
【図４】コンテキスト情報を提供するプロセスのフローチャートである。
【図５】本発明の実施形態によるコンテキスト情報を提供するためのシステムの部分構成図である。
【図６】コンテキスト情報を提供するプロセスのフローチャートである。
【図７】本発明の実施形態によるコンポーネントのコンテキストの構造を示す図である。
【図８】本発明の実施形態によるコンポーネントのコンテキスト履歴の構造を示す図である。
【図９】本発明の実施形態によるコンポーネントのコンテキストアクセス管理の構造を示す図である。
【図１０】本発明の実施形態によるコンポーネントのプロパティの構造を示す図である。
【図１１】本発明の実施形態によるコンポーネントのプロパティ履歴の構造を示す図である。
【図１２】本実施形態によるコンテキストアクセスプロセスを示す図である。
【図１３】本実施形態によるコンテキスト履歴を提供するプロセスを示す図である。
【図１４】本実施形態によるフィルタ／優先順位付けプロセスを示す図である。
【図１５】本実施形態によるコンテキストモニタを初期化するプロセスを示す図である。
【図１６】本実施形態によるコンテキストモニタの探索スレッドを示す図である。
【図１７】本実施形態による推論エンジンスレッドを示す図である。
【図１８】本実施形態によるコンポーネントモニタスレッドを示す図である。
【図１９】本実施形態によるユビキタスコンピューティング環境を示す図である。
【図２０】本実施形態によるコンポーネントロギングプロセスを示す図である。
【図２１】本実施形態による抽象アプリケーションを定義するための第一のプロセスを示す図である。
【図２２】本実施形態による抽象アプリケーションを定義するための第二のプロセスを示す図である。
【図２３】本実施形態による抽象アプリケーションを定義するための自動プロセスを示す図である。
【図２４】本実施形態による抽象アプリケーションの動作を示す図である。
【図２５】本実施形態による抽象コンポーネントを示す図である。
【符号の説明】
【０１６０】
１０  システム、１２  コンピュータ、１４  プリンタ、１６  携帯情報端末機器（ＰＤＡ）、１８  サーバ、２０  ネットワーク、２２  中央処理ユニット（ＣＰＵ）、２４  記憶装置、２６  Ｉ／Ｏユニット、１６ａ  汎用インタフェースセット、１６ｂ  データオブジェクト、１６ｃ  コンテキストオブジェクト、１４ａ  汎用インタフェースセット、１４ｂ  データオブジェクト、１４ｃ  コンテキストオブジェクト、１９００  ユビキタスコンピューティング環境、１９０１  エンティティコンポーネント、１９０３  第一のコンポーネント、１９０５  第二のコンポーネント、１９０７  第三のコンポーネント、１９０９  抽象コンポーネントサーバ、１９１１  ファイルサーバ、１９１３  ローカル環境、１９１５  個人的ロギングサービス、１９１７  第二のコンポーネントのロギングサービス、１９１９  第三のコンポーネントのロギングサービス、１９２７  構成遠隔操作装置。
【図１】
2004192650.tif 000007
【図２】
2004192650.tif 000008
【図３】
2004192650.tif 000009
【図４】
2004192650.tif 000010
【図５】
2004192650.tif 000011
【図６】
2004192650.tif 000012
【図７】
2004192650.tif 000013
【図８】
2004192650.tif 000014
【図９】
2004192650.tif 000015
【図１０】
2004192650.tif 000016
【図１１】
2004192650.tif 000017
【図１２】
2004192650.tif 000018
【図１３】
2004192650.tif 000019
【図１４】
2004192650.tif 000020
【図１５】
2004192650.tif 000021
【図１６】
2004192650.tif 000022
【図１７】
2004192650.tif 000023
【図１８】
2004192650.tif 000024
【図１９】
2004192650.tif 000025
【図２０】
2004192650.tif 000026
【図２１】
2004192650.tif 000027
【図２２】
2004192650.tif 000028
【図２３】
2004192650.tif 000029
【図２４】
2004192650.tif 000030
【図２５】
2004192650.tif 000031