(57)【要約】【課題】  いくつかの微細に編集可能なコンポーネントを有する階層的データ構造のクライアントとサーバのバージョンを同期させること。【解決手段】  同期をとるとき、階層的データ構造のクライアントのバージョンをサーバのバージョンと適切に同期させるために、サーバはクライアントのバージョンに生じる必要のある全ての変化を特定する。それら変化の各々はデータ構造の微細に編集可能なコンポーネントの１つまたは２つ以上の編集を含む。サーバは、同期情報を複数のメッセージに分割し、クライアント計算機システムへメッセージを個別に送信する。クライアントはメッセージの各々を微細に処理する。１つのメッセージ内において識別されたものとしてなされた各変化に対して、クライアント計算機システムは、変化に伴う微細に編集可能なコンポーネントを識別し、次に微細に編集可能なコンポーネントを特定の形態で編集（例えば、挿入、変更または削除）する。【選択図】  図４
2004171574.tif 000002
【特許請求の範囲】
【請求項１】
サーバー計算機システムおよびクライアント計算機システムを含み、前記サーバー計算機システムおよび前記クライアント計算機システムは各々階層的データ構造のバージョンを含み、前記階層的データ構造は複数の微細に編集可能なコンポーネントを含むコンピュータネットワークにおいて、前記クライアント計算機システムの受信バッファが前記サーバーのバージョンと前記クライアントのバージョンを同期させるために用いられる同期データの全てを含む１つのメッセージを同時に含むのには十分でないメモリを有しているときでも、前記サーバー計算機システムが前記階層的データ構造の前記サーバーのバージョンおよび前記クライアントのバージョンを同期させるための方法であって、該方法は、
前記階層的データ構造の前記サーバーのバージョンと前記クライアントとのバージョンの間に同期を生じさせることを決定する工程と、
同期が生じたとした場合に生じさせる必要のある複数の変化を特定する工程であって、前記複数の変化の各々が１つまたは２つ以上の微細に編集可能なコンポーネントに対する変更を含む工程と、
前記複数の変化の全てを含む１つのメッセージを前記クライアント計算機システムの受信バッファ内に含ませることができないことを判断する工程と、
前記複数の変化の全てよりも少ない変化を含む第１のグループを含む第１のメッセージを組み立てる工程と、
前記複数の変化の少なくとも一部分であって前記第１のグループの部分ではない第２のグループを含む第２のメッセージを組み立てる工程と、
前記第１のメッセージを前記クライアント計算機システムへ送信する工程と、
前記第２のメッセージを前記クライアント計算機システムへ送信する工程と
を備えることを特徴とする方法。
【請求項２】
前記第２のグループは、前記第１のグループの部分ではない前記複数の変化の全てを含んでおらず、前記方法は、
前記第１または前記第２のグループ内にない前記複数の変化を含む１つまたは２つ以上の別のメッセージを組み立てる工程
をさらに備えることを特徴とする請求項１に記載の方法。
【請求項３】
前記階層的データ構造の前記サーバーのバージョンと前記クライアントのバージョンとの間に同期を生じさせることを決定する前記工程は、
同期の要求を前記クライアント計算機システムから受信する工程
を備えることを特徴とする請求項１に記載の方法。
【請求項４】
前記階層的データ構造の前記サーバーのバージョンと前記クライアントのバージョンとの間に同期を生じさせることを決定する前記工程は、
前記サーバー計算機システムが、前記クライアント計算機システムから同期の同期要求を受信したことなしに、それ自体の状態情報に基づいて、同期を生じさせる決定をする工程
を備えることを特徴とする請求項１に記載の方法。
【請求項５】
同期が生じたとした場合に生じさせる必要のある複数の変化を特定する前記工程は、
前記階層的データ構造のクライアントのバージョンの状態を表す変化の識別子を前記階層的データ構造のサーバーのバージョンの状態を表す変化の識別子と比較する工程
を備えることを特徴とする請求項１に記載の方法。
【請求項６】
前記階層的データ構造のクライアントのバージョンの状態を表す前記変化の識別子を前記クライアント計算機システムから受信する工程
をさらに備えることを特徴とする請求項５に記載の方法。
【請求項７】
前記階層的データ構造のクライアントのバージョンの状態を表す前記変化の識別子をローカルデータベースから取得する工程
をさらに備えることを特徴とする請求項５に記載の方法。
【請求項８】
前記複数の変化の全てを含む１つのメッセージを前記クライアント計算機システムの受信バッファ内に含ませることができないこと判断する前記工程は、
前記１つのメッセージのサイズを判断する工程と、
前記クライアント計算機システムの前記受信バッファのサイズを判断する工程と、
前記１つのメッセージの前記サイズが前記受信バッファの前記サイズよりも大きいと判断する工程と
を備えることを特徴とする請求項１に記載の方法。
【請求項９】
前記クライアント計算機システムの前記受信バッファのサイズを判断する前記工程は、
前記クライアント計算機システムから前記受信バッファの前記サイズの指標を受信する工程と、
前記受信バッファの前記サイズが前記クライアント計算機システムによって特定された通りであると判断する工程と
を備えることを特徴とする請求項８に記載の方法。
【請求項１０】
前記複数の変化の全てより少ない変化を含む第１のグループを含む第１のメッセージを組み立てる前記工程は、
前記第１のメッセージを前記第２のメッセージと相関させるヘッダ部分と、変化の前記第１のグループを含むボディ部分とを含む第１のＳＯＡＰエンベロープを構成する工程
を備えることを特徴とする請求項１に記載の方法。
【請求項１１】
前記複数の変化の少なくとも一部分であって前記第１のグループの部分ではない第２のグループを含む第２のメッセージを組み立てる前記工程は、
前記第２のメッセージを前記第１のメッセージと相関させるヘッダ部分と、変化の前記第２のグループを含むボディ部分とを含む第２のＳＯＡＰエンベロープを構成する工程
を備えることを特徴とする請求項１０に記載の方法。
【請求項１２】
サーバー計算機システムおよびクライアント計算機システムを含み、前記サーバー計算機システムおよび前記クライアント計算機システムは各々階層的データ構造のバージョンを含み、前記階層的データ構造は複数の微細に編集可能なコンポーネントを含むコンピュータネットワークで使用するコンピュータプログラムであって、前記コンピュータプログラムは前記クライアント計算機システムの受信バッファが前記サーバーのバージョンと前記クライアントのバージョンを同期させるために用いられる同期データの全てを含む１つのメッセージを同時に含むのには十分でないメモリを有しているときでも、前記サーバー計算機システムが前記階層的データ構造の前記サーバーのバージョンと前記クライアントのバージョンを同期させる方法を実装し、該コンピュータプログラムは、
前記階層的データ構造の前記サーバーのバージョンと前記クライアントのバージョンとの間に同期を生じさせることを決定するコンピュータ実行可能命令と、
同期が生じたとした場合に生じさせる必要のある複数の変化を特定するコンピュータ実行可能命令であって、前記複数の変化の各々が１つまたは２つ以上の微細に編集可能なコンポーネントに対する変更を含むコンピュータ実行可能命令と、
前記複数の変化の全てを含む１つのメッセージを前記クライアント計算機システムの受信バッファ内に含ませることができないことを判断するコンピュータ実行可能命令と、
前記複数の変化の全てよりも少ない変化を含む第１のグループを含む第１のメッセージを組み立てるコンピュータ実行可能命令と、
前記複数の変化の少なくとも一部分であって前記第１のグループの部分ではない第２のグループを含む第２のメッセージを組み立てるコンピュータ実行可能命令と、
前記第１のメッセージを前記クライアント計算機システムへ送信するコンピュータ実行可能命令と、
前記第２のメッセージを前記クライアント計算機システムへ送信するコンピュータ実行可能命令と
を含むことを特徴とするコンピュータプログラム。
【請求項１３】
前記階層的データ構造の前記サーバーのバージョンと前記クライアントのバージョンとの間に同期を生じさせることを決定する前記コンピュータ実行可能命令は、
前記クライアント計算機システムからの同期の要求の受信を検出するコンピュータ実行可能命令
を備えたことを特徴とする請求項１２に記載のコンピュータプログラム。
【請求項１４】
前記階層的データ構造の前記サーバーのバージョンと前記クライアントのバージョンとの間に同期を生じさせることを決定する前記コンピュータ実行可能命令は、
前記サーバー計算機システムが、前記クライアント計算機システムから同期の同期要求を受信したことなしに、それ自体の状態情報に基づいて、同期を生じさせる決定をするコンピュータ実行可能命令
を備えたことを特徴とする請求項１２に記載のコンピュータプログラム。  
【請求項１５】
同期が生じたとした場合に生じさせる必要のある複数の変化を特定し、前記複数の変化の各々が１つまたは２つ以上の微細に編集可能なコンポーネントに対する変更を伴う前記コンピュータ実行可能命令は、
前記クライアントの前記階層的データ構造のバージョンの状態を表す変化の識別子を前記サーバーの前記階層的データ構造のバージョンの状態を表す変化の識別子と比較するコンピュータ実行可能命令
を備えたことを特徴とする請求項１２に記載のコンピュータプログラム。
【請求項１６】
前記クライアント計算機システムからの前記階層的データ構造のクライアントのバージョンの状態を表す前記変化の識別子の受信を検出するコンピュータ実行可能命令
をさらに有することを特徴とする請求項１５に記載のコンピュータプログラム。
【請求項１７】
前記階層的データ構造のクライアントのバージョンの状態を表す前記変化の識別子をローカルデータベースから取得するコンピュータ実行可能命令
をさらに有することを特徴とする請求項１５に記載のコンピュータプログラム。
【請求項１８】
前記複数の変化の全てを含む１つのメッセージを前記クライアント計算機システムの受信バッファ内に含ませることができないと判断する前記コンピュータ実行可能命令は、
前記１つのメッセージのサイズを判断するコンピュータ実行可能命令と、
前記クライアント計算機システムの前記受信バッファのサイズを判断するコンピュータ実行可能命令と、
前記１つのメッセージの前記サイズが前記受信バッファの前記サイズよりも大きいと判断するコンピュータ実行可能命令と
を備えたことを特徴とする請求項１２に記載のコンピュータプログラム。
【請求項１９】
前記クライアント計算機システムの前記受信バッファのサイズを判断する前記コンピュータ実行可能命令は、
前記クライアント計算機システムからの前記受信バッファの前記サイズの指標の受信を検出するコンピュータ実行可能命令と、
前記受信バッファの前記サイズが前記クライアント計算機システムによって特定された通りであると判断するコンピュータ実行可能命令と
を備えたことを特徴とする請求項１８に記載のコンピュータプログラム。
【請求項２０】
前記複数の変化の全てより少ない変化を含む第１のグループを含む第１のメッセージを組み立てる前記コンピュータ実行可能命令は、
前記第１のメッセージを前記第２のメッセージと相関させるヘッダ部分と、変化の前記第１のグループを含むボディ部分とを含む第１のＳＯＡＰエンベロープを構成するコンピュータ実行可能命令
を備えたことを特徴とする請求項１９に記載のコンピュータプログラム。
【請求項２１】
前記複数の変化の少なくとも一部分であって前記第１のグループの部分ではない第２のグループを含む第２のメッセージを組み立てる前記コンピュータ実行可能命令は、
前記第２のメッセージを前記第１のメッセージと相関させるヘッダ部分と、変化の前記第２のグループを含むボディ部分とを含む第２のＳＯＡＰエンベロープを構成するコンピュータ実行可能命令
を備えたことを特徴とする請求項２０に記載のコンピュータプログラム。
【請求項２２】
サーバー計算機システムおよびクライアント計算機システムを含み、前記サーバー計算機システムおよび前記クライアント計算機システムは各々階層的データ構造のバージョンを含み、前記階層的データ構造は複数の微細に編集可能なコンポーネントを含むコンピュータネットワークにおいて、前記クライアント計算機システムの受信バッファが前記サーバーのバージョンと前記クライアントのバージョンを同期させるために用いられる同期データの全てを含む１つのメッセージを同時に含むのには十分でないメモリを有しているときでも、前記サーバー計算機システムが前記階層的データ構造の前記サーバーのバージョンおよび前記クライアントのバージョンを同期させるための方法であって、該方法は、
前記階層的データ構造の前記サーバーのバージョンと前記クライアントとのバージョンの間に同期を生じさせることを決定する工程と、
同期が生じたとした場合に生じさせる必要のある複数の変化を特定する工程であって、前記複数の変化の各々が１つまたは２つ以上の微細に編集可能なコンポーネントに対する変更を含む工程と、
前記複数の変化を、受信バッファのサイズを考慮した形態で、クライアント計算機システムへ送信するステップと
を備えることを特徴とする方法。  
【請求項２３】
前記複数の変化を、受信バッファのサイズを考慮した形態で、前記クライアント計算機システムへ送信する前記ステップは、
前記複数の変化の全てを含む１つのメッセージを前記クライアント計算機システムの受信バッファ内に含ませることができないことを判断する工程と、
前記複数の変化の全てよりも少ない変化を含む第１のグループを含む第１のメッセージを組み立てる工程と、
前記複数の変化の少なくとも一部分であって前記第１のグループの部分ではない第２のグループを含む第２のメッセージを組み立てる工程と、
前記第１のメッセージを前記クライアント計算機システムへ送信する工程と、
前記第２のメッセージを前記クライアント計算機システムへ送信する工程と
を備えることを特徴とする請求項２２に記載の方法。
【請求項２４】
サーバー計算機システムおよびクライアント計算機システムを含み、前記サーバー計算機システムおよび前記クライアント計算機システムは各々階層的データ構造のバージョンを含み、前記階層的データ構造は複数の微細に編集可能なコンポーネントを含むコンピュータネットワークにおいて、前記クライアント計算機システムの受信バッファが前記サーバーのバージョンと前記クライアントのバージョンを同期させるために用いられる同期データの全てを含む１つのメッセージを同時に含むのには十分でないメモリを有しているときでも、前記クライアント計算機システムが前記階層的データ構造の前記サーバーのバージョンおよび前記クライアントのバージョンを同期させるための方法であって、該方法は、
前記階層的データ構造のクライアントのバージョンを前記階層的データ構造のサーバーのバージョンと同期させるために必要な複数の変化の全てよりも少ない変化を含む第１のグループを含む第１のメッセージを受信する工程であって、前記複数の変化の各々が１つまたは２つ以上の微細に編集可能なコンポーネントに対する変更を含む工程と、
前記第１のグループの変化の内の全ての前記変化の全てを処理する工程と、
前記複数の変化の少なくとも一部分であって前記第１のグループの部分ではない第２のグループを含む第２のメッセージを受信する工程であって、前記複数の変化の各々が１つまたは２つ以上の微細に編集可能なコンポーネントに対する変更を含む工程と、
前記第２のグループの変化の内の前記変化の全てを処理する工程であって、前記第１のグループおよび前記第２のグループ内の前記変化の全てを処理する前記工程が、各々の変化について、
前記変化に含まれる微細に編集可能なコンポーネントを特定する工程、および
前記変化によって特定された形態で微細に編集可能なコンポーネントを編集する工程
を含む工程と
を備えることを特徴とする方法。
【請求項２５】
前記サーバー計算機システムへ同期の要求を送信する工程
をさらに備えることを特徴とする請求項２４に記載の方法。
【請求項２６】
前記階層的データ構造のクライアントのバージョンを前記階層的データ構造のサーバーのバージョンと同期させるために必要な複数の変化の全てよりも少ない変化を含む第１のグループを含む第１のメッセージを受信し、前記複数の変化の各々が１つまたは２つ以上の微細に編集可能なコンポーネントに対する変更を含む前記工程は、
第１のＳＯＡＰエンベロープを第２のＳＯＡＰエンベロープと相関させるヘッダ部分と、変化の前記第１のグループを含むボディ部分とを含む前記第１のＳＯＡＰエンベロープを受信する工程
を備えることを特徴とする請求項２４に記載の方法。
【請求項２７】
前記複数の変化の少なくとも一部分であって前記第１のグループの部分ではない第２のグループを含む第２のメッセージを受信し、前記複数の変化の各々が１つまたは２つ以上の微細に編集可能なコンポーネントに対する変更を含む前記工程は、
前記第２のＳＯＡＰエンベロープを前記第１のＳＯＡＰエンベロープと相関させるヘッダ部分と、変化の前記第２のグループを含むボディ部分とを含む前記第２のＳＯＡＰエンベロープを受信する工程
を備えることを特徴とする請求項２６に記載の方法。
【請求項２８】
前記複数の変化の少なくとも一部分であって前記第１のグループの部分ではない第２のグループを含む第２のメッセージを受信し、前記複数の変化の各々が１つまたは２つ以上の微細に編集可能なコンポーネントに対する変更を含む前記工程は、
第２のＳＯＡＰエンベロープを第１のＳＯＡＰエンベロープと相関させるヘッダ部分と、前記第２のグループの変化を含むボディ部分とを含む前記第２のＳＯＡＰエンベロープを受信する工程
を備えることを特徴とする請求項２４に記載の方法。
【請求項２９】
前記第１のグループの変化が前記第２のグループの変化に先立って生じるべき変化であることを表していると判断する工程
をさらに備えることを特徴とする請求項２４に記載の方法。
【請求項３０】
前記第１のグループの変化が前記第２のグループの変化に先立って生じるべき変化であることを表していると判断する前記工程は、
前記第１のメッセージからの変化の識別子を前記第２のメッセージからの変化の識別子と比較する工程
を備えることを特徴とする請求項２９に記載の方法。
【請求項３１】
前記第１のグループの変化が前記第２のグループの変化に先立って生じるべき変化であることを表していると判断する前記工程は、
前記第１のメッセージが前記第２のメッセージと相互に関連されていると判断する工程
をさらに備えることを特徴とする請求項３０に記載の方法。
【請求項３２】
前記第１のグループの変化の内の前記変化の全てを処理する前記工程が、前記第２のグループの変化の内の前記変化の全てを処理する前記工程に先立って生じることを特徴とする請求項２９に記載の方法。
【請求項３３】
前記第１のメッセージを受信する前記工程が、前記第２のメッセージを受信する前記工程の後に生じる場合に、
前記第２のグループの変化の内の前記変化の全てを処理する前記工程を、前記第１のメッセージを受信する前記工程および前記第１のグループの変化の内の前記変化の全てを処理する前記工程が完了するまで、先送りする工程
をさらに備えることを特徴とする請求項３２に記載の方法。
【請求項３４】
サーバー計算機システムおよびクライアント計算機システムを含み、前記サーバー計算機システムおよび前記クライアント計算機システムは各々階層的データ構造のバージョンを含み、前記階層的データ構造は複数の微細に編集可能なコンポーネントを含むコンピュータネットワークで使用するコンピュータプログラムであって、前記コンピュータプログラムは前記クライアント計算機システムの受信バッファが前記サーバーのバージョンと前記クライアントのバージョンを同期させるために用いられる同期データの全てを含む１つのメッセージを同時に含むのには十分でないメモリを有しているときでも、前記クライアント計算機システムが前記階層的データ構造の前記サーバーのバージョンと前記クライアントのバージョンを同期させる方法を実装し、該コンピュータプログラムは、
前記階層的データ構造のクライアントのバージョンを前記階層的データ構造のサーバーのバージョンと同期させるために必要な複数の変化の全てよりも少ない変化を含む第１のグループを含む第１のメッセージの受信を検出するコンピュータ実行可能命令であって、前記複数の変化の各々が１つまたは２つ以上の微細に編集可能なコンポーネントに対する変更を含む前記命令と、
前記第１のグループの変化の内の前記変化の全てを処理するコンピュータ実行可能命令と、
前記複数の変化の少なくとも一部分であって前記第１のグループの部分ではない第２のグループを含む第２のメッセージの受信を検出するコンピュータ実行可能命令であって、前記複数の変化の各々が１つまたは２つ以上の微細に編集可能なコンポーネントに対する変更を含む前記命令と、
前記第２のグループの変化の内の前記変化の全てを処理するコンピュータ実行可能命令であって、前記第１のグループおよび前記第２のグループ内の前記変化の全ての処理が、各々の変化について、
前記変化に含まれる微細に編集可能なコンポーネントを特定すること、および
前記変化によって特定された形態で微細に編集可能なコンポーネントの編集すること
を含む前記命令と
を備えたことを特徴とするコンピュータプログラム。
【請求項３５】
前記サーバー計算機システムへ送信される同期の要求を発生するコンピュータ実行可能命令
をさらに備えたことを特徴とする請求項３４に記載のコンピュータプログラム。
【請求項３６】
前記階層的データ構造のクライアントのバージョンを前記階層的データ構造のサーバーのバージョンと同期させるために必要な複数の変化の全てよりも少ない変化を含む第１のグループを含む第１のメッセージの受信を検出し、前記複数の変化の各々が１つまたは２つ以上の微細に編集可能なコンポーネントに対する変更を含む前記コンピュータ実行可能命令は、
第１のＳＯＡＰエンベロープを第２のＳＯＡＰエンベロープと相関させるヘッダ部分と、前記第１のグループの変化を含むボディ部分とを含む前記第１のＳＯＡＰエンベロープの受信を検出するコンピュータ実行可能命令
を備えたことを特徴とする請求項３４に記載のコンピュータプログラム。
【請求項３７】
前記複数の変化の少なくとも一部分であって前記第１のグループの部分ではない第２のグループを含む第２のメッセージの受信を検出し、前記複数の変化の各々が１つまたは２つ以上の微細に編集可能なコンポーネントに対する変更を含む前記コンピュータ実効可能命令は、
前記第２のＳＯＡＰエンベロープを前記第１のＳＯＡＰエンベロープと相関させるヘッダ部分と、前記第２のグループの変化を含むボディ部分とを含む前記第２のＳＯＡＰエンベロープの受信を検出するコンピュータ実行可能命令
を備えたことを特徴とする請求項３６に記載のコンピュータプログラム。
【請求項３８】
前記複数の変化の少なくとも一部分であって前記第１のグループの部分ではない第２のグループを含む第２のメッセージの受信を検出し、前記複数の変化の各々が１つまたは２つ以上の微細に編集可能なコンポーネントに対する変更を含む前記コンピュータ実行可能命令は、
第２のＳＯＡＰエンベロープを第１のＳＯＡＰエンベロープと相関させるヘッダ部分と、前記第２のグループの変化を含むボディ部分とを含む前記第２のＳＯＡＰエンベロープの受信を検出するコンピュータ実行可能命令
を備えたことを特徴とする請求項３４に記載のコンピュータプログラム。
【請求項３９】
前記第１のグループの変化が前記第２のグループの変化に先立って生じる変化であることを表していると判断するコンピュータ実行可能命令
をさらに備えたことを特徴とする請求項３４に記載のコンピュータプログラム。
【請求項４０】
前記第１のグループの変化が前記第２のグループの変化に先立って生じる変化であることを表していると判断する前記コンピュータ実行可能命令は、
前記第１のメッセージからの変化の識別子を前記第２のメッセージからの変化の識別子と比較するコンピュータ実行可能命令
を備えたことを特徴とする請求項３９に記載のコンピュータプログラム。
【請求項４１】
前記第１のグループの変化が前記第２のグループの変化に先立って生じる変化であることを表していると判断する前記コンピュータ実行可能命令は、
前記第１のメッセージが前記第２のメッセージと相互に関連されていると判断するコンピュータ実行可能命令
をさらに備えたことを特徴とする請求項４０に記載のコンピュータプログラム。
【請求項４２】
前記第１のグループの変化の内の前記変化の全てを処理する前記コンピュータ実行可能命令の起動が、前記第２のグループの変化の内の前記変化の全てを処理する前記コンピュータ実行可能命令に先立って実行されるように設定されている
ことを特徴とする請求項３９に記載のコンピュータプログラム。
【請求項４３】
請求項１２乃至２１および請求項３４乃至４２に記載のコンピュータプログラムを記録したことを特徴とする１つまたは２以上のコンピュータ可読媒体。
【請求項４４】
前記１つまたは２つ以上のコンピュータ可読媒体は、物理的記憶媒体であることを特徴とする請求項４３に記載の１つまたは２以上のコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
（１．本発明の分野）
本発明は、ネットワーク通信技術に関し、特に、同期メッセージを複数の微細に処理可能な要素に分割する機構に関する。
【背景技術】
【０００２】
（２．背景技術および関連技術）
計算機技術は、人々が働き、遊ぶ方法に改革を起こし、そして人類の進歩に大きく貢献してきた。コンピュータは、今日、ワードプロセッサ、計算機シミュレーション、先進的ゲーム、音声認識など等、数え切れないほどのアプリケーションを支援する。計算機システムは、今では、例えば、デスクトップコンピュータ、ラップトップコンピュータ、ＰＤＡｓ（Personal Digital Assistants）、さらに移動体電話および装置などを含む広範な形態となっている。
【０００３】
ＰＤＡｓや無線電話のようなある種の移動体無線装置は、従来大型のデスクトップコンピュータのみが実行できた多くのタスクを実行することができる優れたメモリおよび一般的処理能力を有する。これらのタスクは、データネットワークを介した通信を要求するタスクをも含んでいる。これにより、ユーザが、移動中であっても、インターネットへアクセスし、電子メールタスクを実行することができる。しかしながら、そのような精巧な携帯型計算機システムにもかかわらず、より大きなデスクトップあるいはラップトップの計算機システムと比較しても、より小さな装置において、メモリはより制限される傾向にある。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
システムメモリの大きさが比較的に制限されていることから、受信バッファに割り当てられるメモリの大きさもまた、非常に小さくなることがある。階層的データ構造を同期する場合に起こり得るように、通信が多くなると、通信は受信バッファよりも多くなることがある。これは、通信の一部が欠落する結果となり、ある場合には、通信処理能力が完全に消失する結果となる。
【０００５】
従って、小さすぎて１つのメッセージ内の同期情報の全てを収容することができない受信バッファの複数に適応するための、階層的データ構造を同期する機構が望まれている。
【課題を解決するための手段】
【０００６】
（本発明の概要）
前述した従来技術の課題は本発明の原理によって解決され、本発明は、クライアントの計算機システム上に格納された階層的データ構造のバージョンと、サーバー上に格納された階層的データ構造のバージョンとを同期する機構に指向する。クライアントの計算機システムの受信バッファが、同期するために必要とされる変化の全てを有する１つのメッセージを収容することができないときでさえも同期が生じる。階層的データ構造は、いくつかの微細に編集可能な要素（atomically-editable components）を有し、これらの要素は、個別にアクセス可能であり、およびそれ自体の変化を追跡する情報をも有する。
【０００７】
同期が発生すると決定した後に、サーバーは、クライアントバージョンの階層的文書をサーバーバージョンの階層文書と同期するために、クライアントのバージョンに生じる必要のある変化の全てを特定する。変化の各々は、データ構造の１つまたは２つ以上の微細に編集可能な要素の編集（例えば、挿入、改変または削除）を含む。サーバーが、複数の変化の全てを含む１つのメッセージをクライアントの計算機システムの受信バッファ内に収容することができないと推定すると、サーバーは、同期情報を複数のメッセージに分割する。
【０００８】
一般的な分割方式とは異なり、個別のメッセージの各々は、受信時に微細に処理されて、部分的同期を実行することができる。換言すると、同期情報が２つの微細に編集可能なメッセージに分割され、かつそのメッセージの１つのみが受信され処理されたとしても、階層的データ構造はスキーマに準拠し、およびそのデータ構造で動くアプリケーションは依然そのデータ構造で動作することができる。
【０００９】
サーバーは、同期の変化の全てよりも少ない第１のグループを含む第１のメッセージを組み立て、およびそれぞれ別の同期の変化を含む１つまたは２つ以上の別のメッセージを組み立てる。それらのメッセージは、全体として見たときに、同期の変化の全てを含むが、それらのいずれもが、全ての同期の変化を個別に含まない。従って、個々のメッセージの各々はより小さく、それによりクライアントの計算機システムの受信バッファにより適合し易くなる。
【００１０】
ついで、各々のメッセージは、個別にクライアントの計算機システムへ送信される。次に、クライアントの計算機システムは、それらのメッセージの各々を微細に処理する。１つのメッセージ内で特定されたものとしてなされた各変化に対し、クライアントの計算機システムは、その変化に伴う微細に編集可能な要素を特定し、次に、その変化によって特定された形態で、微細に編集可能な要素を編集（例えば、挿入、改変または削除）する。それら変化は、階層的データ構造の微細に編集可能な要素を伴うから、その変化は、同期の変化の全てを有さずとも実行されることができる。従って、（メッセージが、適切な順序で到着すると仮定すると）メッセージのいずれをもキャッシュする必要がない。メッセージのいずれもが変化の全てを表さないけれども、メッセージの各々は、受信され、処理され、かつ欠落される。
【００１１】
しかし、もしまだ受信されていないメッセージよりも後の変化を有するメッセージが受信された場合、多少のキャッシュが発生する。この場合、後の変化を含むメッセージは、先の変化を含むメッセージが受信され処理されるまで、キャッシュされるようにしてもよい。これは、比較的に稀にしか生起しない。その理由は、サーバーが、後の変化を有するメッセージを伝送する前に、先の変化を有するメッセージを先にディスパッチする傾向にあるからである。結局、メッセージは、典型的には、送信された順序で到着する。
【００１２】
このようにして、通信は、不十分な受信バッファサイズに起因して、欠落しない。さらに、変化は、全体の同期がまだ達成されていなくても、それらが受信されるのに応じて、処理することができる。メッセージの一部が受信されない場合には、それらの受信されていないメッセージのみが伝送され、それによりネットワーク帯域幅が維持される必要がある。あるいはまた、実装の観点からは、（第１の喪失メッセージの後のメッセージの一部が既に受信されており、全てを喪失しているのではない）第１の喪失メッセージから始まるメッセージを単純に送信することがより容易であるかもしれない。いずれにしても、伝送される必要のあるメッセージは少数である。
【００１３】
本発明の更なる特徴および利点は、続く説明に述べられ、それらの一部分はその説明から明らかになり、若しくは本発明の実施によってわかるであろう。本発明の特徴及び利点は、添付された特許請求の範囲に特に示される法律文書および組み合わせによって認識され、および得られるだろう。本発明のこれらおよび他の特徴は、続く説明および添付された特許請求の範囲からより完全に明らかになり、若しくは本明細書に記載されている本発明の実施によってわかるだろう。
【００１４】
本発明の上記および他の利点および特徴が得られる形態を述べるために、簡単に上述した本発明のさらに詳細な説明を、添付の図面に示されている実施形態を参照することによって、行う。これらの図は、本発明の典型的な実施形態を描くのみであり、従って本発明の範囲を限定すると考えられることはないと理解して、本発明は、添付の図面を用いてさらなる特定および詳細とともに、説明される。
【発明を実施するための最良の形態】
【００１５】
（好ましい実施形態の詳細な説明）
本発明の原理は、クライアントの計算機システム上に格納された階層的データ構造のバージョンと、サーバー計算機システム上に格納された階層的データ構造のバージョンとを同期する機構に関する。階層的データ構造は、別個にアクセス可能であるいくつかの微細に編集可能な要素を有する。同期が発生すると決定した後に、サーバーは、クライアントの階層文書をサーバーの階層文書と同期させるために、クライアントのバージョンに生じる必要がある変化の全てを特定する。変化の各々は、データ構造の微細に編集可能な要素の１つまたは２つ以上の編集（挿入、改変若しくは削除など）を伴う。サーバーが、複数の変化の全てを含む１つのメッセージをクライアントの計算機システムの受信バッファ内に収容することができないと決定した場合、サーバーは、同期情報を複数のメッセージに分割して、それらのメッセージを個別にクライアントの計算機システムへ送信する。
【００１６】
ついで、クライアントの計算機システムは、メッセージの各々を微細に処理することができる。１つのメッセージ内で特定されたものとしてなされたように各変化に対して、クライアントの計算機システムは、その変化に伴う微細に編集可能な要素を特定し、次に、その変化によって特定された形態で、微細に編集可能な要素を編集（例えば、挿入、改変または削除）する。それらの変化は、階層的データ構造の微細に編集可能な要素を伴うから、その変化は、同期の変化の全てを有さずとも実行されることができる。
【００１７】
本発明の範囲内の実施形態は、媒体に格納されたコンピュータ実行可能命令またはデータ構造を担持または有するコンピュータ可読媒体を含む。このようなコンピュータ可読媒体は、汎用または専用のコンピュータによってアクセスすることができる様々な媒体のいずれかとすることができる。例示であって限定するものではないが、そのようなコンピュータ可読媒体は、コンピュータ実行可能命令またはデータ構造の形の所望のプログラムコード手段を担持または格納することができ、かつ汎用若しくは専用コンピュータによってアクセスできるＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭまたは他の光ディスクストレージ、磁気ディスクストレージまたは他の磁気記憶ストレージ、若しくは他の媒体など、物理的なコンピュータ可読媒体を含むことができる。
【００１８】
情報が、（ハードワイヤード、ワイヤレス若しくはハードワイヤードまたはワイヤレスの組合せなど）ネットワークまたはその他の通信コネクションを通じてコンピュータに伝送されまたは提供されると、当然のことながら、コンピュータは、そのコネクションをコンピュータ可読媒体として見る。従って、そのようなコネクションのいずれをも、当然に、コンピュータ可読媒体と称する。上記の組合せもまた、コンピュータ可読媒体の範囲に含まれなければならない。コンピュータ実行可能命令は、例えば、汎用コンピュータ、専用コンピュータまたは専用処理装置に、ある機能若しくは機能群を実行させるいずれからなる命令およびデータをも含む。コンピュータ実行可能命令は、例えば、バイナリ、アセンブラ言語などの中間言語形式の命令若しくはソースコードとすることができる。
【００１９】
図１および以下の論述は、本発明を実施できる適切な計算機環境についての簡単で一般的な説明を提供することを意図する。必須ではないが、本発明は、コンピュータシステムによって実行されるプログラムモジュールなど、一般的なコンピュータ実行可能命令という面において述べられる。概括して、プログラムモジュールは、特定のタスクを実行するまたは特定の抽象的なデータタイプを実装するルーチン、プログラム、オブジェクト、データ構造などを含む。コンピュータ実行可能命令に関連するデータ構造およびプログラムモジュールは、本明細書に開示する方法の工程（act）を実行するプログラムコード手段の例を示す。
【００２０】
図１を参照すると、本発明の原理のための適切な動作環境は、コンピュータシステム１００の形態の汎用コンピュータシステムを含む。コンピュータシステム１００は、例えば、本明細書に開示する動作の実行に適合されたパーソナルコンピュータとすることができる。
【００２１】
コンピュータシステム１００は、例えばキーボード、マイクロフォン、マウス、またはより小さなモバイル装置の場合のタッチパッドのような、入力装置から情報を受信するユーザ入力インタフェース１７０を含む。入力装置は、ユーザ入力インタフェース１７０と結合して、情報を入力することができる。入力装置は、予めプログラムされたデータまたはユーザの入力装置の操作に応答して、情報をそのような結合を介して伝送することができる。
【００２２】
コンピュータシステム１００は、ビデオ出力信号を外部のビデオ表示装置に出力するビデオ出力インタフェース１５０を含む。コンピュータシステム１００は、必要により、例えば、カラーまたはモノクロのコンピュータモニターのような、ビデオ表示装置と一体化して配置され、または分離することができる。ビデオ表示装置は、ビデオ出力インタフェース１５０と結合して、供給されるビデオ出力信号を受信することができる。より小さなモバイル装置の場合、ビデオ出力インタフェースは、より小さなディスプレイとインタフェースをとるようにできている。
【００２３】
同様に、コンピュータシステム１００は、オーディオ出力信号を外部のオーディオ出力装置に供給するオーディオ出力インタフェース１３０を含む。コンピュータシステム１００は、また必要により、サウンドデータを出力可能なスピーカー若しくは他の装置を含むことができるオーディオシステムと一体化して配置され、または分離することができる。オーディオシステムは、オーディオ出力インタフェース１３０と結合されて、供給されるオーディオ出力信号を受信することができる。
【００２４】
コンピュータシステム１００は、処理ユニット１２０を含み、それにより複雑かつ柔軟な汎用処理能力を発揮できる。処理ユニット１２０は、本発明の機能を含むコンピュータシステム１００の機能を実施するように設計されたコンピュータ実行可能命令を実行する。処理ユニット１２０は、システムメモリ１４０を含む種々の他のシステムコンポーネントをも相互に接続する、システムバス１１０に結合される。
【００２５】
システムメモリ１４０は、一般的に、種々様々な揮発性および／または不揮発性メモリを表し、先に述べた種類のメモリを含むことができる。しかし、コンピュータシステム１００で用いられる典型的なメモリの種類は、本発明にとって、重要ではない。１つまたは２つ以上のプログラムモジュールを備えたプログラムコード手段は、システムメモリ１４０に格納することができる。１つまたは２つ以上のプログラムモジュールは、オペレーティングシステム１４１、１つまたは２つ以上のアプリケーションプログラム１４２、他のプログラムモジュール１４３およびプログラムデータ１４４を含むことができる。
【００２６】
コンピュータシステム１００は、大容量ストレージインタフェース１６０を含むことができ、それにより例えば磁気ディスク若しくは光ディスクのような、大容量ストレージ装置からのデータの読み出しおよび／またはデータの書き込みをすることができる。大容量ストレージ装置を、大容量ストレージインタフェース１６０に結合して、データの読み出しおよび書き込みを行うことができる。大容量ストレージ装置が大容量ストレージインタフェース１６０に結合されたとき、オペレーティングシステム１４１、アプリケーションプログラム１４２、他のプログラムモジュール１４３およびプログラムデータ１４４を含む１つまたは２以上のプログラムモジュールを、大容量ストレージ装置に格納することができる。しかし、より小さなモバイル装置は、そのような大容量ストレージのいずれも有さない。
【００２７】
コンピュータシステム１００は、例えばオフィス規模若しくは企業規模のコンピュータネットワーク、イントラネット、インターネットおよび／または通信キャリアネットワークのような、ネットワークに接続できる。コンピュータシステム１００は、ネットワークインタフェース１８０を含み、コンピュータシステム１００は、ネットワークインタフェース１８０を通じて、外部ソースからデータを受信し、および／または外部ソースへデータを送信する。コンピュータシステム１００は、例えば、遠隔のプロセッサシステムおよび／またはデータベースのような、外部ソースとそのようなネットワークを介してデータを交換することができる。
【００２８】
図１は、本発明の原理を実施することが出来るコンピュータシステムを例示するが、いかなるコンピュータシステムも、本発明の機能を実施することができる。明細書および特許請求の範囲において、「計算機システム」は、ソフトウェアを利用して１つまたは２つ以上の機能を実行することができるいかなる１つまたは複数のハードウェアコンポーネントとして、広く定義されている。計算機システムの例は、デスクトップコンピュータ、ラップトップコンピュータ、ＰＤＡｓ、電話機若しくは処理能力を有するその他のシステムまたは装置を含む。
【００２９】
図２は、本発明の原理が動作することができるネットワーク環境２００を図示する。ネットワーク環境２００は、ネットワーク２２０上で通信するクライアント計算機システム２１０およびサーバー計算機システム２３０を含む。クライアント計算機システム２１０は、比較的小さな受信バッファ２１２のみを有する比較的制限された記憶装置とすることができる。そのような装置の一例は、移動体電話若しくは移動体ＰＤＡｓとすることができる。クライアント計算機システム２１０およびサーバー計算機システム２３０は、それぞれ、コンピュータシステム１００について上述したように構成することができる。もしクライアント計算機システム２１０がコンピュータ１００である場合、受信バッファ２１２は、システムメモリ１４０から割り当てられることができる。
【００３０】
サーバー計算機システム２３０およびクライアント計算機システム２１０は、双方向に通信することができる。しかし、サーバー計算機システム２３０がクライアント計算機システム２３０と通信するとき、サーバー計算機システム２３０は、矢印２２１によって示されるように、クライアントの受信バッファにメッセージを送信する。この通信は、例えば、階層的データ構造のクライアントバージョン２１１を階層的データ構造のサーバーバージョン２３１と同期するときに実行される。
【００３１】
本明細書および特許請求の範囲では、「階層的データ構造」は、親子（parent-child）階層構造に配置されたデータフィールドを含むいかなるデータ構造であってもよい。そのような階層の機構を許可するフォーマットの一例は、ＸＭＬ（eXtensible Markup Language）である。
【００３２】
階層文書は、種々様々な階層フォーマットを採用することができるが、図３は、階層的データ構造における各ノードが、○あるいは×のいずれかによって表されている階層的データ構造３００の特定の模式図を示す。
【００３３】
○で表されたノード（例えば、ノード３０１乃至３０５）は、微細に編集されることのできるノードを表す。換言すると、微細に編集可能なノードの各々は、階層木構造内の別のノードに影響を与えることなく、編集される（即ち、挿入され、改変され、または削除される）ことができる。あるいはまた、微細に編集可能なノードは、変化が特定の微細に編集可能なノードに対する編集の観点から表現され得るようにできる変化を追跡する情報を有するようにしてもよい。
【００３４】
×（例えば、ノード３０６乃至３１７）によって表されるノードは、微細に編集可能でないノードを表している。ノード３０６乃至３１７を編集するためには、階層的データ構造のおおもとの枝における対応する微細に編集可能なノードを編集する。例えば、ノード３０８を編集するために、代わりに全体のノード３０２を編集する。ある場合には、いずれのノードが微細に編集可能かを制限して、階層的データ構造を維持するのに必要な処理量とメモリ資源を制限することが望ましいとされることもある。そのような階層的データ構造を使用するデータモデルの例は、同一出願人の同時係属中のアメリカ合衆国特許出願番号［代理人の整理番号13768.198.3］に説明されており、その出願は、それを参照することにより、その全体を本出願の一部とする。データ構造３００は、微細に編集可能なノードもあれば編集可能でないノードも有するが、本発明の原理は、データ構造中のノードの全てが微細に編集可能であるデータ構造にも、適用することができる。
【００３５】
図４は、本発明の原理に従って、階層的データ構造のサーバーのバージョンおよびクライアントのバージョンを同期させるための方法４００のフローチャートを示す。サーバーによって実行されるステップおよびいくつかの工程は、方法４００の右欄に「サーバー」という見出しで図示される。他方、クライアントによって実行されるいくつかの工程は、方法４００の左欄に「クライアント」という見出しで図示されている。
【００３６】
サーバーは、階層的データ構造のサーバーのバージョンとクライアントのバージョンとの間で同期を発生させる必要があることを決定する（工程４０１）。この決定は、クライアントがサーバーに同期要求を送信するのに応答してなされてもよい。あるいはまた、サーバーは、クライアントから同期要求を受信することなく、それ自体の状態情報に基づいて同期を発生させる必要があることを決定してもよい。例えば、サーバーは、周期的に同期するか、またはサーバーバージョンが予め定められた回数だけ変更された後などに同期することができる。
【００３７】
サーバーは、階層的データ構造のクライアントのバージョンに加えられるべき同期の変化を特定することも行う（工程４０２）。工程４０１および４０２は、これら２つの工程間に時間の依存性がないことを強調するために、並行して示してある。例えば、サーバーは、同期が差し迫って実行されるべきかどうかに無関係に、同期の変化が発生するのに応じて同期の変化を継続的に決定していけばよい。
【００３８】
同期の変化は、例えば、階層的データ構造のクライアントのバージョンの状態を表している変化の識別子を、階層的データ構造のサーバーのバージョンの状態を表している変化の識別子と比較することによって特定されることができる。クライアントのバージョンの状態を表す変化の識別子は、クライアント自体から受信されるかもしれないし、または最後に同期が起こったときにサーバーによって更新されキャッシュされたかもしれない。
【００３９】
次に、方法４００は、受信バッファのサイズを考慮するようにしてクライアント計算機システムへ変化を送信するための機能的で結果指向のステップを含む（ステップ４１０）。このステップは、このステップを達成するためのいかなる対応する工程をも含むことができる。しかし、例示された実施形態では、ステップ４１０は、特定の対応する工程４０４乃至４０９を含む。
【００４０】
より詳細には、サーバーは、複数の変化の全てを含む１つのメッセージを、クライアント計算機システムの受信バッファ内に収めることができないと、判断する（工程４０３）。これを達成するために、サーバーは、全ての変化を含む１つのメッセージのおよそのサイズを判断し、クライアント計算機システムの受信バッファのおよそのサイズを判断し、そして、受信バッファのサイズが１つのメッセージのサイズよりも大きく（または危険なほど近く）なると判断する。クライアントは、明示的に受信バッファのサイズをリストするかまたは受信バッファのサイズの妥当な判断が推測できる十分な情報を与えるサーバーに、事前に情報を登録することができる。例えば、もしクライアントが、同一のブランドのワイヤレス装置間で、一貫して同じ受信バッファサイズを有する特定のブランドのワイヤレス装置であると、受信バッファのサイズは、ワイヤレス装置のブランドに基づいて判断される。あるいはまた、受信バッファのサイズは、クライアントから受信する同期の要求の中に表示するようにしてもよい。
【００４１】
次に、サーバーは、それぞれ同期の変化の全てより少ない変化を含む多数のメッセージを組み立てる。例えば、サーバーは、変化の全てより少ない変化から成る第１のグループを含む第１のメッセージを組み立て（工程４０４）、第１のグループの部分ではない残余の変化の少なくとも一部から成る第２のグループを含む第２のメッセージを組み立て（工程４０５）、そして、もし第２のメッセージが残りの変化の全てを含んでいなかったならば、水平上の省略符号４０６によって示されるようにさらに多くのメッセージを組み立てる。
【００４２】
図５は、多数の変化５１１、５１２、５１３および５１４の全てを含む１つのメッセージ５１０の例を図示する。図５は、各々が変化の全てより少ない変化を含む一連のより小さいメッセージを示す。例えば、メッセージ５２１は１つの同期の変化５１１のみを含み、メッセージ５２２も１つの同期の変化５１２のみを含み、およびメッセージ５２３は二つの同期の変化５１３と５１４を含んでいる。与えられたメッセージ５２１乃至５２３のいずれのサイズも、１つのメッセージ５１０のサイズよりも小さく、従って、たとえ受信バッファのサイズが１つのメッセージ５１０のサイズよりも小さくても、受信バッファ内により受信されやすくなる。
【００４３】
一例では、メッセージの各々は、ＳＯＡＰ（Simple Object Access Protocol）エンベロープ（envelope）である。２つのメッセージが送信されるとき、第１のＳＯＡＰエンベロープのヘッダ（header）部分は、第１のメッセージを第２のメッセージと相関させるヘッダ部分を含み、および変化の第１のグループを含むボディ（body）部分を含む。第２のＳＯＡＰエンベロープは、第２のメッセージを第１のメッセージと相関させるヘッダ部分を含み、および変化の第２のグループを含むボディ部分を含む。
【００４４】
次に、サーバーは、第１および第２のメッセージ並びに同期の変化を含む可能性のある他のメッセージを、クライアント計算機システムへ送信し（それぞれ、工程４０７、４０８および４０９）、それに伴いクライアントは第１および第２のメッセージ並びに潜在的な他のメッセージを受信する（それぞれ、工程４１１、４１２および４１３）。次に、クライアントは、第１のメッセージ内で受信した変化の第１のグループ内における同期の変化の全てを処理し（工程４１４）、ついで変化の第２のグループ内における同期の変化の全てを処理し（工程４１５）、同様に、引き続きのメッセージ内で受信したその他の変化を処理する。
【００４５】
一実施形態では、第１のメッセージ内で受信された同期の変化は、引き続くメッセージ内の変化に先立って適用されるものとする。従って、もし、引き続くメッセージが第１のメッセージの前に受信されるとすると、引き続くメッセージを、第１のメッセージが受信されて処理されるまで、キャッシュすることができる。メッセージが送信された順序で受信されるより一般的な場合には、メッセージは、受信されるのに応じて、処理されることができる。これは、適用される変化が、データ構造が形式に違反したりデータ構造を破壊することなく、データ構造に微細に編集可能であるからである。従って、メッセージは、それらが受信された一時に、受信された変化の全てを再組み立てするプロセッサおよびメモリをより多く必要とする集中的タスクの実行を試みるのではなく、受信されるのに応じて、受信され、処理されおよび欠落され、つぎに１つのトランザクションプロセスにおいて変化を適用する。
【００４６】
本発明の原理は、メッセージがＳＯＡＰエンベロープである場合に決して限られないが、以下のＳＯＡＰエンベロープは、３つの異なる同期の変化を含むとき、メッセージがどのようになるかの一例を示す。１つの同期の変化は７の識別子を有するノードを削除し、他の変化は５の識別子を有するノードを編集し、さらに他の変化は１２の識別子を有するノードを削除する。これらの変化の全てが１つのメッセージの例で提供される場合、その例となるメッセージは、次のように現れることになろう。  
1.    <s:Envelope>
2.        <s:Header>
3.            <srp:path>
4.                <srp:from>“http://mywidgets.mobile.msn.com”＜/srp:from>
5.                <srp:id>23</srp:id>
6.                <srp:relatesTo>202</srp:relatesTo>
7.            </srp:path>
8.            <ss:license>“1f2e3d4c5b6a”</ms:license>
9.            <ms:response service= “myWidgets” previousChangeNumber=“8”
changeNumber= “11”/>
10.        </s:Header>
11.        <s:Body>
12.            <ms:queryResponse>
13.                <ms:changeQueryResponse baseChangeNumber= “11”
status=“success”>
14.                    <ms:deletedBlue id=“7” changeNumber=“9”/>
15.                    <m:widget id= “5” changeNumber=“10”>
16.                        <m:name xml:lang=“en”>Widget 5</m:name>
17.                        <m:unitPrice currency=“USD”>128.00
</m:unitPrice>
18.                    </m:widget>
19.                    <ms:deletedBlue id=“12” changeNumber=“11”/>
20.                </ms:changeQueryResponse>
21.            </ms:queryResponse>
22.        </s:Body>
23.    </s:Envelope>
【００４７】
この要求において、１乃至２３行目は、ＳＯＡＰエンベロープの全体である。２乃至１０行目は、ＳＯＡＰエンベロープのヘッダ部分を表し、１１乃至２２行目は、ＳＯＡＰエンベロープのボディ部分を表す。ヘッダ部分に関しては、３乃至７行目は、メッセージが辿る特定のパスを定義し、８行目は、ライセンス情報を表す。９行目は、前回の変化番号および変化が完全に実行されたときに階層的データ構造に適用される変化番号を表す。従って、変化を適用する前のデータ構造の変化番号は８であるのに対し、変化が適用された後の変化番号は１１となる。このように、メッセージは、９，１０および１１により特定された３つの変化の全てを含む。第１の変化は、１４行目においてＳＯＡＰエンベロープのボディ内に表される。第２の変化は、１５乃至１８行目において表される。第３の変化は、１９行目において表される。
【００４８】
３つの変化９，１０および１１の全てが同一のＳＯＡＰエンベロープ内に含まれるとき、上記の１つのＳＯＡＰエンベロープの例は、受信バッファに対して大きすぎる場合がある。従って、以下は、３つの特定のＳＯＡＰエンベロープであり、各々は変化の内の１つのみを含む例を示す。第１の変化を含む第１のＳＯＡＰエンベロープを例示する。  
1.    <s:Envelope>
2.        <s:Header>
3.            <srp:path>
4.                <srp:from> “http://mywidgets.mobile.msn.com”</srp:from>
5.                <srp:id>23</srp:id>
6.                <srp:relatesTo>202</srp:relatesTo>
7.            </srp:path>
8.            <ss:license>“1f2e3d4c5b6a”</ms:license>
9.            <ms:response service=“myWidgets” previousChangeNumber= “8”
changeNumber=“9”/>
10.        </s:Header>
11.        <s:Body>
12.            <ms:queryResponse>
13.                <ms:changeQueryResponse baseChangeNumber=“11”
status=“success”>
14.                    <ms:deletedBlue id=“7” changeNumber=“9”/>
15.                </ms:changeQueryResponse>
16.            </ms:queryResponse>
17.        </s:Body>
18.    </s:Envelope>
【００４９】
第１のフラグメント（分割）されたＳＯＡＰエンベロープは、変化の全てが適用されると、９行目は現在の変化番号が９となることを示していることを除いて、１つのＳＯＡＰエンベロープの例に類似する。さらに、ボディは変化９のみを含み、これは識別子７を有するノードを削除することである。
【００５０】
第２のフラグメントされたＳＯＡＰエンベロープは次の通りである。  
1.    <s:Envelope>
2.        <s:Header>
3.            <srp:path>
4.                <srp:from>“http://mywidgets.mobile.msn.com”</srp:from>
5.                <srp:id>24</srp:id>
6.                <srp:relatesTo>202</srp:relatesTo>
7.            </srp:path>
8.            <ss:license>“1f2e3d4c5b6a”</ms:license>
9.            <ms:response service= “myWidgets” previousChangeNumber=“9”
changeNumber=“10”/>
10.        </s:Header>
11.        <s:Body>
12.            <ms:queryResponse>
13.                <ms:changeQueryResponse baseChangeNumber= “11”
status=“success”>
14.                    <m:widget id=“5” changeNumber=“10”>
15.                        <m:name xml:lang=“en”>Widget 5</m:name>
16.                        <m:unitPrice currency=“USD”>128.00
</m:unitPrice>
17.                    </m:widget>
18.                </ms:changeQueryResponse>
19.            </ms:queryResponse>
20.        </s:Body>
21.    </s:Envelope>
【００５１】
第２のフラグメントされたＳＯＡＰエンベロープは、変化の全てが適用されると、９行目は現在の変化番号が１０となることおよび以前の変化番号が９であることを示していることを除いて、１つのＳＯＡＰエンベロープの例に類似する。従って、この第２のフラグメントは、第１のフラグメントが適用された後に、クライアントバージョンに適用される。さらに、ボディは識別子５を有するノードの編集であった変化１０のみを含む。
【００５２】
第３のフラグメントは、次のようになる。  
1.    <s:Envelope>
2.        <s:Header>
3.             <srp:path>
4.                <srp:from>“http://mywidgets.mobile.msn.com”</srp:from>
5.                <srp:id>25</srp:id>
6.                <srp:relatesTo>202</srp:relatesTo>
7.            </srp:path>
8.            <ss:license>“1f2e3d4c5b6a”</ms:license>
9.            <ms:response service=“myWidgets” previousChangeNumber=“10”
changeNumber=“11”/>
10.        </s:Header>
11.        <s:Body>
12.            <ms:queryResponse>
13.                <ms:changeQueryResponse baseChangeNumber=“11”
status=“success”>
14.                    <ms:deletedBlue id=“12” changeNumber=“11”/>
15.                </ms:changeQueryResponse>
16.            </ms:queryResponse>
17.        </s:Body>
18.    </s:Envelope>
【００５３】
第３のフラグメントされたＳＯＡＰエンベロープは、変化の全てが適用されると、９行目は現在の変化番号が１１となることおよび以前の変化番号が１０であることを示していることを除いて、１つのＳＯＡＰエンベロープの例に類似する。従って、この第３のフラグメントは、第２のフラグメントが適用された後に、クライアントバージョンに適用される。さらに、ボディは識別子１２を有するノードの削除であった変化１１のみを含む。
【００５４】
このＳＯＡＰエンベロープの例は、本発明の原理の現実の例によって提供されている。しかし、本発明の原理は、そのような例のいずれかに限定されることはない。さらに、例示のフラグメントされたＳＯＡＰメッセージは、１つのＳＯＡＰメッセージの例よりもほんの僅かに小さけれども（例えば、２３行のＸＭＬコードと比較した１８、２１および１８行のＸＭＬコード）、変化の個数がより大きい場合には、サイズの減少はより顕著となる。
【００５５】
従って、本発明の原理は、同期の変化をサーバーからクライアントへ通信できる機構であって、変化を再組み立てし、かつその変化をトランザクションに適用するために典型的に必要とされるかなりの量の処理およびメモリ能力を必要とすることなく、受信バッファを収容するより小さなフラグメントである機構を提供する。
【００５６】
本発明は、その精神若しくは本質的な特徴から逸脱することなく他の特定の形態で実施することができる。説明された実施形態は、あらゆる点で、単なる例示であり限定ではないと考えられるべきものである。従って、本発明の範囲は、前述の説明ではなく、添付した特許請求の範囲によって示される。特許請求の範囲と均等の意味および範囲内にある全ての変更がそれらの範囲内に包含されるものとする。
【図面の簡単な説明】
【００５７】
【図１】本発明の原理のための適切な実行環境を示す図である。
【図２】クライアントおよびサーバーの各々が階層的データ構造のバージョンへアクセスし、ここでさらなる変化が階層的データ構造のクライアントのバージョンに対して実行されるネットワーク環境を示す図である。
【図３】微細に編集可能な要素を有する階層的データ構造を示す図である。
【図４】本発明の原理に従って、クライアントおよびサーバーの階層的データ構造のバージョンを同期する方法を示す図である。
【図５】多数の変化の全てを含む１つのメッセージ、あるいはまた各々が変化の全てよりも少ない変化を含む一連のより小さいメッセージを示す図である。
【符号の説明】
【００５８】
１００  コンピュータシステム
１１０  システムバス
１２０  処理ユニット
１３０  オーディオ出力インタフェース
１４０  システムメモリ
１４１  オペレーティングシステム
１４２  アプリケーションプログラム
１４３  プログラムモジュール
１４４  プログラムデータ
１５０  ビデオ出力インタフェース
１６０  大容量ストレージインタフェース
１７０  ユーザ入力インタフェース
１８０  ネットワークインタフェース
２００  ネットワーク環境
２１０  クライアント
２１１  クライアントバージョン
２１２  受信バッファ
２２０  ネットワーク
２３０  サーバー
２３１  サーバーバージョン
３００  階層的データ構造
５１０  メッセージ
５２１  メッセージ
５２２  メッセージ
５３３  メッセージ
【図１】
2004171574.tif 000003
【図２】
2004171574.tif 000004
【図３】
2004171574.tif 000005
【図４】
2004171574.tif 000006
【図５】
2004171574.tif 000007