JP5710156B2 - コンテンツ・データ中のオブジェクトの共同編集を可能にする方法、並びにそのコンピュータ・システム及びコンピュータ・プログラム - Google Patents

コンテンツ・データ中のオブジェクトの共同編集を可能にする方法、並びにそのコンピュータ・システム及びコンピュータ・プログラム Download PDF

Info

Publication number
JP5710156B2
JP5710156B2 JP2010124795A JP2010124795A JP5710156B2 JP 5710156 B2 JP5710156 B2 JP 5710156B2 JP 2010124795 A JP2010124795 A JP 2010124795A JP 2010124795 A JP2010124795 A JP 2010124795A JP 5710156 B2 JP5710156 B2 JP 5710156B2
Authority
JP
Japan
Prior art keywords
data
client
user
change instruction
branch
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2010124795A
Other languages
English (en)
Other versions
JP2011253229A (ja
Inventor
辰也 石原
辰也 石原
新 齋藤
新 齋藤
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Priority to JP2010124795A priority Critical patent/JP5710156B2/ja
Priority to US13/118,647 priority patent/US8639659B2/en
Publication of JP2011253229A publication Critical patent/JP2011253229A/ja
Application granted granted Critical
Publication of JP5710156B2 publication Critical patent/JP5710156B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q10/00Administration; Management
    • G06Q10/10Office automation; Time management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/194Calculation of difference between files
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/197Version control

Description

本発明は、コンテンツ・データ中のオブジェクトの共同編集を可能にする方法、並びにそのコンピュータ・システム及びコンピュータ・プログラムに関する。
ウェブベースのオフィス・ソフトウェア(以下、Webオフィス・ソフトウェア)とは、共同編集をサポートするウェブ・アプリケーションの1つである。Webオフィス・ソフトウェアとして、例えばGoogle(商標)ドキュメント(Google Docs)(下記非特許文献1を参照)、Zoho(商標) Office(Zoho Docs、Zoho Sheet、Zoho Show、Zoho Writer)及びOpenGooがある。Webオフィス・ソフトウェアでは、複数のユーザがネットワークを介してデータを共同編集することが可能であり、サーバが編集中のデータを一元管理する(下記非特許文献2を参照)。
しかしながら、共同編集が可能であることによって、Webオフィス・ソフトウェアは次の問題点を有する:(1)編集されたくないオブジェクトが、他の共同編集者(ユーザ)によって編集されてしまうことがある;(2)例えばGoogle Docsは文章の一部をロックする機能を提供している。しかし、この機能はメインユーザ以外の他のユーザの編集をも妨げてしまう。
インターネット(URL:http://www.google.com/google-d-s/intl/en/tour1.html) インターネット(URL:http://www.google.com/google-d-s/intl/en/tour2.html) インターネット(URL:http://en.wikipedia.org/wiki/Operational_transformation) インターネット(URL:http://www.waveprotocol.org/whitepapers/operational-transform) インターネット(URL:http://portal.acm.org/citation.cfm?id=675712), Haifeng Shen, Chengzheng Sun, "A Log Compression Algorithm for Operation-based Version Control Systems," Computer Software and Applications Conference, Annual International, p. 867, 26th Annual International Computer Software and Applications Conference, 2002 インターネット(http://portal.acm.org/citation.cfm?id=587088), Aguido Horatio Davis等、"Generalizing operational transformation to the standard general markup language", Computer Supported Cooperative Work, Proceedings of the 2002 ACM conference on Computer supported cooperative work, ACM, 58-67, 2002
Webオフィス・ソフトウェアにおいて、他のユーザの編集を妨げることなく、他のユーザに編集されたくないオブジェクトを指定可能にすることが求められている。
本発明は、サーバ・コンピュータ(以下、サーバともいう)がコンテンツ・データ中のオブジェクトの共同編集を可能にする方法を提供する(図7Aを参照)。
当該サーバは、第1のユーザに関連付けられた第1のクライアント・コンピュータ(以下、第1のクライアントともいう)と第2のユーザに関連付けられた第2のクライアント・コンピュータ(以下、第2のクライアントともいう)とにネットワークを介して接続可能である。
上記方法は、サーバが、
上記第2のユーザによる編集が許されないオブジェクトが上記第1のユーザによって指定されることに応じて、当該指定されたオブジェクト(以下、指定オブジェクト)を示す情報を上記第1のクライアントから受信するステップと(図7A(以下、同じ))、701)、
上記指定オブジェクトを示す情報を受信後に、上記指定オブジェクトについての上記第2のユーザによる変更の指示を示す変更指示データを上記第2のクライアントから受信し、当該受信した変更指示データを上記記憶部に格納するステップと(702〜703)、
上記第2のクライアントからの上記変更指示データの受信に応じて、上記指定オブジェクトについてのブランチ・データを作成するステップ(704)と、
上記指定オブジェクトを示す情報を受信後に、上記指定オブジェクトについての上記第1のユーザによる変更の指示を示す変更指示データを上記第1のクライアントから受信し、当該受信した変更指示データを上記記憶部に格納するステップであって、上記ブランチ・データに対して、上記第1のクライアントから受信した変更指示データに対応する操作が反映される、上記格納するステップ(705〜706)と、
上記第1のクライアントから受信した上記変更指示データに対応する操作列(第1の操作列)と上記第2のクライアントから受信した上記変更指示データに対応する操作列(第2の操作列)とをマージすることが可能であるかをオペレーショナル・トランスフォーメーション(以下、OTともいう)を使用して判断するステップ(709)と、
上記マージすることが可能であることに応じて、OTを使用して、上記第1の操作列を上記第2のユーザのコンテンツ・データに適用するステップ(710)と
を実行すること含む。
本発明の1つの実施態様において、上記マージすることが可能であることが、上記指定オブジェクトについてのブランチ・データの作成後における上記第2の操作列全てをOTで計算した結果であるHtが空であることである(図8、804)。
本発明の別の実施態様において、上記マージすることが可能であることが、上記指定オブジェクトについてのブランチ・データの作成後における上記第2の操作列全てをOTで計算した結果であるHtと、上記指定オブジェクトについてのブランチ・データの作成後における上記第1の操作列全てをOTで計算した結果であるHbとの距離がゼロであることである(804)。
本発明の1つの実施態様において、上記方法はまた、サーバが、上記適用するステップの後に、上記ブランチ・データ及び上記第1のクライアントから受信した上記変更指示データを上記記憶部から削除するステップをさらに実行することを含む。
本発明の1つの実施態様において、上記判断するステップが、上記第1の操作列と上記第2の操作列との差分の大小を第1のユーザに示すためのユーザ・インタフェースに、当該差分の大小についてのデータを提供するステップをさらに含む。
本発明の1つの実施態様において、上記方法はまた、サーバが、
上記指定オブジェクトが指定される前に、上記第1のユーザによるオブジェクトの変更の指示を示す変更指示データを上記第1のクライアントから受信するステップと、
当該受信した変更指示データを用いて、上記第2のユーザのコンテンツ・データを同期するステップと
を実行することをさらに含む。
本発明の実施態様において、上記指定オブジェクトについてのブランチ・データの作成後に、上記ブランチ・データ及び上記第1のクライアントからの上記変更指示データが上記記憶部中の第1のバッファに格納され、上記第2のクライアントからの上記変更指示データが上記記憶部中の第2のバッファに格納される。
本発明はまた、サーバに上記方法のいずれか1つに記載の各ステップを実行させるコンピュータ・プログラムを提供する。
本発明はまた、第1のクライアントと第2のクライアントとの間においてコンテンツ・データ中のオブジェクトの共同編集を可能にする方法を提供する(図7Bを参照)。当該方法において、上記第1のクライアントは上記第1のユーザによるオブジェクトの変更の指示を示す変更指示データを格納する第1の記憶部を備えており、及び上記第2のクライアントは上記第2のユーザによるオブジェクトの変更の指示を示す変更指示データを格納する第2の記憶部を備えている。
上記方法は、
上記第2のクライアントが、
上記第2のユーザによる編集が許されないオブジェクトが上記第1のユーザによって指定されることに応じて、当該指定オブジェクトを示す情報を上記第1のクライアントから受信するステップと(図7B(以下、同じ))、722)、
上記指定オブジェクトを示す情報を受信後に、上記指定オブジェクトについての上記第2のユーザによる変更の指示を示す変更指示データを上記第2の記憶部に格納するステップと、
上記変更指示データを上記第1のクライアントに送信するステップと(723)
を実行することを含み、
上記第1のクライアントが、
上記第2のクライアントからの最初の上記変更指示データの受信に応じて、上記指定オブジェクトについてのブランチ・データを上記第1の記憶部内に作成するステップと(724)、
上記指定オブジェクトを示す情報を受信後に、上記指定オブジェクトについての上記第1のユーザによる変更の指示を示す変更指示データを上記第1の記憶部に格納するステップであって、上記ブランチ・データに対して、上記第1のクライアントから受信した変更指示データに対応する操作が反映される、上記格納するステップと(725)、
上記第1のクライアントから受信した上記変更指示データに対応する操作列(第1の操作列)と上記第2のクライアントから受信した上記変更指示データに対応する操作列(第2の操作列)とをマージすることが可能であるかをOTを使用して判断するステップと(727)、
上記マージすることが可能であることに応じて、上記第1の操作列を上記第2のクライアントに送信するステップと(728)
を実行することを含み、
上記第2のクライアントが、
上記第1の操作列を受信することに応じて、OTを使用して、上記第1の操作列を上記第2のユーザのコンテンツ・データに適用するステップ(729)
をさらに実行すること含む。
本発明の1つの実施態様において、上記方法は、上記第1のクライアントが、上記第1の操作列を上記第2のクライアントに送信するステップの後に、ブランチ・データを削除するステップをさらに実行することを含む。
本発明はまた、第1のクライアントと第2のクライアントとの間においてコンテンツ・データ中のオブジェクトの共同編集を可能にする方法を提供する(図7Cを参照)。当該方法において、上記第1のクライアントは上記第1のユーザによるオブジェクトの変更の指示を示す変更指示データを格納する第1の記憶部を備えており、及び上記第2のクライアントは上記第2のユーザによるオブジェクトの変更の指示を示す変更指示データを格納する第2の記憶部を備えている。
上記方法は、
上記第2のクライアントが、
上記第2のユーザによる編集が許されないオブジェクトが上記第1のユーザによって指定されることに応じて、当該指定オブジェクトを示す情報を上記第1のクライアントから受信するステップと(図7C(以下、同じ)、742)、
上記指定オブジェクトについての上記第2のユーザによる変更の指示を示す変更指示データを上記第2の記憶部に格納するステップと、
上記第2のユーザによる最初の変更の指示が生成されることに応じて、上記指定オブジェクトについてのブランチ・データを上記第2の記憶部内に作成するステップであって、上記ブランチ・データに対して、上記変更指示データに対応する操作が反映される、上記作成するステップと(746)、
上記第2のユーザによる最初の変更の指示が生成されることに応じて、上記指定オブジェクトが変更されたことを示すデータを第1のクライアントに送信するステップと(744)
を実行することを含み、
上記第1のクライアントが、
上記指定オブジェクトが変更されたことを示すデータを受信することに応じて、上記第1のユーザによる変更の指示を示す変更指示データを上記第2のクライアントに送信するステップと(745)
を実行することを含み、
上記第2のクライアントが、
上記第1のクライアントからの上記変更指示データに対応する操作列(第1の操作列)と上記第2のクライアントからの上記変更指示データに対応する操作列(第2の操作列)とをマージすることが可能であるかをOTを使用して判断するステップと(747)、
上記マージすることが可能であることに応じて、上記第1の操作列を上記第1のクライアントに送信するステップと(748)
を実行することを含み、
上記第1のクライアントが、
OTを使用して、上記第2のクライアントから送信された上記第1の操作列を上記第2のユーザのコンテンツ・データに適用するステップ(749)
を実行することを含む。
本発明の1つの実施態様において、上記方法は、
上記第1のクライアントが、
上記第2のユーザによって編集されたコンテンツ・データを表示させるという上記第1のユーザの指示に応じて、上記第2のユーザによって編集されたコンテンツ・データを表示するステップと、
上記第1の操作列と上記第2の操作列との差分の大小を第1のユーザに示すステップと
をさらに実行することを含み、
上記適用するステップが、上記第1のユーザによる指示に従い実行される。
本発明はまた、コンテンツ・データ中のオブジェクトの共同編集を可能にするサーバを提供する。上記サーバ(図3A及び図3B(以下、同じ)、301)は、第1のユーザに関連付けられた第1のクライアント(302a)と第2のユーザに関連付けられた第2のクライアント(302b)とにネットワークを介して接続可能である。
上記サーバは、
上記第2のユーザによる編集が許されないオブジェクトが上記第1のユーザによって指定されることに応じて、当該指定オブジェクトを示す情報を上記第1のクライアントから受信する第1の受信部と、
上記指定オブジェクトを示す情報を受信後に、上記指定オブジェクトについての上記第2のユーザによる変更の指示を示す変更指示データを上記第2のクライアントから受信する第2の受信部と、
上記第2のクライアントからの上記変更指示データの受信に応じて、上記指定オブジェクトについてのブランチ・データを作成する作成部(305)と、
上記指定オブジェクトを示す情報を受信後に、上記指定オブジェクトについての上記第1のユーザによる変更の指示を示す変更指示データを上記第1のクライアントから受信する第3の受信部と、
上記第2のクライアントから受信した上記変更指示データ、上記第1のクライアントから受信した上記変更指示データ、及び上記ブランチ・データを格納する格納部であって、上記ブランチ・データに対して、上記第1のクライアントから受信した変更指示データに対応する操作が反映される、上記格納部(304)と、
上記第1のクライアントから受信した上記変更指示データに対応する操作列(第1の操作列)と上記第2のクライアントから受信した上記変更指示データに対応する操作列(第2の操作列)とをマージすることが可能であるかをOTを使用して判断する判断部(306)と、
上記マージすることが可能であることに応じて、OTを使用して、上記第1の操作列を上記第2のユーザのコンテンツ・データに適用する適用部(307)と
をさらに備えている。上記第1の受信部、上記第2の受信部及び上記第3の受信部は、1つにまとめられていてもよい(303)。
本発明の1つの実施態様において、上記サーバは、上記適用の後に、上記ブランチ・データ及び上記第1のクライアントから受信した上記変更指示データを上記記憶部から削除するバッファ・コントロール部(308)をさらに含む。
本発明の1つの実施態様において、上記サーバは、上記第1の操作列と上記第2の操作列との差分の大小を第1のユーザに示すためのユーザ・インタフェースに、当該差分の大小についてのデータを提供する提供部(309)をさらに備えている。
本発明の1つの実施態様において、上記サーバは、上記指定オブジェクトが指定される前に、上記第1のユーザによるオブジェクトの変更の指示を示す変更指示データを受信する。また、上記サーバは、当該受信した変更指示データを用いて、上記第2のユーザのコンテンツ・データを同期する。
本発明では、ユーザは、他のユーザの編集作業を妨げることなく、コンテンツ・データ中のオブジェクト単位で他のユーザに変更されたくない部分を指定することができるので、効率的に共同編集が可能である。
本発明ではまた、共同編集のユーザ全員が、コンテンツ・データ中のオブジェクトが保護されているかどうかを意識することなく、全てのオブジェクトを自由に編集可能である。
本発明ではまた、共同編集者の数は多い場合に、他のユーザによる予期せぬ変更に対処することができる。
本発明は、例えば、ブレインストーミング等のインタラクティブな会議形式で自由にスライドで意見を出し合いつつも、自分の意見は編集されたくないが出来るだけ同じ内容を共有したい場面で有効である。
本発明は、例えば、e−ラーニングで生徒が講義資料を共有し、講義資料に自由に書き込みを許しつつも、自分のメモを変更されたくないが、出来るだけ同じ内容を共有したい場面で有効である。
本発明の実施形態における、サーバ・コンピュータ及びクライアント・コンピュータに共通のコンピュータ・ハードウェアの基本的なブロック図を示す。 本発明の実施形態における、サーバ及びクライアントの関係を示す。 本発明の実施形態における、サーバ及びクライアントの関係を示す。 本発明の実施形態における、サーバ及びクライアントの関係を示す。 本発明の実施形態における、クライアント同士の関係を示す。 本発明の実施形態における、図2A〜図2Cに示すサーバのブロック構成図を示す。 本発明の実施形態における、図2Dの場合のクライアントのブロック構成図を示す。 第1のクライアントと第2のクライアントとの間で同じ文書を編集した場合に、操作列の送受信で同期に失敗する例を示す。 図4Aの例にOTを適用し、データを同期する例を示す。 OTを適用し、2つの操作列をマージする例を示す。 本発明の実施形態である、トランク・データとブランチ・データとの関係を示すフローチャートである。 本発明の実施形態における、図2A〜図2C及び図3Aに示すようなサーバ−クライアント・システムにおいて、コンテンツ・データ中のオブジェクトの共同編集を可能にするフローを示す。 本発明の実施形態における、図2D及び図3Bに示すようなクライアント−クライアント・システムにおいて、コンテンツ・データ中のオブジェクトの共同編集を可能にするフローを示す。 本発明の実施形態における、図2D及び図3Bに示すようなクライアント−クライアント・システムにおいて、コンテンツ・データ中のオブジェクトの共同編集を可能にするフローを示す。 本発明の実施形態である、図6のステップ616の比較のフローチャートである。 コンテンツの差分を示すグラフである。 本発明の実施形態である、指定オブジェクトが図形である場合のマージの例を示す。 本発明の実施形態である、指定オブジェクトがテキストである場合のマージの例を示す。 本発明の実施形態である、指定オブジェクトがテキストである場合のマージの例を示す。 本発明の実施形態である、指定オブジェクトが複雑なテキストである場合のマージの例を示す。 本発明の実施形態である、トランク・データの操作列とブランチ・データの操作列との差分に従って、マージを促すユーザ・インタフェースの例である。 本発明の実施形態である、ブランチ・データの状態を視覚化することによって、マージを促すユーザ・インタフェースの例である。
本発明の実施形態において、「コンテンツ・データ」とは、ネットワークを介して複数のユーザが共同編集可能なアプリケーションにより作成されたデータである。コンテンツ・データは、例えばワードプロセッサ・ソフトウェア若しくはテキスト・エディタ・ソフトウェアのデータ、スプレッドシート・ソフトウェアのデータ、プレゼンテーション・ソフトウェアのデータ、又はデータベース・ソフトウェアのデータ、又はメッセージ・コラボレーション・ソフトウェアのデータであるが、これらに限定されない。
本発明の実施形態において、「オブジェクト」とは、コンテンツ・データ中のユーザによる編集対象である。オブジェクトは、例えば文字、文字列、図形若しくはそれらの組み合わせ、ページ、(ワーク)シート、又はスライドであるが、これらに限定されない。シートは、例えばスプレッドシート・ソフトウェアのシートである。スライドは、例えばプレゼンテーション・ソフトウェアのスライドである。「オブジェクト」それぞれは、オブジェクトを示す情報によって特定可能である。オブジェクトを示す情報は、例えば識別子(ID)である。
本発明の実施形態において、「サーバ・コンピュータ」(以下、サーバともいう)は、ネットワーク、例えばインタ−ネット、エクストラネット若しくはイントラネット又はその組み合わせを介してクライアント・コンピュータに接続されうる。
本発明の実施形態において、「クライアント・コンピュータ」(以下、クライアントともいう)は、ネットワークを介してコンテンツ・データを編集することが可能な装置であればよい。クライアントは、例えばパーソナル・コンピュータ、パーソナルデジタルアシスタント又は携帯電話であるがこれらに限定されない。また、本発明の実施形態において、第1のクライアント及び第2のクライアントが、同一のハードウェアであるクライアント・コンピュータ内で実現される仮想クライアント・コンピュータであってもよい。当該仮想クライアント・コンピュータは、例えばシン・クライアントである。
本発明の実施形態において、「ネットワーク」は、例えばインターネット、エクストラネット、若しくはイントラネット、又はその組み合わせであってよい。また、「ネットワーク」は、サーバとシン・クライアントとの種々の接続関係も含む。
本発明の実施形態において、「第1のユーザ」は、当該第1のユーザ以外の第2のユーザ(他のユーザともいう)によって編集が許されないオブジェクトを指定したユーザである。
本発明の実施形態において、「第1のクライアント」は、第1のユーザによって操作されるクライアントである。第1のクライアントは、コンテンツ・データを共同編集するために使用される。
本発明の実施形態において、「第2のユーザ」は、第1のユーザ以外のユーザである。なお、ユーザは、他のユーザによって編集が許されないオブジェクトを指定したユーザであれば第1のユーザであり、そうでなければ第2のユーザでありうる。すなわち、ユーザは、第1のユーザ、第2のユーザのいずれでもありうる。
本発明の実施形態において、「第2のクライアント」は、第2のユーザによって操作されるクライアントである。第2のクライアントは、コンテンツ・データを共同編集するために使用される。
「共同編集」とは、少なくとも2つのクライアント・コンピュータの各ユーザが上記コンテンツ・データを編集することである。
本発明の実施形態において、「指定オブジェクト」とは、編集が許されないオブジェクトとして指定されたオブジェクトをいう。編集が許されないオブジェクトとは、第1のユーザが第2のユーザによって編集されたくないオブジェクトであって、第1のユーザによって指定される。
本発明の実施形態において、「指定オブジェクトを示す情報」とは、指定オブジェクトを特定するための情報をいう。指定オブジェクトを示す情報は、例えばオブジェクトの識別子(オブジェクトID)、XMLのエレメントのパス、又は独自のデータ形式で表されうる。
本発明の実施形態において、「変更指示データ」とは、ユーザによるオブジェクトの変更の指示を示すデータである。変更指示データは、例えばXML、JSON(Java Script Object Notation)、又は独自のデータ形式で表されうる。
本発明の実施形態において、「変更指示データに対応する操作列」とは、変更指示データに対応する操作の列(操作列ともいう)をいう(例えば、下記図6を参照)。操作列は、少なくとも1、又は複数の操作を含む。本発明の実施形態において、「第1の操作列」は、第1のクライアントから受信した変更指示データに対応する操作列である。また、発明の実施形態において、「第2の操作列」は、第2のクライアントから受信した変更指示データに対応する操作列である。
本発明の実施形態において、「マージする」とは、第2のクライアントのデータに第1のクライアントの操作列を適用し、第2のクライアントのデータを第1のクライアントのデータと同一のものとした上で、第1のクライアントのブランチ・データを削除することである。
「オペレーショナル・トランスフォーメーション」(Operational Transformation、OT)は、操作変換ともいう。OTの基本的な説明については、下記URLにおいて記載されている;(1)http://en.wikipedia.org/wiki/Operational_transformation(上記非特許文献3)、及び(2)http://www.waveprotocol.org/whitepapers/operational-transform(上記非特許文献4)。下記図4A、図4B及び図5において、OTについて別途説明する。
以下、図面に従って、本発明の実施形態を説明する。本実施形態は、本発明の好適な形態を説明するためのものであり、本発明の範囲をここで示すものに限定する意図はないことを理解されたい。また、以下の図を通して、特に断らない限り、同一の符号は、同一の対象を指す。
図1は、本発明の実施形態における、サーバ・コンピュータ及びクライアント・コンピュータに共通のコンピュータ・ハードウェアの基本的なブロック図を示す。以下、サーバ・コンピュータ及びクライアント・コンピュータをまとめて、コンピュータという。
コンピュータ(101)は、CPU(102)とメイン・メモリ(103)とを含み、これらはバス(104)に接続されている。CPU(102)は好ましくは、32ビット又は64ビットのアーキテクチャに基づくものであり、例えば、インテル社のCore i(商標)シリーズ、Core 2(商標)シリーズ、Atom(商標)シリーズ、Xeon(商標)シリーズ、Pentium(登録商標)シリーズ、Celeron(登録商標)シリーズ、AMD社のPhenom(商標)シリーズ、Athlon(商標)シリーズ、Turion(商標)シリーズ又はSempron(商標)が使用されうる。バス(104)には、ディスプレイ・コントローラ(105)を介して、ディスプレイ(106)、例えば液晶ディスプレイ(LCD)が接続されうる。ディスプレイ(106)は、コンピュータの管理のために、通信回線を介してネットワークに接続されたコンピュータについての情報と、そのコンピュータ上で動作中のソフトウェアについての情報を、適当なグラフィック・インタフェースで表示するために使用される。バス(104)にはまた、S−ATA又はIDEコントローラ(107)を介して、ディスク(108)、例えばハードディスク又はシリコン・ディスクと、ドライブ(109)、例えばCD、DVD又はBDドライブとが接続されうる。バス(104)にはさらに、キーボード・マウスコントローラ(110)又はUSBバス(図示せず)を介して、キーボード(111)及びマウス(112)が接続されうる。
ディスク(108)には、オペレーティング・システム、J2EEなどのJava(登録商標)処理環境を提供するプログラム、その他のプログラム、及びデータが、メイン・メモリにロード可能に記憶されている。
ドライブ(109)は、必要に応じて、CD−ROM、DVD−ROM又はBDからプログラムをディスク(108)にインストールするために使用される。
通信インタフェース(114)は、例えばイーサネット(登録商標)・プロトコルに従う。通信インタフェース(114)は、通信コントローラ(113)を介してバス(104)に接続され、コンピュータ(101)を通信回線(115)に物理的に接続する役割を担い、コンピュータ(101)のオペレーティング・システムの通信機能のTCP/IP通信プロトコルに対して、ネットワーク・インタフェース層を提供する。なお、通信回線は、有線LAN環境、或いは例えばIEEE802.11a/b/g/nなどの無線LAN接続規格に基づく無線LAN環境であってもよい。
図2A〜図2Cは、本発明の実施形態における、サーバ及びクライアントの関係を示す。図2Dは、本発明の実施形態における、クライアント同士の関係を示す。
図2Aは、サーバ(201)が、各クライアント(202a〜202c)とネットワーク(204)を介して接続されていることを示す。
各クライアント(202a〜202c)は、各ユーザ(203a〜203c)によって操作されうる。なお、図2Aでは、クライアントが3台描かれているが、クライアントの数は2台であってもよく、または3台より多くてもよい。
図2Bは、サーバ(211)が、クライアント(212)とネットワーク(214)を介して接続されていることを示す。
クライアント(212)は、仮想クライアント(212a及び212b)を実装している。仮想クライアント(212a及び212b)は、同じオペレーティング・システムを実装していてもよく、又は異なるオペレーティング・システムを実装していてもよい。各クライアント(212a及び212b)は、各ユーザ(213a及び213b)によって操作されうる。なお、図2Bでは、仮想クライアントが2台描かれているが、クライアントの数は3台以上であってもよい。
図2Cは、サーバ(221)が、各シン・クライアント(222a〜222c)と各ネットワーク(224a〜224c)を介して接続されていることを示す。
各シン・クライアント(222a〜222c)は、各ユーザ(223a〜223c)によって操作されうる。なお、図2Cでは、シン・クライアントが3台描かれているが、シン・クライアントの数は2台であってもよく、または3台より多くてもよい。
図2Dは、クライアント(232a)が、ネットワーク(234)を介してクライアント(232b)と接続されていることを示す。
図2Dはサーバが不要な例である。各クライアント(232a及び232b)は、各ユーザ(233a及び233b)によって操作されうる。なお、図2Dでは、クライアントが2台描かれているが、クライアントの数は2台より多くてもよい。
本発明は、図2A〜図2Cのように、サーバ−クライアントの関係にあるネットワーク環境、及び図2Dのように、サーバのないクライアント同士の関係にあるネットワーク環境のいずれにおいても実装可能である。
図3Aは、本発明の実施形態における、図2A〜図2Cに示すサーバのブロック構成図を示す。
サーバ(301)は、クライアント(302a及び302b)と接続している。サーバ(301)は、受信部(303)、記憶部(304)、作成部(305)、判断部(306)及び適用部(307)を備えている。サーバ(301)はまた、バッファ・コントロール部(308)を備えていてもよい。サーバ(301)はさらに、提供部(309)を備えていてもよい。
受信部(303)は、クライアント(302a)及びクライアント(302b)の一方から、指定オブジェクトを示す情報を受信する。また、受信部(303)は、クライアント・コンピュータ(302a)及び/又はクライアント(302b)から、変更指示データを受信する。
記憶部(304)は、バッファA(304a)及びバッファB(304b)を備えていてもよい。バッファA(304a)及びバッファB(304b)は、異なる記憶部内にあってもよい。バッファは、例えばキャッシュであってよい。記憶部(304)は、トランク・データ及びブランチ・データを格納する。トランク(trunk)及びブランチ(branch)は、バージョン管理において使用されている用語である。トランク・データとは、共同編集における幹となるデータであり、一方、ブランチ・データとは、トランク・データから分岐したものであり、指定オブジェクトのコピーである。
記憶部がバッファA(304a)及びバッファB(304b)を備えている場合において、バッファA(304a)が第2のバッファであり、バッファB(304b)が第1のバッファである場合、バッファA(304a)にトランク・データが格納され、及びバッファB(304b)にブランチ・データが格納される。あるいは、バッファA(304a)が第1のバッファであり、バッファB(304b)が第2のバッファである場合、バッファA(304a)にブランチ・データが格納され、及びバッファB(304b)にトランク・データが格納される。
例えば、バッファA(304a)にトランク・データが格納されており及びバッファB(304b)にブランチ・データが格納されている場合、クライアント(302a)が第2のクライアントであり、クライアント(302b)が第1のクライアントである。この場合、バッファA(304a)は、さらにクライアント(302a)からの変更指示データを格納し、バッファB(304b)は、さらにクライアント(302b)からの変更指示データを格納する。また、この場合、クライアント(302a)を操作するユーザが第2のユーザであり、クライアント(302b)を操作するユーザが第1のユーザである。
また、例えば、バッファA(304a)にブランチ・データが格納されており及びバッファB(304b)にトランク・データが格納されている場合、クライアント(302a)が第1のクライアントであり、クライアント(302b)が第2のクライアントである。この場合、バッファA(304a)は、さらにクライアント(302a)からの変更指示データを格納し、バッファB(304b)は、さらにクライアント(302b)からの変更指示データを格納する。また、この場合、クライアント(302a)を操作するユーザが第1のユーザであり、クライアント(302b)を操作するユーザが第2のユーザである。
作成部(305)は、ある指定オブジェクトについての変更指示データを第2のクライアントから最初に受信することに応じて、記憶部(304a)内にブランチ・データを作成する。
判断部(306)は、第1のバッファに蓄積された第1のクライアントからの変更(第1の変更ともいう)と第2のバッファに蓄積された第2のクライアントからの変更(第2の変更ともいう)とがマージ可能であるかどうかをOTを使用して判断する。OTについて、下記図4A、図4B及び図5において説明する。
適用部(307)は、マージ可能であることに応じて、OTを使用して、第1の操作列を、第2のユーザのコンテンツ・データに適用する。
バッファ・コントロール部(308)は、適用部(307)が第1の操作列を第2のユーザのコンテンツ・データに適用後に、ブランチ・データ及び第1のクライアントからの変更指示データを記憶部(304)から削除する。記憶部がバッファ(304a及び304b)を備えている場合、ブランチ・データ及び第1のクライアントからの変更指示データを格納しているバッファそのものをクリアーにするようにしてもよい。
提供部(309)は、第1の操作列と第2の操作列との差分の大小を第1のユーザに示すためのユーザ・インタフェースに、当該差分の大小についてのデータを提供する。
クライアント(302a及び302b)の基本的な構成は、図1に示したとおりである。クライアント(302a)が第1のクライアントであり、クライアント(302b)が第2のクライアントであってもよく、又はクライアント(302a)が第2のクライアントであり、クライアント(302b)が第1のクライアントであってもよい。クライアント(302a)及びクライアント(302b)のいずれも、第1のクライアント又は第2のクライアントになりうる。クライアント(302a及び302b)が第1のクライアントであるか又は第2のクライアントであるかは、当該クライアントのユーザが他のユーザによる編集が許されないオブジェクトを指定する権利を有しているかがどうかによって決まる。すなわち、当該クライアントのユーザが他のユーザによる編集が許されないオブジェクトを指定する権利を有する場合、当該クライアントは第1のクライアントであり、残りのクライアントは第2のクライアントである。当該クライアントのユーザが他のユーザによる編集が許されないオブジェクトを指定する権利を有するかどうかは、例えばデータの所有者であるかどうか、データの管理権限を有するかどうかによって判断される。具体的には、クライアント(302a)は、当該クライアント(302a)のユーザが他のユーザによる編集が許されないオブジェクトを指定する権利を有する場合には第1のクライアントであり、当該権利を有しない場合には第2のクライアントである。クライアント(302a)は、第1のクライアント又は第2のクライアントのいずれでもありうる。クライアント(302b)についても同様である。
図3Bは、本発明の実施形態における、図2Dの場合のクライアントのブロック構成図を示す。
クライアント(312a)は、クライアント(312b)と接続している。クライアント(312a)は、受信部(313)、記憶部(314)、作成部(315)、判断部(316)及び適用部(317)を備えている。クライアント(312a)はまた、バッファ・コントロール部(318)を備えていてもよい。クライアント(312a)はさらに、提供部(319)を備えていてもよい。
受信部(313)は、クライアント(312b)方から、指定オブジェクトを示す情報を受信する。また、受信部(313)は、クライアント・コンピュータ(312b)から、変更指示データを受信する。
記憶部(314)は、バッファA(314a)及びバッファB(314b)を備えていてもよい。記憶部(314)は、トランク・データ及びブランチ・データを格納する。
記憶部がバッファA(314a)及びバッファB(314b)を備えている場合において、バッファA(314a)が第2のバッファであり、バッファB(314b)が第1のバッファである場合、バッファA(314a)にトランク・データが格納され、及びバッファB(314b)にブランチ・データが格納される。あるいは、バッファA(314a)が第1のバッファであり、バッファB(314b)が第2のバッファである場合、バッファA(314a)にブランチ・データが格納され、及びバッファB(314b)にトランク・データが格納される。
例えば、バッファA(314a)にトランク・データが格納されており及びバッファB(314b)にブランチ・データが格納されている場合、クライアント(312a)が第2のクライアントであり、クライアント(312b)が第1のクライアントである。この場合、バッファA(314a)は、さらにクライアント(312a)からの変更指示データを格納し、バッファB(314b)は、さらにクライアント(312b)からの変更指示データを格納する。また、この場合、クライアント(312a)を操作するユーザが第2のユーザであり、クライアント(312b)を操作するユーザが第1のユーザである。
また、例えば、バッファA(314a)にブランチ・データが格納されており及びバッファB(314b)にトランク・データが格納されている場合、クライアント(312a)が第1のコンピュータであり、クライアント(312b)が第2のコンピュータである。この場合、バッファA(314a)は、さらにクライアント(312a)からの変更指示データを格納し、バッファB(314b)は、さらにクライアント(312b)からの変更指示データを格納する。また、この場合、クライアント(312a)が第1のユーザであり、クライアント(312b)が第2のユーザである。
作成部(315)は、ある指定オブジェクトについての変更指示データを第2のクライアントから最初に受信することに応じて、記憶部(314a)内にブランチ・データを作成する。
判断部(316)は、第1のバッファに蓄積された第1のクライアントからの変更(第1の変更ともいう)と第2のバッファに蓄積された第2のクライアントからの変更(第2の変更ともいう)とがマージ可能であるかどうかをOTを使用して判断する。
適用部(317)は、マージ可能であることに応じて、OTを使用して、第1の操作列を、第2のユーザのコンテンツ・データに適用する。
バッファ・コントロール部(318)は、適用部(317)が第1の操作列を第2のユーザのコンテンツ・データに適用後に、ブランチ・データ及び第1のクライアントからの変更指示データを記憶部(314)から削除する。記憶部がバッファ(314a及び314b)を備えている場合、ブランチ・データ及び第1のクライアントからの変更指示データを格納しているバッファそのものをクリアーにするようにしてもよい。
提供部(319)は、第1の操作列と第2の操作列との差分の大小を第1のユーザに示すためのユーザ・インタフェースに、当該差分の大小についてのデータを提供する。
クライアント(312a及び312b)の基本的な構成は、図1に示したとおりである。クライアント(312a)が第1のクライアントであり、クライアント(312b)が第2のクライアントであってもよく、又はクライアント(312a)が第2のクライアントであり、クライアント(312b)が第1のクライアントであってもよい。クライアント(312a)及びクライアント(312b)のいずれも、第1のクライアント又は第2のクライアントになりうる。クライアント(312a及び312b)が第1のクライアントであるか又は第2のクライアントであるかは、当該クライアントのユーザが他のユーザによる編集が許されないオブジェクトを指定する権利を有しているかがどうかによって決まる。すなわち、当該クライアントのユーザが他のユーザによる編集が許されないオブジェクトを指定する権利を有する場合、当該クライアントは第1のクライアントであり、残りのクライアントは第2のクライアントである。当該クライアントのユーザが他のユーザによる編集が許されないオブジェクトを指定する権利を有するかどうかは、例えばデータの所有者であるかどうか、データの管理権限を有するかどうかによって判断される。具体的には、クライアント(312a)は、当該クライアント(312a)のユーザが他のユーザによる編集が許されないオブジェクトを指定する権利を有する場合には第1のクライアントであり、当該権利を有しない場合には第2のクライアントである。クライアント(312a)は、第1のクライアント又は第2のクライアントのいずれでもありうる。クライアント(312b)についても同様である。
図4A、図4B及び図5は、OTの一般的な内容の理解を容易にするために示したものである。
OTの記号の定義について、以下に説明する。
(1)操作列 H のうち i 番目の操作を H[i]とする。
(2)操作列 H に含まれる操作の個数を |H| とする。
(3)操作列 H に含まれる各操作 O は、下記(A)〜(L)に述べる情報を持つ。
(A)O.t は、文書中での操作の種類を示す。
O.t= ins であれば、操作Oが文字列の挿入操作である。
O.t= del であれば、操作Oが文字列の削除の操作である。
(B)O.p は、文書中での操作を適用する位置を示す。
O.t= ins, O.p=1 であれば、文書の1文字目の後に文字を挿入する。
O.t= del, O.p=3 であれば、文書の3文字目の文字を削除する
(C)O.len は、文書中での変更される文字列の長さを示す。変更は文書中に文字を挿入すること、又は文書中の文字を削除することを含む。
文字列“abc”が文書中に挿入されるとき、O.len = 3 である。
(D)O.s は、文書中に挿入する文字列、又は文書から削除される文字列を示す。
文字列“abc”が文書中に挿入されるとき、O.s = “abc” である。
(E)O1 ⊥ O2は、同じ状態の文書に対して起こった操作であることを示す。すなわち、2つの操作O1及びO2は、コンテクスト等価(Context equivalent)であることを示す。コンテクスト等価である場合、OTによってコンテクスト等価でない操作に変換する必要がある
(F)O1 → O2は、O1がO2の前に起こっていることを示す。
O2の操作には既にO1の操作の影響が含まれているので、OTの必要はない。
(G)O1 |→ O2 は、O1がO2の前に起こっていて、且つ、O1を実行後の状態はO2を実行する前の状態であることを示す。すなわち、2つの操作O1とO2は、コンテクスト先行(Context preceding)である。
(H)IT(Ob, Oa) は、インクルージョン・トランスフォーメーション(Inclusion Transformation)であり、Ob の操作にOaの操作の影響を含めて、新しい操作Ob’を作ることを示す。
Oa⊥ Ob のとき、Oa |→ Ob’ となる。
(I)ET(Ob, Oa) は、エクスクルージョン・トランスフォーメーション(Exclusion Transformation)であり、Ob の操作からOaの操作の影響を取り除くことを示す。
(J)SWAP(Ob, Oa)は、Oa |→Ob のときに Ob’ |→ Oa’ となる操作 Oa’, Ob’を作ることを示す。ITとETとを組み合わせて、SWAPができる。
(K)MERGE(Ob, Oa)は、Oa |→Ob のときにOa’ |→ Ob’ であり、且つ操作の位置がオーバラップしない2つの操作を作ることを示す。
(L)H1・H2は、2つの操作の履歴 H1,H2 をつなげたものを示す。
SWAP(上記(J))及びMERGE(上記(K))について、以下に詳しく説明する。
(a)SWAP
O1|→ O2 のときに、以下の操作によって、O2’ |→ O1’ となる操作が得られる。
SWAP(O1,O2) {
O2’ = ET(O2, O1);
O1’ = IT(O1, O2’);
return (O2’, O1’);
}
(b)MERGE
O1|→ O2 のとき、以下の操作によって、O1’ |→ O2’ であり、且つ2つの操作の位置がオーバラップしていない操作が得られる。
MERGEのアルゴリズムについては、例えば下記URLに記載の文献に記載されている:URL:http://portal.acm.org/citation.cfm?id=675712(上記非特許文献5)。
図4Aは、第1のクライアントと第2のクライアントとの間で同じ文書を編集した場合に、操作列の送受信で同期に失敗する例を示す。
Webオフィス・ソフトウェアで共同編集をサポートするために、第1のクライアント(401)と第2のクライアント(402)は、互いの操作列を送受信する。
第1のクライアント(401)は、第1のユーザ(403)による文書の編集操作を受信し、その操作列を第2のクライアント(402)にネットワークを経由して送信する。
第2のクライアント(402)は、第2のユーザ(404)による文書の編集操作を受信し、その操作列を第1のクライアント(401)にネットワークを経由して送信する。
しかし、図4Aの例に示すように、第1のクライアント(401)と第2のクライアント(402)との間でデータが同期しないことがある。
ステップ411及びステップ421で、第1のユーザ(403)及び第2のユーザ(404)は、同じ文章の内容“CLOUD”から編集をそれぞれ開始する。
ステップ412で、第1のクライアント(401)は、4文字目を消去する操作を第1のユーザ(403)から受け取る。従って、“CLOUD”は、“CLOD”となる。一方、ステップ422で、第2のクライアント(402)は、2文字目を消去する操作を第2のユーザ(404)から受け取る。従って、“CLOUD”は、“COUD”となる。
次に、ステップ413で、第1のクライアント(401)は、ステップ422で行われた2文字目を消去する操作列を第2のクライアント(402)から受け取る。従って、“CLOD”は、“COD”となる。一方、ステップ423で、第2のクライアント(402)は、ステップ412で行われた4文字目を消去する操作列を第1のクライアント(401)から受け取る。従って、“COUD”は、“COU”となる。
よって、第1のクライアント(401)での編集結果は“COD”であり、一方、第2のクライアント(402)での編集結果は“COU”である。従って、第1のクライアント(401)と第2のクライアント(402)との間でコンテンツが一致しない。
以上の通りであるから、図4Aの例では、同期が操作列の送受信において失敗している。
図4Bは、図4Aの例にOTを適用し、データを同期する例を示す。
ステップ431及びステップ441で、第1のユーザ(403)及び第2のユーザ(404)は、同じ文章の内容“CLOUD”から編集をそれぞれ開始する。
ステップ432で、第1のクライアント(401)が、4文字目を消去する操作を第1のユーザ(403)から受け取る。従って、“CLOUD”は、“CLOD”となる。一方、ステップ442で、第2のクライアント(402)が、2文字目を消去する操作を第2のユーザ(404)から受け取る。従って、“CLOUD”は、“COUD”となる。
次に、ステップ433で、第1のクライアント(401)が、ステップ442で行われた2文字目を消去する操作列を第2のクライアント(402)から受け取る。OTによって、第2のクライアント(402)から受け取ったこの操作がステップ432の4文字目を消去する操作(ステップ432)に依存しないことが判定されるので、当該操作は、そのまま実行される。従って、“CLOD”は、“COD”となる。一方、ステップ443で、第2のクライアント(402)は、ステップ432で行われた4文字目を消去する操作列を第1のクライアント(401)から受け取る。OTによって、第1のクライアント(401)から受け取ったこの操作が前の2文字目を消去する操作(ステップ442)に依存することが判定される。そして、OTによって、当該操作は4文字目を消去する操作から3文字目を消去する操作に変換されて実行される。従って、“COUD”は、“COD”となる。
よって、第1のクライアント(401)及び第2のクライアント(402)での編集結果はいずれも“COD”であるので、第1のクライアント(401)及び第2のクライアント(402)との間でコンテンツが一致する。
以上の通りであるから、図4Bの例では、OTを使用することによって、同期が操作列の送受信において成功している。
図5は、OTを適用し、2つの操作列をマージする例を示す。
サーバ(501)で第1のクライアント(502)及び第2のクライアント(503)からそれぞれ操作列1(511)及び操作列2(512)を受信したとする。
操作列1(511)はA〜D及びF〜Hの各操作からなり、Cは削除する操作であり、G及びHは挿入する操作であることを示す。
操作列2(512)はA〜B及びD〜Hの各操作からなり、B、D及びGは削除する操作であり、Eは挿入する操作であることを示す。
操作列1(511)及び操作列2(512)を、OTを適用してマージした結果、操作列1のG(挿入である)は、操作列2のG(削除である)によって消されてしまう。そして、操作列1(511)及び操作列2(512)をマージした操作列(513)は、A〜F及びHの各操作からなり、B、C及びDは削除する操作であり、Eは挿入する操作であることを示す。結果的に、OTによるマージされた操作列は、A〜F及びHである。操作列1(511)及び操作列2(512)をマージした上で、1つの操作列として実行しても、同じ結果が得られる(513)。
さらに、マージによって、送受信するデータの削減が可能である。
図6は、本発明の実施形態である、トランク・データとブランチ・データとの関係を示すフローチャートである。
各ステップの主体は、ブランチ・データ(602)とトランク・データ(601)とのコンテンツの比較を行うハードウェアである。図2A〜図2C及び図3Aに示すようなサーバ−クライアント関係にあるシステムの場合、図6に示す各ステップの主体はサーバである。図2D及び図3Bに示すようなクライアント−クライアント関係にあるシステムの場合、各ステップの主体は第1のクライアント又は第2のクライアントのいずれかであり、上記比較を行うハードウェアである。図8及び図10〜図15についても同様である。
以下では、図2A〜図2C及び図3Aに示すサーバ−クライアント関係にあるシステムの場合を例に述べるが、図2D及び図3Bに示すようなクライアント−クライアント関係にある場合を排除するものでない。図3Aに示すクライアント−サーバ環境において、クライアント(302a)が第1のクライアントであり、及びクライアント(302b)が第2のクライアントであるとして説明する。クライアント(302a)とクライアント(302b)とは、ネットワークを介してサーバ(301)に接続されている。第1のクライアント(302a)は、第1のユーザによって操作される。第2のクライアント(302b)は、第2のユーザによって操作される。第2のクライアントは、1又は複数あってよい。
ステップ611では、第1のユーザが他のユーザ(すなわち第2のユーザ)に編集されたくないオブジェクト(指定オブジェクト)を第1のクライアントを介して指定する。当該指定は、例えばマウス又はカーソルによる範囲選択、項目のメニュー選択によって行われうる。項目は、例えばタイトル、文字、図形である。指定オブジェクトを示す情報は、第1のクライアントからサーバに送信される。サーバは、指定オブジェクトを示す情報を第1のクライアントから受信し、当該指定オブジェクトを示す情報をサーバのメモリ内に格納する。当該指定オブジェクトを示す情報は、例えばオブジェクトの識別子でありうる。当該指定オブジェクトを示す情報は、コンテンツ・データごとにファイルとして保存されてもよく、あるいは、複数のコンテンツ・データについてまとめて保存されていてもよい。
ステップ612では、サーバは、第2のユーザが当該指定オブジェクトに変更を加えたかどうかを監視する。当該監視は、第2のクライアントから送信されるオブジェクトの変更の指示を示すデータにより行われる。変更の指示を示すデータは、例えばオブジェクトのIDと、当該IDで指示されているオブジェクトへの操作の情報である。具体的には、あるオブジェクトの色を変える場合では、オブジェクトの変更の指示を示すデータは、当該オブジェクトのIDと当該オブジェクトに新たに設定された色である。第2のユーザが指定オブジェクトを変更していない間は、第1のユーザによる変更の指示を示すデータがサーバに送信され、そして、当該サーバのメモリ内にあるトランク・データに対して変更が加えられる(なぜならば、下記に述べるようにブランチ・データがまだ作成されていなためである)。トランク・データとは、上述したように、共同編集における幹となるデータである。
ステップ613では、サーバは、第2のユーザが指定オブジェクトを変更したことを検出する。
ステップ614では、サーバは、上記検出に応じて、当該変更された指定オブジェクトについてのブランチ・データをサーバのメモリ内に自動的に作成する。ブランチ・データとは、上述したように、トランク・データから分岐したものであり、指定オブジェクトのコピーである。サーバはまた、第1のクライアントから送信される指定オブジェクトについての変更の指示を示すデータを上記ブランチ・データが格納されているメモリ内に格納する。
ステップ615では、サーバは、第2のクライアントから送信される指定オブジェクトについての変更の指示を示すデータを上記トランク・データが格納されているメモリ内に格納する。サーバは、指定オブジェクトについての変更の指示を示すデータが第1のクライアントからのものであるか、第2のクライアントのものであるかを、例えばクライアントIDにより識別し、当該データが第1のクライアントからのものである場合には当該データを上記ブランチ・データが格納されているメモリ内に格納し、一方当該データが第2のクライアントからのものである場合には当該データを上記トランク・データが格納されているメモリ内に格納するようにしうる。
ステップ616では、サーバは、トランク・データ(601)が格納されているメモリ内の変更指示データに対応する操作列と、ブランチ・データ(602)が格納されているメモリ内の変更指示データに対応する操作列とがマージ可能であるかどうかを判定する。当該判定において、OTが適用される。OTを使用することで、効率的な計算をすることが可能である。トランク・データ(601)の上記操作列とブランチ・データ(602)の上記操作列との比較をOTの枠組みで行うことにより、比較のリアルタイム性が確保される。第2のユーザの編集内容が第1のユーザの編集内容のサブセットとなっているとき、サーバは、ブランチ・データ(602)の内容がトランク・データ(601)の内容とマージ可能であると判定する。そして、サーバは、OTを使用して、第1のユーザによる操作列を第2ユーザのコンテンツ・データ(すなわち、指定オブジェクトについてのブランチ・データの作成後におけるトランク・データ(601)である)に適用する。その後、サーバは、ブランチ・データ(602)を上記メモリから削除する。このように、マージできるときにブランチ・データ(602)をメモリから削除するので、ファイルが必要以上に分散することを防ぐことが可能である。ブランチ・データ(602)の削除によって、トランク・データ(601)に戻る。
ステップ617では、サーバは、ステップ612に戻り、第2のユーザが当該指定オブジェクトに変更を加えたかどうかを新たに監視する。すなわち、サーバは、指定オブジェクトを示す情報を新たに待つ。
図7Aは、本発明の実施形態における、図2A〜図2C及び図3Aに示すようなサーバ−クライアント・システムにおいて、コンテンツ・データ中のオブジェクトの共同編集を可能にするフローを示す。
以下では、図3Aに示すようなサーバ−クライアント環境にあるシステムの場合を例に述べる。図3Aに示すクライアント−サーバ環境において、クライアント(302a)が第1のクライアントであり、及びクライアント(302b)が第2のクライアントであるとして説明する。
ステップ701では、サーバは、編集対象のコンテンツ・データのトランク・データを当該サーバのメモリ内に作成し、保存する。サーバは、第1のクライアント及び第2のクライアントからデータを受信する。当該データが、オブジェクトの変更である場合、上記メモリ内にあるトランク・データに対して変更を加える。当該データが指定オブジェクトを示す情報である場合、当該データを送信したクライアントを第1のクライアントとし、その他のクライアントを第2のクライアントとする。当該指定オブジェクトは、第1のユーザが第2のユーザによる編集が許されないオブジェクトとして指定したものである。
ステップ702では、サーバは、コンテンツ・データ中のオブジェクトの変更の指示を監視する。
(a)当該オブジェクトの変更指示データが、指定オブジェクト以外のオブジェクトに対する変更指示データであれば、当該オブジェクトの変更指示データが第1のユーザからの変更指示データであるか又は第2のユーザからの変更指示データであるかを問わずに、上記メモリ内にあるトランク・データに対して変更が加えられる。
(b)当該オブジェクトの変更指示データが、指定オブジェクトに対する変更である場合、処理はステップ703に進む。
ステップ703では、サーバは、指定オブジェクトに対する変更指示データが、第1のユーザからのものであるか、又は第2のユーザからのものであるかを判定する。当該判定は、例えばクライアントのIDを使用して行われる。
(c)当該オブジェクトの変更指示データが第1のユーザからのものである場合、上記トランク・データに対して変更が加えられる。そして、処理はステップ702に戻る。
(d)当該オブジェクトの変更指示データが、指定オブジェクトに対する変更であり、当該オブジェクトの変更の指示が第2のユーザからのものである場合、処理はステップ704に進む。
ステップ704では、サーバは、上記(d)の場合に、当該サーバのメモリ内に、指定オブジェクトについてのブランチ・データを自動的に作成する。ここで、ブランチ・データは指定オブジェクトについてのものであり、指定オブジェクト以外のオブジェクトについてブランチ・データは作成されない。メモリのコストを削減するためである。
ステップ705では、サーバは、オブジェクトの変更指示データを監視する。
(e)当該オブジェクトの変更指示データが、指定オブジェクト以外のオブジェクトに対する変更指示データであれば、当該オブジェクトの変更指示データが第1のユーザからの変更指示データであるか又は第2のユーザからの変更指示データであるかを問わずに、上記メモリ内にあるトランク・データに対して変更が加えられる。そして、処理はステップ702に戻る。
(f)当該オブジェクトの変更指示データが、指定オブジェクトに対する変更指示データである場合、処理はステップ706に進む。
ステップ706では、サーバは、指定オブジェクトに対する変更指示データが、第1のユーザからのものであるか、又は第2のユーザからのものであるかを判定する。当該判定は、例えばクライアントのIDを使用して行われる。
(g)当該オブジェクトの変更指示データが第2のユーザからの変更指示データである場合、処理はステップ707に進む。
(h)当該オブジェクトの変更指示データが第1のユーザからの変更指示データである場合、処理はステップ708に進む。
ステップ707では、サーバは、第2のユーザからの変更指示データに対応する操作列をトランク・データとして保存する。そして、処理はステップ702に戻る。
ステップ708では、サーバは、第1のユーザからの変更指示データに対応する操作列をブランチ・データとして保存する。
ステップ709は、ブランチ・データが作成されてから所定の時間を経過することによって、又はユーザからの指示によって(下記図14及び図15を参照)開始される。サーバは、トランク・データの変更指示データに対応する操作列と、ブランチ・データの変更指示データに対応する操作列とがマージ可能であるかどうかを判定する。当該判定において、OTが適用される。マージが可能である場合は、処理はステップ710に進む。マージが不可能である場合は、処理はステップ702に戻る。
ステップ710では、サーバは、マージが可能であるとの判断に応じて、OTを使用して、第1のユーザによる操作列を第2ユーザのコンテンツ・データ(すなわち、指定オブジェクトについてのブランチ・データの作成後におけるトランク・データである)に適用する。
ステップ711では、マージ適用後に、当該処理を終了する。
図7Bは、本発明の実施形態における、図2D及び図3Bに示すようなクライアント−クライアント・システムにおいて、コンテンツ・データ中のオブジェクトの共同編集を可能にするフローを示す。
以下では、図3Bに示すようなクライアント−クライアント環境にあるシステムの場合を例に述べる。図3Bに示すクライアント−クライアント環境において、クライアント(312a)が第1のクライアントであり、及びクライアント(312b)が第2のクライアントであるとして説明する。
ステップ721では、第1のクライアント及び第2のクライアントの一方のユーザが他のユーザによって編集されたくないオブジェクトを指定する。指定オブジェクトを指定したクライアントが第1のクライアントであり、その他のクライアント全てが第2のクライアントである。第1のクライアントは、指定オブジェクトを示す情報を第2のクライアントへ送信する。
ステップ722では、第2のクライアントは、第1のクライアントから指定オブジェクトを示す情報を受信し、当該第2のクライアントの記憶部に格納する。
ステップ723では、第2のクライアントは、指定オブジェクトを示す情報を受信後に、指定オブジェクトについて第2のユーザによる変更の指示を示す変更指示データを受信した場合、当該変更指示データを第1のクライアントに送信する。当該変更指示データの送信は、所定の時間ごとに、所定の変更指示データ数ごとに、又はユーザの指示により行われるようにしてよい。
ステップ724では、第1のクライアントは、第2のクライアントからの最初の変更指示データの受信に応じて、指定オブジェクトについてのブランチ・データを当該第1のクライアントの記憶部内に作成する。
ステップ725では、第1のクライアントは、指定オブジェクトを示す情報を受信後に、指定オブジェクトについて第1のユーザによる変更の指示を示す変更指示データを当該第1のクライアントの記憶部内に格納する。
ステップ726では、第2のクライアントは、ステップ723の上記変更指示データを第2のクライアントの記憶部に格納する。なお、当該格納は、ステップ723において上記変更指示データの第1のクライアントへの送信前に、又は送信と同時に行ってもよい。
ステップ727は、ブランチ・データが作成されてから所定の時間を経過することによって、又はユーザからの指示によって(下記図14及び図15を参照)開始される。トランク・データ全ては、当該開始の決定に応じて、第2のクライアントから第1のクライアントに送信するようにしてよい。代替的には、トランク・データは、その作成ごとに、第2のクライアントから第1のクライアントに送信するようにしてよい。第1のクライアントは、トランク・データの変更指示データに対応する操作列と、ブランチ・データの変更指示データに対応する操作列とがマージ可能であるかどうかを判定する。当該判定において、OTが適用される。マージが可能である場合は、処理はステップ728に進む。マージが不可能である場合は、処理はステップ725に戻る。
ステップ728では、第1のクライアントは、トランク・データの変更指示データを第2のクライアントに送信する。
ステップ729では、第2のクライアントは、マージが可能であるとの判断に応じて、OTを使用して、第1のユーザによる操作列を第2ユーザのコンテンツ・データ(すなわち、指定オブジェクトについてのブランチ・データの作成後におけるトランク・データである)に適用する。適用後に、第2のクライアントはブランチ・データを削除してもよい旨のメッセージを第1のクライアントに送信する。
ステップ730では、マージを適用後に、或いは第1のクライアントからブランチ・データを削除した旨のメッセージを受信することに応じて、当該処理を終了する。
図7Cは、本発明の実施形態における、図2D及び図3Bに示すようなクライアント−クライアント・システムにおいて、コンテンツ・データ中のオブジェクトの共同編集を可能にするフローを示す。
図7Bと同様に、以下では、図3Bに示すようなクライアント−クライアント環境にあるシステムの場合を例に述べる。図3Bに示すクライアント−クライアント環境において、クライアント(312a)が第1のクライアントであり、及びクライアント(312b)が第2のクライアントであるとして説明する。
ステップ741では、第1のクライアント及び第2のクライアントの一方のユーザが他のユーザによって編集されたくないオブジェクトを指定する。指定オブジェクトを指定したクライアントが第1のクライアントであり、その他のクライアント全てが第2のクライアントである。第1のクライアントは、指定オブジェクトを示す情報を第2のクライアントへ送信する。
ステップ742では、第2のクライアントは、第1のクライアントから指定オブジェクトを示す情報を受信し、当該第2のクライアントの記憶部に格納する。
ステップ743では、第2のクライアントは、指定オブジェクトの最初の変更が第2のユーザによって行われることにより、指定オブジェクトについてのブランチ・データを当該第2のクライアントの記憶部内に作成する。そして、第2のクライアントは、指定オブジェクトについてのブランチ・データが作成されたことを第1のクライアントに知らせるメッセージを送信する。
ステップ744では、第1のクライアントは、ステップ743のメッセージを受信する。
ステップ745では、第1のクライアントは、ブランチ・データが作成されたメッセージの受信することに応じて、当該メッセージに含まれるブランチ・データの作成時間以降の第1のユーザによる変更の指示を示す変更指示データを、トランク・データとして当該第2のクライアントの記憶部内に格納する。
ステップ746では、第2のクライアントは、指定オブジェクトを示す情報を受信後に、指定オブジェクトについて第2のユーザによる変更の指示を示す変更指示データを、ブランチ・データとして当該第2のクライアントの記憶部内に格納する。
ステップ747は、ブランチ・データが作成されてから所定の時間を経過することによって、又はユーザからの指示によって(下記図14及び図15を参照)開始される。トランク・データ全ては、当該開始の決定に応じて、第1のクライアントから第2のクライアントに送信するようにしてよい。代替的には、トランク・データは、その作成ごとに、第1のクライアントから第2のクライアントに送信するようにしてよい。第2のクライアントは、トランク・データの変更指示データに対応する操作列と、ブランチ・データの変更指示データに対応する操作列とがマージ可能であるかどうかを判定する。当該判定において、OTが適用される。マージが可能である場合は、処理はステップ748に進む。マージが不可能である場合は、処理はステップ746に戻る。
ステップ748では、第2のクライアントは、ブランチ・データの変更指示データに対応する操作列を第1のクライアントに送信する。
ステップ749では、第1のクライアントは、マージが可能であるとの判断に応じて、OTを使用して、ブランチ・データの変更指示データに対応する操作列を第1ユーザのコンテンツ・データ(すなわち、指定オブジェクトについてのブランチ・データの作成後におけるトランク・データである)に適用する。適用後に、第1のクライアントはブランチ・データを削除してもよい旨のメッセージを第2のクライアントに送信する。
ステップ750では、マージを適用後に、或いは第2のクライアントからブランチ・データを削除した旨のメッセージを受信することに応じて、当該処理を終了する。
図8は、本発明の実施形態である、図6のステップ616の比較のフローチャートである。
ステップ801では、サーバは、ブランチ・データ(602)とトランク・データ(601)との比較を、OTを適用して開始する。
ステップ802では、サーバは、ブランチ・データ(602)を作成後に第1のユーザ以外の第2のユーザ全てによって変更された指定オブジェクトについての操作列全てをOTで計算し、結果Htを得る。Htとは、トランク・データに対する第1のユーザ以外の第2のユーザ全てによる操作列である。
ステップ803では、サーバは、ブランチ・データ(602)を作成後に第1のユーザのみによって変更された指定オブジェクトについての操作列全てをOTで計算し、結果Hbを得る。Hbとは、ブランチ・データに対する第1のユーザだけによる操作列である。
ステップ804では、サーバは、OTを用いて、ブランチ・データとトランク・データとがマージ可能であるかどうかを判定する。マージ可能である条件の1つは、指定オブジェクトについてのブランチ・データの作成後におけるHtの操作列全てをOTで計算した結果であるHtが空であることであり、又はマージ可能である条件の他は、指定オブジェクトについてのブランチ・データの作成後におけるHtの操作列全てをOTで計算した結果であるHtと、指定オブジェクトについてのブランチ・データの作成後におけるHbの操作列全てをOTで計算した結果であるHbとの距離が0(ゼロ)であることである。距離が0でない場合、すなわちマージ不可能である場合には、ステップ806に進み、比較のプロセスを終了する。
ステップ805では、サーバは、マージ可能であると判定することに応じて、ブランチ・データとトランク・データをマージする(ステップ806)。
ステップ806では、サーバは、上記比較のプロセスを終了する。
上記比較においてOTを用いる方法では、ユーザの意図とは違うが、結果的に内容が同じであったときには検出できない。例えば、“ddd”という文字列の1文字目を消したものと、当該文字列の3文字目を消したものとは違うものとして扱う。結果的に内容が同じであったときの検出は、いずれのユーザ(第1のユーザ、第2のユーザ)もオフラインのときに、バッチ処理でブランチ・データ(602)とトランク・データ(601)との比較をすることで対処する。
操作列に新しい操作を追加するために実装される定義を、以下に説明する。
(1)Onewは、新しくトランクに適用された操作を示す。
a)Onew は、トランクを編集中のユーザ間のコンテンツの同期をするために、既にOTによって、Htの全ての操作に対して、コンテクスト等価でない操作に変換されている。また、最後にトランクに対して適用された操作に対して、コンテクスト先行になっている。
Oi→Onew, 0<i<|Ht|
O|Ht|-1 |→ Onew
b)ブランチの操作列に関しては、一人で操作しているので、コンテクスト等価な操作はないため、ブランチに対する新しい操作をOnewとすると、
Oi→Onew, 0<i<|Hb|
O|Hb|-1 |→ Onew
が常に成り立つので以下省略する。
(2)トランクの操作列 Ht は、以下のように保持されている。
Ht= Htd・Hti
a)Htd は、Ht の中で文字の削除の操作を示す。Ht の他の操作と変更点がオーバラップする場合、既にマージされている。 Htd は文字を削除する位置によって降順にソートされている。
a1)Hti のオーバラップする操作と既にマージされていることにより、Htd に含まれる削除の操作は元のコンテンツに対する削除の操作のみである。
a2)文字の挿入位置によって逆順にソートされていることで、 Htd に含まれる操作の位置は、元のコンテンツに対する位置と同一になる。ET(Htd[i],Htd[i-1])=Htd[i] が常に成り立つためである。
b)Hti は、Ht の中で文字の挿入の操作を示す。Ht の他の操作と変更点がオーバラップする場合、既にマージされている。 Htiは文字を挿入する位置によって逆順にソートされている。
b1)文字の挿入位置によって逆順にソートされていることで、Hti に含まれる操作の位置は、元のコンテンツに対する位置と同一になる。ET(Hti[i],Hti[i-1])=Hti[i] が常に成り立つためである。
トランク・データの操作列とブランチ・データの操作列の比較方法について、以下に説明する。
オブジェクトの色又は位置については操作列の比較は簡単であり、例えばオブジェクトの色や、サイズなどのオブジェクトの属性を比較して、異なる属性の数をそのまま距離にして行うことによって可能である。
テキストの変更についての操作列の比較を下記に説明する。説明を容易にするために、プレインテキストの例で説明する。OTを一般のXMLに拡張するのは、各操作を適用する位置 O.p を整数値を持つベクトルで表すことによって可能である。例えば、下記URLに記載されている技術を使用することにより可能である:http://portal.acm.org/citation.cfm?id=587088(Aguido Horatio Davis等、”Generalizing operational transformation to the standard general markup language”, Computer Supported Cooperative Work, Proceedings of the 2002 ACM conference on Computer supported cooperative work, ACM, 58-67, 2002)(上記非特許文献6)。操作列は、文字の削除についての操作列、文字の挿入についての操作列の順に保持することによって、各操作を最大限にマージでき、そして操作列を小さくできる。例えば、下記URLに記載されている技術を使用して可能である:http://portal.acm.org/citation.cfm?id=675712(Haifeng Shen等、”A Log Compression Algorithm for Operation-based Version Control Systems”, COMPSAC,Proceedings of the 26th International Computer Software and Applications Conference on Prolonging Software Life: Development and Redevelopment, IEEEComputer Society, 867-872, 2002)(上記非特許文献5)。
トランク・データの操作列 Ht は、文字の削除についての操作列を Htd、 文字の挿入についての操作列 Hti とすると、Ht = Htd ・Htiで表される。ブランチ・データの操作列Hbは同様に、文字の削除についての操作列を Hbd、文字の挿入についての操作列 Hbi とすると、Hb = Hbd ・ Hbiで表される。
また、Htdの操作は、Htiのうち操作の位置がオーバラップするものとマージされている。また同様に、Hbdの操作は、Hbiのうち操作の位置がオーバラップするものとマージされている。よって、文字の削除についての操作列Htd及びHbdは他の操作とマージされているため、元のコンテンツに対する削除の操作のみであり、挿入操作で新しく追加される文字についての削除の操作は含まない。
操作列を、文字の削除についての操作列、文字の挿入についての操作列の順に保持するのに加えて、Htd、Hti、Hbd、Hbi それぞれを各操作を適用する位置 O.p によって降順にソートして保持する。この計算方法の詳細は、下記にupdateHとして述べる。
O.pによって降順にソートされていれば、各操作を適用する位置は他の操作の影響を受けていない。
例1: [O1(1, “abc”),O2(5, “xyz”)] の2つの操作列を、元のコンテンツが“親譲りの無鉄砲で小供の時から損ばかりしている”という文書に適用する場合
結果1: “親abc譲xyzりの無鉄砲で小供の時から損ばかりしている”
結果1では、O2は、元のコンテンツに対して、2文字目に挿入されている。
例2: [O1(5, “VW”), O2(2,“DEF”)] の2つの操作列を、元のコンテンツが“親譲りの無鉄砲で小供の時から損ばかりしている”という文書に適用する場合
結果2:“親譲DEFりの無VW鉄砲で小供の時から損ばかりしている”
Htd及びHbdは、挿入の操作よりも履歴の中で前方にあるので、編集位置でソートされていれば各操作を適用する位置は他の操作の影響を受けていない。すなわち、トランク・データとブランチ・データの操作で同じ位置を編集する操作は、元のコンテンツでも同じ位置を編集していることが保証できる。そのために、操作列の比較をすることによって、コンテンツ同士の比較をすることができる。
Hti及びHbiについては、Htd及びHbdそれぞれが履歴の前方にあることによって編集の位置がずれている。Hti及びHbiから、Htd及びHbdの影響を除けば、挿入の操作についてもトランク・データとブランチ・データの操作列を比較することによって、コンテンツ同士の比較をすることができる。この計算方法の詳細は、下記にexcludeDeleteとして述べる。
上記方法で得られたトランク・データとブランチ・データに対する文字の挿入の操作列は、それぞれの操作位置が元のコンテンツに対する操作位置と見なせるように保持されているので、以下に示すcalculateDistance のように、コンテンツの差分を動的計画法で計算できる。これを図示すると、図9のようになる。
図9は、コンテンツの差分を示すグラフである。
editDistanceは既存の文字列間の編集距離を計算する手法を用いる。Htd とHbd の計算は、HtiとHbiの距離の計算と同様であるので省略する。
calculateDistance(Hti,Hbi) {
dist ← 0;
y ← 0;
for (x=0; x<|Hti|; x++) { // トランク・データに対する挿入の操作についてブランチ・データとの差分を調べる
if (y<|Hbi|) {
while (Hbi[y].p > Hti[x].p) { //トランク・データの操作と関係のない位置のブランチ・データの操作をスキップする
y++;
}
if (Hti[x].p==Hbi[y].p) { // ブランチ・データ及びトランク・データの操作が同じ位置を編集する
dist += editDistance(Hti[x].s, Hbi[y].s); //編集距離を計算する
} else { // ブランチ・データに同じ位置の編集がない
dist += Hti[x].len; // トランク・データの編集内容がそのまま差分になる
}
} else { // 既に、ブランチの操作全てを調べたとき
dist += Hti[x].len; // トランク・データの編集内容がそのまま差分になる
}
}
return dist;
}
トランク・データとブランチ・データのコンテンツの差分は、文字の削除についての操作列の距離と、文字の挿入についての操作列の距離の和になる。この計算方法の詳細は、下記にdistanceTBとして述べる。
updateHについて、以下に説明する。
updateHは、Ht に新しい操作 Onew を追加して、上記のHt と同様の条件を満たす操作の履歴 Ht’ = Htd’・Hti’ を得る関数である。updateH(Ht, Onew) について、下記に詳述する。
updateH(H,Onew) {
H‘← H・Onew; // 新しい操作をトランク・データの操作列に追加
for (i=|H’|-1;i>0; i--) {
if (H’[i].p≧H’[i-1].p ∧ H’[i].p≦H’[i-1].p+ H’[i-1].len) { // 新しい操作と編集位置とがオーバラップしている
(H’ [i], H’[i-1]) =MERGE(H’[i], H’[i-1]); // 操作をマージする
}
if (H’[i-1].t=del ∧ H’[i-1].p < H’[i-2].p){
break; // 新しい操作はこれ以上マージできる操作がない
} else {
(H’[i], H’[i-1]) =SWAP(H’[i], H’[i-1]); // 新しい操作をさらに配列の前方に移動してマージできる操作があるか調べる
}
}
Onew’ ← H’[i]; // マージ可能な操作の履歴とマージした後の新しい操作は i 番目にある
if (Onew’.t=ins) { // Onew’ が挿入の操作であれば、Hi の中の適切な位置に移動する
while (H[i+1].t=del ∨ H[i+1].p>H[i].p) {
(H’[i], H’[i+1]) =SWAP(H’[i], H’[i+1]); // 新しい操作を操作の位置で正しくマージされるまで配列の後方に移動する
i++;
}
} else {
// Onew’ が削除の操作であれば既にソート済み
}
return H’;
}
excludeDeleteについて、以下に説明する。
トランク・データ及びブランチ・データの操作列 Ht, Hb の中の挿入に関する操作列 Hti及びHbi の編集位置は、Htd及びHbd の影響を受けている。Hti及びHbi に対して以下の計算を行うことで、Htd及びHbd による影響が取り除かれる。
excludeDelete(Hi, Hd) {
Hi’ ← Hi;
for (i=0; i<|Hi|; i++) {
for (j=0; j<|Hd|; j++) {
Hi’[i] = ET(Hi’[i],Hj[j]);
}
}
return Hi’;
}
calculateDistanceについて、以下に説明する。
calculateDistanceは、トランク・データとブランチ・データとのコンテンツの距離は、以下のようにHtd及びHbd の距離と、Hti及びHbi の距離の和として計算できる。
distanceTB(Ht,Hb) {
dist ← 0;
d ist += calculateDistance(Htd, Hbd);
Hti’ ← excludeDelete(Hti, Htd);
Hbi’ ← excludeDelete(Hbi, Hbd);
dist += calculateDistance(Hti’, Hbi’);
return dist;
}
図10〜図13は、トランク・データとブランチ・データとのマージの例を示す。
図10は、本発明の実施形態である、指定オブジェクトが図形である場合のマージの例を示す。
図10では、トランク・データに複数の図形(三角形、丸)が描かれている。
ステップ1001では、第1のユーザは、図形 丸について編集されたくないために、丸を指定オブジェクトとして選択する。
ステップ1002では、第2のユーザが指定オブジェクトである丸を上に移動する[(1)の操作]。
ステップ1003では、第2のユーザが指定オブジェクトを移動したことに応じて、丸だけをブランチ・データとしてバッファ内に作成する[(2)の操作]。
ステップ1004では、第1のユーザが丸を左に移動する[(3)の操作]。
ステップ1005では、トランク・データとブランチ・データとがマージ可能であるかをOTを適用して判断する。
ステップ1006では、マージ可能であることに応じて、(1)の操作は(3)の操作でキャンセルされるので(マージ)、丸は左に移動される。また、ブランチ・データが、バッファから削除される。
図11は、本発明の実施形態である、指定オブジェクトがテキストである場合のマージの例を示す。
図11では、トランク・データに図形(三角形)及びテキスト(ABC)が描かれている。
ステップ1101では、第1のユーザは、テキスト ABCについて編集されたくないために、ABCを指定オブジェクトとして選択する。
ステップ1102では、第2のユーザが指定オブジェクトであるABCのうち、2文字目(B)に下線を入れる[(1)の操作]。
ステップ1103では、第2のユーザが指定オブジェクトを編集したことに応じて、ABCだけをブランチ・データとしてバッファ内に作成する[(2)の操作]。
ステップ1104では、第1のユーザが1〜3文字目を斜体にする[(3)の操作]。
ステップ1105では、第1のユーザが1〜3文字目に下線を入れる[(4)の操作]。
ステップ1106では、トランク・データとブランチ・データとがマージ可能であるかをOTを適用して判断する。
ステップ1107では、マージ可能であることに応じて、(1)の操作は(4)の操作でキャンセルされる(マージ)。結果として、ABCは斜体にされ、ABCに下線が付される。また、ブランチ・データが、バッファから削除される[(5)の操作]。
図12は、本発明の実施形態である、指定オブジェクトがテキストである場合のマージの例を示す。
図12では、トランク・データに図形(三角形)及びテキスト(ABC)が描かれている。
ステップ1201では、第1のユーザは、テキスト ABCについて編集されたくないために、ABCを指定オブジェクトとして選択する。
ステップ1202では、第2のユーザが4文字目にDを挿入する操作をしたために、指定オブジェクトであるABCの4文字目にDが挿入される((1)の操作)。
ステップ1203では、第2のユーザが指定オブジェクトを編集したことに応じて、ABCだけをブランチ・データとしてバッファ内に作成する((2)の操作)。
ステップ1204では、第1のユーザが1文字目にAを挿入する操作をしたために、指定オブジェクトであるABCの1文字目にAが挿入される((3)の操作)。
ステップ1205では、第1のユーザが5文字目にDを挿入する操作をしたために、AABCの5文字目にDが挿入される((4)の操作)。
ステップ1206では、トランク・データとブランチ・データとがマージ可能であるかをOTを適用して判断する。
ステップ1207では、マージ可能であることに応じて、(1)の操作は(4)の操作でキャンセルされる(マージ)。結果として、ABCの1文字目にAが挿入され、AABCの5文字目にDが挿入されて、AABCDとなる。また、ブランチ・データが、バッファから削除される。
図13は、本発明の実施形態である、指定オブジェクトが複雑なテキストである場合のマージの例を示す。
図13では、トランク・データに、タイトル「Objectives」の下にあるテキスト「− Provide a tool for easy access to the Web」(以下、「テキスト1」及びテキスト「− Make Web a new information resource」(以下、「テキスト2」)、図形(矢印)及びテキスト(Reduce information gap.)が描かれている。
ステップ1301では、第1のユーザは、タイトル「Objectives」及びそのタイトル下に配置されるテキストについて編集されたくないために、タイトル「Objectives」を指定オブジェクトとして選択する。なお、タイトル「Objectives」を選択することによって、そのタイトル下にあるテキストについても編集されたくないことを示すことができるとする。
ステップ1302では、第2のユーザが指定オブジェクトを編集する。第2のユーザは、タイトル「Objectives」下のテキスト1の最後及びテキスト2の最後に、文字列「for blind」及び文字列「for blind」をそれぞれ挿入する操作をした。
ステップ1303では、ステップ1302の第2のユーザが指定オブジェクトを編集したことに応じて、タイトル「Objectives」及びそのタイトル下にあるテキストだけをブランチ・データとして記憶装置内に作成する。
そして、第1のユーザが、タイトル「Objectives」下のテキスト1の最後に文字列「for blind」を挿入し、テキスト2の1つめの語「Make」と2つめの語「Web」の間に語「the」を挿入し及びテキスト2の最後に文字列「for blind」を挿入し、並びにテキスト3として「provide tool for web developers」を挿入する操作をした。
ステップ1304では、トランク・データ(1302)とブランチ・データ(1303)とがマージ可能であるかをOTを使用して判断する。その結果、マージ可能であると判断される。従って、第1のユーザの操作列が、OTを使用して、第2のユーザの操作列であるトランク・データ(1302)に適用される。
ツリー構造(1311)はブランチ・データが作成される前のトランク・データについてのものであり、タイトル「Objectives」内の各テキスト1及び2がツリー構造で表現可能であることを示す。すなわち、タイトル「Objectives」が親ノードであり、テキスト1及び2それぞれが当該親ノードに対する子ノードである。
ツリー構造(1312)は、ブランチ・データが作成された後のトランク・データについてのものであり、タイトル「Objectives」内の各テキスト1、2及び3がツリー構造で表現可能であることを示す。ステップ1302では、テキスト1及びテキスト2に文字列「for blind」がそれぞれ追加されている。しかし、ステップ1301のツリー構造(1311)と比較して、ステップ1302のツリー構造(1312)は、親ノード及び子ノードとも変化していない。
ツリー構造(1313)はブランチ・データについてのものであり、タイトル「Objectives」内の各テキスト1及び2がツリー構造で表現可能であることを示す。ステップ1303では、テキスト3が追加されている。そこで、ステップ1301のツリー構造(1311)と比較して、ステップ1303のツリー構造(1313)において、第1層目のテキスト3についての子ノードが追加されている。
ツリー構造(1314)はトランク・データについてのものであり、タイトル「Objectives」内の各テキスト1、2及び3がツリー構造で表現可能であることを示す。テキスト1が、トランク・データ(1302)及びブランチ・データ(1303)で同じである。よって、テキスト1は、トランク・データ(1302)とブランチ・データ(1303)との間でマージ可能である。
トランク・データについてのツリー構造(1311)とブランチ・データについてのツリー構造(1312)に対する操作列の差分を計算することにより、コンテンツの差分を求めることができる。
図14から図15は、本発明の実施形態である、トランク・データとブランチ・データとのマージを促すユーザ・インタフェースの例を示す。
図14は、本発明の実施形態である、トランク・データの操作列とブランチ・データの操作列との差分に従って、マージを促すユーザ・インタフェースの例である。
1411は、トランク・データの操作列とブランチ・データの操作列との差分の大小をグラデーションで示している。グラデーションは、例えば差分が大きいほど赤色になり、差分が小さいほど緑色になるようにしてよい。
元のコンテンツは、図13の1301と同じであり、タイトル「Objectives」の下にテキスト1及びテキスト2を有する。
トランク・データ(1401)では、元のコンテンツに対して、タイトル「Objectives」下のテキスト1の最後に文字列「for blind」が挿入され、テキスト2の1つめの語「Make」と2つめの語「Web」の間に語「the」が挿入され及びテキスト2の最後に文字列「for blind」が挿入されている。
ブランチ・データ(1402)では、元のコンテンツに対して、タイトル「Objectives」下のテキスト1の最後に文字列「for blind」が挿入され、及びテキスト2の最後に文字列「for blind」が挿入されている。
従って、トランク・データ(1401)とブランチ・データ(1402)とのコンテンツのOTで求められる差分は小さい。そこで、ブランチ・データが作成されたオブジェクトの近傍に又は吹き出しで当該差分の大小を示すアイコンを表示し、その色を緑で表示する。ユーザは、該アイコンの色が緑であるので、マージがまだ必要でないと判断することが可能である。
トランク・データ(1403)では、トランク・データ(1401)に対して、テキスト3として「provide tool for web developers」が挿入されている。
ブランチ・データ(1404)では、トランク・データ(1402)と同じである。
従って、トランク・データ(1401)とブランチ・データ(1402)とのコンテンツの差分は大きい。そこで、ブランチ・データが作成されたオブジェクトの近傍に又は吹き出しで当該差分の大小を示すアイコンを表示し、その色を赤で表示する。ユーザは、該アイコンの色が赤であるので、マージが必要であると判断することが可能である。
上記コンテンツの差分の計算は、上記に示したcalculateDistanceのように、コンテンツの差分を動的計画法で計算できる。
上記コンテンツの差分が特に小さい場合に、マージを促す上記ユーザ・インタフェースを提供することによって、マージを促進することが可能である。
図15は、本発明の実施形態である、ブランチ・データの状態を視覚化することによって、マージを促すユーザ・インタフェースの例である。
元のコンテンツは、図13の1301と同じであり、タイトル「Objectives」の下にテキスト1及びテキスト2を有する。
ブランチ・データ(1501)では、元のコンテンツに対して、タイトル「Objectives」下のテキスト1の最後に文字列「for blind」が挿入され、及びテキスト2の最後に文字列「for blind」が挿入されている。
ブランチ・データ(1502)のコンテンツは、ブランチ・データ(1501)と同じである。
トランク・データ(1503)では、元のコンテンツに対して、タイトル「Objectives」下のテキスト1の最後に文字列「for blind」が挿入され、テキスト2の1つめの語「Make」と2つめの語「Web」の間に語「the」が挿入され及びテキスト2の最後に文字列「for blind」が挿入され、並びにテキスト3として「provide tool for web developers」が挿入されている。
ステップ1511では、第1のユーザ(編集されたくないオブジェクトを指定したユーザ)は、ブランチ・データ(1501)のコンテンツを見ている。第1のユーザは、トランク・データの状態を視覚化するアイコンをクリックする。当該アイコンは、例えば、指定オブジェクトの近傍に又は吹き出しで表示されうる。
ステップ1512では、トランク・データ(1503)のコンテンツが、第1のユーザのモニタ画面に表示される。トランク・データ(1503)のコンテンツの表示は、例えばブランチ・データ(1502)の近傍に又は吹き出しで表示されうる。第1のユーザのモニタ画面は、トランク・データ(1503)のコンテンツの表示とともに、ブランチ・データ(1502)とトランク・データ(1503)とをマージするかどうかの指示を可能にするアイコンを備えていてよい。当該アイコンは、例えば「上書き」及び「キャンセル」である。「上書き」アイコンは、ブランチ・データ(1502)とトランク・データ(1503)とをマージすることを指示するアイコンである。「キャンセル」アイコンは、ブランチ・データ(1502)とトランク・データ(1503)とをマージすることを指示しないアイコンである。
ステップ1513では、第1のユーザが「上書き」をクリックすることによって、ブランチ・データ(1502)の操作列をトランク・データ(1503)に適用することにより、ブランチ・データ(1502)とトランク・データ(1503)のコンテンツがマージされる。そして、ブランチ・データ(1502)がバッファから削除される。

Claims (13)

  1. 第1のユーザに関連付けられた第1のクライアント・コンピュータ(以下、第1のクライアント)と第2のユーザに関連付けられた第2のクライアント・コンピュータ(以下、第2のクライアント)とにネットワークを介して接続可能なサーバ・コンピュータ(以下、サーバ)がコンテンツ・データ中のオブジェクトの共同編集を可能にする方法であって、前記サーバは、ユーザによる前記オブジェクトの変更の指示を示す変更指示データを格納する記憶部を備えており、
    前記サーバが、
    前記コンテンツ・データ中の前記第2のユーザによる編集が許されない前記オブジェクトが前記第1のユーザによって指定されることに応じて、当該指定されたオブジェクト(以下、指定オブジェクト)を示す情報を前記第1のクライアントから受信するステップと、
    前記指定オブジェクトを示す情報を受信後に、前記指定オブジェクトについての前記第2のユーザによる変更の指示を示す変更指示データを前記第2のクライアントから受信し、当該受信した変更指示データを前記記憶部に格納するステップと、
    前記第2のクライアントからの前記変更指示データの受信に応じて、前記指定オブジェクトについてのブランチ・データを作成するステップと、
    前記指定オブジェクトについての前記ブランチ・データの作成後に、前記指定オブジェクトについての前記第1のユーザによる変更の指示を示す変更指示データを前記第1のクライアントから受信し、当該受信した変更指示データを前記記憶部に格納するステップであって、前記ブランチ・データに対して、前記第1のクライアントから受信した変更指示データに対応する操作が反映される、前記格納するステップと、
    前記第1のクライアントから受信した前記変更指示データに対応する操作列(以下、第1の操作列)と前記第2のクライアントから受信した前記変更指示データに対応する操作列(以下、第2の操作列)とをマージすることが可能であるかをオペレーショナル・トランスフォーメーション(以下、OT)を使用して判断するステップと、
    前記マージすることが可能であることに応じて、OTを使用して、前記第1の操作列を、前記第2のユーザが共同編集中のデータに適用するステップであって、前記第2のユーザが共同編集中の前記データは前記指定オブジェクトについての前記ブランチ・データの作成後におけるトランク・データであり、当該トランク・データは、前記共同編集における幹となるデータであり、及び、前記ブランチ・データは前記トランク・データから分岐したものであり且つ前記指定オブジェクトのコピーである、前記適用するステップと
    を実行すること含み、
    前記指定オブジェクトについての前記ブランチ・データの作成後に、前記ブランチ・データ及び前記第1のクライアントからの前記変更指示データが前記記憶部中の第1のバッファに格納され、前記第2のクライアントからの前記変更指示データが前記記憶部中の第2のバッファに格納される、前記方法。
  2. 前記マージすることが可能であることが、
    前記指定オブジェクトについてのブランチ・データの作成後における前記第2の操作列全てをOTで計算した結果であるHtが空であることである、請求項1に記載の方法。
  3. 前記マージすることが可能であることが、
    前記指定オブジェクトについてのブランチ・データの作成後における前記第2の操作列全てをOTで計算した結果であるHtと、前記指定オブジェクトについてのブランチ・データの作成後における前記第1の操作列全てをOTで計算した結果であるHbとの距離がゼロであることである、請求項1に記載の方法。
  4. 前記サーバが、
    前記適用するステップの後に、前記ブランチ・データ及び前記第1のクライアントから受信した前記変更指示データを前記記憶部から削除するステップ
    をさらに実行することを含む、請求項1〜3のいずれか一項に記載の方法。
  5. 前記判断するステップが、前記第1の操作列と前記第2の操作列との差分の大小を第1のユーザに示すためのユーザ・インタフェースに、当該差分の大小についてのデータを提供するステップをさらに含む、請求項1〜4のいずれか一項に記載の方法。
  6. 前記サーバが、
    前記指定オブジェクトが指定される前に、前記第1のユーザによる前記オブジェクトの変更の指示を示す変更指示データを前記第1のクライアントから受信するステップと、
    当該受信した変更指示データを用いて、前記第2のユーザが共同編集中の前記データを同期するステップと
    を実行することをさらに含む、請求項1〜5のいずれか一項に記載の方法。
  7. コンテンツ・データ中のオブジェクトの共同編集を可能にするサーバ・コンピュータ(以下、サーバ)であって、前記サーバは、第1のユーザに関連付けられた第1のクライアント・コンピュータ(以下、第1のクライアント)と第2のユーザに関連付けられた第2のクライアント・コンピュータ(以下、第2のクライアント)とにネットワークを介して接続可能であり、
    前記サーバが、
    前記コンテンツ・データ中の前記第2のユーザによる編集が許されない前記オブジェクトが前記第1のユーザによって指定されることに応じて、当該指定されたオブジェクト(以下、指定オブジェクト)を示す情報を前記第1のクライアントから受信する受信部と、
    前記指定オブジェクトを示す情報を受信後に、前記指定オブジェクトについての前記第2のユーザによる変更の指示を示す変更指示データを前記第2のクライアントから受信する受信部と、
    前記第2のクライアントからの前記変更指示データの受信に応じて、前記指定オブジェクトについてのブランチ・データを作成する作成部と、
    前記指定オブジェクトについての前記ブランチ・データの作成後に、前記指定オブジェクトについての前記第1のユーザによる変更の指示を示す変更指示データを前記第1のクライアントから受信する受信部と、
    前記第2のクライアントから受信した前記変更指示データ、前記第1のクライアントから受信した前記変更指示データ、及び前記ブランチ・データを格納する格納部であって、前記ブランチ・データに対して、前記第1のクライアントから受信した変更指示データに対応する操作が反映される、前記格納部と、
    前記第1のクライアントから受信した前記変更指示データに対応する操作列(以下、第1の操作列)と前記第2のクライアントから受信した前記変更指示データに対応する操作列(以下、第2の操作列)とをマージすることが可能であるかをオペレーショナル・トランスフォーメーション(以下、OT)を使用して判断する判断部と、
    前記マージすることが可能であることに応じて、OTを使用して、前記第1の操作列を前記第2のユーザが共同編集中のデータに適用する適用部であって、前記第2のユーザが共同編集中の前記データは前記指定オブジェクトについての前記ブランチ・データの作成後におけるトランク・データであり、当該トランク・データは、前記共同編集における幹となるデータであり、及び、前記ブランチ・データは、前記トランク・データから分岐したものであり且つ前記指定オブジェクトのコピーである、前記適用部と
    をさらに備えており、
    前記指定オブジェクトについての前記ブランチ・データの作成後に、前記ブランチ・データ及び前記第1のクライアントからの前記変更指示データが前記記憶部中の第1のバッファに格納され、前記第2のクライアントからの前記変更指示データが前記記憶部中の第2のバッファに格納される、前記サーバ。
  8. 前記マージすることが可能であることが、
    前記指定オブジェクトについてのブランチ・データの作成後における前記第2の操作列全てをOTで計算した結果であるHtが空であることである、請求項に記載のサーバ。
  9. 前記マージすることが可能であることが、
    前記指定オブジェクトについてのブランチ・データの作成後における前記第2の操作列全てをOTで計算した結果であるHtと、前記指定オブジェクトについてのブランチ・データの作成後における前記第1の操作列全てをOTで計算した結果であるHbとの距離がゼロであることである、請求項に記載のサーバ。
  10. 前記適用の後に、前記ブランチ・データ及び前記第1のクライアントから受信した前記変更指示データを前記記憶部から削除するバッファ・コントロール部をさらに備えている、請求項のいずれか一項に記載のサーバ。
  11. 前記第1の操作列と前記第2の操作列との差分の大小を第1のユーザに示すためのユーザ・インタフェースに、当該差分の大小についてのデータを提供する提供部をさらに備えている、請求項10のいずれか一項に記載のサーバ。
  12. 前記指定オブジェクトが指定される前に、前記第1のユーザによる前記オブジェクトの変更の指示を示す変更指示データを受信し、当該受信した変更指示データを用いて、前記第2のユーザが共同編集中の前記データを同期する、請求項11のいずれか一項に記載のサーバ。
  13. 第1のユーザに関連付けられた第1のクライアント・コンピュータと第2のユーザに関連付けられた第2のクライアント・コンピュータとにネットワークを介して接続可能なサーバ・コンピュータに、請求項1〜6のいずれか一項に記載の方法の各ステップを実行させるコンピュータ・プログラム。
JP2010124795A 2010-05-31 2010-05-31 コンテンツ・データ中のオブジェクトの共同編集を可能にする方法、並びにそのコンピュータ・システム及びコンピュータ・プログラム Expired - Fee Related JP5710156B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2010124795A JP5710156B2 (ja) 2010-05-31 2010-05-31 コンテンツ・データ中のオブジェクトの共同編集を可能にする方法、並びにそのコンピュータ・システム及びコンピュータ・プログラム
US13/118,647 US8639659B2 (en) 2010-05-31 2011-05-31 Method enabling collaborative editing of object in content data, computer system, and computer program product

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2010124795A JP5710156B2 (ja) 2010-05-31 2010-05-31 コンテンツ・データ中のオブジェクトの共同編集を可能にする方法、並びにそのコンピュータ・システム及びコンピュータ・プログラム

Publications (2)

Publication Number Publication Date
JP2011253229A JP2011253229A (ja) 2011-12-15
JP5710156B2 true JP5710156B2 (ja) 2015-04-30

Family

ID=45023194

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010124795A Expired - Fee Related JP5710156B2 (ja) 2010-05-31 2010-05-31 コンテンツ・データ中のオブジェクトの共同編集を可能にする方法、並びにそのコンピュータ・システム及びコンピュータ・プログラム

Country Status (2)

Country Link
US (1) US8639659B2 (ja)
JP (1) JP5710156B2 (ja)

Families Citing this family (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106202021A (zh) * 2010-11-02 2016-12-07 谷歌公司 由多个用户对博客的实时同步文档编辑
US11611595B2 (en) 2011-05-06 2023-03-21 David H. Sitrick Systems and methodologies providing collaboration among a plurality of computing appliances, utilizing a plurality of areas of memory to store user input as associated with an associated computing appliance providing the input
US10402485B2 (en) 2011-05-06 2019-09-03 David H. Sitrick Systems and methodologies providing controlled collaboration among a plurality of users
US9756125B2 (en) * 2011-06-16 2017-09-05 Telefonaktiebolaget Lm Ericsson (Publ) Client and a server and methods thereof for data management relating to shared data storage
KR101969583B1 (ko) 2012-01-10 2019-08-20 삼성전자주식회사 컨텐츠 관리 방법과 장치 및 기록 매체
JP2013191003A (ja) * 2012-03-14 2013-09-26 Hitachi Solutions Ltd ブランチリポジトリ管理システム
US9367570B1 (en) * 2012-04-09 2016-06-14 Google Inc. Ad hoc queryable JSON with audit trails
US20150095822A1 (en) * 2012-07-02 2015-04-02 eScoreMusic, Inc. Systems and methods for music display, collaboration, annotation, composition, and editing
US9237170B2 (en) * 2012-07-19 2016-01-12 Box, Inc. Data loss prevention (DLP) methods and architectures by a cloud service
US20140082472A1 (en) * 2012-09-14 2014-03-20 David H. Sitrick Systems And Methodologies For Event Processing Of Events For Edits Made Relative To A Presentation, Selecting A Selected Set Of Events; And Generating A Modified Presentation Of The Events In The Selected Set
US20140082473A1 (en) * 2012-09-14 2014-03-20 David H. Sitrick Systems And Methodologies Of Event Content Based Document Editing, Generating Of Respective Events Comprising Event Content, Then Defining A Selected Set Of Events, And Generating Of A Display Presentation Responsive To Processing Said Selected Set Of Events, For One To Multiple Users
US9372833B2 (en) 2012-09-14 2016-06-21 David H. Sitrick Systems and methodologies for document processing and interacting with a user, providing storing of events representative of document edits relative to a document; selection of a selected set of document edits; generating presentation data responsive to said selected set of documents edits and the stored events; and providing a display presentation responsive to the presentation data
US9542379B1 (en) * 2012-09-19 2017-01-10 Amazon Technologies, Inc. Synchronizing electronic publications between user devices
US8909596B1 (en) * 2013-01-08 2014-12-09 Google Inc. Operational-transform-compatible representation of 2-dimensional page layout data
US9460073B2 (en) 2013-02-27 2016-10-04 Google Inc. Systems and methods for mutations and operational transforms in a collaborative spreadsheet environment
AU2015204414A1 (en) * 2014-01-07 2016-06-23 Attache Software Australia Pty Limited Document and object manipulation
US20160321226A1 (en) * 2015-05-01 2016-11-03 Microsoft Technology Licensing, Llc Insertion of unsaved content via content channel
JP6172245B2 (ja) * 2015-11-27 2017-08-02 株式会社リコー 情報処理システム、端末装置、プログラム及び画像付与方法
US10902185B1 (en) 2015-12-30 2021-01-26 Google Llc Distributed collaborative storage with operational transformation
CN105739859A (zh) * 2016-01-25 2016-07-06 广东欧珀移动通信有限公司 一种阅读标记方法以及终端设备
WO2018026033A1 (ko) * 2016-08-04 2018-02-08 주식회사 한글과컴퓨터 문서의 동시 편집을 지원하는 문서 협업 지원 장치 및 그 동작 방법
KR102247248B1 (ko) * 2019-05-10 2021-05-03 주식회사 티맥스에이앤씨 공동 편집 파일을 공유하는 방법 및 서버
US11366583B1 (en) * 2021-02-02 2022-06-21 Bank Of America Corporation Computer-to-computer users# edit and event transfer and synchronization

Family Cites Families (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH07182369A (ja) * 1993-12-24 1995-07-21 Matsushita Electric Ind Co Ltd 文書ファイル管理装置及び文書統合装置並びに文書管理システム
US6240414B1 (en) * 1997-09-28 2001-05-29 Eisolutions, Inc. Method of resolving data conflicts in a shared data environment
JP3915331B2 (ja) 1999-08-10 2007-05-16 富士ゼロックス株式会社 共有ドキュメントの編集装置及び編集方法
US6765498B1 (en) * 2000-06-07 2004-07-20 Honeywell International Inc. Embedded digitization system
JP2002140344A (ja) 2000-10-31 2002-05-17 Toshiba Corp 文書管理方法および文書管理装置
KR100392667B1 (ko) 2000-11-28 2003-07-23 주식회사 네스캡 유기전해질을 이용한 금속산화물 전기화학 의사커패시터
US6442483B1 (en) * 2001-08-21 2002-08-27 Arthur George Doglione System and method for defining and creating surrogate addresses for township and range quarter sections
US7774388B1 (en) * 2001-08-31 2010-08-10 Margaret Runchey Model of everything with UR-URL combination identity-identifier-addressing-indexing method, means, and apparatus
JP2007514709A (ja) 2003-12-17 2007-06-07 チバ スペシャルティ ケミカルズ ホールディング インコーポレーテッド 化粧品用メロシアニン誘導体
US8250613B2 (en) * 2004-04-29 2012-08-21 Harris Corporation Media asset management system for managing video news segments and associated methods
US7743064B2 (en) * 2004-04-29 2010-06-22 Harris Corporation Media asset management system for managing video segments from fixed-area security cameras and associated methods
US8230467B2 (en) * 2004-04-29 2012-07-24 Harris Corporation Media asset management system for managing video segments from an aerial sensor platform and associated method
US20080263101A1 (en) 2004-11-12 2008-10-23 Justsystems Corporation Data Processing Device and Data Processing Method
US7991754B2 (en) * 2005-12-05 2011-08-02 Oneimage, Llc System for integrated utilization of data to identify, characterize, and support successful farm and land use operations
US8185567B2 (en) * 2006-01-02 2012-05-22 Telecommunication Systems, Inc. Location aware content using presence information data formation with location object (PIDF-LO)
KR100902336B1 (ko) 2007-07-20 2009-06-12 한국전자통신연구원 동일채널 중계장치 및 그 방법
WO2009032710A2 (en) * 2007-08-29 2009-03-12 Nirvanix, Inc. Filing system and method for data files stored in a distributed communications network
GB2464948A (en) * 2008-10-29 2010-05-05 Quolos Limited Online collaboration
US20100146114A1 (en) * 2008-12-04 2010-06-10 Morris Robert P Methods, Systems, And Computer Program Products For Accessing A Resource Based On Metadata Associated With A Location On A Map
US20100146132A1 (en) * 2008-12-04 2010-06-10 Morris Robert P Methods, Systems, And Computer Program Products For Accessing A Resource Having A Network Address Associated With A Location On A Map
US20100257457A1 (en) * 2009-04-07 2010-10-07 De Goes John A Real-time content collaboration
US8346768B2 (en) * 2009-04-30 2013-01-01 Microsoft Corporation Fast merge support for legacy documents
US9068849B2 (en) * 2009-05-04 2015-06-30 Tomtom North America, Inc. Method and system for reducing shape points in a geographic data information system
US8886455B2 (en) * 2009-12-17 2014-11-11 Tomtom International B.V. Navigation apparatus, audible instruction generation system and method of generating audible instructions
US20110231483A1 (en) * 2010-03-19 2011-09-22 Neil Alexander Derraugh System, method and computer program for delivery of targeted invitations to participate in market research, based on observed geospatial behaviour
US20110231416A1 (en) * 2010-03-22 2011-09-22 Brandon Lee Goodchild Drake Analyzing script for scanning mass internet content
US8265871B1 (en) * 2011-03-31 2012-09-11 Google Inc. Mobile record information entry and geotagging
US20130013414A1 (en) * 2011-07-05 2013-01-10 Haff Maurice Apparatus and method for direct discovery of digital content from observed physical media

Also Published As

Publication number Publication date
JP2011253229A (ja) 2011-12-15
US20110296317A1 (en) 2011-12-01
US8639659B2 (en) 2014-01-28

Similar Documents

Publication Publication Date Title
JP5710156B2 (ja) コンテンツ・データ中のオブジェクトの共同編集を可能にする方法、並びにそのコンピュータ・システム及びコンピュータ・プログラム
US10915219B2 (en) Tracking changes in collaborative authoring environment
US10554664B2 (en) Activity feed for hosted files
JP6426740B2 (ja) クラウド環境における共同ビデオ編集
JP6159338B2 (ja) 汎用サービスを通してのリアル・タイムのドキュメント・プレゼンテーション・データの同期
JP6322140B2 (ja) 協働遠隔アプリケーションの共用および注釈のための双方向デジタル表層を含む非連結アプリケーション拡張
US7475075B2 (en) Integration rich client views in server presentations
US11677697B2 (en) Smart attachment of cloud-based files to communications
KR20140125361A (ko) 웹 애플리케이션에서의 협업 통신 기법
KR20140038399A (ko) 문서 기반의 맥락적 통신
US10033676B2 (en) System and method for annotating a transcript of an ongoing group chat session
US9046982B2 (en) Representing a graphical user interface using a topic tree structure
CA2799617A1 (en) Role-based presentation views
US10685169B2 (en) Messaging application with presentation window
KR102587631B1 (ko) 컴퓨터 애플리케이션 소프트웨어에서 동시 협업 실행취소 작업을 위한 방법 및 시스템
TW201537477A (zh) 筆記本應用程式中之呈現式歷史資訊之使用
US8413074B2 (en) Mechanism for collaboratively exchanging navigation information in a distributed document review
US20170220232A1 (en) Smart slides in a presentation program
Wang Powermeeting: gwt-based synchronous groupware
US20240143266A1 (en) Shared screen tools for collaboration

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20130218

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20130924

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20131112

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20131210

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20131210

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140801

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20141030

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20141030

TRDD Decision of grant or rejection written
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20150217

RD14 Notification of resignation of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7434

Effective date: 20150217

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20150217

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20150304

R150 Certificate of patent or registration of utility model

Ref document number: 5710156

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees