(57)【要約】  同期フレームワークが、サーバとオフラインにすることができるクライアントとの間でデータグループを同期化するために提供される。フレームワークは、独自の方法のストレージフォーマットでクライアントストレージにインタフェースするクライアント同期プロバイダコンポーネントと、クライアントにより維持されて、サーバストレージにかつ／またはサーバストレージからデータグループへの変更をアップロード及び／またはダウンロードする同期エージェントコンポーネントと、ストレージフォーマットとは関係なくサーバストレージに同期アダプタを介してインタフェースするサーバ同期プロバイダコンポーネントと、を含む。フレームワークは、デフォルトのアプリケーション同期シナリオに従って動作するオフラインの同期アプリケーションを構築するためにデフォルトのビルディングブロックを提供し、また、カスタムのオフラインアプリケーション同期シナリオのためのカスタムのビルディングブロックを利用可能にする。
2010518490.tif 000002
【特許請求の範囲】
【請求項１】
サーバと少なくとも１つのクライアントとの間で少なくとも１つのデータグループを同期化する同期フレームワークであって、
前記サーバと前記少なくとも１つのクライアントとの間の前記少なくとも１つのデータグループの同期化の間、前記クライアントストレージの構造とは関係なくクライアントストレージにインタフェースするクライアント同期プロバイダコンポーネントと、
同期化の間に前記サーバへ送信するために前記少なくとも１つのクライアントにより維持される同期メタデータを収集し、サーバストレージへかつ／またはサーバストレージから前記少なくとも１つのデータグループに対する変更をアップロードしかつ／またはダウンロードする同期エージェントコンポーネントと、
前記サーバと前記少なくとも１つのクライアントとの間の前記少なくとも１つのデータグループの同期化の間に前記サーバストレージの構造とは関係なくサーバストレージにインタフェースするサーバ同期プロバイダコンポーネントと
を含む同期フレームワーク。
【請求項２】
前記クライアント同期プロバイダコンポーネントに同期要求を実行することにより同期化されたデータを使用するクライアントアプリケーションを更に含むことを特徴とする請求項１記載の同期フレームワーク。
【請求項３】
前記クライアント同期プロバイダコンポーネントは、複数のデフォルトクライアント同期プロバイダのうちの１つであることを特徴とする請求項２記載の同期フレームワーク。
【請求項４】
前記クライアント同期プロバイダコンポーネントは、前記クライアントアプリケーションの１つまたは複数の機能専用のクライアント同期プロバイダであることを特徴とする請求項２記載の同期フレームワーク。
【請求項５】
前記同期エージェントコンポーネントは、前記クライアントアプリケーションにエラーイベント、プログレスイベント、及びコンフリクトイベントを伝えることを特徴とする請求項２記載の同期フレームワーク。
【請求項６】
前記同期フレームワークは更に、前記サーバストレージと直接通信を実行する少なくとも１つの同期アダプタを含み、前記同期エージェントコンポーネントは、前記サーバ同期プロバイダコンポーネントとインタラクションを実行する、前記サーバ同期プロバイダコンポーネントは、前記少なくとも１つの同期アダプタを使用して前記サーバストレージに接続することを特徴とする請求項１記載の同期フレームワーク。
【請求項７】
前記少なくとも１つの同期アダプタの各々は、複数のテーブルの論理的グループ化とともにクライアントとサーバとの間で同期化されている各テーブルについてのテーブル及びカラムマッピングを定義することを特徴とする請求項６記載の同期フレームワーク。
【請求項８】
前記同期エージェントコンポーネントは、前記サーバ同期プロバイダコンポーネントに対して前記クライアントストレージのインサート部分を前記サーバストレージに伝えるよう指示することを特徴とする請求項１記載の同期フレームワーク。
【請求項９】
前記同期エージェントコンポーネントは、前記サーバ同期プロバイダコンポーネントに対して前記クライアントストレージのアップデート部分を前記サーバストレージに伝えるよう指示することを特徴とする請求項１記載の同期フレームワーク。
【請求項１０】
前記同期エージェントコンポーネントは、前記サーバ同期プロバイダコンポーネントに対して前記クライアントストレージの削除部分を前記サーバストレージに伝えるよう指示することを特徴とする請求項１記載の同期フレームワーク。
【請求項１１】
前記同期エージェントコンポーネントは、前記サーバ同期プロバイダコンポーネントに対して前記クライアントストレージが最後に同期した後に前記サーバストレージに生じたインサート部分を列挙するよう指示することを特徴とする請求項１記載の同期フレームワーク。
【請求項１２】
前記同期エージェントコンポーネントは、前記サーバ同期プロバイダコンポーネントに対して前記クライアントストレージが最後に同期した後に前記サーバストレージに生じたアップデート部分を列挙するよう指示することを特徴とする請求項１記載の同期フレームワーク。
【請求項１３】
前記同期エージェントコンポーネントは、前記プロバイダコンポーネントに対して前記クライアントストレージが最後に同期した後に前記サーバストレージに生じた削除部分を列挙するよう指示することを特徴とする請求項１記載の同期フレームワーク。
【請求項１４】
前記同期エージェントコンポーネントは、前記サーバ同期プロバイダコンポーネントに対してインサートコマンド、アップデートコマンド、または削除コマンドの失敗に至った既存列を獲得するよう指示することを特徴とする請求項１記載の同期フレームワーク。
【請求項１５】
前記同期エージェントコンポーネントは、前記サーバ同期プロバイダコンポーネントに対してインサートコマンド、アップデートコマンド、または削除コマンドの失敗に至った既存列を獲得するよう指示することを特徴とする請求項１記載の同期フレームワーク。
【請求項１６】
前記サーバ同期プロバイダコンポーネントは、前記少なくとも１つのデータグループについての同期情報を保存し、最後の同期から後に前記サーバストレージに生じた増分変更を列挙し、クライアントから受信した増分変更を前記サーバストレージに適用することを特徴とする請求項１記載の同期フレームワーク。
【請求項１７】
前記サーバ同期プロバイダコンポーネントは、コンフリクトしているアップデート部分を検出して、プログラムによりまたはインタラクションにより前記コンフリクトの解消を可能にすることを特徴とする請求項１記載の同期フレームワーク。
【請求項１８】
同期フレームワークによりサーバと少なくとも１つのクライアントとの間で少なくとも１つのデータグループを同期化する方法であって、
前記サーバに少なくとも１つのクライアントの同期アプリケーションを接続するステップと、
前記クライアントストレージの構造とは関係なくクライアントストレージにインタフェースする前記少なくとも１つのクライアントのクライアント同期プロバイダコンポーネントの前記同期アプリケーションによる同期を要求するステップと、
同期化を実行する前記サーバの１つまたは複数のコンポーネントにインタフェースして指示する前記少なくとも１つのクライアントの同期エージェントコンポーネントにより、同期アンカーを含んでいる前記少なくとも１つのクライアントにより維持されている同期メタデータを受信するステップと、
前記同期エージェントコンポーネントによりサーバストレージにまたはサーバストレージから前記少なくとも１つのデータグループへの変更をアップロードするステップまたはダウンロードするステップのうちの少なくとも１つのステップと
を含むことを特徴とする方法。
【請求項１９】
少なくとも１つの同期コンフリクト解消ポリシを参照して、前記少なくとも１つのデータグループへの変更により現れた少なくとも１つのコンフリクトを解消するステップを更に含むことを特徴とする請求項１８記載の方法。
【請求項２０】
同期フレームワークによりサーバと疎結合クライアントとの間の少なくとも１つのデータグループを同期化する方法であって、
前記疎結合クライアントからの前記サーバの少なくとも１つの同期グループとの同期の要求をサーバ同期プロバイダコンポーネントにより受信するステップを含み、
前記受信するステップは更に、
前記クライアントの同期状態の判断を可能にする、前記クライアントにより維持されている同期メタデータを受信するステップを含み、
前記方法は更に、
前記少なくとも１つの同期グループの各同期グループについて、
前記クライアントからの前記同期グループに対するいかなる変更も前記サーバ同期プロバイダにより受信するステップを含み、
前記方法は更に、
少なくとも１つの同期アダプタを介して前記変更に基づいて前記サーバの前記少なくとも１つの同期グループをアップデートするステップを含み、
前記少なくとも１つの同期アダプタは、サーバストレージの構造とは関係なく当該サーバストレージと通信を実行することを特徴とする方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、クライアントと複数のサーバデータストアとの間でデータを同期させ、クライアントが、オフラインのアプリケーションについてなどの不定期の期間のサーバとのコンタクトを終えることができる同期フレームワークに関する。
【背景技術】
【０００２】
従来、同期化の観点から、クライアントとサーバとの間で固定的な関係が結ばれてきており、よって、データの同期化は、結果的に柔軟性及びスケーラビリティに対する制限を受けてクライアントとサーバとの間で物理的に組み込まれているかまたは専用だった。更に、ネットワークの利用不能、電力損失、または他のいくつかの理由のために、クライアントがサーバから切り離されているかもしれない場合には、切断、即ち、クライアントアプリケーションがメインサーバからオフラインであるにもかかわらず、進むべき方法が同様になければならない。今日、単一のクライアントとサーバとの間におけるように、このオフラインの動作は利用できないかまたは固定されている。即ち、柔軟性及びスケーラビリティに対する制限を同様に有しているスタティックな動作により実行される。
【０００３】
さらに、従来、これらの専用の同期関係は、オフラインであろうとなかろうとまたはオンラインであろうとなかろうと、固定されかつ融通の利かない同期フレームワークに従って同期データを通信するときに維持されて利用される同期データタイプの複雑さに苦しむ。それは、同期の非互換性問題を生じさせる、ストレージに存在する特定のデータベースフォーマットに依存していることが多い。問題を複雑にすることに、適当な同期及びレプリケーションの保証は、複数のクライアントがサーバとのコンタクトを繰り返すことを認められるときに、特に複雑になり、クライアントの全てとの同期関係を維持しているサーバについてあまりに大きいコストになることが多い。
【０００４】
一般的にいえば、不定期に接続されるアプリケーションは、アプリケーションの機能に要求されるデータの読み出し／書き込みを実行し、例えばデータベース、ウェブサービスなどのリモートのデータソースに接続するアプリケーションと定義される。更に、これらのアプリケーションは、オフラインのときでさえ、即ち、リモートのデータソースに接続していないときでさえ、シームレスに動作し続けることを必要とする。オフラインで動作する理由は、ネットワークの利用不能であるかもしれないしまたはより良いデータアクセス性能のためであるかもしれない。
【０００５】
リレーショナルデータを同期化させるためのアプリケーションを構築する既存のシステムは、リモートデータアクセス（ＲＤＡ）、マージレプリケーション、及びＡＤＯ．ＮＥＴデータセットを含む。しかしながら、ＲＤＡ及びマージレプリケーションは、ブロックの構築とは対照的にエンドツーエンドソリューションを提供し、サーバサイドとクライアントサイドとの両方に関するデータストアフォーマットに関係している。既存のシステムについての限定の別の例として、クライアントがマイクロソフトのＳＱＬサーバコンパクトエディションでありかつサーバがマイクロソフトＳＱＬサーバであるときに、ＲＤＡが使用されるだけであるかもしれない。更に、ＡＤＯ．ＮＥＴ非接続データセット（DataSets）は、ストアに結合されないが、それらは、サーバからの増分変更をダウンロードするいかなる能力もなしに、メモリに完全にロードされていることという要件のような他の制限を有する。
【０００６】
よって、既存のソリューションは、領域の両端にある。一端で、ＲＤＡ及びＡＤＯ．ＮＥＴのようなソリューションは簡単であるが、非常に限定された特徴を有する。例えば、これらは増分データのダウンロードをサポートしていないことなどである。この点で、あらゆる同期のためにサーバからクライアントへ全てのデータを送信することは、特に速度の遅いリンク全体で高価になるかもしれない。ＲＤＡはまた、クライアントデータベースがＳＱＬクライアントであることを必要とし、データセットはクライアントデータベースで裏付けられておらず、それらはキャッシュについての効率的なクエリ能力を欠いている。更に、その対極で、マージレプリケーションのようなソリューションは、ダイナミックフィルタリング及び論理レコードのようなリッチな特徴を提供するが、あまりにも複雑で融通が利かず、開発者自身のニーズに一致するソリューションをカスタマイズするごくわずかな柔軟性しか開発者に与えない。マージのようなソリューションを使用して、開発者は、どっちつかずは禁物である。従って、望ましいものは、配置されるアプリケーションの機能性及びコンテキストに適合するカスタマイズされた同期アプリケーションを構築するためのビルディングブロックを含んでいて、一般化が可能な同期フレームワークである。
【発明の概要】
【発明が解決しようとする課題】
【０００７】
今日、いかなるシステムも多数のクライアントに同期を呼びかける範囲で、ソリューションは、クライアントの全てに対するデータベース情報全体のレプリケーションに限定されており、例えば、クライアントが関連データのほんの一部と単に同期したいというイベントにおいて、データベース情報の１つまたは複数のサブセットを選択的に同期させる方法はなかった。例えば、クライアントは、全部の電子メールデータベースファイルではなく、電子メールの最後の月だけを検索したいかもしれないが、今日、同期を再構築することなしにクライアントとサーバとの間で同期されるデータを任意にまたは動的に制限するかまたはフィルタリングして新規なスタティックな方法でデータの別のセットを同期化する方法はない。
【０００８】
よって、サーバからいくつかのクライアントにデータストアのデータを同期させるため、またはその逆のため、アップデートまたは変更の同期及びレプリケーションは、様々なデバイスの中で実行されなければならない。従って、所望されるものは、サーバと疎結合クライアントとの間のデータの同期及びレプリケーションについての最新技術において上記で示した問題の各々に対処する同期フレームワークである。例えば、開発者がすでによく知っている概念及びデータタイプと連携しかつそれらを処理することができるコンポーネントを実施することによりアプリケーション開発者が上記のことを容易にするフレームワークが望ましい。更に、疎結合デバイスがサーバとコンタクトを繰り返しているときに、様々な疎結合デバイスに対して高度にスケーラブルなサーバを利用可能にし、データベースフォーマットとは関係なく動作する同期フレームワークが望まれる。
【０００９】
従って、サーバと疎結合クライアントとの間のデータの同期化についての現在の最先端技術の高度化が欠如していることを考慮して、サーバ及びクライアントのための改良された同期フレームワークを提供することが望ましい。疎結合デバイスとの関連で同期の最新技術におけるこれらの不足部分及び他の不足部分は、更に詳細に以下で述べる本発明の例示的でかつ限定でない様々な実施形態の説明で明らかになるだろう。
【課題を解決するための手段】
【００１０】
本発明は、オフラインにすることができるサーバとクライアントとの間のデータグループを同期化するための同期フレームワークを提供する。フレームワークは、ストレージフォーマットの独立した方法でクライアントストレージにインタフェースするクライアント同期プロバイダコンポーネント、クライアントにより維持される同期メタデータを収集して、サーバストレージにかつ／またはサーバストレージからデータグループへの変更をアップロードしかつ／またはダウンロードする同期エージェントコンポーネント、及び、ストレージフォーマットとは無関係にサーバストレージに同期アダプタを介してインタフェースするサーバ同期プロバイダコンポーネントを含む。フレームワークは、デフォルトのアプリケーション同期シナリオに従って動作するオフラインの同期アプリケーションを構築するためのデフォルトのビルディングブロックを提供し、また、カスタムのオフラインアプリケーション同期シナリオのためのカスタムのビルディングブロックを利用可能にする。
【００１１】
単純化された概要が本明細書において提供されて、より詳細な説明及び添付の図面において付随する例示的でかつ限定でない実施形態の様々な態様の基本的な理解または一般的な理解ができるようにするのを助ける。しかしながら、この概要は、広範囲に及ぶ概観または網羅的な概観を意図しない。その代わりに、この概要の唯一の目的は、後に続いている本発明の様々な実施形態のより詳細な説明についての前置きとして、単純化された形式で本発明の例示的でかつ限定でないいくつかの実施形態に関するいくつかの概念を示すことである。
【００１２】
本発明の同期フレームワークが、添付の図面を参照して更に説明される。
【図面の簡単な説明】
【００１３】
【図１Ａ】本発明によるオフラインのアプリケーションと同期するためのフレームワークのアーキテクチャのブロック図である。
【図１Ｂ】本発明によるオフラインのアプリケーションと同期するためのフレームワークのアーキテクチャのブロック図である。
【図２Ａ】本発明のフレームワークの一部として提供されるビルディングブロックの限定でない実施例のブロック図である。
【図２Ｂ】本発明のフレームワークの一部として提供されるビルディングブロックの限定でない実施例のブロック図である。
【図２Ｃ】本発明のフレームワークの一部として提供されるビルディングブロックの限定でない実施例のブロック図である。
【図２Ｄ】本発明のフレームワークの一部として提供されるビルディングブロックの限定でない実施例のブロック図である。
【図３Ａ】本発明のフレームワークによる同期シナリオの例示的でかつ限定でない実施例を示すフローチャートである。
【図３Ｂ】本発明のフレームワークによる同期シナリオの例示的でかつ限定でない実施例を示すフローチャートである。
【図３Ｃ】本発明のフレームワークによる同期シナリオの例示的でかつ限定でない実施例を示すフローチャートである。
【図３Ｄ】本発明のフレームワークによる同期シナリオの例示的でかつ限定でない実施例を示すフローチャートである。
【図４】本発明のフレームワークによるクライアント側ストレージ構造またはサーバ側ストレージ構造についての演繹的知識なしでクライアントとサーバとの間で往復する通過データ構造のための例示的で非制限的なデータセットを示す図である。
【図５】本発明のフレームワークによるクライアント側ストレージ構造またはサーバ側ストレージ構造についての演繹的知識なしでクライアントとサーバとの間で往復する通過データ構造のための例示的で非制限的なデータセットを示す図である。
【図６】例えばハブアンドスポーク同期モデルの一部として、多くのクライアントに対する本発明の同期フレームワークのスケーラビリティを示す図である。
【図７Ａ】本発明のクライアントの観点から、同期のための例示的でかつ限定でないプロセスを実施するフローチャートである。
【図７Ｂ】本発明のサーバの観点から、同期のための例示的でかつ限定でないプロセスを実施するフローチャートである。
【図８】本発明の拡張可能な同期アンカーモデルの例示的な態様を示すブロック図である。
【図９】本発明を実行することができる例示的でかつ限定でないネットワーク化された環境を示すブロック図である。
【図１０】本発明を実行することができる例示的でかつ限定でないコンピュータシステムまたは動作環境を示すブロック図である。
【発明を実施するための形態】
【００１４】
概観
背景技術で検討したように、既存の同期ソリューションは、あまりにも複雑なオブジェクトモデルを実施し、オフラインのアプリケーションに役立つにはあまりに密結合であり、既存の同期ソリューションのスケーラビリティはサーバのオーバヘッドために限定されている。従って、最新技術におけるこれらの不足を考慮して、本発明はサーバ及び疎結合クライアントとの関連で使用するための同期フレームワーク及び対応する方法を提供する。
【００１５】
前述のように、不定期に接続されるアプリケーションは、例えばデータベース、ウェブサービス等のリモートのデータソースに接続されて、アプリケーションの機能に要求されるデータの読み出し／書き込みを実行するアプリケーションと定義される。更に、これらのアプリケーションは、それらがオフラインであるとき、即ち、リモートのデータソースに接続していないときでさえ、途切れなく機能し続けることを必要とする。オフラインで機能する理由は、ネットワークの利用不能またはより良いデータアクセス性能のためであるかもしれない。
【００１６】
本発明の様々な限定でない実施形態によると、不定期に接続されるアプリケーションは、それらがオフラインである場合にデータを保持するデータキャッシュと、ネットワークが利用できる場合にこのキャッシュをリモートストアと同期させるメカニズムとを提供される。背景技術で検討したように、今日存在するいかなるソリューションもカスタム同期アプリケーションを構築するのに不十分である。よって、本発明は、様々なクライアント／サーバ同期シナリオについてのカスタマイズされた同期アプリケーションを構築するビルディングブロックを含む同期フレームワークを提供する。
【００１７】
更に詳細に以下で説明される様々な限定でない実施形態において、本発明は、不定期に接続されるアプリケーションを構築するために開発者に一組のビルディングブロックを提供する。フレームワークは、簡単な同期ソリューションを非常に素早く構築するためのコンポーネントを含み、その一方でビルディングブロックを使用して複雑なソリューションを構築するのに十分な柔軟性も有する。
【００１８】
更に詳細に以下で説明されるように、以下はこのフレームワークにより可能となるシナリオの例示的でかつ限定でないリストである。（Ａ）クライアントに関するデータの読み出し専用キャッシュ、即ち、スナップショット同期、（Ｂ）キャッシュを最新のデータに保つインクリメンタル同期を備えたクライアントに関するデータの読み出し専用キャッシュ、即ち、インクリメンタルダウンロード同期、（Ｃ）保存機能及びクライアントからサーバへの転送機能、即ち、アップロードオンリ同期、（Ｄ）同じデータを変更する複数のクライアントを使用してコンフリクト検出及び解消をサポートするフレームワークを備えた、クライアントに関するデータの読み出し‐書き込みキャッシュ、即ち、双方向同期、（Ｅ）サーバ側でのいかなるプロビジョニングも必要とせずに事前に存在するサーバと同期すること、（Ｆ）ＳＱＬ、オラクル等の異機種環境のサーバと同期すること、（Ｇ）カスタムのインターネット使用可能サービスと同期すること、（Ｈ）例えば、ＳＱＬサーバコンパクトエディション、ＳＱＬエクスプレス等の異なったクライアントストアをプラグインする能力、（Ｉ）クライアントとサーバとの間のカスタムトランスポートをプラグインする能力、（Ｊ）ストアを追跡するカスタム変更をプラグインする能力、である。
【００１９】
オフラインアプリケーションのための同期フレームワーク
オフラインのアプリケーションを開発しかつサポートするために使用することができる本発明による同期フレームワークが提供される。オフラインのアプリケーションのためのデータを同期させるアプリケーションフレームワークの概観は、図１Ａ及び図１Ｂの例示的でかつ限定でないブロック図において示される。
【００２０】
図１Ａのブロック図で大まかに示したように、同期フレームワークＳｙｎｃＦＷは、クライアントアプリケーションが切断されてもよいシナリオについてサーバデータベース１９０のデータをクライアントデータベース１１０のデータに同期させるために提供される。クライアント側で、コンポーネント１２５がフレームワークにおいて提供され、クライアント側同期データを送信／受信する方法を指定し、クライアントデータベース１１０のフォーマットとは関係なく通信を実行する。例えば、コンポーネント１２５は、ＳＱＬサーバコンパクトエディション、ＳＱＬエクスプレス等を異なったクライアントストアにプラグインすることができる。
【００２１】
サーバ側で、コンポーネント１５５が提供され、サーバ側同期データを送信／受信する方法を指定し、同様に、サーバデータベース１９０のフォーマットとは関係なく通信し、ＳＱＬ、オラクル等の異機種環境のサーバと同期する能力を利用可能にする。
【００２２】
クライアントとサーバとの間の同期データのオーケストレーション１４５が、独自のトランスポート方法、即ち、ウェブサービスでもＲＳＳ等でも、で処理され、コンポーネント１２５とコンポーネント１５５との間でデータがパッケージ化される方法に関係なくデータが処理されることが有利である。１つの限定でない実施形態において、データはクライアントアプリケーションとカスタム設計されたウェブサービスとの間で同期化される。よって本発明は、クライアントとサーバとの間のカスタムトランスポートをプラグインする能力を含んでおり、よって本発明のフレームワークのためのクライアントとサーバとの間の通信は、いかなる特定のトランスポート手段にも限定されないことが有利である。
【００２３】
図１Ｂは、本発明による同期フレームワーク及びアーキテクチャのコンポーネントのより詳細な図を示す。クライアント側で、同期フレームワークは、同期エージェントコンポーネント１３０によりオーケストレーションが行われる。この点において、本発明の同期フレームワークにより実施される同期プロトコルがトランスポートにとらわれないことに注目しなければならない。よって、図１Ｂは、ウェブサービス１５０を使用してほんの１つの可能なトランスポート実施例だけを示すが、代わりにネットワーク技術において当業者に公知のＲＳＳ及び他のトランスポートメカニズムであってもよい。
【００２４】
クライアント側にある同期エージェント１３０は、中心的な同期エンジンであって、以下に使用される論理を実施する。即ち、（Ａ）クライアントデータベース及びサーバデータベースからメタデータを収集する、（Ｂ）サーバデータベースへの変更及びサーバデータベースからの変更をクライアントプロバイダ１２０にアップロード及びダウンロードする、（Ｃ）クライアントアプリケーションにエラーイベント、プログレスイベント、及びコンフリクトイベントを伝える。更に、同期エージェント（または複数の同期エージェント）１３０は、サーバ同期プロバイダインタフェース（または複数のサーバ同期プロバイダインタフェース）を介してサーバデータベース１９０とインタラクションする同期アダプタ１７０を使用する。更に、各同期アダプタ１７０は、２つ以上のテーブルの論理グループ化とともに、クライアントとサーバとの間で同期されたテーブル及び各テーブルのためのカラムマッピングを定義する。
【００２５】
同期エージェント１３０はまた、クライアント同期プロバイダ１２０及びサーバ同期プロバイダ１６０に対応しており、それらは、それぞれクライアントデータベース１１０の仕様及びサーバデータベース１２０の仕様をエージェント１３０から隠す。同期エージェント１３０は、同期グループ１８０の集合に対応し、これらのグループ１８０に同期をもたらすために本発明のフレームワークが与えられたプロトコルを実行する。同期アダプタ１７０は、サーバデータベース１９０とインタラクションする方法を同期エージェント１３０に指示する。この点で、同期エージェント１３０は同期アダプタ１７０と直接インタラクションを実行しないが、むしろ、同期エージェント１３０はサーバプロバイダ１６０とインタラクションする。サーバプロバイダ１６０はさらに同期アダプタ１７０を使用してデータベース１９０に接続する。このインタラクションは、本発明の限定でない実施形態により実行され得る以下のデータベースコマンドオブジェクトのうちの１つまたは複数を通じて定義される。即ち、インサートコマンド、アップデートコマンド、削除コマンド、増分インサート選択コマンド、増分アップデート選択コマンド、増分削除選択コマンド、アップデートコンフリクト選択コマンド、及び／または削除コンフリクト選択コマンド、である。
【００２６】
本発明によるインサートコマンドは、サーバ同期プロバイダ１６０により使用されて、サーバデータベース１９０にクライアントデータベース１１０に関するインサート部分を伝える。
【００２７】
本発明によるアップデートコマンドは、サーバ同期プロバイダ１６０により使用されて、サーバデータベース１９０にクライアントデータベース１１０に関するアップデート部分を伝える。
【００２８】
本発明による削除コマンドは、サーバ同期プロバイダ１６０により使用されて、サーバデータベース１９０にクライアントデータベース１１０に関する削除部分を伝える。
【００２９】
本発明による増分インサートの選択コマンドは、サーバ同期プロバイダ１６０により使用されて、クライアントデータベース１１０が最後に同期した後にサーバデータベース１９０に生じたインサート部分を列挙する。
【００３０】
本発明による増分アップデートの選択コマンドは、サーバ同期プロバイダ１６０により使用されて、クライアントデータベース１１０が最後に同期した後にサーバデータベース１９０に生じたアップデート部分を列挙する。
【００３１】
本発明による増分削除の選択コマンドは、サーバ同期プロバイダ１６０により使用されて、クライアントデータベース１１０が最後に同期した後にサーバデータベース１９０に生じた削除部分を列挙する。
【００３２】
本発明によるアップデートコンフリクト選択コマンドは、サーバ同期プロバイダ１６０により使用されて、インサートコマンド、アップデートコマンド、または削除コマンドの失敗を引き起こす既存列を獲得する。このコマンドは、適用できるデータテーブルのコンフリクトしている列のルックアップを実行する。
【００３３】
本発明による削除コンフリクト選択コマンドは、サーバ同期プロバイダ１６０により使用されて、インサートコマンド、アップデートコマンド、削除コマンドの失敗に至った既存行をとらえる。１つの実施形態において、このコマンドは、トゥームストーンテーブルにおいてコンフリクトしている列のルックアップを実行してアップデートコマンドの失敗を引き起こすトゥームストーンテーブルの列を見つけるが、インサートコマンドまたは削除コマンドの失敗のときは使用されない。
【００３４】
本発明の同期フレームワークの一部として、オフラインのアプリケーションは前述の同期動作のうちのいずれか１つまたは複数を選ぶことができる。本明細書で使用される実施形態及び例のいくつかは、誤解を避けるために、クライアントデータストアまたはサーバデータストアがいかなる種類のデータストアであってもよいにもかかわらず、例えばリレーショナルストレージなどの、データのデータベースストレージに付随している。
【００３５】
本発明のフレームワークによるサーバ同期プロバイダ１６０に関して、１つの限定でない実施形態において、デフォルトプロバイダ及びカスタムプロバイダ１６０の両方を利用可能である。デフォルトプロバイダ１６０は、例えば、シンクライアントシナリオ、リッチクライアントシナリオ、ＳＱＬサーバコンパクトエディション、ＳＱＬサーバエクスプレス等の一般的なアプリケーションシナリオに対応するために提供される。アプリケーション開発者及び第三者はまた、かかるカスタムプロバイダ１６０のための単純なフレームワーク及びヘルパークラスを介して、アクセス、フォックスプロ、サイベースなどのあまり一般的でないシナリオのためにカスタムプロバイダ１６０を実装することができる。
【００３６】
本発明の様々な限定でない実施形態において、サーバ同期プロバイダ１６０の機能は、以下を含むが、これらに限定されるものではない。即ち、グループ１８０のための同期情報を保存する能力、最後の同期以後にデータベース１９０に生じた増分変更を列挙する能力、増分変更をデータベース１９０に適用する能力、コンフリクトしているアップデート部分を検出してプログラムによりまたはインタラクションを実行することによりコンフリクトしているアップデート部分を任意に解消する能力、及び、プログレスイベント及びデータ変更イベントを発生させる（fire）能力である。
【００３７】
同期プロキシ１４０に関して、今日、サービス指向アーキテクチャ（ＳＯＡ）ベースのソリューションの人気が高まってくるにつれて、サーバデータベース１９０への直接接続を必要とするソリューションは最近次第に少なくなってきていると見られる。ＳＯＡモデルについて、サーバ１９５は、要求に応じてサーバ１９５に接続するウェブサービス１５０として、その機能を与えられる。同期エージェント１３０を介して、クライアントは、インターネットを介して、または企業内のローカルイントラネットを介して、ウェブサービス１５０とインタラクションする。よって、以前に強調したように同期フレームワークのためのいかなるトランスポートメカニズムも本発明により使用されてもよいが、同期プロキシコンポーネント１４０は、切断されたＳＯＡソリューションの構築を可能にする単純なインタフェースである。
【００３８】
よって、図１Ｂは、複数のラップトップ１００及び複数のワークステーション１０５で実行中の複数のアプリケーションのための例示的でかつ限定でない同期フレームワークを説明する。アプリケーションの各々は、サーバ１９５により維持されているようなサーバデータベース１９０内のデータのために定義された１つまたは複数の同期グループ１８０と同期する。
【００３９】
図２Ａは、クライアント２００のオフラインアプリケーションＯＬＡ１からＯＬＡｎの素早い展開のための、かつ、サーバ２５０のデータストレージ２６０と同期するための本発明のフレームワークの例示的でかつ限定でない実施例である。この点で、図１Ｂのように、ストレージフォーマットの非依存性は、クライアントストレージ２１０及びサーバストレージ２６０へのフレームワーク内での通信に関して利用可能にされ、トランスポート非依存性は、サーバ２５０とクライアント２００との間で利用可能にされる。
【００４０】
上記のように、本発明によるオフラインのアプリケーションは、オフラインアプリケーションＯＬＡｎなどの特定のオフラインのアプリケーションのためにカスタマイズされるカスタムクライアント同期プロバイダ２２０ｂ、またはオフラインアプリケーションＯＬＡ１などの特定のオフラインのアプリケーションに望ましいかもしれない様々な一般的な同期シナリオを対象とするデフォルトクライアント同期プロバイダ２２０ａを実装することができる。図１Ｂと同様に、サーバ同期プロバイダ２７０ａまたは２７０ｂというインタフェースを介して、同期エージェント（または複数の同期エージェント）２３０は、同期アダプタ２８０を使用して、定義済みの同期グループ２９０により同期しているサーバデータベース２６０とインタラクションする。図示するように、サーバ同期プロバイダも、デフォルトサーバ同期プロバイダ２７０ａとして設けられて、オフラインのアプリケーションＯＬＡ１、・・・ＯＬＡｎからの周知の同期シナリオを処理してもよいし、または、カスタムサーバ同期プロバイダ２７０ｂとしてカスタマイズされて追加の同期要件を実施してもよい。よって、同期プロバイダ２２０ａ、２２０ｂ、２７０ａ、２７０ｂは、本発明のフレームワークのビルディングブロックである。それらは、特に、本明細書において更に詳細に説明される、広く予測される様々な種類の一組のオフラインの動作について、迅速かつ効果的に同期アプリケーションを構築するのを助ける。
【００４１】
図２Ｂに示すように、本発明の同期アダプタ２８２は、１つの限定でない実施形態において、本発明はデータアダプタと同様の実施例に限定されないが、誤解を避けるために、データアダプタ構成概念を使用するかまたは拡大することによりマイクロソフトＡＤＯ.ＮＥＴのデータアダプタと同様に実施される。図示するように、サーバ同期プロバイダ２７０はＡＤＯ．ＮＥＴデータアダプタ２８２とインタフェースし、ＡＤＯ．ＮＥＴデータアダプタ２８２はサーバ２５０の定義済みの同期グループ２９０に対してサーバストレージ２６０と通信する。同期アダプタクラスの設計はＡＤＯ．ＮＥＴデータアダプタクラスに基づいているので、同期をＡＤＯ．ＮＥＴプログラミングモデルに組み入れる方法は、ＡＤＯ．ＮＥＴに精通している開発者に最小限の学習で同期アプリケーションを構築することができるようにする。
【００４２】
図２Ｃに示すように、別の限定でない実施形態において、デフォルトクライアント同期プロバイダ２２２は、クライアント２００ｃのオフラインのアプリケーション２１５に代わって、ストレージ２１２、即ち、ＳＱＬサーバコンパクトエディションデータベースとＳＱＬサーバコンパクトエディションクライアントがインタフェースするのを可能にする。図２Ｄに示すように、別の限定でない実施形態において、デフォルトクライアント同期プロバイダ２２４は、クライアント２００ｄのオフラインのアプリケーション２１５に代わって、クライアントがファイルシステムストレージ２１４とインタフェースするのを可能にする。
【００４３】
よって、本発明のフレームワークのプロバイダアーキテクチャは、開発者が、フレームワーク内で提供されるクライアントプロバイダ及びサーバプロバイダを使用するかまたは、より高度なシナリオのためのカスタムプロバイダをプラグインすることができるようにする。本発明のフレームワークは、例えば、「従量制」の体験のためなどの不定期に接続されるアプリケーションを開発者が構築するためのビルディングブロックを提供する。この点で、フレームワークは、非常に迅速に単純なソリューションを構築するコンポーネントを有し、更にフレームワークは、ビルディングブロックを使用して複雑なソリューションを構築する十分な柔軟性を有する。
【００４４】
様々なデフォルトのシナリオが、本発明によるオフラインのアプリケーションのための同期フレームワークにより可能になる。図３Ａは、本発明のフレームワークにより可能にされる第１のシナリオを示し、第１のシナリオはアプリケーションによる使用のためにデータのサブセットがクライアントデータベース１１０により指定されかつ検索され得るようにすることが有利である。クライアントデータベース１１０は、オフラインにすることができ、またオンライン時にサーバデータベース１９０に対してデータのサブセットだけを同期化することができる。例えば、このことは、最近の電子メールにだけ関心がある電子メールアプリケーションが該アプリケーションで定義されているように最近の電子メールに対してだけの同期アップデートを検索して受信することができるようにする。サーバデータベース１９０からのデータのサブセットについての、クライアントのアプリケーションからのクエリであってもよい要求の一部として、サーバデータベース１９０は、上記のフレームワークアーキテクチャに従ってデータのサブセットをさらに返す。
【００４５】
図３Ａはまた、そのクライアントの全てについての同期メタデータを維持することからサーバ側が解放されることによりスケーラビリティを可能にする同期メタデータ１１２が、本発明によりクライアント側に表されることを示す。この点で、本発明のフレームワークは、サーバ側の追加のプロビジョニングを必要とせずに先に存在するサーバと同期することを可能にする。
【００４６】
本発明によると、アプリケーションはまた、次にオフラインにしてもよく、返されたデータのサブセットだけに関して動作することができ、次に、再び接続されると、即座に、クライアントはクライアントに関するデータのサブセットに関して同期アップデートを要求することができるかまたはデータの新しいサブセットの同期を要求することができる。いずれにせよ、サーバは、同期フレームワークに従って要求されたアップデートまたは新しいサブセットデータを返す。
【００４７】
図３Ｂは、クライアントキャッシュ４００が実装されてオフラインのアプリケーションがオフラインの間にキャッシュ４００のデータに素早くアクセスをすることができるということを示す。更に、図３Ｂは、利用可能にされる別のシナリオが、スナップショット同期であることを示す。スナップショット同期において、クライアントはサーバデータベース１９０のデータのサブセットのスナップショットを要求して受信し、次にキャッシュ４００などの、クライアントに関するデータの読み出し専用キャッシュに保存する。本発明はまた、インクリメンタルなダウンロード同期を任意に利用可能にする。そこで、クライアントのキャッシュ４００などの読み出し専用キャッシュは、オンライン時にキャッシュ４００を最新にしておくインクリメンタルな同期機能を提供される。また、図示されるように、本発明は、クライアントからサーバへの保存機能及び転送機能、即ち、アップロードオンリ同期、を利用可能にする。
【００４８】
図３Ｃにより示されるように、本発明はまた、双方向同期機能を提供する、クライアントに関するデータの読み出し‐書き込みクライアントキャッシュを利用可能にする。複数のクライアントが同じデータを変更するときに、双方向同期機能がコンフリクト検出及び解消をサポートするフレームワークを含むことは任意である。例えば、２つの異なるクライアントデータベース１１０ａ、１１０ｂが異なったまたはコンフリクトするデータを有するサーバデータベース１９０と同期するときに、コンフリクト解消１９５ｃは、サーバで実行されてもよい。このことは、矛盾のないデータがクライアント１１０ａ、１１０ｂにプッシュダウンされることを確実にする。あるいは、クライアントの各々は、コンフリクト解消メカニズム１９５ａ、１９５ｂを提供されてコンフリクトを解消するためのローカルアプリケーションポリシを伝えることができる。
【００４９】
更に、図３Ｄに示すように、異なったデバイスのデータの独自の進化が原因でコンフリクトがデータ内で見出される双方向同期について、コンフリクト解消１９５がコンフリクト解消ポリシにより処理されるどこでも、即ち、クライアントデータベース１１０及び／またはサーバデータベース１９０においてのいずれでも、本発明は、同期アップデートが適用される前に、データへのローカルな変更を実行する能力を利用可能にして、例えば、コンフリクト検出／解消コンポーネント１９５により適用されるコンフリクト解消を無効にする。
【００５０】
様々な限定でない実施形態において、よって、本発明のフレームワークは、データストアにカスタム変更履歴をプラグインする能力を提供する。例えば、ユーザは、アーカイブされたフォルダに対してではなく電子メールのインボックスに対する変更を追跡したいだけかもしれない。または、例えば医療記録などの特定のデータについて、バージョニングが非常に重要であるかもしれない。一方、画像アーカイブなどの他のファイルについて、バージョニングは重要でなく、よって、変更履歴は画像アーカイブのグループに対して使用不能にされてもよく、クライアントデータベースにおいてバージョニングが望ましいデータのサブセットだけが利用可能にされた変更履歴を有する。
【００５１】
図４は、データセットデータ構造４００（即ち、ＡＤＯ．ＮＥＴ  Ｖ２データセットオブジェクト）がクライアント側の同期エージェント１３０とサーバ側の同期プロバイダ１６０との間で渡される本発明の例示的な実施形態を示す。データセットインタフェース４１０は、クライアント側で提供されて、データセットデータ構造４００にかつそこから翻訳され、データセットインタフェース４１２はサーバ側で提供されてデータセットデータ構造４００にかつそこから翻訳される。あるいは、図５に示すように、それぞれクライアント側及びサーバ側のデータセットインタフェース５２０及び５２２は、それぞれクライアントデータベース１１０及びサーバデータベース１９０にそれぞれ関連するデータセットデータ構造５００にかつそこから翻訳するために利用されてもよい。誤解を避けるために、前述のデータセットの実施例は限定ではなくて、よって、他のデータ構造が利用されて、適当なインタフェースとともに、本発明によるクライアント及びサーバにかつそこからの同期データを表すことができる。どんな実施例が選択されても、本発明のフレームワークは、このようにクライアント側かサーバ側のいずれかについてのデータストレージの正確なフォーマットを知っていることを必要としないトランスポートの独自の方法で動作することが可能である。
【００５２】
図６に示すように、クライアントメタデータがクライアントに保存されるので、本発明の同期フレームワークは、ハブアンドスポークモデルに従ってデータを同期化するために使用されてもよい。ハブアンドスポークモデルにおいて、クライアント６１０ａ、６１０ｂ、６１０ｃ等は、サーバ６００とコンタクトすることができて各々が同期グループ６０５のデータと同期する。同期されているデータのタイムスタンプなどの時間特性に基づいて、かつコンフリクト解消ポリシに従って、クライアントがサーバとコンタクトするときはいつでも、同期グループ６０５の一組の矛盾のないデータは、サーバ６００で、かつクライアント６１０ａ、６１０ｂ、６１０ｃで維持されてもよい。
【００５３】
図７Ａは、クライアントの斜視図から本発明のフレームワークを使用して同期のための例示的でかつ限定でないプロセスを実施するフローチャートである。符号７００で、クライアントはサーバに接続して、一組の選択されたサーバデータグループ（または複数のサーバデータグループ）との同期を要求する。符号７０５で、同期メタデータは、クライアント同期アンカーを含んでいるクライアントにより生成されるかまたは検索される。符号７１０で、クライアントは、クライアントにより維持されている同期メタデータをサーバに送信する。上述のように、クライアントにより維持されている同期メタデータは、前の同期時間以後にクライアントに生じたデータグループ（または複数のデータグループ）への列挙された変更を含むクライアント同期状態についてのサーバによる判断を可能にする。符号７１５で、クライアントは、サーバからの同期要求の承認を受信する。
【００５４】
符号７２０で、データが別々の場所で無関係に変更された一組の同期コンフリクトは、サーバにより判断されたように、クライアントにより受信されることは任意である。クライアントが、様々な選択されたコンフリクト解消ポリシにより一組の同期コンフリクトを処理することは任意である。符号７２５で、サーバから承認を受信すると仮定すると、同期アンカーがクライアントで持続される。また、データグループ（または複数のデータグループ）に対するローカル変更の分析が引き続いて起き、サーバに送信されるべきクライアントデータグループ（または複数のクライアントデータグループ）に対するいかなる変更も次にサーバに送信される。符号７３０で、対応する方法で、次にクライアントはデータグループ（または複数のデータグループ）のクライアント側バージョンへの所望のアップデートをサーバから受信する。次にクライアントは、サーバにより生成されるが、将来の同期要求のためにクライアントにより維持される新規な同期アンカーを受信する。
【００５５】
あらゆるコンフリクトを処理するデータグループ（または複数のデータグループ）のアップデートをクライアント側のバージョンに適用し、サーバからの新しい同期アンカーを持続する。
【００５６】
図７Ｂは、本発明のサーバの斜視図から、同期のための例示的でかつ限定でないプロセスを実施するフローチャートである。符号７５０で、同期要求は、同期メタデータを含むクライアントから、同期グループ（または複数の同期グループ）のために受信される。符号７５５で、同期グループ（または複数の同期グループ）に対するいかなる変更もクライアントから受信され、同期グループ（または複数の同期グループ）はアップデートされる。符号７６０で、変更により現れるいかなるコンフリクトも判断される。符号７６５で、要求及びコンフリクトを処理することについての承認がクライアントに送信される。符号７７０で、クライアント側の変更は、クライアントのために列挙され、クライアントが同期グループ（または複数の同期グループ）をアップデートすることができるようにする。符号７７５で、サーバからの同期アンカーは、異なる特徴を有する複数のアンカデータタイプを許容する拡張可能なアンカーモデルによりクライアントに送信される。
【００５７】
更なる限定でない実施形態において、本発明は、プロトコルを提供することにより拡張可能な同期アンカーモデルを使用可能にする。それは、クライアントとサーバとの間でアンカタイプを運ぶが、クライアントのいかなる所定の構造をも担わず、よって様々なレベルの特徴を有する広範なアンカデータタイプを柔軟に許容する。図８は、様々なアンカタイプ、Ａ＿Ｔ１、Ａ＿Ｔ２、・・・Ａ＿Ｔｎが本発明のプロトコルに従ってサーバ８００とクライアント８１０との間で行ったり来たりして渡され得るということを示す。更に、アンカーの構造は、サーバにより定義され、クライアントは、サーバと同期するためにフォーマットを理解する必要はないということが有利である。よって、アンカーは、デバイスの中の指定されたデータの同期のためにローカルの「フック」を提供し、タイムスタンプ、識別、日付／時間等のある種の時間的な透かしを通常含んでいる。フックは、同期分析及びコンフリクト解消の間に分析することができる時間領域を有する。
【００５８】
例示的なネットワーク化された分散環境
当業者は、本発明がいかなるコンピュータまたは他のクライアントデバイスもしくはサーバデバイスに関連して実施されてもよいということを認めることができる。それらはあらゆる種類のデータストアに接続されているコンピュータネットワークの一部としてまたは分散コンピュータ環境に配置されてもよい。この点で、本発明は、本発明の同期フレームワークに関連して使用されてもよいいかなる数のメモリユニットまたはストレージユニット及びいかなる数のストレージユニットまたはボリュームにわたって生じるいかなる数のアプリケーション及びプロセスをも有するあらゆるコンピュータシステムまたは環境に付随する。本発明は、リモートストレージまたはローカルストレージを有するネットワーク環境または分散コンピュータ環境に配置されるサーバコンピュータ及びクライアントコンピュータを有する環境に適用することができる。本発明はまた、スタンドアロンのコンピュータデバイスに適用されてもよい。スタンドアロンのコンピュータデバイスは、プログラミング言語機能、解釈、及びリモートサービス及びプロセスまたはローカルサービス及びプロセスに関連して情報を生成し、受信し、かつ送信する実行能力を有する。
【００５９】
分散コンピュータは、コンピュータデバイスとシステムとの間のやりとりによりコンピュータ資源及びサービスの共有利用を提供する。これらの資源及びサービスは、情報の交換、キャッシュストレージ、及びファイルなどのオブジェクトのためのディスクストレージを含む。分散コンピュータはネットワークの接続性を利用して、クライアントが企業全体のためになるクライアントの総体的な力を活用することができるようにする。この点で、様々なデバイスは、本発明の同期フレームワークのコンポーネントとして機能することができるアプリケーション、オブジェクト、または資源を有していてもよい。
【００６０】
図９は、例示的なネットワーク化された環境または分散コンピュータ環境の概略図を提供する。分散コンピュータ環境は、コンピュータオブジェクト９１０ａ、９１０ｂ等、及びコンピュータオブジェクトまたはデバイス９２０ａ、９２０ｂ、９２０ｃ、９２０ｄ、９２０ｅを含む。これらのオブジェクトは、プログラム、方法、データストア、プログラマブル論理等を含むことができる。オブジェクトは、ＰＤＡ、オーディオ／ビデオデバイス、ＭＰ３プレーヤ、パーソナルコンピュータ等の同じデバイスまたは異なるデバイスの一部を含むことができる。各オブジェクトは、通信ネットワーク９４０を介して別のオブジェクトと通信することができる。このネットワークは、それ自体図９のシステムにサービスを提供する他のコンピュータオブジェクト及びコンピュータデバイスを含むことができて、それ自体多数の相互接続するネットワークを示すことができる。本発明の態様によると、各オブジェクト９１０ａ、９１０ｂ等、または９２０ａ、９２０ｂ、９２０ｃ、９２０ｄ、９２０ｅ等は、本発明によるデータグループを同期化するシステム及び方法での使用に適している、ＡＰＩもしくは他のオブジェクトを利用することができるアプリケーション、ソフトウェア、ファームウェア、及び／またはハードウェアを含むことができる。
【００６１】
９２０ｃなどのオブジェクトが別のコンピュータデバイス９１０ａ、９１０ｂ等、または９２０ａ、９２０ｂ、９２０ｃ、９２０ｄ、９２０ｅ等でホストされてもよいということも認められる。よって、示された物理的環境は、コンピュータのような接続されたデバイスを示してもよいが、かかる図は単に例示であって、物理的環境は、代わりに、ＰＤＡ、テレビ、ＭＰ３プレーヤ等の様々なデジタルデバイスを含んで表されるかまたは説明されてもよい。そのうちのいずれかは様々な有線サービス及び無線サービス、インタフェースのようなソフトウェアオブジェクト、ＣＯＭオブジェクトなどを使用することができる。
【００６２】
分散コンピュータ環境をサポートする様々なシステム、コンポーネント、及びネットワークコンフィギュレーションがある。例えば、コンピュータシステムは有線システムまたは無線システムにより、ローカルネットワークまたは広域分散ネットワークにより接続されてもよい。現在、ネットワークの多くは、インターネットに接続されている。インターネットは広範囲の分散コンピュータのためのインフラストラクチャを提供して、多くの異なったネットワークを含む。いかなるインフラストラクチャも、本発明の同期フレームワークに伴ってなされた例示的な通信のために使用することができる。
【００６３】
ホームネットワーク環境では、例えば電力線、データ（無線及び有線の両方）、音声（例えば、電話）及びエンターテインメント媒体などの固有のプロトコルを各々サポートすることができる少なくとも４つの異種のネットワークトランスポート媒体がある。明かりのスイッチ及び電化製品のような大部分の家庭用コントロールデバイスは、接続のために電力線を使用することができる。データサービスは、ブロードバンド（例えば、ＤＳＬまたはケーブルモデムのいずれか）としての家庭内に入り、無線接続（例えば、ホームＲＦまたは８０２.１１Ｂ）または有線接続（例えば、ホームＰＮＡ、Ｃａｔ５、イーサネット（登録商標）、電力線さえも）のいずれかを使用して家庭内でアクセス可能である。音声トラフィックは、有線（例えば、Ｃａｔ３）または無線（例えば、携帯電話）のいずれかとして家庭内にも入ることができ、Ｃａｔ３配線を使用して家庭内で分散されてもよい。エンターテインメント媒体または他のグラフィックデータは、衛星またはケーブルのいずれかを介して家庭内に入ることができ、同軸ケーブルを使用して家庭内で通常分散される。ＩＥＥＥ１３９４及びＤＶＩも、メディアデバイスのクラスタのためのデジタル相互接続である。これらのネットワーク環境の全て及びプロトコル標準のような出現するかもしれないかまたはすでに出現している他の環境は、相互接続されて、インターネットなどのワイドエリアネットワークを介して外部に接続され得るイントラネットなどのネットワークを形成してもよい。要するに、様々な異種の資源がストレージ及びデータの伝送のために存在し、従って、本発明のコンピュータデバイスのいずれも、あらゆる既存の方法でデータを共有して伝えることができ、本明細書の実施形態に説明された特定の方法は限定することを意図していない。
【００６４】
インターネットは、通常、コンピュータネットワーク化技術において周知である、プロトコルの伝送制御プロトコル／インターネットプロトコル（ＴＣＰ／ＩＰ）一式を利用するネットワーク及びゲートウェイの集合をいう。インターネットは、ユーザがネットワーク（または複数のネットワーク）を介してインタラクションを実効して情報を共有することができるネットワークプロトコルを実行しているコンピュータにより相互接続されている地理的に分散されたリモートコンピュータネットワークのシステムと説明することができる。かかる広範囲にわたる情報の共有のため、インターネットなどのリモートネットワークは、本質的に制限なしで、開発者が専門化されたオペレーションまたはサービスを実行するためのソフトウェアアプリケーションを設計することができるオープンシステムにはるかに広く発展した。
【００６５】
よって、ネットワークインフラストラクチャは、クライアント／サーバ、ピアツーピア、またはハイブリッドアーキテクチャなどのネットワークトポロジのホストを利用可能にする。「クライアント」は、クラスまたはグループのメンバーであり、関係していない別のクラスまたはグループのサービスを使用する。よって、コンピュータにおいて、クライアントはプロセス、即ち、大まかに言うと、別のプログラムにより提供されるサービスを要求する一組の命令またはタスクである。クライアントプロセスは、他のプログラムまたはサービス自体についてのいかなる機能詳細も「知る」必要なしに要求されたサービスを利用する。特にネットワーク化されたシステムであるクライアント／サーバアーキテクチャにおいて、クライアントは、通常、例えばサーバなどの別のコンピュータにより提供される共有ネットワーク資源にアクセスするコンピュータである。例として図９の図において、コンピュータ９２０ａ、９２０ｂ、９２０ｃ、９２０ｄ、９２０ｅ等をクライアントと考えることができ、コンピュータ９１０ａ、９１０ｂ等をサーバと考えることができる。いずれのコンピュータも環境に依存するクライアント、サーバ、または両方とみなされてもよいが、サーバ９１０ａ、９１０ｂ等は、クライアントコンピュータ９２０ａ、９２０ｂ、９２０ｃ、９２０ｄ、９２０ｅ等に同期化するかまたはレプリケーションされるデータを維持する。これらのコンピュータデバイスのいずれでも、データを処理するかまたは本発明による同期フレームワークを関係させることができるサービスまたはタスクを要求することができる。
【００６６】
サーバは、通常、インターネットまたは無線ネットワークインフラストラクチャなどのリモートネットワークまたはローカルネットワークを介してアクセスできるリモートのコンピュータシステムである。クライアントプロセスは、第１のコンピュータシステムでアクティブであってもよい。サーバプロセスは、通信媒体を介して互いに通信して、分散された機能性を提供しかつ複数のクライアントがサーバの情報収集能力を利用することができるようにする第２のコンピュータシステムでアクティブであってもよい。本発明のデータグループを同期化する技術により利用されるいかなるソフトウェアオブジェクトも、複数のコンピュータデバイスまたはオブジェクトにわたって分散されてもよい。
【００６７】
クライアント（または複数のクライアント）及びサーバ（または複数のサーバ）は、プロトコル層（または複数のプロトコル層）により提供される機能を利用して互いに通信する。例えば、ハイパーテキスト転送プロトコル（ＨＴＴＰ）は、ワールドワイドウェブ（ＷＷＷ）、即ち「ウェブ」とともに使用される共通のプロトコルである。通常、インターネットプロトコル（ＩＰ）アドレスまたはユニバーサルリソースロケータ（ＵＲＬ）などの他のリファレンスが使用されて、サーバコンピュータまたはクライアントコンピュータを互いに識別する。ネットワークアドレスは、ＵＲＬアドレスと称されてもよい。通信は、通信媒体を介して提供されてもよい。例えば、クライアント（または複数のクライアント）及びサーバ（または複数のサーバ）は大容量通信のためにＴＣＰ／ＩＰ接続（または複数のＴＣＰ／ＩＰ接続）を介して互いに接続されてもよい。
【００６８】
よって、図９は、本発明を使用することができて、ネットワーク／バスを介してクライアントコンピュータ（または複数のクライアントコンピュータ）と通信するサーバ（または複数のサーバ）を有する例示的なネットワーク化された環境または分散環境を示す。更に詳細には、多くのサーバ９１０ａ、９１０ｂ等は、通信ネットワーク／バス９４０を介して相互接続する。通信ネットワーク／バス９４０は、ポータブルコンピュータ、ハンドヘルドコンピュータ、シンクライアント、ネットワーク化された電化製品、または本発明によるＶＣＲ、ＴＶ、オーブン、明かり、ヒーターなどの他のデバイスのような多くのクライアントコンピュータデバイスまたはリモートなコンピュータデバイス９２０ａ、９２０ｂ、９２０ｃ、９２０ｄ、９２Oｅ等を有するＬＡＮ、ＷＡＮ、イントラネット、ＧＳＭネットワーク、インターネット等であってもよい。よって、本発明は、データを同期化することが所望される接続においていかなるコンピュータデバイスにも適用することができると考えられる。
【００６９】
通信ネットワーク／バス９４０がインターネットであるネットワーク環境において、例えばサーバ９１０ａ、９１０ｂ等は、ウェブサーバであって、クライアント９２０ａ、９２０ｂ、９２０ｃ、９２０ｄ、９２０ｅ等は、ＨＴＴＰなどの多くの公知のプロトコルのうちのいずれかを介して通信する。サーバ９１０ａ、９１０ｂ等はまた、分散コンピュータ環境の特徴を示すことができるような、クライアント９２０ａ、９２０ｂ、９２０ｃ、９２０ｄ、９２０ｅ等として働くことができる。
【００７０】
前述のように、通信は、有線もしくは無線、または適当な組合せであってもよい。クライアントデバイス９２０ａ、９２０ｂ、９２０ｃ、９２０ｄ、９２０ｅ等は、通信ネットワーク／バス１４を介して通信してもよいし通信しなくてもよい。更に、それに付随する独自の通信を有していてもよい。例えば、ＴＶまたはＶＣＲの場合、その制御に対するネットワーク化された態様があってもよいしまたはなくてもよい。各クライアントコンピュータ９２０ａ、９２０ｂ、９２０ｃ、９２０ｄ、９２０ｅ等及びサーバコンピュータ９１０ａ、９１０ｂ等は、様々なアプリケーションプログラムモジュールまたはオブジェクト１３５ａ、１３５ｂ、１３５ｃ等を備えていて、かつファイルまたはデータストリームを保存することができるか、または、ファイルまたはデータストリームの一部分（または複数部分）をダウンロード、送信、または移動することができる様々なタイプのストレージ要素またはオブジェクトに接続またはアクセスができてもよい。コンピュータ９１０ａ、９１０ｂ、９２０ａ、９２０ｂ、９２０ｃ、９２０ｄ、９２０ｅ等のうちのいずれか１つまたは複数は、本発明により処理されるかまたはセーブされるデータを保存するデータベースまたはメモリ９３０などの、データベース９３０または他のストレージ要素の維持またはアップデートに関与する。よって、本発明を、クライアントコンピュータ９２０ａ、９２０ｂ、９２０ｃ、９２０ｄ、９２０ｅ等を有するコンピュータネットワーク環境において利用することができる。クライアントコンピュータ９２０ａ、９２０ｂ、９２０ｃ、９２０ｄ、９２０ｅ等は、コンピュータネットワーク／バス９４０及びサーバコンピュータ９１０ａ、９１０ｂ等にアクセスしかつインタラクションを実行することができる。コンピュータネットワーク／バス９４０及びサーバコンピュータ９１０ａ、９１０ｂ等は、クライアントコンピュータ９２０ａ、９２０ｂ、９２０ｃ、９２０ｄ、９２０ｅ等及び他の同様のデバイス、並びにデータベース９３０とインタラクションを実行することができる。
【００７１】
例示的なコンピュータデバイス
前述のように、本発明は、データを同期化することを所望することができるどんなデバイスにもあてはまる。従って、ハンドヘルドデバイス、ポータブルデバイス、及び他のコンピュータデバイス並びに全ての種類のコンピュータオブジェクトが本発明に関連して使用が考慮される、即ち、デバイスがデータを同期させるかまたはそうでなければデータを受信するか、処理するか、または保存することができるどこででも本発明に関連して使用が考慮される、ということが理解されなければならない。従って、図１０において以下に説明される以下の汎用リモートコンピュータは、ほんの１つの例であって、本発明はネットワーク／バスの相互運用性及びインタラクションを有するいかなるクライアントで実施されてもよい。よって、本発明はネットワーク化されたホスト型サービス環境において実施されてもよい。ネットワーク化されたホスト型サービス環境において、ごくわずかまたは最低限のクライアント資源が例えばネットワーク化された環境に関係している。ネットワーク化された環境において、例えばクライアントデバイスは、電気製品にあるオブジェクトなどの、ネットワーク／バスへの単なるインタフェースとして働く。
【００７２】
必須ではないが、本発明は、部分的に、デバイスまたはオブジェクト用のサービスの開発者が使用するためにオペレーティングシステムを介して実施されてもよく、かつ／または本発明のコンポーネント（または複数のコンポーネント）に関連して動作するアプリケーションソフトウェア内に含まれていてもよい。ソフトウェアは、クライアントワークステーション、サーバまたは他のデバイスなどの１つ又は複数のコンピュータにより実行されるプログラムモジュールなどのコンピュータ実行可能命令との一般的な関連において記載されてもよい。当業者は、本発明が他のコンピュータシステムコンフィギュレーション及びプロトコルで実施されてもよいということを認めることができる。
【００７３】
よって、図１０は、本発明を実施することができる適当なコンピュータシステム環境１０００ａの例を示す。但し、上記で明らかにしたように、コンピュータシステム環境１０００ａはメディアデバイスについての適当なコンピュータ環境の１つの例にすぎず、本発明の使用の範囲または機能に関してはいかなる限定を示唆することも意図していない。コンピュータ環境１０００ａは、例示的な動作環境１０００ａにおいて示されるコンポーネントのうちのいずれか１つまたは組合せに関しているいかなる依存性または要件を有するものと解釈されてはならない。
【００７４】
図１０を参照すると、本発明を実施するための例示的なリモートデバイスは、コンピュータ１０１０ａの形で汎用コンピュータデバイスを含む。コンピュータ１０１０ａのコンポーネントには、処理装置１０２０ａ、システムメモリ１０３０ａ、及びシステムメモリを含む様々なシステムコンポーネントを処理装置１０２０ａに接続するシステムバス１０２１ａを含むが、これらに限定されるものではない。システムバス１０２１ａは、メモリバスまたはメモリコントローラ、周辺バス、及び様々なバスアーキテクチャのいずれかを使用するローカルバスを含むいくつかのタイプのバス構造のうちのいずれであってもよい。
【００７５】
コンピュータ１０１０ａは、通常、様々なコンピュータ可読媒体を含む。コンピュータ可読媒体は、コンピュータ１０１０ａでアクセスされ得るいかなる利用可能な媒体であってもよい。一例であってこの例に限らないが、コンピュータ可読媒体は、コンピュータストレージ媒体及び通信媒体を含んでもよい。コンピュータストレージ媒体は、例えばコンピュータ可読命令、データ構造、プログラムモジュール、または他のデータなどの情報の保存のためのいかなる方法または技術においても実施される揮発性及び不揮発性、着脱自在及び固定式の媒体を含む。コンピュータストレージ媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリもしくは他のメモリ技術、ＣＤＲＯＭ、デジタル多用途ディスク（ＤＶＤ）もしくは他の光ディスクストレージ、磁気カセット、磁気テープ、磁気ディスクストレージもしくは他の磁気ストレージデバイス、または所望の情報を保存することができてかつコンピュータ１０１０ａによりアクセスされ得る他のいかなる媒体をも含むが、これらに限定されるものではない。通信媒体は、通常、搬送波または他のトランスポートメカニズムなどの変調されたデータ信号内のコンピュータ可読命令、データ構造、プログラムモジュール、または他のデータを具体化し、いかなる情報配信媒体をも含む。
【００７６】
システムメモリ１０３０ａは、例えば読み出し専用メモリ（ＲＯＭ）及び／またはランダムアクセスメモリ（ＲＡＭ）などの揮発性及び／または不揮発性メモリの形でコンピュータストレージ媒体を含むことができる。スタートアップの間に例えばコンピュータ１０１０ａ内の要素同士の間で情報を転送するのを助ける基本ルーチンを含む基本入出力システム（ＢＩＯＳ）を、メモリ１０３０ａに保存することができる。メモリ１０３０ａはまた通常、処理装置１０２０ａにより直ちにアクセスできかつ／またはそのとき動作しているデータ及び／またはプログラムモジュールを含む。例であって限定ではないが、メモリ１０３０ａはまた、オペレーティングシステム、アプリケーションプログラム、他のプログラムモジュール、及びプログラムデータを含むことができる。
【００７７】
コンピュータ１０１０ａはまた、他の着脱自在／固定式、揮発性／不揮発性コンピュータ記憶媒体を含むことができる。例えば、コンピュータ１０１０ａは、固定式で不揮発性の磁気媒体から読み出しまたはそこに書き込むハードディスクドライブ、着脱自在で不揮発性磁気ディスクから読み出しまたはそこに書き込む磁気ディスクドライブ、及び／または、ＣＤ−ＲＯＭもしくは他の光学式媒体などの着脱自在で不揮発性の光ディスクから読み出しまたはそこに書き込む光ディスクドライブを含む。例示的な動作環境において使用され得る他の着脱自在／固定式、揮発性／不揮発性コンピュータストレージ媒体には、磁気テープカセット、フラッシュメモリカード、デジタル多用途ディスク、デジタルビデオテープ、半導体ＲＡＭ、半導体ＲＯＭなどを含むが、これらに限定されるものではない。ハードディスクドライブは通常、インタフェースなどの固定式のメモリインタフェースを介してシステムバス１０２１ａに接続される。磁気ディスクドライブまたは光ディスクドライブは通常、インタフェースなどの着脱自在のメモリインタフェースによりシステムバス１０２１ａに接続されている。
【００７８】
ユーザは、マウス、トラックボール、またはタッチパッドと一般に称されているキーボード及びポインティングデバイスなどの入力デバイスを介して、コンピュータ１０１０ａにコマンド及び情報を入力することができる。他の入力デバイスには、マイクロホン、ジョイスティック、ゲームパッド、衛星アンテナ、スキャナなどを含むことができる。これらの入力デバイス及び他の入力デバイスは、ユーザ入力１０４０ａを介して処理装置１０２０ａに接続されていてかつシステムバス１０２１ａに接続されているインタフェース（または複数のインタフェース）に付随することが多いが、パラレルポート、ゲームポートまたは汎用シリアルバス（ＵＳＢ）などの他のインタフェース及びバス構造により接続されてもよい。グラフィックスサブシステムも、システムバス１０２１ａに接続されていてもよい。モニタまたは他のタイプのディスプレイデバイスも、例えば、ビデオメモリと順に通信することができる出力インタフェース１０５０ａなどのインタフェースを介してシステムバス１０２１ａに接続される。モニタに加えて、コンピュータはまた、スピーカ及びプリンタなどの他の周辺出力装置を含むことができる。他の周辺出力装置は出力インタフェース１０５０ａにより接続されてもよい。
【００７９】
コンピュータ１０１０ａは、デバイス１０１０ａと異なった媒体機能をさらに有することができるリモートコンピュータ１０７０ａなどの１つまたは複数の他のリモートコンピュータへの論理的接続を使用して、ネットワーク化された環境または分散環境において動作することができる。リモートコンピュータ１０７０ａは、パーソナルコンピュータ、サーバ、ルータ、ネットワークＰＣ、ピアデバイスもしくは他の一般のネットワークノード、または他のいかなるリモート媒体コンサンプションデバイスまたは送信デバイスでもあってもよい。更に、コンピュータ１０１０ａに関連して上記に述べた要素のうちのいずれかまたは全てを含むことができる。図１０において示された論理結合は、かかるローカルエリアネットワーク（ＬＡＮ）またはワイドエリアネットワーク（ＷＡＮ）などのネットワーク１０７１ａを含むが、他のネットワーク／バスを含んでもよい。かかるネットワーク環境は、家庭、オフィス、企業規模のコンピュータネットワーク、イントラネット、及びインターネットにおいて当たり前のことである。
【００８０】
ＬＡＮネットワーク環境において使用されると、コンピュータ１０１０ａはネットワークインタフェースまたはアダプタを介してＬＡＮ１０７１ａに接続される。ＷＡＮネットワーク環境において使用されると、コンピュータ１０１０ａは通常、モデムなどの通信コンポーネント、またはインターネットなどのＷＡＮを介した通信を確立するための他の手段を含む。内臓または外付けであってもよい、モデムなどの通信コンポーネントは、入力部１０４０ａのユーザ入力インタフェース、または他の適当なメカニズムを介してシステムバス１０２１ａに接続されてもよい。ネットワーク化された環境において、コンピュータ１０１０ａまたはその一部に関連して示されたプログラムモジュールは、リモートのメモリストレージデバイスに保存されてもよい。図示されかつ説明されたネットワーク接続は例示的であって、コンピュータ同士の間の通信を確立する他の手段が使用されてもよいということが理解される。
【００８１】
例示的な分散コンピュータアーキテクチャ
様々な分散コンピュータフレームワークが、パーソナルコンピュータ及びインターネットの収束を考慮して開発されてきており、かつ現在も開発されている。個人ユーザ及びビジネスユーザは、同様にアプリケーション及びコンピュータデバイスについてのスムーズで相互利用可能でありかつウェブが使用可能のインタフェースが与えられており、コンピュータアクティビティをますますウェブブラウザ志向またはネットワーク志向にする。
【００８２】
例えば、ＭＩＣＲＯＳＯＦＴ（登録商標）のマネージドコードプラットフォーム、即ち、．ＮＥＴは、サーバ、ウェブベースのデータストレージなどのビルディングブロックサービス、及びダウンロード可能なデバイスソフトウェアを含む。一般的に言えば、．ＮＥＴプラットフォームは、以下を提供する。即ち、（１）コンピュータデバイスの全範囲を協働させて、それらの全てで自動的にアップデートされて同期化されるユーザ情報を有する能力、（２）ＨＴＭＬよりむしろＸＭＬをより多く活用して利用可能にされたウェブページについての向上されたインタラクティブ能力、（３）カスタマイズされたアクセス及び電子メールまたは例えばオフィス．ＮＥＴなどのソフトウェアなどの様々なアプリケーションについての管理のための中心出発点からユーザへの製品及びサービスの配信を特徴とするオンラインサービス、（４）ユーザとデバイスとの間の情報の同期だけでなく、情報への効率的で簡単なアクセスを増す集中データストレージ、（５）電子メール、ファックス、及び電話などの様々な通信媒体を統合する能力、（６）開発者のための、再利用可能なモジュールを生成して、生産性を向上し、プログラムエラーの数を減らす能力、（７）更に、多くの他のクロスプラットフォーム及び言語統合特徴、である。
【００８３】
本明細書のいくつかの例示的な実施形態が、コンピュータに常駐しているアプリケーションプログラミングインタフェース（ＡＰＩ）などのソフトウェアに関連して説明されるが、本発明の１つまたは複数の部分はまた、オペレーティングシステムまたは「仲介者」オブジェクト、制御オブジェクト、ハードウェア、ファームウェア、中間言語命令もしくはオブジェクト等を介して実施されてもよく、本発明のプロトコルによる通信方法は、．ＮＥＴコードなどのマネージドコードにより利用可能にされた言語及びサービスの全てを介して、または他の分散コンピュータフレームワークにおいて、含まれ、サポートされ、またはアクセスされてもよい。
【００８４】
本発明を実施する複数の方法がある。例えば、適当なＡＰＩ、ツールキット、ドライバコード、オペレーティングシステム、制御、スタンドアロンまたはダウンロード可能なソフトウェアオブジェクト等であり、それらは、アプリケーション及びサービスが本発明のデータを同期化させるシステム及び方法を使用することができるようにする。本発明は、ＡＰＩ（または他のソフトウェアオブジェクト）の見地からも、本発明のプロトコルを実施するソフトウェアオブジェクトまたはハードウェアオブジェクトからも、本発明の使用法を考慮する。よって、本明細書において説明されている本発明の様々な手段は、ソフトウェアだけでなく、ハードウェアの全体として、ハードウェアの一部として、かつソフトウェアの一部としての態様を有することができる。
【００８５】
文言「例示的な」は、本明細書において、例、事例、または図の役割をすることを意味するよう使用される。誤解を避けるために、本明細書において開示された発明は、かかる例により限定されない。更に、本明細書において「例示的」と説明されたいかなる態様または設計も、他の態様または設計に優先的であるかまたは有利であると必ずしも解釈される必要はないし、また、当業者に公知の同等の例示的な構造及び技術を排除することを意味しない。更に、用語「含む」、「有する」、「備える」、及び同様の文言は、詳細な説明または特許請求の範囲のいずれかに使用される範囲で、かかる用語は、誤解を避けるために、いかなる追加の要素または他の要素をも排除することなしにオープンな転換語として、用語「含む」に類似した方法で包括的であるよう意図されている。
【００８６】
上記のように、本発明の例示的な実施形態が様々なコンピュータデバイス及びネットワークアーキテクチャに関連して説明されてきたが、基本的概念はデータを同期させることが望ましいいかなるコンピュータデバイスまたはシステムに適用されてもよい。例示的なプログラミング言語、名前、及び例が、本明細書において様々な選択の代表として選択されているが、これらの言語、名前、及び例は、限定であるよう意図されていない。当業者は、オブジェクトコードを提供する多数の方法及び本発明の様々な実施形態により実現された同じか、類似するか、または同等の機能を実現する用語があるということを当業者は理解することができる。
【００８７】
前述のように、本明細書において説明された様々な技術は、ハードウェアもしくはソフトウェア、または必要に応じて、両方の組合せに関連して実施されてもよい。本明細書で使用されているように、用語「コンポーネント」、「システム」などは、同様に、ハードウェア、ハードウェアとソフトウェアとの組合せ、ソフトウェア、または実行中のソフトウェアのいずれかの、コンピュータ関連のエンティティをいうことが意図される。例えば、コンポーネントは、プロセッサで実行中のプロセス、プロセッサ、オブジェクト、実行ファイル、実行スレッド、プログラム、及び／またはコンピュータであってもよいが、これらに限定されない。実例として、コンピュータで実行中のアプリケーション及びコンピュータの両方が、コンポーネントであってもよい。１つまたは複数のコンポーネントは、プロセス及び／または実行スレッド内に常駐し、コンポーネントは１つのコンピュータでローカライズされてもよくかつ／または２つ以上のコンピュータ同士の間で分散されてもよい。
【００８８】
よって、本発明の方法及び装置、またはその特定の態様もしくは一部は、例えばフロッピーディスク、ＣＤ−ＲＯＭ、ハードディスクまたは他の任意のマシン可読ストレージ媒体などの具体的な媒体に具体化されたプログラムコード（即ち、命令）の形をとることができる。そこにおいて、プログラムコードが、コンピュータなどのマシンによりロードされて実行されると、マシンは本発明を実行するマシンになる。プログラム可能なコンピュータでのプログラムコード実行の場合、コンピュータデバイスは一般にプロセッサ、プロセッサにより読み出し可能なストレージ媒体（揮発性及び不揮発性メモリ及び／またはストレージ要素を含む）、少なくとも１つの入力デバイス、及び少なくとも１つの出力デバイスを含む。例えば、データ処理ＡＰＩ、再使用可能な制御等の使用を介して、本発明のプロトコルを実施するかまたは利用することができる１つまたは複数のプログラムは、コンピュータシステムと通信するための高水準手続き型言語またはオブジェクト指向のプログラミング言語で実施されることが望ましい。しかしながら、プログラム（または複数のプログラム）は、必要に応じて、アセンブリ言語またはマシン言語で実行されてもよい。いずれにせよ、言語はコンパイラ型言語かインタープリタ型言語であって、ハードウェア実装と結合されてもよい。
【００８９】
本発明の方法及び装置はまた、例えば電気配線またはケーブルを介して、光ファイバを介して、または任意の他の形の送信を介してなど、いくつかの送信媒体を介して送信されるプログラムコードの形で具体化される通信を介して実行されてもよい。そこにおいて、プログラムコードが、ＥＰＲＯＭ、ゲートアレイ、プログラム可能論理回路（ＰＬＤ）、クライアントコンピュータ等のマシンにより受信されて、ロードされて、実行されると、マシンは本発明を実行する装置になる。汎用プロセッサで実施されると、プログラムコードは、プロセッサと結合して、本発明の機能を呼び出す働きをする一意の装置を提供する。更に、本発明に関連して使用されるいかなるストレージ技術も、常にハードウェアとソフトウェアとの組合せであってもよい。
【００９０】
更に、開示された本発明は、ソフトウェア、ファームウェア、ハードウェア、またはそれらの任意の組み合わせを生成して、本明細書において詳述される態様を実施するコンピュータまたはプロセッサベースのデバイスを制御する標準のプログラミング技術及び／または工学技術を使用して、システム、方法、装置または製造物として実施されてもよい。本明細書において使用される用語「製品」（また、あるいは、「コンピュータプログラム製品」）は、いかなるコンピュータ可読デバイス、キャリア、または媒体からもアクセスできるコンピュータプログラムを含むよう意図されている。例えば、コンピュータ可読媒体は、磁気ストレージデバイス（例えば、ハードディスク、フロッピーディスク、磁気ストライプ・・・）、光ディスク（例えば、コンパクトディスク（ＣＤ）、デジタル多用途ディスク（ＤＶＤ）・・・）、スマートカード、及びフラッシュメモリデバイス（例えば、カード、スティック）を含むことができるが、これらに限定されるものではない。更に、搬送波は、電子メールの送受信する際に、またはインターネットもしくはローカルエリアネットワーク（ＬＡＮ）などのネットワークにアクセスする際に使用されるコンピュータ可読電子データなどのコンピュータ可読電子データを運ぶために使用され得るということは公知である。
【００９１】
上述のシステムは、いくつかのコンポーネント同士の間のインタラクションに関して説明されてきた。かかるシステム及びコンポーネントは、それらのコンポーネントもしくは指定されたサブコンポーネント、指定されたコンポーネントまたはサブコンポーネントのうちのいくつか、及び／または追加のコンポーネント、並びに前述のもののうちの様々な順列及び組合せによるものを含むことができると理解することができる。サブコンポーネントは、また、（階層的な）親コンポーネントの範囲内に含まれるというよりはむしろ他のコンポーネントに通信可能に接続されたコンポーネントとして実施されてもよい。更に、１つまたは複数のコンポーネントは、統合された機能を提供する単一のコンポーネントに結合されてもよいし、またはいくつかの別個のサブコンポーネントに分割されてもよい点に注意しなければならない。そして、例えば管理層などの任意の１つまたは複数の中間層は、統合された機能を提供するためにかかるサブコンポーネントに通信可能に接続するよう提供されてもよい。本明細書において説明されているいかなるコンポーネントも、当業者に周知であるが本明細書において具体的に説明されていない、１つまたは複数の他のコンポーネントとインタラクションを実行することができる。
【００９２】
上記に説明された例示的なシステムを考慮して、開示された本発明により実施することができる方法を、図３Ａ、図３Ｂ、図３Ｃ、図３Ｄ、図７Ａ、及び図７Ｂのフローチャートを参照してよりよく理解することができる。説明の単純化のために、方法が一連のブロックとして示されかつ説明されているが、いくつかのブロックは本明細書に図示されかつ記載されていることと異なった順序及び／または他のブロックと同時に起こってもよいので、本発明は、ブロックの順序により限定されないということが理解されかつ認められなければならない。シーケンシャルでないまたは分岐されるフローがフローチャートを介して説明される場合には、同じ結果かまたは同様の結果を実現する様々な他の分岐、フローパス、及びブロックの順序が実施されてもよい。更に、全ての図示されたブロックは、以下に説明される方法を実施するのに必要とされないかもしれない。
【００９３】
更に、上記に開示されたシステム及び下記の方法の様々な部分からわかるように、コンポーネント、サブコンポーネント、プロセス、手段、方法、またはメカニズム（例えば、サポートベクターマシン、ニューラルネットワーク、エキスパートシステム、ベイジアン信念ネットワーク、ファジー論理、データフュージョンエンジン、分類子・・・）に基く人工知能または知識もしくはルールを含んでもよいしまたはそれらから成っていてもよい。とりわけ、かかるコンポーネントは、それにより実行される特定のメカニズムまたはプロセスを自動化して、システム及び方法の一部を効率的で知的なだけでなくよりアダプティブにすることができる。
【００９４】
本発明が様々な図の好適実施形態に関連して説明されてきたが、他の同様の実施形態が使用されてもよく、または、本発明から逸脱することなく本発明の同じ機能を実行するために、説明された実施形態に変更及び追加がなされてもよいということが理解されなければならない。例えば、本発明の例示的なネットワーク環境は、ピアツーピアのネットワーク化された環境などのネットワーク化された環境との関連で説明されるが、本発明がそれに限定されず、本出願において説明したように、方法を、ゲーム機、ハンドヘルドコンピュータ、ポータブルコンピュータ等のいかなるコンピュータデバイスまたは環境に適用することができ、有線または無線であろうとなかろうと通信ネットワークを介して接続されるかまたはネットワークにわたってインタラクションを実行することができるいかなる数のかかるコンピュータデバイスに適用してもよい、ということを当業者は認めることができる。また、特に無線ネットワーク化されたデバイスの数が急増し続けているので、ハンドヘルドデバイスオペレーティングシステム及び他のアプリケーション限定オペレーティングシステムを含む様々なコンピュータプラットフォームが考慮されているということが強調されなければならない。
【００９５】
例示的な実施形態は、特定のプログラミング言語構築物との関連において本発明を利用することをいうが、本発明はそれほど限定されておらず、むしろ本発明の同期通信プロトコル及び方法を提供するいかなる言語で実施されてもよい。また、更に、本発明を複数の処理チップまたはデバイスにおいてまたは複数の処理チップまたはデバイスにわたって実施してもよく、ストレージは複数のデバイスにわたって同様に実現することができる。従って、本発明は、いかなる単一の実施形態にも限定されるべきではなく、むしろ添付の請求の範囲による広さ及び範囲において解釈されなければならない。
【図１Ａ】
2010518490.tif 000003
【図１Ｂ】
2010518490.tif 000004
【図２Ａ】
2010518490.tif 000005
【図２Ｂ】
2010518490.tif 000006
【図２Ｃ】
2010518490.tif 000007
【図２Ｄ】
2010518490.tif 000008
【図３Ａ】
2010518490.tif 000009
【図３Ｂ】
2010518490.tif 000010
【図３Ｃ】
2010518490.tif 000011
【図３Ｄ】
2010518490.tif 000012
【図４】
2010518490.tif 000013
【図５】
2010518490.tif 000014
【図６】
2010518490.tif 000015
【図７Ａ】
2010518490.tif 000016
【図７Ｂ】
2010518490.tif 000017
【図８】
2010518490.tif 000018
【図９】
2010518490.tif 000019
【図１０】
2010518490.tif 000020
【国際調査報告】
2010518490.tif 000021
2010518490.tif 000022