(57)【特許請求の範囲】
【請求項１】
サーバーで遂行される方法において、
該方法が、
クライアントからの同期セッションを開始する要求を処理して、１つ以上のデータアイテムを含む１つ以上のデータレコードを更新するステップと、
前記同期セッションの１つ以上のプロパティに基づき信頼できるクライアントのタイプとして、前記クライアントが選択的に識別されているとき、前記１つ以上のデータレコードに含まれる変更されたデータアイテムのみを送信する、フィールドレベル差を用いるサーバーに関連したデータストアにデータレコードを更新するステップであって、
前記信頼できるクライアントのタイプが前記１つ以上のデータレコードに対する前記サーバーによって定義されたスキーマをサポートするように構成され、該スキーマが所定のデータのタイプに対応している、前記更新するステップと、
前記クライアントが、前記同期セッションの１つ以上のプロパティに基づいて信頼されていないクライアントのタイプとして選択的に識別されており、該信頼されていないクライントのタイプが前記スキーマをサポートするように構成されていない場合には、前記１つ以上のデータレコードに含まれる前記すべてのデータアイテムを、送信する、少なくとも１つ以上のデータレコードにおける前記変更されたデータアイテムを識別するためにレコードレベル差から前記フィールドレベル差への変換を少なくとも遂行することによって、前記サーバーに関連したデータストアにおけるデータレコードを更新するステップと、
を備えた方法。
【請求項２】
前記同期セッションを処理するのに応答して、
１つ以上のデータレコードに関連した１つ以上の変化を識別する変化ログを発生するステップと、
サーバーに関連したデータレポジトリーを更新して、前記発生された変化ログにおいて識別された１つ以上のデータレコードに対して１つ以上の変化を反映させるステップと、を更に備えた請求項１に記載の方法。
【請求項３】
ブリッジクライアントを使用して、別のデータレポジトリーにアクセスし、そしてサーバーに関連した前記更新されたデータレポジトリーに基づいてそのアクセスされた他のデータレポジトリーに記憶されたデータレコードを変更するステップを更に備えた、請求項２に記載の方法。
【請求項４】
他のデータレポジトリーにアクセスする前記ステップは、他のデータレポジトリーを更新するために前記発生された変化ログを処理することを含む、請求項３に記載の方法。
【請求項５】
１つ以上のデータレコードへの更新を、１つ以上のクライアントから受け取るステップと、
前記受け取った更新と、サーバーに関連したデータストアに記憶されたデータレコードとの間の１つ以上の衝突を識別するステップと、
前記１つ以上のクライアントからの前記更新を混合させるステップと、
を更に備えた請求項１に記載の方法。
【請求項６】
同期セッションを要求している１つ以上の前記クライアントのうちの直近のクライアントにプライオリティを付与することにより前記識別された１つ以上の衝突を解消するステップを更に備えた、請求項５に記載の方法。
【請求項７】
１つ以上のクライアントが信頼できないクライアントとして識別されたことが検出されると、信頼できないクライアントに関連した変化のセットにおける１つ以上の衝突を、その信頼できないクライアントに関連した変化のセットに含まれる１つ以上のデータレコードに対してサーバーにより定義されたスキーマから識別するステップを更に備えた、請求項１に記載の方法。
【請求項８】
前記１つ以上のクライアントを、信頼できるクライアント及び信頼できないクライアントの一方として選択的に識別する前記ステップは、データレコードに含まれたデータアイテムに対する独特の識別子を含む同期セッションの１つ以上のプロパティを検出することを含む、請求項１に記載の方法。
【請求項９】
コンピュータプログラムでエンコードされるコンピュータ読み取り可能な記録媒体において、前記プログラムは、データ処理装置により実行されたときに、そのデータ処理装置が、
クライアントからの同期セッションを開始する要求を処理して、１つ以上のデータアイテムを含む１つ以上のデータレコードを更新し、
前記同期セッションの１つ以上のプロパティに基づき信頼できるクライアントのタイプとして、前記クライアントが選択的に識別されているとき、前記１つ以上のデータレコードに含まれる変更されたデータアイテムのみを送信する、フィールドレベル差を用いるサーバーに関連したデータストアにデータレコードを更新し、
前記信頼できるクライアントのタイプが前記１つ以上のデータレコードに対する前記サーバーによって定義されたスキーマをサポートするように構成され、該スキーマが所定のデータのタイプに対応しており、
前記クライアントが、前記同期セッションの１つ以上のプロパティに基づいて信頼されていないクライアントのタイプとして選択的に識別されており、該信頼されていないクライントのタイプが前記スキーマをサポートするように構成されていない場合には、前記１つ以上のデータレコードに含まれる前記すべてのデータアイテムを、送信する、少なくとも１つ以上のデータレコードにおける前記変更されたデータアイテムを識別するために、レコードレベル差から前記フィールドレベル差への変換を少なくとも遂行することによって、前記サーバーに関連したデータストアにおけるデータレコードを更新する、
ことを含むオペレーションを遂行するようにさせるインストラクションで構成される、コンピュータ読み取り可能な記録媒体。
【請求項１０】
前記インストラクションは、前記データ処理装置によって実行されるとき、更に、データ処理装置が、
１つ以上のデータレコードに関連した１つ以上の変化を識別する変化ログを発生し、
サーバーに関連したデータレポジトリーを更新して、その発生された変化ログにおいて識別された１つ以上のデータレコードに対して１つ以上の変化を反映させる、
ことを含むオペレーションを遂行させるようにさせる、請求項９に記載のコンピュータ読み取り可能な記録媒体。
【請求項１１】
前記インストラクションは、前記データ処理装置によって実行されるとき、更に、データ処理装置が、ブリッジクライアントを使用して、別のデータレポジトリーにアクセスし、そしてサーバーに関連した前記更新されたデータレポジトリーに基づいてそのアクセスされた他のデータレポジトリーに記憶されたデータレコードを変更するようにさせる、請求項１０に記載のコンピュータ読み取り可能な記録媒体。
【請求項１２】
前記インストラクションは、前記データ処理装置によって実行されるとき、更に、データ処理装置が、他のデータレポジトリーにアクセスし、前記発生された変化ログを処理して、他のデータレポジトリーを更新するようにさせる、請求項１１に記載のコンピュータ読み取り可能な記録媒体。
【請求項１３】
前記インストラクションは、前記データ処理装置によって実行されるとき、更に、データ処理装置が、
１つ以上のデータレコードへの更新を、前記信頼できるクライアントのタイプまたは前記信頼できないタイプの前記１つ以上のクライアントから受け取り、
前記受け取った更新と、サーバーに関連したデータストアに記憶されたデータレコードとの間の１つ以上の衝突を識別し、
前記１つ以上のクライアントからの更新を混合させる、
ことを含むオペレーションを遂行するようにさせる、請求項９に記載のコンピュータ読み取り可能な記録媒体。
【請求項１４】
前記インストラクションは、前記データ処理装置によって実行されるとき、更に、データ処理装置が、同期セッションを要求している１つ以上のクライアントのうちの直近のクライアントにプライオリティを付与することにより前記識別された１つ以上の衝突を解決する、
ことを含むオペレーションを遂行するようにさせる、請求項１３に記載のコンピュータ読み取り可能な記録媒体。
【請求項１５】
前記インストラクションは、前記データ処理装置によって実行されるとき、更に、データ処理装置が、
前記クライアントが信頼できないクライアントのタイプとして識別されたことが検出されたとき、該信頼できないクライアントのタイプに関連した変化のセットにおける１つ以上の食い違いを、その信頼できないクライアントのタイプに関連した変化のセットに関係する１つ以上のデータレコードに対してサーバーにより定義されたスキーマから識別するようにさせる、請求項９に記載のコンピュータ読み取り可能な記録媒体。
【請求項１６】
前記インストラクションは、前記データ処理装置によって実行されるとき、更に、データ処理装置が、前記データレコードに含まれたデータアイテムに対する独特の識別子を含む同期セッションの１つ以上のプロパティの検出することにより、１つ以上のデータアイテムを含む１つ以上のデータレコードを更新するように前記クライアントからの同期セッションを開始する要求を処理するようにさせる、請求項１０に記載のコンピュータ読み取り可能な記録媒体。
【請求項１７】
１つ以上のクライアントへの１つ以上の接続をオープンすることのできるトランスポートプロトコルと、
そのオープンされた１つ以上の接続を経てサーバーが１つ以上のデータクラスを１つ以上のクライアントと同期できるようにする１つ以上の同期プロトコルと、
を動作するよう構成されたプロセッサを備え、前記１つ以上の同期プロトコルは、サーバーが、
１つ以上のデータアイテムを含む１つ以上のデータレコードを更新するために１つ以上のクライアントからの同期セッションを開始する要求を処理し、
前記同期セッションの１つ以上のプロパティに基づき信頼できるクライアントのタイプとして、前記クライアントが選択的に識別されているとき、前記１つ以上のデータレコードに含まれる変更されたデータアイテムのみを送信する、フィールドレベル差を用いるサーバーに関連したデータストアにデータレコードを更新し、
前記信頼できるクライアントのタイプが前記１つ以上のデータレコードに対する前記サーバーによって定義されたスキーマをサポートするように構成され、該スキーマが所定のデータのタイプに対応しており、
前記クライアントが、前記同期セッションの１つ以上のプロパティに基づいて信頼されていないクライアントのタイプとして選択的に識別されており、該信頼されていないクライントのタイプが前記スキーマをサポートするように構成されていない場合には、前記１つ以上のデータレコードに含まれる前記すべてのデータアイテムを、送信する、少なくとも１つ以上のデータレコードにおける前記変更されたデータアイテムを識別するために、レコードレベル差から前記フィールドレベル差への変換を少なくとも遂行することによって、前記サーバーに関連したデータストアにおけるデータレコードを更新する、
ことができるようにするサーバー。
【請求項１８】
前記プロセッサは、同期セッションを処理するのに応答して、
１つ以上のデータレコードに関連した１つ以上の変化を指示する変化ログを発生し、
サーバーに関連したデータレポジトリーを更新して、前記発生された変化ログにおいて識別された１つ以上のデータレコードに対して１つ以上の変化を反映させる、
ために１つ以上の同期プロトコルを動作するように構成される、請求項１７に記載のサーバー。
【請求項１９】
前記プロセッサは、ブリッジクライアントを使用して、別のデータレポジトリーにアクセスし、
そしてサーバーに接続された前記更新されたデータレポジトリーに基づいてそのアクセスされたデータレポジトリーに記憶されたデータレコードを変更するために、１つ以上の同期プロトコルを動作するように構成される、請求項１８に記載のサーバー。
【請求項２０】
前記プロセッサは、前記発生された変化ログを処理することによって他のデータレポジトリーを更新することにより他のデータレポジトリーを修正することを含むオペレーションを遂行するために、１つ以上の同期プロトコルを動作するように構成される、請求項１９に記載のサーバー。
【請求項２１】
前記プロセッサは、
１つ以上のデータレコードへの更新を、１つ以上のクライアントから受け取り、
その受け取った更新と、サーバーに関連したデータストアに記憶されたデータレコードとの間の１つ以上の衝突を識別し、
１つ以上のクライアントからの更新を混合させる、ことを含むオペレーションを遂行するために１つ以上の同期プロトコルを動作するように構成される、請求項１７に記載のサーバー。
【請求項２２】
前記プロセッサは、
同期セッションを要求している１つ以上のクライアントのうちの直近のクライアントにプライオリティを付与することにより前記識別された１つ以上の衝突を解決する
ことを含むオペレーションを遂行するために１つ以上の同期プロトコルを動作するように構成される、請求項２１に記載のサーバー。
【請求項２３】
前記プロセッサは、前記１つ以上のクライアントが信頼できないクライアントとして識別されたことが検出されたとき、該信頼できないクライアントに関連した変化のセットに関連する前記１つ以上のデータレコードに対してサーバーにより定義されたスキーマから前記信頼できないクライアントのタイプに関連した変化のセットにおける１つ以上の食い違いを識別することを含む１つ以上のオペレーションを遂行するために、１つ以上の同期プロトコルを動作するように構成される、請求項１７に記載のサーバー。
【請求項２４】
前記プロセッサは、データレコードに含まれたデータアイテムに対する独特の識別子を含む同期セッションの１つ以上のプロパティを検出することにより、１つ以上のデータアイテムを含む１つ以上のデータレコードを更新するように前記クライアントからの前記同期セッションを開始する要求を処理するように構成される、請求項１７に記載のサーバー。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ同期サーバープロセスに係る。
【背景技術】
【０００２】
リモートデータレポジトリーとして働くネットワークアプリケーションは、ローカルクライアントからアップロードされたデータを記憶することができる。リモートデータレポジトリーに記憶されたデータは、これを変更し、管理し、他のクライアントと共有し、ウェブページを構成するように使用し、等を行うことができる。クライアントとサーバーとの間のデータ同期は、オープンモバイルアリアンス／データ同期プロトコルＯＭＡ  ＤＳ／ＳｙｎｃＭＬ（以前はＳｙｎｃＭＬプロトコルとして知られていた）のような同期プロトコルを使用して遂行することができる。ＯＭＡ  ＤＡ／ＳｙｎｃＭＬは、データクラスのシリアル同期を可能にする同期プロトコルで、データクラス当たり５つ以上のラウンドトリップを要求するものである。
【発明の概要】
【０００３】
とりわけ、種々の同期サーバープロセスを遂行する同期サーバーを形成する技術及びシステムについて開示する。
【０００４】
１つの態様において、データ同期セッションの処理は、１つ以上のクライアントからの同期セッションを開始する要求を処理して、１つ以上のデータアイテムを含む１つ以上のデータレコードを更新することを含む。１つ以上のクライアントは、同期セッションの１つ以上のプロパティに基づいて信頼できるクライアント及び信頼できないクライアントの一方として選択的に識別され、信頼できるクライアントは、１つ以上のデータクラスに対してサーバーにより定義されたスキーマをサポートするように構成される。１つ以上のクライアントは、１つ以上のデータレコードに対して変化したデータアイテムのみを送信するフィールドレベル差、又は１つ以上のデータレコードに含まれた全てのデータアイテムを送信するレコードレベル差をサポートするように構成されるものとして検出される。
【０００５】
その実施形態は、次の特徴の１つ以上を任意に含むことができる。１つ以上のクライアントがレコードレベル差をサポートするように構成されたことを検出したときには、１つ以上のデータレコードにおける変化したデータアイテムを識別することができる。又、同期セッションを処理するのに応答して、１つ以上のデータレコードに関連した１つ以上の変化に対して変化ログを発生することができる。更に、同期セッションを処理するのに応答して、サーバーに関連したデータレポジトリーを更新して、その発生された変化ログにおいて識別された１つ以上のデータレコードに対して１つ以上の変化を反映させることができる。更に、ブリッジクライアントを使用して、別のデータレポジトリーにアクセスし、そしてサーバーに関連した前記更新されたデータレポジトリーに基づいてそのアクセスされた他のデータレポジトリーに記憶されたデータレコードを変更することができる。又、他のデータレポジトリーにアクセスし変更することは、他のデータレポジトリーを更新するために前記発生された変化ログを処理することを含む。更に、１つ以上のデータレコードへの更新を、１つ以上のクライアントから受け取ることができ、クライアントとサーバーのデータストアとの間の１つ以上の衝突を識別することができる。クライアントからの更新を混合させることができる。又、前記識別された１つ以上の衝突は、同期セッションを要求している１つ以上のクライアントのうちの最も最近のクライアントにプライオリティを指定することにより解消することができる。更に、１つ以上のクライアントが信頼できないクライアントとして識別されたことが検出されると、信頼できないクライアントに関連した変化のセットにおいて、その信頼できないクライアントに関連した変化のセットに含まれる１つ以上のデータレコードに対してサーバーにより定義されたスキーマから１つ以上の食い違いを検出することができる。クライアントからの変化の１つ以上のプロパティは、データレコードに含まれたデータアイテムに対する独特の識別子を含むことができる。
【０００６】
別の態様において、本明細書に述べる技術は、コンピュータ読み取り可能な媒体上で実施されて、データ処理装置が種々のオペレーションを遂行するようにさせるよう動作できるコンピュータプログラム製品として具現化することができる。このコンピュータプログラム製品は、データ処理装置が、１つ以上のクライアントからの同期セッションを開始する要求を処理して、１つ以上のデータアイテムを含む１つ以上のデータレコードを更新するようにさせるよう動作できる。又、コンピュータプログラム製品は、データ処理装置が、１つ以上のクライアントを、同期セッションの１つ以上のプロパティに基づき信頼できるクライアント及び信頼できないクライアントの一方として選択的に識別するようにさせるよう動作でき、信頼できるクライアントは、データレコードに対してサーバーによって定義されたスキーマについて関係データ完全性制約を実施するように構成される。更に、コンピュータプログラム製品は、データ処理装置が、１つ以上のクライアントが、１つ以上のデータレコードに対して変化したデータアイテムのみを送信するフィールドレベル差をサポートするように構成されるか、又は１つ以上の変化したデータレコードに含まれた全てのデータアイテムを送信するレコードレベル差をサポートするように構成されるかを検出するようにさせるよう動作できる。
【０００７】
その実施形態は、次の特徴の１つ以上を任意に含むことができる。コンピュータプログラム製品は、データ処理装置が、１つ以上のクライアントがレコードレベル差をサポートするように構成されたことを検出したときには、１つ以上のデータレコードにおける変化したデータアイテムを識別するようにさせるよう動作できる。コンピュータプログラム製品は、データ処理装置が、同期セッションを処理するのに応答して、１つ以上のデータレコードに関連した１つ以上の変化に対して変化ログを発生し、又、サーバーに関連したデータレポジトリーを更新して、その発生された変化ログにおいて識別された１つ以上のデータレコードに対して１つ以上の変化を反映させるようにするよう動作できる。コンピュータプログラム製品は、データ処理装置が、ブリッジクライアントを使用して、別のデータレポジトリーにアクセスし、そしてサーバーに接続された前記更新されたデータレポジトリーに基づいてそのアクセスされた他のデータレポジトリーを変更するようにさせるよう動作できる。コンピュータプログラム製品は、データ処理装置が、他のデータレポジトリーにアクセスすることが、前記発生された変化ログを処理して他のデータレポジトリーを更新することを含むようにさせるよう動作できる。更に、コンピュータプログラム製品は、データ処理装置が、１つ以上のデータレコードへの更新を、１つ以上のクライアントから受け取るようにさせるよう動作できる。その受け取った更新と、サーバーに関連したデータストアに記憶されたデータレコードとの間の１つ以上の衝突が識別される。クライアントからの更新を混合して、受信者のデータストアに適用されたときに全てのリモートデータストアに同じデータセットを生じさせるデータセットへの１組の更新を各参加者（クライアント又はサーバーデータストア）が受け取ることを保証する。コンピュータプログラム製品は、データ処理装置が、１つ以上のクライアントのうちの最も最近のクライアントにプライオリティを指定することにより前記識別された１つ以上の衝突を解消するようにさせるよう動作できる。更に、コンピュータプログラム製品は、データ処理装置が、１つ以上のクライアントが信頼できないクライアントとして識別されたことが検出されると、信頼できないクライアントに関連した変化のセットにおける１つ以上の食い違いを、その信頼できないクライアントに関連した変化のセットに含まれる１つ以上のデータレコードに対してサーバーにより定義されたスキーマから識別するようにさせるよう動作できる。同期セッションの１つ以上のプロパティは、データレコードに含まれたデータアイテムに対する独特の識別子を含むことができる。
【０００８】
別の態様において、システムは、１つ以上の同期モードでデータを同期するように構成された１つ以上のクライアント装置への１つ以上の接続をオープンすることのできるトランスポートプロトコルと、そのオープンされた１つ以上の接続を経てサーバーが１つ以上のデータクラスを１つ以上のクライアントと同期できるようにする１つ以上の同期プロトコルとを動作するよう構成されたプロセッサを備えている。１つ以上の同期プロトコルは、サーバーが、種々のオペレーションを遂行できるようにする。同期プロトコルは、サーバーが１つ以上のクライアントからの同期セッションを開始する要求を処理できるようにする。又、１つ以上の同期プロトコルは、サーバーが、１つ以上のクライアントを、同期セッションの１つ以上のプロパティに基づいて信頼できるクライアント及び信頼できないクライアントの一方として選択的に識別できるようにし、信頼できるクライアントは、データレコードに対してサーバーにより定義されたスキーマをサポートするように構成される。更に、１つ以上の同期プロトコルは、サーバーが、１つ以上のクライアントが、１つ以上のデータレコードに対して変化したデータアイテムのみを送信するフィールドレベル差をサポートするように構成されるか、又は１つ以上のデータレコードに含まれた全てのデータアイテムを送信するレコードレベル差をサポートするように構成されるかを検出できるようにする。
【０００９】
その実施形態は、次の特徴の１つ以上を任意に含むことができる。プロセッサは、１つ以上のクライアントがレコードレベル差をサポートするように構成されたときには、１つ以上のデータレコードにおける変化したデータアイテムを識別するために１つ以上の同期プロトコルを動作するように構成される。更に、プロセッサは、同期セッションを処理するのに応答して、１つ以上のデータレコードに関連した１つ以上の変化に対して変化ログを発生し、サーバーに関連したデータレポジトリーを更新して、前記発生された変化ログにおいて識別された１つ以上のデータレコードに対して１つ以上の変化を反映させるために、１つ以上の同期プロトコルを動作するように構成される。プロセッサは、ブリッジクライアントを使用して、別のデータレポジトリーにアクセスし、そしてサーバーに接続された前記更新されたデータレポジトリーに基づいてそのアクセスされたデータレポジトリーに記憶されたデータレコードを変更するために１つ以上の同期プロトコルを動作するように構成される。又、プロセッサは、前記発生された変化ログを処理して他のデータレポジトリーを更新することにより他のデータレポジトリーを変更するために１つ以上の同期プロトコルを動作するように構成される。更に、プロセッサは、１つ以上のデータレコードへの更新を、１つ以上のクライアントから受け取り、その受け取った更新と、サーバーに関連したデータストアに記憶されたデータレコードとの間の１つ以上の衝突を識別するために１つ以上の同期プロトコルを動作するように構成される。１つ以上のクライアントからの更新を混合させることができる。プロセッサは、同期セッションを要求している１つ以上のクライアントのうちの最も最近のクライアントにプライオリティを指定することにより前記識別された１つ以上の衝突を解消するために１つ以上の同期プロトコルを動作するように構成される。更に、サーバーは、１つ以上のクライアントが信頼できないクライアントとして識別されたことが検出されると、信頼できないクライアントに関連した変化のセットにおける１つ以上の食い違いを、その信頼できないクライアントに関連した変化のセットに含まれる１つ以上のデータレコードに対してサーバーにより定義されたスキーマから識別するように構成される。同期セッションの１つ以上のプロパティは、データレコードに含まれたデータアイテムに対する独特の識別子を含む。
【発明の効果】
【００１０】
本発明による技術及びシステムは、潜在的に種々の効果を発揮するように具現化することができる。本明細書に述べる同期サーバー処理は、種々の粒度で同期変化処理を行うことができる。例えば、同期サーバーは、変化したデータ（差）しか交換されないフィールドレベル差を受け容れることができる。これは、他のクライアント及びサーバーに対して変化しないデータアイテムを不必要に更新することを減少できる。更に、同期サーバーは、信頼できるクライアント及び信頼できないクライアントをサポートする。信頼できるクライアントとインターフェイスするときには、同期サーバーは、信頼できないクライアントに対して必要な幾つかの完全性チェックをスキップして、サーバーの拡張性を改善することができる。
【図面の簡単な説明】
【００１１】
【図１】複数のクライアントタイプ及び複数のクライアントを１つ以上のサーバーと同期させるための規範的システムを示すブロック図である。
【図２】同期データベース及びクライアント状態を維持するための同期サーバーの規範的内部モデルを示す。
【図３】同期サーバーのための規範的アプリケーションアーキテクチャーを示すブロック図である。
【図４】規範的同期サーバーシステムアーキテクチャーを示すブロック図である。
【図５ａ】同期サーバー処理の一例を示す。
【図５ｂ】同期サーバー処理の一例を示す。
【図５ｃ】同期サーバー処理の一例を示す。
【図５ｄ】同期サーバー処理の一例を示す。
【図５ｅ】同期サーバー処理の一例を示す。
【図５ｆ】同期サーバー処理の一例を示す。
【図５ｇ】同期サーバー処理の一例を示す。
【図５ｈ】同期サーバー処理の一例を示す。
【図６】ＲＬＤからＦＬＤへの変換を遂行するための規範的サーバープロセスを示す。
【発明を実施するための形態】
【００１２】
種々の図面において同じ要素は同じ参照記号及び呼称で示されている。
【００１３】
サーバーと複数のクライアントとの間の同期を管理するための技術及びシステムについて開示する。
【００１４】
図１は、サーバーと複数のクライアントとの間でデータを同期するための規範的システム１００を示すブロック図である。システム１００は、ネットワーク１７０を経てユニバーサルサーバー１４０へ接続された同期サーバー１１０を備えている。同期サーバー１１０は、ネットワーク１９０を経て１つ以上のウェブクライアント１２０とインターフェイスするように設計される。又、同期サーバー１１０は、ネットワーク１８０を経て１つ以上のクライアント装置１３０とインターフェイスするようにも設計される。同期サーバー１１０は、この同期サーバー１１０がウェブクライアント１２０及びクライアント装置１３０のためのデータストアとして動作できるようにデータレポジトリー１１２へ接続される。データベースマネージメントシステム（ＤＢＭＳ）データベースは、使用できるデータレポジトリー１１２の１つのタイプである。ユニバーサルサーバー１４０は、ネットワーク１６０を経てデスクトップ及びラップトップのような１つ以上のクライアントコンピュータ１５０とインターフェイスするように設計される。ユニバーサルサーバー１４０は、このユニバーサルサーバー１４０がユニバーサルデータストアとして動作できるようにユニバーサルデータレポジトリー１４２へ接続される。ネットワーク１６０、１７０、１８０及び１９０は、ローカルエリアネットワーク（ＬＡＮ）、ワイドエリアネットワーク（ＷＡＮ）、イーサネット、インターネット、等の種々のワイヤード及びワイヤレスネットワークを含むことができる。ネットワーク１６０、１７０、１８０及び１９０は、単一のネットワークでもよいし、或いはその各々が個別のネットワークでもよい。
【００１５】
ユニバーサルサーバー１４０は、ウェブサービス及びインターネットツール、例えば、Ｄｏｔ  Ｍａｃ（登録商標）ウェブサービス及びツールを提供するウェブサーバーを含むことができる。利用可能なウェブサービスは、デスクトップ又はラップトップのオペレーティングシステム（ＯＳ）と一体化することができる。例えば、Ｄｏｔ  Ｍａｃ（登録商標）サービス及びツールは、Ｍａｃ（登録商標）ＯＳと密接に一体化することができる。利用可能なＤｏｔ  Ｍａｃ（登録商標）サービスの１つは、Ｍａｃ（登録商標）ＯＳデスクトップに他のボリュームとしてマウントできるｉＤｉｓｋｓ（登録商標）オンラインディスク記憶サービスを含む。又、別のユーザｉＤｉｓｋ（登録商標）のパブリック部分をデスクトップにマウントすることもできる。ｉＤｉｓｋ（登録商標）を使用して、ユーザは、ファイルをデスクトップへアップロードし及びデスクトップからダウンロードすることができる。又、ｉＷｅｂ（登録商標）は、ｉＤｉｓｋ（登録商標）へアップロードして公表することのできるウェブページをユーザが生成できるようにする。同様に、とりわけ、ｉＣａｌ（登録商標）、ｉＭｏｖｅ（登録商標）、ｉＰｈｏｔｏ（登録商標）、ＧａｒａｇｅＢａｎｄ（登録商標）、及びｉＴｕｎｅ（登録商標）ライブラリーツールを使用して、他のデータをｉＤｉｓｋ（登録商標）へアップロードし、及び／又はｉＤｉｓｋ（登録商標）からダウンロードすることができる。他のＤｏｔ  Ｍａｃ（登録商標）サービスは、ポストオフィスプロトコル（ＰＯＰ）及びインターネットメッセージアクセスプロトコル（ＩＭＡＰ）の両方をサポートする＠ｍａｃ．ｃｏｍを通してのウェブｅ−メールサービスを含む。
【００１６】
ユニバーサルサーバー１４０は、ウェブベースディストリビューテッドオーサリングアンドバージョニング（ＷｅｂＤＡＶ）上に積層された構造化データ同期セマンティックを使用してコンピュータ対コンピュータの同期をとることができる。ＷｅｂＤＡＶは、ユーザがリモートワールドワイドウェブサーバー上でファイルを協力して編集及び管理できるようにするハイパーテキストトランスファープロトコル（ＨＴＴＰ）への１組の拡張である。ＷｅｂＤＡＶは、ユニバーサルサーバー１４０のようなリモートサーバー又はウェブサーバー上でドキュメントを生成し、変更し、移動するための機能を提供する。ＷｅｂＤＡＶは、コンピュータによりどこからでもアクセスできる汎用ウェブベースファイル記憶装置を可能にする。
【００１７】
オペレーション中に、ＷｅｂＤＡＶプロトコルは、各クライアントが特定のリソースをロックして、別のクライアントによる望ましからぬ変更を防止できるようにする。又、ＷｅｂＤＡＶは、著者、変更日付、等の情報を生成し、除去し、質問するような種々の特徴もサポートする。ＷｅｂＤＡＶは、リソース（ウェブページ又は他のドキュメント等の）をコピーしてサーバーのネームスペース内で移動できるようにするネームスペース管理をサポートする。更に、ＷｅｂＤＡＶは、リソースの生成、除去及び作表を可能にする。
【００１８】
ＷｅｂＤＡＶ上に積層される構造化データ同期セマンティックは、コンピュータ対コンピュータ同期を可能にする同期ディストリビューテッドオーサリングアンドバージョニング（ＳｙｎｃＤＡＶ）プロトコルを含むことができる。例えば、ＳｙｎｃＤＡＶプロトコルは、Ｍａｃ（登録商標）ＯＳ  Ｘ（Tiger/Leopard）におけるＭａｃ（登録商標）対Ｍａｃ（登録商標）同期を可能にする。又、ＳｙｎｃＤＡＶプロトコルは、コンピュータがｉＤｉｓｋ（登録商標）又は他のコンピュータと同期をとって、種々のユーザデータ、例えば、アドレス帳エントリー、ｉＣａｌ日付、サファリブックマーク、キーチェーン、メールアカウント、メールルール、メール署名、スマートメールボックス、等を更新し及び同期させることができるようにする。
【００１９】
ウェブクライアント１２０は、種々のＤｏｔ  Ｍａｃ（登録商標）ウェブアプリケーションを含むことができる。更に、クライアント装置１３０は、移動装置、例えば、移動電話１３２、パーソナルデジタルアシスタント（ＰＤＡ）１３４、ハンドヘルドデータ処理装置１３６、等、を含むことができる。移動電話１３２は、スマートホン及び一体型移動装置、例えば、ｉＰｈｏｎｅ（登録商標）を含むことができる。又、ハンドヘルドデータ処理装置は、オーディオ再生装置、例えば、ＭＰ３プレーヤ及びｉＰｏｄ（登録商標）装置を含むことができる。
【００２０】
同期は、データストアが一貫したものであると分かった最後のとき以来各データストアに生じた変化を周期的に比較することにより２つの個別のデータストア間に一貫性を維持するプロセスである。データストアは、片側にウェブクライアント１２０及びクライアント装置１３０を、そして他側に同期サーバー１１０及びユニバーサルサーバー１４０を含むことができる。各側とデータを同期させるために、データストアは、種々の能力を持つように構成される。例えば、各データストアは、必要なときに全てのデータを供給するように構成される。更に、各データストアは、最後の同期のとき以来の変化を識別し供給するように構成される。各データストアは、同期状態に保持されるべきスキーマに合意するように構成される。各データストアは、データ表現に合意するように構成される。各データストアは、同期プリミティブのセマンティック（即ち、追加、更新、削除）に合意するように構成される。更に、各データストアは、データストアの破損を回避するために同期中に問題が生じたときに以前の状態へロールバックするように構成される。
【００２１】
同期されたデータは、関係モデルに従い、構造化データタイプ（エンティティ）の定義をグループ分けする「スキーマ」又は「データクラス」へと分割される。各データクラスは、関連するエンティティ及びプロパティのネットワークであるスキーマによって表される。所与のデータクラス内のエンティティは、「関係」を経て互いに参照する。個別のデータクラスにおけるエンティティ間の関係は、禁止され、従って、各データクラスは、他のデータクラスと完全に独立している。ユーザの観点から、データクラスは、個別の専用のアプリケーションから管理されるように見える。例えば、「連絡先」データクラスは、アドレス帳アプリケーションにより主として管理することができ、一方、「カレンダー」データクラスは、カレンダーアプリケーションにより管理することができる。
【００２２】
同期サーバー１１０は、低速、リセット及び高速を含む種々の同期モードを可能にする。クライアント装置とサーバーとが同期する最初のときに、データクラスの全てのデータが、同一と考えられる既存のデータアイテムに「一致」するように交換される。その後の同期オペレーションに対する同期及びネットワーク帯域巾使用を最適化するため、クライアント装置１３０及びサーバー１１０は、その対が同期した最後のとき以来変化したデータだけを交換するだけでよい。従って、各エンティティ（即ち、クライアント装置又はサーバー）は、どんなローカル変化を他のエンティティに送らねばならないか決定できねばならない。更に、各エンティティは、「高速」同期を再開できるまでにより多くのデータの交換を必要とする状況が生じたかどうか検出できねばならない。
【００２３】
低速同期モードは、クライアント装置１３０と同期サーバー１１０が初めて同期するときにその後の相違のみのデータ交換に対する共通基線を確立するために要求される。低速同期中には、クライアント装置１３０がデータクラスの全てのデータをサーバー１１０に送信する。サーバーは、これらのデータアイテムを、サーバー１１０が既に知っているデータアイテムと一致させるよう試みる。適切な「アイデンティティ一致」が行われないと、データの望ましからぬ複写又は混合が生じることになる。次いで、同期サーバー１１０は、クライアント装置１３０におけるデータアイテム欠落で応答する。
【００２４】
リセット同期モードは、サーバーのデータでクライアント装置１３０におけるデータクラスに対する全データをリセットするのに使用される。これは、データ構造体がクライアント装置１３０へプッシュされたとき、或いはサーバー１１０又はクライアント装置１３０が装置のローカルデータの崩壊を決定した場合に生じる。クライアント装置１３０は、データを送信せず、又、サーバーは、データクラスに対する完全なデータ構造体で応答する。
【００２５】
高速同期モードは、特に、限定帯域巾接続を使用するときに、最も効率的なモードである。クライアント装置１３０は、同期サーバー１１０との最後の同期以来変化したデータのみを送信する。同期サーバー１１０は、クライアント装置１３０の外部で変化したデータのみで応答する。
【００２６】
同期サーバー１１０は、中央データレポジトリー１４２に同期されたデータへの読み取り／書き込みアクセスを複数のウェブクライアント１２０及びクライアント装置１３０に与える拡張性のある解決策である。同期サーバー１１０は、同期データレポジトリー１１２に記憶された１つ以上のデータレコードを更新するために複数のウェブクライアント１２０及びクライアント装置１３０に対する同期トランザクションを管理する。同期サーバー１１０は、同期セッションを処理し、更新された同期データレポジトリー１１２は、ユニバーサルサーバー１４０に関連した中央データレポジトリー１４２と同期される。同期データレポジトリー１１２を中央データレポジトリー１４２と同期させる際に、同期サーバー１１０は、ユニバーサルサーバー１４０の別のクライアントとして動作する。従って、ユニバーサルサーバー１４０に対して、同期サーバー１１０は、コンピュータクライアント１５０の１つのように振舞う。
【００２７】
効率的で且つ拡張性のある同期サービスを可能にするために、同期サーバー１１０は、構造化問合せ言語（ＳＱＬ）を必要としない埋め込み型Ｂ−Ｔｒｅｅに基づいて同期データレポジトリー１１２を実施する。同期データレポジトリー１１２は、実際のデータベースを除いて同期サーバー１１０上の全てを含むＢｅｒｋｅｌｅｙ  ＤＢ（登録商標）のような埋め込み型データ記憶装置である。Ｂｅｒｋｅｌｅｙ  ＤＢのＪａｖａ版（“Ｂｅｒｋｅｌｅｙ  ＤＢ  ＪＥ”又は“ＢＤＢ  ＪＥ”又は“ＪＥ”）は、純粋なＪａｖａデータベース（カリフォルニア州レッドウッドシティのＯｒａｃｌｅ（登録商標）社からの）である。Ｂｅｒｋｅｌｅｙ  ＤＢは、高拡張性、高性能のトランザクションＢ−Ｔｒｅｅデータベースをなす。実施は、Ｂｅｒｋｅｌｅｙ  ＤＢに限定されない。ある実施では、ハイバーネート(Hibernate)のような他の持続的メカニズムを使用することができる。ハイバーネートは、Ｊａｖａ及び．Ｎｅｔのオブジェクト／関係持続及び問合せサービスである。
【００２８】
ＯｒａｃｌｅのＢｅｒｋｅｌｅｙ  ＤＢは、高速で信頼性のある且つローカルなデータ持続性を開発者に与えるオープンソース埋め込み型データベースエンジンである。埋め込み型データベースとして、Ｂｅｒｋｅｌｅｙ  ＤＢライブラリーは、ウェブクライアントアプリケーション１２０に直接リンクする。Ｂｅｒｋｅｌｅｙ  ＤＢとリンクした後に、ウェブクライアントアプリケーション１２０は、簡単なファンクションコールによりデータをローカルにアクセスすることができ、これにより、クライアント／サーバーアーキテクチャーに通常使用されるネットワークベースプロトコルの性能ペナルティを排除することができる。同様に、Ｂｅｒｋｅｌｅｙ  ＤＢは、非ＳＱＬデータベースであるから、アプリケーション開発者は、特定のデータアクセスパターンを定義することができる。Ｂｅｒｋｅｌｅｙ  ＤＢにより提供される制御の量及びオプションが与えられると、アプリケーション開発者は、データ自体へのより最適で且つ予想可能なアクセスを与えることができる。
【００２９】
ローカル同期データレポジトリー１１２は、ＳＱＬオーバーヘッドをもたない非関係のものである。又、ローカル同期データレポジトリー１１２は、クライアント／サーバーオーバーヘッドをもたないインプロセスである。又、ローカル同期データレポジトリー１１２は、データへの便利なコレクションスタイルのインターフェイスをなすことができる。更に、ユーザごとに個別のストアをもつことで、リスクが低減される。
【００３０】
同期サーバー１１０は、バイナリーデータプロパティに対する特殊ケースハンドリングを有する（例えば、サーバー１１０により定義されるスキーマにおいて「データ」により表される）。“ｃｏｍ．ａｐｐｌｅ．Ｃｏｎｔａｃｔｓ”スキーマにおける一例は、“ｃｏｍ．ａｐｐｌｅ．ｃｏｎｔａｃｔｓ．Ｃｏｎｔａｃｔ”エンティティにおける「映像」プロパティである。持続性ストアは、これらデータタイプをシリアル化し記憶することができるが、よりコンパクトなデータタイプを使用してプロパティから個別にそれらを記憶するのがより効率的である。同期サーバー１１０は、バイナリーの大きなオブジェクト（ＢＬＯＢ）を“Ｂｌｏｂ”ディクショナリーに記憶し、データクラス及びレコードＩＤによりそれらを編成することができる。ＢＬＯＢは、データベースマネージメントシステムに単一エンティティとして記憶されたバイナリーデータの集合である。ＢＬＯＢは、映像、音声、又は他のマルチメディアオブジェクトを含む。ある場合には、バイナリーの実行可能なコードをｂｌｏｂとして記憶することができる。ＢＬＯＢデータへの参照は、ファイル参照ＵＲＩへ変換される。これを達成するために、同期サーバー１１０は、データプロバイダーから到来する任意のデータを、それが中央データレポジトリー１４２又は同期データレポジトリー１１２において持続される前に、インターセプトしミューテートするのに使用できるインターセプターとなる。インターセプターは、ＢＬＯＢデータをファイル参照へと変換し、実際のＢＬＯＢデータをシリアル化する。これは、同期サーバー１１０が、同期を遂行するプロセスの早期にメモリからかさばるデータを除去して、拡張性を改善できるようにする。又、同期サーバー１１０がこれらＢＬＯＢ参照を、中央データベース１４２及び／又は同期サーバー１１０へ直接アクセスする他のバックエンドアプリケーションとで共有できるようにし、これらのプロセスがデータをフェッチする必要があるときに同期サーバーの性能を更に改善できるようにする。更に、中央データベース１４２に記憶されたＢＬＯＢ参照は、サーバープロセス１４０、及び１１０により直接リードオンリアクセスされて、各ネットワーク１６０、１９０及び１８０を経てクライアント１５０、１２０及び１３０へ与えられる。これは、同期サーバー１１０が、かさばるデータにアクセスする役割を他のサーバープロセスとで分担できるようにする。ＢＬＯＢは、外部ファイルとして記憶することができる。
【００３１】
同期サーバー１１０は、同期データレポジトリー１４２を表すための最小限のスキーマに依存し、これは、同期セッションごとにレコードスナップショットを維持する必要性を排除する。例えば、同期サーバー１１０は、相互に関係のあるエンティティのセットを含むデータクラスを使用する。同期サーバー１１０は、テキスト又はバイナリープロパティリストファイル（ｐｌｉｓｔ）を使用することにより種々のデータクラスをサポートする。Ｍａｃ（登録商標）ＯＳ  Ｘ  Ｃｏｃｏａ、ＮｅＸＴＳＴＥＰ及びＧＮＵｓｔｅｐプログラミングフレームワークでは、ｐｌｉｓｔは、例えば、シリアル化オブジェクトを記憶するファイルである。ｐｌｉｓｔは、Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標）におけるＷｉｎｄｏｗｓレジストリーの機能と同様に、ユーザの設定を記憶するのにしばしば使用される。又、プロパティリストファイルは、バンドル及びアプリケーションに関する情報を記憶するのにも使用される。ｐｌｉｓｔは、ＮＳＰｒｏｐｅｒｔｙＬｉｓｔＳｅｒｉａｌｉｚａｔｉｏｎクラスのような標準的オペレーティングシステム（ＯＳ）特徴を使用して生成及び構文解析することが容易である。例えば、同期サーバー１１０は、各データクラスをどのようにサポートし同期するか理解するために、Ｍａｃ（登録商標）ＯＳ  １０  ｐｌｉｓｔを使用して、データクラスのための内部オブジェクトモデルを発生することができる。これは、同期サーバー１１０が、同期サーバーそれ自身の変更を要求せずに、サーバーの構成を変更することにより、付加的なデータクラスを動的にサポートできるようにする。
【００３２】
図２は、同期サーバー１１０によりサポートされる規範的なデータモデルを示す。同期サーバー１１０は、エンティティレコード、プロパティ、レコード変化（追加、変更、削除）、プロパティ変化（セット、クリア）、及びｉｄマッピングを表す各データクラスのオブジェクトデータモデルを発生する。同期サーバー１１０は、それ自身を構造化データストア及びＳｙｎｃＥｎｇｉｎｅの両方として提示し、又、同期サーバー１１０の内部持続モデルは、次の要求のバランスをとる。（１）ツルース(Truth)アクセス（データクラス及び／又はエンティティの現在バージョン）２１０；（２）ヒストリーマネージメント（関連事象の時間線に沿ったフィールドレベル差）２２０；（３）クライアント状態（ヒストリー、同期モード、クライアントタイプにおける最後に知られた位置）２３０；及び（４）クライアント装置１３０に対する装置仕様２４０。これら要求の各々は、同期サーバーのスキーマにおいて論理的に分離される。
【００３３】
ツルースデータ２１０は、ユーザに対するデータの完全な現在セットを含む。ツルースデータ２１０は、中央データレポジトリー１４０に記憶される。又、ツルースデータ２１０は、単に現在データを得ようとするクライアントに対して最小限のＳｙｎｃＥｎｇｉｎｅロジックで迅速なデータアクセスを可能にする。ツルースデータ２１０は、グローバルな独特の識別子（ＧＵＩＤ）、ｅｎｔｉｔｙｎａｍｅ（エンティティ名）、ｄａｔａｃｌａｓｓＮａｍｅ、ｄｅｌｅｔｅｄ（削除）、ｃｒｉａｔｉｏｎＴｉｍｅ（生成時間）、ｍｏｄｉｆｉｃａｔｉｏｎＴｉｍｅ（変更時間）、等の種々のエンティティを含む１つ以上のデータレコード２１２を含むことができる。各レコード２１２は、名前及び値のような種々のパラメータ２１４に関連付けられる。
【００３４】
ツルースヒストリー２２０は、事象の順序付けされた時間線（Ｈｉｓｔｏｒｙ．ｉｄにより順序付けされた）を提示する。ツルースヒストリー２２０は、ＩＤ、ｒｅｃｏｒｄｉｄ、ｄａｔａｃｌａｓｓＮａｍｅ、ｃｌｉｅｎｔｉｄ、ｔｙｐｅ（タイプ）、ｔｉｍｅｓｔａｍｐ（タイムスタンプ）、ｓｙｎｔｈｅｔｉｃ（合成）、等を含む種々のエンティティを伴う１つ以上のヒストリーデータ２２２を含む。各ツルースヒストリーデータ２２２は、アクション及び名前のような１つ以上のヒストリープロパティ２２４に関連付けられる。又、ツルースヒストリーは、衝突データ２２６も含む。冗長性を回避するために、ツルースヒストリーには実際のレコード値が記憶されない。例えば、同期サーバー１１０は、バージョニングシステムではない。むしろ、同期サーバー１１０は、どんなレコード及びプロパティが変化されたか（例えば、ＦＬＤ）、レコードが追加、変更又は削除されたかどうか、及びどのクライアントが変化させたかに関する情報を記憶する。又、衝突は、論理的にこのエリアに入る。しかしながら、衝突は、ツルースにおいて持続しなくてもよい。
【００３５】
クライアント状態２３０は、所与のクライアントの存在及びデータクラスごとの同期状態を維持するのに使用される種々のエンティティを含むことができる。クライアント状態エンティティは、ＧＵＩＤ、ｎａｍｅ、ａｃｃｏｕｎｔ（アカウント）、ｔｙｐｅ、ｓｔａｔｅ（状態）、ｉｓＥｎａｂｌｅｄ、ｉｓＲｅｇｉｓｔｅｒｅｄＷｉｔｈＢｒｉｄｇｅＳｔｏｒｅ、ｆｉｒｓｔＳｙｎｃＤａｔｅ、ｌａｓｔＳｙｎｃＤａｔｅ、ｂｕｉｌｄｖｅｒｓｉｏｎ、ｃｒｅａｔｉｏｎｔｉｍｅ、ｍｏｄｉｆｉｃａｔｉｏｎｔｉｍｅ、ｄｅｖｉｃｅｉｎｆｏ、又はａｃｔｉｖａｔｉｏｎ（アクチベーション）を含む。各クライアントには、データクラス２３２が関連付けられる。データクラスは、ｎａｍｅ、ａｎｃｈｏｒ（アンカー）、ｆａｓｔＳｙｎｃ、ｌａｓｔＳｙｎｃ、ｌａｓｔｒｅｓｅｔ、ｌａｓｔＳｙｎｃＳｔａｔｅ、ｈａｓｈ（ハッシュ）、ｌａｓｔＳｙｎｃＨｉｓｔｏｒｙ、ｅｎａｂｌｅｄ、ｃｒｅａｔｉｏｎｔｉｍｅ、ｐｅｎｄｉｎｇｕｐｄａｔｅ、ｐｅｎｄｉｎｇｉｄｍａｐｐｉｎｇ、及びｄｅｖｉｃｅＤａｔａｃｌａｓｓＳｔａｔｅを含む。
【００３６】
更に、各データクラスには、同期アンカー２３６が関連付けられる。同期アンカー情報は、ｇｅｎｅｒａｔｉｏｎ、ｈｉｓｔｏｒｙｉｄ、ｓｙｎｃＭｏｄｅ、ｓｙｎｃＤｉｒｅｃｔｉｏｎ、及びｃｈａｎｇｅｌｏｇＶｅｒｓｉｏｎを含むことができる。データクラスは、データクラスヒストリー２３８に関連付けることができる。データクラスヒストリー２３８は、ｒｅｃｏｒｄｉｄ、ｔｙｐｅ、ｔｉｍｅｓｔａｍｐを含むことができる。更に、各データクラスは、ｉｄＭａｐｐｉｎｇ２３９に関連付けることができる。
【００３７】
装置状態２４０は、クライアントデータ２３２に関連したＤｅｖｉｃｅＩｎｆｏ２４２及びＡｃｔｉｖａｔｉｏｎ２４４を含むことができる。Ａｃｔｉｖａｔｉｏｎ２４４は、ｍｓｉｓｄｎ、ｃａｒｒｉｅｒ（キャリア）及びｎｏｔｉｆｙ（通知）エレメントを含むことができる。又、装置状態２４０は、ＤｅｖｉｃｅＤａｔａＣｌａｓｓＳｔａｔｅ２４６を含むことができ、これは、ｎａｍｅ、ａｎｃｈｏｒ、ｆｉｌｔｅｒ、ｃｒｅａｔｉｏｎＴｉｍｅ、及びｍｏｄｉｆｉｃａｔｉｏｎＴｉｍｅを含む種々のエンティティを含む。装置又はクライアント状態２４０は、ＲｅｃｏｒｄｉｄＭａｐ２４８を含むことができ、これは、ＬＵＩＤ、ＧＵＩＤ、ｄａｔａｃｌａｓｓ：ｃｌｉｅｎｔＩＤ、ｃｒｅａｔｉｏｎｔｉｍｅ及びｍｏｄｉｆｉｃａｔｉｏｎｔｉｍｅを含む種々のデータエンティティを含む。ＤｅｖｉｃｅＤａｔａｃｌａｓｓＳｔａｔｅ２４６は、ＤｅｖｉｃｅＡｎｃｈｏｒＴｙｐｅ２５０及びフィルター情報、例えば、ｍａｐ及びｅｎａｂｌｅｄを含むことができる。エンティティは、ここでは、特に、ＯＴＡクライアント１３０によって使用される。
【００３８】
信頼できるクライアント
同期サーバー１１０は、信頼できるクライアント及び信頼できないクライアントの両方をサポートするように構成される。信頼できるクライアントとインターフェイスするときには、同期サーバーは、信頼できないクライアントに対して必要な幾つかの完全性チェックをスキップすることができる。信頼できるクライアントとは、同期サーバー１１０とのある契約を満足するクライアントである。例えば、信頼できるクライアントは、同期サーバーＩＤをネーティブＩＤとして使用することをサポートする。従って、信頼できるクライアントのローカルの独特の識別子（ＬＵＩＤ）は、同期サーバー１１０により発生されるユニバーサルな独特の識別子（ＵＵＩＤ）と置き換えられる。更に、信頼できるクライアントは、同期サーバー１１０の全てのエンティティ及びプロパティをサポートする。更に、信頼できるクライアントは、注入された変化が同期サーバー１１０のスキーマにより維持されることを保証する。同期サーバー１１０によりサポートされるスキーマ又はデータクラスは、連絡先、カレンダー及びブックマークを含む。
【００３９】
信頼できないクライアントとインターフェイスするときには、同期サーバー１１０は、信頼できないクライアントにより送られた変化を取り扱うよう試みることができる。同期サーバー１１０は、信頼できないクライアントによって要求されたデータ変化の構造を見て、その要求されたデータ変化が合法的（同期サーバー１１０の要求と一貫したものである）であるかどうか判断する。又、同期サーバー１１０は、要求されたレコード変化が、識別されたスキーマに対して有意義であるかどうか判断することができる。例えば、同期サーバーは、信頼できないクライアントが、要求されたプロパティをもたないレコードを追加するよう試みるかどうか決定することができる。同期サーバーは、信頼できないクライアントが、存在しない関連ＩＤとの関係を設定することによりレコードを変更するよう試みるかどうか決定することができる。同期サーバー１１０は、それが不法のデータ変化要求を検出すると、変化に対してフラグを立てる。同期サーバー１１０が変化させることのできない変化は、拒絶される。ある場合には、幾つかの不法のデータ変化を同期サーバー１１０により固定し、明確なクライアント介在なしに受け容れることができる。
【００４０】
例えば、次のような不法のデータ変化を同期サーバー１１０により固定することができる。信頼できないクライアントが連絡先及び電話番号を追加する要求を送信することを考える。連絡先と電話番号との間には「非常に多数」の関係がある。例えば、連絡先エントリーを多数の電話番号に指定することができる。主要な電話番号については、１つの連絡先が１つの主要電話番号を有するので、関係は１対１である。信頼できないクライアントが連絡先及び電話番号を追加するときには、電話番号が連絡先にリンクされる。電話番号それ自体が連絡先関係を有するか、又は関連連絡先へ戻るバックポインタを有する。従って、連絡先が電話番号と共に追加されるときは、関係を指定しなければならない。多くの関係は、逆のものを有する。連絡先データベースにおける電話番号の関係は、連絡先関係である電話番号エンティティにおいて逆の関係を有する。例えば、“ｃｏｎｔａｃｔｓ．ｐｈｏｎｅ＿ｎｕｍｂｅｒｓ”は、ある関係を表すことができ、そしてその関係に対して逆の関係は、“ｐｈｏｎｅ＿ｎｕｍｂｅｒ＿ｅｎｔｉｔｙ．ｃｏｎｔａｃｔ＿ｐｒｏｐｅｒｔｙ”逆関係として表すことができる。関係の１つ以上が外れるか又は誤ったものであるときには、同期サーバー１１０は、その外れた又は誤った関係、例えば、逆関係を修正することができる。
【００４１】
別の例では、Ｆｏｏのような連絡先エンティティが電話番号エンティティＢａｒを参照することができる。信頼できないクライアントでは、電話番号エンティティＢａｒ、連絡先バックポインタが、連絡先エンティティＢａｚを誤って参照することがある。同期サーバー１１０は、この誤ったバックポインタを修正することができる。信頼できるクライアントは、このような誤った関係を発生することがない。
【００４２】
従って、同期サーバー１１０が信頼できないクライアントとインターフェイスし、そして逆関係のバックポインタがセットされないときには、同期サーバー１１０は、これを見て、これが合法的でないと決定する。更に、同期サーバー１１０は、何がエラーを解決できるか知っていることもある。同期サーバー１１０は、連絡先エンティティの電話番号に対するプロパティセットを、その電話番号を参照した連絡先エンティティに対するバックポインタと合成する。従って、信頼できないクライアントの場合に、同期サーバー１１０は、同期サーバー１１０に受け容れられるプロパティ変化を合成することにより助けとすることができる。更に、同期サーバー１１０は、同期サーバーの推論に基づくこの解決が遂行されたことを信頼できないクライアントに通知することができる。
【００４３】
同期サーバー１１０は、クライアントが信頼できるかどうか先天的に決定することができる。あるクライアントは、特定のプロトコルを使用することにより信頼できると識別され又は検出される。例えば、ソフトウェア開発キット（ＳＤＫ）クライアント１２０は、ＳＤＫベースのプロトコルを使用することにより信頼される。ＳＤＫは、ソフトウェアエンジニアが、あるソフトウェアパッケージ、ソフトウェアフレームワーク、ハードウェアプラットホーム、コンピュータシステム、ビデオゲームコンソール、オペレーティングシステム又は同様のプラットホームのためのアプリケーションを生成できるようにする１組の開発ツールである。更に、ＳｙｎｃＤＡＶクライアント１５０も信頼される。ＳｙｎｃＤＡＶは、Ｄｏｔ  Ｍａｃ（登録商標）サーバーのようなユニバーサルサーバー１４０におけるコンピュータクライアント１５０（例えば、Ｍａｃ(登録商標)）からの変化を記憶するのに使用されるＷｅｂＤＡＶに基づくワイヤードプロトコルである。
【００４４】
又、同期サーバー１１０は、クライアントが信頼できるクライアントであるかどうかを動的に決定することもできる。同期サーバー１１０は、現在同期のプロパティを検出することによりこのような決定を行うことができる。例えば、信頼できないクライアントは、信頼できるクライアントとして動作するように更新されてもよい（例えば、ファームウェアを更新することにより）。従って、次の同期において、同期サーバー１１０は、クライアントが信頼できるクライアントであると検出することになる。更に、同期サーバー１１０は、クライアントが、例えば、ＬＵＩＤを送信するか又はＵＵＩＤを送信するか検出することができる。又、同期サーバー１１０は、クライアントに対する装置情報のクライアント定義においてフラグセットを検出することができる。更に、同期サーバー１１０は、クライアントが低速同期モードを使用することを検出し、従って、変化は、ＲＬＤであり、ＦＬＤではない。更に、クライアントは、同期サーバークライアントＳＤＫ３２０を経てサーバー１１０とインターフェイスし、従って、公表されたＳＤＫに合致するクライアントが信頼できるクライアントであることを指示する。ある実施形態では、信頼できるクライアントのライブラリーを公表して、受け容れられる信頼できるクライアントの標準を設定することができる。
【００４５】
同期された各データムは、ユニバーサルな独特のレコードＩＤ又はＵＵＩＤを有する。効率化のために、同期サーバー１１０は、Ｍａｃ（登録商標）ＯＳ  ＸにおけるＳｙｎｃＳｅｒｖｉｃｅのＵＵＩＤを使用することができる。或いは又、クライアント装置１３０のアプリケーションは、例えば、データに対するそのローカルの独特のＩＤ（ＬＵＩＤ）を使用して、ローカルデータストア効率を促進することができる。
【００４６】
サーバー１２０は、クライアント装置１３０（データストア）がそれら自身のＬＵＩＤを使用して、必要に応じてデータアイテムを参照することができるようにする。この場合に、サーバー１２０は、クライアント装置１３０がそれ自身のローカルＩＤを使用することによりグローバルなレコードを透過的に参照できるようにＬＵＩＤ対ＵＵＩＤマッピングを維持する。サーバー１２０は、データクラスに対して「低速」又は「リセット」同期モードが受け容れられるときに新たなマッピングを再確立する。
【００４７】
同期サーバー１１０は、信頼できるクライアントに対して権威ある同期サーバーＵＵＩＤをセットする。データエンティティごとに権威あるＵＵＩＤをセットすることにより、同期サーバー１１０は、ＬＵＩＤ−グローバルな独特の識別子（ＧＵＩＤ）マッピングで実行することができる。信頼できないクライアントの場合、同期サーバー１１０は、ＬＵＩＤ−ＧＵＩＤマッピング２４８を必要に応じて維持する。ＬＵＩＤ−ＧＵＩＤマッピングは、外部クライアントがクライアント自身のローカル識別子によりデータエンティティにアクセスできるようにする。しかしながら、これは、変化をどのように表すかについて付加的なブックキーピングを要求する。同期サーバーのＵＵＩＤをサポートするために、ウェブアプリケーションのような信頼できるクライアントを要求することにより、コストのかかるＬＵＩＤ−ＧＵＩＤマッピングを回避することができる。これは、例えば、同期サーバー１１０のための処理ジョブを減少することができる。
【００４８】
クライアントが追加するデータアイテムが同期データレポジトリー１１２に既に存在するときには、同期サーバー１１０は、アイデンティティ一致を遂行することができる。アイデンティティ一致が検出されると、同期サーバー１１０は、同期サーバー１１０の新たなＵＵＩＤによりデータアイテムを参照しなければならないことをクライアントに通知する。例えば、２つのＭａｃ（登録商標）が、同様のデータセット（例えば、連絡先住所の束）を同期しようと試みることについて考える。これらは、ＳｙｎｃＤＡＶプロトコルを使用する信頼できるクライアントである。各Ｍａｃ（登録商標）は、それ自身のＵＵＩＤをデータエンティティに指定する。第１のＭａｃ（登録商標）がユニバーサルサーバー１４０と同期するときには、そのデータエンティティがまだ存在しないので、第１のＭａｃ（登録商標）からのＵＵＩＤが、アイデンティティ一致に基づいて受け容れられる。同期サーバー１１０には、同期が通知され、従って、同期サーバー１１０は、ＳｙｎｃＤＡＶ同期を遂行して、第１のＭａｃ（登録商標）により指定されたＵＵＩＤをもつ追加データエンティティを得る。次いで、第２のＭａｃ（登録商標）が同じデータセットを同期し、それ自身のＵＵＩＤを、低速同期を経て与えるときには、同期サーバー１１０は、この新たなＵＵＩＤを受け容れず、第１のＭａｃ（登録商標）から他のＵＵＩＤ値を指定する。
【００４９】
フィールドレベル差・対・レコードレベル差
データの差は、種々の粒度で同期させることができる。同期データを交換するときに、クライアント装置１３０及びウェブクライアント１２０は、レコードレベル差（ＲＬＤ）のために各変化したレコードに対する完全なデータを送信する。或いは又、フィールドレベル差（ＦＬＤ）のために各変化したレコードの変化したフィールドのみを送信することもできる。特に、データレコードが多数のフィールドを含むか、又は連絡先データクラスの映像のような大量のデータを含むときには、ＦＬＤの方がＲＬＤより好ましい。
【００５０】
サーバー１１０は、クライアント装置１３０から受け取ったデータのＲＬＤ及びＦＬＤの両表示を動的にサポートすることができる。変化に対するデータ表示は、クライアント装置１３０及び／又はウェブクライアント１２０が所与のデータクラスに対してＲＬＤを使用するか又はＦＬＤを使用するかを指示する。これは、ＦＬＤをサポートするためのメタ情報を維持する複雑さが合理的でないときに最大の融通性でクライアント装置のデータストアを実施できるようにする。
【００５１】
ＲＬＤ変化を受け取ると、同期サーバー１１０は、その変化を、処理、記憶及び通信効率のためにＦＬＤフォーマットへ内部変換する。同期サーバー１１０は、ＲＬＤクライアント装置１３０が完全なレコードを送信することを期待する。クライアント装置１３０によりサポートされ且つクライアント装置のデータレコードから逸したデータフィールドは、クライアント装置１３０によってクリア／削除されたと仮定する。しかしながら、あるデータフィールド例外値が、それら値を送信せずに不変であることを、クライアント装置１３０が指示できるようにするメカニズムを設けることができる。
【００５２】
ＲＬＤクライアントは、全データセットを、変化したデータエンティティを指示するためのフラグと共に送信する。ＦＬＤクライアントは、変化したデータエンティティしか送信しない。ある実施形態では、信頼できるクライアントは、ＦＬＤ変化しか送信しない。ＦＬＤを使用することで、中央データレポジトリー１４２へアクセスする他のクライアント及びサーバーに対する帯域巾使用及び不必要な更新が減少される。
【００５３】
衝突の解消
２つ以上のクライアントが同じデータエンティティ及び／又はプロパティを変化させるよう試みるときに、衝突が生じる。例えば、２つのクライアントが連絡先エントリーのラストネームを変化させるよう試みるときに、同期サーバー１１０は、衝突を自己解消するよう試みる。どの変化を受け容れるか決定するときには、一時的順序付けが使用される。同期サーバー１１０は、最も最近の変化を決定し、その変化に高いプライオリティを指定するように試みる。
【００５４】
しかしながら、一時的な順序付けは巧妙である。例えば、同期サーバー１１０は、クライアントの内部クロックを信頼できず、従って、タイムスタンプの使用は、リスクがある。又、一時的な順序付けは、各クライアントにより使用されるネットワークの品質により影響を受ける。一般的に、衝突が検出されると、同期サーバー１１０は、現在同期を開始したクライアントに高いプライオリティを指定する。
【００５５】
ある場合に、ある変化は、より最近のものであっても、弱いと考えるか、又は古い変化より低いプライオリティを指定しなければならない。例えば、変化のタイプ、ＲＬＤ又はＦＬＤは、どちらの変化が高いプライオリティを得るかに影響する。第１に、同期サーバー１１０は、ＲＬＤクライアントからのファーストネーム及びラストネームを伴う連絡先への変化を検出する。次いで、ミドルネームを追加するためのＦＬＤクライアントからの変化が検出される。ＲＬＤクライアントが新たな電話番号を送信するときに、ＲＬＤクライアントは、追加されたミドルネームを見ていない。従って、これは最も最近の同期であるが、空のミドルネームはクリア又は削除として検出されない。というのは、同期サーバー１１０は、変化がＲＬＤクライアントからのものであると理解するからである。同期サーバー１１０は、この場合、ＲＬＤ−ＦＬＤ推測中にミドルネームを削除しない。従って、同期サーバー１１０による合成変化（推測クリア）は、それがより最近のものであっても、弱い変化と考えられる。ユーザは、ユーザが変化を入力した順序を知っているが、その順序は、同期サーバー１１０にとって明らかでないことがある。
【００５６】
中央データレポジトリーを同期データレポジトリーと同期
ＳｙｎｃＤＡＶ変化ログは、１組のレコード変化を指示するファイルである。単一レコード変化は、データの１つのレコードに関し、３つのオペレーション（１）追加、（２）変更又は（３）削除のうちの１つを表す。各変更変化は、プロパティ名、プロパティ値、及びアクションを含むプロパティ変化を有する。又、アクションは、セット又はクリアすることができる。クライアントが同期サーバー１１０と同期されたときには、変化ログが発生される。発生される変化ログは、最後のレコード変化及びヘッダを含む。又、発生される変化ログは、圧縮される。例えば、Ｍａｃ（登録商標）ＯＳ  １０  Ｃｏｃｏａクラスでは、オブジェクトのオブジェクトグラフを得てそれをメモリ又はファイルへとシリアル化するためにＮＳＡｒｃｈｉｖｅｒと称するクラスが実施される。スペースを減少するために、再発するオブジェクトのラン長さトークン化が遂行される。従って、各オブジェクトは、一度エンコードされ、各エンコードされたオブジェクトは、そのトークンを参照することができる。トークンは、番号を含む値を含むことができる。
【００５７】
変化ログは、若干複雑であり、オープンフォーマットではない。ＮＳＡｒｃｈｉｖｅｒは、同期サーバークライアントＳＤＫライブラリー３２０のクライアントがＣｏｃｏａクラス、例えば、ＮＳＡｒｒａｙ及びＮＳＭｕｔａｂｌｅＡｒｒａｙ；ＮＳＤｉｃｔｉｏｎａｒｙ及びＮＳＭｕｔａｂｌｅＤｉｃｔｉｏｎａｒｙ；ＮＳＳｅｔ及びＮＳＭｕｔａｂｌｅＳｅｔ；ＮＳＤａｔａ及びＮＳＭｕｔａｂｌｅＤａｔａ；ＮＳＤａｔａ及びＮＳＣａｌｅｎｄａｒＤａｔｅ；ＮＳＴｉｍｅＺｏｎｅ及びＮＳＬｏｃａｌＴｉｍｅＺｏｎｅ；ＮＳＣｏｌｏｒ；ＮＳＵＲＬ；等を理解できるようにするために、Ｊａｖａで再実施される。
【００５８】
同期サーバー１１０は、これらのクラスを読み取り、ユニバーサルサーバー１４０（例えば、Ｍａｃ（登録商標）ＯＳ１０サーバー）へのリンクをアーカイブ化することができる。変化ログは、同期サーバー１１０を、ユニバーサルサーバー１４０又はネットワーク記憶装置、例えば、ｉＤｉｓｋ（登録商標）とブリッジするのに使用される。変化ログは、それ自身の関係完全性を有するデータクラスに対する変化のシリアル化セットである。変化ログは、まだ存在しないエンティティを参照するものではない。
【００５９】
同期サーバー１１０は、変化ログを読み取り、そして中央データレポジトリー１４２（例えば、ＳｙｎｃＤＡＶデータストア）を、ｉＰｈｏｎｅ（登録商標）のようなクライアントサーバー１３０、及びＷｅｂ  Ａｐｐのようなウェブクライアントとブリッジするように構成される。変化ログは、連続的に記憶され、追加的である。一連の変化ログを処理することにより、同期サーバー１１０は、一連のトランザクションを処理する。従って、同期サーバー１１０は、ある数の変化ログを処理するときに、中央データレポジトリーのバージョンを得ることができる。同期サーバー１１０は、全ての変化ログを処理するときに、中央データレポジトリー１４２の現在バージョンを得ることができる。
【００６０】
同期サーバー１１０は、変化ログをシリアル化し、中央データレポジトリー１４２との同期をとる。このプロセス中に、同期サーバー１１０は、ＳｙｎｃＤＡＶサーバーへの別のＳｙｎｃＤＡＶクライアント１５０のように（ＳｙｎｃＤＡＶサーバーのような）ユニバーサルサーバー１４０へ提示される。従って、ＳｙｎｃＤＡＶサーバーに対して、同期サーバー１１０は、例えば、別のＭａｃ（登録商標）クライアントのように振舞う。
【００６１】
ＳｙｎｃＤＡＶプロトコルは、ＷｅｂＤＡＶプリミティブ上に同期セマンティックを積層するためのものである。ＷｅｂＤＡＶは、ゲット、プット、削除及びロックオペレーションをサポートする。これらは、ｉＤｉｓｋ（登録商標）のようなＷｅｂＤＡＶサーバーに対する標準的な機能である。ＷｅｂＤＡＶサーバーとして働くユニバーサルサーバー１４０は、ＳｙｎｃＤＡＶ変化を、例えば、２つのＭａｃ（登録商標）間で同期させることができる。
【００６２】
中央データレポジトリー１４２との同期をとるときには、同期データクラス及びクライアントに関連したＷｅｂＤＡＶリソースにロックが配置される。これは、他のクライアントが同期オペレーション中にその同じデータクラスを同期させるのを効果的に阻止する。従って、ＳｙｎｃＤＡＶプロトコルは、シリアル化との種々の競合を招く。
【００６３】
同期サーバー１１０は、中央データレポジトリー１４２への迅速なアクセスを可能にする。従って、同期サーバー１１０のクライアントは、同期に気付く必要はない。同期サーバー１１０は、個々のデータストアのようにクライアントを処理する。
【００６４】
更に、同期サーバー１１０は、ＳｙｎｃＤＡＶストア、中央データレポジトリー１４２からデカップルされる。高速で且つ効率的な同期を促進するために、同期サーバー１１０は、クライアントがｗｅｂ  ａｐｐクライアント１２０のデータにサービスする前に同期を終了するのを待機する余裕がない。従って、中央データレポジトリー１４２、ＳｙｎｃＤＡＶデータストアに対してバックアップとして動作できるサーバー１１０に対するローカルの同期データレポジトリー１１２（例えば、Ｂｅｒｋｅｌｅｙデータベース）が実施される。
【００６５】
２つのデータレポジトリー（同期データレポジトリー１１２及び中央データレポジトリー１４２）を同期状態に維持するために、ブリッジクライアントが生成される。ＳｙｎｃＤＡＶでは、各同期クライアントが、ＳｙｎｃＤＡＶデータストア、中央データレポジトリー１４２に表示を有していなければならない。同期サーバー１１０は、ＳｙｎｃＤＡＶクライアント１５０のように振舞うので、同期サーバー１１０は、これら表示の１つを生成する。従って、ユニバーサルサーバー１４０、ＳｙｎｃＤＡＶサーバーに対して、同期サーバーは、別のＭａｃ（登録商標）と同様であるように見える。
【００６６】
同期サーバー１１０は、他のクライアントを締め出すのを回避するために、中央データレポジトリー１４２とのシームレスな動的同期を遂行する。例えば、ｉＰｈｏｎｅのようなクライアント装置１３０は、同期サーバー１１０と共に連絡先を更新する。同時に、Ｍａｃ（登録商標）のような別のクライアントは、ユニバーサルサーバー１４０、ＳｙｎｃＤＡＶサーバーと共に同じ連絡先のスケジュールされた同期を遂行する。中央データレポジトリー１４２、ＳｙｎｃＤＡＶデータストアは、Ｍａｃ（登録商標）によりロックされ、同期サーバー１１０は、ロックに気付く。同期サーバー１１０は、ｉＰｈｏｎｅからの変化が中央データレポジトリー１４２にゲットされるのを防止しない。同期サーバー１１０は、内部同期データレポジトリー１１２を含むので、その内部同期データレポジトリー１１２を更新する。その後、Ｍａｃ（登録商標）との同期が完了すると、同期サーバー１１０は、中央データレポジトリー１４２、ＳｙｎｃＤＡＶサーバーが、更新すべき変化を有するという通知をバックエンドプロセスにより受け取る。これは、２つのデータレポジトリー間の同期をトリガーし、両データレポジトリーにより変化がピックアップされる。内部同期データレポジトリー１１２に対して更新できることで、中央データレポジトリー１４２、ＳｙｎｃＤＡＶデータストアが、ＳｙｎｃＤＡＶクライアントからの変化を同期させてビジーであるときに、クライアント装置（例えば、ｉＰｈｏｎｅ）を阻止するのを回避できる。
【００６７】
ある実施形態では、同期データレポジトリー１１２がダメージを受けたときに、同期サーバー１１０は、ＳｙｎｃＤＡＶ変化ログをシリアル化し処理することにより中央データレポジトリー１４２からデータを回復することができる。中央データレポジトリー１４２は、同期データレポジトリー１１２と共に同じことを行うことができる。従って、各データレポジトリーは、他のデータレポジトリーに対するバックアップとして機能できる。
【００６８】
同期サーバー１１０は、ＨＴＴＰトランスポートプロトコルのようなトランスポートプロトコルを使用してクライアント装置１３０及びウェブクライアント１２０に接続され、セキュアなデータ接続を完成する。例えば、トランスポートプロトコルを経て、同期サーバー１１０は、オーバー・ジ・エア（ＯＴＡ）同期プロトコルを使用し、接続されたクライアント装置１３０と同期サーバー１１０との間でデータ同期をとれるようにする。同期されたデータは、連絡先（例えば、住所及び電話番号）、カレンダー、等の種々のデータクラスを含むことができる。データ同期をとることは、ネットワーク１８０を経て行われる。同期サーバー１１０によりサポートされる規範的なＯＴＡ同期プロトコル及びスキーマが、参考としてその内容をここに援用する同時係争中の米国特許出願（“Data Synchronization Protocol”と題する代理人管理番号１８８１４−１０４００１）に説明されている。
【００６９】
トランスポートプロトコルを経て、同期サーバー１１０は、同期サーバークライアントＳＤＫライブラリー３２０を使用してウェブクライアント１２０と同期をとることができる。一実施形態では、同期サーバークライアントＳＤＫライブラリー３２０は、Ｊａｖａプラットホームを使用するジャーファイルとして実施される。例えば、同期サーバー１１０は、ウェブクライアント１２０が、同期サーバーのスキーマ及びデータクラスを完全にサポートする信頼できるクライアントとして振舞うことを保証するように、同期サーバークライアントＳＤＫライブラリー３２０を実施することができる。同期サーバークライアントＳＤＫライブラリー３２０は、全ての関係完全性チェックを遂行して、同期サーバー１１０が受け容れるＵＵＩＤをウェブクライアント１２０に発生するように実施される。同期サーバークライアントＳＤＫライブラリー３２０は、関係の設定を取り扱うことができ、そしてそれが同期サーバー１１０へ転送するレコードが、そのレコードを同期サーバー１１０へ転送する前に同じであることを保証することができる。
【００７０】
更に、同期サーバークライアントＳＤＫライブラリー３２０は、同期サーバー側でのデータレポジトリーリセット例外取り扱いのような例外も取り扱う。クライアント装置１３０が全データセットをプッシュしたとき、そしてウェブクライアント１２０がデータセットの更新を試みるときに、ウェブクライアント１２０は、クライアント装置１３０が更新を送信できる前にウェブクライアントが中央データレポジトリーからデータセットを再ロードしなければならないことを示す例外メッセージを受け取る。ウェブクライアント１２０は、信頼できるクライアントとして検出されるので、同期サーバー１１０から同期サーバークライアントＳＤＫライブラリー３２０へ関係完全性チェックがオフロードされる。更に、同期サーバークライアントＳＤＫライブラリー３２０は、ウェブクライアント１２０を同期サーバー１１０の複雑さから遮蔽する。
【００７１】
同期サーバークライアントＳＤＫライブラリー３２０は、同期サーバースキーマの完全なオブジェクトモデルを実施する。ある実施形態では、データクラスごとにＪａｖａクラスが発生される。例えば、連絡先に対するＪａｖａクラス、及びｅ−メールアドレスに対するＪａｖａクラスが発生される。次いで、同期サーバークライアントＳＤＫライブラリー３２０は、ｅ−メールアドレスと連絡先との間の関係をセットする。ウェブクライアント１２０が同期オペレーションをコールすると、同期サーバークライアントＳＤＫライブラリー３２０は、同期サーバー１１０へ変化をプッシュする。同期サーバークライアントＳＤＫライブラリー３２０は、同期サーバー１１０のスキーマに対する必要なプロパティ及び関係を理解し、そして同期サーバークライアントＳＤＫライブラリー３２０のユーザがその必要なプロパティ及び関係に従うことを保証する。同期サーバークライアントＳＤＫライブラリー３２０は、クライアントが、不良データ（即ち、同期サーバーのスキーマから外れた）を含む変化を提出するように試みるときにユーザへランタイムエラーを送信する。従って、スキーマにおける正しさを強要する責任を同期サーバーのＣＰＵからオフロードすることができる。同期サーバークライアントＳＤＫライブラリー３２０は、通常、ウェブアプリケーションにおいて別のＣＰＵで実行することができる。
【００７２】
同期サーバー１１０は、毎日少なくとも１．５Ｍの同期を可能にすることによりバックエンド拡張性及び簡単さを改善することができる。又、同期サーバー１１０は、同期サーバー１１０へのトリクル(trickle)同期変化をサポートする。
【００７３】
図３は、同期サーバー１１０のための規範的アプリケーションアーキテクチャーを示すブロック図である。同期サーバー１１０は、本書に述べる種々の機能を動作する種々のコンポーネントを備えている。例えば、同期サーバー１１０は、Ｊａｖａ  ＮＳＡｒｃｈｉｖｅｒコンポーネント３０２と、通知メカニズム３０４と、マネージメントインターフェイス３０６と、クライアントプロトコルメカニズム３０８と、差のエンジン（混合、衝突）３１０と、共通コンポーネント３１２と、ＳｙｎｃＤＡＶ変化ログコンポーネント３１４と、スキーマ（定義、確認）コンポーネント３１６と、ツルース（持続）コンポーネント３１８とを含むことができる。サーバー１１０は、プロトコル３４０を経てクライアントＳＤＫ３２０に接続される。ＳＤＡＰプロトコル３４０は、同期サーバークライアントＳＤＫのようなワイヤプロトコルを含むことができる。
【００７４】
同期サーバークライアントＳＤＫ３２０は、クライアント１２０が特定のプロトコル知識をもつ必要なく、同期サーバーデータアクセスプロトコル（ＳＤＡＰ）を通して同期サーバーへのアクセスを与えるライブラリーである。ＳＤＡＰ３４０は、同期データレポジトリー１１２にアクセスして同期を遂行するプロトコルである。ＳＤＡＰは、同期データレポジトリー１１２のデータ及び変化のためのＸＭＬスキーマ；データクラス、レコード及びプロパティのためのＵＲＬスキームを定義するＨＴＴＰプロトコルセマンティック；ＨＥＡＤ、ＧＥＴ、ＰＵＴ及びＤＥＬＥＴＥのためのセマンティック；及びクライアントｉｄ及び同期アンカーのような同期特有のデータを交換するためのカスタムＸヘッダ；で構成される。
【００７５】
ＳＤＡＰ３４０は、クライアント１２０が同期サーバー１１０（ａｋａＭｅｔｒｏｐｏｌｉｓ）とインターフェイスできるようにする。同期サーバー１１０は、基本的及びダイジェスト認証をサポートする。ウェブクライアント１２０と同期サーバー１１０との間の通信は、暗号化されない。というのは、ウェブクライアント（例えば、ウェブアプリケーション）１２０及び同期サーバー１１０の両方がサーバー側で内部に配備されるからである。ＳＤＡＰは、基本的認証をサポートすることができる。同期サーバー１１０又は個別のゲートウェイサーバーは、オーバー・ジ・エア（ＯＴＡ）クライアント１３０との同期をサポートするために認証及びセッション取り扱いを含むことができる。更に、ＳＤＡＰは、装置を登録すると共に個々のデータクラスに対して同期をイネーブル／ディスエイブルするためのファシリティも与える。
【００７６】
ＳＤＡＰは、複雑なクライアント同期ステートマシンを必要とせずに、ウェブクライアント１２０が同期サーバー１１０と同期をとって同期データレポジトリー１１２にアクセスできるようにする。ＳＤＡＰは、５００ミリ秒以下の範囲の応答時間目標で同期データレポジトリー１１２及び中央データレポジトリー１４２の同期データへステートレスアクセスを行えるようにする。ＳＤＡＰは、Ｄｏｔ  Ｍａｃサーバー（Ｒｅｐｌｉｃａｎｔ、ＳＦＤＥ及びＷＯＡ）のような種々のサーバー間の既存のプロトコル（例えば、同期ＡＰＩ）に置き換わることができる。更に、ＳＤＡＰは、連絡先、カレンダー及びブックマークを含む種々のデータクラスの同期をとれるようにする。Ａｐｐｌｅ（登録商標）拡張を伴う規範的データクラスは、“ｃｏｍ．ａｐｐｌｅ．Ｃｏｎｔａｃｔｓ”、“ｃｏｍ．ａｐｐｌｅ．Ｃａｌｅｎｄａｒｓ”及び“ｃｏｍ．ａｐｐｌｅ．Ｂｏｏｋｍａｒｋｓ”を含む。更に、ＳＤＡＰは、ウェブアプリケーション１２０及びクライアント装置１３０が同期サーバー１１０とのトリクル同期をとれるようにする。ＳＤＡＰを使用したいクライアントアプリケーション、例えば、ウェブクライアント１２０は、フィールドレベル変化をサポートし、そしてＡＰＩにより配信されるときにプロパティを完全に保存しなければならない。
【００７７】
同期サーバークライアントＳＤＫ３２０は、特定のプロトコル知識を必要とせずにＳＤＡＰを通して同期サーバー１１０へのアクセスを与えるＪａｖａライブラリーである。ある実施形態では、同期サーバークライアントＳＤＫ３２０は、他の言語及び技術を使用して実施することもできる。同期サーバークライアントＳＤＫ３２０は、メインデータクラス（ブックマーク、連絡先、カレンダー、等）のためのオブジェクトモデルを与え、クライアントが、必ずしもそれら自身のデータストアをもたずにデータを同期サーバーと同期させることができるようにする。上述したように、サーバーの拡張性を改善するために、ＳＤＫは、サーバーからクライアントへ関係完全性実施を保証するタスクをオフロードし（それを信頼できるクライアントとし）、そしてサーバーにおけるＬＵＩＤ−ＧＵＩＤマッピングの必要性をなくす。同期サーバークライアントＳＤＫは、同期サーバー１１０と同期をとるためにＭａｃ連絡先及びカレンダーウェブ指向アーキテクチャー（ＷＯＡ）により使用される。
【００７８】
ＳＤＡＰは、同期データレポジトリー１１２及び同期オペレーション、例えば、「レコード」及び「プロパティ」変化を記述するためにそれ自身のＸＭＬスキーマを定義する。ＳＤＡＰのＸＭＬスキーマは、同期サーバー１１０のデータモデルに従う。例えば、ＸＭＬスキーマは、エンティティレコード；プロパティ；追加、変更及び削除のようなレコード変化；セット及びクリアのようなプロパティ変化；並びにｉｄマッピング；を表すことができる。
【００７９】
同期サーバークライアントＳＤＫ３２０は、同期サーバー１１０との同期セッション中に使用できる種々のコンポーネントを含む。同期サーバークライアントＳＤＫ３２０は、同期サーバー１１０により定義されるサポートされたスキーマ又はデータクラスを含むことができる。これらのデータクラスは、連絡先３２２、カレンダー３２４及びブックマーク３２６を含むことができる。これらデータクラスの各々は、関係により編成されるデータアイテムを含む。又、同期サーバークライアントＳＤＫ３２０は、ＳＤＡＰクライアントコンポーネント３２８、共通（ＸＭＬ、レコード、変化）コンポーネント３３０、及びＥｎｔｉｔｙＳｔｏｒｅ３３２を含むこともできる。
【００８０】
図４は、規範的な同期サーバーシステムアーキテクチャーを示すブロック図である。このシステムアーキテクチャーは、１つ以上の同期セッションにおいて１つ以上のデータレコードを同期させるためにユニバーサルサーバー１４０とインターフェイスする１つ以上のクライアント４１０及び４１２を備えている。クライアント４１０、４１２は、Ｍａｃ（登録商標）ＯＳ  Ｘ  Ｔｉｇｅｒ及びＬｅｏｐａｒｄを実行するもののようなコンピュータを備えることができる。これらのクライアント４１０及び４１２は、１つ以上のＤｏｔ  Ｍａｃ（登録商標）サービスに接続されるＤｏｔ  Ｍａｃ（登録商標）クライアントである。
【００８１】
クライアント４１０及び４１２は、ネットワーク４２０を経てユニバーサルサーバー１４０へのＨＴＴＰ接続を行うことができる。ルーターのようなネットワーク機器４１４は、行先への接続を管理する。ユニバーサルサーバー１４０は、ｉＤｉｓｋ（登録商標）のようなオンライン記憶サーバーをなすＳｙｎｃＤＡＶサーバーを含むことができる。ユニバーサルサーバー１４０は、最新の完全なデータストアとして動作する中央データレポジトリー１４２に接続される。更新が利用できるときには、クライアント４１０、４１２により送られる変化に応答して、同期サーバー１１０に通知される。次いで、同期サーバー１１０は、更新を受け取るためにユニバーサルサーバー１４０との同期セッションを処理することができる。
【００８２】
同期サーバー１１０は、付加的なサービスを提供すると共に、サポートされたデータクラス及びスキーマを定義するために、他のＤｏｔ  Ｍａｃ（登録商標）サーバー４１６に接続することができる。例えば、連絡先、カレンダー及びブックマークのデータクラスをサポートすることができる。更に、同期サーバー１１０を管理するために個別のサーバー４１８及び／又はプロセッサを設けることもできる。
【００８３】
図５ａ、５ｂ、５ｃ、５ｄ、５ｅ、５ｆ、５ｇ及び５ｈは、同期セッションを処理するための規範的プロセスを示す。ネゴシエーション段階５１０の間に、同期サーバー１１０は、１つ以上のクライアント１２０、１３０、等から同期セッションを開始する要求を受け取る（５１１）。１つ以上のクライアント１２０、１３０、等から受け取った要求は、望ましいデータクラス、及びデータクラスに対する提案された同期モードを含む。例えば、ｉＰｈｏｎｅ（登録商標）のような移動装置を操作するユーザは、連絡先データクラスに新たな名前を入力することができる。入力された新たな名前に応答して、同期セッションを開始する要求がクライアントから同期サーバー１１０へ送信され、同期サーバー１１０との同期セッションを開始することができる。同期サーバー１１０は、提案された同期モードを受け容れることができるかどうか決定する（５１２）。提案された同期モードが受け容れられないと同期サーバー１１０が決定すると、同期サーバー１１０は、同期セッションの開始を要求している１つ以上のクライアント１２０、１３０に、受け容れられる同期モード（低速又はリセットのいずれか）を通知する（５１３）。提案された同期モードが受け容れられると同期サーバー１１０が決定すると、同期サーバー１１０は、同期セッションの開始を要求しているクライアントに、提案された同期モードが受け容れられることを通知する（５１４）。
【００８４】
収集段階５２０の間に、同期サーバー１１０は、現在同期ジョブに加わる他のクライアントがいるかどうか決定する（５２１）。現在同期ジョブは、連絡先データクラスを同期させることを含む。他のクライアントがいるときには、同期サーバー１１０は、ユーザが中央データレポジトリー１４２にデータを有するかどうか決定し（５２２）、そしてデータがロックされていないかどうか決定する（５２３）。ロックされていないときには、ブリッジクライアントを使用して、中央データレポジトリー１４２内のユーザデータへのアクセスを代行する（５２４）。例えば、ｉＰｈｏｎｅ（登録商標）を操作するユーザが、中央データレポジトリー１４２（例えば、ＳｙｎｃＤＡＶデータストア）に連絡先データクラスを有するときには、同期サーバー１１０は、中央データレポジトリーの連絡先データクラスがアンロックされたかどうか調べるためにチェックを行う。連絡先データクラスがアンロックされたと同期サーバー１１０が決定すると、中央レポジトリーへのアクセスを代行するブリッジクライアントが、「ピアクライアント」として同期ジョブに追加される。又、同期サーバー１１０は、収集されたピアが同期データをプッシュしたいかどうかも決定する（５２５）。収集されたピアが全データセットのための置き換えデータをプッシュしたい（例えば、ピアがツルースをプッシュしたい）ときには、イニシエータのための同期モードが再ネゴシエーションされる（５２６）。他のピアは、「リセット」同期モードを受け容れるように要求される。
【００８５】
プル段階５３０の間に、同期サーバー１１０は、全てのクライアント１２０、１３０、等から変化を受け取る（５３１）。同期サーバー１１０は、受け取った変化を、サーバー１１０により定義されたスキーマに対して確認する（５３２）。同期サーバー１１０は、クライアントが信頼できるかできないかを決定する（５３３）。クライアントが、信頼できないクライアントであると検出されると、スキーマの関係完全性を実施するために合成変化が発生される（５３４）。更に、１つ以上のクライアント１２０、１３０が、同期セッションの１つ以上のプロパティに基づいて、信頼できるクライアント及び信頼できないクライアントの一方として選択的に識別される（５０４）。信頼できるクライアントは、同期サーバー１１０とのある契約を満足するように構成される。例えば、信頼できるクライアントは、同期サーバーＩＤをネーティブＩＤとして使用することをサポートする。従って、信頼できるクライアントのローカルの独特の識別（ＬＵＩＤ）が、同期サーバー１１０により発生されるユニバーサルな独特の識別（ＵＵＩＤ）に置き換えられる。更に、信頼できるクライアントは、同期サーバー１１０により定義された全てのエンティティ、プロパティ及びデータクラスをサポートする。更に、信頼できるクライアントは、注入された変化が、同期されるデータクラスのスキーマにより維持されることを保証できる。同期サーバーによりサポートされるスキーマ又はデータクラスは、例えば、連絡先、カレンダー及びブックマークを含む。
【００８６】
混合段階５４０の間に、同期サーバー１１０は、各クライアントに対して次のことを行う。（１）中央データレポジトリー１４２からのどんな更新を各クライアントに送るべきか決定し（５４１）；（２）各クライアントからのどの変化をピアへ送るべきか決定し（５４２）；そして（３）中央データレポジトリー１４２又はピアからのどの変化が互いに衝突するか識別する（５４３）。この識別に基づき、１つ以上の衝突が発生される（５４４）。各衝突は、衝突におけるレコードｉｄ、クライアント１（イニシエータ）、クライアント２（ピア又はツルース）、衝突するプロパティ名のセット、共通プロパティ名のセット、「弱い」プロパティ名のセット、等を含む。発生した衝突は、事象の相対的な一時的順序付けに基づいて解消される（５４５）。例えば、イニシエータからの変化は、中央データレポジトリー１４２及び収集されたピアからの変化より「後である」と考えられる。識別された「後の変化」は、典型的に、衝突に「勝つ」（即ち、勝者の変化は、敗者の変化を無効にする）。イニシエータからの変化が、収集されたピアからの変化に対して「弱い」と考えられるときに例外が存在する。衝突が解消されると、勝者（勝ったクライアント、勝った収集ピア、又は勝った中央データレポジトリー１４２、等）からの全ての衝突プロパティの値が衝突レコードに適用される。その結果が、中央データレポジトリー、負けたクライアント、負けた収集ピア、等に更新として適用される（５４６）。
【００８７】
同じレコードを更新又は変化させるために２つ以上のクライアントが同期サーバーと同期するときに衝突が生じる。例えば、同期サーバー１１０は、１つ以上のデータレコードへの更新に対してクライアントの１つとの同期セッションを処理することができる。同期サーバー１１０は、１つ以上のデータレコードへの別の更新に対してクライアントの別の１つとの別の同期セッションを処理することができる。２つの同期セッション間に１つ以上の衝突が検出されたときには、同期セッションのうちの最も最近の１つにプライオリティを指定することにより、識別された衝突を解消することができる（５１４）。従って、最も最近の同期セッションに含まれるクライアントにより送られた変化が、別のクライアントにより送られたそれ以前の衝突変化に勝つ。上述したように、この一般的ルールに対する例外がある。例えば、ある場合には、早期のＦＬＤ変化が、現在のＲＬＤ変化に勝つこともある。
【００８８】
衝突が検出されないときには、同期データレポジトリー１１２は、同期セッションからの変化を反映するように更新される（５１２）。又、衝突が解消された後に、同期サーバー１１０を更新することができる。
【００８９】
プッシュ段階５５０の間に、同期サーバー１１０は、全てのピアへ更新を送る（５５２）。又、コミット段階５６０の間に、同期サーバーは、全てのピアに問合せし（５６２）、それらのピアが更新及びｉｄマッピングをコミットできるかどうか決定する（５６４）。ピアがコミットできないと検出されると、同期サーバー１１０は、更新及びｉｄｍａｐをセーブし（５６６）、従って、そのセーブされた更新及びｉｄｍａｐは、クライアントが同期セッションの開始を次に要求するときにクライアントへ送ることができる。又、同期サーバー１１０は、アンカー及び次の同期モードを使用してピアの同期状態を更新する（５６８）。
【００９０】
通知段階５７０の間に、同期サーバー１１０は、変化が中央データレポジトリー１４２に適用されたかどうか決定する（５７２）。変化が中央データレポジトリー１４２に適用されたことが検出されると、同期サーバー１１０は、変化したデータクラスがどの同期で中央データレポジトリー１４２に適用されたか（５１０）を他の既知のクライアントに通知する（５７４）。
【００９１】
図６は、ＲＬＤからＦＬＤへの変換を行うための規範的サーバープロセスを示す。ＲＬＤをサポートする１つ以上のクライアント１２０、１３０との要求された同期セッションを処理するときには、同期サーバー１１０は、ＲＬＤからＦＬＤへの変換も行うことができる。中央データレポジトリー１４２に記憶されたレコードに値を有するが、クライアントＲＬＤ  ＲｅｃｏｒｄＣｈａｎｇｅにＳＥＴをもたず、且つクライアントへ更新として送られるべき中央データレポジトリーヒストリーにＳＥＴオペレーションが存在しないところのサポートされたプロパティは、クライアント１２０、１３０からＣＬＥＡＲとして処理されることを意味する。中央データレポジトリーにおけるプロパティの現在値に値が一致するＳＥＴを有するクライアント１２０、１３０からのサポートされたプロパティは、ＲＬＤ  ＲｅｃｏｒｄＣｈａｎｇｅから除去されてもよい。
【００９２】
フィールドレベル差をサポートするクライアント１２０、１３０は、更新されるべき１つ以上のデータレコードに対して変化したデータアイテムしか送信しない。これと対照的に、レコードレベル差をサポートするクライアント１２０、１３０は、更新されるべき１つ以上のデータレコードに含まれる全てのデータアイテムを送信する。
【００９３】
図６に示す例では、同期サーバー１１０は、クライアント記述ｐｌｉｓｔ（ｃｌｉｅｎｔｄｅｓｃｒｉｐｔｉｏｎ．ｐｌｉｓｔ）に指定されたクライアント１２０、１３０によってサポートされるスキーマプロパティを識別する（６０２）。ＭＯＤＩＦＹコマンドである各ＲＬＤレコードに対して（例えば、ＡＤＤ又はＤＥＬＥＴＥを無視できる）、同期サーバー１１０は、クライアントがエンティティに対してサポートするプロパティごとにレコードのエンティティ名（例えば、ｃｏｍ．ａｐｐｌｅ．ｃｏｎｔａｃｔｓ．Ｃｏｎｔａｃｔ）を決定し又は識別する（６０４）。同期サーバー１１０は、プロパティがＲＬＤレコードから逸したかどうか決定する（６０６）。同期サーバー１１０が、プロパティを、ＲＬＤレコードから逸したものとして検出すると、同期サーバー１１０は、プロパティに対して「弱い」ＣＬＥＡＲオペレーションを発生し（６０８）、そしてクライアント１２０、１３０へ更新として送られていない中央データレポジトリー１４２にはＳＥＴが存在しない（６１２）。でなければ、プロパティがＲＬＤレコードにおけるＳＥＴであり、且つその値が中央データレポジトリーにおけるプロパティの現在値に一致する（６１０）場合は、同期サーバー１１０は、ＲＬＤレコードからプロパティを除去する（６１２）。でなければ、プロパティがＲＬＤレコードにおけるＳＥＴであり、且つその値のハッシュ値がクライアントへ送られた最後の既知のハッシュ値に一致する（６１４）場合は、同期サーバー１１０がＲＬＤレコードからプロパティを除去する（６１２）。
【００９４】
又、同期セッションがデータレコードへの変化を生じると、１つ以上のデータレコードに関連した全ての変化に対して変化ログを発生することができる。変化ログとは、所与の同期セッション中に適用されたスキーマデータクラスに対する全ての変化を表すものである。変化ログは、変化を蓄積するようにシリアル化することができる。従って、変化は、少しづつ更新することもできるし、一度に全部更新することもできる。ブリッジクライアントを使用すると、同期サーバー１１０は、中央データレポジトリー１４２に記憶されたデータにアクセスすることができる。アクセスすると、同期サーバー１１０は、変化ログを使用して、ユニバーサルサーバー１４０に接続された中央データレポジトリー１４２を更新することができる。従って、発生された変化ログを使用して、中央データレポジトリー１４２、「ツルース(Truth)」を更新することができる。
【００９５】
処理された同期セッションに基づいて、同期サーバー１１０は、１つ以上のクライアント１２０、１３０がＦＬＤをサポートするかＲＬＤをサポートするか（５４０）決定することができる。例えば、クライアントにより指示される同期モードは、低速であり、従って、ＲＬＤを指示する。更に、変化に対するデータ表示は、クライアント装置１３０及び／又はウェブクライアント１２０が所与のデータクラスに対してＲＬＤを使用するかＦＬＤを使用するか指示することができる。１つ以上のクライアントが、レコードレベル差をサポートするように構成されたときには、同期サーバー１１０は、ＲＬＤからＦＬＤへの変換を行って（５４２）、１つ以上のデータレコードにおける変化したデータアイテムを識別する。同期サーバー１１０は、クライアントにより送られたデータレコードを同期データレポジトリー１１２と比較して、変化したデータレコードのデータアイテムを識別することができる。同期データレポジトリー１１２と同じデータアイテムは、ドロップされる。クライアントがＦＬＤをサポートすることを同期サーバー１１０が決定すると、クライアントにより送られるデータレコードの全てのデータアイテムは、変化したデータとして受け容れられる（５４４）。これは、追加、変更及び削除されたデータを含む。
【００９６】
更に、１つ以上のクライアントが信頼できないクライアントとして識別されたことが検出されると、信頼できないクライアントに関連した同期セッションにおいて、信頼できないクライアントに関連した同期セッションに含まれる１つ以上のデータレコードに対してサーバーにより定義されたスキーマからの１つ以上の食い違いを検出することができる。
【００９７】
本書に述べた要旨及び機能的動作の実施形態は、ここに開示した構造及びそれらの構造的等効物を含むデジタル電子回路、或いはコンピュータソフトウェア、ファームウェア又はハードウェア、或いはそれらの１つ以上の組み合わせで具現化することができる。本書に述べた要旨の実施形態は、１つ以上のコンピュータプログラム製品として、即ちデータ処理装置により実行するために又はデータ処理装置の動作を制御するために有形のプログラムキャリアにエンコードされたコンピュータプログラムインストラクションの１つ以上のモジュールとして、具現化することができる。有形のプログラムキャリアは、伝播される信号でもよいし、又はコンピュータ読み取り可能な媒体でもよい。伝播される信号は、人為的に発生される信号、例えば、コンピュータにより実行するために適当な受信装置へ送信される情報をエンコードするように発生されるマシン発生の電気的、光学的又は電磁的信号である。コンピュータ読み取り可能な媒体は、マシン読み取り可能な記憶装置、マシン読み取り可能な記憶基板、メモリ装置、マシン読み取り可能な伝播信号に作用する物質の組成物、或いはそれらの１つ以上の組み合わせでよい。
【００９８】
「データ処理装置」という語は、データを処理するための全ての装置、デバイス及びマシンを包含するもので、例えば、プログラム可能なプロセッサ、コンピュータ、或いはマルチプロセッサ又はコンピュータを含む。装置は、ハードウェアに加えて、当該コンピュータプログラムのための実行環境を生成するコード、例えば、プロセッサファームウェア、プロトコルスタック、データベースマネージメントシステム、オペレーティングシステム、又はそれらの１つ以上の組み合わせを構成するコードを含むことができる。
【００９９】
コンピュータプログラム（プログラム、ソフトウェア、ソフトウェアアプリケーション、スクリプト、又はコードとしても知られている）は、コンパイル又は解釈された言語、或いは平叙又は手続き言語を含む任意の形態のプログラミング言語で書くことができると共に、スタンドアローンプログラムとして、或いはモジュール、コンポーネント、サブルーチン、又はコンピューティング環境に使用するのに適した他のユニットとして、任意の形態で配備することができる。コンピュータプログラムは、必ずしも、ファイルシステムにおけるファイルに対応しない。プログラムは、他のプログラム又はデータを保持するファイルの一部分に記憶することもできるし（例えば、マークアップ言語ドキュメントに記憶される１つ以上のスクリプト）、当該プログラム専用の単一ファイルに記憶することもできるし、或いは複数の整合されたファイルに記憶することもできる（例えば、１つ以上のモジュール、サブプログラム、又はコードの部分を記憶するファイル）。コンピュータプログラムは、１つのサイトに位置されるか複数のサイトにわたって分布され且つ通信ネットワークによって相互接続される１つのコンピュータ又は複数のコンピュータにおいて実行されるように配備することができる。
【０１００】
本書で述べたプロセス及び論理フローは、入力データに作用して出力を発生することにより機能を遂行する１つ以上のコンピュータプログラムを実行する１つ以上のプログラマブルプロセッサにより遂行することができる。又、プロセス及び論理フローは、例えば、ＦＰＧＡ（フィールドプログラマブルゲートアレイ）又はＡＳＩＣ（特定用途向け集積回路）のような特殊目的論理回路によって遂行することもできるし、そのような特殊目的論理回路として装置を具現化することもできる。
【０１０１】
コンピュータプログラムを実行するのに適したプロセッサは、例えば、汎用及び特殊目的の両マイクロプロセッサと、任意の種類のデジタルコンピュータの１つ以上のプロセッサを含む。一般的に、プロセッサは、リードオンリメモリ、ランダムアクセスメモリ又はその両方からインストラクション及びデータを受け取る。コンピュータの本質的な要素は、インストラクションを遂行するためのプロセッサと、インストラクション及びデータを記憶するための１つ以上のメモリ装置である。一般的に、コンピュータは、データを記憶するための１つ以上の大量記憶装置、例えば、磁気、磁気光学ディスク、又は光学ディスクも備え、或いはそこからデータを受け取り又はそこへデータを転送するように作動的に結合され、或いはその両方である。しかしながら、コンピュータは、このような装置を有する必要はない。更に、コンピュータは、別の装置に埋め込まれてもよい。
【０１０２】
コンピュータプログラムインストラクション及びデータを記憶するのに適したコンピュータ読み取り可能な媒体は、全ての形態の不揮発性メモリ、媒体及びメモリ装置を含み、例えば、半導体メモリデバイス、例えば、ＥＰＲＯＭ、ＥＥＰＲＯＭ、及びフラッシュメモリデバイス；磁気ディスク、例えば、内部ハードディスク又は取り外し可能なディスク；磁気光学ディスク；並びにＣＤ  ＲＯＭ及びＤＶＤ−ＲＯＭディスクを含む。プロセッサ及びメモリは、特殊目的の論理回路によって捕捉することができ、又、そのような論理回路に合体することもできる。
【０１０３】
ユーザと対話するために、本書に述べた要旨の実施形態は、ユーザに情報を表示するためのディスプレイ装置、例えば、ＣＲＴ（陰極線管）又はＬＣＤ（液晶ディスプレイ）モニタと、ユーザがコンピュータへ入力を与えることができるようにするキーボード及びポインティング装置、例えば、マウス又はトラックボールと、を有するコンピュータにおいて具現化することができる。ユーザと対話するために他の種類の装置を使用することもでき、例えば、音響、スピーチ、又は触覚入力を含む任意の形態でユーザからの入力を受け取ることもできる。
【０１０４】
本書に述べた要旨の実施形態は、例えば、データサーバーのようなバックエンドコンポーネントを含むか、例えば、アプリケーションサーバーのようなミドルウェアコンポーネントを含むか、又は本書に述べた要旨の具現化でユーザと対話できるようにするグラフィックユーザインターフェイス又はウェブブラウザを有するクライアントコンピュータのようなフロントエンドコンポーネントを含むか、或いは１つ以上のこのようなバックエンド、ミドルウェア又はフロントエンドコンポーネントの組み合わせを含むコンピューティングシステムにおいて具現化することができる。システムのこれらコンポーネントは、任意の形態のデジタルデータ通信媒体、例えば、通信ネットワークによって相互接続することができる。通信ネットワークは、例えば、ローカルエリアネットワーク（ＬＡＮ）、及びワイドエリアネットワーク（ＷＡＮ）、例えば、インターネットを含む。
【０１０５】
コンピューティングシステムは、クライアント及びサーバーを含むことができる。クライアント及びサーバーは、一般的に、互いに離れており、典型的に、通信ネットワークを通して対話する。クライアントとサーバーとの関係は、各コンピュータ上で実行されて互いにクライアント／サーバー関係を有するコンピュータプログラムにより生じる。
【０１０６】
本明細書は、多数の細目を含むが、これらは、発明の範囲又は請求の範囲を限定するものと解釈されてはならず、特定の発明の特定の実施形態に特有の特徴の説明として解釈すべきである。個別の実施形態に関して本明細書に述べた幾つかの特徴は、１つの実施形態において組み合わせて具現化することもできる。逆に、１つの実施形態に関して述べた種々の特徴は、複数の実施形態に別々に、又は適当な準組み合わせで具現化することもできる。更に、それらの特徴は、ある組み合わせで作用するように説明され、最初にそのように請求されるが、請求された組合せからの１つ以上の特徴を、ある場合には、その組み合わせから削除することができ、且つ請求された組み合わせを準組み合わせ又は準組み合わせの変形へと向けることもできる。
【０１０７】
同様に、オペレーションは、特定の順序で図示されたが、望ましい結果を達成するために、そのようなオペレーションを図示された特定の順序又は逐次の順序で遂行すること、或いは図示された全てのオペレーションを遂行すること、が必要であると理解されてはならない。ある環境では、マルチタスク及びパラレル処理が好都合である。更に、上述した実施形態における種々のシステムコンポーネントの分離は、全ての実施形態においてそのような分離を必要とすると理解されてはならず、且つ上述したプログラムコンポーネント及びシステムは、一般的に、１つのソフトウェア製品に一緒に一体化することもできるし、又は複数のソフトウェア製品にパッケージすることもできることを理解されたい。
【０１０８】
以上、幾つかの実施形態を詳細に述べたが、これに基づいて、他の実施形態、変更及び代替がなされることが明らかであろう。
【符号の説明】
【０１０９】
１００：システム
１１０：同期サーバー
１１２：同期データレポジトリー
１２０：ウェブクライアント
１３０：クライアント装置
１３２：移動電話
１３４：パーソナルデジタルアシスタント
１３６：ハンドヘルドデータ処理装置
１４０：ユニバーサルサーバー
１４２：ユニバーサルデータレポジトリー
１６０、１７０、１８０、１９０：ネットワーク
２１０：ツルースデータ
２１２：データレコード
２２０：ツルースヒストリー
２２２：ヒストリーデータ
２２４：ヒストリープロパティ
２２６：衝突データ
２３０：クライアント状態
２３２：データクラス
２３６：同期アンカー
２３８：データクラスヒストリー
２４０：装置状態
４１０、４１２：クライアント
４１４：ネットワーク機器
４２０：ネットワーク
【図１】
0005624479.tif 000002
【図２】
0005624479.tif 000003
【図３】
0005624479.tif 000004
【図４】
0005624479.tif 000005
【図５ａ】
0005624479.tif 000006
【図５ｂ】
0005624479.tif 000007
【図５ｃ】
0005624479.tif 000008
【図５ｄ】
0005624479.tif 000009
【図５ｅ】
0005624479.tif 000010
【図５ｆ】
0005624479.tif 000011
【図５ｇ】
0005624479.tif 000012
【図５ｈ】
0005624479.tif 000013
【図６】
0005624479.tif 000014