(57)【要約】【課題】共有オブジェクトに対する複数ユーザ変更を同期させるための方法およびシステムを提供する。【解決手段】多くの異なるユーザが、いくつかの異なるトランスポートを介して、同一の共有オブジェクトに同時にアクセスし、変更を行い、更新を行うことができる。共有オブジェクトに対する変更は、すべてのユーザが、共有オブジェクトに対する変更を見ることができるように、自動的に同期される。競合する変更は、調停されて、共有オブジェクトの最新バージョンにマージされる。クライアントは、共有オブジェクトの最新バージョンがストアから入手可能でない場合、ストアから共有オブジェクトの最新バージョンを要求することができる。共有オブジェクトの最新バージョンは、ストアが、共有オブジェクトの最新バージョンを受け取った時点で、クライアントと同期させられる。【選択図】図７
2006195972.tif 000002
【特許請求の範囲】
【請求項１】
共有オブジェクトに対する複数ユーザ変更を同期させるためのコンピュータによって実施される方法であって、
前記共有オブジェクトに対する変更を受け取るステップと、
前記変更が、前記共有オブジェクトのマスタページ上の同期された変更と競合するかどうかを判定するステップと、
前記変更が、前記共有オブジェクトの最新バージョンに関連すると判定され、前記変更が、同期された変更と競合しないと判定された場合、前記変更を前記共有オブジェクトと同期させるステップと
を備えることを特徴とする方法。
【請求項２】
前記変更が、同期された変更と競合すると判定された場合、前記変更を前記マスタページに関連する競合ページ上で表示するステップと、
前記マスタページが前記競合ページに関連することを示す競合インジケータを前記マスタページ上で表示するステップと、
前記変更を前記共有オブジェクトにマージするステップと
をさらに備えることを特徴とする請求項１に記載のコンピュータによって実施される方法。
【請求項３】
前記変更を表示するステップは、
前記同期された変更が前記マスタページ上で表示される位置に対応する位置で、前記競合ページ上に前記変更を表示するステップと、
前記競合ページ上で前記変更をハイライトするステップと
をさらに備えることを特徴とする請求項２に記載のコンピュータによって実施される方法。
【請求項４】
前記競合インジケータが選択された場合、前記競合ページ、および前記関連するマスタページを表示するステップ
をさらに備えることを特徴とする請求項２に記載のコンピュータによって実施される方法。
【請求項５】
前記変更が重要ではないかどうかを判定するステップと、
重要ではないと判定された前記変更をパージするステップと
をさらに備えることを特徴とする請求項１に記載のコンピュータによって実施される方法。
【請求項６】
ストアにおいて前記共有オブジェクトの最新バージョンを求めるクライアント要求を受け取るステップと、
前記ストアにおいて前記共有オブジェクトの前記最新バージョンを受け取るステップと、
前記共有オブジェクトの前記最新バージョンを前記クライアントと同期させるステップと
をさらに備えることを特徴とする請求項１に記載のコンピュータによって実施される方法。
【請求項７】
クライアント要求を受け取るステップは、前記ストアに要求タグおよびクライアント情報を割り当てるステップをさらに含むことを特徴とする請求項６に記載のコンピュータによって実施される方法。
【請求項８】
前記共有オブジェクトの前記最新バージョンを受け取るステップは、別のクライアントが、前記共有オブジェクトの前記最新バージョンで前記ストアにアクセスした場合に、前記共有オブジェクトの前記最新バージョンを受け取るステップをさらに含むことを特徴とする請求項６に記載のコンピュータによって実施される方法。
【請求項９】
共有オブジェクトに対する複数ユーザ変更を同期させるためのコンピュータ実行可能命令を有するコンピュータ読み取り可能な記録媒体であって、
前記共有オブジェクトに対する変更を受け取るステップと、
前記変更が、前記共有オブジェクトのマスタページ上の同期された変更と競合するかどうかを判定するステップと、
前記変更が、前記共有オブジェクトの最新バージョンに関連すると判定され、前記変更が、同期されたバージョンと競合しないと判定された場合、前記変更を前記共有オブジェクトと同期させるステップと
を備えることを特徴とする媒体。
【請求項１０】
前記変更が、同期された変更と競合すると判定された場合、前記変更を前記マスタページに関連する競合ページ上で表示するステップと、
前記マスタページが前記競合ページに関連することを示す競合インジケータを前記マスタページ上で表示するステップと、
前記変更を前記共有オブジェクトにマージするステップと
をさらに備えることを特徴とする請求項９に記載のコンピュータ読み取り可能な記録媒体。
【請求項１１】
前記変更を表示するステップは、
前記同期された変更が前記マスタページ上で表示される位置に対応する位置で、前記競合ページ上に前記変更を表示するステップと、
前記競合ページ上で前記変更をハイライトするステップと
をさらに備えることを特徴とする請求項１０に記載のコンピュータ読み取り可能な記録媒体。
【請求項１２】
前記競合インジケータが選択された場合、前記競合ページ、および前記関連するマスタページを表示するステップ
をさらに備えることを特徴とする請求項１０に記載のコンピュータ読み取り可能な記録媒体。
【請求項１３】
前記変更が重要ではないかどうかを判定するステップと、
重要ではないと判定された前記変更をパージするステップと
をさらに備えることを特徴とする請求項９に記載のコンピュータ読み取り可能な記録媒体。
【請求項１４】
前記変更が、前記共有オブジェクトの最新バージョンに関連するかどうかを判定するステップをさらに備えることを特徴とする請求項９に記載のコンピュータ読み取り可能な記録媒体。
【請求項１５】
ストアにおいて前記共有オブジェクトの最新バージョンを求めるクライアント要求を受け取るステップと、
前記ストアにおいて前記共有オブジェクトの前記最新バージョンを受け取るステップと、
前記共有オブジェクトの前記最新バージョンを前記クライアントと同期させるステップと
をさらに備えることを特徴とする請求項１４に記載のコンピュータ読み取り可能な記録媒体。
【請求項１６】
共有オブジェクトに対する複数ユーザ変更を同期させるためのシステムであって、
前記共有オブジェクトに対する変更を受け取るための手段と、
前記変更が、前記共有オブジェクトのマスタページ上の同期された変更と競合するかどうかを判定するための手段と、
前記変更が、前記共有オブジェクトの最新バージョンに関連すると判定され、前記変更が、同期されたバージョンと競合しないと判定された場合、前記変更を前記共有オブジェクトと同期させるための手段と
を備えたことを特徴とするシステム。
【請求項１７】
ストアにおいて前記共有オブジェクトの最新バージョンを求めるクライアント要求を受け取るための手段と、
前記ストアにおいて前記共有オブジェクトの前記最新バージョンを受け取るための手段と、
前記共有オブジェクトの前記最新バージョンを前記クライアントと同期させるための手段と
をさらに備えたことを特徴とする請求項１６に記載のシステム。
【請求項１８】
クライアント要求を受け取るための手段は、前記ストアに要求タグおよびクライアント情報を割り当てるための手段をさらに含むことを特徴とする請求項１７に記載のシステム。
【請求項１９】
前記共有オブジェクトの前記最新バージョンを受け取るための手段は、別のクライアントが、前記共有オブジェクトの前記最新バージョンで前記ストアにアクセスした場合に、前記共有オブジェクトの前記最新バージョンを受け取るための手段をさらに含むことを特徴とする請求項１７に記載のシステム。
【請求項２０】
前記変更が、前記共有オブジェクトの最新バージョンに関連するかどうかを判定するための手段をさらに備えたことを特徴とする請求項１６に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、共有オブジェクトに対する複数ユーザ変更を同期させるための方法およびシステムに関する。
【背景技術】
【０００２】
ファイル共有アプリケーションは、数名の異なるユーザが、情報を集団で共有することを可能にする。多くのユーザが、同一のファイルに同時にアクセスすることができる。ユーザの全員が、そのファイルを見ることができるが、ファイルに最初にアクセスしたユーザだけが、編集特権を有する。ファイルにその後にアクセスするユーザらは、ファイルを編集することを阻止される。１名のユーザを除く全員にファイルの読み取り専用バージョンを供給することは、大きい共有ファイルに関して不都合である。これは、ユーザらが、オフラインで共有ファイルを処理することを所望する場合、特に悪化する。例えば、他のユーザらは、共有ファイルに最初にアクセスしたユーザが常に出張中である場合、長期間にわたってそのファイルから締め出される可能性がある。
【発明の開示】
【発明が解決しようとする課題】
【０００３】
従来のシステムには上述したような種々の問題があり、さらなる改善が望まれている。
【０００４】
本発明は、このような状況に鑑みてなされたもので、その目的とするところは、共有オブジェクトに対する複数ユーザ変更を同期させるための方法およびシステムを提供することにある。
【課題を解決するための手段】
【０００５】
本発明は、共有オブジェクトに対する複数ユーザ変更を同期させるための方法およびシステムを対象とする。オブジェクトは、ファイルとして、共有されることが可能な任意のエンティティであることが可能である。多くの異なるユーザが、いくつかの異なるトランスポートを介して、同一の共有オブジェクトに同時にアクセスし、変更を行い、更新を行うことができる。ユーザらは、別のユーザが、共有オブジェクトにアクセスを有する場合に、その共有オブジェクトにアクセスし、変更を行うことを阻止されない。あらゆる許可されたユーザが、共有オブジェクトを同時に変更することができる。ユーザらは、変更を行っている間、共有オブジェクトに接続されていることを要求されない。変更は、オブジェクトのローカルキャッシュされたバージョンにオフラインで行われることが可能である。次に、変更は、共有オブジェクトが利用可能になった際に、他のユーザ変更と同期させられる。共有オブジェクトに対する変更は、すべてのユーザが、共有オブジェクトに対する変更を見ることができるように、自動的に同期される。異なるユーザは、異なる時点で共有オブジェクトを変更することが可能であり、したがって、共有オブジェクトの複数のバージョンが並存することが可能である。共有オブジェクトの最新バージョンは、他の許可されたユーザらが利用できる最新の同期された変更を含むバージョンである。
【０００６】
２名のユーザが、共有オブジェクトの同一の部分を変更する場合、競合が生じる可能性がある。変更された部分は、同一の部分に対する別のユーザの変更と競合する場合、共有オブジェクトと同期させることができない。競合する変更を有する共有オブジェクトの部分は、競合ページ上で表示される。競合ページは、共有ファイルの最新バージョンの対応するマスタページと似通っているが、同期された変更の代わりに、競合する変更を有する共有オブジェクトの部分がハイライトされて、表示されることだけが異なっている。共有オブジェクトのマスタページ上で、競合インジケータが表示される。競合ページは、競合インジケータが選択された場合、マスタページと並んで表示される。ユーザには、マスタページの同期された状態と、対応する競合ページがともに提示される。ユーザは、競合する変更を調停して、マスタページにマージすることができる。重要でないと識別された、競合する変更は、パージされることが可能である。
【０００７】
本発明の一態様では、共有オブジェクトに対する変更が受け取られる。その変更が、共有オブジェクトのマスタページ上の同期された変更と競合するかどうかの判定が行われる。変更は、変更が、共有オブジェクトの最新バージョンに関連すると判定され、同期された変更と競合しないと判定された場合、共有オブジェクトと同期される。
【発明の効果】
【０００８】
本発明によれば、共有オブジェクトに対する複数ユーザ変更を同期させるための方法およびシステムを提供することができる。
【発明を実施するための最良の形態】
【０００９】
以下、図面を参照して本発明を適用できる実施形態を詳細に説明する。
【００１０】
本発明は、共有オブジェクトに対する複数ユーザ変更を同期させるための方法およびシステムを対象とする。オブジェクトは、ファイルとして、共有されることが可能なエンティティであることが可能である。多くの異なるユーザが、いくつかの異なるトランスポートを介して、同一の共有オブジェクトに同時にアクセスし、変更を行い、更新を行うことができる。ユーザらは、別のユーザが、共有オブジェクトにアクセスを有する場合に、その共有オブジェクトにアクセスし、変更を行うことを阻止されない。あらゆる許可されたユーザが、共有オブジェクトを同時に変更することができる。ユーザらは、変更を行っている間、共有オブジェクトに接続されていることを要求されない。変更は、オブジェクトのローカルキャッシュされたバージョンにオフラインで行われることが可能である。次に、変更は、共有オブジェクトが利用可能になった際に、他のユーザ変更と同期させられる。共有ファイルに対する変更は、すべてのユーザが、共有オブジェクトに対する変更を見ることができるように、自動的に同期される。異なるユーザは、異なる時点で共有オブジェクトを変更することが可能であり、したがって、共有オブジェクトの複数のバージョンが並存することが可能である。共有オブジェクトの最新バージョンは、他の許可されたユーザらが利用できる最新の同期された変更を含むバージョンである。
【００１１】
２名のユーザが、共有オブジェクトの同一の部分を変更する場合、競合が生じる可能性がある。変更された部分は、同一の部分に対する別のユーザの変更と競合する場合、共有オブジェクトと同期させることができない。競合する変更を有する共有オブジェクトの部分は、競合ページ上で表示される。競合ページは、共有オブジェクトの最新バージョンの対応するマスタページと似通っているが、同期された変更の代わりに、競合する変更を有するオブジェクトの部分がハイライトされて、表示されることだけが異なっている。共有ファイルのマスタページ上で、競合インジケータが表示される。競合ページは、競合インジケータが選択された場合、マスタページと並んで表示される。ユーザには、マスタページの同期された状態と、対応する競合ページがともに提示される。ユーザは、競合する変更を調停して、マスタページにマージすることができる。重要でないと識別された、競合する変更は、パージされることが可能である。
【００１２】
例示的な動作環境 
図１を参照すると、本発明を実施するための１つの典型的なシステムが、コンピューティングデバイス１００のようなコンピューティングデバイスを含む。コンピューティングデバイス１００は、ネットワークベースの共同作業システムにおいてデータと対話する、クライアント、サーバ、移動デバイス、または他の任意のコンピューティングデバイスとして構成することができる。非常に基本的な構成では、コンピューティングデバイス１００は、通常、少なくとも１つのプロセッサ１０２、およびシステムメモリ１０４を含む。コンピューティングデバイスの厳密な構成およびタイプに応じて、システムメモリ１０４は、揮発性（ＲＡＭのような）、不揮発性（ＲＯＭ、フラッシュメモリなどのような）、またはこの２つの何らかの組み合わせであることが可能である。システムメモリ１０４は、通常、オペレーティングシステム１０５、１つまたは複数のアプリケーションプログラム１０６を含み、プログラムデータ１０７を含むことが可能である。以下に詳細に説明する、通信モード遷移モジュール１０８が、アプリケーション群１０６の中で実施される。
【００１３】
コンピューティングデバイス１００は、追加の特徴または機能も有することが可能である。例えば、コンピューティングデバイス１００は、例えば、磁気ディスク、光ディスク、またはテープのような、追加のデータ記憶装置（リムーバブル装置および／またはノンリムーバブル装置）も含むことが可能である。そのような追加のストレージを図１に、リムーバブルストレージ１０９およびノンリムーバブルストレージ１１０で示す。コンピュータ記憶媒体には、コンピュータ可読命令、データ構造、プログラムモジュール、またはその他のデータなどの情報を格納するために任意の方法または技術で実装された、揮発性媒体および不揮発性媒体、リムーバブル媒体、およびノンリムーバブル媒体が含まれることが可能である。システムメモリ１０４、リムーバブルストレージ１０９、およびノンリムーバブルストレージ１１０はすべて、コンピュータ記憶媒体の実施例である。コンピュータ記憶媒体には、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリまたは他のメモリ技術、ＣＤ−ＲＯＭ、デジタルバーサタイルディスク（ＤＶＤ）または他の光ストレージ、磁気カセット、磁気テープ、磁気ディスクストレージまたは他の磁気記憶装置、あるいは所望の情報を格納するのに使用することができ、コンピューティングデバイス１００がアクセスすることができる他の任意の媒体が含まれるが、以上には限定されない。あらゆるそのようなコンピュータ記憶媒体が、デバイス１００の一部であることが可能である。また、コンピューティングデバイス１００は、キーボード、マウス、ペン、音声入力デバイス、タッチ入力デバイスなどの入力デバイス１１２も有することが可能である。また、ディスプレイ、スピーカ、プリンタなどの出力デバイス１１４も含まれることが可能である。
【００１４】
また、コンピューティングデバイス１００は、デバイスが、ネットワークなどを介して、他のコンピューティングデバイス群１１８と通信することを可能にする通信接続１１６も含む。ネットワークには、ローカルエリアネットワークおよびワイドエリアネットワーク、ならびに、イントラネットおよびエクストラネットを含むが、以上には限定されない、他の大規模ネットワークが含まれる。通信接続１１６は、通信媒体の一実施例である。通信媒体は、通常、搬送波などの変調されたデータ信号内の、または他のトランスポート機構におけるコンピュータ可読命令、データ構造、プログラムモジュール、またはその他のデータによって実現され、任意の情報配信媒体が含まれる。「変調されたデータ信号」という用語は、信号内に情報を符号化するような形で、特性の１つまたは複数が設定、または変更されている信号を意味する。例として、限定としてではなく、通信媒体には、有線ネットワークまたは直接有線接続などの有線媒体、ならびに音響媒体、ＲＦ媒体、赤外線媒体、およびその他の無線媒体などの、無線媒体が含まれる。本明細書で使用するコンピュータ可読媒体という用語には、記憶媒体と通信媒体がともに含まれる。
【００１５】
共有ファイルに対する複数ユーザ変更を同期させること 
図２は、共有オブジェクトに対する複数ユーザ変更を同期させるためのシステムのブロック図を示す。オブジェクトは、ファイルなどの、共有されることが可能な任意のエンティティであることが可能である。システムは、クライアント２００、２１０、２２０、２３０、Ｅｘｃｈａｎｇｅサーバ２４０のようなファイル格納機能を有する電子メールサーバ、Ｗｅｂサーバ２５０、ピアツーピアネットワーク２６０、および電子メール添付ファイル２７０を含む。クライアント２００、２１０は、Ｅｘｃｈａｎｇｅサーバ２４０に結合される。クライアント２１０、２２０は、Ｗｅｂサーバ２５０に結合される。また、クライアント２１０、２２０は、ピアツーピアネットワーク２６０を介してともに結合されもする。電子メール添付ファイル２７０は、Ｗｅｂサーバ２５０によってクライアント２３０への転送、およびクライアント２３０からの転送が行われるように構成される。クライアント２００、２１０はともに、同一のユーザ（ユーザ１）に関連する。例えば、クライアント２００は、自宅においてユーザ１にアクセスされ、クライアント２１０は、職場においてユーザ１にアクセスされる。クライアント２２０、２３０は、異なるユーザ（それぞれユーザ２およびユーザ３）に関連する。クライアント２００、２１０、２２０、２３０はそれぞれ、共有オブジェクトをローカルで格納するためのキャッシュ２０２、２１２、２２２、２３２を含む。ピアツーピアネットワーク２６０は、クライアント２１０、２２０の間で共有オブジェクトを転送するための仮想サーバ２６２を含む。変更ファイル２４２および共有オブジェクト２５２、２６４、２７２が、Ｅｘｃｈａｎｇｅサーバ２４０、Ｗｅｂサーバ２５０、仮想サーバ２６２、および電子メール添付ファイル２７０の中にそれぞれ格納される。変更ファイル２４２および共有オブジェクト２５２、２６４、２７２は、ピアグループ識別子に関連することが可能である。ピアグループ識別子は、特定の共有オブジェクトにアクセスし、変更を行うことが許可されているユーザら（すなわち、ピアグループ）を識別する。一実施形態では、ピアグループ識別子は、任意のＷｅｂクライアントに解決することができるピアグループに対するユニフォームリソースロケータ（ＵＲＬ）である。共有オブジェクト２５２、２６４は、マニフェストファイル２５４、２６６にそれぞれ関連する。
【００１６】
多くの異なるユーザが、いくつかの異なるトランスポートを介して、同一の共有オブジェクトに同時にアクセスし、編集を行い、更新を行うことができる。例えば、クライアント２１０におけるユーザ１、およびクライアント２２０におけるユーザ２が、Ｗｅｂサーバ２５０から共有オブジェクト２５２にアクセスすることができる。共有オブジェクトは、対応するキャッシュ２１２、２２２の中にローカルで格納される。ユーザ１とユーザ２はともに、共有オブジェクト２５２を変更することができる。変更は、サーバ２５０上で共有オブジェクト２５２と同期されて、ユーザ１が、ユーザ２によって行われた変更を見ることができ、ユーザ２が、ユーザ１によって行われた変更を見ることができるようになる。
【００１７】
別の実施例では、ユーザ３が、電子メール添付ファイル２７０を介して、共有オブジェクト２７２のアクセスをユーザ２と共有することができる。ユーザ２は、ローカルで格納された共有オブジェクトを変更し、共有オブジェクト全体、または共有オブジェクトに対する変更だけが添付された電子メールメッセージを、ユーザ３に送信することができる。ユーザ２によって行われた変更は、Ｗｅｂサーバ２５０上で共有オブジェクト２５２と同期される。電子メールが、クライアント２３０において受信されると、ユーザ２によって行われた変更は、キャッシュ２３２内に格納されたローカル共有オブジェクトと自動的に同期される。次に、ユーザ３が、共有オブジェクト２７２にさらなる変更を行い、共有オブジェクト全体、または共有オブジェクトに対する変更だけを電子メール添付ファイル２７０として含まれて、ユーザ２に返信することができる。ユーザ３によって行われた変更は、Ｗｅｂサーバ２５０上で共有オブジェクト２５２と同期される。また、クライアント２２０における共有オブジェクトも、ユーザ３によって行われた変更を含むように更新される。
【００１８】
別の実施例では、ユーザ１が、Ｅｘｃｈａｎｇｅサーバ２４０を介して、自宅においてクライアント２００上で、または職場においてクライアント２１０上で、共有オブジェクトにアクセスすることができる。Ｅｘｃｈａｎｇｅサーバは、しばしば、外部サーバへのアクセスが許されない、または利用可能でない場合に利用される。変更ファイル２４２が、共有オブジェクトへの変更を含む。変更ファイル２４２は、ユニバーサルシリアルバス（ＵＳＢ）ドライブ、電子メールアプリケーション、あるいは変更が転送されてやりとりされることを可能にする他の何らかの機構を介して、クライアント２００、２１０の間で転送されることが可能である。変更は、キャッシュ２０２、２１２の中に格納されたローカル共有オブジェクトが更新されることが可能なように、クライアント２００、２１０に適用される。
【００１９】
Ｅｘｃｈａｎｇｅサーバ２４０は、扱うことができるファイルのサイズに制限（例えば、最大２メガバイト）を有することが可能である。ユーザ１が、共有オブジェクトに対する任意の変更を含む変更ファイル２４２を、クライアント２００からＥｘｃｈａｎｇｅサーバ２４０にアップロードすることができる。変更ファイル２４２は、Ｅｘｃｈａｎｇｅサーバ２４０のサイズ限度を超える場合、クライアント２００からクライアント２１０にサブセクションで転送することができる。ファイルプロトコルは、サブセクションを転送するための要求／フィル（ｆｉｌｌ）プロセスを可能にする。一実施形態では、Ｅｘｃｈａｎｇｅサーバ２４０は、電子メールアプリケーションに関連する。別のユーザ（ユーザ２）によって行われた変更が、Ｗｅｂサーバ２５０またはピアツーピアネットワーク２６０を介して、クライアント２２０からクライアント２１０に転送され、次に、ユーザ１に発行された電子メールアカウントを介して、クライアント２００に転送されることが可能である。別の実施形態では、クライアント２００が、最新の変更ファイルに関して、Ｅｘｃｈａｎｇｅサーバに定期的にポーリングを行う。
【００２０】
別の実施形態では、クライアント２１０、２２０からＷｅｂサーバ２５０への接続が失われた場合、またはユーザ１とユーザ２が、リアルタイムで直接に同期で通信することを選好する場合、クライアント２１０、２２０間でピアツーピアネットワーク２６０が確立されることが可能である。ユーザ１とユーザ２は、Ｗｅｂサーバ２５０を介するオブジェクト共有により、クライアント２１０において変更が行われた時点と、クライアント２２０において変更が利用可能な時点の間に遅れがもたらされる可能性があるため、ピアツーピアネットワーク２６０を介して通信することを選好する可能性がある。遅れは、大量のサーバトラフィックの結果であることが可能である。ピアツーピアネットワーク２６０は、共有オブジェクトに対する変更が、Ｗｅｂサーバ２５０を介してではなく、クライアント２１０、２２０間で直接に転送されることを可能にする。一実施形態では、ピアツーピアネットワーク２６０は、伝送制御プロトコル／インターネットプロトコル（ＴＣＰ／ＩＰ）直接ネットワークである。ＴＣＰ／ＩＰ直接ネットワークは、変更の格納および取得が迅速に行われることを可能にする。
【００２１】
クライアント２１０、２２０はそれぞれ、Ｗｅｂサーバ２５０接続が中断された際、キャッシュ２１２、２２２の中に共有オブジェクト２５２のコピーをローカルで格納していることが可能である。共有オブジェクト２５２に関連するピアグループ識別子は、ユーザ１とユーザ２がともに、共有オブジェクトに同時にアクセスしていることを示す。ユーザらは、確立されたピアツーピアネットワークに両者がアクセスした（例えば、両方のユーザが、同一の航空機上で、ラップトップコンピュータで作業している）際に、互いに気付く。ピアツーピアネットワーク２６０は、ユーザ１とユーザ２が、仮想サーバ２６２上で共有オブジェクト２６４に対する変更に同時にアクセスし、さらなる変更を実施することを可能にする。変更は、クライアント２１０、２２０上で即時に複製されて、ユーザ１とユーザ２が、共有オブジェクト２６４に対して積極的に共同作業を行うことができるようになる。ピアツーピアネットワーク２６０は、ユーザ１とユーザ２が、もはや同一の近辺にいない（例えば、各ユーザが、それぞれのオフィスに戻った）場合、またはユーザ１とユーザ２が、もはやリアルタイムで通信することを所望しない場合、無効にされてもよい。その場合、共有オブジェクト２５２は、Ｗｅｂサーバ２５０からアクセスされることが可能である。ピアツーピアネットワーク２６０上で共有オブジェクト変更にアクセスすることと、Ｗｅｂサーバ２５０上で共有オブジェクト変更にアクセスすることの間の遷移は、自動的であり、シームレスである。
【００２２】
クライアント２１０、２２０は、Ｗｅｂサーバ２５０とピアツーピアネットワーク２６０の両方から、最新の変更を受信することができる。共有オブジェクトに行われた各変更は、グローバル一意識別子（ＧＵＩＤ）およびタイムスタンプに関連する。タイムスタンプは、変更が行われた時刻を明らかにする。クライアント２１０は、Ｗｅｂサーバ２５０上で共有オブジェクト２５２を変更することができる。クライアント２２０は、キャッシュされたオブジェクトに関連するＧＵＩＤおよびタイムスタンプと、Ｗｅｂサーバ２５０上の共有オブジェクト２５２に関連するＧＵＩＤおよびタイムスタンプを比較することにより、キャッシュ２２２内の共有オブジェクトのローカルバージョンが最新であるかどうかを判定する。最新バージョンがローカルで格納されていない場合、キャッシュされたオブジェクトにおいて実施されていない最新の変更が、Ｗｅｂサーバ２５０からクライアント２２０にロードされ、ローカルファイルと同期される。このため、共有オブジェクトのローカルバージョンが更新するたびに、共有オブジェクト全体がクライアント２２０にロードされる必要はない。
【００２３】
一実施形態では、クライアント２２０は、変更に関連するＧＵＩＤおよびタイムスタンプから、同一の修正が、ピアツーピアネットワーク２６０から入手できると判定することが可能である。しかし、アクションは全くもたらされない。というのは、クライアント２２０は、その修正を既に実施しているからである。別の実施形態では、クライアント２２０は、変更に関連するＧＵＩＤおよびタイムスタンプから、同一の修正は、ピアツーピアネットワーク２６０から入手できないと判定することが可能である。このため、クライアント２２０は、変更をピアツーピアネットワーク２６０に送信して、ピアツーピアネットワーク２６０に接続されたその他のユーザらが、共有オブジェクトの最新バージョンと同期することができるようにする。
【００２４】
クライアント２２０が、ピアツーピアネットワーク２６０から別の変更を受信することが可能である。キャッシュ２２２内の共有オブジェクトが更新される。クライアント２２０は、変更に関連するＧＵＩＤおよびタイムスタンプを使用して、共有オブジェクトの最新の状態も、Ｗｅｂサーバ２５０上で入手できるかどうかを判定する。Ｗｅｂサーバ２５０上の共有オブジェクト２５２が、共有ドキュメントの最新の状態と同期されていない場合、クライアント２２０は、最新の変更をＷｅｂサーバ２５０に送信して、共有オブジェクト２５２を更新することができるようにする。
【００２５】
クライアントが、物理的サーバを介してシステムに接続されている間に、共有オブジェクトを変更する場合、非同期通信が行われる可能性がある。サーバの限界により、共有オブジェクト同期が、ユーザによって変更が行われた時点から遅延させられる可能性がある。一実施形態では、クライアントは、システムに接続されていない間に、共有オブジェクトのローカルでキャッシュされたバージョンを変更している可能性がある。クライアントによって行われたあらゆる変更が、クライアントが、サーバを介してシステムに再接続した際に、共有オブジェクトと同期されることが可能である。クライアントは、通信モードが変わったことにユーザが気付かないように、ローカルアクセス、同期通信、および非同期通信の間でシームレスに遷移することができる。ユーザは、ロケーションを変えることができ、任意の利用可能なデータ共有トランスポート（例えば、ピアツーピアネットワーク、サーバ）が、自動的に明らかにされる。このため、ユーザは、異なる機構を介して、共有オブジェクトにアクセスし、他の許可されたユーザと共同作業を行うことができる。
【００２６】
各共有オブジェクトは、マニフェストファイルに関連する。マニフェストファイルは、システム内で共有オブジェクトの他のバージョン、および他のインスタンスが格納されているロケーションを明らかにする。一実施形態では、マニフェストファイルは、拡張マークアップ言語（ＸＭＬ）ファイルである。別の実施形態では、マニフェストファイルは、複数の共有オブジェクトを明らかにする。別の実施形態では、マニフェストファイルは、クライアント間で共有されることが可能な任意のオブジェクトに関連することが可能である。例えば、マニフェストファイルは、共有オブジェクト全体、または共有オブジェクトの任意の部分（例えば、コンテンツコンテナ、セクション、ページ、アウトラインなど）に関連することが可能である。
【００２７】
マニフェストファイルは、システム内のどこにでも格納されることが可能である。図に示すとおり、マニフェストファイル２５４は、共有オブジェクト２５２に関連する。共有オブジェクト２５２とマニフェストファイル２５４はともに、Ｗｅｂサーバ２５０上に格納される。別の実施形態では、マニフェストファイルは、共有オブジェクトの中に格納される。さらに別の実施形態では、マニフェストファイルは、アクティブディレクトリの中に格納される。さらに別の実施形態では、マニフェストファイルは、システム内の複数のロケーションに格納される。マニフェストファイルは、一意ロケーション識別子によって明らかされるロケーションに格納される。一意ロケーション識別子により、ファイルサーバ、サーバの共有領域、Ｗｅｂサーバ、またはピアグループが明らかにされることが可能である。
【００２８】
共有オブジェクトは、キャッシュからローカルで、サーバを介して、またはピアツーピアネットワークを介してアクセスされることが可能である。クライアントは、対応する共有オブジェクトの中の一意ロケーション識別子によって明らかにされたロケーションから、マニフェストファイルを取得する。一実施形態では、クライアントは、マニフェストファイルを将来の参照のためにローカルで格納することができる。マニフェストファイルは、システム内の共有オブジェクトの他のバージョン、および他のインスタンスのロケーション（例えば、サブストアまたはピアグループの中）を示す。共有オブジェクトの別のバージョン／インスタンスが、ピアグループの中に格納されている場合、マニフェストファイルは、対応するピアグループ識別子を含むことが可能である。
【００２９】
一実施形態では、クライアント２２０が、Ｗｅｂサーバ２５０上で共有オブジェクト２５２にアクセスする。クライアント２２０は、共有オブジェクト２５２に同様にアクセスしている他のクライアント群（例えば、ピアグループ）に自動的に接続される。クライアント２２０は、共有オブジェクト２５２に関連するマニフェストファイル２５４を取得する。マニフェストファイル２５４は、共有オブジェクト２５２の異なるバージョン、および異なるインスタンスのロケーションを明らかにする。このため、クライアント２２０は、ピアグループ内の任意のクライアントが、マニフェストファイル２５４によって明らかにされる共有オブジェクト２５２のバージョン／インスタンスにアクセスする際、ピアグループ内の他の任意のクライアントに対してピアツーピアネットワークを確立することができる。次に、クライアント２２０は、Ｗｅｂサーバ２５０から切断して、ピアツーピアネットワーク上で共有オブジェクト２５２にアクセスすることを続けることができる。
【００３０】
別の実施形態では、クライアント２１０が、ピアツーピアネットワーク２６０から共有オブジェクト２６４にアクセスすることができる。クライアント２１０は、共有オブジェクト２６４に関連するマニフェストファイル２６６を取得する。クライアント２１０は、サーバに接続し、いずれのクライアントが、そのサーバに同様に接続されているかを判定することができる。接続されたクライアント群には、ピアツーピアネットワーク２６０が利用できない場合、サーバを介してアクセスすることができる。共有オブジェクト２６４（または２５２）、および関連するマニフェストファイル２６６（または２５４）により、クライアント２１０（またはクライアント２２０）が、非同期通信モードと同期通信モードの間で自動的に、シームレスに遷移することが可能になる。
【００３１】
ユーザらは、別のユーザが共有オブジェクトへのアクセスを有する場合に、その共有オブジェクトにアクセスし、変更を行うことをブロックされない。あらゆる許可されたユーザが、共有オブジェクトを同時に変更することができる。一実施形態では、変更トランザクションの整合性を確実にするように、ブロックの短いインスタンスが生じる可能性がある。例えば、ユーザが、サーバから切断されている間に、共有ドキュメントを大幅に変更する可能性がある。ユーザが、サーバに再接続すると、他のクライアント群は、ユーザの変更のすべてが共有オブジェクトにおいて実施されるまで、共有オブジェクトにアクセスすることを短い間、ブロックされることが可能である。
【００３２】
図３は、共有オブジェクトの相異なる部分を示すリンクされたノード群の階層グラフを示す。一実施形態では、共有オブジェクトは、数名のユーザの間で共有されるノートブックである。ノートブックノード３００は、共有オブジェクト全体を表す。フォルダノード３１０が、ノートブックノード３００内に含まれる。セクションノード３２０が、フォルダノード３１０内に含まれる。ページノード３３０、３３５が、セクションノード３１０内に含まれる。テーブルノード３４０、インクノード３４２、アウトラインノード３４４、およびイメージノード３４６が、ページノード３３０内に含まれる。アウトライン要素ノード３５０が、アウトラインノード３４４内に含まれる。テキストノード３６０が、アウトライン要素ノード３５０内に含まれる。相異なるノードが、コンテンツコンテナの中に一緒にグループ化されることが可能である。例えば、アウトラインノード３４４、アウトライン要素ノード３５０、およびテキストノード３６０が、コンテンツコンテナＲ０として一緒にグループ化されることが可能である。コンテンツコンテナＲ０には、ＧＵＩＤ（例えば、ＧＵＩＤ−０）が割り当てられる。ＧＵＩＤは、コンテンツコンテナＲ０を一意に識別する。
【００３３】
コンテンツコンテナは、共有オブジェクトコンテンツ（例えば、語、文、段落、ページ、テーブル、ピクチャ、手書き入力（ｈａｎｄｗｒｉｔｉｎｇ）、ユニフォームリソースロケータ、または共有オブジェクトの中に含まれるデータの任意の組み合わせ）を含む。コンテンツコンテナは、一緒にグループ化されたオブジェクトコンテンツのディメンション（ｄｉｍｅｎｓｉｏｎ）を提供する。例えば、コンテンツコンテナは、行、段落、ページ、または特定のページ要素（例えば、特定のページ上のテーブルだけ）に対応することが可能である。
【００３４】
共有オブジェクトは、グラフの初期バージョンを格納する。次に、個々のコンテンツコンテナに対して、特定の操作が実行されることが可能である。例えば、ユーザが、コンテンツコンテナのデータを変更することが可能である。共有オブジェクトに対する変更は、コンテンツコンテナの状態として識別されることが可能である。共有オブジェクトは、グラフの変更されたコンテンツコンテナを格納する。コンテンツコンテナの最新の状態が、ＧＵＩＤおよびタイムスタンプを使用して、前の状態と比較されて、コンテンツコンテナが変更されているかどうかの判定を行うことができるようになる。
【００３５】
例えば、２名の異なるユーザがそれぞれ、共有ドキュメントにアクセスして、コンテンツコンテナＲ０を変更する可能性がある。１名のユーザは、テキストノード３６０を削除することにより、コンテンツコンテナＲ０を変更することが可能である（変更Ｒ１に示す）。変更Ｒ１は、共有オブジェクトの中に格納される。変更Ｒ１に、変更されたコンテナを一意に識別するＧＵＩＤ（例えば、ＧＵＩＤ−１）、ならびに変更Ｒ１が共有オブジェクトに書き込まれた時刻と日付を明らかにするタイムスタンプが割り当てられる。別のユーザが、テキストノード３８０をアウトライン要素ノード３５０に追加することにより、コンテンツコンテナＲ０を変更することができる（変更Ｒ２に示す）。変更Ｒ２は、共有オブジェクトの中に格納される。変更Ｒ２に、タイムスタンプ、ならびに変更されたコンテンツコンテナを一意に識別するＧＵＩＤ（例えば、ＧＩＵＤ−２）が割り当てられる。
【００３６】
異なるユーザが、異なる時点で共有オブジェクトを変更することができ、したがって、共有オブジェクトの複数のバージョンが並存することが可能である。しかし、共有オブジェクトの１つだけの最新バージョンが存在する。一実施形態では、共有オブジェクトの最新バージョンは、共有オブジェクトと同期され、他の許可されたユーザらに提供された最新の変更を含むバージョンである。
【００３７】
例えば、ユーザが、アウトライン要素ノード３７０をアウトラインノード３４４に追加することにより、変更Ｒ１として識別された共有オブジェクトのコンテンツコンテナを変更することが可能である（変更Ｒ３に示す）。変更Ｒ３は、共有オブジェクトの中に格納される。変更Ｒ３にも、タイムスタンプ、ならびに変更されたコンテンツコンテナを一意に識別するＧＵＩＤ（例えば、ＧＵＩＤ−３）が割り当てられる。変更Ｒ３は、変更Ｒ１の拡張である。このため、変更Ｒ１は、ユーザが気付いていた共有オブジェクト（例えば、ローカルで格納されたバージョン）の最新バージョンである。共有オブジェクトは、共有オブジェクトの最新バージョンが、依然として、変更Ｒ１であるかどうかを判定するように検査される。一実施形態では、共有オブジェクトの最新バージョンは、異なるコンテンツコンテナのタイムスタンプおよびＧＵＩＤを比較することにより、特定することができる。共有オブジェクトの最新バージョンが、変更Ｒ１より新しいタイムスタンプに関連している場合、別のユーザ（例えば、変更Ｒ２を作成したユーザ）が、同一のコンテンツコンテナを後に修正している。
【００３８】
変更Ｒ１が、共有オブジェクトと同期されて以来、別のユーザが同一のコンテンツコンテナを修正している場合、後のあらゆる変更が共有オブジェクトと同期され、あらゆる競合する変更が解決され、マージされるまで、変更Ｒ１の拡張（例えば、変更Ｒ３）である、いずれの変更も、共有オブジェクトと同期させることができない。例えば、変更Ｒ２が、変更Ｒ１の後に、共有オブジェクトと同期される。このため、共有オブジェクトの最新バージョンは、変更Ｒ２を含む。変更Ｒ３が、共有オブジェクトと同期される前に、変更Ｒ３は、変更Ｒ２と比較されて、競合する変更が存在するかどうかが判定される。この比較が必要であるのは、変更Ｒ３が、共有オブジェクトの最新バージョンにもはや関連していない変更Ｒ１の拡張だからである。変更Ｒ３は、変更Ｒ２と競合しないと判定される。というのは、アウトライン要素ノード３７０は、変更Ｒ２を妨げることなしに、アウトラインノード３４４に追加することができるからである。
【００３９】
一実施形態では、共有オブジェクトは、共有オブジェクト内の１つのロケーションから別のロケーションにコンテンツコンテナを移動することによって変更される。例えば、テーブルノード３４０が、ページノード３３０からページノード３３５に移動されることが可能である。テーブルノード３４０が移動されたという判定が行われるが、新たなロケーションは、特定することができない。テーブルノード３４０の元のロケーションにおいて、プロキシノードが作成される。プロキシノードは、テーブルノード３４０の新たなロケーションが特定された場合、テーブルノード３４０のその新たなロケーションに実施される。新たなロケーションが特定される前にテーブルノード３４０が削除された場合、プロキシノードは、破棄される。
【００４０】
異なるユーザが、共有オブジェクトを同時に編集することが可能である。通常、ユーザらは、共有オブジェクトの相異なるコンテンツコンテナを変更している。このため、各ユーザの変更は、さらなる処理なしに、共有オブジェクトと同期されることが可能である。２名のユーザが、共有オブジェクトの同一のコンテンツコンテナ（例えば、同一のテーブル値、同一の文）を編集する場合、競合が生じる可能性がある。異なるユーザ変更間の競合は、非同期でもたらされる可能性がある。例えば、ユーザが、サーバに接続されていない間に、共有オブジェクトのローカルでキャッシュされたバージョンを変更する可能性がある。その変更は、ユーザが、サーバに再接続した際に、共有オブジェクトと同期される。しかし、その変更は、共有オブジェクトと既に同期されている他のバージョンと競合する可能性がある。
【００４１】
例えば、変更Ｒ４は、変更Ｒ３の拡張である。変更Ｒ４は、アウトラインノード３４４からアウトライン要素ノード３５０を削除する。共有オブジェクトの最新バージョンが、変更Ｒ２を含むと判定される。変更Ｒ２と変更Ｒ４の比較により、競合が明らかにされる。というのは、アウトライン要素ノード３５０が、変更Ｒ２の中に存在するが、変更Ｒ４の中で削除されているからである。
【００４２】
コンテンツコンテナのマスタバージョンと、コンテンツコンテナの２つの相違する２つのバージョンの間で３方マージ（ｔｈｒｅｅ−ｗａｙ  ｍｅｒｇｅ）が実行されて、競合が解決される。例えば、コンテンツコンテナＲ０（すなわち、マスタバージョン）、変更Ｒ２、および変更Ｒ４がマージされて、共有オブジェクトの最新バージョンが確立される。コンテンツコンテナのマスタバージョンは、サーバ上の共有オブジェクトと最後に同期されたバージョンであることが可能である。マスタバージョンは、競合しない変更を含む。
【００４３】
競合するコンテンツコンテナは、マージアルゴリズムによって確立された一組の規則に従って調停されて、共有オブジェクトにマージされる。マージアルゴリズムは、いずれの変更が、共有オブジェクトと同期されるかを判定する。例えば、異なるユーザが、優先順位に従ってランク付けされて、あるユーザの変更が、他のすべてのユーザに優先されるようになることが可能である（すなわち、１次編集）。より低い優先順位のユーザが、より高い優先順位のユーザによって既に編集されている共有オブジェクトのコンテンツコンテナを変更しようと試みた場合、そのユーザは、変更（２次編集）が、共有オブジェクトと同期されないという通知を受ける。このため、１次編集が、共有オブジェクトのマスタページ上に表示され、いずれの２次編集にも、共有オブジェクトと同期されないというフラグが付けられる。
【００４４】
別の実施例では、サーバ上の共有オブジェクトに対して行われた変更が、クライアント上においてローカルで行われた変更に優先される。共有オブジェクトのサーバコピーは、多くの異なるユーザが、サーバ上の共有オブジェクトにアクセスし、変更を行っている可能性があるため、マスタバージョンと考えられる。１名だけのユーザが、ローカルで格納されたバージョンにアクセスし、変更を行っている。共有オブジェクトと同期されていない、変更されたコンテンツコンテナ（例えば、２次編集）は、競合するものとして識別される。競合するコンテンツコンテナは、共有オブジェクトの対応するマスタページに関連する競合ページ上に格納されることによって保存される。
【００４５】
図４は、共有オブジェクトのマスタページ、および関連する競合ページを示す。マスタページ４００は、コンテンツコンテナ４１０、４２０などの、競合しない変更を含む。マージされてない、あらゆる競合する変更は、マスタページ４００上で、競合インジケータによって識別される。一実施形態では、競合インジケータは、ドロップダウンメニュー４３０である。ドロップダウンメニュー４３０の第１のエントリは、ユーザによって生成された最新の競合であることが可能である。ドロップダウンメニュー４３０のエントリは、ユーザの名前、および対応するタイムスタンプを含むことが可能である。ドロップダウンメニュー４３０内の別のエントリは、ユーザが生成したが、調停しなかった他の競合ページを含むことが可能である。ドロップダウンメニュー４３０内の他のエントリは、他のユーザらによって生成された競合ページに対応することが可能である。ドロップダウンメニュー４３０からエントリを選択することにより、対応する競合ページが表示されて、共有オブジェクトのマスタバージョンの中にマージされなかった変更にユーザの注意を引き付けるように、競合する変更がハイライトされる。このため、ユーザは、競合を調停して、マスタページ４００とマージするか、または競合が重要でないと判断することができる。
【００４６】
別の実施形態では、競合インジケータは、タブである。マスタページは、タブ４４０に関連することが可能である。また、対応する競合ページも、タブ４４０とは異質のタブに関連することが可能である。例えば、競合ページタブは、タブ４４０に対してインデントされているか（ｉｎｄｅｎｔｅｄ）、またはタブ４４０の下にたたまれている（ｃｏｌｌａｐｓｅｄ）ことが可能である。特定のユーザに関連する、マージされてない競合を含む競合ページは、その他のタブとは異質であるタブによって識別されて、ユーザの注意が、そのユーザによって生成された競合ページに引き付けられるようにすることが可能である。すると、ユーザは、そのタブを選択して、対応する競合ページに移動する（ｎａｖｉｇａｔｅ）ことができる。
【００４７】
選択された競合ページは、共有オブジェクトの対応するマスタページと並んで表示されて、ユーザが、マージされた変更のために、競合する変更を調停し、マージすることができるようにすることが可能である。競合ページ４５０が、マスタページ４００に関連する。競合ページ４５０は、マスタページ４００と似通っているが、競合が解決されていないことを示すように、あらゆる競合するコンテンツコンテナがハイライトされていることが異なっている。例えば、コンテンツコンテナ４６０が、マージされてない競合にユーザの注意を引き付けるように、ハイライトされた背景で提示される。コンテンツコンテナ４６０は、ユーザが、コンテンツコンテナ４６０の中のデータを変更して、競合を生じさせる前に、削除され、共有オブジェクトと同期されていることが可能である。ユーザは、コンテンツコンテナ４６０を選択して、マスタページ４００上でその変更をマージすることができる。
【００４８】
一実施形態では、競合ページは、１名の特定のユーザに関連する。このため、複数のユーザが、マージされることが可能でない変更をページ上で行った場合、複数の競合ページが、マスタページ４００に関連することが可能である。すべての競合する変更が、共有オブジェクトにアクセスすることが許可された、すべてのユーザに関して格納される。競合ページにアクセスするユーザは、おそらく、そのユーザによって生成された競合に最も関心があり、したがって、ユーザは、それらの競合を調停することができる。例えば、ユーザ１には、ユーザ１が競合インジケータを選択した際に、ユーザ１の対応する競合ページが提示される。また、ユーザは、別のユーザに関連する競合ページを見ることもできる。例えば、ユーザ１は、タブ４７０を選択して、ユーザ２に関連する競合ページに移動することができる。
【００４９】
共有オブジェクトの１つのマスタページに関連する多くの競合ページが、時とともに蓄積する可能性がある。その期間中、ユーザは、いくつかの変更を、対応する競合ページを無視しながら、サーバ上に位置する共有オブジェクトのマスタバージョンと同期させる可能性がある。このため、ユーザが調停しなかった、より古い競合ページは、おそらく、もはや重要ではない。一実施形態では、重要でないと識別された競合ページは、所定の期間が経過した後、パージされることが可能であり、ユーザが、その期間中にページの変更を同期させている。例えば、あらゆるマスタページに関連する３つの最新の競合ページが保存され、他のいずれの関連する競合ページも、作成から１カ月後にパージされる。
【００５０】
一実施形態では、競合ページは、競合が、非同期通信中よりも頻繁に生じる可能性があるため、リアルタイム通信中には作成されない。代わりに、ユーザは、同一のコンテンツコンテナを共同作業で変更することができる。競合は、即時に処理されることが可能である。というのは、すべてのユーザが、ユーザの変更が実施されたかどうかを迅速に確認することができるからである。代替として、ユーザは、別のユーザが、特定のコンテンツコンテナを変更しているという通知を受ける。ユーザは、その別のユーザの変更が完了するまで、異なるコンテンツコンテナを変更するように促されることが可能である。
【００５１】
図５は、共有オブジェクトに対する複数ユーザ変更を同期させるためのシステムのブロック図を示す。システムは、クライアント５００、５１０、５４０、５５０、およびサーバ５２０、５３０を含む。クライアント５００は、サーバ５２０、５３０に結合される。クライアント５１０は、サーバ５２０に結合される。クライアント５４０、５５０は、サーバ５３０に結合される。クライアント５４０は、ストア５４２および子ストア５４４を含む。サーバ５２０は、ストア５２２および子ストア５２４、５２６を含む。サーバ５３０は、ストア５３２を含む。ストア５３２は、サブストア５３４、５３６を含む。
【００５２】
ストア５２２、５３２、子ストア５２４、５２６、およびサブストア５３４、５３６は、共有オブジェクトに関連する変更を格納することができる。ストア５２２、５３２、子ストア５２４、５２６、およびサブストア５３４、５３６は、階層型である。例えば、ストア５２２は、共有ノートブックドキュメント全体に関連することが可能である。子ストア５２４は、共有ノートブックドキュメントのセクションに関連することが可能である。子ストア５２６は、共有ノートブックドキュメントのページに関連することが可能である。一実施形態では、最上レベルの共有オブジェクトの最新バージョンだけが、ストア５２２の中に含まれる。ストア５３２は、最上レベルの共有オブジェクト全体を格納することが可能である。サブストア５３４、５３６は、共有オブジェクトの諸部分に関連する。例えば、サブストア５３４は、共有オブジェクトのあるセクションに関連することが可能であり、サブストア５３６は、共有オブジェクトの異なるセクションに関連することが可能である。
【００５３】
アプリケーションは、共有オブジェクトの特定のコンテンツコンテナの最新バージョンなしに、サーバ５２０またはサーバ５３０からクライアント５００に共有オブジェクトをロードする可能性がある。例えば、クライアント５００が、共有オブジェクトをストア５２２から要求する。共有オブジェクトの最新の利用可能なバージョンが、クライアント５００において提示される。共有オブジェクトの最新の利用可能なバージョンは、共有オブジェクトの最新バージョンと一致しない可能性がある。というのは、最新の変更のデータが、対応する子ストア５２６の中で入手できないからである。クライアント５００が、共有オブジェクトを更新するのに最新の変更データを要することを示すように、要求タグが、子ストア５２６に割り当てられる。また、子ストア５２６には、クライアント５００が、子ストア５２６から変更データを要求した時刻と日付を明らかにするタイムスタンプも割り当てられることが可能である。また、子ストアには、データを要求したクライアント（例えば、クライアント５００）を識別するＧＵＩＤも割り当てられることが可能である。要求タグ、タイムスタンプ、およびＧＵＩＤは、別のクライアントが子ストア５２６にアクセスした際、クライアント５００に知らせるのに使用される。例えば、クライアント５１０が、最新の変更データで子ストア５２６にアクセスすることが可能である。このため、クライアント５００は、共有オブジェクトの最新の変更データが、子ストア５２６の中で入手できることを知らされる。
【００５４】
クライアント５００は、ユーザの自宅コンピュータであることが可能であり、クライアント５４０は、ユーザの職場コンピュータであることが可能である。サーバ５３０は、クライアント５００、５４０の間で変更ファイルを転送するＥｘｃｈａｎｇｅサーバであることが可能である。変更ファイルを使用して、クライアント５００、５５０上に格納された共有オブジェクトを更新することができる。一実施形態では、クライアント５００は、所定のサイズ（例えば、２メガバイト）より大きいファイルを扱うことを制限される。例えば、クライアント５００は、受信されることが可能な電子メールメッセージのサイズを制限する電子メールアプリケーションを含むことが可能である。ストア５４２は、最上レベルの共有オブジェクトに関連する変更を含む。子ストア５４４は、共有オブジェクトのコンテンツコンテナに関連する変更を含む。
【００５５】
クライアント５４０が、サーバ５３０にポーリングを行って、別のクライアントがデータ変更要求を送信しているかどうかを判定することが可能である。クライアント５４０は、要求されたデータ変更の最新バージョンが、ストア５４２または子ストア５４４の中で入手できる場合、その要求を満たすことができる。クライアント５４０は、変更ファイルのサイズが、クライアント５００によって扱われることが可能な限度より小さい場合、要求された変更全体をクライアント５００に転送することができる。変更ファイルのサイズが限度より大きい場合、ファイルは、限度より小さいファイルに分割することができる。代替として、変更ファイルのサイズは、前の要求を削除することにより、小さくすることもできる。次に、その、より小さいファイル群が、サーバ５３０を介してクライアント５４０からクライアント５００に転送される。
【００５６】
変更データを求める複数の要求が、サーバ上で待っていることが可能である。一実施形態では、要求は、異なるクライアント（例えば、クライアント５００、５５０）から行われる可能性がある。各要求側クライアントは、異なるファイルサイズ限度に関連する可能性がある。例えば、クライアント５００は、２メガバイト未満のファイルに制限され、クライアント５５０は、２０メガバイトまでのファイルを扱うことができる。変更ファイルが、２メガバイトより大きい場合、両方の要求とも、１回の転送トランザクションを介して満たすことができない。一実施形態では、優先順位ビットが、各要求側クライアントに関連付けられて、要求が満たされる順序が確立される。
【００５７】
要求は、変更ファイルをクライアント５００、５５０と同期させることによって満たされる。変更ファイルは、変更ファイルのサイズに応じて、１回のトランザクションで、または一連の複数回のトランザクションを介して、クライアント５００、５５０と同期されることが可能である。各クライアント５００、５５０は、変更ファイル全体が同期されると、要求が満たされたと判定する。クライアント５４０は、要求が満たされたため、要求されたデータをパージすることができる。クライアント５４０は、後にサーバ５３０にポーリングを行って、満たされるべき、さらなる要求が待っているかどうかを判定することができる。
【００５８】
図６は、共有オブジェクトに対する複数ユーザ変更を同期させるためのプロセスを示す動作流れ図を示す。プロセスは、多くのユーザが、共有オブジェクトに同時にアクセスし、変更を行うことを許可される（すなわち、ピアグループ）開始ブロックで始まる。オブジェクトは、ファイルとして共有されることが可能な任意のエンティティであることが可能である。ピアグループは、ピアグループ識別子によって識別されることが可能である。共有オブジェクトの異なるバージョンは、対応するＧＵＩＤおよびタイムスタンプによって識別される。タイムスタンプは、共有オブジェクトが最後に変更と同期された時刻を明らかにする。
【００５９】
ブロック６００に進むと、ユーザが、共有オブジェクトを変更する。共有オブジェクトは、サーバ上で、ローカルキャッシュ内で、またはピアツーピアネットワーク上で変更されることが可能である。一実施形態では、変更は、変更ファイルとして格納される。ブロック６１０に進むと、変更は、ＧＵＩＤおよびタイムスタンプに関連する。タイムスタンプは、ユーザが共有オブジェクトを変更した時刻を明らかにする。
【００６０】
ブロック６２０に進むと、共有オブジェクトの最新バージョンが探し出される。共有オブジェクトの最新バージョンは、共有オブジェクトと同期され、他の許可されたユーザに利用可能にされた最新の変更を含む、バージョンである。共有オブジェクトの最新バージョンは、共有オブジェクトの異なるバージョンに関連するタイムスタンプおよびＧＵＩＤから特定することができる。
【００６１】
判定ブロック６３０に移ると、競合する変更が存在するかどうかの判定が行われる。変更は、異なるユーザが、同一のコンテンツコンテナを変更した場合、競合する可能性がある。変更は、競合する変更が存在する場合、共有オブジェクトと同期させることができない。競合する変更が存在する場合、処理は、ブロック６４０に進み、競合する変更が調停されて、マージされる（図７に関連して説明するとおり）。競合する変更が全く存在しない場合、処理は、ブロック６５０に進み、変更は、共有オブジェクトと同期されて、他のユーザらが、その変更を見ることができるようになる。次に、処理は、終了ブロックで終了する。
【００６２】
図７は、共有オブジェクトに対する競合する複数ユーザ変更を調停して、マージするためのプロセスを示す動作流れ図を示す。プロセスは、開始ブロックで始まり、複数のユーザが、共有オブジェクトの中で同一のコンテンツコンテナを変更している。変更されたコンテンツコンテナの１つが、共有オブジェクトと同期されて、そのコンテンツコンテナに対する他のいずれの変更も、同期させることができないようになると、競合がもたらされる。
【００６３】
ブロック７００に進むと、競合する変更が、競合ページ上で表示される。競合ページは、対応するマスタページと似通っているが、競合するバージョンが、同期された変更の代わりにハイライトされ、表示されることだけが異なっている。
【００６４】
ブロック７１０に進むと、共有オブジェクトのマスタページ上に競合インジケータが表示される。競合インジケータは、マスタページに関して競合ページが利用できることをユーザに知らせる、ドロップダウンメニュー、タブ、または他の任意の機構であることが可能である。特定のユーザに関連する競合ページに関する競合インジケータは、現在のユーザが、現在のユーザによって生成された競合ページを迅速に識別することができるように、他のユーザらに関連する競合ページに関する競合インジケータとは異質であることが可能である。
【００６５】
ブロック７２０に進むと、競合インジケータが選択されると、競合ページは、マスタページと並んで表示される。ユーザには、マスタページの同期された状態と、対応する競合ページがともに提示される。
【００６６】
ブロック７３０に移ると、ユーザは、競合する変更を調停して、マスタページにマージする。一実施形態では、ユーザは、コンテンツコンテナを選択して、そのコンテンツコンテナが、マスタページとマージされるようにすることができる。別の実施形態では、ユーザは、変更をマスタページ上に直接に実施することができる。さらに別の実施形態では、ユーザは、競合する変更を重要ではないと識別することが可能である。
【００６７】
ブロック７４０に進むと、重要ではないと識別された、競合する変更がパージされる。一実施形態では、競合する変更は、ユーザによって重要ではないと識別されることが可能である。別の実施形態では、競合する変更は、重要ではないと自動的に識別されることが可能である。例えば、ユーザが、いくつかの変更を、対応する競合ページを無視しながら、サーバ上に位置する共有オブジェクトのマスタバージョンと同期させることが可能である。ユーザが調停しなかった、より古い競合ページは、所定の期間が経過した後、重要ではないと識別される。次に、処理は、終了ブロックで終了する。
【００６８】
図８は、共有オブジェクトに対する複数ユーザ変更を同期させるためのプロセスを示す動作流れ図を示す。プロセスは、開始ブロックで始まり、共有オブジェクトの異なるバージョンが、システム全体の様々なロケーションに格納される。ブロック８００に進むと、共有オブジェクトが、ストアからクライアントにダウンロードされる。
【００６９】
判定ブロック８１０に進むと、共有オブジェクトが、共有オブジェクトの最新バージョンであるかどうかの判定が行われる。共有オブジェクトが、共有オブジェクトの最新バージョンである場合、処理は、終了ブロックで終了する。共有オブジェクトが、共有オブジェクトの最新バージョンでない場合、処理は、ブロック８２０に進む。共有オブジェクトは、共有オブジェクトのコンテンツコンテナに対する最新の変更がストアから入手できないため、最新バージョンではない可能性がある。
【００７０】
ブロック８２０に進むと、クライアントが、共有オブジェクトを更新するのに最新の変更データを要することを示すように、要求タグおよびクライアント情報がストアに割り当てられる。クライアント情報は、要求側クライアントを識別するＧＵＩＤ、ならびに共有オブジェクトの最新バージョンをクライアントがストアから要求した時刻を明らかにするタイムスタンプを含むことが可能である。
【００７１】
ブロック８３０に移ると、共有オブジェクトの最新バージョンが、ストアにおいて受け取られる。ストアは、別のクライアントが、最新の変更データでストアにアクセスした際、共有オブジェクトの最新バージョンを受け取ることが可能である。要求側クライアントは、共有オブジェクトの最新バージョンが、ストアによって受け取られたことを知らされる。ブロック８４０に進むと、共有オブジェクトの最新バージョンが、要求側クライアントと同期される。次に、処理は、終了ブロックで終了する。
【００７２】
図９は、非同期通信モードから同期通信モードにシームレスに遷移するためのプロセスを示す動作流れ図を示す。プロセスは、開始ブロックで始まり、共有オブジェクトにアクセスすることが許可されているユーザらを明らかにするピアグループが確立される。
【００７３】
ブロック９００に進むと、クライアントが、サーバ上の共有オブジェクトにアクセスする。クライアントは、その共有オブジェクトに同様にアクセスしている他のクライアント群（すなわち、ピアグループ）に自動的に接続される。共有オブジェクトは、マニフェストファイルに関連する。共有オブジェクトは、対応するマニフェストファイルがシステム内で格納されているロケーションを明らかにする一意ロケーション識別子を含む。
【００７４】
ブロック９１０に進むと、マニフェストファイルが、一意ロケーション識別子によって明らかにされたロケーションから取得される。マニフェストファイルは、システム内で、共有オブジェクトの他のバージョン、および他のインスタンスが格納されているロケーションを明らかにする。マニフェストファイルは、共有オブジェクトのバージョンが格納された、ピアグループに対するピアグループ識別子を含む。
【００７５】
ブロック９２０に進むと、ピアグループ内の他のいずれかのクライアントが、マニフェストファイルによって識別された共有オブジェクトのバージョンまたはインスタンスにアクセスした際、ピアツーピアネットワークが確立される。このため、クライアントは、サーバから切断し、ピアツーピアネットワーク上で共有ファイルにアクセスすることを続けることができる。次に、処理は、終了ブロックで終了する。
【００７６】
図１０は、同期通信モードから非同期通信モードにシームレスに遷移するためのプロセスを示す動作流れ図を示す。プロセスは、開始ブロックで始まり、共有オブジェクトにアクセスすることが許可された、少なくとも２名のユーザ間でピアツーピアネットワークが確立される。
【００７７】
ブロック１０００に進むと、クライアントが、ピアツーピアネットワーク上で共有オブジェクトにアクセスする。共有オブジェクトは、マニフェストファイルに関連する。共有オブジェクトは、システム内で、対応するマニフェストファイルが格納されているロケーションを明らかにする一意ロケーション識別子を含む。
【００７８】
ブロック１０１０に進むと、共有オブジェクトに関連するマニフェストファイルが、一意ロケーション識別子によって明らかにされたロケーションから取得される。マニフェストファイルは、システム内で、共有オブジェクトの他のバージョン、および他のインスタンスが格納されているロケーションを明らかにする。ブロック１０２０に進むと、クライアントは、サーバに接続する。クライアントは、他のいずれのクライアントが、そのサーバに同様に接続されているかを特定する。ブロック１０３０に移ると、クライアントは、ピアツーピアネットワークから、その共有オブジェクトにアクセスすることが許可されている他のクライアントを識別する。ブロック１０４０に進むと、クライアントは、ピアツーピアネットワークが利用できない場合、許可されたクライアントに接続する。次に、処理は、終了ブロックで終了する。
【００７９】
以上の明細、実施例、およびデータにより、本発明の構成の製造および用法の完全な説明が提供される。本発明の趣旨および範囲を逸脱することなく、本発明の多くの実施形態を実施することができるため、本発明は、添付の特許請求の範囲に存する。
【図面の簡単な説明】
【００８０】
【図１】本発明の典型的な実施形態に従って使用することができるコンピューティングデバイスを示す図である。
【図２】本発明による、共有オブジェクトに対する複数ユーザ変更を同期させるためのシステムを示すブロック図である。
【図３】本発明による、共有オブジェクトの相異なる部分を示すリンクされたノード群を示す階層グラフである。
【図４】本発明による、共有オブジェクトのマスタページ、および関連する競合ページを示す図である。
【図５】本発明による、共有オブジェクトに対する複数ユーザ変更を同期させるためのシステムを示すブロック図である。
【図６】本発明による、共有オブジェクトに対する複数ユーザ変更を同期させるためのプロセスを示す動作流れ図である。
【図７】本発明による、共有オブジェクトの、複数のユーザからの競合する変更を調停し、マージするためのプロセスを示す動作流れ図である。
【図８】本発明による、共有オブジェクトに対する複数ユーザ変更を同期させるためのプロセスを示す動作流れ図である。
【図９】本発明による、非同期通信モードから同期通信モードにシームレスに遷移するためのプロセスを示す動作流れ図である。
【図１０】本発明による、同期通信モードから非同期通信モードにシームレスに遷移するためのプロセスを示す動作流れ図である。
【符号の説明】
【００８１】
１００  コンピューティングデバイス
１０２  プロセッサ
１０４  システムメモリ
１０５  オペレーティングシステム
１０６  アプリケーション
１０７  プログラムデータ
１０８  通信モード遷移モジュール
１０９  リムーバブルなストレージ
１１０  リムーバブルでないストレージ
１１２  入力デバイス
１１４  出力デバイス
１１６  通信接続
１１８  他のコンピューティングデバイス群
２００  ユーザ１（自宅）
２０２、２１２、２２２、２３２  キャッシュ
２１０  ユーザ１（職場）
２２０  ユーザ２
２３０  ユーザ３
２４０  ＥＸＣＨＡＮＧＥサーバ
２４２  変更ファイル
２５０  ＷＥＢサーバ
２５２、２６４、２７２  共有オブジェクト
２５４、２６６  マニフェストファイル
２６０  ピアツーピアネットワーク
２６２  仮想サーバ
２７０  電子メール添付ファイル
【図１】
2006195972.tif 000003
【図２】
2006195972.tif 000004
【図３】
2006195972.tif 000005
【図４】
2006195972.tif 000006
【図５】
2006195972.tif 000007
【図６】
2006195972.tif 000008
【図７】
2006195972.tif 000009
【図８】
2006195972.tif 000010
【図９】
2006195972.tif 000011
【図１０】
2006195972.tif 000012