專利名稱:沖突解決的制作方法
沖突解決背景傳統(tǒng)的協(xié)作編輯往往是串行執(zhí)行的。用戶輪流訪問文檔,編輯文檔并存儲(chǔ)其編輯。為了禁止編輯沖突,正在訪問的用戶可以在文件上放置鎖以禁止其他用戶在該訪問 中的用戶正在編輯文檔時(shí)編輯該文檔。該迭代編輯過程可導(dǎo)致延遲,因?yàn)槊恳粋€(gè)用戶都 可能在編輯文檔時(shí)等待輪流。另外,該迭代編輯過程可能難以管理。例如,每一個(gè)用戶 都可能需要跟蹤誰正在編輯文檔的哪些部分,文檔的哪一個(gè)版本是最新的,以及該用戶 何時(shí)將輪到。在其他類型的傳統(tǒng)協(xié)作編輯中,每一個(gè)用戶都可編輯文檔的不同副本。隨后, 可將所有編輯副本合并成單個(gè)文檔。該大規(guī)模合并也可能導(dǎo)致延遲,導(dǎo)致眾多編輯沖突 和/或難以管理。例如,負(fù)責(zé)合并文檔的用戶可能需要跟蹤各文檔之間的關(guān)系。該用戶 還可負(fù)責(zé)解決編輯副本中的兩個(gè)或更多之間的沖突。本發(fā)明正是針對(duì)這些和其它考慮事項(xiàng)而做出的。概述提供本概述是為了以簡(jiǎn)化的形式介紹將在以下詳細(xì)描述中進(jìn)一步描述的一些概 念。本概述并非旨在標(biāo)識(shí)所要求保護(hù)的主題的關(guān)鍵特征或必要特征,也不旨在用于幫助 確定所要求保護(hù)的主題的范圍。本發(fā)明的各實(shí)施例一般涉及使用戶能夠解決在協(xié)作環(huán)境中同步數(shù)據(jù)文件時(shí)引發(fā) 的編輯沖突。創(chuàng)作數(shù)據(jù)文件的用戶副本的每一個(gè)用戶都可以解決數(shù)據(jù)文件的主副本和用 戶副本之間的編輯沖突。來自數(shù)據(jù)文件的用戶副本的更新可以在已經(jīng)解決編輯沖突后被 結(jié)合到主副本中。根據(jù)本發(fā)明的各方面,創(chuàng)作應(yīng)用程序使用戶能夠選擇性地顯示和隱藏?cái)?shù)據(jù)文件 的用戶副本中的編輯沖突。該創(chuàng)作應(yīng)用程序允許自由編輯用戶副本,而不管編輯沖突是 被顯示還是隱藏。根據(jù)其他方面,創(chuàng)作應(yīng)用程序提供使用戶能夠解決所顯示的編輯沖突 的上下文用戶界面。在某些實(shí)施例中,顯示編輯沖突包括注釋沖突內(nèi)容。在一個(gè)實(shí)施例中,注釋沖 突內(nèi)容指示內(nèi)容如何沖突。在另一實(shí)施例中,只注釋在用戶副本中插入、修訂和/或刪 除的沖突內(nèi)容。通過閱讀以下詳細(xì)描述并查閱相關(guān)聯(lián)的附圖,這些和其他特征和優(yōu)點(diǎn)將是顯而 易見的??梢岳斫?,前述一般描述和以下詳細(xì)描述均僅是說明性的,且不限制所要求保 護(hù)的各方面。附圖簡(jiǎn)述
圖1示出了具有作為本發(fā)明的各發(fā)明性方面的示例的特征的示例創(chuàng)作系統(tǒng)100 ;圖2是示出根據(jù)本發(fā)明的各原理的包括存儲(chǔ)設(shè)備的示例創(chuàng)作系統(tǒng)的示意性框 圖,該存儲(chǔ)設(shè)備存儲(chǔ)數(shù)據(jù)文件的主副本,通信地耦合到存儲(chǔ)數(shù)據(jù)文件的用戶副本的用戶 設(shè)備;圖3是示出根據(jù)本發(fā)明的原理的可用于創(chuàng)作數(shù)據(jù)文件的用戶副本的示例創(chuàng)作過程的操作流程的流程圖; 圖4是被配置成實(shí)現(xiàn)根據(jù)本發(fā)明的原理的創(chuàng)作環(huán)境的用戶計(jì)算系統(tǒng)的示意性框 圖;圖5是示出根據(jù)本發(fā)明的原理的可用于實(shí)現(xiàn)圖3的同步操作的示例同步過程的操 作流程的流程圖;圖6是示出根據(jù)本發(fā)明的原理的可用于實(shí)現(xiàn)圖5的繼續(xù)操作的示例編輯過程的操 作流程的流程圖;圖7是示出根據(jù)本發(fā)明的原理的可用于查閱并可任選地解決一個(gè)或多個(gè)編輯沖 突的示例查閱過程的操作流程的流程圖;圖8示出了根據(jù)本發(fā)明的原理的在未標(biāo)識(shí)出未解決的編輯沖突時(shí)顯示給用戶的 示例用戶界面;圖9示出了根據(jù)本發(fā)明的原理的在標(biāo)識(shí)出至少一個(gè)編輯沖突時(shí)顯示給用戶的示 例用戶界面;圖10示出了根據(jù)本發(fā)明的原理的在標(biāo)識(shí)出至少一個(gè)編輯沖突并且用戶已選擇查 閱所標(biāo)識(shí)的編輯沖突時(shí)顯示給用戶的示例用戶界面;圖11是包括根據(jù)本發(fā)明的原理的包括在從概述窗口的列表中選擇編輯沖突時(shí)顯 示的解決界面的用戶界面的示意圖;圖12是示出根據(jù)本發(fā)明的原理的創(chuàng)作應(yīng)用程序用來實(shí)現(xiàn)用戶所提供的解決指令 的示例實(shí)現(xiàn)過程的操作流程的流程圖;圖13是示出根據(jù)本發(fā)明的原理的可用于將所接受的編輯操作實(shí)例化到數(shù)據(jù)文件 的合并版本中的示例接受過程的操作流程的流程圖;圖14是示出根據(jù)本發(fā)明的原理的可用于將所拒絕的編輯操作從數(shù)據(jù)文件的合并 版本中移除或在該合并版本中撤消所拒絕的編輯操作的示例拒絕過程的操作流程的流程 圖;圖15-22示出了根據(jù)本發(fā)明的原理的由創(chuàng)作應(yīng)用程序在第一用戶在線編輯數(shù)據(jù) 文件的用戶副本時(shí)顯示的示例用戶界面的變更;以及圖23-29示出了根據(jù)本發(fā)明的原理的由創(chuàng)作應(yīng)用程序在第一用戶離線編輯數(shù)據(jù) 文件的用戶副本時(shí)顯示的示例用戶界面的變更。詳細(xì)描述在以下詳細(xì)描述中,參考了構(gòu)成了詳細(xì)描述的一部分并作為說明示出了各具體 實(shí)施方式或示例的附圖。雖然將在結(jié)合在計(jì)算機(jī)系統(tǒng)上的操作系統(tǒng)上運(yùn)行的應(yīng)用程序執(zhí) 行的程序模塊的一般上下文中描述本發(fā)明,但本領(lǐng)域的技術(shù)人員將會(huì)認(rèn)識(shí)到,本發(fā)明也 可結(jié)合其他程序模塊實(shí)現(xiàn)??山Y(jié)合此處所描述的實(shí)施例并且可利用其他實(shí)施例而不背離 本發(fā)明的精神或范圍。由此,以下詳細(xì)描述并不旨在限制,本發(fā)明的范圍由所附權(quán)利要 求及其等效方案所定義。根據(jù)本發(fā)明的原理,一種協(xié)作創(chuàng)作應(yīng)用程序提供了一種創(chuàng)作環(huán)境,其中一個(gè)或 多個(gè)用戶能夠經(jīng)由編輯操作(例如,對(duì)內(nèi)容和/或元數(shù)據(jù)的插入、修訂、和/或刪除)來 編輯一個(gè)或多個(gè)數(shù)據(jù)文件(例如,文字處理文檔、演示文檔、電子表格文檔、圖片或其 他圖像、聲音文件、軟件應(yīng)用程序、可執(zhí)行代碼等)。每一個(gè)用戶基于由主副本表示的數(shù)據(jù)文件版本來獲取該數(shù)據(jù)文件的用戶副本。用戶可編輯數(shù)據(jù)文件的用戶副本來創(chuàng)建該數(shù) 據(jù)文件的新版本并周期性地將該新版本與主副本同步。如此處所使用的,同步指的是在數(shù)據(jù)文件的主副本和數(shù)據(jù)文件的用戶副本之間 發(fā)送和/或接收一個(gè)或多個(gè)版本更新以創(chuàng)建數(shù)據(jù)文件的公共版本。例如,每一個(gè)用戶可 以周期性地向主副本發(fā)送表示數(shù)據(jù)文件的新版本的版本更新,并且可以周期性地從主副 本接收表示該主副本的當(dāng)前版本(例如,可以反映其他用戶執(zhí)行的編輯)的版本更新。如上文中所簡(jiǎn)述的,本發(fā)明的各實(shí)施例涉及使用戶能夠解決在協(xié)作環(huán)境中同步 數(shù)據(jù)文件時(shí)引發(fā)的編輯沖突。一般而言,編輯沖突可能在數(shù)據(jù)文件的主副本在獲取用戶 副本和將用戶副本與主副本同步之間的變更或同步之間的變更(例如,對(duì)主副本執(zhí)行編 輯操作)時(shí)引發(fā)。對(duì)主副本的這些變更此處將被稱為“居間變更”。對(duì)數(shù)據(jù)文件的用戶副本執(zhí)行的編輯操作在該編輯操作干擾對(duì)主副本作出的居間 變更(即,或者相反)時(shí)導(dǎo)致如此處所使用的術(shù)語編輯沖突。例如,如果用戶在數(shù)據(jù)文 件的用戶副本中執(zhí)行編輯操作以修訂在該數(shù)據(jù)文件的主副本中被居間變更刪除的第一數(shù) 據(jù)單元,則導(dǎo)致修訂第一數(shù)據(jù)單元的編輯操作將與導(dǎo)致刪除主副本中的第一數(shù)據(jù)單元的 編輯操作沖突?,F(xiàn)在參考附圖,圖1示出了具有作為本發(fā)明的各發(fā)明性方面的示例的特征的示 例創(chuàng)作系統(tǒng)100。創(chuàng)作系統(tǒng)100包括存儲(chǔ)數(shù)據(jù)文件(例如,文字處理文檔、演示文檔、電 子表格文檔、圖片或其他圖像、聲音文件、軟件應(yīng)用程序、可執(zhí)行代碼等)的主副本150 的存儲(chǔ)設(shè)備120。在一個(gè)實(shí)施例中,存儲(chǔ)設(shè)備120可包括一個(gè)或多個(gè)存儲(chǔ)設(shè)備(例如,存 儲(chǔ)設(shè)備的網(wǎng)絡(luò))。在另一實(shí)施例中,存儲(chǔ)設(shè)備120可包括一個(gè)或多個(gè)計(jì)算設(shè)備。創(chuàng)作系統(tǒng)100還包括可以通信地耦合到存儲(chǔ)設(shè)備120的至少一個(gè)用戶計(jì)算設(shè)備 110。如此處所使用的術(shù)語,用戶計(jì)算設(shè)備110包括被配置成從數(shù)據(jù)文件的主副本150獲 取并創(chuàng)作該數(shù)據(jù)文件的用戶副本155的任何設(shè)備。如此處所使用的術(shù)語,創(chuàng)作數(shù)據(jù)文件 可包括創(chuàng)建數(shù)據(jù)文件和/或經(jīng)由編輯操作來編輯數(shù)據(jù)文件。用戶計(jì)算設(shè)備110中的每一 個(gè)都可通過基于主副本150創(chuàng)建數(shù)據(jù)文件的用戶副本155來創(chuàng)作數(shù)據(jù)文件。用戶設(shè)備110 可以在該用戶設(shè)備110通信地耦合到存儲(chǔ)設(shè)備120 (即,在線)或者在該用戶設(shè)備110從 存儲(chǔ)設(shè)備120斷開(即,離線)時(shí)編輯用戶副本155。數(shù)據(jù)文件的用戶副本155可以在用戶計(jì)算設(shè)備110通信地耦合到存儲(chǔ)設(shè)備 120(即,在線)并且周期性地向存儲(chǔ)設(shè)備120發(fā)送要被結(jié)合到主副本150中的一個(gè)或多個(gè) 更新時(shí)同步,并由此與其他用戶計(jì)算設(shè)備共享。用戶副本155的同步還包括周期性地從 存儲(chǔ)設(shè)備120獲取來自主副本150的源自其他用戶計(jì)算設(shè)備的更新。當(dāng)用戶計(jì)算設(shè)備110 離線時(shí),該用戶計(jì)算設(shè)備不與存儲(chǔ)設(shè)備120同步,并因此不與其他用戶計(jì)算設(shè)備同步。涉及數(shù)據(jù)文件的用戶副本與主副本的同步的附加細(xì)節(jié)可以在2007年11月9日提 交的題為“CollaborativeAuthoring(協(xié)作創(chuàng)作)”的共同待審的申請(qǐng)No.ll/938,082中找 至IJ,該申請(qǐng)的公開內(nèi)容被整體結(jié)合于此。涉及用戶計(jì)算設(shè)備離線時(shí)的同步的附加細(xì)節(jié)可 以在2007年12月14日提交的題為"CollaborativeAuthoringModes (協(xié)作創(chuàng)作模式)”的 共同待審的申請(qǐng)No.11/957,010中找到,該申請(qǐng)的公開內(nèi)容被整體結(jié)合于此。在圖1所示的示 例中,四個(gè)用戶計(jì)算設(shè)備110A、110B、IlOC和IlOD通信地耦 合到存儲(chǔ)設(shè)備120。然而,在其他實(shí)施例中,任何數(shù)量的用戶計(jì)算設(shè)備110可以耦合到存儲(chǔ)設(shè)備120。在所示示例中,每 一個(gè)用戶計(jì)算設(shè)備110A、110B、110C、IlOD都可以向
存儲(chǔ)設(shè)備120發(fā)送由該用戶計(jì)算設(shè)備的用戶生成的更新,并且可以向存儲(chǔ)設(shè)備120請(qǐng)求由 其他用戶計(jì)算設(shè)備的用戶生成的更新。用戶計(jì)算設(shè)備110A、110B、110C、IlOD可以是與存儲(chǔ)設(shè)備120不同的設(shè)備, 或者可包括在存儲(chǔ)設(shè)備120上實(shí)現(xiàn)的不同的用戶帳戶。在一個(gè)實(shí)施例中,擔(dān)當(dāng)一個(gè)數(shù) 據(jù)文件的存儲(chǔ)設(shè)備120的設(shè)備可以擔(dān)當(dāng)對(duì)應(yīng)于不同數(shù)據(jù)文件的用戶計(jì)算設(shè)備110,反之 亦然。在一個(gè)實(shí)施例中,存儲(chǔ)設(shè)備120可以是服務(wù)器計(jì)算設(shè)備而用戶計(jì)算設(shè)備110A、 110B、110C、IlOD可以是客戶機(jī)計(jì)算設(shè)備。根據(jù)本發(fā)明的各方面,對(duì)數(shù)據(jù)文件的更新包括內(nèi)容更新和/或元數(shù)據(jù)更新。如 此處所使用的術(shù)語,內(nèi)容更新指的是對(duì)數(shù)據(jù)文件的實(shí)質(zhì)性內(nèi)容作出的任何編輯操作。例 如,對(duì)文字處理文檔的內(nèi)容更新可包括添加的段落(或其各章節(jié))、刪除的段落(或其章 節(jié))、修訂的段落(或其各章節(jié))、以及對(duì)表格、圖表、圖像或其他這樣的對(duì)象的添加、 刪除和/或變更。在另一實(shí)施例中,對(duì)演示文檔的內(nèi)容更新可包括添加、刪除和/或修 訂的圖片、文本、動(dòng)畫、聲音和其他這樣的數(shù)據(jù)對(duì)象。如此處所使用的術(shù)語,元數(shù)據(jù)更新指的是對(duì)數(shù)據(jù)文件的元數(shù)據(jù)作出的任何編輯 操作。元數(shù)據(jù)的非限制性示例包括內(nèi)容鎖、在場(chǎng)信息和其他這樣的數(shù)據(jù)。在場(chǎng)信息指示 哪些用戶已經(jīng)指示編輯文檔的意圖。內(nèi)容鎖禁止不擁有該鎖的用戶編輯該鎖中的任何內(nèi) 容。例如,內(nèi)容鎖可以通過指示另一用戶已經(jīng)要求保護(hù)文檔或其他數(shù)據(jù)文件的哪些部分 來禁止編輯沖突。在某些實(shí)施例中,內(nèi)容鎖可防止(即,阻止)用戶編輯文檔中已被另 一用戶要求保護(hù)的部分。然而,在其他實(shí)施例中,用戶可選擇打破內(nèi)容鎖并編輯數(shù)據(jù)文 件的一部分。在這些情況下,創(chuàng)作應(yīng)用程序可以警告該用戶可能在編輯鎖定部分時(shí)引發(fā) 沖突。如圖2所示,數(shù)據(jù)文件的內(nèi)容152和元數(shù)據(jù)154可被存儲(chǔ)在存儲(chǔ)設(shè)備120的存儲(chǔ) 器125中。在某些實(shí)施例中,數(shù)據(jù)文件的元數(shù)據(jù)154可以與內(nèi)容152分開存儲(chǔ)。例如, 內(nèi)容152可被存儲(chǔ)在數(shù)據(jù)文件150中,而元數(shù)據(jù)154可被存儲(chǔ)在與數(shù)據(jù)文件150分開的表 (未示出)中。然而,在其他實(shí)施例中,元數(shù)據(jù)154可被存儲(chǔ)在數(shù)據(jù)文件150中。數(shù)據(jù) 文件的用戶副本155的內(nèi)容152’和元數(shù)據(jù)154’可被存儲(chǔ)在用戶計(jì)算設(shè)備110上的高速 緩存(參見圖4中的高速緩存426)中。用戶計(jì)算設(shè)備110上的一個(gè)或多個(gè)創(chuàng)作應(yīng)用程序 130處理并操縱數(shù)據(jù)文件的用戶副本155的內(nèi)容152’和/或元數(shù)據(jù)154’。一般而言,用戶計(jì)算設(shè)備110可以與元數(shù)據(jù)更新分開同步內(nèi)容更新。在某些實(shí) 施例中,元數(shù)據(jù)更新在存儲(chǔ)設(shè)備120和用戶計(jì)算設(shè)備110之間自動(dòng)同步,而來自每一個(gè)用 戶計(jì)算設(shè)備110的內(nèi)容更新在相應(yīng)的用戶請(qǐng)求時(shí)更新。在一個(gè)實(shí)施例中,創(chuàng)作環(huán)境100 可以只在不存在(或已經(jīng)解決)編輯沖突時(shí)同步內(nèi)容更新,但可以在不管現(xiàn)有編輯沖突的 情況下同步元數(shù)據(jù)更新。在一個(gè)實(shí)施例中,編輯沖突可能源自從主副本接收到的內(nèi)容更新。在這一實(shí)施 例中,對(duì)用戶副本155的內(nèi)容152’和/或元數(shù)據(jù)154’的變更干擾對(duì)主副本150的內(nèi)容 152的居間變更。這些編輯沖突此處被稱為可合并沖突。例如,在一個(gè)實(shí)施例中,同一 數(shù)據(jù)單元可能已經(jīng)在同步之間在數(shù)據(jù)文件的用戶副本和主副本中被不同地編輯。在另一 實(shí)施例中,該數(shù)據(jù)單元可能已經(jīng)在在用戶副本155中數(shù)據(jù)單元上獲取的內(nèi)容鎖與主副本150同步之前在主副本150中被編輯。在另一實(shí)施例中,編輯沖突可能源自從主副本150接收到的元數(shù)據(jù)更新。在這 一實(shí)施例中,對(duì)用戶副本155的內(nèi)容152’和/或元數(shù)據(jù)154’的變更干擾對(duì)主副本150 的元數(shù)據(jù)154的居間變更(例如,添加內(nèi)容鎖)。這些編輯沖突此處被稱為不可合并沖 突。例如,用戶設(shè)備110可以從數(shù)據(jù)文件的主副本150接收指示在用戶副本155中修訂 的內(nèi)容已被另一用戶鎖定的元數(shù)據(jù)更新。在一個(gè)實(shí)施例中,干擾對(duì)主副本150的居間變更的對(duì)數(shù)據(jù)文件的用戶副本155的 元數(shù)據(jù)154’的變更由對(duì)主副本150的居間變更蓋寫。例如,如果存儲(chǔ)設(shè)備120從第一 用戶設(shè)備110A(圖1)接收到請(qǐng)求數(shù)據(jù)文件的第一數(shù)據(jù)單元上的內(nèi)容鎖的元數(shù)據(jù)更新,并 確定主副本150的對(duì)應(yīng)的第一數(shù)據(jù)單元已經(jīng)被鎖定至第二用戶設(shè)備110B(圖1),則存儲(chǔ) 設(shè)備120將拒絕第一用戶設(shè)備IlOA的鎖定請(qǐng)求。圖3是示出創(chuàng)作應(yīng)用程序可用來創(chuàng)作諸如圖2的用戶副本155等數(shù)據(jù)文件的用戶 副本的示例創(chuàng)作過程300的操作流程的流程圖。創(chuàng)作過程300在開始模塊302處初始化 并開始,并且繼續(xù)至創(chuàng)作操作304。一般而言,創(chuàng)作操作304編輯數(shù)據(jù)文件的用戶副本。 在一個(gè)實(shí)施例中,創(chuàng)作操作304基于現(xiàn)有數(shù)據(jù)文件的主副本來獲取該數(shù)據(jù)文件的用戶副 本(例如,從存儲(chǔ)設(shè)備)。在另一實(shí)施例中,創(chuàng)作操作304創(chuàng)建并編輯新數(shù)據(jù)文件,生 成該數(shù)據(jù)文件的主副本(例如,周期性地或在完成編輯時(shí)),并存儲(chǔ)該數(shù)據(jù)文件的主副本 (例如,存儲(chǔ)在存儲(chǔ)設(shè)備上)。接收操作306在創(chuàng)作應(yīng)用程序處獲取指示對(duì)數(shù)據(jù)文件的主副本作出的居間變更 的更新。例如,在一個(gè)實(shí)施例中,接收操作306獲取指示創(chuàng)作該數(shù)據(jù)文件的一個(gè)或多個(gè) 其他用戶對(duì)該主副本的內(nèi)容作出的任何居間變更的內(nèi)容更新。在另一實(shí)施例中,接收操 作306獲取指示創(chuàng)作該數(shù)據(jù)文件的一個(gè)或多個(gè)其他用戶對(duì)該主副本的元數(shù)據(jù)作出的任何 居間變更的元數(shù)據(jù)更新。在另一實(shí)施例中,接收操作306獲取內(nèi)容和元數(shù)據(jù)更新兩者。在一個(gè)實(shí)施例中,接收操作306以預(yù)定間隔從主副本接收更新。在另一實(shí)施例 中,接收操作306在已經(jīng)對(duì)主副本執(zhí)行閾值量的編輯時(shí)從主副本接收更新。在另一實(shí)施 例中,接收操作306響應(yīng)于對(duì)更新的請(qǐng)求從主副本接收更新。例如,接收操作306可向 主副本請(qǐng)求更新以便在保存數(shù)據(jù)文件之前更新該數(shù)據(jù)文件。在這一實(shí)施例中,接收操作 306在從用戶處接收到同步數(shù)據(jù)文件的指令時(shí)從主副本接收更新。更新操作308將居間變更實(shí)例化到文檔的用戶副本中(例如,通過將居間變更合 并到文檔的用戶副本中)。在一個(gè)實(shí)施例中,更新操作308實(shí)例化不同于居間內(nèi)容變更的 居間元數(shù)據(jù)變更。在一個(gè)實(shí)施例中,更新操作308可以自動(dòng)實(shí)例化內(nèi)容更新和元數(shù)據(jù)更 新。在另一實(shí)施例中,更新操作308可以自動(dòng)實(shí)例化元數(shù)據(jù)更新并且可以在用戶請(qǐng)求時(shí) 實(shí)例化內(nèi)容更新。例如,更新操作308可向用戶呈現(xiàn)按鈕或其他界面工具,該按鈕或其 他界面工具指示可通過選擇該按鈕或其他界面工具來實(shí)例化的更新的可用性。更新操作308還可確定是否存在任何編輯沖突。在某些實(shí)施例中,更新操作308 可取決于是否標(biāo)識(shí)出編輯沖突來不同地實(shí)例化居間變更。例如,在一個(gè)實(shí)施例中,更新 操作308可以在標(biāo)識(shí)出編輯沖突時(shí)禁止實(shí)例化內(nèi)容更新,但可以自動(dòng)繼續(xù)實(shí)例化元數(shù)據(jù) 更新而不管編輯沖突的存在性。有利的是,同步元數(shù)據(jù)更新而不管編輯沖突的存在可以 緩解其他編輯沖突的產(chǎn)生。例如,同步鎖定數(shù)據(jù)可以禁止不同的用戶對(duì)同一數(shù)據(jù)單元進(jìn)行并發(fā)編輯。同步操作310試圖通過向主副本轉(zhuǎn)發(fā)指示對(duì)數(shù)據(jù)文件的用戶副本作出的變更的 更新來將用戶副本與主副本同步。在一個(gè)實(shí)施例中,同步操作310轉(zhuǎn)發(fā)更新以便分發(fā)給 協(xié)作創(chuàng)作數(shù)據(jù)文件的其他用戶。同步操作310只在未標(biāo)識(shí)出用戶副本和主副本之間的編 輯沖突的情況下將用戶副本作為主副本來存儲(chǔ)(即,蓋寫主副本)。在一個(gè)實(shí)施例中,同 步操作310獲取主副本的最新版本并確定在用戶副本和該主副本的最新版本之間是否存 在編輯沖突。根據(jù)本發(fā)明的各方面,同步操作310可使用戶能夠在用戶判斷下標(biāo)識(shí)出編輯沖 突后的任何時(shí)刻發(fā)起對(duì)編輯沖突的解決。同步操作310可使用戶即使在確定存在一個(gè)或 多個(gè)編輯沖突的情況下也能夠自由地繼續(xù)編輯數(shù)據(jù)文件的用戶副本。在一個(gè)實(shí)施例中, 同步操作310可以在向用戶隱藏編輯沖突的情況下繼續(xù)編輯用戶副本。在另一實(shí)施例 中,同步操作310可以在向用戶呈現(xiàn)編輯沖突的情況下繼續(xù)編輯用戶副本。如果繼續(xù)編 輯用戶副本而不管一個(gè)或多個(gè)編輯沖突的存在,則可以本地地存儲(chǔ)指示對(duì)用戶副本的變 更的內(nèi)容更新直到解決編輯沖突,而不是將內(nèi)容更新轉(zhuǎn)發(fā)給主副本以供同步,如將在此 處更詳細(xì)地討論的。同步操作310可以與內(nèi)容更新不同地同步元數(shù)據(jù)更新。例如,在一個(gè)實(shí)施例 中,同步操作310可以只在已經(jīng)解決編輯沖突的情況下轉(zhuǎn)發(fā)內(nèi)容更新,并且可以轉(zhuǎn)發(fā)元 數(shù)據(jù)更新而不管是否已經(jīng)解決編輯沖突。如上所述,同步元數(shù)據(jù)更新而不管編輯沖突的 存在可以緩解其他編輯沖突的產(chǎn)生。此外,在存在編輯沖突時(shí)停止以同步內(nèi)容更新可禁 止將編輯沖突引入數(shù)據(jù)文件的主副本。創(chuàng)作過程300在停止模塊312處完成并結(jié)束。一般而言,具有作為根據(jù)本發(fā)明的原理的各發(fā)明性方面的示例的特征的創(chuàng)作環(huán) 境可在用戶計(jì)算設(shè)備(例如,個(gè)人計(jì)算機(jī)、服務(wù)器計(jì)算機(jī)、筆記本計(jì)算機(jī)、PDA、智能電 話或任何其他這樣的計(jì)算設(shè)備)上實(shí)現(xiàn)。被配置成實(shí)現(xiàn)創(chuàng)作環(huán)境并執(zhí)行諸如圖3的創(chuàng)作 過程300等創(chuàng)作過程的用戶計(jì)算系統(tǒng)400的非限制性實(shí)施例在此處參考圖4來描述。在圖4中,用于實(shí)現(xiàn)本發(fā)明的各原理的示例性計(jì)算系統(tǒng)400包括用戶計(jì)算設(shè)備, 諸如用戶計(jì)算設(shè)備410。在基本配置中,用戶計(jì)算設(shè)備410通常包括至少一個(gè)處理單元 415,其用于執(zhí)行存儲(chǔ)在系統(tǒng)存儲(chǔ)器420中的應(yīng)用程序和程序。取決于計(jì)算設(shè)備910的 確切配置和類型,系統(tǒng)存儲(chǔ)器420可包括但不限于,RAM、ROM、EEPROM>閃存、 CD-ROM、數(shù)字多功能盤(DVD)或其他光存儲(chǔ)設(shè)備、磁帶盒、磁帶、磁盤存儲(chǔ)或其他磁 性存儲(chǔ)設(shè)備、或者其他存儲(chǔ)器技術(shù)。系統(tǒng)存儲(chǔ)器420通常存儲(chǔ)適用于控制計(jì)算設(shè)備410的操作的操作系統(tǒng)422,諸如 來自美國華盛頓州雷蒙德市的微軟公司的WINDOWS 操作系統(tǒng)。系統(tǒng)存儲(chǔ)器420還可 包括其中可存儲(chǔ)文檔的用戶副本427的數(shù)據(jù)文件高速緩存426。數(shù)據(jù)文件的元數(shù)據(jù)429也 可被存儲(chǔ)在用戶高速緩存426中。系統(tǒng)存儲(chǔ)器420還可存儲(chǔ)用于創(chuàng)建和編輯數(shù)據(jù)文件的一個(gè)或多個(gè)軟件應(yīng) 用程序,諸如創(chuàng)作應(yīng)用程序424。適用于根據(jù)本發(fā)明的原理來創(chuàng)作文檔的創(chuàng)作 應(yīng)用程序424的一個(gè)非限制性示例是來自美國華盛頓州雷蒙德市的微軟公司的 MICROSOFT OFFICEWORD創(chuàng)作軟件。創(chuàng)作應(yīng)用程序的其他非限制性示例包括也來 自美國華盛頓州雷蒙德市的微軟公司的POWERPOINT 演示軟件以及VISIO 繪圖和作
10圖軟件。計(jì)算設(shè)備410還可具有用于輸入和操縱數(shù)據(jù)的輸入設(shè)備430,諸如鍵盤、鼠標(biāo)、 筆、語音輸入設(shè)備、觸摸輸入設(shè)備等。還可包括輸出設(shè)備435,諸如顯示屏、揚(yáng)聲器、打 印機(jī)等。這些輸出設(shè)備435在本領(lǐng)域中公知且無需在此處詳細(xì)討論。計(jì)算設(shè)備410還可包含通信連接440,其允許設(shè)備410通過分布式計(jì)算環(huán)境中的 網(wǎng)絡(luò)(例如,內(nèi)聯(lián)網(wǎng)或因特網(wǎng))與其他計(jì)算設(shè)備(例如,圖1的存儲(chǔ)設(shè)備120)進(jìn)行通信。 作為示例而非限制,通信設(shè)備介質(zhì)包括有線介質(zhì),諸如有線網(wǎng)絡(luò)或直接線連接,以及無 線介質(zhì),諸如聲學(xué)、RF、紅外線和其它無線介質(zhì)。圖5是示出可用于實(shí)現(xiàn)圖3的同步操作310的示例同步過程500的操作流程的流 程圖。同步過程500在開始模塊502處初始化并開始,并且繼續(xù)至獲取操作504。獲取 操作504從主副本獲取版本更新。例如,在一個(gè)實(shí)施例中,獲取操作504可向主副本請(qǐng) 求版本更新。在另一實(shí)施例中,接收操作504可從主副本接收周期性版本更新(例如, 以預(yù)定間隔)。標(biāo)識(shí)操作506確定在主副本和用戶副本的當(dāng)前版本之間是否存在編輯沖突。更 具體而言,標(biāo)識(shí)操作506確定自從最近同步(或自從獲取用戶副本)以來的對(duì)主副本的任 何居間變更和對(duì)用戶副本執(zhí)行的任何編輯操作是否彼此干擾。合并操作508將用戶副本和主副本組合成數(shù)據(jù)文件的合并版本并將該合并版本 呈現(xiàn)給用戶。在一個(gè)實(shí)施例中,合并操作508將居間變更集成到數(shù)據(jù)文件的用戶副本 中。在另一實(shí)施例中,合并操作508將用戶變更集成到數(shù)據(jù)文件的主副本中。在又一實(shí) 施例中,合并操作508將居間變更和用戶變更集成到主副本的最近同步版本(即,由用戶 獲取和編輯的主副本的版本)中。第一判定模塊510基于標(biāo)識(shí)操作506是否標(biāo)識(shí)出任何編輯沖突和/或是否仍然未 解決來自先前接收到的更新的任何標(biāo)識(shí)出的編輯沖突來拆分同步過程500的流程。如果 第一判定模塊510確定已經(jīng)標(biāo)識(shí)出至少一個(gè)編輯沖突,則警告操作512向用戶指示編輯沖 突的存在。例如,警告操作512可向用戶呈現(xiàn)指示一個(gè)或多個(gè)編輯沖突存在的消息。在 一個(gè)實(shí)施例中,警告操作512還可指示尚未解決、標(biāo)識(shí)出編輯沖突的結(jié)果(例如,無法完 全將用戶副本與主副本同步直到解決編輯沖突)。第二判定模塊514使用戶能夠選擇何時(shí)查閱并解決所標(biāo)識(shí)的編輯沖突。在所示 示例中,第二判定模塊514向用戶呈現(xiàn)查閱編輯沖突或繼續(xù)編輯數(shù)據(jù)文件的用戶副本而 不查看編輯沖突的選項(xiàng)。如果第二判定模塊514確定用戶選擇了繼續(xù)編輯選項(xiàng),則繼續(xù) 操作516使用戶能夠自由地編輯數(shù)據(jù)文件,如將在此處更詳細(xì)地討論的。然而,如果第二判定模塊514確定用戶選擇了查閱選項(xiàng),則查閱操作518使用戶 能夠查閱并可任選地使用將在此處更詳細(xì)地討論的解決過程來解決編輯沖突。當(dāng)查閱操 作518完成時(shí),同步過程500繼續(xù)返回至第一判定模塊510以確定任何編輯沖突是否仍未 被解決。上述操作流程重復(fù)直到第一判定模塊510確定不存在編輯沖突。當(dāng)?shù)谝慌卸K510確定不存在編輯沖突時(shí),第三判定模塊520確定是否已獲取 來自主副本的所有居間變更并實(shí)例化到用戶副本中。例如,第三判定模塊520可確定自 從最近更新以來是否已經(jīng)對(duì)主副本作出任何居間變更。在一個(gè)實(shí)施例中,第三判定模塊 520將主副本的當(dāng)前版本的版本號(hào)與最近接收到的更新所表示的主副本版本的版本號(hào)進(jìn)行比較。如果第三判定模塊520確定存在其他居間變更(即,最近接收到的更新未反映主 副本的當(dāng)前狀態(tài)),則同步過程500返回到獲取操作504并且該同步過程500再次開始。 然而,如果第三判定模塊520確定不存在其他居間變更(即,最近接收到的更新反映主副 本的當(dāng)前狀態(tài)),則指示操作522提供已經(jīng)解決編輯沖突的指示。例如,在一個(gè)實(shí)施例 中,指示操作522可向用戶顯示指示已經(jīng)解決所有編輯沖突的消息。在另一實(shí)施例中, 指示操作522可向用戶顯示指示已經(jīng)解決編輯沖突的圖形、圖標(biāo)或其他標(biāo)記。存儲(chǔ)操作 524用用戶副本來蓋寫數(shù)據(jù)文件的主副本。同步過程500在停止模塊526處完成并結(jié)束。圖6是示出可用于實(shí)現(xiàn)圖5的繼續(xù)操作516的示例編輯過程600的操作流程的流 程圖。編輯過程600在開始模塊602處初始化并開始,并且繼續(xù)至接收操作604。接收 操作604從用戶處獲取編輯指令。例如,接收操作604可通過諸如圖4的輸入設(shè)備430 等輸入設(shè)備來接收用戶輸入。編輯指令指示對(duì)數(shù)據(jù)文件的用戶副本的合并版本的內(nèi)容和/或元數(shù)據(jù)的變更。 例如,編輯指令可指示應(yīng)添加、刪除或修訂新數(shù)據(jù)文件的數(shù)據(jù)單元(例如,段落、列、 表、幻燈片、圖形等)。編輯指令還可指示元數(shù)據(jù)變更(例如,內(nèi)容鎖變更等)。實(shí)現(xiàn) 操作606對(duì)文檔的新副本執(zhí)行編輯操作。判定模塊608確定用戶是否已指示期望停止編輯。例如,在第一實(shí)施例中,判 定模塊608可確定用戶已選擇解決編輯沖突。在另一實(shí)施例中,判定模塊608確定用戶 已選擇關(guān)閉數(shù)據(jù)文件的新副本或?qū)⑿赂北九c數(shù)據(jù)文件的主副本同步。在又一實(shí)施例中, 判定模塊608可確定用戶已選擇繼續(xù)編輯數(shù)據(jù)文件的新副本。如果判定模塊608確定用戶已選擇繼續(xù)編輯數(shù)據(jù)文件,則編輯過程600循環(huán)回到 接收操作604并再次開始。然而,如果判定模塊608確定用戶已選擇停止編輯數(shù)據(jù)文件, 則保存操作610存儲(chǔ)用戶作出的任何變更。一般而言,保存操作610將包括用戶作出的 任何變更的數(shù)據(jù)文件的合并版本存儲(chǔ)在除了數(shù)據(jù)文件的主副本之外的位置中。在一個(gè)實(shí) 施例中,保存操作610將數(shù)據(jù)文件的合并版本存儲(chǔ)在本地存儲(chǔ)器(例如,本地高速緩存) 中。在另一實(shí)施例中,保存操作610可將數(shù)據(jù)文件的合并版本存儲(chǔ)在與主副本分開的存 儲(chǔ)設(shè)備上。編輯過程600在停止模塊612處完成并結(jié)束。圖7是示出可用來查閱并可任選地解決一個(gè)或多個(gè)編輯沖突的示例查閱過程700 的操作流程的流程圖。例如,查閱過程700是用于實(shí)現(xiàn)圖5的查閱過程518的一個(gè)示例 過程。查閱過程700在開始模塊702處初始化并開始,并且繼續(xù)至顯示操作704。顯示 操作704向用戶呈現(xiàn)編輯沖突。在一個(gè)實(shí)施例中,編輯沖突在數(shù)據(jù)文件的合并版本的上 下文中提供。在某些實(shí)施例中,顯示操作704顯示來自主副本和用戶副本兩者的所有沖突編 輯。例如,在一個(gè)實(shí)施例中,顯示操作704可在合并到數(shù)據(jù)文件的用戶副本中時(shí)顯示由 于沖突編輯而產(chǎn)生的內(nèi)容。在另一實(shí)施例中,顯示操作704可在合并到數(shù)據(jù)文件的主副 本中時(shí)顯示由于沖突編輯而產(chǎn)生的內(nèi)容。在又一實(shí)施例中,顯示操作704可在合并到任 何居間變更之前的數(shù)據(jù)文件版本中時(shí)顯示由于沖突編輯而產(chǎn)生的內(nèi)容。在一個(gè)實(shí)施例中,如果沖突編輯操作是對(duì)數(shù)據(jù)文件中的同一對(duì)象(例如,字 符、單詞、段落、圖形、幻燈片、單元格、行、列等)作出的,則顯示操作704將顯示由這兩個(gè)編輯操作變換的對(duì)象。在另一實(shí)施例中,顯示操作704將顯示對(duì)象的兩個(gè)副本, 一個(gè)副本表示在數(shù)據(jù)文件的主副本中找到的對(duì)象版本,而另一副本表示在該數(shù)據(jù)文件的 用戶副本中找到的對(duì)象版本。在一個(gè)實(shí)施例中,顯示操作704將沖突內(nèi)容作為對(duì)數(shù)據(jù)文件的合并版本的非沖 突內(nèi)容的注釋來顯示。例如,在一個(gè)實(shí)施例中,添加到數(shù)據(jù)文件的沖突內(nèi)容,或者在主 副本中或者在用戶副本中,可被示為被添加到非沖突內(nèi)容并被注釋以指示沖突內(nèi)容被插 入到該數(shù)據(jù)文件的一個(gè)版本中。在另一實(shí)施例中,從數(shù)據(jù)文件中移除的沖突內(nèi)容,或者 在主副本中或者在用戶副本中,可被示為被添加到非沖突內(nèi)容并被注釋以指示已經(jīng)在該 數(shù)據(jù)文件的一個(gè)版本中刪除了沖突內(nèi)容。此處將提供涉及顯示沖突編輯的附加公開內(nèi) 容。獲取操作706從用戶處接收創(chuàng)作指令。例如,獲取操作706可通過諸如圖4的 輸入設(shè)備430等輸入設(shè)備來接收用戶輸入。第一判定模塊708確定用戶是否已經(jīng)提供返 回繼續(xù)自由地編輯數(shù)據(jù)文件而不是繼續(xù)查閱編輯沖突的指令。例如,在一個(gè)實(shí)施例中, 第一判定模塊708可確定用戶已經(jīng)選擇切換界面,這將在此處更詳細(xì)地公開。在另一實(shí) 施例中,第一判定模塊708可確定用戶已提供接受或拒絕一個(gè)或多個(gè)沖突編輯操作的指 令。如果第一判定模塊708確定用戶已提供返回編輯的指令,則查閱過程700在停止 模塊714處完成并結(jié)束,即使所標(biāo)識(shí)的編輯沖突仍未解決。然而,如果第一判定模塊708 確定用戶尚未提供返回編輯的指令,則實(shí)現(xiàn)操作710執(zhí)行用戶指令。一般而言,實(shí)現(xiàn)操 作710可根據(jù)用戶提供的指令來接受或拒絕每一個(gè)編輯操作。例如,在一個(gè)實(shí)施例中, 如果用戶提供接受編輯操作的指令,則實(shí)現(xiàn)操作710可將沖突編輯操作實(shí)例化到數(shù)據(jù)文 件的合并版本中。在另一實(shí)施例中,實(shí)現(xiàn)操作710可以從數(shù)據(jù)文件的合并版本中移除被 拒絕的編輯操作的效果。此處提供關(guān)于執(zhí)行實(shí)現(xiàn)操作710的附加細(xì)節(jié)。第二判定模塊712確定任何標(biāo)識(shí)出的編輯沖突是否仍未解決。在一個(gè)實(shí)施例 中,第二判定模塊712不確定自從最近的編輯沖突標(biāo)識(shí)以來是否已經(jīng)造成任何新編輯沖 突(例如,通過從主副本接收到的更新,通過用戶執(zhí)行的其他編輯操作等)。相反,第二 判定模塊712確定已經(jīng)標(biāo)識(shí)出的任何編輯沖突是否仍未解決。在另一實(shí)施例中,第二判 定模塊712確定是否存在任何新的編輯沖突。如果第二判定模塊712確定至少一個(gè)標(biāo)識(shí)出的編輯沖突仍未解決,則解決過程 700循環(huán)返回到第一判定模塊708。然而,如果第二判定模塊712確定所標(biāo)識(shí)的編輯沖突 已被解決,則解決過程700在停止模塊714處完成并結(jié)束。一般而言,由諸如圖2的用戶設(shè)備110上的創(chuàng)作應(yīng)用程序130等用戶設(shè)備上的創(chuàng) 作應(yīng)用程序顯示的用戶界面可基于該創(chuàng)作應(yīng)用程序是否已經(jīng)標(biāo)識(shí)一個(gè)或多個(gè)編輯沖突來 變更。在某些實(shí)施例中,創(chuàng)作應(yīng)用程序可顯示向用戶指示存在編輯沖突的警告。例如, 在一個(gè)實(shí)施例中,狀態(tài)欄可指示編輯沖突的存在。在另一實(shí)施例中,可以向用戶顯示提 供指示編輯沖突的結(jié)果的標(biāo)記的消息框。例如,消息框可指示直到解決所標(biāo)識(shí)的編輯沖 突才能同步內(nèi)容。另外,當(dāng)標(biāo)識(shí)出編輯沖突時(shí),創(chuàng)作應(yīng)用程序的用戶界面可被配置成在用戶的判 斷下在顯示編輯沖突和隱藏編輯沖突之間切換。一般而言,創(chuàng)作應(yīng)用程序的用戶界面使得數(shù)據(jù)文件能在顯示編輯沖突和隱藏編輯沖突時(shí)自由編輯。該用戶界面啟用使得在用戶 選擇查看編輯沖突時(shí)能查閱并解決編輯沖突的附加功能。圖8-10是示出創(chuàng)作應(yīng)用程序可以向用戶顯示以允許創(chuàng)作和同步數(shù)據(jù)文件的示例 用戶界面的示意性框圖。圖8示出了在未標(biāo)識(shí)出未解決的編輯沖突時(shí)向用戶顯示的示 例用戶界面800。例如,創(chuàng)作應(yīng)用程序可以在執(zhí)行圖3的編輯操作304時(shí)顯示用戶界面 800。用戶界面800包括其中可以顯示數(shù)據(jù)文件的用戶副本的創(chuàng)作窗口 810。在一個(gè)實(shí) 施例中,創(chuàng)作窗口 810包括其中顯示用戶副本的內(nèi)容的編輯區(qū)域812。數(shù)據(jù)文件的元數(shù) 據(jù)(例如,內(nèi)容鎖)也可被顯示在編輯區(qū)域812中。創(chuàng)作應(yīng)用程序的用戶可以在編輯區(qū) 域812中與內(nèi)容交互以添加、刪除或修訂所顯示的內(nèi)容。圖9示出了在標(biāo)識(shí)出至少一個(gè)編輯沖突時(shí)向用戶顯示的示例用戶界面850。例 如,創(chuàng)作應(yīng)用程序可以在用戶選擇繼續(xù)編輯數(shù)據(jù)文件而不是解決沖突(例如,參見圖5的 第一判定模塊516)時(shí)顯示用戶界面850。在一個(gè)實(shí)施例中,在執(zhí)行圖6的編輯過程600 時(shí)顯示用戶界面850。用戶界面850包括圖8的創(chuàng)作窗口 810,該創(chuàng)作窗口具有其中可顯示和/或編輯 數(shù)據(jù)文件的內(nèi)容和元數(shù)據(jù)的編輯區(qū)域812。用戶界面850還包括切換界面815。一般而 言,用戶對(duì)切換界面815的選擇將導(dǎo)致用戶界面顯示所標(biāo)識(shí)的編輯沖突。在一個(gè)實(shí)施例 中,選擇切換界面815還將激活沖突解決界面。圖10示出了在已經(jīng)標(biāo)識(shí)至少一個(gè)編輯沖突并且用戶已選擇查閱所標(biāo)識(shí)的編輯沖 突時(shí)顯示給用戶的示例用戶界面900。用戶界面900還可允許解決所標(biāo)識(shí)的編輯沖突。 例如,創(chuàng)作應(yīng)用程序可以在用戶選擇查閱編輯沖突(例如,參見圖5的第一判定模塊514) 時(shí)顯示用戶界面900。因此,在一個(gè)實(shí)施例中,在執(zhí)行圖7的查閱過程700時(shí)顯示用戶界 面 900。用戶界面900還包括用戶可用來隱藏所標(biāo)識(shí)的編輯沖突的切換界面915。在一個(gè) 實(shí)施例中,選擇切換界面915還將停用沖突解決界面920。例如,選擇切換界面915可使 得向用戶顯示圖9的用戶界面850而不是用戶界面900。用戶界面900包括創(chuàng)作窗口 910,該創(chuàng)作窗口具有其中可顯示和/或編輯數(shù)據(jù)文 件的內(nèi)容和元數(shù)據(jù)的編輯區(qū)域912。編輯區(qū)域912還顯示所標(biāo)識(shí)的編輯沖突以及由所標(biāo)識(shí) 的編輯沖突產(chǎn)生的內(nèi)容。例如,在一個(gè)實(shí)施例中,編輯區(qū)域912可顯示通過將用戶副本 與主副本合并來生成的數(shù)據(jù)文件的合并版本。在某些實(shí)施例中,顯示在編輯區(qū)域912中的所標(biāo)識(shí)的編輯沖突經(jīng)由對(duì)由沖突編 輯操作產(chǎn)生的內(nèi)容的注釋來指示。在一個(gè)實(shí)施例中,注釋指示所產(chǎn)生的內(nèi)容如何沖突。 例如,在一個(gè)實(shí)施例中,可注釋內(nèi)容的一部分(例如,單詞、段落、表、列、圖形等)以 指示已經(jīng)在用戶副本和/或主副本中插入、刪除和/或修訂該部分。指示這樣的插入、 刪除和/或修訂的示例注釋可包括預(yù)定顏色、刪除線、下劃線、預(yù)定不透明度、加亮或 其他這樣的標(biāo)記。用戶界面900還可包括概述窗口 920,其中創(chuàng)作應(yīng)用程序可向用戶傳遞關(guān)于所標(biāo) 識(shí)的編輯沖突的信息。在某些實(shí)施例中,概述窗口 920可包括概述信息區(qū)域922。例如, 概述信息區(qū)域922可顯示創(chuàng)作應(yīng)用程序標(biāo)識(shí)出的并且仍未解決的編輯沖突的數(shù)量。概述信息區(qū)域922還可指示可合并和不可合并編輯沖突的數(shù)量。在一個(gè)實(shí)施例中,概述信息 區(qū)域922可以在解決編輯沖突時(shí)刷新(即,更新)。在某些實(shí)施例中,概述窗口 920還可顯示任何未解決的編輯沖突的列表924。例 如,在一個(gè)實(shí)施例中,在概述窗口 920中列出所有沖突內(nèi)容(例如,在用戶副本或主副本 中添加、刪除和/或修訂的內(nèi)容)。在一個(gè)實(shí)施例中,可以注釋所列出的內(nèi)容以指示該內(nèi) 容的起源(例如,用戶副本或主副本)。在另一實(shí)施例中,可以注釋所列出的內(nèi)容以指示 產(chǎn)生該內(nèi)容的編輯動(dòng)作的類型(例如,修訂、插入、刪除等)。用戶界面900可被配置成使用戶能夠解決所顯示的編輯沖突。例如,用戶界面 900可使用戶能夠提供針對(duì)一個(gè)或多個(gè)所顯示的編輯沖突的指令。在一個(gè)實(shí)施例中,用 戶界面900使用戶能夠根據(jù)順序提供針對(duì)所顯示的編輯沖突的解決指令。在另一實(shí)施例 中,用戶界面900使用戶能夠提供針對(duì)用戶選擇的任何所顯示的編輯沖突的解決指令。解決指令的示例包括用戶用來指示給定編輯操作應(yīng)被實(shí)例化到數(shù)據(jù)文件的合并 版本中的接受指令,以及用戶用來指示不應(yīng)對(duì)數(shù)據(jù)文件的合并版本執(zhí)行編輯操作的拒絕 指令。解決指令的其他示例可包括用戶用來繼續(xù)至后續(xù)編輯沖突而不解決當(dāng)前所選編輯 沖突的下一個(gè)指令,以及用戶用來返回到前一編輯沖突而不解決當(dāng)前所選編輯沖突的上 一個(gè)指令。在某些實(shí)施例中,用戶可通過與一個(gè)或多個(gè)解決界面930交互來提供解決指 令。解決界面的非限制性示例包括按鈕(例如,接受按鈕、拒絕按鈕、下一個(gè)按鈕等)、 下拉菜單、選項(xiàng)卡、以及其他這樣的界面工具。在一個(gè)實(shí)施例中,用戶界面900在顯示 編輯沖突時(shí)向用戶顯示一個(gè)或多個(gè)解決界面。在另一實(shí)施例中,用戶界面900在用于選 擇沖突內(nèi)容時(shí)向用戶顯示一個(gè)或多個(gè)解決界面。例如,用戶可通過選擇(例如,經(jīng)由光標(biāo)或其他輸入接口 )編輯區(qū)域912中的由 沖突編輯操作之一產(chǎn)生的內(nèi)容并與解決界面交互來提供解決指令。在其他實(shí)施例中,用 戶可通過選擇顯示在概述窗口 920中的編輯操作并與解決界面交互以提供或選擇解決指 令,來提供解決指令。例如,在圖11中,用戶界面900包括在從概述窗口 920的列表924中選擇編輯 沖突925時(shí)顯示的解決界面930。圖11所示的解決界面930包括接受按鈕932和拒絕按 鈕934。然而,在其他實(shí)施例中,解決界面930可包括任何所需界面工具。在圖11所示 的示例中,解決界面930作為彈出窗口來顯示。然而,在其他實(shí)施例中,解決界面930 可包括工具欄或其一部分,下拉菜單或其一部分或其他這樣的顯示界面。圖12是示出創(chuàng)作應(yīng)用程序用來實(shí)現(xiàn)用戶提供的解決指令的示例實(shí)現(xiàn)過程1000的 操作流程的流程圖。實(shí)現(xiàn)過程1000在開始模塊1002處初始化并開始,并且繼續(xù)至獲取 操作1004。獲取操作1004從用戶處接收用于解決沖突內(nèi)容的解決指令。例如,獲取操 作1004可確定用戶已經(jīng)選擇沖突內(nèi)容的給定部分并且用戶已選擇特定按鈕、菜單選項(xiàng)或 其他解決界面工具。判定模塊1006確定解決指令指示要接受還是拒絕所選沖突內(nèi)容。如果判定模塊 1006確定獲取操作1004接收到接受指令,則實(shí)現(xiàn)過程100繼續(xù)至接受操作1008。然而, 如果判定模塊1006確定獲取操作1004接收到拒絕指令,則實(shí)現(xiàn)過程100繼續(xù)至拒絕操作 1010。關(guān)于用于實(shí)現(xiàn)接受和拒絕操作1008、1010的示例過程的細(xì)節(jié)在下文中參考圖13和14來討論。實(shí)現(xiàn)過程1000在停止模塊1012處完成并結(jié)束。圖13是示出可用于將所接受的編輯操作實(shí)例化到數(shù)據(jù)文件的合并版本中的示例 接受過程1100的操作流程的流程圖。接受過程1100在開始模塊1102處初始化并開始, 并且繼續(xù)至清除操作1104。清除操作1104從所接受的內(nèi)容中移除任何注釋或其他標(biāo)記。 例如,從數(shù)據(jù)文件的合并版本中移除所接受的內(nèi)容的任何下劃線、刪除線、著色或其他 這樣的注釋。判定模塊1106確定所接受的內(nèi)容是否導(dǎo)致向數(shù)據(jù)文件添加內(nèi)容和/或格式化。 例如,在一個(gè)實(shí)施例中,判定模塊1106確定所接受的內(nèi)容是否包括字符、單詞、表、 列、圖形或數(shù)據(jù)文件的其他數(shù)據(jù)單元。在另一實(shí)施例中,判定模塊1106確定所接受的內(nèi) 容是否向數(shù)據(jù)文件添加任何格式化(例如,粗體、下劃線、字體顏色、加亮等)。如果判定模塊1106確定所接受的編輯操作導(dǎo)致添加內(nèi)容和/或格式化,則接受 過程1100在停止模塊1110處完成并結(jié)束。然而,如果判定模塊1106確定所接受的編輯 操作從數(shù)據(jù)文件中移除內(nèi)容和/或格式化,則移除操作1108從數(shù)據(jù)文件的合并版本中刪 除內(nèi)容和/或格式化。接受過程1100在完成移除操作1108后在停止模塊1110處完成并 結(jié)束。圖14是示出可用于將所拒絕的編輯操作從數(shù)據(jù)文件的合并版本中移除或在該合 并版本中撤消所拒絕的編輯操作的示例拒絕過程1200的操作流程的流程圖。拒絕過程 1200在開始模塊1202處初始化并開始,并且繼續(xù)至清除操作1204。清除操作1204從由 所拒絕的編輯操作產(chǎn)生的內(nèi)容中移除任何注釋或其他標(biāo)記。例如,從數(shù)據(jù)文件的合并版 本中移除內(nèi)容的任何下劃線、刪除線、著色或其他這樣的注釋。判定模塊1206確定所拒絕的編輯操作是否已導(dǎo)致向數(shù)據(jù)文件添加內(nèi)容和/或格 式化。例如,在一個(gè)實(shí)施例中,第四判定模塊1206確定所拒絕的編輯操作是否已向數(shù)據(jù) 文件添加字符、單詞、列、單元格或其他數(shù)據(jù)單元或內(nèi)容對(duì)象。在另一實(shí)施例中,判定 模塊1206確定所拒絕的編輯操作是否已經(jīng)向數(shù)據(jù)文件添加任何格式化(例如,粗體、下 劃線、字體顏色、加亮等)。如果判定模塊1206確定所拒絕的編輯操作未導(dǎo)致向數(shù)據(jù)文件添加內(nèi)容和/或格 式化,則拒絕過程1200在停止模塊1210處完成并結(jié)束。然而,如果判定模塊1206確定 所拒絕的編輯操作已經(jīng)添加內(nèi)容和/或格式化,則移除操作1208從數(shù)據(jù)文件的合并版本 中刪除內(nèi)容和/或格式化。拒絕過程1200在完成移除操作1208后在停止模塊1220處完 成并結(jié)束。本發(fā)明的各原理可通過走查示例應(yīng)用來更好地理解。在第一示例應(yīng)用中,圖 15-22示出了在第一用戶在線編輯數(shù)據(jù)文件的用戶副本時(shí)的對(duì)創(chuàng)作應(yīng)用程序所顯示的示例 用戶界面的變更。在第二示例應(yīng)用中,圖23-29示出了在第一用戶離線編輯數(shù)據(jù)文件的 用戶副本時(shí)的對(duì)創(chuàng)作應(yīng)用程序所顯示的示例用戶界面的變更。在圖15中,創(chuàng)作應(yīng)用程序的用戶界面2000包括顯示窗口 2010,該顯示窗口包括 顯示數(shù)據(jù)文件的用戶副本的內(nèi)容的編輯區(qū)域2012、提供命令選項(xiàng)的命令工具欄2016、以 及指示數(shù)據(jù)文件的用戶副本的狀態(tài)的狀態(tài)欄2018。例如,狀態(tài)欄2018可指示內(nèi)容更新何 時(shí)可用于實(shí)例化到數(shù)據(jù)文件的用戶副本中。狀態(tài)欄2018還可指示何時(shí)標(biāo)識(shí)出編輯沖突。 在所示示例中,狀態(tài)欄2018指示不可從數(shù)據(jù)文件的主副本中獲得內(nèi)容更新。
創(chuàng)作應(yīng)用程序允許例如使用圖3的示例創(chuàng)作過程300來編輯數(shù)據(jù)文件的用戶副 本。在所示示例中,創(chuàng)作應(yīng)用程序使第一用戶能夠在顯示窗口 2010的編輯區(qū)域2012中 自由地編輯數(shù)據(jù)文件的用戶副本(參見圖3的編輯操作304)。在圖15中,第一用戶正在 編輯顯示在編輯區(qū)域2012中的內(nèi)容的第一數(shù)據(jù)單元。第一用戶已經(jīng)將光標(biāo)2019安排在 第一數(shù)據(jù)單元的上方以允許編輯該第一數(shù)據(jù)單元。第二用戶已獲取編輯區(qū)域2012中內(nèi)容 的第二數(shù)據(jù)單元上的鎖2022。顯示在編輯區(qū)域2012中的鎖2022禁止第一用戶自由地編 輯第二數(shù)據(jù)單元。在圖16中,第一用戶已經(jīng)編輯第一數(shù)據(jù)單元已將單詞“dog”改為“doe”。 在一個(gè)實(shí)施例中,將單詞“dog”改為“doe”包括提供刪除單詞“dog”的編輯操作以 及插入單詞“doe”的編輯操作。在另一實(shí)施例中,將單詞“dog”改為“doe”包括 提供刪除字符“g”的編輯操作以及插入字符“e”的編輯操作。在其他實(shí)施例中,可 利用其他編輯操作來獲得相同的結(jié)果。在一個(gè)實(shí)施例中,對(duì)第一數(shù)據(jù)單元的編輯發(fā)起第一用戶鎖定第一數(shù)據(jù)單元的請(qǐng) 求到數(shù)據(jù)文件的主副本的傳輸。在另一實(shí)施例中,第一用戶可提供鎖定第一數(shù)據(jù)單元的 明確指令。例如,第一用戶可選擇第一數(shù)據(jù)單元并選擇用戶界面2000上的鎖選項(xiàng)。因 此,第一用戶所擁有的鎖2024已被放置在圖16中的第一數(shù)據(jù)單元的周圍。在所示示例 中,鎖2024與第二用戶擁有的鎖2022區(qū)分開。例如,第一用戶擁有的鎖2024用虛線顯 示,而第二用戶擁有的鎖2022用實(shí)線顯示。將第一用戶擁有的鎖與其他用戶擁有的鎖區(qū) 分開來可使第一用戶能夠知道該第一用戶已經(jīng)鎖定哪一個(gè)數(shù)據(jù)單元而不妨礙第一用戶編 輯數(shù)據(jù)單元。在一個(gè)實(shí)施例中,每一個(gè)用戶都可具有不同的鎖(例如,每一個(gè)用戶的鎖 可具有不同的顏色、陰影、格式化等)。在圖16A中,創(chuàng)作應(yīng)用程序獲取指示對(duì)數(shù)據(jù)文件的主副本作出的居間變更(參 見圖3的接收操作306)。在一個(gè)實(shí)施例中,創(chuàng)作應(yīng)用程序在預(yù)定時(shí)間間隔過去后接收 該更新。在另一實(shí)施例中,創(chuàng)作應(yīng)用程序響應(yīng)于將用戶副本與主副本同步的請(qǐng)求來接收 更新。出于該示例應(yīng)用的目的,創(chuàng)作應(yīng)用程序被假定已經(jīng)在預(yù)定時(shí)間間隔后自動(dòng)接收更 新。顯示窗口 2010的狀態(tài)欄2018在圖16A中已經(jīng)更新以指示已經(jīng)接收到更新。在一個(gè)實(shí)施例中,創(chuàng)作應(yīng)用程序從主副本接收元數(shù)據(jù)更新。在另一實(shí)施例中, 創(chuàng)作應(yīng)用程序從主副本接收內(nèi)容更新。在該示例應(yīng)用中,創(chuàng)作應(yīng)用程序接收元數(shù)據(jù)更新 和內(nèi)容更新兩者。元數(shù)據(jù)更新指示第二用戶已經(jīng)釋放第二數(shù)據(jù)單元上的鎖2022并已經(jīng)獲 取第一數(shù)據(jù)單元上的鎖(參見圖17的鎖2028)。在該示例中,第二用戶在第一用戶之前 將對(duì)第一數(shù)據(jù)單元的鎖定請(qǐng)求與主副本同步。因此,第二用戶被給予第一數(shù)據(jù)單元上的 鎖。元數(shù)據(jù)更新還指示第三用戶已經(jīng)獲取第三數(shù)據(jù)單元上的第三鎖2026。內(nèi)容更新指示 第二用戶已經(jīng)編輯第一數(shù)據(jù)單元將單詞“l(fā)azy”改為“l(fā)ively”。當(dāng)創(chuàng)作應(yīng)用程序接收到該更新時(shí),創(chuàng)作應(yīng)用程序確定在用戶副本和接收到的更 新之間是否存在任何編輯沖突。如果不存在編輯沖突,則創(chuàng)作應(yīng)用程序自動(dòng)實(shí)例化元數(shù) 據(jù)更新(參見圖3的更新操作308)。在該示例應(yīng)用中,元數(shù)據(jù)更新指示第三用戶已經(jīng)在 第三數(shù)據(jù)單元上建立鎖。因此,在圖16A中的第三數(shù)據(jù)單元周圍顯示第三鎖2026。然而,在一個(gè)實(shí)施例中,如果元數(shù)據(jù)更新與用戶變更沖突,則直到用戶試圖將 用戶副本與主副本同步才實(shí)例化元數(shù)據(jù)更新。在該示例應(yīng)用中,元數(shù)據(jù)更新指示第二用
17戶具有第一數(shù)據(jù)單元上的鎖,這與第一用戶鎖定第一數(shù)據(jù)單元的請(qǐng)求沖突。因此,第二 用戶的第一數(shù)據(jù)單元上的鎖不被自動(dòng)實(shí)例化到用戶副本中。在另一實(shí)施例中,直到解決 任何所標(biāo)識(shí)的編輯沖突才實(shí)例化對(duì)內(nèi)容鎖的釋放。因此,第二用戶對(duì)第二數(shù)據(jù)單元上的 鎖2022的釋放不被自動(dòng)實(shí)例化到用戶副本中。如果不存在編輯沖突,則創(chuàng)作應(yīng)用程序還使用戶能夠確定應(yīng)何時(shí)將內(nèi)容更新實(shí) 例化(例如,合并)到數(shù)據(jù)文件的用戶副本中(參見圖3的更新操作208)。例如,創(chuàng)作 應(yīng)用程序可提供第一用戶可用來提供實(shí)例化更新的指令的實(shí)例化界面。實(shí)例化界面的非 限制性示例包括按鈕、菜單選項(xiàng)、以及其他界面工具。然而,如果創(chuàng)作應(yīng)用程序標(biāo)識(shí)出編輯沖突,則創(chuàng)作應(yīng)用程序禁止用戶將更新實(shí) 例化到用戶副本中。在一個(gè)實(shí)施例中,創(chuàng)作應(yīng)用程序不顯示實(shí)例化界面。在另一實(shí)施例 中,創(chuàng)作應(yīng)用程序不顯示可獲得更新的指示。在該示例應(yīng)用中,元數(shù)據(jù)更新與用戶變更 沖突。因此,創(chuàng)作應(yīng)用程序不向第一用戶提供實(shí)例化內(nèi)容更新的機(jī)會(huì)。在圖17中,第一用戶指示創(chuàng)作應(yīng)用程序嘗試將數(shù)據(jù)文件的用戶副本與主副本同 步(參見圖3的同步操作310)。在一個(gè)實(shí)施例中,創(chuàng)作應(yīng)用程序?qū)崿F(xiàn)圖5所示的同步過 程500。創(chuàng)作應(yīng)用程序在適當(dāng)時(shí)從主副本獲取更新(參見圖5的獲取操作504)并確定該 更新是否產(chǎn)生任何編輯沖突(參見圖5的標(biāo)識(shí)操作506)。在所示示例中,創(chuàng)作應(yīng)用程序 不獲取任何新的更新(即,自從上一次更新以來未對(duì)主副本作出居間變更)。創(chuàng)作應(yīng)用程 序確定先前接收到的更新所表示的居間變更與用戶變更沖突。創(chuàng)建應(yīng)用程序然后將數(shù)據(jù)文件的用戶副本與數(shù)據(jù)文件的主副本合并(參見圖5的 合并操作508)并向第一用戶顯示數(shù)據(jù)文件的合并副本。在所示示例中,創(chuàng)作應(yīng)用程序 在圖17中的編輯區(qū)域2012中顯示數(shù)據(jù)文件的合并版本。一般而言,創(chuàng)作應(yīng)用程序可使 用任何所需合并技術(shù)來集成用戶副本和主副本。例如,在一個(gè)實(shí)施例中,創(chuàng)作應(yīng)用程序 顯示添加到數(shù)據(jù)文件的用戶副本和主副本、從數(shù)據(jù)文件的用戶副本和主副本中刪除、和/ 或在數(shù)據(jù)文件的用戶副本和主副本中修訂的所有內(nèi)容。在另一實(shí)施例中,創(chuàng)作應(yīng)用程序可確定由主副本表示的數(shù)據(jù)文件的版本并且可 對(duì)數(shù)據(jù)文件的主副本版本的未鎖定數(shù)據(jù)單元執(zhí)行來自用戶副本的任何內(nèi)容或格式化添 加、刪除和/或修訂(即,實(shí)例化可合并沖突)。對(duì)于不可合并沖突,諸如對(duì)在主副本上 鎖定的數(shù)據(jù)單元的用戶編輯(例如,在接收指示鎖的元數(shù)據(jù)更新之前執(zhí)行的用戶編輯), 創(chuàng)作應(yīng)用程序可以在鎖定的數(shù)據(jù)單元附近添加重復(fù)數(shù)據(jù)單元,并且可基于在用戶副本中 作出的修訂來修訂該重復(fù)數(shù)據(jù)單元(例如,變更內(nèi)容、添加內(nèi)容鎖等)。因此,數(shù)據(jù)單元 根據(jù)主副本的狀態(tài)來保持鎖定和不變。然而,第一用戶對(duì)數(shù)據(jù)單元的變更被保留在數(shù)據(jù) 文件的合并版本中直到該第一用戶選擇移除它們。在圖17所示的示例中,第一用戶單元被示為由第二用戶鎖定(參見鎖202)并 通過第二用戶執(zhí)行的編輯操作來變更。例如,單詞“l(fā)azy”的第二次出現(xiàn)已被改為
“l(fā)ively”。已經(jīng)在第一數(shù)據(jù)單元附近生成并安排該第一數(shù)據(jù)單元的重復(fù)。該重復(fù)被鎖定 至第一用戶(參見鎖2024)并包括第一用戶在試圖同步之前作出的修訂(例如,“dog” 的第二次出現(xiàn)已被改為“doe”)。第二數(shù)據(jù)單元在圖17中仍被鎖定至第二用戶。在一 個(gè)實(shí)施例中,創(chuàng)作應(yīng)用程序只在用戶副本與主副本同步時(shí)釋放鎖。在另一實(shí)施例中,創(chuàng) 作應(yīng)用程序只在完全同步鎖定的數(shù)據(jù)單元時(shí)釋放鎖。在其他實(shí)施例中,創(chuàng)作應(yīng)用程序可指示鎖已被釋放。因?yàn)閯?chuàng)作應(yīng)用程序已經(jīng)標(biāo)識(shí)編輯沖突,所以創(chuàng)作應(yīng)用程序不繼續(xù)保存到主副本 (參見圖5的第一判定模塊510)。相反,創(chuàng)作應(yīng)用程序顯示一個(gè)或多個(gè)警告消息以通知第 一用戶存在編輯沖突(參見圖5的警告操作512)。例如,在圖17中,在顯示窗口 2010 中顯示警告2017以通知第一用戶存在編輯沖突。在所示示例中,也已經(jīng)更新狀態(tài)欄2018 以指示編輯沖突的存在。在其他實(shí)施例中,可更新狀態(tài)欄2018以指示尚未實(shí)例化的更新 的數(shù)量、所標(biāo)識(shí)的編輯沖突的數(shù)量、或其他這樣的信息。在還有一些其他實(shí)施例中,其 他類型的警告或標(biāo)記可以向第一用戶提供存在編輯沖突的通知。在圖17中,創(chuàng)作應(yīng)用程序還向第一用戶呈現(xiàn)切換界面2015以使該用戶能夠在 繼續(xù)編輯數(shù)據(jù)文件而不查看沖突以及查閱編輯沖突之間進(jìn)行選擇(參見第二判定模塊 514)。第一用戶可選擇繼續(xù)編輯數(shù)據(jù)文件而不查閱編輯沖突(參見圖5的繼續(xù)操作516)。 第一用戶還可選擇選定切換界面2015以揭示編輯沖突(參見圖5的查閱操作518)。在一 個(gè)實(shí)施例中,選擇切換界面2015還激活概述窗口 2030。第一用戶可繼續(xù)編輯數(shù)據(jù)文件的 合并版本而不管第一用戶是否選擇查看編輯沖突。創(chuàng)作應(yīng)用程序可用來實(shí)現(xiàn)圖5的查閱操作518的一個(gè)示例過程包括圖7的查閱過 程700。當(dāng)用戶選擇切換界面2015 (圖17)時(shí),創(chuàng)作應(yīng)用程序向用戶呈現(xiàn)編輯沖突(參見 圖7的顯示操作704)。例如,在一個(gè)實(shí)施例中,選擇切換界面2015在編輯區(qū)域2012和 概述窗口 2030之間拆分顯示窗口 2010,在概述窗口 2030中列出編輯沖突(參見圖18的 列表2034)并且可以顯示關(guān)于這些沖突的概述信息(參見圖18的概述區(qū)域2032)。一般而言,編輯區(qū)域2012顯示數(shù)據(jù)文件的合并版本并使用戶能夠自由地編輯合 并版本。在某些實(shí)施例中,注釋顯示在編輯區(qū)域2012中的數(shù)據(jù)文件的合并版本以指示內(nèi) 容的哪些部分沖突。例如,在一個(gè)實(shí)施例中,注釋數(shù)據(jù)文件的合并版本以指示沖突內(nèi)容 是由插入(例如,經(jīng)由下劃線或其他格式化、文本顏色、加亮或其他這樣的標(biāo)記)還是刪 除(例如,經(jīng)由刪除線或其他格式化、文本、顏色、加亮或其他這樣的標(biāo)記)產(chǎn)生的。在所示示例中,對(duì)內(nèi)容的修訂被示為一系列刪除和插入。然而,在其他實(shí)施例 中,可以不同地注釋對(duì)內(nèi)容的修訂。在其他實(shí)施例中,還可注釋元數(shù)據(jù)(例如,鎖)以指 示元數(shù)據(jù)的哪些部分沖突。在圖18所示的示例中,第一數(shù)據(jù)單元不包含任何編輯沖突, 因?yàn)樵摰谝粩?shù)據(jù)單元在服務(wù)器上被鎖定至第二用戶。因此,不注釋第一數(shù)據(jù)單元。將在 圖18中被示為鎖定至第一用戶的重復(fù)數(shù)據(jù)單元加下劃線以指示該數(shù)據(jù)單元已被插入到數(shù) 據(jù)文件中。概述窗口 2030還顯示沖突編輯操作。解決界面的概述區(qū)域2032指示包含在數(shù) 據(jù)文件的合并版本中的沖突編輯操作的數(shù)量。在所示示例中,概述區(qū)域2032指示已經(jīng)標(biāo) 識(shí)一個(gè)沖突編輯操作。概述窗口 2030的列表2034顯示沖突內(nèi)容。在一個(gè)實(shí)施例中,列 表2034與非沖突內(nèi)容分開顯示沖突內(nèi)容。在另一實(shí)施例中,列表2034注釋沖突內(nèi)容以 指示該內(nèi)容是被插入還是被刪除(例如,參見圖18的標(biāo)記2036)。在另一實(shí)施例中,列 表2034注釋沖突內(nèi)容以指示沖突內(nèi)容的起源(例如,用戶副本或主副本)(例如,參見圖 18的標(biāo)記2038)。創(chuàng)作應(yīng)用程序的第一用戶可以與編輯區(qū)域2012或概述窗口 2030(圖18)交互以 提供返回編輯數(shù)據(jù)文件或解決所顯示的編輯沖突中的任一個(gè)(參見圖7的第一判定模塊708)的指令(參見圖7的獲取操作706)。例如,在一個(gè)實(shí)施例中,用戶可以再次選擇切 換界面2015以隱藏編輯沖突。選擇隱藏沖突從編輯沖突中移除注釋。在一個(gè)實(shí)施例中, 選擇隱藏編輯沖突將導(dǎo)致顯示圖17的用戶界面2000。同步過程700將結(jié)束(參見圖7的 停止模塊714),創(chuàng)作應(yīng)用程序?qū)⒋_定至少一個(gè)編輯沖突仍未解決(參見圖5的第一判定模 塊510),并且第一用戶將再次能夠在自由地編輯數(shù)據(jù)文件和解決沖突之間進(jìn)行選擇?;蛘?,第一用戶可提供接受或拒絕沖突內(nèi)容或其各部分的指令。在一個(gè)實(shí)施例 中,第一用戶可選擇顯示在顯示窗口 2010的編輯區(qū)域2012中的內(nèi)容,并且可以選擇解決 界面上提供解決編輯操作的指令的選項(xiàng)。例如,第一用戶可選擇要提供指令的內(nèi)容并且 可從解決菜單2040 (參見圖19)中選擇菜單選項(xiàng)。在其他實(shí)施例中,第一用戶可使用另 一種類型的解決界面工具來提供解決指令。在圖19所示的示例中,第一用戶選擇(參見選擇標(biāo)記2013)沖突內(nèi)容的第一部 分并經(jīng)由光標(biāo)2019來選擇解決菜單2040上的拒絕選項(xiàng)。因此,創(chuàng)作應(yīng)用程序確定用戶 尚未提供返回編輯的指令(參見圖7的第一判定模塊708)并執(zhí)行解決指令(參見圖7的 實(shí)現(xiàn)操作710)。在其他實(shí)施例中,第一用戶可能已經(jīng)選擇沖突內(nèi)容的全部或不同部分。創(chuàng)作應(yīng)用程序可用來執(zhí)行對(duì)沖突內(nèi)容的所選部分的拒絕的一個(gè)示例過程是圖14 的拒絕過程1200。創(chuàng)作應(yīng)用程序從顯示窗口 2010的編輯區(qū)域2012內(nèi)的所選沖突內(nèi)容中 移除注釋(參見圖14的清除操作1204)。創(chuàng)作應(yīng)用程序還確定(參見圖14的判定模塊 1206)所拒絕的編輯操作導(dǎo)致所選沖突內(nèi)容被添加到數(shù)據(jù)文件。因此,創(chuàng)作應(yīng)用程序從數(shù) 據(jù)文件的合并版本中移除所選沖突內(nèi)容(參見圖14的移除操作1208)。如果編輯操作已 導(dǎo)致刪除內(nèi)容,則拒絕過程1200將結(jié)束而不從數(shù)據(jù)文件中移除所選沖突內(nèi)容。返回到圖7的查閱過程700,創(chuàng)作應(yīng)用程序確定所標(biāo)識(shí)的編輯沖突中的至少一個(gè) 仍未解決(參見圖7的第二判定模塊712),由此重新開始查閱過程700。通過重新開始 查閱過程700,第一用戶可以選擇繼續(xù)解決編輯沖突(例如,使用圖7的查閱過程700), 同時(shí)用戶界面以沖突解決模式來配置?;蛘?,第一用戶可以通過選擇切換界面2015來在 任何時(shí)刻選擇隱藏編輯沖突。圖20示出了在第一用戶已經(jīng)拒絕所選沖突內(nèi)容后的用戶界面2000 (參見圖7的 顯示操作704)。所拒絕的沖突內(nèi)容已經(jīng)從編輯區(qū)域2012中移除。此外,創(chuàng)作應(yīng)用程序 通過將所拒絕的內(nèi)容從概述窗口 2030內(nèi)的列表2034中移除來更新概述窗口 2030以反映 沖突內(nèi)容的解決。因?yàn)樯形赐耆鉀Q沖突內(nèi)容,所以概述區(qū)域2032保持不變。繼續(xù)查閱過程700,創(chuàng)作應(yīng)用程序從第一用戶處獲取另一指令集(參見圖7的獲 取操作706)。在該示例應(yīng)用中,創(chuàng)作應(yīng)用程序獲取解決其余沖突內(nèi)容的指令。例如,圖 21示出了第一用戶可用來向創(chuàng)作應(yīng)用程序提供解決指令的另一解決界面2050。解決界面 2050是列出解決選項(xiàng)(例如,接受、拒絕等)的菜單。該菜單被安排在所選沖突內(nèi)容附 近。在一個(gè)實(shí)施例中,創(chuàng)作應(yīng)用程序在用戶從概述窗口 2030內(nèi)的列表2034中選擇沖突 編輯時(shí)顯示解決界面2050。在另一實(shí)施例中,創(chuàng)作應(yīng)用程序可以在從編輯區(qū)域2012內(nèi)選 擇沖突內(nèi)容時(shí)在編輯區(qū)域2012內(nèi)顯示解決界面2050。然而,在其他實(shí)施例中,第一用戶 可使用任何所需類型的解決界面來向創(chuàng)作應(yīng)用程序提供解決指令。在圖21中,用戶選擇(例如,經(jīng)由鼠標(biāo)右擊、經(jīng)由鼠標(biāo)左擊、懸停、或經(jīng)由另 一輸入設(shè)備來以其他方式選擇)概述窗口 2030的列表2034中的其余沖突內(nèi)容并選擇解決界面2050上的接受選項(xiàng)(例如,使用光標(biāo)2019)。因此,創(chuàng)作應(yīng)用程序確定第一用戶未 提供隱藏編輯沖突并返回編輯的指令(參見圖7的判定模塊708)并實(shí)現(xiàn)接受指令(參見 圖7的實(shí)現(xiàn)操作710)。創(chuàng)作應(yīng)用程序可用來接受所選沖突內(nèi)容的一個(gè)示例過程包括圖13的接受過程 1100。創(chuàng)作應(yīng)用程序從所選沖突內(nèi)容中移除任何注釋(參見圖13的清除操作1104)。創(chuàng) 作應(yīng)用程序確定所選沖突內(nèi)容被插入到數(shù)據(jù)文件中(參見圖13的判定模塊1106)。因此, 接受過程1100完成并結(jié)束(參見圖13的停止模塊1110)。如果創(chuàng)作應(yīng)用程序已經(jīng)確定從 數(shù)據(jù)文件中刪除了沖突內(nèi)容,則創(chuàng)作應(yīng)用程序已從數(shù)據(jù)文件中刪除沖突內(nèi)容(參見圖13 的移除操作1108)。返回到圖7的查閱過程700,創(chuàng)作應(yīng)用程序確定不再有仍未解決的編輯沖突(參 見第二判定模塊712)。因此,查閱過程700完成并結(jié)束(參見圖7的停止模塊714), 由此完成圖5的同步過程500的查閱操作514。同步過程500繼續(xù)返回到第一判定模塊 510,在那里創(chuàng)作應(yīng)用程序確定任何所標(biāo)識(shí)的編輯沖突是否仍未解決。因?yàn)樵谠撌纠龖?yīng)用中第一用戶解決了所有標(biāo)識(shí)出的編輯沖突,所以創(chuàng)作應(yīng)用程 序確定沒有編輯沖突仍未解決。因此,創(chuàng)作應(yīng)用程序檢查主副本以確定附加更新是否可 用(參見圖5的第二判定模塊520)。如果附加更新已經(jīng)變得可用,則同步過程500循環(huán) 返回以獲取并合并新更新。新更新包括自獲取前一更新以來所作出的任何居間變更。如 以上所討論的那樣解決源自新更新的任何沖突。該獲取更新并解決任何所標(biāo)識(shí)的沖突的 過程重復(fù),直到第一用戶解決了數(shù)據(jù)文件的用戶副本和數(shù)據(jù)文件的主副本的當(dāng)前狀態(tài)之 間的所有編輯沖突。當(dāng)創(chuàng)作應(yīng)用程序確定不存在編輯沖突(參見圖5的第一判定模塊510)并且沒有 新更新可用(參見圖5的第二判定模塊520)時(shí),創(chuàng)作應(yīng)用程序?qū)⒏聫挠脩舾北景l(fā)送到 主副本(參見圖5的存儲(chǔ)操作522)以完成用戶副本和主副本的同步。例如,在一個(gè)實(shí)施 例中,創(chuàng)作應(yīng)用程序可用蓋寫主副本的指令將用戶副本完整地發(fā)送到存儲(chǔ)設(shè)備。在另一 實(shí)施例中,創(chuàng)作應(yīng)用程序可發(fā)送指示用戶副本如何與主副本不同的增量更新。創(chuàng)作應(yīng)用程序在該創(chuàng)作應(yīng)用程序成功地將更新上傳到主副本時(shí)警告第一用戶 (參見圖5的指示操作524)。例如,在圖22中,已經(jīng)更新狀態(tài)欄2018以指示已經(jīng)成功 發(fā)送更新。在某些實(shí)施例中,創(chuàng)作應(yīng)用程序還可顯示指示上傳成功的警告窗口 2060。在 一個(gè)實(shí)施例中,警告窗口 2060可提供其他解釋,例如指示上傳結(jié)果。在圖22所示的示 例中,概述窗口 2030從用戶界面中移除,因?yàn)槲礃?biāo)識(shí)出編輯沖突。然而,在其他實(shí)施例 中,概述窗口 2030可以保留直到被第一用戶切換。在圖23-29中提供其中第一用戶正在離線編輯數(shù)據(jù)文件的第二示例應(yīng)用。在圖 23中,創(chuàng)作應(yīng)用程序的用戶界面2200包括顯示窗口 2210,該顯示窗口包括顯示數(shù)據(jù)文件 的用戶副本的內(nèi)容的編輯區(qū)域2212、提供命令選項(xiàng)的命令工具欄2216、以及指示數(shù)據(jù)文 件的用戶副本的狀態(tài)的狀態(tài)欄2218。例如,用戶界面2200可以與圖15的用戶界面2000 相同。在所示示例中,狀態(tài)欄2218指示第一用戶正在離線(即,未通信地耦合到存儲(chǔ) 數(shù)據(jù)文件的主副本的存儲(chǔ)設(shè)備)編輯數(shù)據(jù)文件的用戶副本。另一用戶在編輯區(qū)域2212 內(nèi)的第一數(shù)據(jù)單元上具有鎖2222。因此,創(chuàng)作應(yīng)用程序禁止第一用戶編輯該第一數(shù)據(jù)單兀。創(chuàng)作應(yīng)用程序允許例如使用圖3的示例創(chuàng)作過程300來編輯數(shù)據(jù)文件的用戶副 本。在所示示例中,創(chuàng)作應(yīng)用程序使第一用戶能夠在顯示窗口 2010的編輯區(qū)域2012中 自由地編輯數(shù)據(jù)文件的用戶副本(參見圖3的編輯操作304)。圖24示出了第一用戶對(duì)數(shù) 據(jù)文件的用戶副本作出的編輯變更。具體而言,第一用戶向第三數(shù)據(jù)單元添加了兩個(gè)句 子。然而,在其他實(shí)施例中,第一用戶可能已經(jīng)在數(shù)據(jù)文件的用戶副本中添加、修訂和 /或刪除任何內(nèi)容或元數(shù)據(jù)。因?yàn)榈谝挥脩粽陔x線編輯用戶副本,創(chuàng)作應(yīng)用程序無法同步對(duì)第三數(shù)據(jù)單元 的鎖定請(qǐng)求。在一個(gè)實(shí)施例中,創(chuàng)作應(yīng)用程序存儲(chǔ)鎖定請(qǐng)求直到用戶在線登錄。在這一 實(shí)施例中,創(chuàng)作應(yīng)用程序可以在第三數(shù)據(jù)單元周圍顯示鎖。在另一實(shí)施例中,創(chuàng)作應(yīng)用 程序未嘗試鎖定第三數(shù)據(jù)單元。在一個(gè)實(shí)施例中,創(chuàng)作應(yīng)用程序警告第一用戶無法同步 鎖請(qǐng)求,并因此編輯該數(shù)據(jù)單元可能導(dǎo)致編輯沖突。出于該示例應(yīng)用的目的,創(chuàng)作應(yīng)用 程序存儲(chǔ)鎖定請(qǐng)求以便稍后與主副本同步。在圖25中,創(chuàng)作應(yīng)用程序獲取指示對(duì)數(shù)據(jù)文件的主副本作出的居間變更(參見 圖3的接收操作306)。在一個(gè)實(shí)施例中,創(chuàng)作應(yīng)用程序在預(yù)定時(shí)間間隔過去后接收該 更新。在另一實(shí)施例中,創(chuàng)作應(yīng)用程序響應(yīng)于將用戶副本與主副本同步的請(qǐng)求來接收更 新。出于該示例應(yīng)用的目的,假定創(chuàng)作應(yīng)用程序已經(jīng)在預(yù)定時(shí)間間隔后自動(dòng)接收更新。 顯示窗口 2210的狀態(tài)欄2218在圖25中已被更新以指示已經(jīng)接收到更新。當(dāng)創(chuàng)作應(yīng)用程序接收到該更新時(shí),創(chuàng)作應(yīng)用程序確定在用戶副本和接收到的更 新之間是否存在任何編輯沖突。如果不存在編輯沖突,則創(chuàng)作應(yīng)用程序自動(dòng)實(shí)例化元數(shù) 據(jù)更新(參見圖3的更新操作308)。出于該示例應(yīng)用的目的,假定創(chuàng)作應(yīng)用程序已經(jīng)接 收到指示對(duì)第三數(shù)據(jù)單元作出的變更的內(nèi)容更新,這與第一用戶對(duì)該第三數(shù)據(jù)單元的鎖 定請(qǐng)求沖突。然而,該更新未在第三數(shù)據(jù)單元周圍指示鎖(例如,另一用戶可能已經(jīng)在 作出編輯時(shí)鎖定該第三數(shù)據(jù)單元并隨后釋放該鎖)。因此,創(chuàng)作應(yīng)用程序不向第一用戶提 供實(shí)例化界面或以其他方式禁止實(shí)例化該更新。在圖26中,第一用戶連接到存儲(chǔ)設(shè)備(即在線登錄)并指示創(chuàng)作應(yīng)用程序嘗試 將數(shù)據(jù)文件的用戶副本與主副本同步(參見圖3的同步操作310)。在一個(gè)實(shí)施例中,創(chuàng) 作應(yīng)用程序?qū)崿F(xiàn)圖5所示的同步過程500。創(chuàng)作應(yīng)用程序在適當(dāng)時(shí)從主副本獲取更新(參 見獲取操作504)并確定該更新是否產(chǎn)生任何編輯沖突(參見標(biāo)識(shí)操作506)。在所示示例 中,創(chuàng)作應(yīng)用程序不獲取任何新更新(例如,自從上一次更新以來未對(duì)主副本作出居間 變更)。創(chuàng)作應(yīng)用程序確定由先前接收到的更新表示的居間變更(例如,向第三數(shù)據(jù)單元 添加內(nèi)容)與用戶變更(例如,對(duì)第三數(shù)據(jù)單元的鎖定請(qǐng)求)沖突。創(chuàng)建應(yīng)用程序然后將數(shù)據(jù)文件的用戶副本與數(shù)據(jù)文件的主副本合并(參見圖5的 合并操作508)并向第一用戶顯示數(shù)據(jù)文件的合并副本。在所示示例中,創(chuàng)作應(yīng)用程序在 圖26中的編輯區(qū)域2212中顯示數(shù)據(jù)文件的合并版本。如上所述,創(chuàng)作應(yīng)用程序可使用 任何所需合并技術(shù)來集成用戶副本和主副本。在所示示例中,創(chuàng)作應(yīng)用程序已經(jīng)將來自 主副本的新內(nèi)容添加到用戶副本的第一和第三數(shù)據(jù)單元。被添加到第一數(shù)據(jù)單元的第一新內(nèi)容集即“TBD”未產(chǎn)生編輯沖突。第一用 戶未編輯該第一數(shù)據(jù)單元。被添加到第三數(shù)據(jù)單元的第二新內(nèi)容集即“Jump,fox,jump!” ( “跳、狐貍、跳!”)產(chǎn)生編輯沖突,因?yàn)榈谝挥脩粼噲D鎖定該第三數(shù)據(jù)單 元。另一用戶能夠編輯該第三數(shù)據(jù)單元,因?yàn)榈谝挥脩舻逆i定請(qǐng)求在編輯之前尚未與主 副本同步。然而,因?yàn)楦挛粗甘镜谌龜?shù)據(jù)單元被另一用戶鎖定,所以第一用戶的鎖被 保持在第三數(shù)據(jù)單元周圍。因?yàn)閯?chuàng)作應(yīng)用程序已經(jīng)標(biāo)識(shí)出編輯沖突,所以創(chuàng)作應(yīng)用程序不繼續(xù)保存到主副 本(參見圖5的第一判定模塊510)。相反,創(chuàng)作應(yīng)用程序顯示一個(gè)或多個(gè)警告消息以通 知第一用戶存在編輯沖突(參見圖5的警告操作512)。例如,在圖26中,在顯示窗口 2210中顯示警告2217以通知第一用戶存在編輯沖突。在所示示例中,也已經(jīng)更新狀態(tài) 欄2218以指示存在編輯沖突。在其他實(shí)施例中,可更新狀態(tài)欄2218以指示尚未實(shí)例化 的更新的數(shù)量、所標(biāo)識(shí)的編輯沖突的數(shù)量、或其他這樣的信息。在另外一些實(shí)施例中, 其他類型的警告或標(biāo)記可以向第一用戶提供存在編輯沖突的通知。在圖26中,創(chuàng)作應(yīng)用程序還向第一用戶呈現(xiàn)切換界面2215以使該用戶能夠在繼 續(xù)編輯數(shù)據(jù)文件而不查看編輯沖突以及查閱編輯沖突之間進(jìn)行選擇(參見圖5的第二判定 模塊514)。第一用戶可選擇繼續(xù)編輯數(shù)據(jù)文件而不查閱編輯沖突(參見圖5的繼續(xù)操作 516)。第一用戶還可選擇選定切換界面2215 (圖26)以揭示編輯沖突(參見圖5的查閱操 作518)。在一個(gè)實(shí)施例中,選擇切換界面2215還激活概述窗口 2230 (參見圖27)。第 一用戶可繼續(xù)編輯數(shù)據(jù)文件的合并版本而不管第一用戶是否選擇查看編輯沖突。創(chuàng)作應(yīng)用程序可用來實(shí)現(xiàn)圖5的查閱操作518的一個(gè)示例過程包括圖7的查閱過 程700。當(dāng)用戶選擇切換界面2215時(shí),創(chuàng)作應(yīng)用程序向用戶呈現(xiàn)編輯沖突(參見圖7的 顯示操作704)。例如,在一個(gè)實(shí)施例中,選擇切換界面2215在編輯區(qū)域2212和概述窗 口 2230之間拆分顯示窗口 2210,在概述窗口 2230中列出編輯沖突(參見列表2234)并且 可以顯示關(guān)于這些沖突的概述信息(參見概述窗口 2232)。一般而言,編輯區(qū)域2212顯示數(shù)據(jù)文件的合并版本并使用戶能夠自由地編輯合 并版本。在某些實(shí)施例中,注釋顯示在編輯區(qū)域2212中的數(shù)據(jù)文件的合并版本以指示內(nèi) 容的哪些部分沖突。例如,在一個(gè)實(shí)施例中,注釋數(shù)據(jù)文件的合并版本以指示沖突內(nèi)容 是由插入(例如,經(jīng)由下劃線或其他格式化、字體顏色、加亮、不透明度或其他這樣的 標(biāo)記)還是刪除(例如,經(jīng)由刪除線或其他格式化、字體、顏色、加亮、不透明度或其他 這樣的標(biāo)記)產(chǎn)生的。在所示示例中,第一數(shù)據(jù)單元不包含任何編輯沖突,因?yàn)樵摰谝粩?shù)據(jù)單元在服 務(wù)器上被鎖定至第二用戶。因此,不注釋第一數(shù)據(jù)單元。第二數(shù)據(jù)單元也不包含任何編 輯沖突,因此不注釋該第二數(shù)據(jù)單元。將第三數(shù)據(jù)單元中的被示為鎖定至第一用戶的某 些內(nèi)容加下劃線以指示該內(nèi)容已被插入到數(shù)據(jù)單元中。在一個(gè)實(shí)施例中,只注釋源自用戶副本的沖突內(nèi)容。有利的是,只有注釋用 戶造成的沖突允許該用戶理解數(shù)據(jù)文件的主副本的狀態(tài)以及主副本和用戶副本之間的差 異。然而,在其他實(shí)施例中,可以注釋源自主副本的沖突內(nèi)容和/或用其替換來自用戶 副本的沖突內(nèi)容。概述窗口 2230還顯示沖突編輯操作。解決界面的概述區(qū)域2232指示數(shù)據(jù)文件 的合并版本中所包含的沖突編輯操作的數(shù)量。在所示示例中,概述區(qū)域2232指示已經(jīng)標(biāo) 識(shí)一個(gè)沖突編輯操作。概述窗口 2230的列表2234顯示沖突內(nèi)容。在一個(gè)實(shí)施例中,列
23表2234與非沖突內(nèi)容分開顯示沖突內(nèi)容。在另一實(shí)施例中,列表2234注釋沖突內(nèi)容以 指示該內(nèi)容是被插入還是被刪除(例如,參見圖27的標(biāo)記2236)。在又一實(shí)施例中,列 表2234注釋沖突內(nèi)容以指示沖突內(nèi)容的起源(例如,用戶副本或主副本)(例如,參見圖 27的標(biāo)記2238)。創(chuàng)作應(yīng)用程序的第一用戶可以與解決界面(例如,參見圖27的解決界面2240) 交互以提供返回編輯數(shù)據(jù)文件或解決所顯示的編輯沖突中的任一個(gè)(參見圖7的第一判定 模塊708)的指令(參見圖7的獲取操作706)。例如,在一個(gè)實(shí)施例中,用戶可以再次選 擇切換界面2215以隱藏編輯沖突,如上所述?;蛘?,第一用戶可提供接受或拒絕沖突內(nèi)容或其部分的指令。在一個(gè)實(shí)施例 中,第一用戶可選擇顯示在顯示窗口 2010的編輯區(qū)域2012中的內(nèi)容,并且可以選擇解 決界面2240上提供解決編輯操作的指令的選項(xiàng)。例如,第一用戶可以選擇要對(duì)其提供指 令的內(nèi)容并且可以從示例解決界面2040中選擇接受按鈕2242或拒絕按鈕2244(參見圖 27)。示例解決界面2040還可包括用于在沖突之間排序的下一個(gè)按鈕2246和上一個(gè)按鈕 2248。在其他實(shí)施例中,第一用戶可使用另一種類型的解決界面工具來提供解決指令。在圖8所示的示例中,第一用戶選擇沖突內(nèi)容的第一部分(參見概述窗口 2230 中的選擇標(biāo)記2213)并經(jīng)由光標(biāo)2219來選擇解決界面2040上的接受按鈕2242。然而, 在其他實(shí)施例中,第一用戶可能已經(jīng)經(jīng)由任何所需解決界面提供指令。因此,創(chuàng)作應(yīng)用 程序確定用戶尚未提供返回編輯的指令(參見圖7的第一判定模塊708)并執(zhí)行解決指令 (參見圖7的實(shí)現(xiàn)操作710)。創(chuàng)作應(yīng)用程序可用來接受所選沖突內(nèi)容的一個(gè)示例過程包括圖13的接受過程 1100。創(chuàng)作應(yīng)用程序從所選沖突內(nèi)容中移除任何注釋(參見圖13的清除操作1104)。創(chuàng) 作應(yīng)用程序確定所選沖突內(nèi)容被插入到數(shù)據(jù)文件中(參見圖13的判定模塊1106)。因此, 接受過程1100完成并結(jié)束(參見圖13的停止模塊1110)。如果創(chuàng)作應(yīng)用程序已經(jīng)確定從 數(shù)據(jù)文件中刪除了沖突內(nèi)容,則創(chuàng)作應(yīng)用程序?qū)臄?shù)據(jù)文件中刪除沖突內(nèi)容(參見圖13 的移除操作1108)。返回到圖7的查閱過程700,創(chuàng)作應(yīng)用程序確定不再有仍未解決的編輯沖突(參 見圖7的第二判定模塊712)。因此,查閱過程700完成并結(jié)束(參見圖7的停止模塊 714),由此完成圖5的同步過程500的查閱操作514。同步過程500繼續(xù)返回到第一判定 模塊510 (圖5),在那里創(chuàng)作應(yīng)用程序確定沒有編輯沖突仍未解決。創(chuàng)作應(yīng)用程序還確定 無法從主副本獲得附加更新(參見圖5的第二判定模塊520),并因此將更新從用戶副本發(fā) 送到主副本(參見圖5的存儲(chǔ)操作522)以完成用戶副本和主副本的同步。創(chuàng)作應(yīng)用程序在該創(chuàng)作應(yīng)用程序成功地將更新上傳到主副本時(shí)警告第一用戶 (參見圖5的指示操作524)。例如,在圖29中,已經(jīng)更新狀態(tài)欄2218以指示已經(jīng)成功發(fā) 送更新。在某些實(shí)施例中,創(chuàng)作應(yīng)用程序還可顯示指示上傳成功的警告窗口 2260。在一 個(gè)實(shí)施例中,警告窗口 2260可提供其他解釋,例如指示成功上傳結(jié)果。在圖29所示的 示例中,概述窗口 2230從用戶界面2200中移除,因?yàn)闆]有標(biāo)識(shí)出的編輯沖突仍未解決。 然而,在其他實(shí)施例中,概述窗口 2230可以保留直到被第一用戶停用(例如,經(jīng)由圖27 和28的切換界面2215)。本發(fā)明的實(shí)施例可被實(shí)現(xiàn)為計(jì)算機(jī)進(jìn)程(方法)、計(jì)算系統(tǒng)或制品,諸如計(jì)算機(jī)程序產(chǎn)品或計(jì)算機(jī)可讀介質(zhì)。這些過程(程序)可以用任何數(shù)量的方式,包括本文中所 描述的結(jié)構(gòu)來實(shí)現(xiàn)。一種此類方式是通過本文中描述的類型的設(shè)備的機(jī)器操作。另一可 任選方式是結(jié)合一個(gè)或多個(gè)人類操作者執(zhí)行該方法的各個(gè)操作中的某一些來在計(jì)算設(shè)備 上執(zhí)行這些操作中的一個(gè)或多個(gè)。這些人類操作者無需彼此同在一處,而是其每一個(gè)可 以僅與執(zhí)行程序的一部分的機(jī)器同在一處。計(jì)算機(jī)程序產(chǎn)品可以是計(jì)算機(jī)系統(tǒng)可讀并編碼了用于執(zhí)行計(jì)算機(jī)過程的指令的 計(jì)算機(jī)程序的計(jì)算機(jī)存儲(chǔ)介質(zhì)。計(jì)算機(jī)程序產(chǎn)品還可以是計(jì)算系統(tǒng)可讀并編碼了用于執(zhí) 行計(jì)算機(jī)過程的指令的計(jì)算機(jī)程序的載體上的傳播信號(hào)。如此處所使用的術(shù)語“計(jì)算機(jī) 可讀介質(zhì)”包括存儲(chǔ)介質(zhì)和通信介質(zhì)兩者。本領(lǐng)域的技術(shù)人員可以理解,本發(fā)明方法可以使用其它計(jì)算機(jī)系統(tǒng)配置來實(shí) 現(xiàn),包括手持式設(shè)備、多處理器系統(tǒng)、基于微處理器或可編程消費(fèi)電子產(chǎn)品、小型計(jì)算 機(jī)、大型計(jì)算機(jī)等。本發(fā)明也可以在其中任務(wù)由通過通信網(wǎng)絡(luò)鏈接的遠(yuǎn)程處理設(shè)備執(zhí)行 的分布式計(jì)算環(huán)境中實(shí)現(xiàn)。在分布式計(jì)算環(huán)境中,程序模塊可以位于本地和遠(yuǎn)程存儲(chǔ)器 存儲(chǔ)設(shè)備中。一般而言,程序模塊包括執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類型的例程、 程序、組件、數(shù)據(jù)結(jié)構(gòu)和其他類型的結(jié)構(gòu)。
權(quán)利要求
1.一種協(xié)作創(chuàng)作數(shù)據(jù)文件的方法,包括在第一創(chuàng)作應(yīng)用程序(130)處標(biāo)識(shí)存在于所述數(shù)據(jù)文件的用戶副本(155)和所述數(shù) 據(jù)文件的主副本(150)之間的編輯沖突,所述第一創(chuàng)作應(yīng)用程序(130)在第一計(jì)算設(shè)備 (110)上實(shí)現(xiàn);合并所述數(shù)據(jù)文件的用戶副本和所述數(shù)據(jù)文件的主副本以生成所述數(shù)據(jù)文件的合并 副本;向所述第一創(chuàng)作應(yīng)用程序的用戶顯示所述數(shù)據(jù)文件的合并副本;向用戶呈現(xiàn)使所述用戶能夠在顯示所標(biāo)識(shí)的編輯沖突和隱藏所標(biāo)識(shí)的編輯沖突之間 切換的切換界面(815、915、2015、2215),所述切換界面在標(biāo)識(shí)出所述編輯沖突時(shí)呈現(xiàn) 并且保持直到已經(jīng)解決所標(biāo)識(shí)的編輯沖突,其中所述數(shù)據(jù)文件的合并副本可由所述用戶 在顯示所標(biāo)識(shí)的編輯沖突時(shí)以及在隱藏所標(biāo)識(shí)的編輯沖突時(shí)自由地編輯;以及提供解決界面(930、2040、2050、2240),所述解決界面使所述用戶能夠在所述用戶 切換到顯示所標(biāo)識(shí)的編輯沖突時(shí)提供針對(duì)所標(biāo)識(shí)的編輯沖突的解決指令。
2.如權(quán)利要求1所述的方法,其特征在于,使所述用戶能夠提供解決指令包括使所述 用戶能夠選擇是接受還是拒絕所述編輯沖突。
3.如權(quán)利要求1所述的方法,其特征在于,還包括在所述第一創(chuàng)作應(yīng)用程序處標(biāo)識(shí)存在于所述數(shù)據(jù)文件的用戶副本和所述數(shù)據(jù)文件的 主副本之間的多個(gè)編輯沖突,其中向所述用戶呈現(xiàn)所述切換界面使所述用戶能夠在顯示 所述編輯沖突和隱藏所述編輯沖突之間切換。
4.如權(quán)利要求3所述的方法,其特征在于,還包括在所述用戶切換到顯示所標(biāo)識(shí)的編輯沖突時(shí)顯示所標(biāo)識(shí)的編輯沖突,其中所呈現(xiàn)的 解決界面使所述用戶能夠接受或拒絕所述編輯沖突中的任一個(gè)。
5.如權(quán)利要求1所述的方法,其特征在于,顯示所標(biāo)識(shí)的編輯沖突包括在非沖突內(nèi)容 的上下文中顯示所標(biāo)識(shí)的編輯沖突。
6.如權(quán)利要求5所述的方法,其特征在于,顯示所標(biāo)識(shí)的編輯沖突包括注釋所標(biāo)識(shí)的 編輯沖突以便將所標(biāo)識(shí)的編輯沖突與所述非沖突內(nèi)容區(qū)別開來。
7.如權(quán)利要求6所述的方法,其特征在于,注釋所標(biāo)識(shí)的編輯沖突包括顯示所標(biāo)識(shí)的 編輯沖突的起源。
8.如權(quán)利要求6所述的方法,其特征在于,隱藏所標(biāo)識(shí)的編輯沖突包括從所標(biāo)識(shí)的編 輯沖突中移除任何注釋。
9.如權(quán)利要求1所述的方法,其特征在于,還包括在所述第一創(chuàng)作應(yīng)用程序處接收指 示所述數(shù)據(jù)文件的主副本的當(dāng)前狀態(tài)的更新以便將所述數(shù)據(jù)文件的用戶副本與所述主副 本同步。
10.如權(quán)利要求1所述的方法,其特征在于,還包括在標(biāo)識(shí)出所述編輯沖突時(shí)警告所 述用戶。
11.如權(quán)利要求1所述的方法,其特征在于,還包括接收將所述數(shù)據(jù)文件的用戶副本與所述主副本同步的指令;基于所述用戶副本來生成所述數(shù)據(jù)文件的新副本,所述新副本包括所標(biāo)識(shí)的編輯沖 突,其中編輯所述數(shù)據(jù)文件的新副本不觸發(fā)所述切換界面的呈現(xiàn)。
12.—種存儲(chǔ)可執(zhí)行指令的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),所述指令在由計(jì)算設(shè)備執(zhí)行時(shí)執(zhí)行 一種解決編輯沖突的方法,所述編輯沖突存在于數(shù)據(jù)文件的用戶副本(155)和所述數(shù)據(jù) 文件的主副本(150)之間,所述方法包括向所述計(jì)算設(shè)備的用戶呈現(xiàn)顯示窗口(810、910、2010、2210),所述顯示窗口包括 編輯區(qū)域(812、912、2012、2212)、概述區(qū)域(820、920、2030、2230)以及解決界面 (930、2040、2050、2240),其中所述解決界面被配置成使所述用戶能夠提供針對(duì)所述用 戶選擇的所標(biāo)識(shí)的沖突內(nèi)容的解決指令;在所述顯示窗口的編輯區(qū)域中顯示包括任何所標(biāo)識(shí)的沖突內(nèi)容的用戶副本的任何內(nèi) 容鎖(154、2022、2024)和內(nèi)容(152),其中所述用戶可以在所述編輯區(qū)域中自由地編輯 包括所標(biāo)識(shí)的沖突內(nèi)容的用戶副本的內(nèi)容,所標(biāo)識(shí)的沖突內(nèi)容被注釋以便將所標(biāo)識(shí)的沖 突內(nèi)容與非沖突內(nèi)容區(qū)分開來;在所述概述窗口中顯示所標(biāo)識(shí)的沖突內(nèi)容和任何所標(biāo)識(shí)的沖突內(nèi)容鎖;以及向所述用戶呈現(xiàn)切換界面(815、915、2015、2215),其中所述用戶對(duì)所述切換界面 的選擇在所述顯示窗口的編輯區(qū)域中移除對(duì)所標(biāo)識(shí)的沖突內(nèi)容的任何注釋。
13.如權(quán)利要求12所述的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其特征在于,所述用戶對(duì)所述切換界 面的選擇也從所述顯示窗口中移除所述解決界面。
14.如權(quán)利要求12所述的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其特征在于,還包括顯示向所述用戶 報(bào)告存在所標(biāo)識(shí)的沖突內(nèi)容的警告。
15.如權(quán)利要求12所述的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其特征在于,所標(biāo)識(shí)的沖突內(nèi)容只包 括所述用戶對(duì)所述數(shù)據(jù)文件的用戶副本插入或刪除并且干擾對(duì)所述數(shù)據(jù)文件的主副本的 居間變更的內(nèi)容。
16.—種用于協(xié)作編輯數(shù)據(jù)文件的系統(tǒng),包括其上存儲(chǔ)所述數(shù)據(jù)文件的主副本(150)的存儲(chǔ)設(shè)備(120),所述主副本具有主內(nèi)容 (152)和主鎖(154);其上存儲(chǔ)所述數(shù)據(jù)文件的用戶副本(155)的用戶設(shè)備(110),所述用戶副本具有用戶 內(nèi)容(152’)和用戶鎖(154’),所述用戶內(nèi)容基于所述主內(nèi)容來生成且所述用戶鎖基于 所述主鎖來生成;在所述用戶設(shè)備上實(shí)現(xiàn)的創(chuàng)作應(yīng)用程序(130),所述創(chuàng)作應(yīng)用程序被配置成從所述存 儲(chǔ)設(shè)備接收指示對(duì)所述主內(nèi)容的任何變更的主內(nèi)容更新以及指示對(duì)所述主鎖的任何變更 的主鎖更新,所述創(chuàng)作應(yīng)用程序還被配置成標(biāo)識(shí)所述數(shù)據(jù)文件的用戶副本和所述主內(nèi)容更新之間 以及所述用戶副本和所述主鎖更新之間的任何編輯沖突,并且其中所述創(chuàng)作應(yīng)用程序在對(duì)所述主鎖的任何變更不與對(duì)所述用戶鎖的任何變更沖突 時(shí)自動(dòng)實(shí)例化對(duì)所述主鎖的任何變更;并且其中所述創(chuàng)作應(yīng)用程序只在所述創(chuàng)作應(yīng)用程序未標(biāo)識(shí)出編輯沖突時(shí)自動(dòng)實(shí)例化對(duì)所 述主內(nèi)容的任何變更。
17.如權(quán)利要求16所述的系統(tǒng),其特征在于,所述創(chuàng)作應(yīng)用程序還被配置成只在所述 創(chuàng)作應(yīng)用程序未標(biāo)識(shí)出編輯沖突時(shí)才向所述存儲(chǔ)設(shè)備發(fā)送指示對(duì)所述用戶內(nèi)容的任何變 更的用戶內(nèi)容更新。
18.如權(quán)利要求16所述的系統(tǒng),其特征在于,所述創(chuàng)作應(yīng)用程序還被配置成無論所述 創(chuàng)作應(yīng)用程序是否標(biāo)識(shí)出編輯沖突都向所述存儲(chǔ)設(shè)備發(fā)送指示對(duì)所述用戶鎖的任何變更 的用戶鎖更新。
19.如權(quán)利要求16所述的系統(tǒng),其特征在于,還包括被配置成由所述創(chuàng)作應(yīng)用程序顯示的解決界面,所述解決界面被配置成呈現(xiàn)所述數(shù) 據(jù)文件的用戶副本,包括顯示所述用戶鎖并且顯示注釋以指示任何所標(biāo)識(shí)的編輯沖突的 用戶內(nèi)容。
20.如權(quán)利要求16所述的系統(tǒng),其特征在于,還包括通信地耦合到所述存儲(chǔ)設(shè)備的多 個(gè)用戶設(shè)備,其中每一個(gè)用戶設(shè)備都被配置成獲取所述數(shù)據(jù)文件的用戶副本,以周期性 間隔從所述存儲(chǔ)設(shè)備接收更新,并且在解決所標(biāo)識(shí)的編輯沖突時(shí)向所述存儲(chǔ)設(shè)備發(fā)送更新。
全文摘要
一種協(xié)作創(chuàng)作環(huán)境的各實(shí)施例使用戶能夠解決在數(shù)據(jù)文件的用戶副本與該數(shù)據(jù)文件的主副本同步時(shí)引發(fā)的編輯沖突。內(nèi)容更新可以與元數(shù)據(jù)更新分開同步。元數(shù)據(jù)更新可以自動(dòng)同步,而內(nèi)容更新可以只在解決任何所標(biāo)識(shí)的編輯沖突時(shí)同步。當(dāng)標(biāo)識(shí)出編輯沖突時(shí),創(chuàng)作應(yīng)用程序的用戶界面可被配置成在顯示和隱藏所標(biāo)識(shí)的編輯沖突之間切換。
文檔編號(hào)G06F17/21GK102016834SQ200980115758
公開日2011年4月13日 申請(qǐng)日期2009年3月23日 優(yōu)先權(quán)日2008年4月28日
發(fā)明者E·J·伯恩斯坦, J·B·拜勒, J·I·高德納, K·M·庫特, M·E·米祖洛 申請(qǐng)人:微軟公司