(57)【要約】【課題】配布すべきデータ量を削減するとともに、差分データを効率的に管理し、有版データを更新するため差分データを適用する際に、処理装置にかかる負荷や、記憶装置に必要な作業領域の容量を小さくする。【解決手段】差分記憶部２２２は、有版データの第一の版と第二の版との間の差分を表わす第一の差分データと、有版データの第二の版と第三の版との間の差分を表わす第二の差分データとを記憶する。差分合成部２２４は、差分記憶部２２２が記憶した第一の差分データと第二の差分データとを合成して、上記有版データの第一の版と第三の版との間の差分を表わす第三の差分データを生成する。【選択図】図５
2011113123.tif 000002
【特許請求の範囲】
【請求項１】
３以上の版を有する有版データについて、上記有版データの２つの版の間の差分を表わす差分データを管理する差分管理装置において、
データを記憶する記憶装置と、データを処理する処理装置と、差分記憶部と、差分合成部とを有し、
上記差分記憶部は、上記記憶装置を用いて、上記有版データの第一の版と第二の版との間の差分を表わす第一の差分データと、上記有版データの第二の版と第三の版との間の差分を表わす第二の差分データとを記憶し、
上記差分合成部は、上記処理装置を用いて、上記差分記憶部が記憶した第一の差分データと第二の差分データとを合成して、上記有版データの第一の版と第三の版との間の差分を表わす第三の差分データを生成することを特徴とする差分管理装置。
【請求項２】
上記差分データは、上記有版データの更新前の版を更新後の版に更新するための更新コマンドを表わし、
上記更新コマンドは、複写コマンドと追加コマンドとのうち少なくともいずれかを含み、
上記複写コマンドは、上記有版データの更新後の版のうち上記有版データの更新前の版に同一の部分が存在する含有部分について、上記有版データの更新前の版のうち上記含有部分と同一の部分の位置を示し、上記同一の部分を上記含有部分に複写することを表わし、
上記追加コマンドは、上記有版データの更新後の版のうち上記有版データの更新前の版に同一の部分が存在しない非含有部分について、上記非含有部分と同一の追加データを有し、上記追加データを上記非含有部分に追加することを表わすことを特徴とする請求項１に記載の差分管理装置。
【請求項３】
上記差分合成部は、上記処理装置を用いて、上記第二の差分データが上記複写コマンドを含む場合、上記複写コマンドに基づいて、上記有版データの第二の版のうち上記含有部分に複写する部分を判定して複写部分とし、上記第一の差分データに基づいて、上記複写部分のうち上記有版データの第一の版に含まれる承継部分について、上記有版データの第一の版の一部を上記含有部分のうち上記承継部分に対応する部分に複写することを表わす複写コマンドを生成し、上記複写部分のうち上記有版データの第一の版に含まれない非承継部分について、上記第一の差分データに含まれる追加コマンドが有する追加データを上記含有部分のうち上記非承継部分に対応する部分に追加することを表わす追加コマンドを生成し、上記第二の差分データが追加コマンドを含む場合、上記追加コマンドに基づいて、上記追加コマンドが有する追加データを上記非含有部分に追加することを表わす追加コマンドを生成することにより、上記第三の差分データを生成することを特徴とする請求項２に記載の差分管理装置。
【請求項４】
上記差分管理装置は、更に、有版データ記憶部と、有版データ更新部とを有し、
上記有版データ記憶部は、上記記憶装置を用いて、上記有版データの第一の版を記憶し、
上記有版データ更新部は、上記処理装置を用いて、上記差分合成部が生成した第三の差分データに基づいて、上記有版データ記憶部が記憶した有版データの第一の版を更新して、上記有版データの第三の版を生成することを特徴とする請求項１乃至請求項３のいずれかに記載の差分管理装置。
【請求項５】
上記差分管理装置は、更に、更新版取得部と、単独適用判定部と、合成適用判定部とを有し、
上記更新版取得部は、上記処理装置を用いて、上記有版データ記憶部が記憶した有版データを更新して生成する版を表わす更新版コードを取得し、
上記単独適用判定部は、上記処理装置を用いて、上記差分記憶部が記憶した差分データのなかに、上記有版データ記憶部が記憶した有版データを更新して上記更新版取得部が取得した更新版コードが表わす版の有版データを生成できる単独適用差分データがあるか否かを判定し、
上記合成適用判定部は、上記処理装置を用いて、上記差分記憶部が記憶した差分データのなかに単独適用差分データがないと上記単独適用判定部が判定した場合に、上記差分記憶部が記憶した差分データのなかに、複数の差分データを合成することにより、上記単独適用差分データを生成することができる複数の合成適用差分データがあるか否かを判定し、
上記差分合成部は、上記処理装置を用いて、上記差分記憶部が記憶した差分データのなかに、上記複数の合成適用差分データがあると上記合成適用判定部が判定した場合に、上記差分記憶部が記憶した複数の合成適用差分データを合成して、上記単独適用差分データを生成し、
上記有版データ更新部は、上記処理装置を用いて、上記差分記憶部が記憶した差分データのなかに単独適用差分データがあると上記単独適用判定部が判定した場合に、上記差分記憶部が記憶した単独適用差分データに基づいて、上記有版データ記憶部が記憶した有版データを更新し、上記差分記憶部が記憶した差分データのなかに、上記複数の合成適用差分データがあると上記合成適用判定部が判定した場合に、上記差分合成部が生成した単独適用差分データに基づいて、上記有版データ記憶部が記憶した有版データを更新することを特徴とする請求項４に記載の差分管理装置。
【請求項６】
上記差分管理装置は、更に、差分要求部と、差分取得部とを有し、
上記差分要求部は、上記処理装置を用いて、上記差分記憶部が記憶した差分データのなかに、上記複数の合成適用差分データがないと上記合成適用判定部が判定した場合に、上記単独適用差分データ、および、上記複数の合成適用差分データ、および、上記差分記憶部が記憶した差分データと合成することにより上記単独適用差分データを生成できる補充差分データのうち少なくともいずれかを要求する差分要求メッセージを差分配布装置に対して通知し、
上記差分取得部は、上記処理装置を用いて、上記差分要求部が通知した差分要求メッセージに対する応答として上記差分配布装置が配布した差分データを取得し、
上記差分記憶部は、上記記憶装置を用いて、上記差分取得部が取得した差分データを記憶することを特徴とする請求項５に記載の差分管理装置。
【請求項７】
上記差分管理装置は、更に、要求取得部と、差分通知部とを有し、
上記要求取得部は、上記処理装置を用いて、上記第三の差分データを要求する差分要求メッセージを端末装置から取得し、
上記差分通知部は、上記差分合成部が生成した第三の差分データを上記端末装置に対して通知することを特徴とする請求項１乃至請求項６のいずれかに記載の差分管理装置。
【請求項８】
上記差分管理装置は、更に、旧版データ記憶部と、新版データ取得部と、差分生成部と、旧版データ更新部とを有し、
上記旧版データ記憶部は、上記記憶装置を用いて、上記有版データの旧版を記憶し、
上記新版データ取得部は、上記処理装置を用いて、上記有版データの新版を取得し、
上記差分生成部は、上記処理装置を用いて、上記旧版データ記憶部が記憶した有版データの旧版と、上記新版データ取得部が取得した有版データの新版との間の差分データを生成し、
上記差分記憶部は、上記記憶装置を用いて、上記差分生成部が生成した差分データを記憶し、
上記旧版データ更新部は、上記処理装置を用いて、上記旧版データ記憶部が記憶した有版データを更新して、上記新版データ取得部が取得した有版データの新版を記憶させることを特徴とする請求項１乃至請求項７のいずれかに記載の差分管理装置。
【請求項９】
上記差分生成部は、上記処理装置を用いて、上記有版データの旧版を新版に更新するための順方向差分データと、上記有版データの新版を旧版に戻すための逆方向差分データとを生成し、
上記差分記憶部は、上記記憶装置を用いて、上記差分生成部が生成した順方向差分データと逆方向差分データとを記憶することを特徴とする請求項８に記載の差分管理装置。
【請求項１０】
データを記憶する記憶装置とデータを処理する処理装置とを有するコンピュータが実行することにより、上記コンピュータが請求項１乃至請求項９のいずれかに記載の差分管理装置として機能することを特徴とするコンピュータプログラム。
【請求項１１】
データを記憶する記憶装置とデータを処理する処理装置とを有する差分管理装置が、３以上の版を有する有版データについて、上記有版データの２つの版の間の差分を表わす差分データを管理する差分管理方法において、
上記記憶装置が、上記有版データの第一の版と第二の版との間の差分を表わす第一の差分データと、上記有版データの第二の版と第三の版との間の差分を表わす第二の差分データとを記憶し、
上記処理装置が、上記記憶装置が記憶した第一の差分データと第二の差分データとを合成して、上記有版データの第一の版と第三の版との間の差分を表わす第三の差分データを生成することを特徴とする差分管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、３以上の版を有するデータについての差分データを管理する差分管理装置に関する。
【背景技術】
【０００２】
オンラインあるいはオフラインでプログラムなどのデータを端末装置に配布したのち、不具合の修正や機能追加などのため、データを更新する必要が生じる場合がある。配布するデータ量を抑えるため、更新したデータそのものを配布するのではなく、最初に配布したデータと更新したデータとの差分を表わす差分データを配布する方式がある。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００６−２９３５１２号公報
【特許文献２】特開２００１−３２５１４０号公報
【特許文献３】特開２００３−２８０９１８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
一般にデータの更新は、複数回行われ、そのたびに、同じデータの異なる版ができることになる。差分データは、２つの版の間の差分を表わすものであるから、同じデータの異なる版が多数あれば、それに対応して差分データも多数必要になる。
また、利用者によっては、最新版のデータに更新するのではなく、異なる版のデータに更新したいという要望を持つ場合もある。すべての要望に対処するためには、版の数の二乗に近い数の差分データが理論的には必要になる。
また、差分データを適用してデータの版を更新するのは、そのデータを保持している端末装置である。端末装置は、処理能力が低い場合や記憶容量が小さい場合があるので、データの更新による負荷は、なるべく小さいことが望まれる。
この発明は、例えば、上記のような課題を解決するためになされたものであり、差分データを効率的に管理するとともに、差分データ適用時の負荷を小さくすることを目的とする。
【課題を解決するための手段】
【０００５】
この発明にかかる差分管理装置は、
３以上の版を有する有版データについて、上記有版データの２つの版の間の差分を表わす差分データを管理する差分管理装置において、
データを記憶する記憶装置と、データを処理する処理装置と、差分記憶部と、差分合成部とを有し、
上記差分記憶部は、上記記憶装置を用いて、上記有版データの第一の版と第二の版との間の差分を表わす第一の差分データと、上記有版データの第二の版と第三の版との間の差分を表わす第二の差分データとを記憶し、
上記差分合成部は、上記処理装置を用いて、上記差分記憶部が記憶した第一の差分データと第二の差分データとを合成して、上記有版データの第一の版と第三の版との間の差分を表わす第三の差分データを生成することを特徴とする。
【発明の効果】
【０００６】
この発明にかかる差分管理装置によれば、配布すべきデータ量を削減できるとともに、有版データの版の数が多くても記憶すべき差分データの数が少なく、有版データを更新するため差分データを適用する際に、処理装置にかかる負荷や、記憶装置に必要な作業領域の容量を小さくすることができる。
【図面の簡単な説明】
【０００７】
【図１】実施の形態１における配布システム８００の全体構成の一例を示すシステム構成図。
【図２】実施の形態１における配布装置１００および端末装置２００の外観の一例を示す斜視図。
【図３】実施の形態１における配布装置１００および端末装置２００のハードウェア資源の一例を示す図。
【図４】実施の形態１における配布装置１００の機能ブロックの構成の一例を示すブロック構成図。
【図５】実施の形態１における端末装置２００の機能ブロックの構成の一例を示すブロック構成図。
【図６】実施の形態１における差分版記憶部１２５が記憶した差分コード５１１の一例を示す図。
【図７】実施の形態１における差分データ５２０の一例を示す図。
【図８】実施の形態１における２つの有版データ５３０ａ，５３０ｂの関係の一例を示す図。
【図９】実施の形態１における差分生成処理Ｓ６１０の流れの一例を示すフローチャート図。
【図１０】実施の形態１におけるデータ更新処理Ｓ６５０の流れの一例を示すフローチャート図。
【図１１】実施の形態１における差分合成処理Ｓ６７０の流れの一例を示すフローチャート図。
【図１２】実施の形態１における差分データ５２０ｂの一例を示す図。
【図１３】実施の形態１における差分データ５２０ｃの一例を示す図。
【図１４】実施の形態１における３つの有版データ５３０ａ〜５３０ｃの関係の一例を示す図。
【図１５】実施の形態１における２つの有版データ５３０ａ，５３０ｃの関係の一例を示す図。
【図１６】実施の形態１における配布判定処理Ｓ７１０の流れの一例を示すフローチャート図。
【図１７】実施の形態１における適用判定処理Ｓ７４０の流れの一例を示すフローチャート図。
【図１８】実施の形態１における差分データ５２０ｄ〜５２０ｋと有版データ５３０ｄ〜５３０ｉとの関係の一例を示す模式図。
【図１９】実施の形態２におけるシステムの構成例を示す図。
【図２０】実施の形態２におけるソフトウェア配布サーバ１０の構成例を示す図。
【図２１】実施の形態２における端末装置３０の構成例を示す図。
【図２２】実施の形態２におけるソフトウェア配布サーバ１０の処理フロー図。
【図２３】実施の形態２における端末装置３０の更新フロー図。
【図２４】実施の形態２における差分情報管理部１３が差分情報を管理する管理の例を示す図。
【図２５】実施の形態２におけるソフトウェアイメージと差分との関係の例を示す図。
【図２６】実施の形態２におけるソフトウェアイメージと差分合成との関係の例を示す図。
【図２７】実施の形態２における差分合成の処理フロー図。
【図２８】実施の形態２における差分合成においてコピーする範囲を抽出するための情報の例を示す図。
【発明を実施するための形態】
【０００８】
実施の形態１．
実施の形態１について、図１〜図１８を用いて説明する。
【０００９】
図１は、この実施の形態における配布システム８００の全体構成の一例を示すシステム構成図である。
配布システム８００は、プログラムなどのソフトウェアを配布するシステムである。配布システム８００は、開発装置８１０、配布装置１００、端末装置２００などを有する。開発装置８１０は、開発者がソフトウェアを開発する装置である。配布装置１００は、開発装置８１０で開発されたソフトウェアを端末装置２００に配布する装置である。端末装置２００は、配布装置１００から配布されたソフトウェアを実行する装置である。開発装置８１０と配布装置１００との間は、例えばネットワークなどにより接続していて、開発装置８１０で開発されたソフトウェアを配布装置１００に伝送することができる。しかし、開発装置８１０で開発したソフトウェアを配布装置１００が取得できる構成であれば、開発装置８１０と配布装置１００との間は必ずしも接続されている必要はない。例えば、開発装置８１０で開発したソフトウェアを記憶媒体に記憶させ、配布装置１００が記憶媒体からソフトウェアを読み出す構成であってもよい。配布装置１００と端末装置２００との間も同様に、配布装置１００が配布したソフトウェアを端末装置２００が取得できるよう構成する。例えば、ネットワークによる常時接続やダイヤルアップ回線による接続を介してオンラインでソフトウェアを配布する構成でもよいし、記憶媒体を郵送するなどしてオフラインでソフトウェアを配布する構成でもよい。
【００１０】
ソフトウェアは、１つのファイルからなるものであってもよいし、複数のファイルからなるものであってもよい。この例では、ソフトウェア全体を一続きのデータとして取り扱う。例えば、ソフトウェアを構成する１以上のファイルを１つに結合して生成した書庫ファイルを対象とする。なお、ソフトウェア全体を一続きのデータとして取り扱うのではなく、複数のファイルなど複数のデータの集合として取り扱う場合は、個々のファイルなど一続きのデータとして取り扱うことができる部分を対象とすればよい。
【００１１】
配布装置１００は、開発装置８１０で開発されたソフトウェアを端末装置２００に配布する。その後、開発装置８１０では、例えば不具合の修正や新機能の追加などを目的として、既に配布したソフトウェアを修正した新しい版のソフトウェアを開発する。ソフトウェアの修正は、１回に限らず、何回も繰り返し行われる。このため、ソフトウェアには、多数の版が存在する。
新しい版のソフトウェアを配布するに当たり、古い版のソフトウェアとの差が小さければ、その差を表わす差分データを配布するほうが、配布すべきデータ量が少なくなり効率がよい。このため、配布装置１００は、端末装置２００に対して差分データを配布する。端末装置２００は、既に配布されている古い版のソフトウェアに、配布された差分データを適用することにより、ソフトウェアを更新し、新しい版のソフトウェアを取得する。
【００１２】
配布装置１００からソフトウェアの配布を受ける端末装置２００は、１以上存在し、通常は非常に多数存在する。端末装置２００が配布装置１００からソフトウェアの配布を受ける形態には、上述したように様々な形態がある。
端末装置２００がネットワークなどを介して配布装置１００と常時接続している場合、ソフトウェアの新しい版が開発されるたびに、配布装置１００から差分データを端末装置２００に配布することができる。
しかし、端末装置２００がダイヤルアップ回線などを介して配布装置１００と接続している場合、配布装置１００と端末装置２００とが接続していない間は、差分データを配布できない。
また、郵送などオフラインでの配布の場合、些細な修正のたびに差分データを配布することは、郵送料や利用者が差分データをソフトウェアに適用する手間などの点で現実的ではなく、セキュリティホールの修正など重要な修正があった場合のみ、差分データを配布する。
【００１３】
更に問題を複雑にするのは、端末装置２００の利用者の好みの問題である。利用者は、必ずしも最新版のソフトウェアを好むとは限らない。データの互換性などの問題から古い版を使う必要がある場合や、既に使い慣れた操作方法が変更されることへの抵抗感がある場合など、様々な理由により、利用者は、古い版のソフトウェアを使い続けている場合がある。場合によっては、一度新しい版を導入したのち、古い版に戻したいという要望が出る場合もある。
【００１４】
したがって、ソフトウェアの多数の版のうち、どの版を、端末装置２００が現在記憶しているかは必ずしも明らかではないし、端末装置２００が記憶しているソフトウェアを更新する場合、どの版に更新すればよいかも必ずしも明らかではない。
【００１５】
配布システム８００は、このように、ソフトウェアが多数の版を有し、その差分データを配布することによりソフトウェアを配布する場合において、効率的なソフトウェアの更新を実現する。
【００１６】
図２は、この実施の形態における配布装置１００および端末装置２００の外観の一例を示す斜視図である。
配布装置１００および端末装置２００は、システムユニット９１０、ＣＲＴ（Ｃａｔｈｏｄｅ・Ｒａｙ・Ｔｕｂｅ）やＬＣＤ（液晶）の表示画面を有する表示装置９０１、キーボード９０２（Ｋｅｙ・Ｂｏａｒｄ：Ｋ／Ｂ）、マウス９０３、ＦＤＤ９０４（Ｆｌｅｘｉｂｌｅ・Ｄｉｓｋ・Ｄｒｉｖｅ）、コンパクトディスク装置９０５（ＣＤＤ）、プリンタ装置９０６、スキャナ装置９０７などのハードウェア資源を備え、これらはケーブルや信号線で接続されている。
システムユニット９１０は、コンピュータであり、ファクシミリ機９３２、電話器９３１とケーブルで接続され、また、ローカルエリアネットワーク９４２（ＬＡＮ）、ゲートウェイ９４１を介してインターネット９４０に接続されている。
【００１７】
図３は、この実施の形態における配布装置１００および端末装置２００のハードウェア資源の一例を示す図である。
配布装置１００および端末装置２００は、プログラムを実行するＣＰＵ９１１（Ｃｅｎｔｒａｌ・Ｐｒｏｃｅｓｓｉｎｇ・Ｕｎｉｔ、中央処理装置、処理装置、演算装置、マイクロプロセッサ、マイクロコンピュータ、プロセッサともいう）を備えている。ＣＰＵ９１１は、バス９１２を介してＲＯＭ９１３、ＲＡＭ９１４、通信装置９１５、表示装置９０１、キーボード９０２、マウス９０３、ＦＤＤ９０４、ＣＤＤ９０５、プリンタ装置９０６、スキャナ装置９０７、磁気ディスク装置（以下「ＨＤＤ」と呼ぶ。）９２０と接続され、これらのハードウェアデバイスを制御する。ＨＤＤ９２０の代わりに、光ディスク装置、メモリカード読み書き装置などの記憶装置でもよい。
ＲＡＭ９１４は、揮発性メモリの一例である。ＲＯＭ９１３、ＦＤＤ９０４、ＣＤＤ９０５、ＨＤＤ９２０の記憶媒体は、不揮発性メモリの一例である。これらは、記憶装置あるいは記憶部の一例である。通信装置９１５、キーボード９０２、スキャナ装置９０７、ＦＤＤ９０４などは、入力部、入力装置の一例である。
また、通信装置９１５、表示装置９０１、プリンタ装置９０６などは、出力部、出力装置の一例である。
【００１８】
通信装置９１５は、ファクシミリ機９３２、電話器９３１、ＬＡＮ９４２等に接続されている。通信装置９１５は、ＬＡＮ９４２に限らず、インターネット９４０、ＩＳＤＮ等のＷＡＮ（ワイドエリアネットワーク）などに接続されていても構わない。インターネット９４０或いはＩＳＤＮ等のＷＡＮに接続されている場合、ゲートウェイ９４１は不用となる。
ＨＤＤ９２０には、オペレーティングシステム９２１（ＯＳ）、ウィンドウシステム９２２、プログラム群９２３、ファイル群９２４が記憶されている。プログラム群９２３のプログラムは、ＣＰＵ９１１、オペレーティングシステム９２１、ウィンドウシステム９２２により実行される。
【００１９】
上記プログラム群９２３には、以下に述べる実施の形態の説明において「〜部」として説明する機能を実行するプログラムが記憶されている。プログラムは、ＣＰＵ９１１により読み出され実行される。
ファイル群９２４には、以下に述べる実施の形態の説明において、「〜の判定結果」、「〜の計算結果」、「〜の処理結果」として説明する情報やデータや信号値や変数値やパラメータが、「〜ファイル」や「〜データベース」の各項目として記憶されている。「〜ファイル」や「〜データベース」は、ディスクやメモリなどの記録媒体に記憶される。ディスクやメモリなどの記憶媒体に記憶された情報やデータや信号値や変数値やパラメータは、読み書き回路を介してＣＰＵ９１１によりメインメモリやキャッシュメモリに読み出され、抽出・検索・参照・比較・演算・計算・処理・出力・印刷・表示などのＣＰＵの動作に用いられる。抽出・検索・参照・比較・演算・計算・処理・出力・印刷・表示のＣＰＵの動作の間、情報やデータや信号値や変数値やパラメータは、メインメモリやキャッシュメモリやバッファメモリに一時的に記憶される。
また、以下に述べる実施の形態の説明において説明するフローチャートの矢印の部分は主としてデータや信号の入出力を示し、データや信号値は、ＲＡＭ９１４のメモリ、ＦＤＤ９０４のフレキシブルディスク、ＣＤＤ９０５のコンパクトディスク、ＨＤＤ９２０の磁気ディスク、その他光ディスク、ミニディスク、ＤＶＤ（Ｄｉｇｉｔａｌ・Ｖｅｒｓａｔｉｌｅ・Ｄｉｓｋ）等の記録媒体に記録される。また、データや信号は、バス９１２や信号線やケーブルその他の伝送媒体によりオンライン伝送される。
【００２０】
また、以下に述べる実施の形態の説明において「〜部」として説明するものは、「〜回路」、「〜装置」、「〜機器」であってもよく、また、「〜ステップ」、「〜手順」、「〜処理」であってもよい。すなわち、「〜部」として説明するものは、ＲＯＭ９１３に記憶されたファームウェアで実現されていても構わない。或いは、ソフトウェアのみ、或いは、素子・デバイス・基板・配線などのハードウェアのみ、或いは、ソフトウェアとハードウェアとの組み合わせ、さらには、ファームウェアとの組み合わせで実施されても構わない。ファームウェアとソフトウェアは、プログラムとして、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ミニディスク、ＤＶＤ等の記録媒体に記憶される。プログラムはＣＰＵ９１１により読み出され、ＣＰＵ９１１により実行される。すなわち、プログラムは、以下に述べる「〜部」としてコンピュータを機能させるものである。あるいは、以下に述べる「〜部」の手順や方法をコンピュータに実行させるものである。
【００２１】
図４は、この実施の形態における配布装置１００の機能ブロックの構成の一例を示すブロック構成図である。
配布装置１００（差分管理装置）は、旧版データ記憶部１１１、新版データ取得部１１２、差分生成部１１３、旧版データ更新部１１４、差分記憶部１１５、旧版コード記憶部１２１、旧版コード更新部１２４、差分版記憶部１２５、要求取得部１３１、配布判定部１３２、差分合成部１３３、差分配布部１３４を有する。
【００２２】
旧版データ記憶部１１１は、ＨＤＤ９２０を用いて、多数の版を有するソフトウェア（以下「有版データ」と呼ぶ。）のうち、現行の版（以下「旧版データ」と呼ぶ。）を記憶している。有版データには、その版を識別するためのコード（以下「版コード」と呼ぶ。）がある。版コードは、例えばソフトウェアのバージョン番号やリビジョン番号である。
開発装置８１０が有版データの新たな版を開発すると、新版データ取得部１１２は、ＣＰＵ９１１を用いて、開発装置８１０から有版データの最新の版（以下「新版データ」と呼ぶ。）と、新版データの版を識別する版コード（以下「新版コード」と呼ぶ。）とを取得する。
差分生成部１１３は、ＣＰＵ９１１を用いて、旧版データ記憶部１１１が記憶した旧版データと、新版データ取得部１１２が取得した新版データとの間の差分データを生成する。
差分記憶部１１５は、ＨＤＤ９２０を用いて、差分生成部１１３が生成した差分データを記憶する。差分記憶部１１５は、複数の差分データを記憶する。差分生成部１１３が生成した差分データを記憶することにより、差分記憶部１１５が記憶した差分データの数が１つ増える。
【００２３】
旧版データ更新部１１４は、ＣＰＵ９１１を用いて、旧版データ記憶部１１１が記憶した旧版データを更新して、新版データ取得部１１２が取得した新版データを旧版データ記憶部１１１に記憶させる。
旧版データ記憶部１１１は、有版データの１つの版しか記憶しない。これにより、ＨＤＤ９２０の記憶容量を節約することができる。旧版データ更新部１１４による更新により、旧版データ記憶部１１１は、ＨＤＤ９２０を用いて、新版データを新たな旧版データとして記憶する。すなわち、旧版データ記憶部１１１が記憶している有版データの現行の版は、差分生成部１１３が差分データを生成している間を除き、常に、その有版データの最新の版である。
１つの有版データのデータ量が大きい場合はもちろん、配布装置１００が多数の種類の有版データを配布する場合、１つ１つの有版データのデータ量は小さくても、全体としてのデータ量は膨大になる場合がある。旧版データ記憶部１１１が１つの有版データにつき１つの版しか記憶せず、ＨＤＤ９２０の記憶容量を節約することにより、配布装置１００の設置コストを抑えることができる。
なお、ＨＤＤ９２０の記憶容量に余裕があれば、旧版データ記憶部１１１は、１つの有版データにつき複数の版を記憶する構成としてもよい。更に、空き容量監視部と版数算出部とを設け、ＨＤＤ９２０の空き容量を空き容量監視部が監視し、ＨＤＤ９２０の空き容量に基づいて、旧版データ記憶部１１１が記憶する版の数を版数算出部が算出する構成としてもよい。
【００２４】
旧版コード記憶部１２１は、ＨＤＤ９２０を用いて、旧版データ記憶部１１１が記憶している旧版データの版を識別する版コード（以下「旧版コード」と呼ぶ。）を記憶している。
差分版記憶部１２５は、ＣＰＵ９１１を用いて、新版データ取得部１１２が取得した新版コードと、旧版コード記憶部１２１が記憶した旧版コードとに基づいて、差分生成部１１３が生成した差分データがどの版とどの版との間のものであるかを表わすデータ（以下「差分コード」と呼ぶ。）を生成する。差分版記憶部１２５は、ＨＤＤ９２０を用いて、生成した差分コードを記憶する。差分版記憶部１２５は、差分記憶部１１５が記憶した複数の差分データに対応して同じ数の差分コードを記憶する。例えば、差分記憶部１１５が差分データを記憶するファイルのファイル名として差分コードを用いるなどして、差分記憶部１１５が記憶した差分データと、差分版記憶部１２５が記憶した差分コードとを対応づける。
【００２５】
旧版コード更新部１２４は、ＣＰＵ９１１を用いて、旧版コード記憶部１２１が記憶した旧版コードを更新して、新版データ取得部１１２が取得した新版コードを旧版コード記憶部１２１に記憶させる。
旧版データ記憶部１１１が１つの旧版データを記憶する構成である場合、旧版コード記憶部１２１も１つの旧版コードを記憶する。
旧版データ記憶部１１１が複数の旧版データを記憶する構成である場合、旧版コード記憶部１２１は、それに対応して同じ数の旧版コードを記憶する。旧版データ記憶部１１１が記憶した旧版データと、旧版コード記憶部１２１が記憶した旧版コードとの対応がわかるよう、例えば、旧版データ記憶部１１１が旧版データを記憶するファイルのファイル名として旧版コードを用いるなどして、旧版データ記憶部１１１が記憶した旧版データと、旧版コード記憶部１２１が記憶した旧版コードとを対応づける。
【００２６】
要求取得部１３１は、ＣＰＵ９１１を用いて、端末装置２００から差分データを要求する差分要求メッセージを取得する。例えば、要求取得部１３１は、ネットワークを介して接続した端末装置２００が送信した差分要求メッセージを、通信装置９１５を用いて受信する。あるいは、要求取得部１３１は、オフラインの端末装置２００の利用者からの要求を配布装置１００の管理者がキーボード９０２などを用いて入力することにより、差分要求メッセージを取得する。
差分要求メッセージは、少なくとも、端末装置２００が現在所持している有版データ（以下「現版データ」と呼ぶ。）の版を識別する版コード（以下「現版コード」と呼ぶ。）を含む。また、差分要求メッセージは、端末装置２００が取得したい有版データ（以下「更新版データ」と呼ぶ。）の版を識別する版コード（以下「更新版コード」と呼ぶ。）を含む。なお、差分要求メッセージが更新版コードを含まない場合は、最新版を取得したいものと解釈する構成であってもよい。
更に、差分要求メッセージは、端末装置２００が現在所持している差分データを識別する差分コードを含んでもよい。上述したように、端末装置２００は、配布装置１００が配布したすべての差分データを取得しているとは限らないし、端末装置２００が記憶している有版データの版や、取得したい有版データの版は様々である。したがって、端末装置２００が所持している差分データが現版データに適用できるとは限らないし、適用できたとしてもその結果として更新版データが得られるとは限らない。このため、端末装置２００が差分データを所持していたとしても、それとは異なる差分データを配布する必要がある場合がある。
【００２７】
配布判定部１３２は、ＣＰＵ９１１を用いて、要求取得部１３１が取得した差分要求メッセージと、差分版記憶部１２５が記憶した差分コードとに基づいて、差分記憶部１１５が記憶した差分データのなかから、端末装置２００に配布すべき差分データを判定する。
現版データに適用することにより更新版データを得ることができる差分データを配布すれば、端末装置２００からの要求を満たすことができるのは、もちろんである。また、複数の差分データを順次適用することにより現版データから更新版データを得ることができる差分データであっても、端末装置２００からの要求を満たすことができる。例えば、現版データに第一の差分データを適用し、その結果得られた版の有版データに第二の差分データを適用して更新版データを得ることができればよい。順次適用する差分データの数は、２つに限らず、３つ以上であってもよい。また、順次適用する複数の差分データのうちいくつかの差分データを端末装置２００が既に所持しているのであれば、その差分データについては、端末装置２００に配布する必要はなく、差分記憶部１１５が記憶している必要もない。
【００２８】
差分合成部１３３は、ＣＰＵ９１１を用いて、差分記憶部１１５が記憶した複数の差分データを合成して、新たな差分データを生成する。差分データの合成とは、順次適用可能な複数の差分データから、１つの差分データを生成することである。例えば、第一の差分データは、有版データの第一の版に適用することにより有版データの第二の版を生成できるものであり、第二の差分データは、有版データの第二の版に適用することにより有版データの第三の版を生成できるものであるとする。この場合、有版データの第一の版に、第一の差分データと第二の差分データとを順次適用することにより、有版データの第三の版を生成することができる。差分合成部１３３は、第一の差分データと第二の差分データとを合成することにより、１回の適用で、有版データの第一の版から、有版データの第三の版を生成することができる第三の差分データを生成する。
差分記憶部１１５は、ＨＤＤ９２０を用いて、差分合成部１３３が生成した新たな差分データを記憶する。これにより、差分記憶部１１５が記憶した差分データの数がまた１つ増える。
差分版記憶部１２５は、ＣＰＵ９１１を用いて、差分合成部１３３が生成した差分データに対応する差分コードを生成し、ＨＤＤ９２０を用いて、生成した差分コードを記憶する。
【００２９】
例えば、配布判定部１３２が端末装置２００に配布すべきと判定した差分データのなかに、順次適用すべき複数の差分データがある場合、これを合成して１つの差分データにしてから配布するほうが、配布すべきデータ量が減るので効率がよい。差分合成部１３３は、ＣＰＵ９１１を用いて、配布判定部１３２が判定した差分データに基づいて、合成すべき差分データを判定し、差分データを合成する。
また、配布する時点で合成を始めたのでは配布が遅れる可能性があるので、差分合成部１３３は、ＣＰＵ９１１を用いて、前もって差分データを合成しておく構成であってもよい。例えば、負荷監視部を設け、負荷監視部がＣＰＵ９１１の負荷を監視し、ＣＰＵ９１１の負荷が所定の値よりも低く、差分合成部１３３が差分データを合成する差分合成処理をしても他の処理に影響が出ないと判定した場合に、差分版記憶部１２５が記憶した差分コードに基づいて、合成により生成することが可能であるがまだ生成されていない差分データを差分合成部１３３が判定し、判定した差分データを生成する。
【００３０】
差分配布部１３４（差分通知部）は、ＣＰＵ９１１を用いて、差分記憶部１１５が記憶した差分データを端末装置２００に対して配布する。配布の方式には、上述したように様々な方式がある。例えば、差分配布部１３４が通信装置９１５を用いて、インターネットなどを介して差分データを端末装置２００に対して送信する。あるいは、差分配布部１３４が記憶媒体に差分データを保存し、差分データを保存した記憶媒体を端末装置２００の利用者に対して郵送する。また、配布の時期にも、様々な時期がある。例えば、端末装置２００からの差分要求メッセージに対する応答として、配布判定部１３２が判定した差分データを差分配布部１３４が配布する。あるいは、開発装置８１０が有版データの新しい版を開発したことに伴って、有版データを最新版に更新する差分データを差分配布部１３４が配布する。
【００３１】
図５は、この実施の形態における端末装置２００の機能ブロックの構成の一例を示すブロック構成図である。
端末装置２００（差分管理装置）は、有版データ記憶部２１１、有版データ更新部２１２、現版コード記憶部２１３、差分取得部２２１、差分記憶部２２２、差分版記憶部２２３、差分合成部２２４、更新版取得部２３１、適用判定部２４０を有する。
【００３２】
有版データ記憶部２１１は、ＨＤＤ９２０を用いて、有版データのいずれかの版を記憶している。
現版コード記憶部２１３は、ＨＤＤ９２０を用いて、有版データ記憶部２１１が記憶している有版データの版を表わす版データ（以下「現版コード」と呼ぶ。）を記憶している。
【００３３】
有版データ更新部２１２は、ＣＰＵ９１１を用いて、差分記憶部２２２が記憶した差分データを、有版データ記憶部２１１が記憶した有版データに適用して、有版データの異なる版を生成する。有版データ更新部２１２は、ＣＰＵ９１１を用いて、有版データ記憶部２１１が記憶した有版データを更新して、生成した異なる版の有版データを記憶させる。有版データ記憶部２１１は、ＨＤＤ９２０を用いて、更新された異なる版の有版データを記憶する。現版コード記憶部２１３は、ＨＤＤ９２０を用いて、更新された異なる版を表わす現版コードを記憶する。
【００３４】
差分取得部２２１は、ＣＰＵ９１１を用いて、配布装置１００が配布した差分データと、その差分データに対応する差分版データとを取得する。
差分記憶部２２２は、ＨＤＤ９２０を用いて、差分取得部２２１が取得した差分データを記憶する。差分記憶部２２２は、複数の差分データを記憶する。差分取得部２２１が取得した差分データを記憶することにより、差分記憶部２２２が記憶した差分データの数が１つ増える。
差分版記憶部２２３は、ＨＤＤ９２０を用いて、差分取得部２２１が取得した差分版データを記憶する。差分版記憶部２２３は、差分記憶部２２２が記憶した差分データに対応して、同じ数の差分版データを記憶する。例えば、差分記憶部２２２が差分データを記憶するファイルのファイル名として差分コードを用いるなどして、差分記憶部２２２が記憶した差分データと、差分版記憶部２２３が記憶した差分コードとを対応づける。
差分合成部２２４は、ＣＰＵ９１１を用いて、差分記憶部２２２が記憶した複数の差分データを合成して、新たな差分データを生成する。差分記憶部２２２は、ＨＤＤ９２０を用いて、差分合成部２２４が生成した差分データを記憶する。これにより、差分記憶部２２２が記憶した差分データの数が１つ増える。差分版記憶部２２３は、差分合成部２２４が生成した差分データに対応する差分版データを記憶する。
【００３５】
更新版取得部２３１は、ＣＰＵ９１１を用いて、有版データのうち、利用者が取得したい版を表わす版コード（更新版コード）を取得する。例えば、利用者がキーボード９０２などを操作して、更新版取得部２３１がその操作内容を入力して解釈することにより、更新版コードを入力する。
【００３６】
適用判定部２４０は、ＣＰＵ９１１を用いて、有版データ記憶部２１１が記憶した有版データと、差分記憶部２２２が記憶した差分データとに基づいて、更新版コードが表わす利用者が取得したい版の有版データを得ることができるか否かを判定する。
単独適用判定部２４１は、ＣＰＵ９１１を用いて、差分記憶部２２２が記憶した差分データのなかに、有版データ記憶部２１１が記憶した有版データに適用することにより、更新版取得部２３１が取得した更新版コードが表わす版の有版データを生成することができる差分データ（以下「単独適用差分データ」と呼ぶ。）があるか否かを判定する。
単独適用差分データがないと単独適用判定部２４１が判定した場合、合成適用判定部２４２は、ＣＰＵ９１１を用いて、差分記憶部２２２が記憶した差分データのなかに、有版データ記憶部２１１が記憶した有版データに順次適用することにより、更新版取得部２３１が取得した更新版データが表わす版の有版データを生成することができる複数の差分データ（以下「合成適用差分データ」と呼ぶ。）があるかを判定する。
合成適用差分データがないと合成適用判定部２４２が判定した場合、差分要求部２４３は、ＣＰＵ９１１を用いて、配布装置１００に対して差分データの配布を要求する差分要求メッセージを通知する。通知の方式は、配布装置１００が有版データや差分データを配布する場合と同様、様々な方式がある。例えば、配布装置１００と端末装置２００とがインターネットなどを介して接続している場合には、差分要求部２４３は、通信装置９１５を用いて、配布装置１００に対して差分要求メッセージを送信する。あるいは、差分要求部２４３は、表示装置９０１を用いて、端末装置２００の利用者に対してメッセージを表示する。それを見た利用者が電話や葉書で配布装置１００の管理者に連絡する。配布装置１００の管理者が配布装置１００にその内容を入力することにより、配布装置１００に差分要求メッセージを通知する。
【００３７】
合成適用差分データがあると合成適用判定部２４２が判定した場合、差分合成部２２４は、ＣＰＵ９１１を用いて、差分記憶部２２２が記憶した合成適用差分データを合成して、単独適用差分データを生成する。
有版データ更新部２１２は、ＣＰＵ９１１を用いて、単独適用判定部２４１が判定した単独適用差分データもしくは差分合成部２２４が合成した単独適用差分データを、有版データ記憶部２１１が記憶した有版データに適用して、更新版コードが表わす版の有版データを生成する。
【００３８】
有版データの更新は、ＣＰＵ９１１に負荷がかかり、作業用にＲＡＭ９１４やＨＤＤ９２０の記憶領域を使用する。特に、有版データのデータ量が大きい場合、ＣＰＵ９１１にかかる負荷が大きくなり、使用する記憶領域も大きくなる。このため、合成適用差分データを順次適用するよりも、合成適用差分データを合成して単独適用差分データを生成し、生成した単独適用差分データを使って有版データを更新するほうが、ＣＰＵ９１１にかかる負荷や使用する記憶領域が少なくて済む。
【００３９】
図６は、この実施の形態における差分版記憶部１２５が記憶した差分コード５１１の一例を示す図である。
この例において、差分版記憶部１２５は、１０個の差分コード５１１（複数の差分コード５１１を区別するため、英小文字を付加する場合がある。他のデータについても同様。）を記憶している。各差分コード５１１は、適用前コード５１２と適用後コード５１３との組である。適用前コード５１２及び適用後コード５１３は、いずれも版コードである。適用前コード５１２は、その差分コード５１１に対応する差分データを適用できる版の版コードを表わし、適用後コード５１３は、その差分コード５１１に対応する差分データを適用した結果として生成される版の版コードを表わす。差分記憶部２２２が記憶する差分コードも同様である。
例えば、差分コード５１１ａは、対応する差分データ（順方向差分データ）が、版コード「１．０」の有版データと版コード「１．１」の有版データとの差分を表わし、版コード「１．０」の有版データに適用することにより、版コード「１．１」の有版データを生成することができることを表わす。差分コード５１１ｂは、対応する差分データ（逆方向差分データ）が、差分コード５１１ａに対応する差分データと同じく、版コード「１．０」の有版データと版コード「１．１」の有版データとの差分を表わすが、差分コード５１１ａに対応する差分データとは逆に、版コード「１．１」の有版データに適用することにより、版コード「１．０」の有版データを生成することができることを表わす。
この例に示したように、差分生成部１１３（および差分合成部１３３，２２４）が生成する差分データは、その差分データを生成する元になった２つの有版データのうち、いずれか一方にのみ適用できるものであってもよいし、この例と異なり、双方向に適用できるものであってもよい。
差分データが双方向に適用できるものである場合、１つの差分データをバージョンアップとバージョンダウンの両方に用いることができるので、差分記憶部１１５が、比較的少ない数の差分データさえ記憶しておけば、様々なニーズに対応できる。
これに対し、差分データが片方向にしか適用できないものである場合、差分データ１つ当たりのデータ量が少なくて済むので、配布するデータ量を抑えることができる。利用者は、多くの場合、有版データの版を更新したら更新した版を使い続けるので、元に戻したいというニーズは存在してもごくわずかである。また、利用者が更新前の有版データをバックアップしている場合には、元に戻すために差分データを用いる必要はない。したがって、最初は片方向にしか適用できない差分データを配布し、元に戻したいというニーズが発生した時点で、元に戻すための差分データを配布するほうが効率がよい。
【００４０】
図７は、この実施の形態における差分データ５２０の一例を示す図である。
差分データ５２０は、１以上のコマンド５２１を有する。
１つのコマンド５２１は、命令５２２とサイズ５２３とソース５２４との組である。
命令５２２は、そのコマンド５２１が複写コマンドであるか追加コマンドであるかを表わす。この例では、複写コマンドの場合を「ｃｏｐｙ」、追加コマンドの場合を「ｄａｔａ」として記述しているが、これは理解を助けるためである。実際には、複写コマンドと追加コマンドとを区別できればよいので、命令５２２は、例えば１ビットのデータでよい。
サイズ５２３は、そのコマンドにより生成するデータのサイズ（データ量）を表わす。
ソース５２４は、そのコマンドにより生成するデータの源泉を表わす。複写コマンドは、適用前の版の有版データからデータを複写してくることを表わし、ソース５２４は、例えば、複写するデータの開始位置を表わす。追加コマンドは、新たなデータを追加することを表わし、ソース５２４は、追加するデータそのものである。
例えば、コマンド５２１ａは、適用前の版の有版データの０バイト目（最初）から３２００バイトのデータを複写することを表わす。コマンド５２１ｂは、ソース５２４ｂが表わす１２００バイトのデータを追加することを表わす。コマンド５２１ｃは、適用前の版の有版データの３２００バイト目から４６００バイトのデータを複写することを表わす。
コマンド５２１には順番があり、コマンド５２１の順番は、適用後の版の有版データにおいて、生成したデータを配置する順序を表わす。
例えば、コマンド５２１ａにより生成した３２００バイトのデータは、適用後の版の有版データの０バイト目（最初）から３１９９バイト目までの間に配置する。コマンド５２１ｂにより生成した１２００バイトのデータは、適用後の版の有版データの３２００バイト目から４３９９バイト目までの間に配置する。コマンド５２１ｃにより生成した４６００バイトのデータは、適用後の版の有版データの４４００バイト目から８９９９バイト目までの間に配置する。
【００４１】
図８は、この実施の形態における２つの有版データ５３０ａ，５３０ｂの関係の一例を示す図である。
この例は、図７に示した差分データ５２０を適用する適用前の版の有版データ５３０ａと、差分データ５２０を適用した適用後の版の有版データ５３０ｂとの関係を表わしている。
有版データ５３０ａは、全部で１２８００バイトのデータである。有版データ５３０ｂは、全部で１３４００バイトのデータである。このように、有版データ５３０のサイズは、版により異なっていてもよい。
有版データ５３０ａの０バイト目（最初）から３１９９バイト目までの３２００バイトの部分５３１ａ（複写部分）のデータは、有版データ５３０ｂの０バイト目（最初）から３１９９バイト目までの３２００バイトの部分５３１ｂ（含有部分）のデータと同一である。有版データ５３０の３２００バイト目から７７９９バイト目までの４６００バイトの部分５３２ａ（複写部分）のデータは、有版データ５３０ｂの４４００バイト目から８９９９バイト目までの４６００バイトの部分５３３ｂ（含有部分）のデータと同一である。有版データ５３０ａの１０２００バイト目から１２７９９バイト目（最後）までの２６００バイトの部分５３４ａ（複写部分）のデータは、有版データ５３０ｂの９０００バイト目から１１５９９バイト目までの２６００バイトの部分５３４ｂ（含有部分）のデータと同一である。
有版データ５３０ａの７８００バイト目から１０１９９バイト目までの２４００バイトの部分５３３ａのデータと同一のデータは、有版データ５３０ｂには存在しない。また、有版データ５３０ｂの３２００バイト目から４３９９バイト目までの１２００バイトの部分５３２ｂ（非含有部分）のデータ、および、有版データ５３０ｂの１１６００バイト目から１３３９９バイト目（最後）までの１８００バイトの部分５３５ｂ（非含有部分）のデータと同一のデータは、有版データ５３０ａには存在しない。
【００４２】
図７に示したコマンド５２１を順に実行することにより、有版データ更新部２１２は、有版データ５３０ａから有版データ５３０ｂを生成する。
まず、有版データ更新部２１２は、コマンド５２１ａにしたがって、有版データ５３０ａの部分５３１ａのデータを、有版データ５３０ｂの部分５３１ｂに複写する。次に、有版データ更新部２１２は、コマンド５２１ｂにしたがって、ソース５２４ｂが表わすデータを、有版データ５３０ｂの部分５３２ｂに追加する。次に、有版データ更新部２１２は、コマンド５２１ｃにしたがって、有版データ５３０ａの部分５３２ａのデータを、有版データ５３０ｂの部分５３３ｂに複写する。次に、有版データ更新部２１２は、コマンド５２１ｄにしたがって、有版データ５３０ａの部分５３４ａのデータを、有版データ５３０ｂの部分５３４ｂに複写する。最後に、有版データ更新部２１２は、コマンド５２１ｅにしたがって、ソース５２４ｅが表わすデータを、有版データ５３０ｂの部分５３５ｂに追加する。
【００４３】
なお、複写する部分の順序が入れ替わっていてもよいし、複写元の部分が重複していてもよい。
【００４４】
差分データがこのような形式である場合、適用前の版の有版データから適用後の版の有版データを生成することはできるが、適用後の版の有版データから適用前の版の有版データを生成することはできない。適用前の版の有版データのうち、適用後の版の有版データに複写されない部分（この例では、部分５３３ａ）のデータが失われるからである。すなわち、この形式の差分データは、片方向にしか適用できない差分データである。
【００４５】
差分生成部１１３は、ＣＰＵ９１１を用いて、２つの有版データを比較して、一方の版から他方の版を生成するための差分データを生成する。例えば、古い版を適用前の版とし、新しい版を適用語の版として、差分生成部１１３は、古い版から新しい版を生成するための差分データを生成する。しかし、上述したようにバージョンダウンしたいという要望も存在する可能性を考慮して、差分生成部１１３は、古い版から新しい版を生成するための差分データだけでなく、新しい版を適用前の版とし、古い版を適用後の版として、新しい版から古い版を生成するための差分データを生成する構成とするのが好ましい。
差分記憶部１１５，２２２は、このような差分データを複数記憶する。
差分合成部１３３，２２４は、差分記憶部１１５，２２２が記憶した差分データを解釈して、合成した新しい差分データを生成する。
有版データ更新部２１２は、差分記憶部２２２が記憶した差分データを解釈して、順番どおりにコマンドを実行することにより、有版データ記憶部２１１が記憶した有版データを更新し、更新後の版の有版データを生成する。
【００４６】
図９は、この実施の形態における差分生成処理Ｓ６１０の流れの一例を示すフローチャート図である。
差分生成処理Ｓ６１０において、差分生成部１１３は、ＣＰＵ９１１を用いて、２つの有版データ５３０から差分データを生成する。以下では、旧版データを新版データに更新するための差分データを差分生成部１１３が生成する手順について説明する。新版データを旧版データに更新するための差分データを生成する手順は、旧版データと新版データとを逆にすればよいので、説明を省略する。
差分生成処理Ｓ６１０は、新版単位取得工程Ｓ６１１、旧版単位取得工程Ｓ６１３、単位比較工程Ｓ６１５、一致長更新工程Ｓ６１７、２つの一致長判定工程Ｓ６２１，Ｓ６３１、２つの不一致判定工程Ｓ６２３，Ｓ６３３、３つの追加コマンド生成工程Ｓ６２５，Ｓ６３５，Ｓ６３９、２つの複写コマンド生成工程Ｓ６２７，Ｓ６３７を有する。
【００４７】
新版単位取得工程Ｓ６１１において、差分生成部１１３は、ＣＰＵ９１１を用いて、新版データの最初から順に、１つの単位となるデータ量の部分（以下「新版単位データ」と呼ぶ。）を取得する。１つの単位となるデータ量とは、例えば１バイトでもよいし、１キロバイトでもよい。１つの単位となるデータ量を小さくすれば、その分、旧版データと新版データとで一致する部分が多くなることが予想されるので、差分データのデータ量が小さくなる。逆に、１つの単位となるデータ量を大きくすれば、差分データのデータ量は大きくなるが、差分生成処理Ｓ６１０によってＣＰＵ９１１にかかる負荷が小さくなる。同様に、差分合成部１３３，２２４が差分データを合成する処理によってＣＰＵ９１１にかかる負荷も小さくなる。
新版データの最後まで到達し、差分生成部１１３が新版単位データを取得しなかった場合、差分生成部１１３は、一致長判定工程Ｓ６３１へ進む。
差分生成部１１３が新版単位データを取得した場合、差分生成部１１３は、旧版単位取得工程Ｓ６１３へ進む。
【００４８】
旧版単位取得工程Ｓ６１３において、差分生成部１１３は、ＣＰＵ９１１を用いて、旧版データの最初から順に、新版単位データと同じデータ量の部分（以下「旧版単位データ」と呼ぶ。）を取得する。
旧版データの最後に到達し、差分生成部１１３が旧版単位データを取得しなかった場合、差分生成部１１３は、一致長判定工程Ｓ６２１へ進む。
差分生成部１１３が旧版単位データを取得した場合、差分生成部１１３は、単位比較工程Ｓ６１５へ進む。
【００４９】
単位比較工程Ｓ６１５において、差分生成部１１３は、ＣＰＵ９１１を用いて、新版単位取得工程Ｓ６１１で取得した新版単位データと、旧版単位取得工程Ｓ６１３で取得した旧版単位データとを比較する。
新版単位データと旧版単位データとが一致すると差分生成部１１３が判定した場合、差分生成部１１３は、一致長更新工程Ｓ６１７へ進む。
新版単位データと旧版単位データとが一致しないと差分生成部１１３が判定した場合、差分生成部１１３は、旧版単位取得工程Ｓ６１３に戻り、次の旧版単位データを取得する。
【００５０】
一致長更新工程Ｓ６１７において、差分生成部１１３は、ＣＰＵ９１１を用いて、新版単位データと一致した旧版単位データの位置（以下「一致位置」と呼ぶ。）と、それより前の新版単位データと旧版単位データとが連続して一致していた数（以下「一致長」と呼ぶ。）とを表わすデータ（以下「一致長データ」と呼ぶ。）を生成する。差分生成部１１３は、ＲＡＭ９１４を用いて、生成した一致長データを記憶する。新版単位データと一致する旧版単位データが複数ある場合もあるので、差分生成部１１３は、一つの新版単位データについて、複数の一致長データを記憶する場合がある。
例えば、差分生成部１１３は、ＣＰＵ９１１を用いて、新版単位取得工程Ｓ６１１で取得した新版単位データより一つ前の新版単位データについてＲＡＭ９１４を用いて記憶した一致長データを取得する。差分生成部１１３は、ＣＰＵ９１１を用いて、取得した一致長データのなかから、一致長データが表わす一致位置が、旧版単位取得工程Ｓ６１３で取得した旧版単位データより一つ前の旧版単位データの位置である一致長データを抽出する。差分生成部１１３は、ＣＰＵ９１１を用いて、抽出した一致長データが表わす一致長に１を加えた和を算出し、算出した和を一致長に設定する。一つ前の新版単位データについて記憶した一致長データがない場合や、取得した一致長データのなかに、一致長データが表わす一致位置が一つ前の旧版単位データの位置である一致長データがない場合、差分生成部１１３は、ＣＰＵ９１１を用いて、１を一致長に設定する。差分生成部１１３は、ＣＰＵ９１１を用いて、旧版単位取得工程Ｓ６１３で取得した旧版単位データの位置と、設定した一致長とを表わす一致長データを生成し、ＲＡＭ９１４を用いて、生成した一致長データを記憶する。
その後、差分生成部１１３は、旧版単位取得工程Ｓ６１３に戻り、次の旧版単位データを取得する。
【００５１】
一致長判定工程Ｓ６２１において、差分生成部１１３は、ＣＰＵ９１１を用いて、新版単位取得工程Ｓ６１１で取得した新版単位データについて一致長更新工程Ｓ６１７で記憶した一致長データのなかから、一致長データが表わす一致長が最も大きい一致長（以下「最大一致長」と呼ぶ。）を算出する。現在の新版単位データについて記憶した一致長データがない場合、差分生成部１１３は、ＣＰＵ９１１を用いて、０を最大一致長に設定する。差分生成部１１３は、ＲＡＭ９１４を用いて、算出した最大一致長を記憶する。
差分生成部１１３は、ＣＰＵ９１１を用いて、算出した最大一致長と、新版単位取得工程Ｓ６１１で取得した新版単位データより一つ前の新版単位データについてＲＡＭ９１４を用いて記憶した最大一致長とを比較する。
算出した最大一致長が、記憶した一つ前の最大一致長より小さい場合、一つ前の新版単位データの位置で、旧版データと新版データとが一致する部分が途切れたことを意味する。差分生成部１１３は、複写コマンドを生成するため、不一致判定工程Ｓ６２３へ進む。
算出した最大一致長が、記憶した一つ前の最大一致長以上である場合、差分生成部１１３は、新版単位取得工程Ｓ６１１に戻り、次の新版単位データを取得する。
なお、一致する部分のサイズが小さい場合、複写コマンドを生成するよりも、前後の不一致部分と合わせて一つの追加コマンドを生成したほうが、差分データのデータ量が小さくなる場合がある。このため、算出した最大一致長が、記憶した一つ前の最大一致長より小さい場合であっても、記憶した一つ前の最大一致長が所定の閾値以下である場合は、新版単位取得工程Ｓ６１１に戻る構成であってもよい。
【００５２】
不一致判定工程Ｓ６２３において、差分生成部１１３は、ＣＰＵ９１１を用いて、一つ前の新版単位データについてＲＡＭ９１４を用いて記憶した最大一致長に基づいて、新版データにおける一致部分の開始位置を算出する。差分生成部１１３は、ＣＰＵ９１１を用いて、算出した開始位置を、既に生成したコマンドにより生成される新版データの終了位置と比較する。
算出した開始位置が、既に生成したコマンドにより生成される新版データの終了位置の次の位置である場合、一致部分が連続していることを意味する。差分生成部１１３は、複写コマンド生成工程Ｓ６２７へ進む。
算出した開始位置が、既に生成したコマンドにより生成される新版データの終了位置の次の位置よりもあとである場合、一致部分の間に不一致部分があることを意味する。差分生成部１１３は、不一致部分について追加コマンドを生成するため、追加コマンド生成工程Ｓ６２５へ進む。
【００５３】
追加コマンド生成工程Ｓ６２５において、差分生成部１１３は、ＣＰＵ９１１を用いて、追加コマンドを生成する。
例えば、差分生成部１１３は、ＣＰＵ９１１を用いて、不一致判定工程Ｓ６２３で算出した開始位置と、既に生成したコマンドにより生成される新版データの終了位置とに基づいて、不一致部分のサイズを算出し、新版データのなかから追加する不一致部分のデータを取得する。差分生成部１１３は、ＣＰＵ９１１を用いて、算出したサイズをサイズ５２３に設定し、取得したデータをソース５２４に設定した追加コマンドを生成する。
差分生成部１１３は、ＣＰＵ９１１を用いて、生成中の差分データの後ろに、生成した追加コマンドを追加する。差分生成部１１３は、ＨＤＤ９２０を用いて、生成した追加コマンドを追加した差分データを記憶する。
【００５４】
複写コマンド生成工程Ｓ６２７において、差分生成部１１３は、ＣＰＵ９１１を用いて、複写コマンドを生成する。
例えば、差分生成部１１３は、ＣＰＵ９１１を用いて、新版単位取得工程Ｓ６１１で取得した新版単位データより一つ前の新版単位データについて記憶した一致長データのなかから、一致長データが表わす一致長が、一つ前の新版単位データについて記憶した最大一致長に一致する一致長データを取得する。差分生成部１１３は、ＣＰＵ９１１を用いて、取得した一致長データが表わす位置に基づいて、旧版データから複写する一致部分の開始位置を算出する。差分生成部１１３は、ＣＰＵ９１１を用いて、一つ前の新版単位データについて記憶した最大一致長をサイズ５２３に設定し、算出した開始位置をソース５２４に設定した追加コマンドを生成する。
差分生成部１１３は、ＣＰＵ９１１を用いて、生成中の差分データの後ろに、生成した複写コマンドを追加する。差分生成部１１３は、ＨＤＤ９２０を用いて、生成した複写コマンドを追加した差分データを記憶する。
差分生成部１１３は、ＲＡＭ９１４を用いて、既に生成したコマンドにより生成できる新版データの終了位置として、新版単位取得工程Ｓ６１１で取得した新版単位データの一つ前の新版単位データの終了位置を記憶する。
その後、差分生成部１１３は、新版単位取得工程Ｓ６１１に戻り、次の新版単位データを取得する。
【００５５】
一致長判定工程Ｓ６３１〜複写コマンド生成工程Ｓ６３７は、新版データの最後まで処理した後、コマンドをまだ生成していない部分についてコマンドを生成するための処理であり、基本的には、一致長判定工程Ｓ６２１〜複写コマンド生成工程Ｓ６２７と同じである。そのため、詳しい説明は省略し、概要を説明する。
【００５６】
一致長判定工程Ｓ６３１において、差分生成部１１３は、ＣＰＵ９１１を用いて、新版単位取得工程Ｓ６１１で最後に取得した新版単位データについて最大一致長を算出する。
算出した最大一致長が０（あるいは所定の閾値以下）である場合、新版データの最後の部分が不一致部分であることを意味する。差分生成部１１３は、追加コマンド生成工程Ｓ６３９へ進む。
算出した最大一致長が０（あるいは所定の閾値）より大きい場合、新版データの最後の部分が一致部分であることを意味する。差分生成部１１３は、不一致判定工程Ｓ６３３へ進む。
【００５７】
不一致判定工程Ｓ６３３において、差分生成部１１３は、ＣＰＵ９１１を用いて、最後の一致部分の前に不一致部分があるか否かを判定する。
不一致部分があると判定した場合、差分生成部１１３は、追加コマンド生成工程Ｓ６３５へ進む。
不一致部分がなく、一致部分が連続していると判定した場合、差分生成部１１３は、複写コマンド生成工程Ｓ６３７へ進む。
【００５８】
追加コマンド生成工程Ｓ６３５において、差分生成部１１３は、ＣＰＵ９１１を用いて、追加コマンドを生成する。
【００５９】
複写コマンド生成工程Ｓ６３７において、差分生成部１１３は、ＣＰＵ９１１を用いて、複写コマンドを生成する。
その後、差分生成部１１３は、差分生成処理Ｓ６１０を終了する。
【００６０】
追加コマンド生成工程Ｓ６３９において、差分生成部１１３は、ＣＰＵ９１１を用いて、追加コマンドを生成する。
例えば、差分生成部１１３は、ＣＰＵ９１１を用いて、既に生成したコマンドにより生成される新版データの終了位置に基づいて、不一致部分のサイズを算出し、新版データのなかから追加する不一致部分のデータを取得する。差分生成部１１３は、ＣＰＵ９１１を用いて、算出したサイズをサイズ５２３に設定し、取得したデータをソース５２４に設定した追加コマンドを生成する。
差分生成部１１３は、ＣＰＵ９１１を用いて、生成中の差分データの後ろに、生成した追加コマンドを追加する。差分生成部１１３は、ＨＤＤ９２０を用いて、生成した追加コマンドを追加した差分データを記憶する。
その後、差分生成部１１３は、差分生成処理Ｓ６１０を終了する。
【００６１】
なお、差分生成処理Ｓ６１０は、上記説明した手順に限らず、他の手順で実行する構成であってもよい。
【００６２】
図１０は、この実施の形態におけるデータ更新処理Ｓ６５０の流れの一例を示すフローチャート図である。
データ更新処理Ｓ６５０において、有版データ更新部２１２は、差分記憶部２２２が記憶した差分データを、有版データ記憶部２１１が記憶した有版データに適用して、更新版の有版データを生成する。データ更新処理Ｓ６５０は、コマンド取得工程Ｓ６５１、データ追加工程Ｓ６５３、データ複写工程Ｓ６５５、データ更新工程Ｓ６５７を有する。
【００６３】
コマンド取得工程Ｓ６５１において、有版データ更新部２１２は、ＣＰＵ９１１を用いて、差分記憶部２２２が記憶した差分データのなかから、有版データ記憶部２１１が記憶した有版データに適用する差分データを取得する。有版データ更新部２１２は、ＣＰＵ９１１を用いて、取得した差分データの最初の位置にポインタを設定する。有版データ更新部２１２は、ＲＡＭ９１４を用いて、設定したポインタを記憶する。
有版データ更新部２１２は、コマンド取得工程Ｓ６５１で取得した差分データのうち、ＲＡＭ９１４を用いて記憶したポインタが表わす位置から、ＣＰＵ９１１を用いて、コマンドの命令５２２と、サイズ５２３とを取得する。
ポインタが表わす位置が差分データの最後であり、有版データ更新部２１２が命令５２２を取得しなかった場合、有版データ更新部２１２は、データ更新工程Ｓ６５７へ進む。
有版データ更新部２１２が命令５２２とサイズ５２３とを取得した場合、有版データ更新部２１２は、ＣＰＵ９１１を用いて、取得したサイズ５２３の次の位置（ソース５２４の位置）へポインタを進める。有版データ更新部２１２は、ＲＡＭ９１４を用いて、進めたポインタを記憶する。有版データ更新部２１２は、取得した命令５２２に基づいて、そのコマンドが複写コマンドであるか追加コマンドであるかを判定する。
そのコマンドが追加コマンドである場合、有版データ更新部２１２は、データ追加工程Ｓ６５３へ進む。
そのコマンドが複写コマンドである場合、有版データ更新部２１２は、データ複写工程Ｓ６５５へ進む。
【００６４】
データ追加工程Ｓ６５３において、有版データ更新部２１２は、コマンド取得工程Ｓ６５１で取得した差分データのうち、ＲＡＭ９１４を用いて記憶したポインタが表わす位置から、ＣＰＵ９１１を用いて、サイズ５２３が表わすバイト数のデータをソース５２４として取得する。有版データ更新部２１２は、ＣＰＵ９１１を用いて、取得したソース５２４の次の位置（次のコマンドの命令５２２の位置または差分データの最後）へポインタを進める。有版データ更新部２１２は、ＲＡＭ９１４を用いて、進めたポインタを記憶する。
有版データ更新部２１２は、ＣＰＵ９１１を用いて、生成中の有版データの後ろに、取得したソース５２４を追加する。有版データ更新部２１２は、ＨＤＤ９２０を用いて、ソース５２４を追加した生成中の有版データを記憶する。
その後、有版データ更新部２１２は、コマンド取得工程Ｓ６５１に戻り、次のコマンドを処理する。
【００６５】
データ複写工程Ｓ６５５において、有版データ更新部２１２は、コマンド取得工程Ｓ６５１で取得した差分データのうち、ＲＡＭ９１４を用いて記憶したポインタが表わす位置から、ＣＰＵ９１１を用いて、ソース５２４を取得する。有版データ更新部２１２は、ＣＰＵ９１１を用いて、取得したソース５２４の次の位置（次のコマンドの命令５２２の位置または差分データの最後）へポインタを進める。有版データ更新部２１２は、ＲＡＭ９１４を用いて、進めたポインタを記憶する。
有版データ更新部２１２は、ＣＰＵ９１１を用いて、有版データ記憶部２１１が記憶した有版データから、ソース５２４が表わす開始位置からサイズ５２３が表わすバイト数のデータを取得する。有版データ更新部２１２は、ＣＰＵ９１１を用いて、生成中の有版データの後ろに、取得したデータを追加する。有版データ更新部２１２は、ＨＤＤ９２０を用いて、データを追加した生成中の有版データを記憶する。
その後、有版データ更新部２１２は、コマンド取得工程Ｓ６５１に戻り、次のコマンドを処理する。
【００６６】
データ更新工程Ｓ６５７において、有版データ更新部２１２は、ＨＤＤ９２０を用いて記憶した生成中の有版データを、更新後の有版データとして、ＣＰＵ９１１を用いて、有版データ記憶部２１１に通知する。有版データ記憶部２１１は、ＨＤＤ９２０を用いて、有版データ更新部２１２から通知された更新後の有版データを記憶する。
【００６７】
このように、有版データ更新部２１２は、差分データが表わすコマンドを最初から順に解釈し、解釈したコマンドにしたがって、更新後の有版データを生成する。
【００６８】
図１１は、この実施の形態における差分合成処理Ｓ６７０の流れの一例を示すフローチャート図である。
差分合成処理Ｓ６７０において、差分合成部１３３は、差分記憶部１１５が記憶した２つの差分データを合成して、新しい差分データを生成する。なお、差分記憶部２２２が記憶した２つの差分データを合成して差分合成部２２４が新しい差分データを生成する処理の流れも、差分合成処理Ｓ６７０と同じである。
差分合成処理Ｓ６７０は、コマンド取得工程Ｓ６７１、２つの追加コマンド生成工程Ｓ６７３，Ｓ６７７、複写部分取得工程Ｓ６７５、複写コマンド生成工程Ｓ６７９を有する。
【００６９】
以下の説明において、有版データに順次適用できる２つの差分データのうち、初めに適用するほうを第一の差分データ、後から適用するほうを第二の差分データと呼ぶ。また、合成により生成される差分データを第三の差分データと呼ぶ。すなわち、第一の差分データが、有版データの第一の版に適用して第二の版を生成するための差分データであるとすると、第二の差分データは、有版データの第二の版に適用して第三の版を生成するための差分データであり、第三の差分データは、有版データの第一の版に適用して第三の版を生成するための差分データである。
【００７０】
コマンド取得工程Ｓ６７１において、差分合成部１３３は、ＣＰＵ９１１を用いて、差分記憶部１１５が記憶した差分データのなかから、第二の差分データを取得する。差分合成部１３３は、ＣＰＵ９１１を用いて、取得した差分データの最初の位置にポインタを設定する。差分合成部１３３は、ＲＡＭ９１４を用いて、設定したポインタを記憶する。
差分合成部１３３は、コマンド取得工程Ｓ６７１で取得した第二の差分データのうち、ＲＡＭ９１４を用いて記憶したポインタが表わす位置から、ＣＰＵ９１１を用いて、コマンドの命令５２２と、サイズ５２３とを取得する。
ポインタが表わす位置が第二の差分データの最後であり、差分合成部１３３が命令５２２を取得しなかった場合、差分合成部１３３は、差分合成処理Ｓ６７０を終了する。
差分合成部１３３が命令５２２とサイズ５２３とを取得した場合、差分合成部１３３は、ＣＰＵ９１１を用いて、取得したサイズ５２３の次の位置（ソース５２４の位置）へポインタを進める。差分合成部１３３は、ＲＡＭ９１４を用いて、進めたポインタを記憶する。差分合成部１３３は、取得した命令５２２に基づいて、そのコマンドが複写コマンドであるか追加コマンドであるかを判定する。
そのコマンドが追加コマンドである場合、差分合成部１３３は、追加コマンド生成工程Ｓ６７３へ進む。
そのコマンドが複写コマンドである場合、差分合成部１３３は、複写部分取得工程Ｓ６７５へ進む。
【００７１】
追加コマンド生成工程Ｓ６７３において、差分合成部１３３は、コマンド取得工程Ｓ６７１で取得した第二の差分データのうち、ＲＡＭ９１４を用いて記憶したポインタが表わす位置から、ＣＰＵ９１１を用いて、サイズ５２３が表わすバイト数のデータをソース５２４として取得する。差分合成部１３３は、ＣＰＵ９１１を用いて、取得したソース５２４の次の位置（次のコマンドの命令５２２の位置または第二の差分データの最後）へポインタを進める。差分合成部１３３は、ＲＡＭ９１４を用いて、進めたポインタを記憶する。
差分合成部１３３は、ＣＰＵ９１１を用いて、取得したサイズ５２３をサイズ５２３に設定し、取得したソース５２４をソース５２４に設定した追加コマンドを生成する。すなわち、差分合成部１３３は、取得した追加コマンドを複製する。差分合成部１３３は、ＣＰＵ９１１を用いて、生成中の第三の差分データの後ろに、生成した追加コマンドを追加する。差分合成部１３３は、ＨＤＤ９２０を用いて、生成した追加コマンドを追加した第三の差分データを記憶する。
その後、差分合成部１３３は、コマンド取得工程Ｓ６７１に戻り、次のコマンドを処理する。
【００７２】
複写部分取得工程Ｓ６７５において、差分合成部１３３は、コマンド取得工程Ｓ６７１で取得した第二の差分データのうち、ＲＡＭ９１４を用いて記憶したポインタが表わす位置から、ＣＰＵ９１１を用いて、ソース５２４を取得する。差分合成部１３３は、ＣＰＵ９１１を用いて、取得したソース５２４の次の位置（次のコマンドの命令５２２の位置または差分データの最後）へポインタを進める。差分合成部１３３は、ＲＡＭ９１４を用いて、進めたポインタを記憶する。
差分合成部１３３は、ＣＰＵ９１１を用いて、差分記憶部１１５が記憶した差分データのなかから、第一の差分データを取得する。差分合成部１３３は、ＣＰＵ９１１を用いて、取得した第一の差分データに含まれるコマンドを解釈して、第一の差分データに含まれるコマンドのなかから、有版データの第二の版において、取得したソース５２４が表わす開始位置からサイズ５２３が表わすバイト数のデータ（以下「複写部分データ」と呼ぶ。）を生成するコマンドを抽出する。複写部分データを生成するコマンドは、１つとは限らず、複数ある場合がある。また、複写部分データを生成するコマンドは、複写部分データだけでなく、その前後のデータも合わせて生成するものである場合がある。
例えば、差分合成部１３３は、ＣＰＵ９１１を用いて、第一の差分データの最初から順にコマンドを１つずつ取得する。最初のコマンドが生成するデータの範囲の開始位置は「０」である。二番目以降のコマンドが生成するデータの範囲の開始位置は、それより前のコマンドのサイズ５２３の合計である。差分合成部１３３は、ＣＰＵ９１１を用いて、取得したコマンドのサイズ５２３を累計することにより、そのコマンドにより生成されるデータの開始位置を算出する。差分合成部１３３は、ＣＰＵ９１１を用いて、算出した開始位置とサイズ５２３とに基づいて、そのコマンドにより生成されるデータが、有版データの第二の版において複写部分データに含まれるか否かを判定する。
差分合成部１３３は、ＣＰＵ９１１を用いて、第一の差分データから抽出したコマンドのなかから、コマンドを１つ取得する。第一の差分データから抽出したコマンドが複数である場合、差分合成部１３３は、複数のコマンドを最初から順に１つずつ処理する。
第一の差分データから抽出したコマンドの処理がすべて終了し、取得すべきコマンドがない場合、差分合成部１３３は、コマンド取得工程Ｓ６７１に戻り、第二の差分データにおける次のコマンドを処理する。
第一の差分データから抽出したコマンドを取得した場合、差分合成部１３３は、ＣＰＵ９１１を用いて、取得したコマンドが複写コマンドであるか追加コマンドであるかを判定する。
取得したコマンドが追加コマンドである場合、差分合成部１３３は、追加コマンド生成工程Ｓ６７７へ進む。
取得したコマンドが複写コマンドである場合、差分合成部１３３は、複写コマンド生成工程Ｓ６７９へ進む。
【００７３】
追加コマンド生成工程Ｓ６７７において、差分合成部１３３は、ＣＰＵ９１１を用いて、複写部分取得工程Ｓ６７５で取得した追加コマンドに基づいて、追加コマンドを生成する。
例えば、複写部分取得工程Ｓ６７５で取得した追加コマンドにより生成されるデータが、有版データの第二の版において複写部分データのなかに完全に含まれている場合、差分合成部１３３は、ＣＰＵ９１１を用いて、複写部分取得工程Ｓ６７５で取得した追加コマンドのサイズ５２３をサイズ５２３に設定し、ソース５２４をソース５２４に設定した追加コマンドを生成する。すなわち、差分合成部１３３は、複写部分取得工程Ｓ６７５で取得した追加コマンドを複製する。
複写部分取得工程Ｓ６７５で取得した追加コマンドにより生成されるデータが、有版データの第二の版において複写部分データに含まれない部分を含む場合、差分合成部１３３は、ＣＰＵ９１１を用いて、複写部分取得工程Ｓ６７５で取得した追加コマンドのソース５２４のなかから、複写部分データに含まれる部分のデータを切り出す。差分合成部１３３は、ＣＰＵ９１１を用いて、切り出したデータのサイズをサイズ５２３に設定し、切り出したデータをソース５２４に設定した追加コマンドを生成する。
差分合成部１３３は、ＣＰＵ９１１を用いて、生成中の第三の差分データの後ろに、生成した追加コマンドを追加する。差分合成部１３３は、ＨＤＤ９２０を用いて、生成した追加コマンドを追加した第三の差分データを記憶する。
その後、差分合成部１３３は、複写部分取得工程Ｓ６７５に戻り、第一の差分データから抽出した次のコマンドを処理する。
【００７４】
複写コマンド生成工程Ｓ６７９において、差分合成部１３３は、ＣＰＵ９１１を用いて、複写部分取得工程Ｓ６７５で取得した複写コマンドに基づいて、複写コマンドを生成する。
例えば、複写部分取得工程Ｓ６７５で取得した複写コマンドにより生成されるデータが、有版データの第二の版において複写部分データのなかに完全に含まれている場合、差分合成部１３３は、ＣＰＵ９１１を用いて、複写部分取得工程Ｓ６７５で取得した複写コマンドのサイズ５２３をサイズ５２３に設定し、ソース５２４をソース５２４に設定した複写コマンドを生成する。すなわち、差分合成部１３３は、複写部分取得工程Ｓ６７５で取得した複写コマンドを複製する。
複写部分取得工程Ｓ６７５で取得した複写コマンドにより生成されるデータが、有版データの第二の版において複写部分データより前の部分のデータ（以下「前部分データ」と呼ぶ。）を含む場合、差分合成部１３３は、ＣＰＵ９１１を用いて、複写部分取得工程Ｓ６７５で取得した複写コマンドにより生成されるデータのうち、複写部分に含まれる部分のデータ（以下「承継部分データ」と呼ぶ。）のサイズを算出する。また、差分合成部１３３は、ＣＰＵ９１１を用いて、前部分データのサイズを算出する。差分合成部１３３は、ＣＰＵ９１１を用いて、複写部分取得工程Ｓ６７５で取得した複写コマンドのソース５２４に、算出した前部分データのサイズを加えた和を算出する。差分合成部１３３は、ＣＰＵ９１１を用いて、算出した承継部分データのサイズをサイズ５２３に設定し、算出した和をソース５２４に設定した複写コマンドを生成する。
複写部分取得工程Ｓ６７５で取得した複写コマンドにより生成されるデータが、前部分データを含まず、有版データの第二の版において複写部分データより後の部分のデータ（以下「後部分データ」と呼ぶ。）を含む場合、差分合成部１３３は、ＣＰＵ９１１を用いて、承継部分データのサイズを算出する。差分合成部１３３は、ＣＰＵ９１１を用いて、算出したサイズをサイズ５２３に設定し、複写部分取得工程Ｓ６７５で取得した複写コマンドのソース５２４をソース５２４に設定した複写コマンドを生成する。
差分合成部１３３は、ＣＰＵ９１１を用いて、生成中の第三の差分データの後ろに、生成した複写コマンドを追加する。差分合成部１３３は、ＨＤＤ９２０を用いて、生成した複写コマンドを追加した第三の差分データを記憶する。
その後、差分合成部１３３は、複写部分取得工程Ｓ６７５に戻り、第一の差分データから抽出した次のコマンドを処理する。
【００７５】
このように、差分合成部１３３（および差分合成部２２４）は、差分データを適用する有版データを用いることなく、差分データを合成する。差分データのデータ量は、有版データのデータ量より小さいので、差分データを有版データに適用する場合と比較して、使用するＲＡＭ９１４やＨＤＤ９２０の記憶領域の容量が少なくて済み、ＣＰＵ９１１にかかる負荷が小さくなる。
特に、端末装置２００には、ＣＰＵ９１１の処理能力が低いものやＨＤＤ９２０の記憶容量が小さいものが存在する。有版データに複数の差分データを順次適用して有版データを更新するよりも、差分データを合成してから、有版データに１回だけ適用するほうが、ＣＰＵ９１１にかかる負荷が小さく、使用する記憶領域の容量が少なくて済むので、処理速度が向上し、端末装置２００が並列して実行する他の処理に影響を与えることなく、有版データを更新することができる。
【００７６】
図１２は、この実施の形態における差分データ５２０ｂの一例を示す図である。
図１３は、この実施の形態における差分データ５２０ｃの一例を示す図である。
図７に示した差分データ５２０が第一の差分データであるものとし、図１２に示した差分データ５２０ｂが第二の差分データであるものとする。差分データ５２０ｃは、差分合成部１３３（あるいは差分合成部２２４）が差分データ５２０と差分データ５２０ｂとを合成して生成する第三の差分データである。
以下、図１１のフローチャートを参照しつつ、差分合成部１３３の動作の具体例を説明する。
【００７７】
コマンド取得工程Ｓ６７１において、差分合成部１３３は、差分データ５２０ｂから最初のコマンド５２１ｆの命令５２２「ｃｏｐｙ」、サイズ５２３「４０００」を取得する。
【００７８】
命令５２２「ｃｏｐｙ」は複写コマンドを表わすので、複写部分取得工程Ｓ６７５へ進む。
差分合成部１３３は、コマンド５２１ｆのソース５２４「０」を取得する。差分合成部１３３は、差分データ５２０のなかから、有版データ５３０ｂの０バイト目（最初）から３９９９バイト目までの４０００バイトの部分のデータ（複写部分データ）を生成するコマンドを抽出する。
差分データ５２０には、５つのコマンド５２１ａ〜５２１ｅが含まれる。コマンド５２１ａは、有版データ５３０ｂの０バイト目から３１９９バイト目までの３２００バイトの部分５３１ｂのデータを生成するコマンドである。コマンド５２１ｂは、有版データ５３０ｂの３２００バイト目から４３９９バイト目までの１２００バイトの部分５３２ｂのデータを生成するコマンドである。コマンド５２１ｃは、有版データ５３０ｂの４４００バイト目から８９９９バイト目までの４６００バイトの部分５３３ｂのデータを生成するコマンドである。コマンド５２１ｄは、有版データ５３０ｂの９０００バイト目から１１５９９バイト目までの２６００バイトの部分５３４ｂのデータを生成するコマンドである。コマンド５２１ｅは、有版データ５３０ｂの１１６００バイト目から１３３９９バイト目（最後）までの１８００バイトの部分５３５ｂのデータを生成するコマンドである。したがって、差分合成部１３３は、２つのコマンド５２１ａ，５２１ｂを抽出する。
差分合成部１３３は、抽出したコマンドを前から順に処理するため、まず、コマンド５２１ａを取得する。
【００７９】
なお、差分合成部１３３は、差分合成処理Ｓ６７０の開始に先立ち、ＣＰＵ９１１を用いて、あらかじめ差分データ５２０のどのコマンドが有版データ５３０ｂのどの位置のデータを生成するものであるかを算出しておく構成であってもよい。差分合成部１３３は、算出した結果を表わすテーブルなど検索しやすい形式のデータを生成して、ＲＡＭ９１４を用いて記憶しておく。複写部分取得工程Ｓ６７５において、差分合成部１３３は、あらかじめ記憶したデータを検索することにより、コマンドを抽出する。これにより、複写部分取得工程Ｓ６７５の処理を速くすることができる。
【００８０】
コマンド５２１ａは複写コマンドなので、複写コマンド生成工程Ｓ６７９へ進む。
コマンド５２１ａにより生成される３２００バイトのデータは、有版データ５３０ｂにおいて複写部分データに完全に含まれるので、差分合成部１３３は、コマンド５２１ａを複製して、複写コマンド５２１ｊを生成する。
【００８１】
複写部分取得工程Ｓ６７５に戻り、差分合成部１３３は、次のコマンド５２１ｂを取得する。
コマンド５２１ｂは追加コマンドなので、追加コマンド生成工程Ｓ６７７へ進む。
コマンド５２１ｂにより生成される１２００バイトのデータのうち、有版データ５３０ｂにおいて複写部分データに含まれるのは前半の８００バイトだけである。差分合成部１３３は、ソース５２４ｂから前半の８００バイトを切り出す。差分合成部１３３は、切り出したデータのサイズ「８００」をサイズ５２３に設定し、切り出したデータをソース５２４ｋに設定した追加コマンド５２１ｋを生成する。
【００８２】
複写部分取得工程Ｓ６７５に戻り、抽出した２つのコマンド５２１ａ，５２１ｂの処理が終わったので、コマンド取得工程Ｓ６７１に戻る。
差分合成部１３３は、差分データ５２０ｂから次のコマンド５２１ｇの命令５２２「ｃｏｐｙ」、サイズ５２３「４４００」を取得する。
【００８３】
命令５２２「ｃｏｐｙ」は複写コマンドを表わすので、再び複写部分取得工程Ｓ６７５へ進む。
差分合成部１３３は、コマンド５２１ｇのソース５２４「５２００」を取得する。差分合成部１３３は、差分データ５２０のなかから、有版データ５３０ｂの５２００バイト目から４４００バイトの部分のデータ（複写部分データ）を生成するコマンドである２つのコマンド５２１ｃ，５２１ｄを抽出する。
差分合成部１３３は、抽出したコマンドを前から順に処理するため、まず、コマンド５２１ｃを取得する。
【００８４】
コマンド５２１ｃは複写コマンドなので、複写コマンド生成工程Ｓ６７９へ進む。
コマンド５２１ｃにより生成される４６００バイトのデータのうち、有版データ５３０ｂにおいて複写部分データに含まれる部分のデータ（承継部分データ）は後半の３８００バイトだけであり、それより前の８００バイトは複写部分データに含まれない前部分データである。差分合成部１３３は、承継部分データのサイズ「３８００」をサイズ５２３に設定し、コマンド５２１ｃのソース５２４「３２００」に前部分データのサイズ「８００」を加えた和「４０００」をソース５２４に設定した複写コマンド５２１ｌを生成する。
【００８５】
複写部分取得工程Ｓ６７５に戻り、差分合成部１３３は、次のコマンド５２１ｄを取得する。
コマンド５２１ｄは複写コマンドなので、複写コマンド生成工程Ｓ６７９へ進む。
コマンド５２１ｄにより生成される２６００バイトのデータのうち、有版データ５３０ｂにおいて複写部分データに含まれる部分のデータ（承継部分データ）は前半の６００バイトだけである。差分合成部１３３は、承継部分データのサイズ「６００」をサイズ５２３に設定し、コマンド５２１ｄのソース５２４「１０２００」をソース５２４に設定した複写コマンド５２１ｍを生成する。
【００８６】
複写部分取得工程Ｓ６７５に戻り、抽出した２つのコマンド５２１ｃ，５２１ｄの処理が終わったので、コマンド取得工程Ｓ６７１に戻る。
差分合成部１３３は、差分データ５２０ｂから、次のコマンド５２１ｈの命令５２２「ｄａｔａ」と、サイズ５２３「３０００」とを取得する。
【００８７】
命令５２２「ｄａｔａ」は追加コマンドを表わすので、追加コマンド生成工程Ｓ６７３へ進む。
差分合成部１３３は、コマンド５２１ｈを複製して、コマンド５２１ｎを生成する。
【００８８】
コマンド取得工程Ｓ６７１に戻り、差分合成部１３３は、差分データ５２０ｂから、次のコマンド５２１ｉの命令５２２「ｃｏｐｙ」と、サイズ５２３「２８００」とを取得する。
【００８９】
命令５２２「ｃｏｐｙ」は複写コマンドを表わすので、複写部分取得工程Ｓ６７５へ進む。
差分合成部１３３は、コマンド５２１ｉのソース５２４「１０６００」を取得する。差分合成部１３３は、差分データ５２０のなかから、有版データ５３０ｂの１０６００バイト目から２８００バイトの部分のデータ（複写部分データ）を生成するコマンドである２つのコマンド５２１ｄ，５２１ｅを抽出する。
差分合成部１３３は、抽出したコマンドを前から順に処理するため、まず、コマンド５２１ｄを取得する。
【００９０】
コマンド５２１ｄは複写コマンドなので、複写コマンド生成工程Ｓ６７９へ進む。
コマンド５２１ｄにより生成される２６００バイトのデータのうち、有版データ５３０ｂにおいて複写部分データに含まれる部分のデータ（承継部分データ）は後半の１０００バイトだけであり、それより前の１６００バイトは複写部分データに含まれない前部分データである。差分合成部１３３は、承継部分データのサイズ「１０００」をサイズ５２３に設定し、コマンド５２１ｃのソース５２４「１０２００」に前部分データのサイズ「１６００」を加えた和「１１８００」をソース５２４に設定した複写コマンド５２１ｏを生成する。
【００９１】
複写部分取得工程Ｓ６７５に戻り、差分合成部１３３は、次のコマンド５２１ｅを取得する。
コマンド５２１ｅは追加コマンドなので、追加コマンド生成工程Ｓ６７３へ進む。
コマンド５２１ｅにより生成される１８００バイトのデータは、有版データ５３０ｂにおいて複写部分データに完全に含まれるので、差分合成部１３３は、コマンド５２１ｅを複製して、追加コマンド５２１ｐを生成する。
【００９２】
コマンド取得工程Ｓ６７１に戻り、差分データ５２０ｂのコマンドをすべて処理したので、差分合成処理Ｓ６７０を終了する。差分合成部１３３は、生成した７つのコマンド５２１ｊ〜５２１ｐを差分データ５２０ｃとする。
【００９３】
図１４は、この実施の形態における３つの有版データ５３０ａ〜５３０ｃの関係の一例を示す図である。
有版データ５３０ａは、差分データ５２０を適用する適用前の版の有版データである。有版データ５３０ｂは、有版データ５３０ａに差分データ５２０を適用した結果として生成される適用後の版の有版データであるとともに、差分データ５２０ｂを適用する適用前の版の有版データでもある。有版データ５３０ｃは、有版データ５３０ｂに差分データ５２０ｂを適用した結果として生成される適用後の版の有版データである。
有版データ５３０ａと有版データ５３０ｂとの関係については、図８を用いて既に説明しているので、ここでは、主に有版データ５３０ｂと有版データ５３０ｃとの関係について説明する。
【００９４】
有版データ５３０ｃは、全部で１４２００バイトのデータである。
有版データ５３０ｃの０バイト目（最初）から３９９９バイト目までの４０００バイトの部分５３１ｃ（含有部分）のデータは、有版データ５３０ｂの０バイト目（最初）から３９９９バイト目までの４０００バイトの部分５４１ｂ（複写部分）のデータと同一である。そのうち、前半の３２００バイトは、有版データ５３０ａの部分５３１ａから承継した部分５３１ｂ（承継部分）であり、残りの８００バイトは、有版データ５３０ｂで新たに追加された部分５３２ｂの一部（非承継部分）である。
有版データ５３０ｃの４０００バイト目から８３９９バイト目までの４４００バイトの部分５３２ｃ（含有部分）のデータは、有版データ５３０ｂの５２００バイト目から９５９９バイト目までの４４００バイトの部分５４３ｂ（複写部分）のデータと同一である。そのうち、前半の３８００バイトは、有版データ５３０ａの部分５３２ａから承継した部分５３３ｂの一部（承継部分）であり、残りの６００バイトは、有版データ５３０ａの部分５３４ａから承継した部分５３４ｂの一部（非承継部分）である。
有版データ５３０ｃの１１４００バイト目から１４１９９バイト目（最後）までの２８００バイトの部分５３４ｃ（含有部分）のデータは、有版データ５３０ｂの１０６００バイト目から１３３９９バイト目（最後）までの２８００バイトの部分５４５ｂ（複写部分）のデータと同一である。そのうち、前半の１０００バイトは、有版データ５３０ａの部分５３４ａから承継した部分５３４ｂの一部（承継部分）であり、残りの１８００バイトは、有版データ５３０ｂで新たに追加された部分５３５ｂ（非承継部分）である。
有版データ５３０ｃの８４００バイト目から１１３９９バイト目までの３０００バイトの部分５３３ｃ（非含有部分）のデータは、有版データ５３０ｂのなかに一致する部分がなく、有版データ５３０ｃで新たに追加されたデータである。
【００９５】
図１５は、この実施の形態における２つの有版データ５３０ａ，５３０ｃの関係の一例を示す図である。
有版データ５３０ａは、差分データ５２０ｃを適用する適用前の版の有版データである。有版データ５３０ｃは、差分データ５２０ｃを適用した結果として生成される適用後の版の有版データである。差分データ５２０と差分データ５２０ｂとを合成した差分データ５２０ｃを有版データ５３０ａに適用することにより、１回の適用で、有版データ５３０ｃを生成することができる。
有版データ５３０ｃの０バイト目（最初）から３１９９バイト目までの３２００バイトの部分５４１ｃのデータは、有版データ５３０ａの０バイト目（最初）から３１９９バイト目までの３２００バイトの部分５４１ａのデータと同一である。有版データ５３０ｃの４０００バイト目から７７９９バイト目までの３８００バイトの部分５４３ｃのデータは、有版データ５３０ａの４０００バイト目から７７９９バイト目までの部分５４３ａのデータと同一である。有版データ５３０ｃの７８００バイト目から８３９９バイト目までの６００バイトの部分５４４ｃのデータは、有版データ５３０ａの１０２００バイト目から１０７９９バイト目までの６００バイトの部分５４５ａのデータと同一である。有版データ５３０ｃの１１４００バイト目から１２３９９バイト目までの１０００バイトの部分５４６ｃのデータは、有版データ５３０ａの１１８００バイト目から１２７９９バイト目（最後）までの１０００バイトの部分５４７ａのデータと同一である。有版データ５３０ｃのそれ以外の部分５４２ｃ，５４５ｃ，５４７ｃのデータは、有版データ５３０ｃで新たに追加されたデータである。
【００９６】
このように、差分合成部１３３および差分合成部２２４は、差分データを解釈することにより、データの承継関係を辿り、有版データの第一の版まで辿ることのできるデータは複写コマンドを使用して記述し、それ以外のデータは追加コマンドを使用して記述する。これにより、有版データを使わずに差分データを合成することができるとともに、複数の差分データを合成してデータ量の小さい差分データを生成することができる。
【００９７】
図１６は、この実施の形態における配布判定処理Ｓ７１０の流れの一例を示すフローチャート図である。
配布判定処理Ｓ７１０において、配布判定部１３２は、要求取得部１３１が取得した差分要求メッセージに基づいて、配布すべき差分データを判定する。
配布判定処理Ｓ７１０は、更新版判定工程Ｓ７１１、適用版記憶工程Ｓ７１３、判定済記憶工程Ｓ７１５、差分版選択工程Ｓ７２１、適用判定工程Ｓ７２３、生成版算出工程Ｓ７２５、判定済判定工程Ｓ７２７、生成版記憶工程Ｓ７２９、配布判定工程Ｓ７３１、拒否判定工程Ｓ７３５を有する。
【００９８】
更新版判定工程Ｓ７１１において、配布判定部１３２は、ＣＰＵ９１１を用いて、要求取得部１３１が取得した差分要求メッセージから、現版コードと更新版コードとを取得する。配布判定部１３２は、ＲＡＭ９１４を用いて、取得した現版コードを、端末装置２００が生成可能な版を表わす版コード（以下「生成版コード」と呼ぶ。）として記憶する。端末装置２００は、現版コードが表わす版の有版データを所持している。その有版データに、端末装置２００が現在所持している差分データや配布装置１００が配布した差分データを適用すれば、異なる版の有版データを生成できる。配布判定部１３２は、このように、端末装置２００が現に所持している版や生成可能な版の有版データに適用可能な差分データを辿ることにより、端末装置２００が生成可能な版の有版データを判定し、更新版コードが表わす版にたどり着く道のりを検索する。
配布判定部１３２は、ＣＰＵ９１１を用いて、記憶した生成版コードのなかに、取得した更新版コードと一致するものがあるかを判定する。
生成版コードのなかに更新版コードと一致するものがある場合、更新版コードが表わす版にたどり着く道のりが見つかったことを意味する。配布判定部１３２は、配布判定工程Ｓ７３１へ進む。
生成版コードのなかに更新版コードと一致するものがない場合、生成版コードが表わす版を出発点にして、差分データを適用することにより生成できる版を辿っていく。配布判定部１３２は、適用版記憶工程Ｓ７１３へ進む。
【００９９】
適用版記憶工程Ｓ７１３において、配布判定部１３２は、ＲＡＭ９１４を用いて、記憶した生成版コードを、差分データを適用する適用前の版を表わす適用版コードとして記憶する。
記憶した生成版コードがない場合、更新版コードが表わす版への道のりをそれ以上辿れないことを意味する。配布判定部１３２は、拒否判定工程Ｓ７３５へ進む。
記憶した生成版コードがある場合、今度はそれを出発点にして道のりを辿っていく。配布判定部１３２は、記憶した生成版コードを初期化して消去する。配布判定部１３２は、判定済記憶工程Ｓ７１５へ進む。
【０１００】
判定済記憶工程Ｓ７１５において、配布判定部１３２は、ＲＡＭ９１４を用いて、適用版記憶工程Ｓ７１３で記憶した適用版コードを、判定したことのある版を表わす判定済コードとして記憶する。これは、既に出発点にしたことのある版を再び出発点にすると無限の繰り返しになってしまうので、それを防ぐためである。
【０１０１】
差分版選択工程Ｓ７２１において、配布判定部１３２は、ＣＰＵ９１１を用いて、差分版記憶部１２５が記憶した差分版コードと、要求取得部１３１が取得した差分要求メッセージに含まれる端末装置２００が所持している差分データを表わす差分版コードとの和集合のなかから、差分版コードを１つ選択する。配布判定部１３２は、差分版コードを１つずつ順に選択して、処理していく。
未処理の差分版コードがない場合、配布判定部１３２は、更新版判定工程Ｓ７１１に戻り、生成版コードのなかに更新版コードがあるかを判定する。
未処理の差分版コードを選択した場合、配布判定部１３２は、適用判定工程Ｓ７２３へ進む。
【０１０２】
適用判定工程Ｓ７２３において、配布判定部１３２は、ＣＰＵ９１１を用いて、差分版選択工程Ｓ７２１で選択した差分版コードに基づいて、その差分版コードに対応する差分データが、記憶した適用版コードが表わすいずれかの版の有版データに適用できるか否かを判定する。
選択した差分版コードに対応する差分データが、記憶した適用版コードが表わすいずれかの版の有版データに適用できると判定した場合、配布判定部１３２は、生成版算出工程Ｓ７２５へ進む。
選択した差分版コードに対応する差分データが、記憶した適用版コードが表わすいずれの版の有版データにも適用できないと判定した場合、配布判定部１３２は、差分版選択工程Ｓ７２１に戻り、次の差分版データを選択する。
【０１０３】
生成版算出工程Ｓ７２５において、配布判定部１３２は、ＣＰＵ９１１を用いて、差分版選択工程Ｓ７２１で選択した差分版コードに基づいて、その差分版コードに対応する差分データを有版データに適用することにより生成できる有版データの版を算出する。
【０１０４】
判定済判定工程Ｓ７２７において、配布判定部１３２は、ＣＰＵ９１１を用いて、記憶した判定済コードのなかに、生成版算出工程Ｓ７２５で算出した版を表わす版コードがあるかを判定する。
記憶した判定済コードのなかに、生成版算出工程Ｓ７２５で算出した版を表わす版コードがあると判定した場合、配布判定部１３２は、差分版選択工程Ｓ７２１に戻り、次の差分版データを選択する。
記憶した判定済コードのなかに、生成版算出工程Ｓ７２５で算出した版を表わす版コードがないと判定した場合、配布判定部１３２は、生成版記憶工程Ｓ７２９へ進む。
【０１０５】
生成版記憶工程Ｓ７２９において、配布判定部１３２は、ＣＰＵ９１１を用いて、生成版算出工程Ｓ７２５で算出した版を表わす版コードを、生成版コードとして記憶する。
その後、配布判定部１３２は、差分版選択工程Ｓ７２１に戻り、次の差分版データを選択する。
【０１０６】
配布判定工程Ｓ７３１において、配布判定部１３２は、ＣＰＵ９１１を用いて、更新版判定工程Ｓ７１１〜生成版記憶工程Ｓ７２９で辿った道のりに基づいて、端末装置２００に配布すべき差分データを判定する。
その後、配布判定部１３２は、配布判定処理Ｓ７１０を終了する。
【０１０７】
拒否判定工程Ｓ７３５において、配布判定部１３２は、ＣＰＵ９１１を用いて、差分記憶部１１５が記憶している差分データを端末装置２００に配布しても、更新版コードが表わす版の有版データを生成できないので、端末装置２００からの要求を拒否すべきと判定する。配布判定部１３２の判定結果は、例えば、差分要求メッセージに対する応答として、端末装置２００に対して送信する構成であってもよい。あるいは、表示装置９０１を用いて、配布判定部１３２の判定結果を表示し、配布装置１００の管理者に対処を促す構成であってもよい。
【０１０８】
図１７は、この実施の形態における適用判定処理Ｓ７４０の流れの一例を示すフローチャート図である。
適用判定処理Ｓ７４０において、適用判定部２４０は、差分記憶部２２２が記憶した差分データを、有版データ更新部２１２が記憶した版の有版データに適用することにより、更新版コードが表わす版の有版データを生成できるかを判定する。
適用判定処理Ｓ７４０は、更新版判定工程Ｓ７４１、適用版記憶工程Ｓ７４３、判定済記憶工程Ｓ７４５、差分版選択工程Ｓ７５１、適用判定工程Ｓ７５３、生成版算出工程Ｓ７５５、判定済判定工程Ｓ７５７、生成版記憶工程Ｓ７５９、適用判定工程Ｓ７６１、差分取得工程Ｓ７６７を有する。
このうち、更新版判定工程Ｓ７４１〜生成版記憶工程Ｓ７５９の処理は、配布判定処理Ｓ７１０の更新版判定工程Ｓ７１１〜生成版記憶工程Ｓ７２９の処理と基本的に同じなので、簡単に説明する。
【０１０９】
更新版判定工程Ｓ７４１において、単独適用判定部２４１（または合成適用判定部２４２）は、ＣＰＵ９１１を用いて、現版コード記憶部２１３が記憶した現版コードと、更新版取得部２３１が取得した更新版コードとを取得する。単独適用判定部２４１（または合成適用判定部２４２）は、ＲＡＭ９１４を用いて、現版コードを生成版コードとして記憶する。
単独適用判定部２４１（または合成適用判定部２４２）は、ＣＰＵ９１１を用いて、生成版コードのなかに更新版コードと一致するものがあるかを判定する。
生成版コードのなかに更新版コードと一致するものがあると判定した場合、適用判定工程Ｓ７６１へ進む。
生成版コードのなかに更新版コードと一致するものがないと判定した場合、適用版記憶工程Ｓ７４３へ進む。
【０１１０】
適用版記憶工程Ｓ７４３において、単独適用判定部２４１（または合成適用判定部２４２）は、ＲＡＭ９１４を用いて、生成版コードを適用版コードとして記憶する。
生成版コードがない場合、差分要求工程Ｓ７６５へ進む。
生成版コードがある場合、判定済記憶工程Ｓ７４５へ進む。
【０１１１】
判定済記憶工程Ｓ７４５において、単独適用判定部２４１（または合成適用判定部２４２）は、ＲＡＭ９１４を用いて、適用版コードを判定済コードとして記憶する。
【０１１２】
差分版選択工程Ｓ７５１において、単独適用判定部２４１（または合成適用判定部２４２）は、ＣＰＵ９１１を用いて、差分版記憶部２２３が記憶した差分版コードのなかから、差分版コードを１つ選択する。
未処理の差分版コードがない場合、更新版判定工程Ｓ７４１に戻り、生成版コードのなかに更新版コードがあるかを判定する。
未処理の差分版コードを選択した場合、適用判定工程Ｓ７５３へ進む。
【０１１３】
適用判定工程Ｓ７５３において、単独適用判定部２４１（または合成適用判定部２４２）は、ＣＰＵ９１１を用いて、差分版選択工程Ｓ７５１で選択した差分版コードに対応する差分データが、適用版コードが表わす版の有版データに適用できるか否かを判定する。
適用できると判定した場合、生成版算出工程Ｓ７５５へ進む。
適用できないと判定した場合、差分版選択工程Ｓ７５１に戻り、次の差分版データを選択する。
【０１１４】
生成版算出工程Ｓ７５５において、単独適用判定部２４１（または合成適用判定部２４２）は、ＣＰＵ９１１を用いて、差分版選択工程Ｓ７５１で選択した差分版コードの適用により生成できる有版データの版を算出する。
【０１１５】
判定済判定工程Ｓ７５７において、単独適用判定部２４１（または合成適用判定部２４２）は、ＣＰＵ９１１を用いて、判定済コードのなかに、生成版算出工程Ｓ７５５で算出した版を表わす版コードがあるか否かを判定する。
判定済コードのなかに算出した版を表わす版コードがあると判定した場合、差分版選択工程Ｓ７５１に戻り、次の差分版データを選択する。
判定済コードのなかに算出した版を表わす版コードがないと判定した場合、生成版記憶工程Ｓ７５９へ進む。
【０１１６】
生成版記憶工程Ｓ７５９において、単独適用判定部２４１（または合成適用判定部２４２）は、ＣＰＵ９１１を用いて、生成版算出工程Ｓ７５５で算出した版を表わす版コードを生成版コードとして記憶する。
その後、差分版選択工程Ｓ７５１に戻り、次の差分版データを選択する。
【０１１７】
適用判定工程Ｓ７６１において、単独適用判定部２４１（または合成適用判定部２４２）は、ＣＰＵ９１１を用いて、更新版判定工程Ｓ７４１〜生成版記憶工程Ｓ７５９で辿った道のりに基づいて、差分記憶部２２２が記憶した差分データのうちから、有版データ記憶部２１１が記憶した有版データに適用すべき差分データを判定する。
その後、適用判定処理Ｓ７４０を終了する。
【０１１８】
差分要求工程Ｓ７６５において、差分要求部２４３は、ＣＰＵ９１１を用いて、配布装置１００に対して差分データの配布を要求する差分要求メッセージを生成する。差分要求部２４３は、ＣＰＵ９１１を用いて、生成した差分要求メッセージを配布装置１００に対して通知する。
通知した差分要求メッセージに対する応答として、配布装置１００から差分データが配布されてきた場合は、差分取得工程Ｓ７６７へ進む。
通知した差分要求メッセージが拒否された場合は、適用判定処理Ｓ７４０を終了する。
【０１１９】
差分取得工程Ｓ７６７において、差分取得部２２１は、ＣＰＵ９１１を用いて、配布装置１００から配布された差分データを取得する。差分記憶部２２２は、ＨＤＤ９２０を用いて、差分取得部２２１が取得した差分データを記憶する。差分版記憶部２２３は、ＨＤＤ９２０を用いて、差分取得部２２１が取得した差分データに対応する差分版コードを記憶する。
その後、更新版判定工程Ｓ７４１に戻り、適用判定処理Ｓ７４０を最初からやり直す。
【０１２０】
図１８は、この実施の形態における差分データ５２０ｄ〜５２０ｋと有版データ５３０ｄ〜５３０ｉとの関係の一例を示す模式図である。
この図において、有版データ５３０ｄ〜５３０ｉは、丸で示し、差分データ５２０ｄ〜５２０ｋは、矢印で示している。矢印の根元は、その差分データを適用できる有版データを示し、矢印の先は、その差分データを適用した結果として生成される有版データを示す。例えば、差分データ５２０ｄは、有版データ５３０ｄに適用できる差分データであり、有版データ５３０ｄに適用した結果、有版データ５３０ｅを生成することができる差分データである。
【０１２１】
差分記憶部２２２は、８つの差分データ５２０ｄ〜５２０ｋを記憶しているものとする。これに対応して、差分版記憶部２２３は、８つの差分版コードを記憶している。有版データ記憶部２１１は、有版データ５３０ｄを記憶しているものとする。利用者は、有版データ５３０ｉを取得したいものとする。
以下、図１７に示したフローチャートを参照しつつ、適用判定部２４０の動作の具体例を説明する。
【０１２２】
更新版判定工程Ｓ７４１において、単独適用判定部２４１は、有版データ５３０ｄの版を表わす現版コードと、有版データ５３０ｉの版を表わす更新版コードとを取得する。単独適用判定部２４１は、有版データ５３０ｄの版を表わす現版コードを生成版コードとして記憶する。
記憶した生成版コードのなかに更新版コードがないので、適用版記憶工程Ｓ７４３へ進み、単独適用判定部２４１は、記憶した生成版コードを適用版コードとして記憶する。これにより、単独適用判定部２４１は、適用版コードとして、有版データ５３０ｄの版を表わす版コードを記憶する。
生成版コードがあったので、判定済記憶工程Ｓ７４５へ進み、単独適用判定部２４１は、記憶した適用版コードを判定済コードとして記憶する。これにより、単独適用判定部２４１は、適用版コードとして、有版データ５３０ｄの版を表わす版コードを記憶する。
【０１２３】
差分版選択工程Ｓ７５１において、単独適用判定部２４１は、差分版記憶部２２３が記憶した８つの差分版コードのなかから差分版コードを１つ選択する。例えば、単独適用判定部２４１は、差分データ５２０ｄに対応する差分版コードを選択する。
適用判定工程Ｓ７５３において、差分データ５２０ｄは有版データ５３０ｄに適用できるので、生成版算出工程Ｓ７５５へ進み、単独適用判定部２４１は、差分データ５２０ｄを有版データ５３０ｄに適用した結果として生成される有版データが有版データ５３０ｅであることを算出する。
判定済判定工程Ｓ７５７において、判定済コードのなかに有版データ５３０ｅの版を表わす版コードがないので、生成版記憶工程Ｓ７５９へ進み、単独適用判定部２４１は、有版データ５３０ｅの版を表わす版コードを生成版コードとして記憶する。
【０１２４】
差分版選択工程Ｓ７５１に戻り、単独適用判定部２４１は、未処理の７つの差分版コードのなかから、次の差分版コードを選択する。例えば、単独適用判定部２４１は、差分データ５２０ｅに対応する差分版コードを選択する。
適用判定工程Ｓ７５３において、差分データ５２０ｅは有版データ５３０ｄに適用できないので、差分版選択工程Ｓ７５１に戻る。
【０１２５】
単独適用判定部２４１は、未処理の６つの差分版コードのなかから、次の差分版コードを選択する。例えば、単独適用判定部２４１は、差分データ５２０ｆに対応する差分版コードを選択する。
差分データ５２０ｆは有版データ５３０ｄに適用できるので、単独適用判定部２４１は、適用の結果得られる有版データが有版データ５３０ｇであることを算出する。判定済コードのなかに有版データ５３０ｇの版を表わす版データがないので、単独適用判定部２４１は、有版データ５３０ｇの版を表わす版コードを生成版コードとして記憶する。これにより、単独適用判定部２４１は、生成版コードとして、有版データ５３０ｅの版を表わす版コードと、有版データ５３０ｇの版を表わす版コードとを記憶する。
【０１２６】
差分版選択工程Ｓ７５１に戻り、単独適用判定部２４１は、未処理の５つの差分版コードのなかから、次の差分版コードを選択する。残りの差分版コードに対応する差分データ５２０ｇ〜５２０ｋはいずれも有版データ５３０ｄに適用できないので、適用判定工程Ｓ７５３で差分版選択工程Ｓ７５１に戻される。
未処理の差分版コードがなくなると、更新版判定工程Ｓ７４１に戻り、単独適用判定部２４１は、記憶した生成版コードのなかに更新版コードがあるか否かを判定する。単独適用判定部２４１が記憶した生成版コードが表わす版の有版データは、有版データ５３０ｅ及び有版データ５３０ｇなので、有版データ５３０ｉの版を表わす更新版コードと一致する生成版コードはない。そのため、適用版記憶工程Ｓ７４３へ進む。
【０１２７】
適用版記憶工程Ｓ７４３において、合成適用判定部２４２は、単独適用判定部２４１が記憶した生成版コードを適用版コードとして記憶する。合成適用判定部２４２が記憶した適用版コードが表わす版の有版データは、有版データ５３０ｅ及び有版データ５３０ｇである。
判定済記憶工程Ｓ７４５において、合成適用判定部２４２は、記憶した適用版コードを単独適用判定部２４１が記憶した判定済コードと合わせて、判定済コードとして記憶する。合成適用判定部２４２が記憶した判定済コードが表わす版の有版データは、有版データ５３０ｄ，５３０ｅ，５３０ｇの３つである。
【０１２８】
差分版選択工程Ｓ７５１において、合成適用判定部２４２は、差分版記憶部２２３が記憶した差分版コードのなかから、差分版コードを１つ選択する。
例えば、合成適用判定部２４２が、差分データ５２０ｄに対応する差分版データを選択した場合、差分データ５２０ｄは有版データ５３０ｅにも有版データ５３０ｇにも適用できないので、差分版選択工程Ｓ７５１に戻る。
合成適用判定部２４２が、差分データ５２０ｅに対応する差分版データを選択した場合、差分データ５２０ｅは有版データ５３０ｅに適用できるので、合成適用判定部２４２は、有版データ５３０ｆが生成できることを算出し、有版データ５３０ｆは判定済でないので、有版データ５３０ｆの版を表わす版コードを生成版コードとして記憶する。
合成適用判定部２４２が、差分データ５２０ｇに対応する差分版データを選択した場合、差分データ５２０ｇは有版データ５３０ｅに適用できる。合成適用判定部２４２は、有版データ５３０ｇを生成できることを算出するが、有版データ５３０ｇは判定済なので、差分版選択工程Ｓ７５１に戻る。
このようにして、差分版記憶部２２３が記憶したすべての差分版コードについての処理が終わると、合成適用判定部２４２は、生成版コードとして、有版データ５３０ｆの版を表わす版コードと、有版データ５３０ｈの版を表わす版コードとを記憶している。
【０１２９】
更新版判定工程Ｓ７４１に戻り、生成版コードのなかに更新版コードと一致するものがないので、合成適用判定部２４２は、生成版コードを適用版コードとして記憶し、適用版コードを判定済コードとして記憶する。合成適用判定部２４２が記憶した適用版コードが表わす版の有版データは、有版データ５３０ｆ，５３０ｈの２つになる。また、合成適用判定部２４２が記憶した判定済コードが表わす版の有版データは、有版データ５３０ｄ〜５３０ｈの５つになる。
【０１３０】
差分版選択工程Ｓ７５１において、合成適用判定部２４２は、差分版記憶部２２３が記憶した差分版コードのなかから、差分版コードを１つ選択する。
差分データ５２０ｈ，５２０ｋ以外は、有版データ５３０ｆにも有版データ５３０ｈにも適用できない。また、差分データ５２０ｈを適用した結果として生成できる有版データ５３０ｈは判定済である。したがって、合成適用判定部２４２が差分データ５２０ｋ以外に対応する差分版コードを選択した場合は、差分版選択工程Ｓ７５１に戻り、差分データ５２０ｋに対応する差分版コードを選択した場合、合成適用判定部２４２は、生成版コードとして、有版データ５３０ｉの版を表わす版コードを記憶する。
このようにして、差分版記憶部２２３が記憶したすべての差分版コードについての処理が終わると、合成適用判定部２４２は、生成版コードとして、有版データ５３０ｉの版を表わす版コードを記憶する。
【０１３１】
更新版判定工程Ｓ７４１に戻り、生成版コードのなかに更新版コードと一致するものがあるので、適用判定工程Ｓ７６１へ進む。合成適用判定部２４２は、それまでの道のりを辿ることにより、３つの差分データ５２０ｆ，５２０ｊ，５２０ｋを順次適用すれば、有版データ５３０ｄから有版データ５３０ｉを生成できることを判定する。
【０１３２】
以上のようにして、適用判定部２４０は、更新のために使用する差分データを判定する。
【０１３３】
適用判定部２４０が判定した３つの差分データ５２０ｆ，５２０ｊ，５２０ｋは順次適用するものなので、差分合成部２２４は、この３つの差分データ５２０ｆ，５２０ｊ，５２０ｋを合成して、１つの差分データを生成する。３以上の差分データを合成する場合、差分合成部２２４は、例えば、最初の２つの差分データを合成し、合成により生成した差分データと３つ目の差分データとを合成する。
【０１３４】
もう一つの具体例として、差分記憶部２２２が差分データ５２０ｋ以外の７つの差分データ５２０ｄ〜５２０ｊを記憶していて、差分データ５２０ｋを記憶していなかったとする。
【０１３５】
その場合、５３０ｉにたどり着く道のりは見つからず、合成適用判定部２４２は、生成版コードを記憶しないまま、差分版選択工程Ｓ７５１〜生成版記憶工程Ｓ７５９の繰り返しを抜ける。
生成版コードがないので、適用版記憶工程Ｓ７４３で差分要求工程Ｓ７６５へ進む。差分要求部２４３は、差分要求メッセージを生成し、配布装置１００に対して通知する。
【０１３６】
通知した差分要求メッセージに対する応答として、配布装置１００から配布される差分データは、差分データ５２０ｋかもしれないし、１回の適用で有版データ５３０ｄから有版データ５３０ｉを生成できる差分データかもしれない。どのような差分データが配布されるかは、配布装置１００の差分記憶部１１５がどのような差分データを記憶しているかによって変わるので、端末装置２００の側では予想できない。このため、端末装置２００は、配布された差分データを追加して、適用判定処理Ｓ７４０を最初からやり直すことにより、適用すべき差分データを判定する。
【０１３７】
この実施の形態における差分管理装置（配布装置１００・端末装置２００）は、３以上の版を有する有版データ５３０について、上記有版データ５３０の２つの版の間の差分を表わす差分データ５２０を管理する。
差分管理装置は、データを記憶する記憶装置（ＲＡＭ９１４・ＨＤＤ９２０など）と、データを処理する処理装置（ＣＰＵ９１１）と、差分記憶部１１５，２２２と、差分合成部１３３，２２４とを有する。
上記差分記憶部１１５，２２２は、上記記憶装置を用いて、上記有版データの第一の版５３０ａと第二の版５３０ｂとの間の差分を表わす第一の差分データ５２０と、上記有版データの第二の版５３０ｂと第三の版５３０ｃとの間の差分を表わす第二の差分データ５２０ｂとを記憶する。
上記差分合成部１３３，２２４は、上記処理装置を用いて、上記差分記憶部１１５，２２２が記憶した第一の差分データ５２０と第二の差分データ５２０ｂとを合成して、上記有版データの第一の版５３０ａと第三の版５３０ｃとの間の差分を表わす第三の差分データ５２０ｃを生成する。
【０１３８】
これにより、配布すべきデータ量を削減できるとともに、有版データの版の数が多くても記憶すべき差分データの数が少なく、有版データを更新するため差分データを適用する際に、処理装置にかかる負荷や、記憶装置に必要な作業領域の容量を小さくすることができる。
【０１３９】
上記差分データ５２０は、上記有版データ５３０の更新前の版５３０ａ，５３０ｂを更新後の版５３０ｂ，５３０ｃに更新するための更新コマンド５２１を表わす。
上記更新コマンド５２１は、複写コマンドと追加コマンドとのうち少なくともいずれかを含む。
上記複写コマンドは、上記有版データの更新後の版５３０ｂ，５３０ｃのうち上記有版データの更新前の版５３０ａ，５３０ｂに同一の部分が存在する含有部分（一致部分・複写部分）について、上記有版データの更新前の版５３０ａ，５３０ｂのうち上記含有部分と同一の部分の位置（ソース５２４）を示し、上記同一の部分を上記含有部分に複写することを表わす。
上記追加コマンドは、上記有版データの更新後の版５３０ｂ，５３０ｃのうち上記有版データの更新前の版５３０ａ，５３０ｂに同一の部分が存在しない非含有部分（不一致部分・追加部分）について、上記非含有部分と同一の追加データ（ソース５２４）を有し、上記追加データを上記非含有部分に追加することを表わす。
【０１４０】
これにより、差分データが表わす更新コマンドを解釈して実行するだけで、有版データの更新ができるので、有版データを更新するため差分データを適用する際に、処理装置にかかる負荷や、記憶装置に必要な作業領域の容量を小さくすることができる。
【０１４１】
上記差分合成部１３３，２２４は、上記処理装置を用いて、上記第二の差分データ５２０ｂが上記複写コマンドを含む場合、上記複写コマンドに基づいて、上記有版データの第二の版５３０ｂのうち上記含有部分に複写する部分を判定して複写部分とし、上記第一の差分データ５２０に基づいて、上記複写部分のうち上記有版データの第一の版５３０ａに含まれる承継部分について、上記有版データの第一の版５３０ａの一部を上記含有部分のうち上記承継部分に対応する部分に複写することを表わす複写コマンドを生成し、上記複写部分のうち上記有版データの第一の版５３０ａに含まれない非承継部分について、上記第一の差分データ５２０に含まれる追加コマンドが有する追加データ（ソース５２４）を上記含有部分のうち上記非承継部分に対応する部分に追加することを表わす追加コマンドを生成し、上記第二の差分データ５２０ｂが追加コマンドを含む場合、上記追加コマンドに基づいて、上記追加コマンドが有する追加データ（ソース５２４）を上記非含有部分に追加することを表わす追加コマンドを生成することにより、上記第三の差分データ５２０ｃを生成する。
【０１４２】
これにより、有版データ５３０を使用せず、差分データ５２０の操作だけで差分データ５２０を合成することができるので、差分データを合成する際に、処理装置にかかる負荷や、記憶装置に必要な作業領域の容量を小さくすることができる。
【０１４３】
上記差分管理装置（端末装置２００）は、更に、有版データ記憶部２１１と、有版データ更新部２１２とを有する。
上記有版データ記憶部２１１は、上記記憶装置を用いて、上記有版データ５３０の第一の版（現版データ）を記憶する。
上記有版データ更新部２１２は、上記処理装置を用いて、上記差分合成部２２４が生成した第三の差分データ５２０ｃに基づいて、上記有版データ記憶部２１１が記憶した有版データ５３０の第一の版（現版データ）を更新して、上記有版データ５３０の第三の版（更新版データ）を生成する。
【０１４４】
複数の差分データを順次適用して有版データを更新するのではなく、複数の差分データを合成して生成した１つの差分データを適用して有版データを更新するので、処理装置にかかる負荷や、記憶装置に必要な作業領域の容量を小さくすることができる。
【０１４５】
上記差分管理装置（端末装置２００）は、更に、更新版取得部２３１と、単独適用判定部２４１と、合成適用判定部２４２とを有する。
上記更新版取得部２３１は、上記処理装置を用いて、上記有版データ記憶部２１１が記憶した有版データ（現版データ）を更新して生成する版を表わす更新版コードを取得する。
上記単独適用判定部２４１は、上記処理装置を用いて、上記差分記憶部２２２が記憶した差分データ５２０のなかに、上記有版データ記憶部２１１が記憶した有版データ（現版データ）を更新して上記更新版取得部２３１が取得した更新版コードが表わす版の有版データ（更新版データ）を生成できる単独適用差分データがあるか否かを判定する。
上記合成適用判定部２４２は、上記処理装置を用いて、上記差分記憶部２２２が記憶した差分データ５２０のなかに単独適用差分データがないと上記単独適用判定部２４１が判定した場合に、上記差分記憶部２２２が記憶した差分データ５２０のなかに、複数の差分データを合成することにより、上記単独適用差分データを生成することができる複数の合成適用差分データがあるか否かを判定する。
上記差分合成部２２４は、上記処理装置を用いて、上記差分記憶部２２２が記憶した差分データのなかに、上記複数の合成適用差分データがあると上記合成適用判定部２４２が判定した場合に、上記差分記憶部２２２が記憶した複数の合成適用差分データを合成して、上記単独適用差分データを生成する。
上記有版データ更新部２１２は、上記処理装置を用いて、上記差分記憶部２２２が記憶した差分データ５２０のなかに単独適用差分データがあると上記単独適用判定部２４１が判定した場合に、上記差分記憶部２２２が記憶した単独適用差分データに基づいて、上記有版データ記憶部２１１が記憶した有版データ（現版データ）を更新し、上記差分記憶部２２２が記憶した差分データ５２０のなかに、上記複数の合成適用差分データがあると上記合成適用判定部２４２が判定した場合に、上記差分合成部２２４が生成した単独適用差分データに基づいて、上記有版データ記憶部２１１が記憶した有版データ（現版データ）を更新する。
【０１４６】
１回の適用で更新が可能な差分データ（単独適用差分データ）を差分記憶部２２２が記憶していれば、それを利用し、合成により単独適用差分データを生成可能な差分データ（合成適用差分データ）を差分記憶部２２２が記憶していれば、差分合成部２２４がそれを合成して生成した単独適用差分データを利用して、有版データ更新部２１２が有版データを更新するので、処理装置にかかる負荷や、記憶装置に必要な作業領域の容量を小さくすることができる。
【０１４７】
上記差分管理装置（端末装置２００）は、更に、差分要求部２４３と、差分取得部２２１とを有する。
上記差分要求部２４３は、上記処理装置を用いて、上記差分記憶部２２２が記憶した差分データのなかに、上記複数の合成適用差分データがないと上記合成適用判定部２４２が判定した場合に、上記単独適用差分データ、および、上記複数の合成適用差分データ、および、上記差分記憶部が記憶した差分データと合成することにより上記単独適用差分データを生成できる補充差分データのうち少なくともいずれかを要求する差分要求メッセージを差分配布装置（配布装置１００）に対して通知する。
上記差分取得部２２１は、上記処理装置を用いて、上記差分要求部２４３が通知した差分要求メッセージに対する応答として上記差分配布装置が配布した差分データを取得する。
上記差分記憶部２２２は、上記記憶装置を用いて、上記差分取得部２２１が取得した差分データを記憶する。
【０１４８】
更新に必要な差分データを差分記憶部２２２が記憶していない場合は、差分配布装置に対して差分データの配布を要求するので、更新に必要な差分データを取得することができる。取得した差分データが単独適用差分データであれば、それを利用して、有版データを更新できる。取得した差分データが複数の合成適用差分データであれば、差分合成部２２４がそれを合成して生成した単独適用差分データを利用して、有版データを更新できる。取得した差分データが補充差分データであれば、差分記憶部２２２が記憶した差分データと補充差分データとを差分合成部２２４が合成して生成した単独適用差分データを利用して、有版データを更新できる。いずれの場合も、差分配布装置から配布を受ける差分データのデータ量を削減できるとともに、処理装置にかかる負荷や、記憶装置に必要な作業領域の容量を小さくすることができる。
【０１４９】
上記差分管理装置（配布装置１００）は、更に、要求取得部１３１と、差分通知部（差分配布部１３４）とを有する。
上記要求取得部１３１は、上記処理装置を用いて、上記第三の差分データを要求する差分要求メッセージを端末装置２００から取得する。
上記差分通知部は、上記差分合成部１３３が生成した第三の差分データ５２０ｃを上記端末装置２００に対して通知する。
【０１５０】
これにより、配布する差分データのデータ量を削減できるとともに、端末装置２００の処理装置にかかる負荷や、端末装置２００の記憶装置に必要な作業領域の容量を小さくすることができる。
【０１５１】
上記差分管理装置（配布装置１００）は、更に、旧版データ記憶部１１１と、新版データ取得部１１２と、差分生成部１１３と、旧版データ更新部１１４とを有する。
上記旧版データ記憶部１１１は、上記記憶装置を用いて、上記有版データの旧版（旧版データ）を記憶する。
上記新版データ取得部１１２は、上記処理装置を用いて、上記有版データの新版（新版データ）を取得する。
上記差分生成部１１３は、上記処理装置を用いて、上記旧版データ記憶部１１１が記憶した有版データの旧版（旧版データ）と、上記新版データ取得部１１２が取得した有版データの新版（新版データ）との間の差分データを生成する。
上記差分記憶部１１５は、上記記憶装置を用いて、上記差分生成部１１３が生成した差分データを記憶する。
上記旧版データ更新部１１４は、上記処理装置を用いて、上記旧版データ記憶部１１１が記憶した有版データ（旧版データ）を更新して、上記新版データ取得部１１２が取得した有版データの新版（新版データ）を記憶させる。
【０１５２】
旧版データと新版データとの間の差分データを差分生成部１１３が生成すると、旧版データ記憶部１１１は、新版データを旧版データとして記憶するので、旧版データ記憶部１１１の記憶容量が小さくて済む。有版データの他の版の間の差分データが必要な場合は、差分記憶部１１５が記憶した差分データを差分合成部１３３が合成して、生成することができる。
【０１５３】
上記差分管理装置（配布装置１００）において、上記差分生成部１１３は、上記処理装置を用いて、上記有版データの旧版（旧版データ）を新版（新版データ）に更新するための順方向差分データと、上記有版データの新版（新版データ）を旧版（旧版データ）に戻すための逆方向差分データとを生成する。
上記差分記憶部１１５は、上記記憶装置を用いて、上記差分生成部１１３が生成した順方向差分データと逆方向差分データとを記憶する。
【０１５４】
これにより、有版データを新しい版に更新したいという要望だけでなく、古い版に戻したいという要望にも答えることができる。旧版データよりも更に古い版に戻す場合は、差分合成部１３３が差分データを合成することにより、必要な差分データを生成することができる。
【０１５５】
この実施の形態における差分管理装置（配布装置１００、端末装置２００）は、コンピュータが実行することにより上記コンピュータが差分管理装置として機能するコンピュータプログラムにより実現することができる。
【０１５６】
これにより、配布すべきデータ量を削減できるとともに、有版データを更新するため差分データを適用する際に、処理装置にかかる負荷や、記憶装置に必要な作業領域の容量を小さくすることができる差分管理装置を実現できる。
【０１５７】
この実施の形態における差分管理装置（配布装置１００、端末装置２００）が、３以上の版を有する有版データ５３０について、上記有版データ５３０の２つの版の間の差分を表わす差分データ５２０を管理する差分管理方法は、以下の工程を有する。
上記記憶装置が、上記有版データの第一の版５３０ａと第二の版５３０ｂとの間の差分を表わす第一の差分データ５２０と、上記有版データの第二の版５３０ｂと第三の版５３０ｃとの間の差分を表わす第二の差分データ５２０ｂとを記憶する。
上記処理装置が、上記記憶装置が記憶した第一の差分データ５２０と第二の差分データ５２０ｂとを合成して、上記有版データの第一の版５３０ａと第三の版５３０ｃとの間の差分を表わす第三の差分データ５２０ｃを生成する。
【０１５８】
これにより、配布すべきデータ量を削減できるとともに、有版データを更新するため差分データを適用する際に、処理装置にかかる負荷や、記憶装置に必要な作業領域の容量を小さくすることができる。
【０１５９】
実施の形態２．
実施の形態２について、図１９〜図２８を用いて説明する。
【０１６０】
図１９は、この実施の形態におけるシステムの構成例を示す図である。
ソフトウェア配布サーバ１０（配布装置１００）は、ソフトウェアを配布するためのサーバである。ソフトウェア配布サーバ１０は、一般的にはＷＥＢサーバで構成される。ソフトウェア配布サーバ１０は、ネットワーク２０であるインターネットや無線ネットワークからの要求を受け付ける。あるいは、ソフトウェア配布サーバ１０は、情報を一斉送信する放送サーバであってもよい。
端末装置３０は、一般的なＰＣやサーバあるいは携帯端末など配布されるソフトウェアが動作する装置である。
ソフトウェアの配布は、ネットワーク２０を使った配布以外にも物理的な郵送という手段で、ＤＶＤやＣＤ−Ｒを使って配送することもある。
【０１６１】
図２０は、この実施の形態におけるソフトウェア配布サーバ１０の構成例を示す図である。
ソフトウェア配布サーバは、対象とする端末のソフトウェアの複数のバージョンであるソフトウェア１１（有版データ）を保持する。対象とする端末は複数あっても良いが、対象機種ごとに管理する。また、対象機種の最新のソフトウェアバージョンがリリースされるたび最新版が追加となる。
【０１６２】
差分抽出部１２（差分生成部１１３）は、管理する２つのソフトウェア１１のバージョン間の差分を抽出する。差分抽出部１２は、一般的には複数のファイルを比較する。差分抽出部１２は、同じ部分とそうでない部分を見つける。差分抽出部１２は、同じ部分は旧版のどのアドレスから長さどれだけ分を新版のどのアドレスにコピーするということを示すＣＯＰＹコマンドと、旧版にないデータであって、新たにどこにどんなデータを追加するかを示すＤＡＴＡコマンドからなる差分情報を生成する。
【０１６３】
差分情報管理部１３（差分記憶部１１５、差分版記憶部１２５）は、ある版と別の版の差分を２つの版名と関係付けて保持する。差分情報管理部１３は、要求があれば該当する差分情報を提供する。該当する差分情報を保持していない場合には、差分情報管理部１３は、差分抽出部１２を利用して差分を生成してもかまわない。
【０１６４】
差分情報要求受付部１４は、クライアントからの要求に応じて差分情報を送る。
差分情報配布部１５は、差分を配布する。差分情報配布部１５は、一斉送信をすることができる。一斉送信は実質的には相手を決めて逐次送信していく方式でもかまわないし、マルチキャストいう技術を利用してネットワーク２００上で経路が同じ部分は共通のデータとして送信し、経路が分かれるところで別データで送信してもかまわない。このようにしてネットワークトラフィックを削減するように動作する。
【０１６５】
図２１は、この実施の形態における端末装置３０の構成例を示す図である。
差分受信部３１（差分取得部２２１）は、ソフトウェア配布サーバ１０からネットワーク２００を経由して一斉配信されたものを受信する。あるいは、差分受信部３１は、端末上のユーザからのリクエストや、設定された情報に従ったリクエストに応じてサーバから送られてくる差分情報を受信する。または、差分受信部３１は、郵送で送られてきた情報に関してはＣＤ−Ｒなどの外部デバイスからの情報を読み取ることによって受信する。
【０１６６】
差分受信部３１が受信した差分が、端末上のソフトウェアバージョンに応じたもの、すなわち端末上のソフトウェアバージョンに適用可能なものであれば、そのまま差分記憶部３２が記憶する。差分記憶部３２に古い差分データが残っている場合は、その差分データと今回受信した差分データを比較し、より新しいバージョンにアップすることが可能な版を残し、一方を削除する。
【０１６７】
差分受信部３１が受信した差分が、端末上のソフトウェアバージョンに応じたものでない、即ち端末上のソフトウェアに適用不可能なものであれば、差分合成部３３（適用判定部２４０、差分合成部２２４）が、差分記憶部３２が記憶している差分と合成可能かどうかを判定し、可能であれば差分を合成し、差分記憶部３２が記憶する。差分合成不可な場合は、端末上の差分ファイルと受信した差分ファイルの間の差分ファイルがあるはずで、これを差分受信部３１がサーバに要求し、取得し、再度、差分合成部３３が逐次差分合成を行い、現状のソフトウェアバージョンから最新の版へバージョンアップ可能な合成差分情報のみを差分記憶部３２が記憶する。
【０１６８】
ユーザの要望やあるいはシステムの設定に応じて差分を適用し、ソフトウェアのバージョンアップを行う場合には、差分適用部３４（有版データ更新部２１２）が、差分記憶部３２が記憶している差分を適用する。
【０１６９】
上記ソフトウェア配布サーバ１０および端末装置３０の動作の流れの例を説明する。
【０１７０】
図２２は、この実施の形態におけるソフトウェア配布サーバ１０の処理フロー図である。
ステップ４１で、ソフトウェア配布サーバ１０は、まず対象端末の最初のソフトウェアイメージを保存する。
ステップ４２で、ソフトウェア配布サーバ１０は、次の版のリリースを待ち、リリースされればステップ４３に移行する。
【０１７１】
ステップ４３で、ソフトウェア配布サーバ１０は、次の版のイメージを保存する。
ステップ４４で、差分抽出部１２は、差分を抽出する。この差分は一般にバイナリ差分である。その例としては新版と旧版をサーチし、同じ部分があれば同じであることを示し、位置がずれていてもＣＯＰＹとして旧版のある場所から新版のある場所へＣＯＰＹすれば良いことを示すＣＯＰＹコマンドと、新たなデータであることを示すＤＡＴＡコマンドからなる差分情報を抽出する。
【０１７２】
ステップ４５で、差分情報管理部１３は、抽出された差分情報を保存する。
ステップ４６で、差分情報配布部１５は、差分を配布する。配布にはブロードキャストやマルチキャストあるいは逐次送信でもかまわない。通常のネットワークを利用するだけでなくＤＶＤなどの媒体を使って郵送というのでもかまわない。
【０１７３】
ステップ４７で、ソフトウェア配布サーバ１０は、旧版を削除する。保存領域に余裕があれば旧版を削除せずにバージョンの管理を行っておくのでもかまわない。
【０１７４】
ステップ４８で、差分情報要求受付部１４は、端末側からの差分のダウンロード要求を待つ。端末に対しては差分情報を既にブロードキャストなどの手段で配布しているが、このタイミングで受信できなかった端末からは要求が来る可能性がある。要求がなければ、ステップ４９で、ソフトウェア配布サーバ１０は、次期リリース待ちである。ステップ４８と４９は同時に動作し、イベント待ちで、先におきたイベントの処理を行う。
【０１７５】
ステップ４８で、端末側から要求が来た場合、差分情報配布部１５は、保存してある差分を送信する。その際、要求に含まれた端末側のバージョンから最新のバージョンに上げることができる差分情報を送信する。この差分は複数の差分をまとめて送信するのでもかまわないし、端末側のフローで説明する差分合成と同じフローを利用して差分合成をして送信してもかまわないし、ステップ４７を実行せずに旧版を削除せずに残しているのであれば、要求に応じた差分を抽出して送信するのでもかまわない。
【０１７６】
差分送信が完了すると、ソフトウェア配布サーバ１０は、ステップ４８，４９のイベント待ちに移行する。
ステップ４８，４９で、次期リリースがなされた場合、ソフトウェア配布サーバ１０は、ステップ４３からの処理を繰り返す。
【０１７７】
図２３は、この実施の形態における端末装置３０の更新フロー図である。
ステップ５１で、端末装置３０は、差分情報の受信待ちをする。受信待ちは、端末自らが要求を出してダウンロードを待っている場合もあれば、一斉送信や放送を待っている場合もある。即ち、イベントを待っている場合もある。
ステップ５１で差分情報を受信したら、ステップ５２で、差分適用部３４は、適用可能かどうかの判断を行う。即ち、その差分情報がどのバージョンを対象にているのかの情報と自端末のバージョンとを比較し、同じものであれば適用可能であると判断できる。適用可能と判断されれば、端末装置３０は、実際に端末に適用するかどうかをユーザに問い合わせて、ステップ５６でユーザの判断を入力する。
【０１７８】
適用不可能、即ち自端末のバージョンと差分情報の対象とするバージョンが違う場合には、ステップ５３で、差分合成部３３は、差分合成可能かどうかを判断する。合成が不可能、即ち、自端末に保存している差分でバージョンアップ可能なバージョンと、差分情報が対象とする差分が異なる場合は、ステップ５４で、端末装置３０は、その間を生める差分を要求する。サーバ側からはその差分を埋める情報が一つの差分情報で来る場合もあるし、複数の差分情報で来る場合もある。複数の差分情報で来た場合には、差分受信処理直後に差分合成部が合成処理を行い、ステップ５２へ移行する。
【０１７９】
ステップ５３で、差分合成部３３が差分合成可能と判断すると、ステップ５５で、差分合成部３３は、差分合成を行なう。ステップ５６で、端末装置は、実際に適用するかどうかをユーザに問い合わせ適用判断を行う。適用しないのであれば、ステップ５８で、差分記憶部は、その差分情報を保存しておく。適用するのであれば、ステップ５７で、差分適用部３４が適用して、差分情報を消す。その後、元の差分情報受信待ちステップ５１に移行する。
【０１８０】
図２４は、この実施の形態における差分情報管理部１３が差分情報を管理する管理の例を示す図である。
この情報は、図２２のステップ４５での保存時や、端末側らの要求に応じてステップ５０で差分を送信する際に利用する。
差分情報管理部１３は、複数の差分間の情報を２次元のテーブルで持ち、該当する場所にはそれぞれに対応するファイル名を入れておく。バージョンダウンのことも考えると、逆の差分もおいてもかまわない。
【０１８１】
また、生成していない差分は空欄にしておき、サーバの空き時間に生成しても良いし、全く生成しなくても良い。
また、ステップ４７で旧版を毎回消す場合には、隣の版との差分しかなく、他の差分は動的に合成処理するか、端末側で合成する。
【０１８２】
図２５は、この実施の形態におけるソフトウェアイメージと差分との関係の例を示す図である。
この例は、「Ｖｅｒ１．０」「Ｖｅｒ，２．０」「Ｖｅｒ３．０」の３つの版がある場合を示している。
「Ｖｅｒ１．０」と「Ｖｅｒ２．０」の比較で、全く同じ場所に同じコードがある部分と、ずれてコードがある部分をＣＯＰＹコマンド（複写コマンド）で表現する。一方全く違うデータがある部分をＤＡＴＡコマンド（追加コマンド）で表現する。
新版のアドレス順にコマンドを記載することにより、消えてしまうデータに関しては気にする必要ないので、ＤＥＬＥＴＥといったコマンド（削除コマンド）はなくてよい。
【０１８３】
ＣＯＰＹコマンドには、元のアドレス情報（ソース５２４）と長さ（サイズ５２３）の情報が必要である。ＤＡＴＡコマンドには、長さ（サイズ５２３）の情報と書き換えるべきデータ（ソース５２４）の情報が必要である。この処理には、順に新版と旧版を比較しながら探すことによる例えばＵｎｉｘ（登録商標）環境にあるＤＩＦＦのアルゴリズムのような公知のアルゴリズムを使用してもよい。
【０１８４】
図２６は、この実施の形態におけるソフトウェアイメージと差分合成との関係の例を示す図である。
「Ｖｅｒ２．０」から「Ｖｅｒ３．０」への差分情報のうち、ａの部分のＣＯＰＹコマンドは実際にはまだ存在しない「Ｖｅｒ２．０」からのＣＯＰＹコマンドである。この領域に対する旧差分情報を見ると、一部はＣＯＰＹコマンドで、一部はＤＡＴＡコマンドである。こういう場合は、ａの部分はＣＯＰＹコマンドで「Ｖｅｒ１．０」からコピーする部分と、ＤＡＴＡコマンドとに分けて合成する。
【０１８５】
次のｂの部分は、「Ｖｅｒ１．０」からすべてコピーすれば良いが、コピー元が分かれている。こういう場合は、２つのＣＯＰＹコマンドに分ける。
次のＤＡＴＡコマンド部分は、そもそも「Ｖｅｒ１．０」上にもないデータであるため、ＤＡＴＡコマンドをそのまま使う。
最後のｃの部分は、ＣＯＰＹコマンドとＤＡＴＡコマンドとに分ける。
このようにして、差分情報を合成する。
【０１８６】
図２７は、この実施の形態における差分合成の処理フロー図である。
ステップ９１で、差分合成部３３は、新差分と旧差分とを読みこむ。差分合成部３３は、新差分の方のアドレスの低い方か高い方かどちらか一方から解析を行っていく。
ステップ９２で、差分合成部３３は、コマンドを取り出す。最後であれば、終了する。
ステップ９３で、差分合成部３３は、そのコマンドがＤＡＴＡコマンドかどうか判定する。ＤＡＴＡコマンドであれば、差分合成部３３は、そのままＤＡＴＡコマンドを出力し、再びステップ９２で次のコマンドを抽出する。
【０１８７】
ステップ９３で、ＤＡＴＡコマンドでなかった場合は、ＣＯＰＹコマンドである。ＣＯＰＹコマンドの場合、差分合成部３３は、ステップ９４で、そのＣＯＰＹコマンドの範囲にある旧差分情報を抽出する。ステップ９５で、差分合成部３３は、その抽出された差分情報を順次読みこむ。
【０１８８】
ステップ９６で、差分合成部３３は、抽出された差分情報がＤＡＴＡコマンドかどうかを判断する。ＤＡＴＡコマンドであれば、その部分はＶｅｒ１．０でも存在しなかった部分であるため、たとえ「Ｖｅｒ２．０」から「３．０」へのコマンドがＣＯＰＹであってもＣＯＰＹできないことを示している。ステップ９７で、差分合成部３３は、ＤＡＴＡコマンドを出力し、再度ステップ９５へ移行する。
なお、ステップ９５で次のコマンドがなかった場合、ステップ９２で、次の新差分のコマンドの処理に移行する。
【０１８９】
ステップ９６で、ＤＡＴＡコマンドでなかった場合、ステップ９９で、差分合成部３３は、該当部分のＣＯＰＹコマンドとして出力し、ステップ９５へ再び移行する。
【０１９０】
図２８は、この実施の形態における差分合成においてコピーする範囲を抽出するための情報の例を示す図である。
差分合成部３３は、各コマンドごとに新版となるアドレス情報とサイズ情報をペアにして保持しておく。これにより、アドレス情報からその部分にどのコマンドがあるかを２分木探索で探すことができる。
【０１９１】
こうして合成して作成した差分情報は、そのまま順にコマンドの指示どおり実行すれば、プログラム領域を書き換えることができる。
【０１９２】
以上のようにして、差分を合成することができ、端末上に保持する差分量を一定に保ちつつ、サーバ上でも要求の少ない差分データを保持することなく、端末側からの様々な更新要求に答えることができる。
【０１９３】
この実施の形態におけるソフトウェア配布システムは、ソフトウェア配布のためのソフトウェア配布サーバ１０（配布装置１００）と、配布されたソフトウェアをインストールし実行する端末装置３０とからなる。ソフトウェア配布システムは、出荷時のソフトウェアのバージョンから逐次複数回バージョンアップをする際には、ネットワークを経由して配布するソフトウェア量を減らすために差分情報を送る。
ソフトウェア配布サーバ１０は、サーバ上には複数のバージョン間の差分抽出部１２（差分生成部１１３）と、差分情報管理部１３（差分記憶部１１５、差分版記憶部１２５）と、端末へ差分を配布する差分情報配布部１５（差分配布部１３４）とを有する。
端末装置３０は、配布された差分を記憶する差分記憶部３２と、複数の差分が送られた場合には旧差分と合成する差分合成部３３と、差分を適用する差分適用部３４（有版データ更新部２１２）とを有する。
【０１９４】
複数のバージョン間の差分抽出部１２は、ファイル単位にそのテキストの差分またはバイナリレベルの差分を抽出し、旧版に適用すれば新版を端末上で作成できる形式にする。
【０１９５】
差分情報は、旧版からの新版と同一部分をどこからどこまでをコピーするかを示す情報とどこに保存するかを示す情報とからなるＣＯＰＹというコマンドと、新版と旧版で異なる部分をどこからどれだけをどういう情報に変更するかを示すＤＡＴＡコマンドとからなる。
【０１９６】
差分情報管理部１３は、その差分を作成した２つのバージョンの番号（差分版コード）と差分（差分データ）とを１組として複数個を管理し、あるバージョンと別のバージョンの差分を欲しいという要求があればそれを供給できる。
【０１９７】
端末へ差分を配布する差分情報配布部１５は、新しいバージョンができるたびにその前のバージョンとの差分をブロードキャストや、何らかの媒体に記憶し郵送による配布などを行う。
【０１９８】
端末上で配布された差分を記憶する差分記憶部３２は、フラッシュメモリやハードディスクドライブなど電源が切れても差分を記憶しつづけることができる。
【０１９９】
差分合成部３３は、端末上に記憶している差分情報と配布された差分情報から端末上のバージョンから最新のバージョンにバージョンアップするための差分情報を合成する。
【０２００】
差分合成部３３は、古い差分情報内のコマンド列を探索し、新しい差分情報でそのままでは使えない部分を抽出し、新たなコマンド列に置き換える。
【０２０１】
差分合成部３３は、前記コマンド列の探索のために、古い差分情報には予めアドレスを指定すればその部分の対象差分コマンドがＣＯＰＹであるのかＤＡＴＡであるのかを高速に探索するために木構造のインデックスやテーブルを保持する。
【０２０２】
差分適用部３４は、差分情報のコマンドに従って、ＣＯＰＹすべき情報はＣＯＰＹをし、新たに付加するデータは付加し、プログラム領域を書き換える。
【０２０３】
これにより、プログラムイメージそのものやファイルそのものの差分を抽出してその差分を送信してできるだけ転送量を少なくして更新ができるとともに、多くのバージョンアップがあり、端末側では受信した差分をいつ適用するか自由に選択できる場合であっても、いざ適用を試みる際のユーザビリティが良く、更新時間を短することができる。
【符号の説明】
【０２０４】
１０  ソフトウェア配布サーバ、１１  ソフトウェア、１２  差分抽出部、１３  差分情報管理部、１４  差分情報要求受付部、１５  差分情報配布部、２０  ネットワーク、３０  端末装置、３１  差分受信部、３２  差分記憶部、３３  差分合成部、３４  差分適用部、１００  配布装置、１１１  旧版データ記憶部、１１２  新版データ取得部、１１３  差分生成部、１１４  旧版データ更新部、１１５，２２２  差分記憶部、１２１  旧版コード記憶部、１２４  旧版コード更新部、１２５，２２３  差分版記憶部、１３１  要求取得部、１３２  配布判定部、１３３，２２４  差分合成部、１３４  差分配布部、２００  端末装置、２１１  有版データ記憶部、２１２  有版データ更新部、２１３  現版コード記憶部、２２１  差分取得部、２３１  更新版取得部、２４０  適用判定部、２４１  単独適用判定部、２４２  合成適用判定部、２４３  差分要求部、５１１  差分コード、５１２  適用前コード、５１３  適用後コード、５２０  差分データ、５２１  コマンド、５２２  命令、５２３  サイズ、５２４  ソース、５３０  有版データ、５３１〜５４７  部分、８００  配布システム、８１０  開発装置、９０１  表示装置、９０２  キーボード、９０３  マウス、９０４  ＦＤＤ、９０５  ＣＤＤ、９０６  プリンタ装置、９０７  スキャナ装置、９１０  システムユニット、９１１  ＣＰＵ、９１２  バス、９１３  ＲＯＭ、９１４  ＲＡＭ、９１５  通信装置、９２０  ＨＤＤ、９２１  ＯＳ、９２２  ウィンドウシステム、９２３  プログラム群、９２４  ファイル群、９３１  電話器、９３２  ファクシミリ機、９４０  インターネット、９４１  ゲートウェイ、９４２  ＬＡＮ。
【図１】
2011113123.tif 000003
【図２】
2011113123.tif 000004
【図３】
2011113123.tif 000005
【図４】
2011113123.tif 000006
【図５】
2011113123.tif 000007
【図６】
2011113123.tif 000008
【図７】
2011113123.tif 000009
【図８】
2011113123.tif 000010
【図９】
2011113123.tif 000011
【図１０】
2011113123.tif 000012
【図１１】
2011113123.tif 000013
【図１２】
2011113123.tif 000014
【図１３】
2011113123.tif 000015
【図１４】
2011113123.tif 000016
【図１５】
2011113123.tif 000017
【図１６】
2011113123.tif 000018
【図１７】
2011113123.tif 000019
【図１８】
2011113123.tif 000020
【図１９】
2011113123.tif 000021
【図２０】
2011113123.tif 000022
【図２１】
2011113123.tif 000023
【図２２】
2011113123.tif 000024
【図２３】
2011113123.tif 000025
【図２４】
2011113123.tif 000026
【図２５】
2011113123.tif 000027
【図２６】
2011113123.tif 000028
【図２７】
2011113123.tif 000029
【図２８】
2011113123.tif 000030