(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022152022
(43)【公開日】2022-10-12
(54)【発明の名称】サーバ装置、クライアント装置、サーバプログラム、及びクライアントプログラム
(51)【国際特許分類】
G06F 40/166 20200101AFI20221004BHJP
G06F 13/00 20060101ALI20221004BHJP
【FI】
G06F40/166
G06F13/00 520D
【審査請求】未請求
【請求項の数】15
【出願形態】OL
(21)【出願番号】P 2021054626
(22)【出願日】2021-03-29
(71)【出願人】
【識別番号】000005267
【氏名又は名称】ブラザー工業株式会社
(74)【代理人】
【識別番号】100104178
【弁理士】
【氏名又は名称】山本 尚
(74)【代理人】
【識別番号】100152515
【弁理士】
【氏名又は名称】稲山 朋宏
(72)【発明者】
【氏名】工藤 康博
【テーマコード(参考)】
5B084
5B109
【Fターム(参考)】
5B084AA01
5B084AA11
5B084AB01
5B084AB18
5B084AB31
5B084BA09
5B084BB17
5B084BB19
5B084CA09
5B084CD10
5B084CF12
5B084DB01
5B084DB08
5B084DC02
5B084DC03
5B109QB11
5B109QB18
5B109VC03
(57)【要約】
【課題】共通のドキュメントを複数のユーザが効率よく編集することが可能なサーバ装置、クライアント装置、サーバプログラム、及びクライアントプログラムを提供する。
【解決手段】サーバ装置は、クライアント装置が編集対象とするドキュメントのバージョンと、サーバドキュメントのバージョンとが相違する場合(S15:NO)、クライアント装置が送信した編集指示に含まれるコマンド及びパスと、履歴レコードに含まれるコマンド及びパスとに基づき、サーバドキュメントの編集対象を新たに決定する(S21~S39)。サーバ装置は、編集指示に含まれるバージョンのドキュメントが編集指示に基づいて編集された後、編集後のドキュメントが履歴情報に基づいて編集された場合の編集結果と一致するように、サーバドキュメントの編集対象を決定する。
【選択図】
図8
【特許請求の範囲】
【請求項1】
クライアント装置との通信が可能なサーバ装置であって、
前記サーバ装置が編集可能なドキュメントであるサーバドキュメントを編集するための編集指示であって、編集方法、編集対象、及び前記ドキュメントのバージョンを含む前記編集指示を、前記クライアント装置から受信する受信手段と、
前記受信手段により受信した前記編集指示に含まれる前記編集対象及び前記編集方法に応じて前記サーバドキュメントを編集する編集手段と、
前記編集手段により編集した前記サーバドキュメントの前記バージョンを更新する更新手段と、
前記受信手段により受信した前記編集指示に含まれる前記編集対象及び前記編集方法を、履歴情報として記憶する記憶手段と、
を備え、
前記編集手段は、
前記受信手段により前記クライアント装置から受信した第1編集指示に含まれる前記バージョンと、前記サーバドキュメントの前記バージョンが何れも第1バージョンと判定した場合、前記第1バージョンの前記サーバドキュメントのうち前記第1編集指示に含まれる第1編集対象を、前記第1編集指示に含まれる第1編集方法で編集する第1編集手段と、
前記受信手段により前記クライアント装置から受信した前記第1編集指示に含まれる前記バージョンが前記第1バージョンであり、前記サーバドキュメントの前記バージョンが、前記第1バージョンと異なる第2バージョンであると判定した場合、前記第1編集方法及び前記第1編集対象と、前記履歴情報として記憶された前記編集対象である第2編集対象と、前記履歴情報として記憶された前記編集方法である第2編集方法とに基づいて、新たな前記編集対象を決定し、前記第2バージョンの前記サーバドキュメントのうち決定した新たな前記編集対象を、前記第1編集方法で編集する第2編集手段と
を備え、
前記第2編集手段は、
前記第1編集指示に含まれる前記第1バージョンの前記ドキュメントである第1ドキュメントの前記第1編集対象が前記第1編集方法で編集された後、編集後の前記第1ドキュメントの前記第2編集対象が前記第2編集方法で編集された場合の編集結果と一致するように、前記第2バージョンの前記サーバドキュメントである第2ドキュメントの前記編集対象を決定する
ことを特徴とするサーバ装置。
【請求項2】
前記第2編集手段は、
前記第1ドキュメントの前記第1編集対象が前記第1編集方法で編集された後、編集後の前記第1ドキュメントの前記第2編集対象が前記第2編集方法で編集された場合と、前記第2ドキュメントの前記第1編集対象が前記第1編集方法で編集された場合とで、編集結果が一致する場合、前記第2ドキュメントの前記第1編集対象を前記第1編集方法で編集する
ことを特徴とする請求項1に記載のサーバ装置。
【請求項3】
前記第2編集手段は、
前記第1ドキュメントの前記第2編集対象が前記第2編集方法で編集されることにより、前記第1編集方法で編集される前記第1ドキュメントの前記編集対象が前記第1編集対象から変更される場合、前記第2ドキュメントのうち変更後の前記編集対象を、前記第1編集方法で編集する
ことを特徴とする請求項2に記載のサーバ装置。
【請求項4】
前記第2編集手段は、
前記第1編集方法の優先度が、前記第2編集方法の優先度よりも高い場合、前記第2ドキュメントの前記第1編集対象を前記第1編集方法で編集する
ことを特徴とする請求項3に記載のサーバ装置。
【請求項5】
前記編集手段は、
前記第1編集方法と前記第2編集方法とが同一、且つ、前記第1編集対象と前記第2編集対象とが同一の場合、前記第2ドキュメントを編集しない第1編集禁止手段を更に備えたことを特徴とする請求項1から4の何れかに記載のサーバ装置。
【請求項6】
前記編集手段は、
前記第1編集対象と前記第2編集対象とのうち一方が他方に含まれる場合、前記第2ドキュメントを編集しない第2編集禁止手段を備えたことを特徴とする請求項1から5の何れかに記載のサーバ装置。
【請求項7】
前記更新手段は、
前記バージョンに1加算することで前記バージョンを更新し、
前記第1バージョンは、前記第2バージョンよりも大きいことを特徴とする請求項1から6の何れかに記載のサーバ装置。
【請求項8】
サーバ装置との通信が可能なクライアント装置であって、
前記クライアント装置が編集可能なドキュメントであるクライアントドキュメントを編集した場合、前記サーバ装置が編集可能なドキュメントであるサーバドキュメントを編集するための編集指示であって、編集方法、編集対象、及び前記クライアントドキュメントのバージョンを含む前記編集指示を、前記サーバ装置に送信する送信手段と、
前記サーバ装置から、前記クライアントドキュメントを編集するための変更通知であって、編集前のドキュメントのバージョンである更新前バージョンと、編集後のドキュメントのバージョンである更新後バージョンとを示すバージョン更新情報、前記編集方法、及び前記編集対象を含む前記変更通知を受信する受信手段と、
前記受信手段により受信した前記変更通知に含まれる前記編集対象及び前記編集方法に応じて前記クライアントドキュメントを編集する編集手段と、
前記編集手段により編集した前記クライアントドキュメントの前記バージョンを更新する更新手段と、
前記送信手段により送信した前記編集指示に含まれる前記バージョン、前記編集対象、及び前記編集方法、及び、前記受信手段により受信した前記変更通知に含まれる前記バージョン更新情報、前記編集対象、及び前記編集方法を、履歴情報として記憶する記憶手段と、
を備え、
前記編集手段は、
前記受信手段により前記サーバ装置から受信した前記変更通知に含まれる前記バージョン更新情報のうち前記更新前バージョンと、前記クライアントドキュメントの前記バージョンとが一致すると判定した場合、前記クライアントドキュメントのうち前記変更通知に含まれる第1編集対象を、前記変更通知に含まれる第1編集方法で編集する第1編集手段と、
前記受信手段により前記サーバ装置から受信した前記変更通知に含まれる前記バージョン更新情報のうち前記更新前バージョンと、前記クライアントドキュメントの前記バージョンとが相違すると判定した場合、前記第1編集方法及び前記第1編集対象と、前記履歴情報として記憶された前記編集対象である第2編集対象と、前記履歴情報として記憶された前記編集方法である第2編集方法とに基づいて、新たな前記編集対象を決定し、前記クライアントドキュメントのうち決定した新たな前記編集対象を、前記第1編集方法で編集する第2編集手段と
を備え、
前記第2編集手段は、
前記前記第2編集対象が前記第2編集方法により編集される前の前記ドキュメントである第1ドキュメントの前記第1編集対象が前記第1編集方法で編集された後、編集後の前記第1ドキュメントの前記第2編集対象が前記第2編集方法で編集された場合の編集結果と一致するように、前記第2編集対象が前記第2編集方法により編集された後の前記クライアントドキュメントである第2ドキュメントの前記編集対象を決定する
ことを特徴とするクライアント装置。
【請求項9】
前記第2編集手段は、
前記第1ドキュメントの前記第1編集対象が前記第1編集方法で編集された後、編集後の前記第1ドキュメントの前記第2編集対象が前記第2編集方法で編集された場合と、前記第2ドキュメントの前記第1編集対象が前記第1編集方法で編集された場合とで、編集結果が一致する場合、前記第2ドキュメントの前記第1編集対象を前記第1編集方法で編集する
ことを特徴とする請求項8に記載のクライアント装置。
【請求項10】
前記第1ドキュメントの前記第1編集対象が前記第1編集方法で編集されることにより、編集後のドキュメントが前記第2編集方法で編集される場合の前記編集対象が前記第2編集対象から変更される場合、前記編集後のドキュメントのうち変更後の前記編集対象を、前記第2編集方法で編集する第3編集手段を更に備えたことを特徴とする請求項9に記載のクライアント装置。
【請求項11】
前記第2編集手段は、
前記第1編集方法の優先度が、前記第2編集方法の優先度よりも高い場合、前記第2ドキュメントの前記第1編集対象を前記第1編集方法で編集する
ことを特徴とする請求項10に記載のクライアント装置。
【請求項12】
前記編集手段は、
前記第1編集方法と前記第2編集方法とが同一、且つ、前記第1編集対象と前記第2編集対象とが同一の場合、前記第2ドキュメントを編集しない第1編集禁止手段を更に備えたことを特徴とする請求項8から11の何れかに記載のクライアント装置。
【請求項13】
前記編集手段は、
前記第1編集対象と前記第2編集対象とのうち一方が他方に含まれる場合、前記第2ドキュメントを前記第1ドキュメントに戻すUNDO手段を備えたことを特徴とする請求項8から12の何れかに記載のクライアント装置。
【請求項14】
クライアント装置との通信が可能なサーバ装置のコンピュータに、
前記サーバ装置が編集可能なドキュメントであるサーバドキュメントを編集するための編集指示であって、編集方法、編集対象、及び前記ドキュメントのバージョンを含む前記編集指示を、前記クライアント装置から受信する受信ステップと、
前記受信ステップにより受信した前記編集指示に含まれる前記編集対象及び前記編集方法に応じて前記サーバドキュメントを編集する編集ステップと、
前記編集ステップにより編集した前記サーバドキュメントの前記バージョンを更新する更新ステップと、
前記受信ステップにより受信した前記編集指示に含まれる前記編集対象及び前記編集方法を、履歴情報として記憶する記憶ステップと、
を実行させるためのサーバプログラムであって、
前記編集ステップは、
前記受信ステップにより前記クライアント装置から受信した第1編集指示に含まれる前記バージョンと、前記サーバドキュメントの前記バージョンが何れも第1バージョンと判定した場合、前記第1バージョンの前記サーバドキュメントのうち前記第1編集指示に含まれる第1編集対象を、前記第1編集指示に含まれる第1編集方法で編集する第1編集ステップと、
前記受信ステップにより前記クライアント装置から受信した前記第1編集指示に含まれる前記バージョンが前記第1バージョンであり、前記サーバドキュメントの前記バージョンが、前記第1バージョンと異なる第2バージョンであると判定した場合、前記第1編集方法及び前記第1編集対象と、前記履歴情報として記憶された前記編集対象である第2編集対象と、前記履歴情報として記憶された前記編集方法である第2編集方法とに基づいて、新たな前記編集対象を決定し、前記第2バージョンの前記サーバドキュメントのうち決定した新たな前記編集対象を、前記第1編集方法で編集する第2編集ステップと
を備え、
前記第2編集ステップは、
前記第1編集指示に含まれる前記第1バージョンの前記ドキュメントである第1ドキュメントの前記第1編集対象が前記第1編集方法で編集された後、編集後の前記第1ドキュメントの前記第2編集対象が前記第2編集方法で編集された場合の編集結果と一致するように、前記第2バージョンの前記サーバドキュメントである第2ドキュメントの前記編集対象を決定する
ことを特徴とするサーバプログラム。
【請求項15】
サーバ装置との通信が可能なクライアント装置のコンピュータに
前記クライアント装置が編集可能なドキュメントであるクライアントドキュメントを編集した場合、前記サーバ装置が編集可能なドキュメントであるサーバドキュメントを編集するための編集指示であって、編集方法、編集対象、及び前記クライアントドキュメントのバージョンを含む前記編集指示を、前記サーバ装置に送信する送信ステップと、
前記サーバ装置から、前記クライアントドキュメントを編集するための変更通知であって、編集前のドキュメントのバージョンである更新前バージョンと、編集後のドキュメントのバージョンである更新後バージョンとを示すバージョン更新情報、前記編集方法、及び前記編集対象を含む前記変更通知を受信する受信ステップと、
前記受信ステップにより受信した前記変更通知に含まれる前記編集対象及び前記編集方法に応じて前記クライアントドキュメントを編集する編集ステップと、
前記編集ステップにより編集した前記クライアントドキュメントの前記バージョンを更新する更新ステップと、
前記送信ステップにより送信した前記編集指示に含まれる前記バージョン、前記編集対象、及び前記編集方法、及び、前記受信ステップにより受信した前記変更通知に含まれる前記バージョン更新情報、前記編集対象、及び前記編集方法を、履歴情報として記憶する記憶ステップと、
を実行させるためのクライアントプログラムであって、
前記編集ステップは、
前記受信ステップにより前記サーバ装置から受信した前記変更通知に含まれる前記バージョン更新情報のうち前記更新前バージョンと、前記クライアントドキュメントの前記バージョンとが一致すると判定した場合、前記クライアントドキュメントのうち前記変更通知に含まれる第1編集対象を、前記変更通知に含まれる第1編集方法で編集する第1編集ステップと、
前記受信ステップにより前記サーバ装置から受信した前記変更通知に含まれる前記バージョン更新情報のうち前記更新前バージョンと、前記クライアントドキュメントの前記バージョンとが相違すると判定した場合、前記第1編集方法及び前記第1編集対象と、前記履歴情報として記憶された前記編集対象である第2編集対象と、前記履歴情報として記憶された前記編集方法である第2編集方法とに基づいて、新たな前記編集対象を決定し、前記クライアントドキュメントのうち決定した新たな前記編集対象を、前記第1編集方法で編集する第2編集ステップと
を備え、
前記第2編集ステップは、
前記前記第2編集対象が前記第2編集方法により編集される前の前記ドキュメントである第1ドキュメントの前記第1編集対象が前記第1編集方法で編集された後、編集後の前記第1ドキュメントの前記第2編集対象が前記第2編集方法で編集された場合の編集結果と一致するように、前記第2編集対象が前記第2編集方法により編集された後の前記クライアントドキュメントである第2ドキュメントの前記編集対象を決定する
ことを特徴とするクライアントプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、サーバ装置、クライアント装置、サーバプログラム、及びクライアントプログラムに関する。
【背景技術】
【0002】
通信システムにおいて、共通のドキュメントを複数のユーザにより共同で編集する為の技術が各種提案されている。特許文献1は、ワークホルダに記憶されたドキュメントに対して複数のユーザが編集作業を行い競合が生じた場合の解決方法を開示する。この解決方法では、何れかのユーザに対し、競合状態を解決する為の方法を問い合わせるメッセージが通知される。メッセージが通知されたユーザは、競合する複数のドキュメントの何れを有効とするかを選択する。この場合、選択されたドキュメントが保存され、選択されないドキュメントが削除されることにより、競合状態は解消される。
【先行技術文献】
【特許文献】
【0003】
【発明の概要】
【発明が解決しようとする課題】
【0004】
競合が生じた場合でも、複数のユーザの各々の編集作業の方法によっては、ドキュメントを複数の編集方法で同時に編集できる場合もある。しかし上記の方法では、複数のユーザにより編集されたドキュメントの何れかのみ保存されて残りは削除されるので、全てのユーザが各自の編集方法でドキュメントを編集し終えるまでに時間を要するという問題点がある。
【0005】
本発明の目的は、共通のドキュメントを複数のユーザが効率よく編集することが可能なサーバ装置、クライアント装置、サーバプログラム、及びクライアントプログラムを提供することである。
【課題を解決するための手段】
【0006】
本発明の第1態様に係るサーバ装置は、クライアント装置との通信が可能なサーバ装置であって、前記サーバ装置が編集可能なドキュメントであるサーバドキュメントを編集するための編集指示であって、編集方法、編集対象、及び前記ドキュメントのバージョンを含む前記編集指示を、前記クライアント装置から受信する受信手段と、前記受信手段により受信した前記編集指示に含まれる前記編集対象及び前記編集方法に応じて前記サーバドキュメントを編集する編集手段と、前記編集手段により編集した前記サーバドキュメントの前記バージョンを更新する更新手段と、前記受信手段により受信した前記編集指示に含まれる前記編集対象及び前記編集方法を、履歴情報として記憶する記憶手段と、を備え、前記編集手段は、前記受信手段により前記クライアント装置から受信した第1編集指示に含まれる前記バージョンと、前記サーバドキュメントの前記バージョンが何れも第1バージョンと判定した場合、前記第1バージョンの前記サーバドキュメントのうち前記第1編集指示に含まれる第1編集対象を、前記第1編集指示に含まれる第1編集方法で編集する第1編集手段と、前記受信手段により前記クライアント装置から受信した前記第1編集指示に含まれる前記バージョンが前記第1バージョンであり、前記サーバドキュメントの前記バージョンが、前記第1バージョンと異なる第2バージョンであると判定した場合、前記第1編集方法及び前記第1編集対象と、前記履歴情報として記憶された前記編集対象である第2編集対象と、前記履歴情報として記憶された前記編集方法である第2編集方法とに基づいて、新たな前記編集対象を決定し、前記第2バージョンの前記サーバドキュメントのうち決定した新たな前記編集対象を、前記第1編集方法で編集する第2編集手段とを備え、前記第2編集手段は、前記第1編集指示に含まれる前記第1バージョンの前記ドキュメントである第1ドキュメントの前記第1編集対象が前記第1編集方法で編集された後、編集後の前記第1ドキュメントの前記第2編集対象が前記第2編集方法で編集された場合の編集結果と一致するように、前記第2バージョンの前記サーバドキュメントである第2ドキュメントの前記編集対象を決定することを特徴とする。
【0007】
第1態様によれば、サーバ装置は、クライアント装置が編集対象とするドキュメントのバージョン(第1バージョン)と、サーバドキュメントのバージョン(第2バージョン)とが相違する場合、クライアント装置による編集指示における第1編集方法及び第1編集対象と、履歴情報として記憶された第2編集方法及び第2編集対象とに基づき、第2バージョンのサーバドキュメントの編集対象を決定する。サーバ装置は、第1ドキュメントの第1編集対象が第1編集方法で編集された後、編集後の第1ドキュメントの第2編集対象が第2編集方法で編集された場合の編集結果と一致するように、編集対象を決定する。このためクライアント装置は、他のクライアントとの間で共通のドキュメントを効率よく編集できる。
【0008】
本発明の第2態様に係るクライアント装置は、サーバ装置との通信が可能なクライアント装置であって、前記クライアント装置が編集可能なドキュメントであるクライアントドキュメントを編集した場合、前記サーバ装置が編集可能なドキュメントであるサーバドキュメントを編集するための編集指示であって、編集方法、編集対象、及び前記クライアントドキュメントのバージョンを含む前記編集指示を、前記サーバ装置に送信する送信手段と、前記サーバ装置から、前記クライアントドキュメントを編集するための変更通知であって、編集前のドキュメントのバージョンである更新前バージョンと、編集後のドキュメントのバージョンである更新後バージョンとを示すバージョン更新情報、前記編集方法、及び前記編集対象を含む前記変更通知を受信する受信手段と、前記受信手段により受信した前記変更通知に含まれる前記編集対象及び前記編集方法に応じて前記クライアントドキュメントを編集する編集手段と、前記編集手段により編集した前記クライアントドキュメントの前記バージョンを更新する更新手段と、前記送信手段により送信した前記編集指示に含まれる前記バージョン、前記編集対象、及び前記編集方法、及び、前記受信手段により受信した前記変更通知に含まれる前記バージョン更新情報、前記編集対象、及び前記編集方法を、履歴情報として記憶する記憶手段と、を備え、前記編集手段は、前記受信手段により前記サーバ装置から受信した前記変更通知に含まれる前記バージョン更新情報のうち前記更新前バージョンと、前記クライアントドキュメントの前記バージョンとが一致すると判定した場合、前記クライアントドキュメントのうち前記変更通知に含まれる第1編集対象を、前記変更通知に含まれる第1編集方法で編集する第1編集手段と、前記受信手段により前記サーバ装置から受信した前記変更通知に含まれる前記バージョン更新情報のうち前記更新前バージョンと、前記クライアントドキュメントの前記バージョンとが相違すると判定した場合、前記第1編集方法及び前記第1編集対象と、前記履歴情報として記憶された前記編集対象である第2編集対象と、前記履歴情報として記憶された前記編集方法である第2編集方法とに基づいて、新たな前記編集対象を決定し、前記クライアントドキュメントのうち決定した新たな前記編集対象を、前記第1編集方法で編集する第2編集手段とを備え、前記第2編集手段は、前記前記第2編集対象が前記第2編集方法により編集される前の前記ドキュメントである第1ドキュメントの前記第1編集対象が前記第1編集方法で編集された後、編集後の前記第1ドキュメントの前記第2編集対象が前記第2編集方法で編集された場合の編集結果と一致するように、前記第2編集対象が前記第2編集方法により編集された後の前記クライアントドキュメントである第2ドキュメントの前記編集対象を決定することを特徴とする。
【0009】
第2態様によれば、クライアント装置は、サーバ装置が変更通知により通知したバージョン更新情報の更新前バージョンと、クライアント装置に記憶されたクライアントドキュメントのバージョンとが一致しない場合、変更通知における第1編集方法及び第1編集対象と、履歴情報として記憶された第2編集方法及び第2編集対象とに基づき、第2ドキュメントの編集対象を決定する。クライアント装置は、第1ドキュメントの第1編集対象が第1編集方法で編集された後、編集後の第1ドキュメントの第2編集対象が第2編集方法で編集された場合の編集結果と一致するように、第2ドキュメントの編集対象を決定するので、編集指示に基づくクライアントドキュメントの編集タイミングと、変更通知によるクライアントドキュメントの編集タイミングの関係に関わらず、クライアントドキュメントを適切に編集できる。
【0010】
本発明の第3態様に係るサーバプログラムは、クライアント装置との通信が可能なサーバ装置のコンピュータに、前記サーバ装置が編集可能なドキュメントであるサーバドキュメントを編集するための編集指示であって、編集方法、編集対象、及び前記ドキュメントのバージョンを含む前記編集指示を、前記クライアント装置から受信する受信ステップと、前記受信ステップにより受信した前記編集指示に含まれる前記編集対象及び前記編集方法に応じて前記サーバドキュメントを編集する編集ステップと、前記編集ステップにより編集した前記サーバドキュメントの前記バージョンを更新する更新ステップと、前記受信ステップにより受信した前記編集指示に含まれる前記編集対象及び前記編集方法を、履歴情報として記憶する記憶ステップと、を実行させるためのサーバプログラムであって、前記編集ステップは、前記受信ステップにより前記クライアント装置から受信した第1編集指示に含まれる前記バージョンと、前記サーバドキュメントの前記バージョンが何れも第1バージョンと判定した場合、前記第1バージョンの前記サーバドキュメントのうち前記第1編集指示に含まれる第1編集対象を、前記第1編集指示に含まれる第1編集方法で編集する第1編集ステップと、前記受信ステップにより前記クライアント装置から受信した前記第1編集指示に含まれる前記バージョンが前記第1バージョンであり、前記サーバドキュメントの前記バージョンが、前記第1バージョンと異なる第2バージョンであると判定した場合、前記第1編集方法及び前記第1編集対象と、前記履歴情報として記憶された前記編集対象である第2編集対象と、前記履歴情報として記憶された前記編集方法である第2編集方法とに基づいて、新たな前記編集対象を決定し、前記第2バージョンの前記サーバドキュメントのうち決定した新たな前記編集対象を、前記第1編集方法で編集する第2編集ステップとを備え、前記第2編集ステップは、前記第1編集指示に含まれる前記第1バージョンの前記ドキュメントである第1ドキュメントの前記第1編集対象が前記第1編集方法で編集された後、編集後の前記第1ドキュメントの前記第2編集対象が前記第2編集方法で編集された場合の編集結果と一致するように、前記第2バージョンの前記サーバドキュメントである第2ドキュメントの前記編集対象を決定することを特徴とする。第3態様によれば、第1態様と同様の効果を奏することができる。
【0011】
本発明の第4態様に係るクライアントプログラムは、サーバ装置との通信が可能なクライアント装置のコンピュータに前記クライアント装置が編集可能なドキュメントであるクライアントドキュメントを編集した場合、前記サーバ装置が編集可能なドキュメントであるサーバドキュメントを編集するための編集指示であって、編集方法、編集対象、及び前記クライアントドキュメントのバージョンを含む前記編集指示を、前記サーバ装置に送信する送信ステップと、前記サーバ装置から、前記クライアントドキュメントを編集するための変更通知であって、編集前のドキュメントのバージョンである更新前バージョンと、編集後のドキュメントのバージョンである更新後バージョンとを示すバージョン更新情報、前記編集方法、及び前記編集対象を含む前記変更通知を受信する受信ステップと、前記受信ステップにより受信した前記変更通知に含まれる前記編集対象及び前記編集方法に応じて前記クライアントドキュメントを編集する編集ステップと、前記編集ステップにより編集した前記クライアントドキュメントの前記バージョンを更新する更新ステップと、前記送信ステップにより送信した前記編集指示に含まれる前記バージョン、前記編集対象、及び前記編集方法、及び、前記受信ステップにより受信した前記変更通知に含まれる前記バージョン更新情報、前記編集対象、及び前記編集方法を、履歴情報として記憶する記憶ステップと、を実行させるためのクライアントプログラムであって、前記編集ステップは、前記受信ステップにより前記サーバ装置から受信した前記変更通知に含まれる前記バージョン更新情報のうち前記更新前バージョンと、前記クライアントドキュメントの前記バージョンとが一致すると判定した場合、前記クライアントドキュメントのうち前記変更通知に含まれる第1編集対象を、前記変更通知に含まれる第1編集方法で編集する第1編集ステップと、前記受信ステップにより前記サーバ装置から受信した前記変更通知に含まれる前記バージョン更新情報のうち前記更新前バージョンと、前記クライアントドキュメントの前記バージョンとが相違すると判定した場合、前記第1編集方法及び前記第1編集対象と、前記履歴情報として記憶された前記編集対象である第2編集対象と、前記履歴情報として記憶された前記編集方法である第2編集方法とに基づいて、新たな前記編集対象を決定し、前記クライアントドキュメントのうち決定した新たな前記編集対象を、前記第1編集方法で編集する第2編集ステップとを備え、前記第2編集ステップは、 前記前記第2編集対象が前記第2編集方法により編集される前の前記ドキュメントである第1ドキュメントの前記第1編集対象が前記第1編集方法で編集された後、編集後の前記第1ドキュメントの前記第2編集対象が前記第2編集方法で編集された場合の編集結果と一致するように、前記第2編集対象が前記第2編集方法により編集された後の前記クライアントドキュメントである第2ドキュメントの前記編集対象を決定することを特徴とする。第4態様によれば、第2態様と同様の効果を奏することができる。
【図面の簡単な説明】
【0012】
【
図2】通信システム1における動作の概要を説明する為の図である。
【
図9】サーバメイン処理のフローチャートであって、
図8の続きである。
【
図10】クライアントメイン処理のフローチャートである。
【
図11】第1クライアント処理のフローチャートである。
【
図12】第2クライアント処理のフローチャートである。
【
図13】第3クライアント処理のフローチャートである。
【
図14】第4クライアント処理のフローチャートであって、
図13の続きである。
【発明を実施するための形態】
【0013】
本発明の一実施形態について、図面を参照して説明する。参照する図面は、本発明が採用しうる技術的特徴を説明するために用いられるものであり、記載されている装置の構成等は、それのみに限定する趣旨ではなく、単なる説明例である。
【0014】
<通信システム1の概要>
図1を参照し、通信システム1の概要について説明する。通信システム1は、サーバ装置2及びクライアント装置3A、3B、3C(以下、総称して「クライアント装置3」という。)を有する。サーバ装置2は、ネットワーク回線4を介してアクセスポイント4Aと通信可能に接続する。クライアント装置3は、アクセスポイント4Aと無線により通信可能に接続する。このため、サーバ装置2とクライアント装置3とは、ネットワーク回線4及びアクセスポイント4Aを介して相互に通信可能である。クライアント装置3は、周知のタブレット端末である。
【0015】
サーバ装置2は、CPU21、記憶部22、及び通信インターフェース(I/F)23を有する。CPU21は、サーバ装置2の制御全般を司る。記憶部22には、CPU21が実行するためのサーバプログラム、ドキュメント等が記憶される。ドキュメントの一例として、筆跡を示す筆跡データが挙げられる。筆跡データには、筆跡を構成する複数の線分の各々の位置を規定する座標データ、及び、複数の線分をグループ毎に区分するためのグループデータ等が含まれる。CPU21は、記憶部22に記憶されたドキュメントを直接編集することが可能である。通信I/F23は、ネットワーク回線4及びアクセスポイント4Aを介してクライアント装置3と通信を行う為の通信モジュールである。
【0016】
クライアント装置3は、CPU31、記憶部32、表示部33、入力部34、及び通信I/F35を有する。CPU31は、クライアント装置3の制御全般を司る。記憶部32には、CPU31が実行するためのクライアントプログラム、ドキュメント等が記憶される。CPU31は、サーバ装置2からドキュメントを受信して記憶部32に記憶する。CPU31は、記憶部32に記憶されたドキュメントを直接編集することが可能である。表示部33は液晶ディスプレイである。入力部34は、表示部33の表面に設けられたタッチパネルである。通信I/F35は、ネットワーク回線4及びアクセスポイント4Aを介してサーバ装置2と通信を行う為の通信モジュールである。
【0017】
図2を参照し、通信システム1における動作の概要について説明する。線分L1、L2からなる文字「A」を示すドキュメントが、サーバ装置2の記憶部22に記憶されているとする。なお、文字「A」には、誤記部分Mが含まれている。はじめに、文字「A」を示すドキュメントが、サーバ装置2からクライアント装置3A、3Bの夫々に送信され、クライアント装置3A、3Bの夫々の記憶部32に記憶される。クライアント装置3A、3Bの夫々の表示部33には、夫々の記憶部32に記憶されたドキュメントが表示される(
図2(A)参照)。
【0018】
ここで、
図2(B)に示すように、クライアント装置3Aのユーザが、文字「A」の誤記部分Mを削除して修正する入力操作を行ったとする。この場合、クライアント装置3Aは、サーバ装置2の記憶部22に記憶されたドキュメントを、誤記部分Mが削除された状態となるように編集する為、誤記部分Mを削除する編集指示をサーバ装置2に送信する。サーバ装置2は編集指示を受信する。サーバ装置2は、クライアント装置3Aから受信した編集指示に基づく編集を、記憶部22に記憶されたドキュメントに対して行い、更新する。
図2(C)に示すように、サーバ装置2は、編集が完了したことを通知するOK応答を、クライアント装置3Aに送信する。なお実際には、サーバ装置2からクライアント装置3Bに対して、後述の変更通知が送信されることになるが、ここでは省略されている。
【0019】
一方、
図2(B)に示すように、クライアント装置3Bのユーザが、文字「A」に含まれる線分L1、L2を共通のグループGに区分する入力操作を行ったとする。
図2(C)に示すように、クライアント装置3Bは、サーバ装置2の記憶部22に記憶されたドキュメントを、線分L1、L2がグループGに区分された状態となるように編集する為、線分L1、L2をグループGに区分する編集指示をサーバ装置2に送信する。サーバ装置2は、クライアント装置3Bから送信された編集指示を受信する。ここでサーバ装置2の記憶部22に記憶されたドキュメントは、クライアント装置3Aから受信した編集指示に基づいて既に編集され、誤記部分Mが削除されている。
【0020】
このような場合、サーバ装置2は、既に編集されたドキュメントに対して、クライアント装置3Bから受信した編集指示に基づく編集を実行する。具体的には、
図2(C)に示すように、サーバ装置2は、誤記部分Mが削除された文字「A」の線分L1、L2をグループGに区分する編集を実行し、記憶部22に記憶されたドキュメントを更新する。
【0021】
図2(D)に示すように、サーバ装置2は、記憶部22に記憶された更新済みのドキュメントが、クライアント装置3A、3Bの夫々の表示部33に表示されるよう、クライアント装置3A、3Bに変更通知を送信する。クライアント装置3A、3Bは夫々、変更通知を受信する。クライアント装置3A、3Bは、各々、受信した変更通知に基づき、サーバ装置2の記憶部22に記憶されたドキュメントと一致するよう、各自が記憶部32に記憶するドキュメントを編集する。クライアント装置3A、3Bの夫々は、誤記部分Mが修正され且つ線分L1、L2がグループGに区分された状態のドキュメントを、表示部33に表示する。
【0022】
<通信シーケンス>
図3~
図15を参照し、通信システム1における通信シーケンスについて説明する。なお
図3~
図15では、クライアント装置3のうちクライアント装置3A、3Bのみ示し、クライアント装置3Cは省略されている。記憶部22に記憶されたドキュメントを、「サーバドキュメント」という。記憶部32に記憶されたドキュメントを、「クライアントドキュメント」という。
【0023】
<第1通信シーケンス>
図3に示す第1通信シーケンスでは、クライアント装置3Aのユーザのみによってクライアントドキュメントの編集が実行される。第1通信シーケンスにおいて、サーバ装置2及びクライアント装置3に記憶されるドキュメントをJSON形式で示す。
図3に示すように、サーバ装置2の記憶部22には、バージョン(Ver.)1のサーバドキュメントが記憶されている。Ver.1のサーバドキュメントでは、パス「/a/b/d」の値として「1」が格納され、パス「/a/b/e」の値として「2」が格納され、パス「/a/c」の値として「3」が格納されている。
【0024】
クライアント装置3A、3Bは、サーバ装置2からドキュメントを取得する為、コマンド「GET」をサーバ装置2に送信する(S201)。サーバ装置2はコマンド「GET」を受信し、Ver.1のサーバドキュメントを読み出してクライアント装置3A、3Bに送信する(S203)。クライアント装置3A、3Bは、Ver.1のドキュメントを受信する。クライアント装置3A、3Bは、各々、受信したドキュメントを、Ver.1のクライアントドキュメントとして記憶部32に記憶する(S205)。
【0025】
クライアント装置3Aのユーザが、Ver.1のクライアントドキュメントのパス「/a/b/d」の値を「1」から「4」に変更する操作を入力したとする。この場合、クライアント装置3Aは、Ver.1のクライアントドキュメントを、ユーザの操作に応じて編集する(S207)。又、クライアント装置3Aは、編集したクライアントドキュメントのバージョンを、暫定的にVer.1´に更新する(S207)。クライアント装置3Aは、編集方法として値の変更を示すコマンド「REPLACE」、編集対象となるドキュメントのバージョン「1」、編集対象を示すパス「/a/b/d」、及び値「4」を含む編集指示を、サーバ装置2に送信する(S209)。又、クライアント装置3Aは、送信した編集指示に含まれるバージョン「1」、コマンド「REPLACE」、パス「/a/b/d」、及び値「4」を、履歴情報として記憶部32に記憶する(S211)。
【0026】
サーバ装置2は、S209でクライアント装置3Aが送信した編集指示を受信する。サーバ装置2は、編集指示に含まれるバージョン「1」とサーバドキュメントのバージョン「1」とが一致すると判定する。この場合、サーバ装置2は、Ver.1のサーバドキュメントのうちパス「/a/b/d」の値を「1」から「4」に変更する(S213)。又、サーバ装置2は、サーバドキュメントのバージョンをVer.1からVer.2に更新する(S213)。更に、サーバ装置2は、編集指示に含まれるコマンド、パス、及び値を、履歴情報として記憶部22に記憶する(S215)。又、サーバ装置2は、バージョンが更新されたことを示す情報(以下、「バージョン更新情報」という。)を、履歴情報として記憶部22に記憶する(S215)。バージョン更新情報は、編集前のドキュメントのバージョンである更新前バージョンと、編集後のドキュメントのバージョンである更新後バージョンとを示す。
【0027】
サーバ装置2は、バージョン更新情報「1→2」を含み、且つサーバドキュメントの編集が完了したことを示すOK応答を、編集指示を送信したクライアント装置3Aに送信する(S217)。クライアント装置3Aは、OK応答を受信する。クライアント装置3Aは、クライアントドキュメントのバージョンを、OK応答に含まれるバージョン更新情報に基づいてVer.1´からVer.2に更新する(S219)。又、クライアント装置3Aは、履歴情報として記憶されたバージョン「1」を、バージョン更新情報「1→2」に更新する(S221)。
【0028】
又、サーバ装置2は、サーバドキュメントの編集に応じてクライアント装置3Bのクライアントドキュメントを編集させるために、変更通知をクライアント装置3Bに送信する(S223)。変更通知には、S215で記憶された履歴情報に基づき、コマンド「REPLACE」、バージョン更新情報「1→2」、パス「/a/b/d」、及び値「4」が含められる。クライアント装置3Bは変更通知を受信する。
【0029】
クライアント装置3Bは、Ver.1のクライアントドキュメントのパス「/a/b/d」の値を「4」に変更する(S225)。又、クライアント装置3Bは、クライアントドキュメントのバージョンをVer.1からVer.2に更新する(S225)。更に、クライアント装置3Bは、変更通知に含まれるバージョン変更情報、コマンド、パス、及び値を、履歴情報として記憶部32に記憶する(S227)。
【0030】
<第2通信シーケンス>
図4に示す第2通信シーケンスでは、クライアント装置3A、3Bの夫々のユーザによってクライアントドキュメントの編集が実行される。又、クライアント装置3Aのユーザによる編集のみ有効となり、サーバ装置2のサーバドキュメントが編集される。第1通信シーケンスと同じ手順については、同一符号を付し、説明を省略する。第2通信シーケンスにおいて、サーバ装置2及びクライアント装置3に記憶されるドキュメントをJSON形式で示す。
【0031】
S223でサーバ装置2から送信された変更通知をクライアント装置3Bが受信する前に、クライアント装置3BのユーザがVer.1のクライアントドキュメントを編集する操作を入力したとする。編集内容は、パス「/a/b/d」「/a/b/e」の代わりにパス「/a/b/f」を規定し、このパスの値として「5」を設定するものである。この場合、クライアント装置3Bは、Ver.1のクライアントドキュメントを、ユーザの操作に応じて編集する(S301)。又、クライアント装置3Bは、編集したクライアントドキュメントのバージョンを、暫定的にVer.1´に更新する(S301)。クライアント装置3Bは、コマンド「REPLACE」、バージョン「1」、パス「/a/b」、代替されるパス「f」、及び値「5」を含む編集指示を、サーバ装置2に送信する(S303)。又、クライアント装置3Bは、送信した編集指示に含まれるバージョン、コマンド、パス、及び値を、履歴情報として記憶部32に記憶する(S305)。
【0032】
サーバ装置2は、クライアント装置3Bが送信した編集指示を受信する。サーバ装置2は、編集指示に含まれるバージョン「1」とサーバドキュメントのバージョン「2」とが相違すると判定する。ここで、サーバ装置2においてS215で履歴情報として記憶されたパス「/a/b/d」に、S303でクライアント装置3Bから送信された変更通知に含まれるパス「/a/b」が含まれる。この場合、サーバ装置2は、記憶部22に記憶されたVer.2のサーバドキュメントを編集しないと判定する(S307)。サーバ装置2は、サーバドキュメントが編集されなかったことを示すNG応答を、クライアント装置3Bに送信する(S309)。
【0033】
一方、クライアント装置3Bは、S223でサーバ装置2が送信した変更通知を受信する。クライアント装置3Bは、受信した変更通知に含まれるバージョン更新情報「1→2」のうち更新前バージョン「1」が、クライアントドキュメントのバージョン「1´」と相違すると判定する。ここで、クライアント装置3BにおいてS305で履歴情報として記憶されたパス「/a/b」は、S223でサーバ装置2から送信された変更通知に含まれるパス「/a/b/d」に含まれる。この場合、クライアント装置3Bは、S301で編集されたクライアントドキュメントを、編集前のクライアントドキュメント、即ち、S205で記憶部32に記憶したクライアントドキュメントに戻す(S311)。又、クライアント装置3Bは、クライアントドキュメントのバージョンを「1」に戻す。
【0034】
クライアント装置3Bは、S205で記憶部32に記憶したクライアントドキュメントに戻した(S311)後、S223でサーバ装置2が送信した変更通知に基づき、クライアントドキュメントを編集する。具体的には、クライアント装置3Bは、クライアントドキュメントのパス「/a/b/d」の値を「1」から「4」に変更する(S313)。又、クライアント装置3Bは、クライアントドキュメントのバージョンを、Ver.2に更新する(S313)。
【0035】
以下、サーバ装置2が受信した編集指示に含まれるパスと、サーバ装置2の記憶部22に履歴情報として記憶されたパスとのうち一方が他方に含まれる場合において、編集指示と履歴情報との関係を、「衝突関係」という。同様に、クライアント装置3が受信した変更通知に含まれるパスと、クライアント装置3の記憶部32に履歴情報として記憶されたパスとのうち一方が他方に含まれる場合において、変更通知と履歴情報との関係を、「衝突関係」という。
【0036】
<第3通信シーケンス>
図5に示す第3通信シーケンスでは、クライアント装置3A、3Bの夫々のユーザによってクライアントドキュメントの編集が実行される。又、第2通信シーケンスと異なり、クライアント装置3A、3Bの夫々のユーザによる編集が有効となり、サーバ装置2のサーバドキュメントが編集される。第3通信シーケンスにおいて、サーバ装置2及びクライアント装置3に記憶されるドキュメントを配列形式で示す。
図5に示すように、サーバ装置2の記憶部22には、Ver.1のサーバドキュメントが記憶されている。Ver.1のサーバドキュメントでは、パス「/a[0]」の値として「A」が格納され、パス「/a[1]」の値として「B」が格納され、パス「/a[2]」の値として「C」が格納されている。
【0037】
クライアント装置3A、3Bは、サーバ装置2からドキュメントを取得する為、コマンド「GET」をサーバ装置2に送信する(S401)。サーバ装置2はコマンド「GET」を受信し、Ver.1のサーバドキュメントをクライアント装置3A、3Bに送信する(S403)。クライアント装置3A、3Bは、Ver.1のドキュメントを受信する。クライアント装置3A、3Bは、各々、受信したドキュメントを、Ver.1のクライアントドキュメントとして記憶部32に記憶する(S405)。
【0038】
クライアント装置3Aのユーザが、Ver.1のクライアントドキュメントのパス「/a[0]」の値を「A」から「D」に変更する操作を入力したとする。この場合、クライアント装置3Aは、Ver.1のクライアントドキュメントを、ユーザの操作に応じて編集する(S407)。又、クライアント装置3Aは、編集したクライアントドキュメントのバージョンを、暫定的にVer.1´に更新する(S407)。クライアント装置3Aは、コマンド「REPLACE」、バージョン「1」、パス「/a[0]」、及び値「D」を含む編集指示を、サーバ装置2に送信する(S409)。又、クライアント装置3Aは、送信した編集指示に含まれるバージョン、コマンド、パス、及び値を、履歴情報として記憶部32に記憶する(S411)。
【0039】
サーバ装置2は、S409でクライアント装置3Aから送信された編集指示を受信する。サーバ装置2は、編集指示に含まれるバージョン「1」と、サーバドキュメントのバージョン「1」とが一致すると判定する。この場合、サーバ装置2は、Ver.1のサーバドキュメントのうちパス「/a[0]」の値を「A」から「D」に変更する(S413)。又、サーバ装置2は、サーバドキュメントのバージョンをVer.1からVer.2に更新する(S413)。更に、サーバ装置2は、編集指示に含まれるコマンド、パス、及び値を、履歴情報として記憶部22に記憶する(S415)。又、サーバ装置2は、バージョン更新情報「1→2」を、履歴情報として記憶部22に記憶する(S415)。
【0040】
サーバ装置2は、バージョン更新情報「1→2」を含むOK応答を、編集指示を送信したクライアント装置3Aに送信する(S417)。クライアント装置3Aは、OK応答を受信する。クライアント装置3Aは、クライアントドキュメントのバージョンを、Ver.1からVer.2に更新する(S419)。又、クライアント装置3Aは、履歴情報のバージョン「1」を、バージョン更新情報「1→2」に更新する(S421)。
【0041】
又、サーバ装置2は、変更通知をクライアント装置3Bに送信する(S423)。変更通知には、S415で記憶された履歴情報に基づき、コマンド「REPLACE」、バージョン更新情報「1→2」、パス「/a[0]」、及び値「D」が含められる。
【0042】
S423でサーバ装置2から送信した変更通知をクライアント装置3Bが受信する前に、クライアント装置3Bのユーザが、Ver.1のクライアントドキュメントを編集する操作を入力したとする。編集内容は、クライアントドキュメントにおいて値「E」が格納された配列a[2]を新たに挿入し、元の配列a[2](値「C」)のインデックスを、「2」から「3」に更新させるものである。この場合、クライアント装置3Bは、Ver.1のクライアントドキュメントを、ユーザの操作に応じて編集する(S501)。又、クライアント装置3Bは、編集したクライアントドキュメントのバージョンを、暫定的にVer.1´に更新する(S501)。クライアント装置3Bは、編集方法として新たな配列を挿入することを示すコマンド「ADD」、バージョン「1」、編集対象を示すパス「/a[2]」、及び値「E」を含む編集指示を、サーバ装置2に送信する(S503)。又、クライアント装置3Bは、送信した編集指示に含まれるバージョン、コマンド、パス、及び値を、履歴情報として記憶部32に記憶する(S505)。
【0043】
サーバ装置2は、クライアント装置3Bが送信した編集指示を受信する。サーバ装置2は、編集指示に含まれるバージョン「1」と、サーバドキュメントのバージョン「2」とが相違すると判定する。
【0044】
ここで、Ver.1のサーバドキュメントが編集指示(ADD 1,/a[2],"E")に基づいて編集された後、編集後のサーバドキュメントが、S415で記憶された履歴情報(1 REPLACE,/a[0],"D")に基づいて編集された場合と、Ver.2のサーバドキュメントが、クライアント装置3Bによる編集指示(ADD 1,/a[2],"E")に基づいて編集された場合とで、何れもS507で示すサーバドキュメントの内容となり、互いに一致する。この場合、サーバ装置2は、クライアント装置3Bから受信した編集指示に基づいて、Ver.2のサーバドキュメントを編集すると判定する。そしてサーバ装置2は、Ver.2のサーバドキュメントについて、編集指示に含まれるパス「/a[2]」に、値「E」の配列を追加する(S507)。又、サーバ装置2は、編集前において値「C」が格納されたa[2]のインデックスを更新し、a[3]とする(S507)。更に、サーバ装置2は、バージョン変更情報「2→3」、コマンド、パス、及び値を、履歴情報として記憶部22に記憶する(S509)。
【0045】
一方、クライアント装置3Bは、S501でクライアントドキュメントを編集した後、S423でサーバ装置2により送信された変更通知を受信する。クライアント装置3Bは、受信した変更通知に含まれるバージョン更新情報「1→2」のうち更新前バージョン「1」が、クライアントドキュメントのバージョン「1´」と相違すると判定する。
【0046】
ここで、S505で記憶された履歴情報に基づく編集が行われる前のクライアントドキュメントが、受信された変更通知(REPLACE 1→2,/a[0],"D")に基づいて編集された後、編集後のクライアントドキュメントが、S505で記憶された履歴情報(1 ADD,/a[2],"E")に基づいて編集された場合と、S505で記憶された履歴情報に基づく編集が行われた後のクライアントドキュメントが、受信された変更通知に基づいて編集された場合とで、編集結果は一致する。この場合、クライアント装置3Bは、S423でサーバ装置2から送信された変更通知に基づいて、クライアントドキュメントを編集すると判定する。そしてクライアント装置3Bは、クライアントドキュメントについて、変更通知に含まれるパス「/a[0]」を値「D」に変更する(S511)。又、クライアント装置3Bは、クライアントドキュメントのバージョンをVer.1´からVer.2に更新する(S511)。更に、クライアント装置3Bは、変更通知に含まれるバージョン変更情報、コマンド、パス、及び値を、履歴情報として記憶部32に記憶する(S513)。
【0047】
サーバ装置2は、S509で履歴情報を更新した後、バージョン更新情報「2→3」を含むOK応答を、S503で編集指示を送信したクライアント装置3Bに送信する(S515)。クライアント装置3Bは、OK応答を受信する。クライアント装置3Bは、クライアントドキュメントのバージョンを、Ver.2からVer.3に更新する(S517)。
【0048】
又、サーバ装置2は、S503でクライアント装置3Bから送信された編集指示に基づいてサーバドキュメントが編集されたことをクライアント装置3Aに通知する為に、変更通知をクライアント装置3Aに送信する(S519)。変更通知には、S509で記憶された履歴情報に基づき、コマンド「ADD」、バージョン更新情報「2→3」、パス「/a[2]」、及び値「E」が含まれる。
【0049】
クライアント装置3Aは、サーバ装置2が送信した変更通知を受信する。クライアント装置3Aは、受信した変更通知に含まれるバージョン更新情報「2→3」のうち更新前バージョン「2」が、クライアントドキュメントのバージョン「2」と一致すると判定する。この場合、クライアント装置3Aは、クライアントドキュメントについて、変更通知に含まれるパス「/a[2]」に、値「E」の配列を追加する(S521)。又、サーバ装置2は、編集前において値「C」が格納されたa[2]のインデックスを更新し、[3]とする(S521)。
【0050】
以下、サーバ装置2において、バージョンの更新前のサーバドキュメントが編集指示に基づいて編集された後、編集後のサーバドキュメントが、履歴情報に基づいて編集された場合と、バージョンの更新後のサーバドキュメントが編集指示に基づいて編集された場合とで編集結果が一致する場合において、編集指示と履歴情報との関係を、「疎関係」という。同様に、履歴情報に基づく編集が行われる前のクライアントドキュメントが変更通知に基づいて編集された後、編集後のクライアントドキュメントが履歴情報に基づいて編集された場合と、履歴情報に基づく編集が行われた後のクライアントドキュメントが変更通知に基づいて編集された場合とで編集結果が一致する場合において、変更通知と履歴情報との関係を、「疎関係」という。
【0051】
<第4通信シーケンス>
図6に示す第4通信シーケンスでは、クライアント装置3A、3Bの夫々のユーザによってドキュメントの編集が実行される。又、第3通信シーケンスと異なり、クライアント装置3Bのユーザによる編集のみ有効となり、サーバ装置2のサーバドキュメントが編集される。第4通信シーケンスにおいて、サーバ装置2及びクライアント装置3に記憶されるドキュメントを配列形式で示す。第3通信シーケンス(
図5参照)と同じ手順については、同一符号を付し、説明を省略する。
図6において図示されていないが、
図5のS401~S405と同じ手順ではじめに通信が実行される。
【0052】
クライアント装置3Aのユーザが、Ver.1のクライアントドキュメントにおいて値「D」が格納された配列a[0]を新たに挿入し、元の配列a[0]~a[2]のインデックスを更新させる操作を入力したとする。この場合、クライアント装置3Aは、ユーザの操作に応じて、Ver.1のクライアントドキュメントを編集する(S601)。又、クライアント装置3Aは、編集したクライアントドキュメントのバージョンを、暫定的にVer.1´に更新する(S601)。クライアント装置3Aは、コマンド「ADD」、バージョン「1」、パス「/a[0]」、及び値「D」を含む編集指示を、サーバ装置2に送信する(S603)。又、クライアント装置3Aは、送信した編集指示に含まれるバージョン、コマンド、パス、及び値を、履歴情報として記憶部32に記憶する(S605)。
【0053】
サーバ装置2は、S603でクライアント装置3Aが送信した編集指示を受信する。サーバ装置2は、編集指示に含まれるバージョン「1」と、サーバドキュメントのバージョン「1」とが一致すると判定する。この場合、サーバ装置2は、Ver.1のサーバドキュメントについて、編集指示に含まれるパス「/a[0]」に、値「D」の配列を追加する(S607)。又、サーバ装置2は、編集前の配列a[0]~a[2]の各々のインデックスを更新し、配列a[1]~a[3]とする(S607)。又、サーバ装置2は、サーバドキュメントのバージョンをVer.1からVer.2に更新する(S607)。更に、サーバ装置2は、編集指示に含まれるコマンド、パス、及び値を、履歴情報として記憶部22に記憶する(S609)。又、サーバ装置2は、バージョン更新情報「1→2」を、履歴情報として記憶部22に記憶する(S611)。
【0054】
サーバ装置2は、バージョン更新情報「1→2」を含むOK応答を、編集指示を送信したクライアント装置3Aに送信する(S611)。クライアント装置3Aは、OK応答を受信する。クライアント装置3Aは、クライアントドキュメントのバージョンを、Ver.1´からVer.2に更新する(S613)。又、クライアント装置3Aは、履歴情報のバージョン「1」を、バージョン更新情報「1→2」に更新する(S615)。
【0055】
又、サーバ装置2は、クライアント装置3Bに変更通知を送信する(S617)。変更通知には、S609で記憶された履歴情報に基づき、コマンド「ADD」、バージョン更新情報「1→2」、パス「/a[0]」、及び値「D」が含められる。
【0056】
S617でサーバ装置2から送信された変更通知をクライアント装置3Bが受信する前に、クライアント装置3Bのユーザが、Ver.1のクライアントドキュメントを編集する操作を入力したとする。編集内容は、クライアントドキュメントにおいて、パス「/a[0]」の値を「E」に変更するものである。この場合、クライアント装置3Bは、Ver.1のクライアントドキュメントを、ユーザの操作に応じて編集する(S621)。又、クライアント装置3Bは、編集したクライアントドキュメントのバージョンを、暫定的にVer.1´に更新する(S621)。クライアント装置3Bは、コマンド「REPLACE」、バージョン「1」、編集対象を示すパス「/a[0]」、及び値「E」を含む編集指示を、サーバ装置2に送信する(S623)。又、クライアント装置3Bは、送信した編集指示に含まれるコマンド、バージョン、パス、及び値を、履歴情報として記憶部32に記憶する(S625)。
【0057】
サーバ装置2は、S623でクライアント装置3Bから送信された編集指示を受信する。サーバ装置2は、編集指示に含まれるバージョン「1」と、サーバドキュメントのバージョン「2」とが相違すると判定する。
【0058】
ここで、サーバ装置2は、Ver.1のサーバドキュメントが、S609で記憶された履歴情報(1→2 ADD,/a[0],"D")に基づいて編集されることにより、受信した編集指示(REPLACE 1,/a[0],"E")に基づいて編集されるVer.1のサーバドキュメントの編集対象を示すパスが、「/a[0]」から「/a[1]」に変更されたと判定する。この場合、サーバ装置2は、Ver.2のサーバドキュメントのうち、変更後のパス「/a[1]」の値を、「E」に変更する(S627)。又、サーバ装置2は、サーバドキュメントのバージョンを、「Ver.2」から「Ver.3」に更新する(S627)。更に、サーバ装置2は、バージョン変更情報「2→3」、コマンド、変更後のパス、及び値を、履歴情報として記憶部22に記憶する(S629)。
【0059】
一方、クライアント装置3Bは、S621で記憶部32に記憶されたクライアントドキュメントを編集した後、S617によりサーバ装置2から送信された変更通知を受信する。クライアント装置3Bは、受信した変更通知に含まれるバージョン更新情報「1→2」のうち更新前バージョン「1」が、クライアントドキュメントのバージョン「1´」と相違すると判定する。
【0060】
ここで、クライアント装置3Bは、Ver.1のクライアントドキュメント(
図5、S405参照)が、S617でサーバ装置2から送信された変更通知(ADD 1→2,/a[0],"D")に基づいて編集されることにより、履歴情報として記憶されたコマンド「REPLACE」の編集対象を示すパスが、「/a[0]」から「/a[1]」に変更されたと判定する。
【0061】
この場合、クライアント装置3Bは、サーバ装置2から受信した変更通知に基づいて、クライアントドキュメントを編集すると判定する。そしてクライアント装置3Bは、Ver.1のクライアントドキュメント(
図5、S405参照)について、変更通知に含まれるパス「/a[0]」に、値「D」の配列を追加する(S631)。又、クライアント装置3Bは、編集前の配列a[0]~a[2]の各々のインデックスを更新し、配列a[1]~a[3]とする(S631)。又、クライアント装置3Bは、履歴情報に基づき、変更後のパス「/a[1]」の値を「E」に変更する(S631)。又、クライアント装置3Bは、クライアントドキュメントのバージョンをVer.1´からVer.2に更新する(S631)。更に、クライアント装置3Bは、変更通知に含まれるコマンド、バージョン変更情報、パス、及び値を、履歴情報として記憶部32に記憶する(S633)。
【0062】
以下、サーバ装置2において、サーバドキュメントに対して履歴情報に基づく編集が行われることにより、次にクライアント装置3から受信した編集指示に基づくコマンドで編集が行われる場合のパスが変更となる場合において、編集指示と履歴情報との関係を、「条件付き疎関係」という。又、クライアント装置3において、サーバ装置2から受信した変更通知に基づく編集がクライアントドキュメントに対して行われることにより、次に履歴情報に基づく編集が行われる場合のパスが変更となる場合において、変更通知と履歴情報との関係を、「条件付き疎関係」という。
【0063】
サーバ装置2は、S629で履歴情報を更新した後、バージョン更新情報「2→3」を含むOK応答を、S623で編集指示を送信したクライアント装置3Bに送信する(S635)。クライアント装置3Bは、OK応答を受信する。クライアント装置3Bは、クライアントドキュメントのバージョンを、Ver.2からVer.3に更新する(S637)。又、サーバ装置2は、変更通知をクライアント装置3Aに送信する(S639)。変更通知には、S629で記憶された履歴情報に基づき、コマンド「REPLACE」、バージョン更新情報「2→3」、パス「/a[1]」、及び値「E」が含められる。
【0064】
S639でサーバ装置2から送信された変更通知をクライアント装置3Aが受信する前に、クライアント装置3Aのユーザが、クライアントドキュメントを編集する操作を入力したとする。編集内容は、パス「/a[1]」の値を「F」に変更するものである。この場合、クライアント装置3Aは、Ver.2のクライアントドキュメントを、ユーザの操作に応じて編集する(S651)。又、クライアント装置3Aは、編集したクライアントドキュメントのバージョンを、暫定的にVer.2´に更新する(S651)。クライアント装置3Aは、コマンド「REPLACE」、バージョン「2」、パス「/a[1]」、及び値「F」を含む編集指示を、サーバ装置2に送信する(S653)。又、クライアント装置3Aは、送信した編集指示に含まれるバージョン、コマンド、パス、及び値を、履歴情報として記憶部32に記憶する(S655)。
【0065】
サーバ装置2は、S653でクライアント装置3Aから送信された編集指示を受信する。サーバ装置2は、編集指示に含まれるバージョン「2」と、記憶部22に記憶されたサーバドキュメントのバージョン「3」とが相違すると判定する。ここで、S629で記憶された履歴情報と、受信した編集指示とで、コマンド「REPLACE」及びパス「/a[1]」が一致する。この場合、サーバ装置2は、Ver.3のサーバドキュメントを編集しないと判定する(S657)。サーバ装置2は、NG応答をクライアント装置3Aに送信する(S659)。
【0066】
以下、サーバ装置2において、編集指示と履歴情報との夫々でコマンドが同一且つパスが同一である場合における編集指示と履歴情報との関係を、「履歴コマンド優先関係」という。なお同様に、図示されていないが、クライアント装置3において、変更通知と履歴情報との夫々でコマンドが同一且つパスが同一である場合における変更通知と履歴情報との関係を、「履歴コマンド優先関係」という。
【0067】
一方、クライアント装置3Aは、S639でサーバ装置2から送信された変更通知を受信する。クライアント装置3Aは、受信した変更通知に含まれるバージョン更新情報「2→3」のうち更新前バージョン「2」が、クライアントドキュメントのバージョン「2´」と相違すると判定する。ここで、S655で履歴情報として記憶されたパス「/a[1]」は、S639でサーバ装置2から送信された変更通知に含まれるパス「/a[1]」に含まれる。この場合、変更通知と履歴情報との関係は衝突関係であることになるので、クライアント装置3Bは、S651で編集されたクライアントドキュメントを、編集前のクライアントドキュメント、即ち、S613で記憶部32に記憶したクライアントドキュメントに戻す(S671)。又、クライアント装置3Aは、クライアントドキュメントのバージョンを「2」に戻す。
【0068】
クライアント装置3Aは、S613で記憶部32に記憶したクライアントドキュメントに戻した(S671)後、S639でサーバ装置2が送信した変更通知に基づき、クライアントドキュメントを編集する。具体的には、クライアント装置3Aは、クライアントドキュメントのパス「/a[1]」の値を「A」から「E」に変更する(S673)。又、クライアント装置3Aは、クライアントドキュメントのバージョンを、Ver.3に更新する(S673)。
【0069】
<第5通信シーケンス>
図7に示す第5通信シーケンスでは、クライアント装置3A、3Bの夫々のユーザによってクライアントドキュメントの編集が実行される。第1通信シーケンスと同じ手順については、同一符号を付し、説明を省略する。第2通信シーケンスにおいて、サーバ装置2及びクライアント装置3に記憶されるドキュメントをJSON形式で示す。
【0070】
クライアント装置3Aのユーザが、Ver.1のクライアントドキュメントのパス「/a/b/d」を削除する操作を入力したとする。この場合、クライアント装置3Aは、Ver.1のクライアントドキュメントを、ユーザの操作に応じて編集する(S807)。又、クライアント装置3Aは、編集したクライアントドキュメントのバージョンを、暫定的にVer.1´に更新する(S807)。クライアント装置3Aは、編集方法としてパスの削除を示すコマンド「REMOVE」、編集対象となるドキュメントのバージョン「1」、編集(削除)対象を示すパス「/a/b/d」を含む編集指示を、サーバ装置2に送信する(S809)。又、クライアント装置3Aは、送信した編集指示に含まれるバージョン「1」、コマンド「REMOVE」、及びパス「/a/b/d」を、履歴情報として記憶部32に記憶する(S811)。
【0071】
サーバ装置2は、S809でクライアント装置3Aが送信した編集指示を受信する。サーバ装置2は、編集指示に含まれるバージョン「1」とサーバドキュメントのバージョン「1」とが一致すると判定する。この場合、サーバ装置2は、Ver.1のサーバドキュメントのうちパス「/a/b/d」を削除する(S813)。又、サーバ装置2は、サーバドキュメントのバージョンをVer.1からVer.2に更新する(S813)。更に、サーバ装置2は、編集指示に含まれるコマンド、パス、及び値を、履歴情報として記憶部22に記憶する(S815)。又、サーバ装置2は、バージョン更新情報「1→2」を、履歴情報として記憶部22に記憶する(S815)。
【0072】
サーバ装置2は、バージョン更新情報「1→2」を含み、且つサーバドキュメントの編集が完了したことを示すOK応答を、編集指示を送信したクライアント装置3Aに送信する(S817)。クライアント装置3Aは、OK応答を受信する。クライアント装置3Aは、クライアントドキュメントのバージョンを、OK応答に含まれるバージョン更新情報に基づいてVer.1´からVer.2に更新する(S819)。又、クライアント装置3Aは、履歴情報として記憶されたバージョン「1」を、バージョン更新情報「1→2」に更新する(S821)。
【0073】
又、サーバ装置2は、サーバドキュメントの編集に応じてクライアント装置3Bのクライアントドキュメントを編集させるために、変更通知をクライアント装置3Bに送信する(S823)。変更通知には、S815で記憶された履歴情報に基づき、コマンド「REMOVE」、バージョン更新情報「1→2」、及びパス「/a/b/d」が含められる。クライアント装置3Bは変更通知を受信する。
【0074】
S823でサーバ装置2から送信された変更通知をクライアント装置3Bが受信する前に、クライアント装置3BのユーザがVer.1のクライアントドキュメントを編集する操作を入力したとする。編集内容は、パス「/a/b/d」の値を「1」から「4」に変更するものである。この場合、クライアント装置3Bは、Ver.1のクライアントドキュメントを、ユーザの操作に応じて編集する(S901)。又、クライアント装置3Bは、編集したクライアントドキュメントのバージョンを、暫定的にVer.1´に更新する(S901)。クライアント装置3Bは、コマンド「REPLACE」、編集対象となるドキュメントのバージョン「1」、編集対象を示すパス「/a/b/d」、及び値「4」を含む編集指示を、サーバ装置2に送信する(S903)。又、クライアント装置3Bは、送信した編集指示に含まれるバージョン、コマンド、パス、及び値を、履歴情報として記憶部32に記憶する(S905)。
【0075】
サーバ装置2は、クライアント装置3Bが送信した編集指示を受信する。サーバ装置2は、編集指示に含まれるバージョン「1」とサーバドキュメントのバージョン「2」とが相違すると判定する。ここで、サーバ装置2は、S903でクライアント装置3から送信された編集指示に含まれるコマンド「REPLACE」の優先度の方が、S815で履歴情報として記憶したコマンド「REMOVE」の優先度よりも低いと判定する。なお、コマンド間の優先度の優劣の関係は、予め規定されている。本実施形態の場合、コマンド「REMOVE」の優先度の方がコマンド「REPLACE」の優先度よりも高く設定されていることになる。なお、コマンドの優劣を示す情報は、予め記憶部32に記憶されているとする。この場合、サーバ装置2は、記憶部22に記憶されたVer.2のサーバドキュメントを編集しないと判定する(S825)。サーバ装置2は、サーバドキュメントが編集されなかったことを示すNG応答を、クライアント装置3Bに送信する(S829)。
【0076】
一方、クライアント装置3Bは、S823でサーバ装置2が送信した変更通知を受信する。クライアント装置3Bは、受信した変更通知に含まれるバージョン更新情報「1→2」のうち更新前バージョン「1」が、クライアントドキュメントのバージョン「1´」と相違すると判定する。ここで、クライアント装置3Bは、S823でサーバ装置2から送信された変更通知に含まれるコマンド「REMOVE」の方が、S905で記憶した履歴情報に含まれるコマンド「REPLACE」の優先度よりも高いと判定する。この場合、クライアント装置3Bは、サーバ装置2から受信した変更通知に基づいて、クライアントドキュメントを編集すると判定する。そしてクライアント装置3Bは、Ver.1´のクライアントドキュメントについて、変更通知に含まれるパス「/a/b/d」を削除する(S907)。又、クライアント装置3Bは、クライアントドキュメントのバージョンをVer.1´からVer.2に更新する(S907)。
【0077】
以下、クライアント装置3において、変更通知と履歴情報との関係が疎関係及び条件付き疎関係の何れでもなく、且つ、受信した変更通知に含まれるコマンドの優先度の方が、履歴情報に記憶されたコマンドの優先度よりも高い場合において、変更通知と履歴情報との関係を、「受信コマンド優先関係」という。なお同様に、図示されていないが、サーバ装置2において、編集指示と履歴情報との関係が疎関係及び条件付き疎関係の何れでもなく、且つ、受信した編集指示に含まれるコマンドの優先度の方が、履歴情報に記憶されたコマンドの優先度よりも高い場合において、編集指示と履歴情報との関係を、「受信コマンド優先関係」という。
【0078】
<サーバメイン処理>
図8及び
図9を参照し、サーバ装置2のCPU21により実行されるサーバメイン処理について説明する。サーバメイン処理は、クライアント装置3から送信された編集指示を検出した場合、記憶部22に記憶されたサーバプログラムをCPU21が読み出して実行することにより、開始される。
【0079】
図8に示すように、CPU21は、クライアント装置3から送信された編集指示を受信する(S11)。CPU21は、受信した編集指示に含まれるバージョンと、サーバドキュメントのバージョンとを比較する(S13)。CPU21は、夫々のバージョンが一致すると判定した場合(S15:YES)、処理をS51(
図9参照)に進める。
【0080】
図9に示すように、CPU21は、編集指示に含まれるコマンド及びパスを取得する。CPU21は、取得したコマンドにより示される編集方法で、サーバドキュメントのうち取得したパスにより示される編集対象を編集する(S51)。CPU21は、編集されたサーバドキュメントのバージョンに1加算して更新する(S53)。CPU21は、S11(
図8参照)で受信した編集指示に含まれるコマンド、パス、及び値を、履歴情報として記憶部22に記憶する。又、CPU21は、バージョンが更新されたことを示すバージョン更新情報を、履歴情報として記憶部22に記憶する(S55)。バージョン更新情報には、更新前バージョンと更新後バージョンとが含められる。以下、履歴情報において「バージョン更新情報、コマンド、パス、及び値」からなるまとまりを、「履歴レコード」という。各履歴レコードは、LIFO形式で順番に記憶部22に記憶される。
【0081】
CPU21は、S11(
図8参照)で受信した編集指示を送信したクライアント装置3に、OK応答を送信する(S57)。CPU21は、編集指示を送信したクライアント装置3を除く他のクライアント装置3に、変更通知を送信する(S59)。変更通知には、S55で記憶した履歴レコードに含まれるコマンド、バージョン更新情報、パス、及び値が含められる。CPU21は、サーバメイン処理を終了させる。
【0082】
一方、
図8に示すように、CPU21は、受信した編集指示に含まれるバージョンと、サーバドキュメントのバージョンとが相違すると判定した場合(S15:NO)、処理をS17に進める。CPU21は、記憶部22に記憶された履歴情報を取得する(S17)。なお、記憶部22には、後述のS19で選択されていない履歴レコードが複数記憶されている場合がある。CPU21は、履歴情報のうち選択されていない履歴レコードを1つ選択する(S19)。CPU21は、選択した履歴レコードに含まれるコマンド及びパスと、S11で受信した編集指示に含まれるコマンド及びパスとに基づき、サーバドキュメントのうち、編集指示に含まれるコマンドにより示される編集方法で編集する編集対象を示すパスを、以下に示す方法で新たに決定する。
【0083】
CPU21は、S11で受信した編集指示と、S19で選択した履歴レコードとが、疎関係であるか判定する(S21)。CPU21は、疎関係であると判定した場合(S21:YES)、処理をS33に進める。CPU21は、編集指示に含まれるパスを維持する(S33)。この場合、サーバドキュメントのうち、編集指示に含まれるパスにて示される編集対象が、編集指示に含まれるコマンドにて示される編集方法で編集される(S51(
図9参照)、後述)。CPU21は、処理をS41に進める。
【0084】
CPU21は、疎関係でないと判定した場合(S21:NO)、S11で受信した編集指示と、S19で選択した履歴レコードとが、条件付き疎関係であるか判定する(S23)。CPU21は、条件付き疎関係であると判定した場合(S23:YES)、処理をS35に進める。この場合、履歴情報の履歴レコードに基づいてサーバドキュメントが編集されることにより、次に受信した編集指示に基づいて編集されるサーバドキュメントの編集対象が変更されたことになるので、CPU21は、変更後の編集対象を示すパスを決定する(S35)。この場合、サーバドキュメントのうち、決定されたパスにて示される編集対象が、編集指示に含まれるコマンドにて示される編集方法で編集される(S51(
図9参照)、後述)。CPU21は、処理をS41に進める。
【0085】
CPU21は、条件付き疎関係でないと判定した場合(S23:NO)、S11で受信した編集指示と、S19で選択した履歴レコードとが、受信コマンド優先関係であるか判定する(S25)。CPU21は、受信コマンド優先関係であると判定した場合(S25:YES)、処理をS37に進める。CPU21は、編集指示に含まれるパスを維持する(S37)。この場合、サーバドキュメントのうち、編集指示に含まれるパスにて示される編集対象が、編集指示に含まれるコマンドにて示される編集方法で編集される(S51(
図9参照)、後述)。CPU21は、処理をS41に進める。
【0086】
CPU21は、S41において、記憶部22に記憶された履歴レコードを、S19で全て選択したか判定する(S41)。CPU21は、選択されていない履歴レコードが残存する場合(S41:NO)、処理をS19に戻す。CPU21は、選択されていない履歴レコードを選択し(S19)、処理を繰り返す。CPU21は、記憶部22に記憶された履歴レコードを、S19で全て選択したと判定した場合(S41:YES)、処理をS51(
図9参照)に進める。
【0087】
図9に示すように、CPU21は、編集指示に含まれるコマンド、及び、S33、S35、S37(
図8参照)で決定したパスを取得する。CPU21は、取得したコマンドにより示される編集方法で、サーバドキュメントのうち取得したパスにより示される編集対象を編集する(S51)。CPU21は、編集されたサーバドキュメントのバージョンに1加算して更新する(S53)。CPU21は、バージョン更新情報、S11(
図8参照)で受信した編集指示に含まれるコマンド及び値、並びに、S33、S35、S37(
図8参照)で決定したパスを含む履歴レコードを、履歴情報として記憶部22に記憶する(S55)。履歴レコードは、LIFO形式で順番に記憶部32に記憶される。
【0088】
CPU21は、S11(
図8参照)で受信した編集指示を送信したクライアント装置3にOK応答を送信する(S57)。CPU21は、編集指示を送信したクライアント装置3を除く他のクライアント装置3に対し、変更通知を送信する(S59)。CPU21は、サーバメイン処理を終了させる。
【0089】
一方、
図8に示すように、CPU21は、受信コマンド優先関係でないと判定した場合(S25:NO)、S11で受信した編集指示と、S19で選択した履歴レコードとが、履歴コマンド優先関係であるか判定する(S27)。CPU21は、履歴コマンド優先関係であると判定した場合(S27:YES)、編集指示を送信したクライアント装置3に対してNG応答を送信する(S39)。CPU21は、処理をS31に進める。又、CPU21は、履歴コマンド優先関係でないと判定した場合(S27:NO)、S11で受信した編集指示と、S19で選択した履歴レコードとが、衝突関係であると判定する。CPU21は、編集指示を送信したクライアント装置3に対してNG応答を送信する(S29)。CPU21は、処理をS31に進める。
【0090】
CPU21は、履歴コマンド優先関係又は衝突関係であると判定した場合(S27:YES→S39、S27:NO→S29)、サーバドキュメントの編集を禁止する(S31)。CPU21は、サーバメイン処理を終了させる。
【0091】
<クライアントメイン処理>
図10~
図14を参照し、クライアント装置3のCPU31により実行されるクライアントメイン処理について説明する。クライアントメイン処理は、クライアント装置3の電源が投入された場合、記憶部32に記憶されたクライアントプログラムをCPU31が読み出して実行することにより、開始される。
【0092】
図10に示すように、CPU31は、クライアントドキュメントを編集する為の操作(以下、「編集操作」という。)を、入力部34を介して検出したか判定する(S61)。CPU31は、編集操作を検出したと判定した場合(S61:YES)、第1クライアント処理(
図11参照)を実行する(S63)。
【0093】
図11を参照し、第1クライアント処理について説明する。CPU31は、編集操作に応じてクライアントドキュメントを編集する(S81)。CPU31は、クライアントドキュメントのバージョン、編集操作に応じたコマンド、パス、及び値を含む編集指示を生成する(S83)。CPU31は、生成した編集指示をサーバ装置2に対して送信する(S85)。CPU31は、編集指示に含まれるバージョン、コマンド、パス、及び値を含む履歴レコードを、履歴情報として記憶部32に記憶する(S87)。CPU31は、第1クライアント処理を終了し、処理をクライアントメイン処理(
図10参照)に戻す。
図10に示すように、CPU31は、第1クライアント処理(S63)の終了後、処理をS61に戻す。
【0094】
CPU31は、編集操作を検出していないと判定した場合(S61:NO)、サーバ装置2から送信されたOK応答を受信したか判定する(S65)。CPU31は、OK応答を受信したと判定した場合(S65:YES)、第2クライアント処理(
図12参照)を実行する(S67)。
【0095】
図12を参照し、第2クライアント処理について説明する。CPU31は、記憶部32に記憶された履歴情報のうち、受信したOK応答に含まれるバージョン更新情報により示される更新前バージョンを含む履歴レコードを、確認済みの履歴レコードとして設定する(S91)。CPU31は、クライアントドキュメントのバージョンを、受信したOK応答に含まれるバージョン更新情報により示される更新後バージョンに更新する(S93)。CPU31は第2クライアント処理を終了し、処理をサーバメイン処理(
図10参照)に戻す。
図10に示すように、CPU31は、第2クライアント処理(S67)の終了後、処理をS61に戻す。
【0096】
CPU31は、OK応答を受信していないと判定した場合(S65:NO)、サーバ装置2から送信されたNG応答を受信したか判定する(S69)。CPU31は、NG応答を受信したと判定した場合(S69:YES)、処理をS61に戻す。
【0097】
CPU31は、NG応答を受信していないと判定した場合(S69:NO)、サーバ装置2から送信された変更通知を受信したか判定する(S73)。CPU31は、変更通知を受信していないと判定した場合(S73:NO)、処理をS61に戻す。CPU31は、変更通知を受信したと判定した場合(S73:YES)、第3クライアント処理(
図13参照)を実行する(S75)。CPU31は、第3クライアント処理の終了後、処理をS61に戻す。
【0098】
図13を参照し、第3クライアント処理について説明する。CPU31は、受信した変更通知に含まれるバージョン更新情報のうち変更前バージョンと、記憶部32に記憶されたクライアントドキュメントのバージョンとを比較する(S111)。CPU31は、変更通知に含まれるバージョン更新情報のうち変更前バージョンと、記憶部32に記憶されたクライアントドキュメントのバージョンとが一致すると判定した場合(S115:YES)、処理をS151(
図14参照)に進める。
【0099】
図14に示すように、CPU31は、変更通知に含まれるコマンド及びパスを取得する。CPU31は、取得したコマンドにより示される編集方法で、クライアントドキュメントのうち取得したパスにより示される編集対象を編集する(S151)。CPU31は、S73(
図10参照)で受信した変更通知に含まれるバージョン更新情報、コマンド、パス、及び値を含む履歴レコードを、履歴情報として記憶部32に記憶する。(S155)。CPU31は、処理をクライアントメイン処理(
図10参照)に戻す。
【0100】
一方、
図13に示すように、CPU31は、受信した変更通知に含まれるバージョン更新情報のうち変更前バージョンと、記憶部32に記憶されたクライアントドキュメントのバージョンとが相違すると判定した場合(S115:NO)、処理をS117に進める。CPU31は、後述のS145、S91で確認済みの設定がされていない履歴レコードのうち、後述のS119で選択されていない履歴レコードを1つ選択する(S119)。CPU31は、選択した履歴レコードに含まれるコマンド及びパスと、S73(
図10参照)で受信した変更通知に含まれるコマンド及びパスとに基づき、クライアントドキュメントのうち変更通知に含まれるコマンドにより示される編集方法で編集する編集対象を、以下に示す方法で新たに決定する。
【0101】
CPU31は、S73で受信した変更通知と、S119で選択した履歴レコードとが、疎関係であるか判定する(S121)。CPU31は、疎関係であると判定した場合(S121:YES)、処理をS133に進める。CPU31は、変更通知に含まれるパスを維持する(S133)。この場合、クライアントドキュメントのうち、変更通知に含まれるパスにて示される編集対象が、変更通知にて示されるコマンドにて示される編集方法で編集される(S151(
図14参照)、後述)。CPU31は、処理をS141に進める。
【0102】
CPU31は、疎関係でないと判定した場合(S121:NO)、S73で受信した変更通知と、S119で選択した履歴レコードとが、条件付き疎関係であるか判定する(S123)。CPU31は、条件付き疎関係であると判定した場合(S123:YES)、処理をS135に進める。この場合、クライアントドキュメントが変更通知に基づいて変更されることにより、次に実行される履歴レコードに基づいて編集されるクライアントドキュメントの編集対象が変更されたことになるので、CPU31は、変更後の編集対象を示すパスを決定する(S135)。この場合、履歴情報に基づく編集が行われる前のクライアントドキュメントは、はじめに変更通知に基づいて編集され、その後、決定されたパスにて示される編集対象が、履歴情報にて示されるコマンドにて示される編集方法で編集される(S151(
図14参照)、後述)。CPU31は、処理をS141に進める。
【0103】
CPU31は、条件付き疎関係でないと判定した場合(S123:NO)、S73で受信した変更通知と、S19で選択した履歴レコードとが、受信コマンド優先関係であるか判定する(S125)。CPU31は、受信コマンド優先関係であると判定した場合(S125:YES)、処理をS137に進める。CPU31は、変更通知に含まれるパスを維持する(S137)。この場合、クライアントドキュメントのうち、変更通知に含まれるパスにて示される編集対象が、変更通知にて示されるコマンドにて示される編集方法で編集される(S151(
図14参照)、後述)。CPU31は、処理をS141に進める。
【0104】
CPU31は、S141において、履歴情報のうち確認済みの設定がされていない履歴レコードを、S119で全て選択したか判定する(S141)。CPU31は、選択していない履歴レコードが残存する場合(S141:NO)、処理をS119に戻す。CPU31は、選択されていない履歴レコードを選択し(S119)、処理を繰り返す。CPU31は、確認済みの設定がされていない履歴レコードを、S119で全て選択したと判定した場合(S141:YES)、処理をS151(
図14参照)に進める。
【0105】
図14に示すように、CPU31は、変更通知に含まれるコマンド、及び、S133、S135、S137(
図13参照)で決定したパスを取得する。CPU31は、取得したコマンドにより示される編集方法で、クライアントドキュメントのうち取得したパスにより示される編集対象を編集する(S151)。CPU31は、S73(
図10参照)で受信した変更通知に含まれるバージョン更新情報、コマンド、及び値、並びに、S133、S135、S137(
図13参照)で決定したパスを含む履歴レコードを、履歴情報として記憶部32に記憶する(S155)。CPU31は、処理をクライアントメイン処理(
図10参照)に戻す。
【0106】
一方、
図13に示すように、CPU31は、受信コマンド優先関係でないと判定した場合(S125:NO)、S73で受信した変更通知と、S119で選択した履歴レコードとが、履歴コマンド優先関係であるか判定する(S127)。CPU31は、履歴コマンド優先関係であると判定した場合(S127:YES)、クライアントキュメントの編集を禁止する(S131)。CPU31は、処理をS145に進める。又、CPU31は、履歴コマンド優先関係でないと判定した場合(S127:NO)、S73で受信した変更通知と、S119で選択した履歴レコードとが、衝突関係であると判定する。CPU31は、クライアントドキュメントを、履歴レコードに基づいて編集が行われる前の状態に戻す(S143)。CPU31は、S119で選択した履歴レコードを、確認済みの履歴レコードとして設定する(S145)。CPU31は、処理をクライアントメイン処理(
図10参照)に戻す。
【0107】
<本実施形態の作用、効果>
以上のように、サーバ装置2は、クライアント装置3が編集対象とするドキュメントのバージョンと、サーバドキュメントのバージョンとが相違する場合(S15:NO)、クライアント装置3が送信した編集指示に含まれるコマンド及びパスと、履歴レコードに含まれるコマンド及びパスとに基づき、サーバドキュメントの編集対象を新たに決定する(S21~S39)。以下、サーバ装置2に関する効果の説明において、クライアント装置3が送信した編集指示に含まれるコマンドにて示される編集方法を、「第1編集方法」といい、編集指示に含まれるパスにて示される編集対象を、「第1編集対象」という。又、サーバ装置2の記憶部22に記憶された履歴レコードに含まれるコマンドにて示される編集方法を、「第2編集方法」といい、履歴レコードに含まれるパスにて示される編集対象を、「第2編集対象」という。
【0108】
サーバ装置2は、クライアント装置3が編集指示において編集対象とするバージョンのドキュメント(第1ドキュメント)について、第1編集対象が第1編集方法で編集された後、編集後の第1ドキュメントの第2編集対象が第2編集方法で編集された場合の編集結果と一致するように、サーバドキュメント(第2ドキュメント)の編集対象を新たに決定する。この場合、第1ドキュメントが第1編集対象及び第1編集方法に基づき編集された後、第2編集対象及び第2編集方法に基づき編集された場合と、第1ドキュメントが第2編集対象及び第2編集方法に基づき編集された後、第1編集対象及び第1編集方法に基づき編集された場合とで、編集結果は同一となる。従って、複数のクライアント装置3が共通のサーバドキュメントを編集する場合において、サーバ装置2は、編集タイミングが変化しても編集結果を一致させることができる。従って、クライアント装置3は、他のクライアント装置3と協働して共通のドキュメントを効率よく編集できる。
【0109】
サーバ装置2は、クライアント装置3から受信した編集指示と履歴レコードとが疎関係である場合(S21:YES)、編集指示に含まれるパスを維持する(S33)。この場合、サーバ装置2は、クライアント装置3から送信された編集指示に含まれるパスをそのまま適用し、コマンドにより示される第1編集方法により第2ドキュメントを編集できる。
【0110】
サーバ装置2は、クライアント装置3から受信した編集指示と履歴レコードとが条件付き疎関係である場合(S23:YES)、編集指示に含まれるパスにより示される第1編集対象を変更する(S35)。この場合、サーバ装置2は、第1ドキュメントの第1編集対象が第1編集方法で編集された後で第2編集対象が第2編集方法で編集された場合の編集結果と一致するように第2ドキュメントを編集する編集処理を、第1編集対象を変更することによって実現できる。
【0111】
サーバ装置2は、クライアント装置3から受信した編集指示と履歴レコードとが受信コマンド優先関係である場合(S25:YES)、編集指示に含まれるパスを維持する(S37)。この場合、サーバ装置2は、クライアント装置3から送信された編集指示に含まれるパスをそのまま適用し、コマンドにより示される第1編集方法により第2ドキュメントを編集できる。
【0112】
サーバ装置2は、クライアント装置3から受信した編集指示と履歴レコードとが履歴コマンド優先関係又は衝突関係である場合(S27:YES/S27:NO)、第2ドキュメントの編集を禁止する(S31)。これにより、サーバ装置2は、第1ドキュメントの第1編集対象が第1編集方法で編集された後、編集後の第1ドキュメントの第2編集対象が第2編集方法で編集された場合の編集結果と一致するような編集方法がない場合、第2ドキュメントの編集を禁止できる。
【0113】
クライアント装置3は、サーバ装置2が変更通知により通知したバージョン更新情報に含まれる更新前バージョンと、記憶部32に記憶されたクライアントドキュメントのバージョンとが一致しない場合(S115:NO)、サーバ装置2が送信した変更通知に含まれるコマンド及びパスと、履歴レコードに含まれるコマンド及びパスとに基づき、クライアントドキュメントの編集対象を新たに決定する(S121~S137)。以下、クライアント装置3に関する効果の説明において、サーバ装置2が送信した変更通知に含まれるコマンドにて示される編集方法を、「第1編集方法」といい、変更通知に含まれるパスにて示される編集対象を、「第1編集対象」という。又、クライアント装置3の記憶部32に記憶された履歴レコードに含まれるコマンドにて示される編集方法を、「第2編集方法」といい、履歴レコードに含まれるパスにて示される編集対象を、「第2編集対象」という。
【0114】
クライアント装置3は、履歴レコードに基づき編集される前のクライアントドキュメント(第1ドキュメント)について、第1編集対象が第1編集方法で編集された後、編集後の第1ドキュメントの第2編集対象が第2編集方法で編集された場合の編集結果と一致するように、履歴レコードに基づき編集された後のクライアントドキュメント(第2ドキュメント)の編集対象を新たに決定する。この場合、第1ドキュメントが第1編集対象及び第1編集方法に基づき編集された後、第2編集対象及び第2編集方法に基づき編集された場合と、第1ドキュメントが第2編集対象及び第2編集方法に基づき編集された後、第1編集対象及び第1編集方法に基づき編集された場合とで、編集結果は同一となる。この場合、サーバ装置2は、クライアント装置3が編集指示を送信する契機となったクライアントドキュメントの編集タイミングと、クライアント装置3が変更通知を受信したことに基づくクライアントドキュメントの編集タイミングとの関係に関わらず、クライアントドキュメントを適切に編集できる。
【0115】
クライアント装置3は、サーバ装置2から受信した変更通知と履歴レコードとが疎関係である場合(S121:YES)、変更通知に含まれるパスを維持する(S133)。この場合、クライアント装置3は、サーバ装置2から送信された変更通知に含まれるパスをそのまま適用し、コマンドにより示される第1編集方法により第2ドキュメントを編集できる。
【0116】
クライアント装置3は、サーバ装置2から受信した変更通知と履歴レコードとが条件付き疎関係である場合(S123:YES)、履歴情報に含まれるパスにより示される第2編集対象を変更する(S135)。この場合、クライアント装置3は、第1ドキュメントの第2編集対象が第2編集方法で編集された後で第1編集対象が第1編集方法で編集された場合の編集結果と一致するように第1ドキュメントを編集する編集処理を、第2編集対象を変更することによって実現できる。
【0117】
クライアント装置3は、サーバ装置2から受信した変更通知と履歴レコードとが受信コマンド優先関係である場合(S125:YES)、変更通知に含まれるパスを維持する(S137)。この場合、クライアント装置3は、サーバ装置2から送信された変更通知に含まれるパスをそのまま適用し、コマンドにより示される第1編集方法により第2ドキュメントを編集できる。
【0118】
クライアント装置3は、サーバ装置2から受信した変更通知と履歴レコードとが履歴コマンド優先関係である場合(S127:YES)、第2ドキュメントの編集を禁止する(S131)。これにより、クライアント装置3は、第1ドキュメントの第1編集対象が第1編集方法で編集された後、編集後の第1ドキュメントの第2編集対象が第2編集方法で編集された場合の編集結果と一致するような編集方法がない場合、第2ドキュメントの編集を禁止できる。
【0119】
クライアント装置3は、サーバ装置2から受信した変更通知と履歴レコードとが衝突関係である場合(S127:NO)、第2ドキュメントを第1ドキュメントに戻す(S143)。これにより、クライアント装置3は、サーバ装置2に記憶されたサーバドキュメントとクライアントドキュメントとを一致させ、双方の同期をとることができる。
【0120】
<変形例>
図15に示す第6通信シーケンスでは、クライアント装置3Aのユーザのみによってクライアントドキュメントの編集が実行され、且つサーバ装置2のサーバドキュメントも同様に編集される。第6通信シーケンスは、クライアント装置3Aのユーザによってクライアントドキュメントが繰り返し編集されるという点で、第1通信シーケンス(
図3参照)と相違する。なお
図15では、クライアント装置3Bは省略されている。第6通信シーケンスにおいて、サーバ装置2及びクライアント装置3に記憶されるドキュメントをJSON形式で示す。第1通信シーケンスと同様の手順については、説明を簡略化する。
【0121】
クライアント装置3Aは、サーバ装置2からVer.1のドキュメントを取得する(S701、S703)。クライアント装置3Aは、受信したVer.1のドキュメントを、クライアントドキュメントとして記憶部32に記憶する(S705)。
【0122】
クライアント装置3Aのユーザが、Ver.1のクライアントドキュメントのパス「/a/b/d」の値を「1」から「4」に変更する操作を入力したとする。この場合、クライアント装置3Aは、ユーザの操作に応じてクライアントドキュメントを編集する(S707)。クライアント装置3Aは、コマンド「REPLACE」、バージョン「1」、パス「/a/b/d」、及び値「4」を含む編集指示を、サーバ装置2に送信する(S709)。又、クライアント装置3Aは、送信した編集指示に基づき、バージョン、コマンド、パス、及び値を履歴情報として記憶部32に記憶する(S711)。
【0123】
サーバ装置2は、S711でクライアント装置3Aから送信された編集指示を受信し、編集指示に含まれるバージョン「1」と、サーバドキュメントのバージョン「1」とが一致すると判定する。サーバ装置2は、編集指示に基づいてサーバドキュメントを編集し(S713)、バージョンを更新する(S713)。更に、サーバ装置2は、履歴情報を記憶部22に記憶する(S715)。サーバ装置2は、バージョン更新情報「1→2」を含むOK応答をクライアント装置3Aに送信する(S717)。
【0124】
S717でサーバ装置2により送信されたOK応答をクライアント装置3Aが受信する前に、クライアント装置3Aのユーザが、クライアントドキュメントのパス「/a/b/d」の値を「4」から「5」に変更する操作を入力したとする。この場合、クライアント装置3Aは、S707で編集されたクライアントドキュメントを、ユーザの操作に応じて編集する(S719)。なお、クライアント装置3AはOK応答を受信していないので、クライアントドキュメントのバージョンは更新されておらず、Ver.1のままである。クライアント装置3Aは、コマンド「REPLACE」、バージョン「1」、パス「/a/b/d」、及び値「5」を含む編集指示を、サーバ装置2に送信する(S721)。又、クライアント装置3Aは、送信した編集指示に基づき、バージョン、コマンド、パス、及び値を履歴情報として記憶部32に記憶する(S723)。
【0125】
サーバ装置2は、S721でクライアント装置3Aから送信された編集指示を受信する。サーバ装置2は、編集指示に含まれるバージョン「1」と、サーバドキュメントのバージョン「2」とが相違すると判定する。
【0126】
ここで、第4通信シーケンス(
図6参照)では、履歴情報と編集指示とでコマンド及びパスが一致する場合、サーバ装置2はサーバドキュメントを編集しない(S657、
図6参照)。しかし、第6通信シーケンスにおいて、サーバ装置2は、S715で編集指示を送信した送信先と、次に受信した編集指示の送信元とが、何れも共通のクライアント装置3Aである場合、履歴情報と編集指示とでコマンド及びパスが一致する場合でも、サーバ装置2は、記憶部に記憶されたサーバドキュメントを編集する(S725)。サーバ装置2は、送信した編集指示に基づき、バージョン、コマンド、パス、及び値を履歴情報として記憶部32に記憶する(S727)。
【0127】
<その他の変形例>
本発明は上記実施形態及び変形例に限定されず、種々の変更が可能である。サーバドキュメントは、サーバ装置2の記憶部22に記憶される場合に限定されない。クライアントドキュメントは、クライアント装置3の記憶部32に記憶される場合に限定されない。例えば、サーバドキュメント及びクライアントドキュメントの少なくとも一方は、及びクライアント装置3は、ネットワーク回線4に接続する他のサーバに記憶されてもよい。
【0128】
サーバ装置2において判定される編集指示と履歴情報との関係は、疎関係、条件付き疎関係、受信コマンド優先関係、履歴コマンド優先関係、及び衝突関係に限定されない。同様に、クライアント装置3において判定される変更通知と履歴情報との関係は、疎関係、条件付き疎関係、受信コマンド優先関係、履歴コマンド優先関係、及び衝突関係に限定されない。サーバ装置2及びクライアント装置3の少なくとも一方は、上記の各関係の一部のみを判定してもよい。又、サーバ装置2及びクライアント装置3の少なくとも一方は、上記以外の関係性を判定してもよい。上記では、ドキュメントの形式の例として、JSON形式及び配列方式を具体的に挙げて説明したが、ドキュメントの形式は他の形式であってもよい。
【0129】
サーバ装置2は、サーバドキュメントのバージョンに1ずつ加算することにより、バージョンを更新した(S53)。サーバ装置2がバージョンを更新する方法は、この方法に限定されない。例えばサーバ装置2は、バージョンに加えてエディションを管理してもよい。この場合、サーバ装置2は、バージョンとエディションとを別個に適宜更新してもよい。又、サーバ装置2は、バージョンを乱数により管理してもよい。
【0130】
<その他>
本発明のサーバ装置において、S11の処理を行うCPU21は、本発明の「受信手段」の一例である。S51の処理を行うCPU21は、本発明の「編集手段」「第1編集手段」「第2編集手段」の一例である。S53の処理を行うCPU21は、本発明の「更新手段」の一例である。S55の処理を行うCPU21は、本発明の「記憶手段」の一例である。S31の処理を行うCPU21は、本発明の「第1編集禁止手段」「第2編集禁止手段」の一例である。
【0131】
本発明のクライアント装置において、S85の処理を行うCPU31は、本発明の「送信手段」の一例である。S73の処理を行うCPU31は、本発明の「受信手段」の一例である。S93の処理を行うCPU31は、本発明の「更新手段」の一例である。S151の処理を行うCPU31は、本発明の「編集手段」「第1編集手段」「第2編集手段」「第3編集手段」の一例である。S155の処理を行うCPU31は、本発明の「記憶手段」の一例である。S131の処理を行うCPU31は、本発明の「第1編集禁止手段」の一例である。S141の処理を行うCPU31は、本発明の「UNDO手段」の一例である。
【0132】
本発明のサーバプログラムにおいて、S11の処理は、本発明の「受信ステップ」の一例である。S51の処理は、本発明の「編集ステップ」「第1編集ステップ」「第2編集ステップ」の一例である。S53の処理は、本発明の「更新ステップ」の一例である。S55の処理は、本発明の「記憶ステップ」の一例である。S31の処理は、本発明の「第1編集禁止ステップ」「第2編集禁止ステップ」の一例である。
【0133】
本発明のクライアント装置において、S85の処理は、本発明の「送信ステップ」の一例である。S73の処理は、本発明の「受信ステップ」の一例である。S93の処理は、本発明の「更新ステップ」の一例である。S151の処理は、本発明の「編集ステップ」「第1編集ステップ」の一例である。S155の処理は、本発明の「記憶ステップ」の一例である。S131の処理は、本発明の「第1編集禁止ステップ」の一例である。S141の処理は、本発明の「UNDOステップ」の一例である。
【符号の説明】
【0134】
1 :通信システム
2 :サーバ装置
3、3A、3B、3C :クライアント装置
4 :ネットワーク回線
4A :アクセスポイント
21、31 :CPU
22、32 :記憶部