專利名稱:協(xié)作創(chuàng)作模式的制作方法
協(xié)作創(chuàng)作模式背景傳統(tǒng)的協(xié)作編輯往往是按順序進行的。用戶輪流訪問文檔、編輯文檔并存儲他們 的編輯。訪問用戶可在文件上設(shè)置鎖以在該訪問用戶正在編輯該文檔時禁止其他用戶編輯 該文檔。這樣的迭代編輯過程會引起延遲,因為每一用戶在編輯文檔時要等待輪到自己。另 外,迭代編輯過程難以管理。例如,每一用戶需要跟蹤哪個人正在編輯文檔的哪些部分,文 檔的哪一版本是最新近的,以及該用戶何時會輪到。在其它類型的傳統(tǒng)協(xié)作編輯中,用戶可以編輯同一文檔的共享副本。例如,由華盛 頓州雷德蒙德市的微軟公司提供的ONENOTE 筆記程序中,多個用戶可在共享的筆記本 樣式文檔中同時添加、移動和刪除對象。在這樣的產(chǎn)品中,對文檔的改變往往實時地或者近 似實時地可為各用戶所用。針對這些和其它考慮作出了本發(fā)明。概述提供本概述以便用簡化形式介紹在下面的詳細(xì)描述中進一步描述的一些概念。本 概述不旨在標(biāo)識所要求保護的主題的關(guān)鍵特征或基本特征,也不旨在幫助確定所要求保護 的主題的范圍?!愣裕瑓f(xié)作創(chuàng)作應(yīng)用提供一種其中二個或多個用戶可以同時編輯文檔的創(chuàng)作 環(huán)境。該創(chuàng)作應(yīng)用適于有選擇地被配置為處于自由共享每一用戶的編輯的公共操作模式中 或者被配置為處于保持每一用戶的編輯私有的私有操作模式中。根據(jù)各方面,無論選擇哪個操作模式,在文檔的每一用戶副本與主副本之間自動 地同步元數(shù)據(jù)更新。然而,內(nèi)容更新的可用性取決于創(chuàng)作應(yīng)用被配置為所處的操作模式。在一個實施例中,被配置為處于公共操作模式中的創(chuàng)作應(yīng)用周期性地與主副本共 享由該創(chuàng)作應(yīng)用生成的內(nèi)容和元數(shù)據(jù)更新兩者。在另一個實施例中,被配置為處于私有操 作模式中的創(chuàng)作應(yīng)用僅周期性地與主副本共享由該創(chuàng)作應(yīng)用生成的元數(shù)據(jù)更新。根據(jù)其它方面,創(chuàng)作應(yīng)用即使在該創(chuàng)作應(yīng)用不能與文檔的主副本同步內(nèi)容或元數(shù) 據(jù)時(例如,在創(chuàng)作應(yīng)用離線時)也能編輯該文檔的用戶副本。在一個實施例中,創(chuàng)作應(yīng)用 在離線時可被配置為處于公共或私有操作模式中。通過閱讀下面的詳細(xì)描述與審閱相關(guān)附圖,這些和其它特征與優(yōu)點將是顯然的。 應(yīng)當(dāng)理解,上述一般描述和下面的詳細(xì)描述都僅是說明性的且不限制所要求保護的各方附圖簡述
圖1是示出一個具有作為本發(fā)明的發(fā)明性方面的示例的特征的示例創(chuàng)作系統(tǒng)的 示意框圖;圖2是示出根據(jù)本發(fā)明的原理的圖1的創(chuàng)作系統(tǒng)的示意框圖,其中存儲在第一計 算設(shè)備上的文檔可包括內(nèi)容和元數(shù)據(jù);圖3是示出根據(jù)本發(fā)明的原理的 檔的示意框圖,該文檔具有五個數(shù)據(jù)單元,其 中第二個被鎖?。?br>
圖4是示出根據(jù)本發(fā)明的原理被配置為實現(xiàn)創(chuàng)作環(huán)境的用戶計算系統(tǒng)的示意框 圖;圖5是示出根據(jù)本發(fā)明的原理的示例同步過程的操作流的流程圖,通過該過程可 將文檔的用戶副本與文檔的主副本同步;圖6是根據(jù)本發(fā)明的原理的創(chuàng)作系統(tǒng)的示意框圖,在該系統(tǒng)中創(chuàng)作應(yīng)用被配置為 處于公共操作模式中;圖7是示出根據(jù)本發(fā)明的原理的示例性公共模式同步過程的操作流的流程圖,在 創(chuàng)作應(yīng)用被配置為處于公共操作模式中時創(chuàng)作應(yīng)用可通過該過程將文檔的用戶副本與文 檔的主副本同步;圖8是根據(jù)本發(fā)明的原理的創(chuàng)作系統(tǒng)的示意框圖,在其中創(chuàng)作應(yīng)用被配置為處于 私有操作模式中;圖9是示出根據(jù)本發(fā)明的原理的示例私有模式同步過程的操作流的流程圖,在創(chuàng) 作應(yīng)用被配置為處于私有操作模式中時創(chuàng)作應(yīng)用可通過該過程將文檔的用戶副本與文檔 的主副本同步;圖10是示出根據(jù)本發(fā)明的原理的示例性切換過程的操作流的流程圖,創(chuàng)作應(yīng)用 可通過該過程被配置為處于不同的操作模式中;圖11-19是根據(jù)本發(fā)明的原理在協(xié)作創(chuàng)作會話期間的不同時刻存儲在存儲設(shè)備、 第一用戶計算設(shè)備、和第二用戶計算設(shè)備上的高速緩存的示意框圖,在該協(xié)作創(chuàng)作會話期 間第一和第二用戶計算設(shè)備的第一用戶和第二用戶分別同時編輯一個文檔;圖20是示出具有作為根據(jù)本發(fā)明的原理的發(fā)明性方面的示例的特征的用戶計算 設(shè)備的創(chuàng)作系統(tǒng)的示意框圖;圖21是示出根據(jù)本發(fā)明的原理的示例性創(chuàng)作過程的操作流的流程圖,用戶計算 設(shè)備可通過該過程將文檔的用戶副本與文檔的主副本同步;以及圖22是示出根據(jù)本發(fā)明的原理的示例性轉(zhuǎn)換過程的操作流的流程圖,用戶計算 設(shè)備可通過該過程在離線編輯文檔的用戶副本之后將用戶副本與文檔的主副本同步。詳細(xì)描述在下面的詳細(xì)描述中,對形成其一部分的附圖進行參考,并且在這些附圖中作為 說明示出特定的實施例或示例。盡管在結(jié)合在計算機系統(tǒng)上的操作系統(tǒng)上運行的應(yīng)用程序 執(zhí)行的程序模塊的一般上下文中描述本發(fā)明,但本領(lǐng)域的技術(shù)人員將認(rèn)識到,本發(fā)明還可 結(jié)合其它程序模塊來實現(xiàn)。可在不脫離本發(fā)明的本質(zhì)或范圍的情況下組合本文所述的實施 例和利用其它實施例。因此下面的詳細(xì)描述不是在限制意義上采用的,而本發(fā)明的范圍是 由所附的權(quán)利要求書及其等價方案限定的。本發(fā)明的實施例提供多個用戶可協(xié)作創(chuàng)作文檔的環(huán)境。圖1示出具有作為本發(fā)明 的發(fā)明性方面的示例的特征的示例創(chuàng)作系統(tǒng)100。創(chuàng)作系統(tǒng)100包括存儲文檔150的主副 本的存儲設(shè)備120。在一個實施例中,存儲設(shè)備120可包括計算設(shè)備。在另一個實施例中, 存儲設(shè)備120可包括一個或多個存儲設(shè)備(例如,服務(wù)器計算設(shè)備的網(wǎng)絡(luò))。創(chuàng)作系統(tǒng)100還可包括至少一個用戶計算設(shè)備110,它可用通信方式耦合至存儲 設(shè)備120。每一用戶計算設(shè)備110可通過創(chuàng)建文檔150的用戶副本155并編輯用戶副本155 來編輯文檔150。在各用戶計算設(shè)備110周期性地將要與其它用戶計算設(shè)備共享的更新發(fā)送到存儲設(shè)備120并且周期性從存儲設(shè)備120獲得來自其它用戶計算設(shè)備的更新時同步文 檔150的各用戶副本155。作為本文使用的術(shù)語,用戶計算設(shè)備110包括被配置為從文檔的主副本獲得要創(chuàng) 作的文檔的用戶副本的任何計算設(shè)備。用戶計算設(shè)備110可以與存儲設(shè)備120不同或者可 以包括在存儲設(shè)備120上實現(xiàn)的不同用戶帳戶。在一個實施例中,用作一個文檔的存儲設(shè) 備120的計算設(shè)備可用作不同文檔的用戶計算設(shè)備110,反之亦然。在圖1所示的示例中,四個用戶計算設(shè)備110A、110B、110C和IlOD以通信方式耦 合至存儲設(shè)備120。然而,在其它實施例中,任何數(shù)量的計算設(shè)備110可耦合至存儲設(shè)備 120。在所示的示例中,每一用戶計算設(shè)備110A、110B、110C、110D可將由該用戶計算設(shè)備的 用戶生成的更新發(fā)送至存儲設(shè)備120并且可向存儲設(shè)備120請求由其他用戶計算設(shè)備的 用戶生成的更新。在一個實施例中,存儲設(shè)備120可以是服務(wù)器計算設(shè)備而用戶計算設(shè)備 11(^、11( 、110(、1100可以是客戶機計算設(shè)備。如圖2所示,存儲在存儲設(shè)備120上的文檔150的主副本可包括內(nèi)容152和元數(shù) 據(jù)154。在一些實施例中,元數(shù)據(jù)154可以與內(nèi)容152分開存儲。例如,內(nèi)容152可存儲在 文檔150中而元數(shù)據(jù)154可存儲在與文檔150分開的表(未示出)中。然而,在其它實施 例中,元數(shù)據(jù)154可存儲在文檔150內(nèi)。用戶計算設(shè)備110上的創(chuàng)作應(yīng)用130處理和操作文檔150的用戶副本155的相應(yīng) 內(nèi)容和元數(shù)據(jù)。一般而言,創(chuàng)作應(yīng)用130可以獨立于對元數(shù)據(jù)154的更新同步對內(nèi)容152 的更新。例如,可在存儲設(shè)備120與各用戶計算設(shè)備110之間自動地同步元數(shù)據(jù)更新154, 而可在每一用戶請求時同步來自相應(yīng)用戶計算設(shè)備110的內(nèi)容更新152。作為本文使用的術(shù)語,元數(shù)據(jù)更新指對要創(chuàng)作的文檔的元數(shù)據(jù)154所作的任何添 加、刪除和/或修訂。文檔元數(shù)據(jù)的非限制性示例包括內(nèi)容鎖、存在信息、和其它這樣的數(shù) 據(jù)。如將在本文討論的,內(nèi)容鎖禁止沒有該鎖的用戶編輯該鎖內(nèi)的內(nèi)容。存在信息指示哪 些用戶已經(jīng)指示了編輯要創(chuàng)作的文檔的意圖。在一些實施例中,可在存儲設(shè)備120與用戶計算設(shè)備110之間以周期性時間間隔 交換元數(shù)據(jù)。在一個實施例中,可每隔幾秒鐘交換一次元數(shù)據(jù)。然而,元數(shù)據(jù)交換可按較短 或較長的時間間隔發(fā)生。在其它實施例中,可在用戶執(zhí)行定稿動作(例如保存文檔)時交 換元數(shù)據(jù)。作為本文使用的術(shù)語,內(nèi)容更新指對要創(chuàng)作的文檔的實質(zhì)內(nèi)容152所作的任何添 加、刪除和/或修訂。例如,文字處理文檔的內(nèi)容更新可包括添加的段落(即或其章節(jié))、刪 除的段落(即或其章節(jié))、和/或修訂的段落(即或其章節(jié))。在另一個實施例中,演示文 檔的內(nèi)容更新可包括添加的、刪除的和/或修訂的圖片、文本、動畫、聲音、和其它這樣的數(shù) 據(jù)對象。在一些實施例中,僅在用戶請求時交換內(nèi)容。例如,在一個實施例中,用戶計算設(shè) 備110之一的用戶可請求與其他用戶共享內(nèi)容改變。在另一個實施例中,用戶計算設(shè)備110 之一的用戶可請求查看由其他用戶作出的內(nèi)容改變。然而,在其它實施例中,可自動地交換 內(nèi)容。參考圖3,內(nèi)容鎖通過指示文檔的哪些部分已經(jīng)被另一個用戶要求保護來禁止編 輯沖突。在一些實施例中,內(nèi)容鎖可以防止用戶編輯文檔中已經(jīng)被另一個用戶要求保護的部分。然而,在其它實施例中,用戶可以選擇打破內(nèi)容鎖并且編輯文檔的該部分。在這樣的 情形中,該鎖可以警告該用戶在編輯被鎖的章節(jié)時會引起沖突。圖3是具有五個數(shù)據(jù)單元210、220、230、240、250的文檔200的示意框圖。在一個 實施例中,文檔200是文字處理文檔而數(shù)據(jù)單元210-250是文本段落。在另一個實施例中, 文檔200是演示文檔而第一數(shù)據(jù)單元210是標(biāo)題或主題標(biāo)目,第二數(shù)據(jù)單元220是圖片或 其它數(shù)據(jù)對象,以及其余的數(shù)據(jù)單元230、240、250是文本框。第一用戶可以在文檔200的數(shù)據(jù)單元210-250中的一個或多個周圍生成鎖。在圖 3所示的示例中,第一用戶已經(jīng)鎖住了第二數(shù)據(jù)單元220,如交叉影線所示。通過生成內(nèi)容 鎖,第一用戶已經(jīng)指示第一用戶想要編輯第二數(shù)據(jù)單元220。例如,第一用戶可以在第一用 戶主動編輯數(shù)據(jù)單元220時生成該鎖。在另一個實施例中,第一用戶可以生成該鎖并且隨 后在稍后編輯數(shù)據(jù)單元220。在其它實施例中,在第一用戶編輯文檔時自動生成該鎖。如上 所述,管理文檔200的創(chuàng)作應(yīng)用可防止除第一用戶之外的用戶編輯被鎖的數(shù)據(jù)單元220。一般而言,由第一用戶生成的內(nèi)容鎖在該鎖存在期間向所有訪問該文檔的其他用 戶顯示。在一個實施例中,第一用戶也可以查看內(nèi)容鎖。鎖可以使用不同類型的指示物來 顯示。例如,在一個實施例中,被鎖數(shù)據(jù)單元的背景可以被著色、加陰影或加圖案(例如,見 圖3的數(shù)據(jù)單元220)。在另一個實施例中,被鎖單元的內(nèi)容(例如,文本、圖片、形狀、或其 它數(shù)據(jù)對象)可被著色、加陰影或加圖案。在又一個實施例中,可毗鄰于被鎖數(shù)據(jù)單元顯示 框、括號、或符號來指示該鎖。鎖元數(shù)據(jù)可以用各種不同格式來存儲。例如,鎖元數(shù)據(jù)可用表格式來存儲。存在 元數(shù)據(jù)也可以用各種格式來存儲。例如,存在元數(shù)據(jù)可以用表來存儲。然而,在另一個實施 例中,鎖和存在元數(shù)據(jù)可用不同格式來存儲?!愣?,具有作為根據(jù)本發(fā)明的原理的發(fā)明性方面的示例的特征的創(chuàng)作環(huán)境可 在用戶計算設(shè)備(例如,個人計算機、服務(wù)器計算機、筆記本計算機、PDA、智能電話、或任何 其它這樣的計算設(shè)備)上實現(xiàn)。這里參考圖4描述一個被配置為實現(xiàn)創(chuàng)作環(huán)境的用戶計算 系統(tǒng)400的非限制性實施例。在圖4中,用于實現(xiàn)本發(fā)明的原理的示例性計算系統(tǒng)400包括用戶計算設(shè)備如用 戶計算設(shè)備410。在基本配置中,用戶計算設(shè)備410 —般包括至少一個處理單元415用于執(zhí) 行存儲在系統(tǒng)存儲器420中的應(yīng)用和程序。取決于計算設(shè)備410的確切配置和類型,系統(tǒng) 存儲器420可包括但不限于,RAM、ROM、EEPR0M、閃存存儲器、CD-ROM、數(shù)字多功能盤(DVD) 或其它光存儲設(shè)備、磁盒、磁帶、磁盤存儲或其它磁存儲設(shè)備、或者其它存儲器技術(shù)。系統(tǒng)存儲器420 —般存儲適用于控制計算設(shè)備410的操作的操作系統(tǒng)422,諸如華 盛頓州雷德蒙德市的微軟公司的WINDOWS 操作系統(tǒng)。系統(tǒng)存儲器420還可包括其中可 以存儲文檔的用戶副本427的文檔高速緩存426。文檔的元數(shù)據(jù)429也可存儲在用戶高速 緩存426中。系統(tǒng)存儲器420還可存儲一個或多個軟件應(yīng)用,諸如用于創(chuàng)建和編輯文檔的創(chuàng)作 應(yīng)用424。適于根據(jù)本發(fā)明的原理的用于創(chuàng)作文檔的創(chuàng)作應(yīng)用424的一個非限制性示例是 來自華盛頓州雷德蒙德市的微軟公司的MICROSOFT OFFICE WORD創(chuàng)作軟件。創(chuàng)作應(yīng)用 的其它非限制性示例包括POWERPOINT 演示軟件和VISIO 繪制和圖表制作軟件,它 們都來自華盛頓州雷德蒙德市的微軟公司。
計算設(shè)備410還可具有諸如鍵盤、鼠標(biāo)、筆、語音輸入設(shè)備、觸摸輸入設(shè)備等輸入 設(shè)備430用于輸入和操作數(shù)據(jù)。還可包括諸如顯示屏幕、揚聲器、打印機等的輸出設(shè)備435。 這些輸出設(shè)備435在本領(lǐng)域是眾所周知的并且在此不詳細(xì)討論。計算設(shè)備410還可包含通信連接440,它允許設(shè)備410與其它計算設(shè)備通信,例如 通過分布式計算環(huán)境中的網(wǎng)絡(luò)(例如,內(nèi)聯(lián)網(wǎng)或因特網(wǎng))與圖1的存儲設(shè)備120通信。作 為示例而非限制,通信設(shè)備介質(zhì)440包括接線介質(zhì)如接線網(wǎng)絡(luò)或直接線連接和無線介質(zhì)如 聲音、RF、紅外和其它無線介質(zhì)。參考圖5-19,創(chuàng)作應(yīng)用與存儲設(shè)備交換內(nèi)容和元數(shù)據(jù)所使用的同步過程可根據(jù)創(chuàng) 作應(yīng)用的用戶所選擇的保密模式而不同。圖5是示出示例性同步過程500的流程圖,在用 戶計算設(shè)備110上實現(xiàn)的創(chuàng)作系統(tǒng)100可以通過該過程將要創(chuàng)作的文檔的用戶副本155與 存儲在存儲設(shè)備120上的文檔的主副本150同步。同步過程500在開始模塊502處初始化 和開始并且繼續(xù)到第一更新操作504。第一更新操作504將用戶副本155的元數(shù)據(jù)與主副本150的元數(shù)據(jù)同步。在一些 實施例中,第一更新操作504在不需要與用戶交互的情況下同步元數(shù)據(jù)。例如,第一更新操 作504可在存儲設(shè)備120和用戶計算設(shè)備110之間提供按周期性時間間隔進行的元數(shù)據(jù)的 交換。在一個實施例中,第一更新操作504每隔若干秒提供一次元數(shù)據(jù)的交換。然而,在其 它實施例中,第一更新操作504可提供按較短或較長的時間發(fā)生的元數(shù)據(jù)的交換。獲得操作506周期性地檢查存儲設(shè)備120的存儲高速緩存125以確定是否有來自 其他用戶的任何內(nèi)容更新可用。如果有這樣的內(nèi)容更新可用,則獲得操作506獲得這些內(nèi) 容更新。在一個實施例中,獲得操作506使得用戶設(shè)備110輪詢存儲設(shè)備120并且從存儲 高速緩存125拉取任何內(nèi)容更新。在另一個實施例中,獲得操作506使得存儲設(shè)備120應(yīng) 請求向用戶設(shè)備110發(fā)送內(nèi)容更新。然而,在其它實施例中,存儲設(shè)備120在沒有來自用戶 設(shè)備110的提示的情況下發(fā)送任何可用的內(nèi)容更新至用戶設(shè)備110。確定模塊508確定創(chuàng)作應(yīng)用130被配置為所處的操作模式(例如公共或私有)。例 如,確定模塊508可確定創(chuàng)作應(yīng)用被配置為處于公共操作模式中。一般而言,創(chuàng)作應(yīng)用130 在公共模式中操作時,創(chuàng)作應(yīng)用130 —般與存儲設(shè)備120共享內(nèi)容更新。在一個實施例中, 在公共模式中操作的創(chuàng)作應(yīng)用130在完成定稿動作(例如,用戶保存文檔、自動保存功能激 活等)時發(fā)送內(nèi)容更新至存儲設(shè)備120。在另一個實施例中,確定模塊508可確定創(chuàng)作應(yīng)用130被配置為處于私有操作模 式中。一般而言,在私有模式中操作的創(chuàng)作應(yīng)用130—般不與存儲設(shè)備120共享內(nèi)容更新。 在一個實施例中,在私有模式中操作的創(chuàng)作應(yīng)用130即使在完成定稿動作(例如,用戶保存 文檔、自動保存功能激活等)時也不將內(nèi)容更新發(fā)送至存儲設(shè)備120。在這樣的實施例中, 由創(chuàng)作應(yīng)用130生成的內(nèi)容更新僅在用戶切換到公共操作模式時才會被發(fā)送到存儲設(shè)備 120。因此,如果確定模塊508確定創(chuàng)作應(yīng)用130被配置為處于公共操作模式中,則發(fā)送 操作510發(fā)送由創(chuàng)作應(yīng)用130生成的內(nèi)容更新至存儲設(shè)備120。同步過程500在停止模塊 512處完成并結(jié)束。然而,如果確定模塊508確定創(chuàng)作應(yīng)用130被配置為處于私有操作模式 中,則同步過程500繼續(xù)至停止模塊512而不實現(xiàn)發(fā)送操作510。圖6是被配置為實現(xiàn)公共模式同步循環(huán)的創(chuàng)作系統(tǒng)600的示意框圖。創(chuàng)作系統(tǒng)600—般包括存儲設(shè)備620和一個或多個用戶設(shè)備610。要創(chuàng)作的文檔的內(nèi)容652和元數(shù)據(jù) 654被存儲在存儲設(shè)備620上的存儲器625中。在圖6所示的示例中,第一用戶設(shè)備610A 和第二用戶設(shè)備610B都訪問存儲在存儲設(shè)備620上的內(nèi)容652和元數(shù)據(jù)654。用戶計算設(shè) 備610A、610B各自分別包括本地高速緩存635A、635B,并分別包括要創(chuàng)作的文檔的用戶副 本 655A、655B。每一用戶計算設(shè)備610的本地高速緩存635被配置為存儲發(fā)布模塊632、保護模塊 634、獲得模塊636、集成模塊638、和元數(shù)據(jù)同步模塊639。保護模塊634被配置為將內(nèi)容 改變存儲至本地高速緩存635。在一個實施例中,保護模塊634觸發(fā)發(fā)布模塊632的激活。 發(fā)布模塊632被配置為將來自本地高速緩存635的內(nèi)容更新提供(例如,推送、發(fā)送等)至 存儲設(shè)備620的存儲存儲器625。在一個實施例中,發(fā)布模塊632被配置為在本地高速緩存 635中對由用戶副本655生成的內(nèi)容更新排隊以用于發(fā)送至存儲設(shè)備620。獲得模塊636被配置為從存儲設(shè)備620的存儲存儲器625獲得(例如,拉取、接收 等)內(nèi)容更新。在一個實施例中,獲得模塊636被配置為在用戶設(shè)備610的本地高速緩存 635中對從存儲存儲器625獲得的內(nèi)容更新排隊。集成模塊638被配置為將這些內(nèi)容改變 實例化到文檔的用戶副本655中。在一個實施例中,集成模塊638被配置為指示內(nèi)容更新 的可用性并且接收用戶對審閱、忽略、或?qū)嵗@些改變的選擇。元數(shù)據(jù)同步模塊639同步要創(chuàng)作的文檔的用戶副本655與存儲在存儲設(shè)備620上 的主副本之間的元數(shù)據(jù)更新。在一個實施例中,元數(shù)據(jù)同步模塊639在存儲設(shè)備620與用 戶設(shè)備610之間以定期的時間間隔發(fā)送元數(shù)據(jù)更新。在另一個實施例中,元數(shù)據(jù)同步模塊 639在元數(shù)據(jù)更新變?yōu)榭捎脮r發(fā)送元數(shù)據(jù)更新。因為在存儲設(shè)備620與用戶設(shè)備610之間 定期地共享這些元數(shù)據(jù)更新,在用戶設(shè)備610的本地高速緩存635中存儲的元數(shù)據(jù)一般反 映出要創(chuàng)作的文檔的主副本的元數(shù)據(jù)的當(dāng)前狀態(tài)。圖7是示出公共模式同步過程700的示例操作流的流程圖,創(chuàng)作應(yīng)用通過該過程 可以將正在由該創(chuàng)作應(yīng)用編輯的文檔與該文檔的主副本同步。公共模式同步過程700在開 始模塊702處初始化和開始并且繼續(xù)至創(chuàng)作操作704,該操作根據(jù)用戶指令編輯文檔。例 如,創(chuàng)作操作704可查明由用戶執(zhí)行的鍵盤敲鍵并且實現(xiàn)相應(yīng)的編輯指令。在另一個實施 例中,創(chuàng)作操作704可查明由用戶執(zhí)行的鼠標(biāo)點擊并且實現(xiàn)相應(yīng)的編輯指令。第一存儲操作706周期性地收集任何元數(shù)據(jù)更新并且將它們保存至用戶設(shè)備的 本地高速緩存。因此,萬一創(chuàng)作應(yīng)用崩潰或者以其它方式出錯,元數(shù)據(jù)更新是受到保護的。 在一個實施例中,第一存儲操作706在用戶提供將改變保存至文檔的指令時保存元數(shù)據(jù)。 在另一個實施例中,第一存儲操作706在自動保存功能激活時存儲元數(shù)據(jù)。在另一個實施 例中,第一存儲操作706無論用戶交互的情況如何都以定期的時間間隔(例如,每隔若干毫 秒、秒、分等)保存元數(shù)據(jù)。第一發(fā)布操作708周期性地將存儲在本地高速緩存中的任何元數(shù)據(jù)更新發(fā)送至 存儲設(shè)備。一般而言,第一發(fā)布操作708在不需要與用戶進行任何交互的情況下自動地發(fā) 送元數(shù)據(jù)更新。例如,第一發(fā)布操作708可按定期的時間間隔(例如,每隔若干毫秒、秒、分 等)發(fā)送對元數(shù)據(jù)的改變(例如,軟件增量)。在另一個實施例中,第一發(fā)布操作708在本 地高速緩存中的元數(shù)據(jù)更新可用時發(fā)送這些元數(shù)據(jù)更新至存儲設(shè)備。在另一個實施例中, 第一發(fā)布操作708應(yīng)存儲設(shè)備請求發(fā)送元數(shù)據(jù)更新。
第二存儲操作710周期性地將任何內(nèi)容更新保存至用戶設(shè)備的本地高速緩存。 此,萬一創(chuàng)作應(yīng)用崩潰或者以其它方式出錯,內(nèi)容更新是得到保護的。在一個實施例中,第 二存儲操作710在第一存儲操作706存儲元數(shù)據(jù)更新時保存內(nèi)容更新。然而,在其它實施 例中,第二存儲操作710可在與第一存儲操作706存儲元數(shù)據(jù)更新的不同時間將內(nèi)容改變 保存到本地高速緩存。在一個實施例中,第二存儲操作710可將對內(nèi)容的改變保存在隊列 或其它有序列表中以便使內(nèi)容更新能夠按照生成它們的次序來順序發(fā)送。第二發(fā)布操作712發(fā)送內(nèi)容更新至存儲設(shè)備。在一個實施例中,第二發(fā)布操作712 在用戶提供共享的指令(例如,用戶明確地執(zhí)行發(fā)布動作、實現(xiàn)創(chuàng)作應(yīng)用的自動保存功能 等)時將內(nèi)容更新發(fā)送至存儲設(shè)備。在另一個實施例中,第二發(fā)布操作712在可從創(chuàng)作應(yīng) 用得到內(nèi)容更新時發(fā)送這樣的內(nèi)容更新。在另一個實施例中,第二發(fā)布操作712在不要求 與用戶進行任何交互的情況下自動地發(fā)送內(nèi)容更新。在又一個實施例中,第二發(fā)布操作712 可應(yīng)存儲設(shè)備請求發(fā)送內(nèi)容更新。第一實例化操作714周期性地從存儲設(shè)備獲得元數(shù)據(jù)更新并且自動地將這些元 數(shù)據(jù)更新實例化到創(chuàng)作應(yīng)用正在創(chuàng)作的文檔中。例如,第一具體化操作714可在定期的時 間間隔(例如,每隔若干毫秒、秒、分等)獲得由其它用戶生成的元數(shù)據(jù)更新。在另一個實 施例中,第一實例化操作714在元數(shù)據(jù)更新可用時獲得這些元數(shù)據(jù)更新。通常,不要求與用 戶進行交互來實例化這些元數(shù)據(jù)更新。例如,任何新生成的鎖將在獲得這些元數(shù)據(jù)更新時 自動向用戶顯示。第二實例化操作716周期性地從存儲設(shè)備獲得內(nèi)容更新并且使這些內(nèi)容更新可 供用戶使用來查看和/或進行實例化。例如,第二實例化操作716可在定期的時間間隔(例 如,每隔若干毫秒、秒、分等)獲得由其他用戶生成的內(nèi)容更新。在另一個實施例中,第二實 例化操作716在內(nèi)容更新可用時獲得這些內(nèi)容更新。通常,創(chuàng)作應(yīng)用向用戶指示內(nèi)容更新 可用并且使用戶能夠選擇是要審閱、實例化還是忽略這些內(nèi)容更新。公共模式同步過程700 在停止模塊718處完成并結(jié)束。圖8是被配置為實現(xiàn)私有模式同步循環(huán)的創(chuàng)作系統(tǒng)800的示意框圖。創(chuàng)作系統(tǒng) 800 一般包括存儲設(shè)備820和一個或多個用戶設(shè)備810。要創(chuàng)作的文檔的內(nèi)容852和元數(shù)據(jù) 854存儲在存儲設(shè)備820上的存儲器825中。在圖8所示的示例中,第一用戶設(shè)備810A和 第二用戶設(shè)備810B正在并發(fā)地訪問存儲在存儲設(shè)備820上的內(nèi)容852和元數(shù)據(jù)854。用戶 計算設(shè)備810A、810B各自包括本地高速緩存835A、835B和要創(chuàng)作的文檔的用戶副本855A、 855B。每一用戶計算設(shè)備810的本地高速緩存835被配置為存儲發(fā)布模塊832、保護模塊 834、獲得模塊836、集成模塊838、和元數(shù)據(jù)同步模塊839。保護模塊834被配置為將來自用 戶副本855的內(nèi)容更新存儲到本地高速緩存835用于稍后發(fā)送到存儲設(shè)備820的存儲存儲 器825。在一個實施例中,保護模塊834被配置為根據(jù)生成內(nèi)容更新的次序存儲這些更新。 例如,保護模塊834可被配置為在本地高速緩存835中對由用戶副本855生成的內(nèi)容更新 排隊以用于發(fā)送到存儲設(shè)備820。發(fā)布模塊832被配置為將存儲在本地高速緩存中的內(nèi)容改變發(fā)送至存儲設(shè)備 820。一般而言,發(fā)布模塊832在它接收到發(fā)布內(nèi)容改變的指令時共享這些內(nèi)容改變。例如, 如果用戶通過創(chuàng)作應(yīng)用的用戶界面選擇發(fā)布選項,則發(fā)布模塊832可將內(nèi)容改變發(fā)送至存
11儲設(shè)備820。保護模塊834不自動觸發(fā)發(fā)布模塊832。獲得模塊836可被配置為從存儲設(shè)備820的存儲存儲器825獲得(例如,拉取、接 收等)內(nèi)容更新。在一個實施例中,獲得模塊836被配置為在本地高速緩存835中對從存 儲存儲器825獲得的內(nèi)容更新排隊以用于稍后實例化到要創(chuàng)作的文檔的用戶副本855中。 集成模塊838被配置為促進將內(nèi)容改變實例化到文檔的用戶副本855中。例如,集成模塊 838可被配置為向用戶指示新的內(nèi)容更新可用于實例化。在另一個實施例中,集成模塊838 可被配置為將內(nèi)容更新自動地實例化到要創(chuàng)作的文檔的用戶副本855中。元數(shù)據(jù)同步模塊839在要創(chuàng)作的文檔的用戶副本855與存儲在存儲設(shè)備820上的 主副本之間同步元數(shù)據(jù)更新。在一個實施例中,元數(shù)據(jù)同步模塊839與上面參考圖6所述 的元數(shù)據(jù)同步模塊639相同。然而,在其它實施例中,元數(shù)據(jù)同步模塊839可用其它方式被 配置為在用戶設(shè)備810與存儲設(shè)備820之間同步元數(shù)據(jù)。圖9是示出用于私有模式同步過程900的示例操作流的流程圖,創(chuàng)作應(yīng)用可通過 該過程將創(chuàng)作應(yīng)用正在編輯的文檔與該文檔的主副本同步。私有同步過程900在開始模塊 902處初始化和開始,并且繼續(xù)至創(chuàng)作操作904,該操作按照用戶指令編輯要創(chuàng)作的文檔。 例如,創(chuàng)作操作904可以與上面參考圖7描述的創(chuàng)作應(yīng)用704相同。第一存儲操作906周期性地將在實現(xiàn)創(chuàng)作操作904時生成的任何元數(shù)據(jù)更新保存 到本地高速緩存。在一個實施例中,第一存儲操作906與上面參考圖7描述的公共模式同步 過程700的第一存儲操作706相同。然而,在其它實施例中,可使用不同的過程來存儲元數(shù) 據(jù)更新。第一發(fā)布操作908周期性地將來自本地高速緩存的元數(shù)據(jù)更新發(fā)送至存儲設(shè)備。 在一個實施例中,第一發(fā)布操作908與上面參考圖7所述的公共模式同步過程700的第一 發(fā)布操作708相同。然而,在其它實施例中,可使用不同的過程來共享元數(shù)據(jù)更新。第二存儲操作910周期性地將在用戶設(shè)備上實現(xiàn)創(chuàng)作操作904時生成的任何內(nèi)容 更新保存到用戶設(shè)備的本地高速緩存。一般而言,第二存儲操作910在用戶執(zhí)行數(shù)據(jù)保護 動作(例如,選擇保存文檔)時發(fā)生。在一個實施例中,第二存儲操作910與上面參考圖7 所述的公共模式同步過程700的第二存儲操作710相同。然而,在其他實施例中,可使用不 同的過程來存儲內(nèi)容更新。確定模塊912確定是否將內(nèi)容更新上載到存儲設(shè)備。在一個實施例中,確定模塊 912確定用戶是否已經(jīng)提供用于共享內(nèi)容改變的任何指令。例如,確定模塊912可確定用戶 是否已經(jīng)在創(chuàng)作應(yīng)用的用戶界面上選擇了“發(fā)布”按鈕。如果確定模塊912確定用戶已經(jīng) 提供了共享內(nèi)容改變的指令,則第二發(fā)布操作914將這些內(nèi)容改變發(fā)送到存儲設(shè)備。然而, 如果確定模塊912確定用戶已經(jīng)提供了共享內(nèi)容的指令,則私有同步過程900跳過第二發(fā) 布操作914并且繼續(xù)至第一實例化操作916。第一實例化操作916周期性地從存儲設(shè)備獲得元數(shù)據(jù)更新并且自動地將這些元 數(shù)據(jù)更新實例化到創(chuàng)作應(yīng)用正在創(chuàng)作的文檔中。例如,第一實例化操作916可與上面參考 圖7所述的公共模式同步過程700的第一實例化操作714相同。然而,在其它實施例中,可 使用其它過程從存儲設(shè)備獲得元數(shù)據(jù)。第二實例化操作918周期性地從存儲設(shè)備獲得內(nèi)容更新并且使得這些內(nèi)容更新 可供用戶查看和/或進行實例化使用。例如,第二實例化操作918可以與上面參考圖7所 述的公共模式同步過程700的第二實例化操作716相同。然而,在其它實施例中,可使用其它過程從存儲設(shè)備獲得內(nèi)容。私有模式同步過程900在停止模塊920處完成并結(jié)束。圖10是示出用于切換過程1000的操作流的流程圖,創(chuàng)作應(yīng)用通過該過程可有選 擇地被配置為處于公共操作模式或私有操作模式中。切換過程1000在開始模塊1002處初 始化和開始并且繼續(xù)至接收操作1004。接收操作1004獲得對特定的操作模式的選擇。在 一個實施例中,接收操作1004可查明通過用戶界面工具的模式選擇。例如,接收操作1004 可確定用戶已經(jīng)點擊了創(chuàng)作應(yīng)用用戶界面的用戶界面的切換按鈕。切換操作1006將創(chuàng)作應(yīng)用配置成所選擇的操作模式。例如,切換操作1006可將 目前被配置為處于私有操作模式中的創(chuàng)作應(yīng)用配置成處于公共操作模式中。在這樣的實施 例中,所存儲的內(nèi)容改變可自動地與文檔的主副本共享。在其它實施例中,切換操作1006 可將目前被配置為處于私有操作模式中的創(chuàng)作應(yīng)用配置成處于公共操作模式中。在這樣的 實施例中,創(chuàng)作應(yīng)用開始扣留來自主副本的內(nèi)容改變。在一個實施例中,創(chuàng)作應(yīng)用開始將內(nèi) 容改變存儲在本地高速緩存存儲器中。指示操作1008將創(chuàng)作應(yīng)用的用戶界面配置為向用戶指示所選擇的操作模式。例 如,如果用戶選擇讓創(chuàng)作應(yīng)用在公共模式中運行,則指示操作1008可向用戶指示正在與其 他用戶共享內(nèi)容改變。如果用戶選擇讓創(chuàng)作應(yīng)用在私有模式中運行,則指示操作1008可向 用戶指示不與其他用戶共享內(nèi)容改變。切換過程1000在停止模塊1010處完成并結(jié)束。參考圖11-19,可通過預(yù)演一個示例應(yīng)用來更好地理解本發(fā)明的原理。圖11-19 表示在協(xié)作創(chuàng)作會話期間向存儲在存儲設(shè)備1120上的文檔的主副本、第一創(chuàng)作應(yīng)用1130A 正在編輯的文檔的第一用戶副本、和第二創(chuàng)作應(yīng)用1130B正在編輯的第二用戶副本所作的 改變。還示出分別存儲在用戶計算設(shè)備的本地高速緩存1135A、1135B中的內(nèi)容和元數(shù)據(jù)更 新。在一個實施例中,第一創(chuàng)作應(yīng)用1130A和第二創(chuàng)作應(yīng)用1130B并發(fā)地編輯該文檔。然 而,在其它實施例中,第一和第二創(chuàng)作應(yīng)用1130A、1130B可以使用相同的過程在不同的時 間編輯(即訪問)該文檔。在圖11中,第一創(chuàng)作應(yīng)用1130A被配置為處于公共操作模式中并且第二創(chuàng)作應(yīng)用 1130B被配置為處于私有操作模式中。然而,在其它實施例中,每一創(chuàng)作應(yīng)用1130可被配置 為處于任何所需的操作模式中。因為第一創(chuàng)作應(yīng)用1130A正在公共模式中操作,第一創(chuàng)作 應(yīng)用1130A—般遵循上面參考圖7所述的公共模式同步過程700。因為第二創(chuàng)作應(yīng)用1130B 正在私有模式中操作,所以創(chuàng)作應(yīng)用1130B—般遵循上面參考圖9所述的私有模式同步過 程 900。文檔的主副本具有對應(yīng)的主鎖表。為了方便,在圖11-19所示的示例中,將主鎖表 作為文檔的主副本的一部分顯示。然而,在其它實施例中,主鎖表可與文檔的主副本分開存 儲。同樣,為易于理解,關(guān)聯(lián)于文檔的每一用戶副本的鎖在圖11-19中作為用戶副本的一部 分示出。然而,在其它實施例中,元數(shù)據(jù)可與每一用戶副本分開存儲。在所示的示例中,主副本的內(nèi)容包括包含文本“你好世界”的第一數(shù)據(jù)單元和包含 圍繞該第一數(shù)據(jù)單元的第一鎖El的主副本的元數(shù)據(jù)。第一鎖El被指派給第一創(chuàng)作應(yīng)用 1130A的第一用戶。因此,第一創(chuàng)作應(yīng)用1130A可編輯第一數(shù)據(jù)單元。其它創(chuàng)作應(yīng)用諸如第 二創(chuàng)作應(yīng)用1130B被禁止編輯第一數(shù)據(jù)單元。在用戶設(shè)備的本地高速緩存1135A、1135B中 反映出主副本的內(nèi)容和元數(shù)據(jù)。在圖11中,第一創(chuàng)作應(yīng)用1130A和第二創(chuàng)作應(yīng)用1130B各自訪問和開始編輯文檔的主副本。第一創(chuàng)作應(yīng)用1130A編輯文檔的第一用戶副本以如由刪除線批注指示地刪除詞 語“你好”(見圖7的創(chuàng)作操作704)。第二創(chuàng)作應(yīng)用1130B編輯文檔的第二用戶副本以添 加包含文本“再見世界”的第二數(shù)據(jù)單元(見圖9的創(chuàng)作操作904)。圍繞第二數(shù)據(jù)單元生 成被指派給第二用戶的第二鎖E2。圖12分別示出公共模式同步過程700和私有模式同步過程900的第一存儲操作 706、906的效果。創(chuàng)作應(yīng)用1130A、1130B每一個將在文檔的相應(yīng)用戶副本中生成的任何元 數(shù)據(jù)改變保存到相應(yīng)的本地高速緩存1135A、1135B中用于發(fā)送到存儲設(shè)備1120。在所示的 示例中,第一創(chuàng)作應(yīng)用1130A尚未添加任何新鎖或者釋放第一鎖E1。因此,沒有元數(shù)據(jù)的改 變被存儲到圖12中的本地高速緩存1135A中。然而,第二創(chuàng)作應(yīng)用1130B已經(jīng)添加了圍繞 新數(shù)據(jù)單元的第二鎖E2。因此,第二鎖E2被存儲在本地高速緩存1135B的元數(shù)據(jù)表中。圖13分別示出公共模式同步過程700和私有模式同步過程900的第一發(fā)布操作 708,908的效果。相應(yīng)的本地高速緩存1135A、1135B各自將所存儲的元數(shù)據(jù)發(fā)送到存儲設(shè) 備1120。在所示的示例中,第二本地高速緩存1135B將新鎖E2發(fā)送到存儲設(shè)備1120。然 而,第一本地高速緩存1135A沒有元數(shù)據(jù)改變要發(fā)送到存儲設(shè)備1120。根據(jù)公共模式同步過程700的第二存儲操作710,第一創(chuàng)作應(yīng)用1130A在用戶 (例如,明確地或者隱含地)提供存儲內(nèi)容的指令時將任何內(nèi)容改變保存到本地高速緩存 1135A用于發(fā)送到存儲設(shè)備1120。根據(jù)公共模式同步過程700的第二發(fā)布操作712,存儲 內(nèi)容的指令觸發(fā)本地高速緩存1135A將內(nèi)容更新發(fā)布到存儲設(shè)備1120。在所示的示例中, 從第一數(shù)據(jù)單元移除詞語“你好”被存儲在圖12的本地高速緩存1135A中并且被發(fā)送到圖 13中的存儲設(shè)備1120。與此相對地,根據(jù)私有模式同步過程900的第二存儲操作910,第二創(chuàng)作應(yīng)用 1130B將任何內(nèi)容改變保存到本地高速緩存1135B。在圖12所示的示例中,在本地高速緩 存1135B中反映出第二數(shù)據(jù)單元(“再見世界”)的添加。然而,根據(jù)私有模式同步過程900 的確定模塊912,本地高速緩存1135B僅在用戶提供發(fā)布指令時才將更新后的內(nèi)容發(fā)送到 存儲設(shè)備1120。在圖13所示的示例中,沒有提供發(fā)布指令并且第二數(shù)據(jù)單元沒有被發(fā)送到 存儲設(shè)備1120。圖14和15分別示出公共模式同步過程700和私有模式同步過程900的第一實例 化操作714、916的效果。每一創(chuàng)作應(yīng)用1130A、1130B從存儲設(shè)備1120獲得元數(shù)據(jù)更新并 且自動將這些元數(shù)據(jù)更新實例化到文檔的相應(yīng)用戶副本中。在所示的示例中,從存儲設(shè)備 1120上的文檔的主副本拉取第二鎖E2并且將它保存到第一用戶設(shè)備的第一本地高速緩存 1135A中,如圖14所示。第一創(chuàng)作應(yīng)用1130A自動將第二鎖E2實例化到圖15中的文檔的 第一用戶副本中。然而,由于第一創(chuàng)作應(yīng)用1130A沒有對第一用戶副本的元數(shù)據(jù)作出任何 改變,因此沒有對與第二用戶副本和第二本地高速緩存1135B相關(guān)聯(lián)的元數(shù)據(jù)作出改變, 因為該元數(shù)據(jù)已經(jīng)反映出與文檔的主副本相關(guān)聯(lián)的元數(shù)據(jù)。另外,在圖14和15中分別示出公共模式同步過程700和私有模式同步過程900的 第二實例化操作716、918的效果。每一創(chuàng)作應(yīng)用1130A、1130B從存儲設(shè)備1120獲得內(nèi)容更 新并且使得這些內(nèi)容更新可供用戶查看和/或進行實例化。在所示的示例中,第二本地高 速緩存1135B沒有將任何內(nèi)容改變轉(zhuǎn)發(fā)給存儲設(shè)備1120。因此,第一本地高速緩存1135A 和第一創(chuàng)作應(yīng)用1130A在圖14和15中沒有從存儲設(shè)備1120獲得任何內(nèi)容更新。
然而,由于第一創(chuàng)作應(yīng)用1130A已經(jīng)共享了內(nèi)容改變,第二本地高速緩存1135B從 存儲設(shè)備1120獲得從第一數(shù)據(jù)單元刪除詞語“你好”的內(nèi)容更新(見圖14)。一創(chuàng)作應(yīng)用 1130B將來自本地高速緩存1135B的內(nèi)容更新實例化到圖15中的文檔的用戶副本中。在一 個實施例中,第二創(chuàng)作應(yīng)用1130B的用戶界面自動地將內(nèi)容更新實例化到文檔的第二用戶 副本中(見圖15)。然而,在另一個實施例中,第二創(chuàng)作應(yīng)用1130B向第二用戶指示內(nèi)容更 新可用。在這樣一個實施例中,第二創(chuàng)作應(yīng)用1130B在第二用戶提供實例化的指令時實例 化該內(nèi)容更新。在圖16中,第二用戶將第二創(chuàng)作應(yīng)用1130B切換到公共模式配置中。在一個實施 例中,第二用戶選擇第二創(chuàng)作應(yīng)用1130B的用戶界面上的用于切換第二創(chuàng)作設(shè)備1130B的 操作模式的按鈕。然而,在其它實施例中,第二用戶可用其它方式提示第二創(chuàng)作應(yīng)用1130B 切換到公共操作模式中。在切換操作模式之后,第二創(chuàng)作應(yīng)用1130B可遵循上面參考圖7 描述的公共模式同步過程700開始。例如,第二創(chuàng)作應(yīng)用1130B可開始共享內(nèi)容更新以及 元數(shù)據(jù)更新。在一個實施例中,還共享以前存儲的內(nèi)容更新。在一些實施例中,將創(chuàng)作應(yīng)用從私有操作模式切換到公共操作模式不會使以前存 儲的內(nèi)容自動地與存儲設(shè)備共享。相反,切換創(chuàng)作應(yīng)用1130的模式改變本地高速緩存1135 以后的行為。例如,當(dāng)創(chuàng)作應(yīng)用1130被配置為處于公共模式中時用戶選擇“保存”文檔,則 內(nèi)容改變將被自動地發(fā)送到存儲設(shè)備1120。在一個實施例中,任何以前存儲的改變也與新 的內(nèi)容改變一起發(fā)送。然而,在其它實施例中,以前存儲的改變可在創(chuàng)作應(yīng)用1130被切換 到公共模式中時被自動發(fā)送到存儲設(shè)備1120而不需要另外的用戶交互。在圖16所示的示例中,第二創(chuàng)作應(yīng)用1130B已經(jīng)被切換到公共模式中。用戶在切 換創(chuàng)作應(yīng)用1130B之后還沒有選擇存儲內(nèi)容改變。因此,第二數(shù)據(jù)單元還沒有被發(fā)送到存 儲設(shè)備1120。在圖17所示的示例中,第二本地高速緩存1135B從用戶接收存儲指令并且根 據(jù)圖7的公共模式同步過程700的第二發(fā)布操作712將包含文本(“再見世界”)的第二數(shù) 據(jù)發(fā)送到存儲設(shè)備1120。在圖18中,第一本地高速緩存1135A從存儲設(shè)備1120獲得內(nèi)容 更新并且,在圖19中創(chuàng)作應(yīng)用1130A將該內(nèi)容更新實例化到文檔的第一用戶副本中?,F(xiàn)在參考圖20-22,具有作為根據(jù)本發(fā)明的原理的發(fā)明性方面的示例的特征的創(chuàng) 作系統(tǒng)2000可使用戶即使在創(chuàng)作應(yīng)用與存儲文檔的主副本的任何存儲設(shè)備斷開時也能夠 創(chuàng)作文檔的用戶副本。創(chuàng)作系統(tǒng)2000包括執(zhí)行用于創(chuàng)作文檔的用戶副本2055的創(chuàng)作應(yīng)用 2030的用戶設(shè)備2010。在所示的示例中,用戶設(shè)備2010是離線的(例如,與網(wǎng)絡(luò)2060斷 開連接)。因此,用戶設(shè)備2010不共享在創(chuàng)作文檔的用戶副本2055時生成的內(nèi)容或元數(shù)據(jù) 改變,直到連接至網(wǎng)絡(luò)2060為止。用戶設(shè)備2010還包括其中存儲了有關(guān)文檔的用戶副本2055的元數(shù)據(jù)2039的本 地高速緩存2035。在一個實施例中,可周期性地更新元數(shù)據(jù)2039以反映出對文檔的本地 高速緩存2055所作的改變。在另一個實施例中,在每一創(chuàng)作會話結(jié)束時更新元數(shù)據(jù)2039。 本地高速緩存2035還包括存儲高速緩存2031、上載高速緩存2033、和獲得高速緩存2037。創(chuàng)作應(yīng)用2030周期性地將內(nèi)容改變保存到存儲高速緩存2031中。在一些實施例 中,在整個創(chuàng)作過程中不時地將內(nèi)容更新存儲在存儲高速緩存2031中(例如,經(jīng)由自動保 存功能)。在其它實施例中,創(chuàng)作應(yīng)用2030可在用戶提供保存文檔的指令時存儲內(nèi)容改變。 在一個實施例中,存儲高速緩存2031根據(jù)生成多個內(nèi)容更新的次序存儲這些更新。然而,在另一個實施例中,在創(chuàng)作會話結(jié)束時將內(nèi)容更新存儲在存儲高速緩存2031中。例如,可 在文檔的用戶副本2055與文檔的初始版本(未示出)之間進行比較并且將差異存儲在存 儲高速緩存2031中。本地高速緩存2035在用戶設(shè)備2010連接至網(wǎng)絡(luò)2060時通過網(wǎng)絡(luò)2060將存儲 在上載高速緩存2033中的任何內(nèi)容改變發(fā)送到存儲設(shè)備(未示出)。例如,本地高速緩存 2035可在用戶設(shè)備2010 —連接到網(wǎng)絡(luò)2060時就共享存儲在上載高速緩存2033中的內(nèi)容 更新。在一個實施例中,本地高速緩存2035即使在創(chuàng)作應(yīng)用在用戶設(shè)備2010連接至網(wǎng)絡(luò) 2060之前停止執(zhí)行時也可共享存儲在上載高速緩存2033中的內(nèi)容更新。一般而言,創(chuàng)作應(yīng)用2030被配置為所處的操作模式確定在上載高速緩存2033中 何時安排內(nèi)容更新。如果創(chuàng)作應(yīng)用2030被配置為處于公共操作模式中,則本地高速緩存 2035可自動地將內(nèi)容更新存儲在上載高速緩存2033中用于以后發(fā)送至網(wǎng)絡(luò)2060。在一個 實施例中,本地高速緩存2035將來自存儲高速緩存2031的內(nèi)容更新復(fù)制到上載高速緩存 2033。然而,如果創(chuàng)作應(yīng)用2030被配置為處于私有操作模式中,則本地高速緩存2035不 自動將內(nèi)容改變保存到上載高速緩存2033中。例如,在一個實施例中,可在創(chuàng)作應(yīng)用2030 被切換到公共模式中時將內(nèi)容改變存儲在上載高速緩存2033中。在另一個實施例中,無論 創(chuàng)作應(yīng)用2030的操作模式是什么,可在用戶提供共享內(nèi)容改變的指令時將內(nèi)容改變存儲 到上載高速緩存2033中。尚未被實例化到第一用戶副本2055中的以前獲得的內(nèi)容更新可被存儲在獲得高 速緩存2037中。無論用戶設(shè)備2010是否連接至網(wǎng)絡(luò)2060,這些內(nèi)容更新可在任何時間被 實例化到用戶副本2055中。在一個實施例中,獲得高速緩存2037存儲要與用戶副本2055 集成的內(nèi)容更新的有序列表。內(nèi)容更新可在它們被實例化到文檔的用戶副本2055中時從 獲得高速緩存2037中移除。在一些實施例中,用戶可選擇“取消”來自獲得高速緩存2037 的內(nèi)容更新的實例化。在一個這樣的實施例中,內(nèi)容更新可在用戶取消實例化時被添加回 獲得高速緩存2037中。圖21示出用于創(chuàng)作過程2100的操作流,創(chuàng)作應(yīng)用諸如創(chuàng)作應(yīng)用2030可通過該過 程在創(chuàng)作應(yīng)用2030離線時編輯文檔的用戶副本如用戶副本2055。創(chuàng)作過程2100在開始模 塊2102處初始化和開始并且繼續(xù)至獲得操作2104。獲得操作2104接收要在文檔的用戶副 本2055上實現(xiàn)的編輯指令。通常,獲得操作2104接收要在用戶副本2055內(nèi)的一個或多個 數(shù)據(jù)單元上實現(xiàn)的編輯指令。第一確定模塊2106檢查要被編輯的數(shù)據(jù)單元是否被鎖。例如,第一確定模塊2106 可檢查存儲在第一用戶設(shè)備2010的本地高速緩存2035中的元數(shù)據(jù)2039以確定是否有外 部鎖(即關(guān)聯(lián)于另一個用戶的鎖)與要被編輯的數(shù)據(jù)單元相關(guān)聯(lián)。如果第一確定模塊2106 確定要被編輯的數(shù)據(jù)單元被另一個用戶鎖住,則出錯操作2108禁止對該數(shù)據(jù)單元的編輯。 例如,在一個實施例中,出錯操作2108可通知創(chuàng)作應(yīng)用2030的用戶不應(yīng)當(dāng)編輯該數(shù)據(jù)單 元。在另一個實施例中,出錯操作2108可通知創(chuàng)作應(yīng)用2030的用戶不能編輯該數(shù)據(jù)單元。 創(chuàng)作應(yīng)用2100循環(huán)回到獲得操作2104以再次開始。然而,如果第一確定模塊2106確定要被編輯的數(shù)據(jù)單元未被鎖住,則請求操作 2114將對鎖的請求添加到存儲在本地高速緩存2035中的元數(shù)據(jù)2039。然而,因為不能將該請求與文檔的主副本同步,所以請求操作2114不會真正地將鎖指派給該數(shù)據(jù)單元。在請求 該鎖之前,可選的警告操作2110可向創(chuàng)作應(yīng)用2030的用戶發(fā)出警告。例如,警告操作2110 可向用戶指示創(chuàng)作應(yīng)用2030離線并且因此不能將對用戶副本2055所作的改變與文檔的主 副本同步。警告操作2110還可提醒用戶在不能同步改變時編輯文檔的用戶副本2055可能 導(dǎo)致沖突。如果實現(xiàn)警告操作2110,則第二確定模塊2112確定創(chuàng)作應(yīng)用2030是否應(yīng)當(dāng)繼續(xù) 實現(xiàn)編輯指令。例如,第二確定模塊2112可通過向用戶呈現(xiàn)的用戶界面工具從創(chuàng)作應(yīng)用 2030的用戶接收選擇。如果第二確定模塊2112確定不應(yīng)當(dāng)實現(xiàn)編輯指令,則創(chuàng)作過程2100 被指引回到獲得操作2104以便再次開始。然而,如果第二確定模塊2112確定應(yīng)當(dāng)實現(xiàn)編輯指令,則創(chuàng)作過程2100繼續(xù)至上 述請求操作2114。執(zhí)行操作2116根據(jù)編輯指令編輯用戶副本2055。第三確定模塊2118確 定是否應(yīng)當(dāng)將文檔存儲在本地高速緩存2035中。在一個實施例中,第三確定模塊2118確 定是否已經(jīng)從用戶接收到保存文檔的指令。在另一個實施例中,第三確定模塊確定是否已 經(jīng)激活了自動保存功能。如果第三確定模塊2118確定不應(yīng)當(dāng)保存文檔,則創(chuàng)作過程2100循環(huán)回到獲得操 作2104并且再次開始。然而,如果第三確定模塊2118確定應(yīng)當(dāng)保存文檔,則存儲操作2120 將因?qū)崿F(xiàn)編輯指令導(dǎo)致的文檔中的改變的指示添加到本地高速緩存2035的存儲高速緩存 2031。例如,存儲操作2120可將編輯指令本身添加到存儲高速緩存2031。在另一個實施 例中,存儲操作2120可將內(nèi)容增量(例如,因?qū)崿F(xiàn)編輯指令引起的用戶副本中的差異的指 示)添加到存儲高速緩存2031。第四確定模塊2122確定創(chuàng)作應(yīng)用2030是被配置為處于公共操作模式中還是處于 私有操作模式中。如果第三確定模塊2120確定創(chuàng)作應(yīng)用2030被配置為處于公共操作模式 中,則發(fā)布操作2124與存儲設(shè)備共享內(nèi)容更新。例如,本地高速緩存2035可將保存在存儲 高速緩存2031中的內(nèi)容更新復(fù)制到上載高速緩存2033并且將上載高速緩存2033發(fā)送到 存儲設(shè)備。在一個實施例中,發(fā)布操作2124在第一用戶設(shè)備連接至網(wǎng)絡(luò)2060時指示應(yīng)當(dāng) 將改變和/或編輯指令實例化到文檔的主副本中的次序。創(chuàng)作過程2100在停止模塊2128 處完成并結(jié)束。然而,如果第四模塊2122確定創(chuàng)作應(yīng)用2030被配置為處于私有操作模式中,則第 五模塊2126確定用戶是否已經(jīng)明確提供上載內(nèi)容改變的指令。如果已經(jīng)明確提供了上載 內(nèi)容改變的指令,則創(chuàng)作過程2100繼續(xù)至發(fā)布操作2124。然而,如果尚未提供上載內(nèi)容改 變的指令,則創(chuàng)作過程2100如上所述地在停止模塊2122處完成并結(jié)束。一般而言,用戶設(shè)備諸如用戶設(shè)備2010在通過網(wǎng)絡(luò)如網(wǎng)絡(luò)2060連接至存儲設(shè)備 時至少同步元數(shù)據(jù)。在一個實施例中,用戶設(shè)備即使在創(chuàng)作應(yīng)用不在執(zhí)行時也同步元數(shù)據(jù)。 用戶設(shè)備是否同步內(nèi)容可取決于創(chuàng)作應(yīng)用是被配置為處于公共操作模式還是私有操作模 式中。創(chuàng)作應(yīng)用被配置為所處的操作模式是相關(guān)的,即使在用戶設(shè)備連接至網(wǎng)絡(luò)時創(chuàng)作應(yīng) 用沒有在執(zhí)行。圖22示出可由用戶設(shè)備諸如用戶設(shè)備2010在該用戶設(shè)備通過網(wǎng)絡(luò)如網(wǎng)絡(luò)2060 連接至存儲設(shè)備時實現(xiàn)的轉(zhuǎn)換過程2200的操作流。轉(zhuǎn)換過程2200在開始模塊2202處初始 化和開始并且繼續(xù)至連接操作2204,該操作以通信方式將用戶設(shè)備2010耦合至網(wǎng)絡(luò)2060。
17用戶設(shè)備2010可通過網(wǎng)絡(luò)2060以通信方式連接至存儲文檔的主副本的存儲設(shè)備。獲得操作2206檢索包含內(nèi)容與元數(shù)據(jù)的文檔的主副本的更新版本以便開始將用 戶副本2055與主副本同步。在一個實施例中,獲得操作2206向存儲設(shè)備輪詢主副本的最 新近版本。在另一個實施例中,獲得操作2206在進行連接時自動從存儲設(shè)備接收最新近的 版本。在一個實施例中,即使在創(chuàng)作應(yīng)用2030不在執(zhí)行時也實現(xiàn)獲得操作2206。比較操作2208確定所獲得的主副本與用戶副本2055之間的任何差異。例如,比 較操作2208確定元數(shù)據(jù)的任何差異和/或內(nèi)容的任何差異。第一確定模塊2210基于該比 較確定在用戶副本2055和所獲得的主副本之間是否存在任何沖突。例如,第一確定模塊 2210可確定創(chuàng)作應(yīng)用2030在用戶設(shè)備2010離線之后是否編輯了在主副本上被鎖住和/或 編輯的任何數(shù)據(jù)單元。在一個實施例中,在用戶設(shè)備2010連接至網(wǎng)絡(luò)2060時不管創(chuàng)作應(yīng) 用2030是否在執(zhí)行都實現(xiàn)比較操作2208和確定模塊2210。如果第一確定模塊2210確定沒有沖突存在,則轉(zhuǎn)換過程2200繼續(xù)到第一共享操 作2214,該操作將來自文檔的用戶副本的元數(shù)據(jù)更新發(fā)送到主副本。例如,第一共享操作 2214可將對創(chuàng)作應(yīng)用2030編輯的數(shù)據(jù)單元的鎖請求發(fā)送到主副本。然而,如果第一確定模 塊2210確定沖突存在,則解決操作2212禁止進一步的編輯直至解決沖突為止。—般而言,解決操作2212向創(chuàng)作應(yīng)用2030的用戶提供沖突存在的通知。在一個 實施例中,解決操作2212在創(chuàng)作應(yīng)用2030被訪問時提供通知。在另一個實施例中,解決操 作2212在創(chuàng)作應(yīng)用2030訪問文檔的用戶副本2055時提供通知。在一個實施例中,解決操 作2212向用戶顯示沖突并且使用戶能夠調(diào)整沖突。在另一個實施例中,解決操作2212向 用戶提供每一沖突的一組可能的解決方案。在已經(jīng)解決了沖突時,轉(zhuǎn)換過程2200繼續(xù)至第 一共享操作2214并如上所述地執(zhí)行該操作。第二確定模塊2216查明創(chuàng)作應(yīng)用2030的操作模式(例如,公共模式或者私有模 式)。如果第二確定操作2216確定創(chuàng)作應(yīng)用2030正在公共模式中操作,則第二共享操作 2222將內(nèi)容更新發(fā)送到存儲設(shè)備用于集成到文檔的主副本中。在一個實施例中,第二共享 操作2222發(fā)送存儲在本地高速緩存2035中的上載高速緩存2033 (圖21)中的所有內(nèi)容改 變。轉(zhuǎn)換過程2200在停止模塊2224處完成并結(jié)束。然而,如果第二確定模塊2216確定創(chuàng)作應(yīng)用2030在私有模式中操作,則第三確定 模塊2220確定用戶是否已經(jīng)提供了共享內(nèi)容更新的指令。例如,第三確定模塊2218可通 過創(chuàng)作應(yīng)用2030的用戶界面接收共享改變的指令而不管創(chuàng)作應(yīng)用2030正被配置為處于私 有操作模式中。在一個實施例中,第三確定模塊2218查明通過創(chuàng)作應(yīng)用2030的用戶界面 提供的用戶命令。如果第三確定模塊2218確定已經(jīng)提供了共享內(nèi)容的指令,則轉(zhuǎn)換過程2200繼續(xù) 至排隊操作2220,在該操作中準(zhǔn)備內(nèi)容更新供發(fā)送到存儲設(shè)備。例如,內(nèi)容更新可存儲在更 新高速緩存諸如更新高速緩存2033中(圖20)。轉(zhuǎn)換過程2200繼續(xù)至第二共享操作2222 并且如上所述地執(zhí)行該操作。本發(fā)明的實施例可實現(xiàn)為計算機過程(方法)、計算系統(tǒng)、或者制品諸如計算機程 序產(chǎn)品或計算機可讀介質(zhì)??捎萌魏螖?shù)量的方式來實現(xiàn)這些過程(程序),包括在本文檔中 描述的結(jié)構(gòu)。一種這樣的方式是通過對在本文檔中描述的設(shè)備類型進行機器操作。另一種 可選方式是在計算設(shè)備上執(zhí)行各方法的各個操作中的一個或多個并結(jié)合一個或多個人類操作員執(zhí)行這些操作中的某些操作。這些人類操作員不需要相互協(xié)作,而是只需要每個人 具有執(zhí)行該程序的一部分的機器。計算機程序產(chǎn)品可以是計算機系統(tǒng)可讀并且編碼了用于執(zhí)行計算機過程的指令 的計算機程序的計算機存儲介質(zhì)。計算機程序產(chǎn)品還可以是計算系統(tǒng)可讀并且編碼了用于 執(zhí)行計算機過程的指令的計算機程序的在載波上的傳播信號。本文使用的術(shù)語計算機可讀 介質(zhì)包括存儲介質(zhì)和通信介質(zhì)兩者。本領(lǐng)域的技術(shù)人員將會了解,本發(fā)明可與其它計算機系統(tǒng)配置一起實踐,包括手 持設(shè)備、多處理器系統(tǒng)、基于微處理器或可編程消費電子產(chǎn)品、小型計算機、大型計算機等 等。本發(fā)明還可在分布式計算環(huán)境中實踐,其中任務(wù)是由通過通信網(wǎng)絡(luò)鏈接的遠程處理設(shè) 備執(zhí)行的。在分布式計算環(huán)境中,程序模塊可位于本地和遠程存儲器存儲設(shè)備中。一般而 言,程序模塊包括執(zhí)行特定任務(wù)或?qū)崿F(xiàn)任何抽象數(shù)據(jù)類型的例程、程序、組件、數(shù)據(jù)結(jié)構(gòu)、和 其它類型的結(jié)構(gòu)。
權(quán)利要求
一種用于在用戶設(shè)備(110,610,810,2010)上編輯文檔的用戶副本(155,655,855,2055)的創(chuàng)作系統(tǒng),所述用戶副本是基于所述文檔的主副本(150)生成的,所述創(chuàng)作系統(tǒng)包括存儲在所述用戶設(shè)備上的本地高速緩存(426,635,835,2035),所述本地高速緩存包括存儲高速緩存(2031)和上載高速緩存(2033)被配置為在所述用戶設(shè)備上執(zhí)行的創(chuàng)作應(yīng)用(130,424,1130,2030),所述創(chuàng)作應(yīng)用被配置成編輯文檔的用戶副本,所述創(chuàng)作應(yīng)用適于有選擇地被配置為處于從由公共操作模式和私有操作模式組成的組中選擇的一種操作模式,所述創(chuàng)作應(yīng)用被配置為基于對所述文檔的所述用戶副本所作的編輯生成元數(shù)據(jù)更新并基于對所述文檔的所述用戶副本所作的編輯生成內(nèi)容更新;元數(shù)據(jù)同步模塊(639,839,2039),被配置為無論所述創(chuàng)作應(yīng)用被配置為處于何種操作模式都在所述文檔的所述用戶副本與所述文檔的所述主副本之間同步元數(shù)據(jù)更新;保護模塊(634,834),被配置為在所述保護模塊接收到存儲所述文檔的指令時將所生成的內(nèi)容更新存儲到所述本地高速緩存的存儲內(nèi)容高速緩存中,所述保護模塊還被進一步配置為如果所述創(chuàng)作應(yīng)用被配置為處于所述公共操作模式中則在將所生成的內(nèi)容更新存儲到所述存儲高速緩存中時將所述生成的內(nèi)容更新存儲到所述上載高速緩存中;以及發(fā)布模塊(632,832),被配置為與所述文檔的所述主副本共享存儲在所述上載高速緩存中的所述內(nèi)容更新,其中與所述文檔的所述主副本共享所述內(nèi)容更新將所述內(nèi)容更新集成到所述主副本中。
2.如權(quán)利要求1所述的創(chuàng)作系統(tǒng),其特征在于,還包括獲得模塊,被配置為不論所述創(chuàng)作應(yīng)用被配置為處于何種操作模式都從所述文檔的所 述主副本獲得外部內(nèi)容更新,所述外部內(nèi)容更新是由一個或多個其它創(chuàng)作應(yīng)用生成的;以 及獲得高速緩存,所述獲得模塊將從所述主副本獲得的所述外部內(nèi)容更新存儲在所述獲 得高速緩存中。
3.如權(quán)利要求2所述的創(chuàng)作系統(tǒng),其特征在于,所述創(chuàng)作應(yīng)用被配置為在所述獲得模 塊已經(jīng)將所述外部內(nèi)容更新存儲在所述第二內(nèi)容高速緩存中時提供所述外部內(nèi)容更新可 用的指示,以及其中,所述創(chuàng)作應(yīng)用被配置為將所述外部內(nèi)容更新中的一個或多個實例化 到所述文檔的所述用戶副本中。
4.如權(quán)利要求1所述的創(chuàng)作系統(tǒng),其特征在于,如果所述創(chuàng)作應(yīng)用被配置為處于所述 私有操作模式中并且所述保護模塊已經(jīng)接收到共享所述內(nèi)容更新的指令,則所述保護模塊 還在將所生成的內(nèi)容更新存儲到所述存儲高速緩存中時將所生成的內(nèi)容更新存儲到所述 上載高速緩存中。
5.如權(quán)利要求1所述的創(chuàng)作系統(tǒng),其特征在于,所述創(chuàng)作應(yīng)用被配置為通過至網(wǎng)絡(luò)的 連接訪問所述文檔的所述主副本。
6.如權(quán)利要求5所述的創(chuàng)作系統(tǒng),其特征在于,所述創(chuàng)作應(yīng)用被配置為在所述創(chuàng)作應(yīng) 用未連接至所述網(wǎng)絡(luò)時能夠編輯所述文檔的所述用戶副本。
7.如權(quán)利要求5所述的創(chuàng)作系統(tǒng),其特征在于,所述創(chuàng)作應(yīng)用被配置為在所述創(chuàng)作應(yīng) 用未連接至所述網(wǎng)絡(luò)時提供警告,所述警告指示所述創(chuàng)作應(yīng)用不能將所述用戶副本與所述主副本同步。
8.如權(quán)利要求1所述的創(chuàng)作系統(tǒng),其特征在于,所述元數(shù)據(jù)更新包括至少一個由所述 創(chuàng)作應(yīng)用生成的、圍繞正在編輯的所述文檔的至少一個數(shù)據(jù)單元的鎖,所述鎖禁止其它創(chuàng) 作應(yīng)用在所述文檔的相應(yīng)用戶副本上編輯所述數(shù)據(jù)單元。
9.一種計算機實現(xiàn)的方法,所述方法將文檔的用戶副本與所述文檔的主副本同步,所 述文檔的所述用戶副本被存儲在用戶設(shè)備(110,610,810,2010)上并且所述文檔的所述主 副本(150)被存儲在存儲設(shè)備(120,620,820,1120)上,所述存儲設(shè)備被配置為以通信方式 耦合至所述用戶設(shè)備,所述方法包括將所述用戶設(shè)備(110,610,810,2010)連接至所述存儲設(shè)備;為創(chuàng)作應(yīng)用(130,424, 1130,2030)選擇私有操作模式;在所述用戶設(shè)備處用所述創(chuàng)作應(yīng)用編輯所述文檔的所述用戶副本(155,655,855, 2055)以生成至少第一內(nèi)容更新;周期性地從所述用戶設(shè)備將通過編輯所述文檔的所述用戶副本生成的任何元數(shù)據(jù)更 新發(fā)送到所述存儲設(shè)備,其中所述元數(shù)據(jù)更新被實例化到存儲在所述存儲設(shè)備上的所述主 副本(150);在所述用戶設(shè)備處存儲通過編輯所述文檔的所述用戶副本生成的所述內(nèi)容更新; 在所述主副本已經(jīng)被更新以包括外部元數(shù)據(jù)更新時,在所述用戶設(shè)備處周期性地從所 述文檔的所述主副本接收所述外部元數(shù)據(jù)更新;將從所述文檔的所述主副本接收到的所述外部元數(shù)據(jù)更新實例化到所述文檔的所述 用戶副本中;在所述主副本已經(jīng)被更新以包括外部內(nèi)容更新時,在所述用戶設(shè)備處周期性地從所述 文檔的所述主副本接收所述外部內(nèi)容更新。
10.如權(quán)利要求9所述的計算機實現(xiàn)的方法,其特征在于,還包括 接收實例化指令;以及根據(jù)實例化指令將所述外部內(nèi)容更新實例化到所述文檔的所述用戶副本中。
11.如權(quán)利要求9所述的計算機實現(xiàn)的方法,其特征在于,還包括 在所述創(chuàng)作應(yīng)用中提供所述外部內(nèi)容更新可用性的指示;在所述創(chuàng)作應(yīng)用中接收查看所述外部內(nèi)容更新的指令; 提供用于在所述文檔的所述用戶副本中實例化所述外部內(nèi)容更新的選項;以及 實現(xiàn)所選擇的用于在所述文檔的所述用戶副本中實例化所述外部內(nèi)容更新的選項。
12.如權(quán)利要求9所述的計算機實現(xiàn)的方法,其特征在于,還包括 接收將所述創(chuàng)作應(yīng)用配置為處于公共操作模式中的指令;將所述創(chuàng)作應(yīng)用切換到所述公共操作模式中;以及與所述文檔的所述主副本共享存儲在所述用戶設(shè)備處的所述內(nèi)容更新。
13.如權(quán)利要求12所述的計算機實現(xiàn)的方法,其特征在于,還包括 將所述用戶設(shè)備與所述存儲設(shè)備斷開連接;繼續(xù)用所述創(chuàng)作應(yīng)用編輯所述文檔的所述用戶副本;在將所述用戶設(shè)備與所述存儲設(shè)備斷開連接之后,在所述用戶設(shè)備處存儲由所述創(chuàng)作 應(yīng)用生成的任何內(nèi)容更新;以及在所述用戶設(shè)備重新連接至所述存儲設(shè)備時共享存儲在所述用戶設(shè)備處的所述內(nèi)容 更新。
14.如權(quán)利要求9所述的計算機實現(xiàn)的方法,其特征在于,還包括將所述用戶設(shè)備與所述存儲設(shè)備斷開連接;繼續(xù)用所述創(chuàng)作應(yīng)用編輯所述文檔的所述用戶副本;以及在將所述用戶設(shè)備與所述存儲設(shè)備斷開連接之后,在所述用戶設(shè)備處存儲由所述創(chuàng)作 應(yīng)用生成的任何內(nèi)容更新;其中在所述用戶設(shè)備重新連接至所述存儲設(shè)備時不與所述存儲設(shè)備共享存儲所述在 所述用戶設(shè)備處的所述內(nèi)容更新直到所述創(chuàng)作應(yīng)用被切換到所述公共操作模式中為止。
15.一種存儲計算機可執(zhí)行指令的計算機可讀存儲介質(zhì),所述計算機可執(zhí)行指令在由 計算設(shè)備執(zhí)行時執(zhí)行一種創(chuàng)作存儲在用戶設(shè)備(110,610,810,2010)上的文檔的用戶副本 (155,655,855,2055)的方法,所述方法包括將創(chuàng)作應(yīng)用(130,424,1130,2030)配置為處于公共操作模式中,其中所述創(chuàng)作應(yīng)用被 配置為由所述用戶設(shè)備(110,610,810,2010)執(zhí)行以創(chuàng)作所述文檔的所述用戶副本(155, 655,855,2055),其中所述用戶設(shè)備是離線的;用所述創(chuàng)作應(yīng)用編輯所述文檔的所述用戶副本以生成多個內(nèi)容更新;在所述用戶設(shè)備處存儲由所述創(chuàng)作應(yīng)用生成的任何元數(shù)據(jù);在所述用戶設(shè)備處的一個隊列(2031)中存儲由所述創(chuàng)作應(yīng)用生成的所述內(nèi)容更新;將所述用戶設(shè)備連接至所述存儲設(shè)備;在所述用戶設(shè)備連接至所述存儲設(shè)備時,即使所述創(chuàng)作應(yīng)用在所述用戶設(shè)備連接之前 被關(guān)閉,也要將所述元數(shù)據(jù)與所述文檔的所述主副本(150)共享。
16.如權(quán)利要求15所述的計算機可讀介質(zhì),其特征在于,還包括在所述用戶設(shè)備連接至所述存儲設(shè)備時,即使所述創(chuàng)作應(yīng)用在所述用戶設(shè)備連接之前 被關(guān)閉也共享存儲在所述隊列中的所述內(nèi)容更新。
17.如權(quán)利要求15所述的計算機可讀介質(zhì),其特征在于,還包括在將所述用戶設(shè)備連接至所述存儲設(shè)備之后從所述文檔的所述主副本獲得外部元數(shù) 據(jù)更新;以及自動地將所述元數(shù)據(jù)更新實例化到所述文檔的所述用戶副本。
18.如權(quán)利要求15所述的計算機可讀介質(zhì),其特征在于,在所述用戶設(shè)備處的所述隊 列中存儲由創(chuàng)作應(yīng)用生成的所述內(nèi)容更新包括在所述創(chuàng)作應(yīng)用從所述用戶接收定稿指令 時在所述隊列中存儲所述內(nèi)容更新。
19.如權(quán)利要求18所述的計算機可讀介質(zhì),其特征在于,在所述創(chuàng)作應(yīng)用被配置為處 于所述公共模式中時接收所述定稿指令觸發(fā)對所述內(nèi)容更新的共享。
20.如權(quán)利要求18所述的計算機可讀介質(zhì),其特征在于,在所述創(chuàng)作應(yīng)用被配置為處 于所述私有模式中時接收所述定稿指令不觸發(fā)對所述內(nèi)容更新的共享。
全文摘要
協(xié)作創(chuàng)作應(yīng)用提供其中二個或多個用戶可以并發(fā)編輯文檔的創(chuàng)作環(huán)境。每一用戶編輯文檔的一個副本、發(fā)送更新到該文檔的主副本、以及從該文檔的主副本接收更新。創(chuàng)作環(huán)境可被配置為處于公共操作模式或者私有操作模式中,在公共操作模式中,自動同步內(nèi)容和元數(shù)據(jù),在私有操作模式中,自動同步元數(shù)據(jù)并且僅應(yīng)用戶請求同步內(nèi)容。創(chuàng)作應(yīng)用可在公共或私有模式中離線編輯文檔。
文檔編號G06F21/00GK101896915SQ200880121295
公開日2010年11月24日 申請日期2008年11月11日 優(yōu)先權(quán)日2007年12月14日
發(fā)明者C·J·安托斯, E·J·伯恩斯坦, J·B·貝勒, M·R·奈特 申請人:微軟公司