同步在线文档编辑的制作方法

文档序号:6437905阅读:618来源:国知局
专利名称:同步在线文档编辑的制作方法
技术领域
本发明涉及同步操作,尤其涉及同步在线文档编辑。
背景技术
web应用通过网络向用户提供各种各样的服务和数据。数据被收集、处理和存储在不同位置。web应用检索该数据,对它格式化以供呈现,并且将它提供给客户端设备上的浏览应用以呈现网页。某些网页可以是静态的,其中该数据是非交互式的。其它网页可通过链接或基于web模块的激活来提供诸如附加信息等某种交互性。然而,一般而言,网页以网页作者所决定的格式和量来呈现数据。在线文档应用向用户提供文档编辑和查看能力,这种能力直到最近都还仅限于胖客户端(thick client)应用的领域。计算方面的技术进步以及网络和数据存储能力的扩展允许在线应用提供胖客户端应用的文档编辑特征。在线应用与底层技术无关地跨各个平台上的可用性的优点允许大量用户就文档创建和管理进行协作。然而,多个用户对文档的访问可能会导致异步用户编辑。通过各种技术在多个平台上提供对文档的访问权还可能使文档维护和文档相干性(coherency)变得复杂。

发明内容
提供本发明内容以便以简化的形式介绍将在以下的详细描述中进一步描述的一些概念。本发明内容并不旨在专门标识所要求保护的主题的关键特征或必要特征,也不旨在用于帮助确定所要求保护的主题的范围。实施例针对通过在文档组件层面控制修订来同步在线文档编辑。根据一些实施例,文档被变换成文档组件的图,并对组件声明锁定以管理由多个用户提交的改变。可通过维护图的修订来跟踪图组件中的改变。通过阅读下面的详细描述并参考相关联的附图,这些及其它特点和优点将变得显而易见。可以理解,前述一般描述和以下的详细描述都是说明性的,并且不限制所要求保护的各方面。


图1是示出在线文档编辑服务的示例组件的示意图;图2示出管理编辑的锁定动作中的示例步骤;图3示出管理编辑的修订实现中的示例步骤;图4A到4C示出了根据某些实施例的示例场景;图5是可实现根据各实施例的系统的联网环境;图6是可实现各实施例的示例计算操作环境的框图;以及图7示出了根据各实施例的通过在文档组件层面控制修订来同步在线文档编辑的过程的逻辑流程图。
具体实施例方式如上简要所述,可通过经由使用锁定动作在文档组件层面控制修订来同步在线文档编辑。文档可被变换成文档组件的图。对组件声明锁定以管理由多个用户提交的改变。 可通过维护图的修订以便为每一共同作者的编辑包括文档的组件层的编辑来跟踪图组件中的改变。在以下详细描述中,参考了构成详细描述的一部分并作为说明示出各具体实施例或示例的附图。可组合这些方面,可利用其它方面,并且可以做出结构上的改变而不背离本发明的精神或范围。因此,以下具体实施方式
并不旨在限制,并且本发明的范围由所附权利要求及其等效方案来限定。尽管在结合在计算设备上的操作系统上运行的应用执行的程序模块的一般上下文中描述了各实施方式,但是本领域的技术人员会认识到各方面也可以结合其它程序模块实现。一般而言,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、组件、数据结构和其它类型的结构。此外,本领域的技术人员可以明白,各实施例可以用其它计算机系统配置来实施,包括手持式设备、多处理器系统、基于微处理器或可编程消费者电子产品、小型计算机、大型计算机以及类似计算设备。各实施方式还能在任务由通过通信网络链接的远程处理设备来执行的分布式计算环境中实现。在分布式计算环境中,程序模块可位于本地和远程存储器存储设备两者中。各实施例可被实现为计算机实现的过程(方法)、计算系统、或者诸如计算机程序产品或计算机可读介质等的制品。计算机程序产品可以是计算机系统可读并且编码包括用于使计算机或计算系统执行示例过程的指令的计算机程序的计算机存储介质。计算机可读存储介质可例如通过易失性计算机存储器、非易失性存储器、硬盘驱动器、闪存驱动器、软盘或紧致盘以及类似存储介质中的一个或多个来实现。贯穿本说明书,术语“平台”可以是用于提供各种文档类型的共同创作服务的软件和硬件组件的组合或其中可实现各实施例的类似的环境。平台的示例包括但不限于,在多个服务器上执行的托管服务、在单个服务器上执行的应用以及类似系统。术语“服务器”一般指通常在联网环境中执行一个或多个软件程序的计算设备。然而,服务器还可以被实现为被视作网络上的服务器的、在一个或多个计算设备上执行的虚拟服务器(软件程序)。以下提供关于这些技术和示例操作的更多细节。图1是示出在线文档编辑服务的示例组件的示意图。在示意图100中,服务器110 可执行一个或多个在线文档编辑应用,并经由网络140传输文档内容以及其它信息。网络 140可以是本地网络,或可以是外部实体,诸如基于因特网的基础架构。它可提供有线或无线连通性。网络节点可通过不安全或安全的连通性彼此连接。安全连通性的示例可以是采用加密通信在网络节点之间建立的虚拟专用网络(VPN)。服务器110可提供通过各种协议(其示例有超文本传输协议(HTTP)与客户端通信的文档编辑应用。应用可向瘦和胖客户端上的最终用户提供文档编辑服务。瘦客户端 (或web客户端)131、134可依赖于服务器应用提供的特征。胖客户端(或富客户端)137 可将服务器应用提供的特征与本地特征组合以向最终用户提供附加的实用程序。各富客户端137不必连接到同一应用服务器110。最终,所有客户端正在编辑文档服务器120上的同CN 102436441 A
说明书
3/12 页
一文档。根据某些实现,应用服务器110可以是适于web编辑能力的一个服务器,而另一服务器可以提供适于富客户端137并由其使用的服务。应用服务的示例可将用户编辑与用户在场信息和用户名字集成以在客户端设备上显示用户改变。另外,服务器应用可允许多个用户通过不同的客户端设备(130、133和136)访问服务。在示例场景中,用户可访问和修改文档,得到同一文档的不同版本(132、135和138)。在实施例中,文档服务器120可以是文档存储服务。文档可存储各种类型和格式的文档,包括但不限于文本、绘图、图像、视频和音频。在示例系统中,文档服务器可以存储由多个用户通过由应用服务器提供的在线编辑应用编辑的文本文档。在另一示例系统中, 文档服务器可以存储由多个用户通过由应用服务器提供的在线图像编辑应用访问和编辑的图像文档。然而,在其它示例中,文档存储服务器可同时向用户提供多个文件类型和格式供通过混合文档类型在线应用服务访问和编辑。在示例场景中,用户可访问现有文档以便通过应用服务器提供的文档应用进行编辑。应用户请求,应用服务器可在存储服务器中检索并锁定文档。应用服务器可将文档变换成封装文档各组件的图。应用服务器可向图分配修订号。应用可评估用户的修改,并更改覆盖包含所改变的组件的图组件的组件锁的文档锁。应用服务器可将改变写到图组件, 改变图的修订号,并可通过写入到文件服务器来对图改变进行同步。另外,离线客户端可在重新在线之后传输编辑以便集成到图中。允许用户共同创作文档的应用服务器可期望来自客户端的某些通信。通信可按照两种请求的形式存储请求和服务器访问请求。请求操作可使用两个层次来实现。首先,服务器可对每一请求展示简单对象访问协议(SOAP)接口。请求然后可传到服务该请求的服务器前端的组件上。在另一示例实施例中,基于web浏览器的客户应用可由两部分组成,运行在浏览器中的基于脚本的代码以及运行在前端的实现专用代码,诸如C#代码。前端可以接收并服务请求。作为结果,应用可具有实现基于web浏览器的客户端可如何作出其请求的选项。运行在浏览器中的代码可以1)对服务器上所展示的SOAP接口直接作出请求,或者2、对服务器上的单个入口点直接作出所有请求,并在接收到SOAP请求之后,使前端调用可从前端内直接服务请求的组件。对服务器上的单个入口点直接作出所有请求可具有预处理、后处理、可管理性、便携性和一致性方面的优点。对于预处理,异步Java脚本(AJAX)或类似的请求可包含二进制流,该流可包含正对服务器请求的操作的细节。按照脚本语言创建二进制流可能是麻烦的。另外,服务器可能已经能够访问可从更简单的指令创建二进制请求的实用程序。对于后处理,可能需要某些处理以将原始响应变换成除二进制流以外对于浏览器而言更可解释的格式。响应可包含可引用文档的数据。对于可管理性,利用单个入口点,系统可实现诸如节流的操作以考虑前端上的真实负载。当多个相关请求在同时到达时,应用还可更好地重用状态。对于便携性,使浏览器对各个端点进行调用,系统可因迫使其它实现为每个实现保存端点的名字而对其它实现添加负担。对于一致性,具有浏览器的文档编辑器可通过同一端点穿过(funnel)大多数通信。在另一实施例中,可使用存储请求来存储或检索数据。这些存储请求可针对连系于底层文档的一个或多个分区数据单元进行。从诸如web浏览器等客户端应用对服务器前端作出存储请求可通过不同的机制来完成。然而,共同创作文档的用户可要求附加的请求以存储和检索与共同创作有关的元数据,这可对系统强加新的要求。在示例中,web浏览器可执行操作以检索页面的内容。浏览器可对文档作出基于 web浏览器的服务调用。浏览器可实例化其响应对象,并用关于它可能希望对哪个文档以及哪个单元瞄准并发出请求的数据来填充其响应对象。当服务器接收请求时,应用可基于类型切换(在节流、批处理之后)并基于类型分派到适当的处理器(handler)。基于所实现的技术,应用可将输入变换成对端点而言可接受的格式。协议可仅接受对其请求的、二进制流格式的输入,或者将任何输入转换成二进制数据(以便最大化存储这样的数据的效率)。函数可将流作为输入,它可以是包含应用可执行的请求的细节(取或放、哪一分区、哪个单元)的参数。在另一示例实施例中,应用提供者(110)上的组件可包含可从自变量构建二进制流的对象。实现包装以在这样的技术实现之间进行互操作可能是明智的。包装可包裹本机设施并向实现代码展示它们。对基于浏览器的服务(诸如对特定单元检索数据)作出的每一类型的请求可存在一包装实现对象。可用在基于浏览器的服务请求上可用的相同的自变量来实例化对象。对象可实现AddToNativeRequest (添加到本机请求)方法,该方法了解如何在执行请求的本机设施的实现上调用方法。最后,可在执行请求并返回结果(即流)的接口上调用Execute (执行)方法。结果可被变换回包装代码内的面向对象的结构。可使用文档内容的包装作为基于浏览器的应用来服务存储或检索单元数据的请求。应用可使包装交互适用于存储和检索用于共同创作的元数据。然而,可不按照单元对象来表示元数据。要由应用存储的元数据可以是诸如可扩展标记语言(XML)文档的不透明的数据团块。元数据可被分解成单元对象的图以便按照单元来存储。在检索时,数据可作为可被重构成流的单元对象的图返回。应用服务器上的应用代码可通过作为流来存储或检索数据来处理元数据存储请求。流可被馈送到XML文档对象以便根据适当的模式操纵。在又一实施例中,服务器访问请求可被限于执行诸如加入/离开共同创作会话的功能的一组请求。该功能可请求关于当前认证的用户的信息(诸如名字、电子邮件地址和其它用户信息)。这样的请求可被称为共同创作请求。服务器请求可遵循与与存储请求相同的模式。对象能够使用友好的自变量来创建共同创作请求。服务器请求的参数和输出可较为简单,且与创建存储请求所需的二进制流的成本相比负担小得多。此处参考特定协议、命令、消息和系统阐述示例实施例。然而,这些不被解释为对实施例的限制。本公开的不同方面可使用此处公开的原理来用其它编程语言、协议、系统和组件实现。图2示出管理对文档的访问权的锁定动作中的示例步骤。示意图200示出根据各实施例管理编辑的锁定动作中的示例步骤。诸如web浏览器的客户端应用210可向应用服务器230请求文档012)。在接收到请求后,应用服务器可向文档存储服务器250发送锁定请求032)以在所请求的文档上创建文档锁。在创建文档锁之后,应用服务器可从存储服务器检索文档(234)。根据某些实施例,服务器可首先获取文档上的锁,然后对其检查以确保它适于共同创作016),且一旦服务器作出了这一判断,服务器可将锁调整为允许多个客户端打开文档的锁036)。如果锁被判断为不合适的,则服务器可改回独占性锁。这允许服务器保存其复杂性使其不适于共同创作的文档以及适于这样的动作而无需对文档内容的任何先验知识的文档,这可能丢失与文档内容同步且可能是错误的。示例实施例可以是保存文本的XML文档。应用服务器可解析XML文档以得到其模式和段落组件,并将组件存储在图中而同时向图给予修订号。对存储请求的响应可以是流形式的。流可能需要被解析成XML文档或者被解析成用于XML的简单API以避免存储器负担。指定属性的XML元素可变为具有成员变量的构造。来自服务器访问请求的响应可具有更为特定的结构且可被直接转换成浏览器友好的项。在替换实施例中,更为复杂的后处理步骤可用使服务器来完成工作为代价来在诸如web浏览器等瘦客户端应用上得到显著的性能增益。辅助元数据可包含对锁的描述,以及对每一个锁由该锁覆盖的段落的段落标识符的列表。浏览器可能需要遍历图以查找其标识符被锁指定的段落,以便将每一锁应用于所覆盖的段落。或者,锁指定可包含段落对象的对象标识符而非相应的段落标识符。在图中按照对象标识符来寻找对象实际上是随机访问,且应用可避免整个遍历。响应于对辅助元数据的请求的服务器前端可具有足够的信息以用指定所覆盖的段落的对象标识符而非段落标识符的锁来响应。在检索辅助元数据之后,服务器前端可解析锁,然后从应用服务器上的存储检索图的最近修订。服务器前端可通过找到图中的所有段落对象,构建从段落标识符到段落对象的对象标识符的反向映射来继续。服务器前端可构建包含段落对象标识符以代替段落标识符的响应。在浏览器侧,设计可包括具有常见的行动者/编辑者/管理者模式以便解释共同创作元数据和用于移动元数据的复制器(replicator)并对其操作的以下对象1.编辑者的表ο周期性下载编辑者表并上传(会话中两次)的过程ο封装编辑者表模式的知识的编辑者ο维护表示当前文档中的共同作者的存储器内结构的管理者。管理者可展示在编辑者解释数据时调用的Add(添加)和Remove (移除)方法。管理者还可以展示按照用户的GUID标识符寻找用户的查找方法。ο处理也可提供诸如即时消息收发等的其它功能的任何UI的行动者。2.辅助元数据ο周期性下载和上传辅助元数据的过程。辅助元数据可包含少量信息,主要是关于文档内的锁的信息。辅助元数据中除文档内的锁之外的信息可在复制器中管理。对于锁,可再次部署行动者/编辑者/管理者模式1.具有添加和移除锁以给予图的各组件的方法的行动者。行动者还可具有参考锁回答“我可以在这里键入吗”问题的方法。2.维护当前已知的锁的集合的管理者,锁可进入各种列表,诸如占位符、暂时 (ephemerals)、自动删除等。诸如移除所有暂时锁并将其转换成占位符锁等的全局锁定操作。占位符、暂时和自动删除锁可与诸如段落之类的文档组件相关联。
3.设计可能不需要锁编辑者对象。一旦创建锁对象之后,锁对象实际上可能是永远不变的,且可能不存在要执行的真实的编辑操作。模式锁也可与诸如段落的文档组件相关联。或者,基于web浏览器的客户端可具有用于禁用共同创作的更广泛的一组特征。即使浏览器客户端可能找到已经用模式锁 (即,另一客户端拿走了锁)打开的文档,浏览器客户端也可能需要扫描整个文档并仅当没有发现违反特征的情况下才允许用户编辑。这对基于web浏览器的客户端而言可能不是额外的负担,因为服务器应用可读取几乎整个文档内容以将其变换成图且可能在任何时刻异常中止。在另一实施例中,可使用种子同步来作为对文档中的每一段落标识符重新编号的请求。请求可通过将具有相同的名字的元素置于辅助或主要元数据中来发出。重新编号可被执行为简单的递增计数,以文档标识符开始,并按预定义的次序走查通过文档中的各段落。所有后续请求和辅助元数据中的信息可参考由重新编号得到的段落标识符,而非原始存储在文档中的段落标识符。实现种子同步请求在浏览器中可能是不可能的,因为重新编号依赖于对浏览器而言(当前)不可见的部分,诸如页眉/页脚、脚注和尾注、文本框内的文本等。种子同步可在服务器前端中实现。实现同步种子请求的简单方法可以是创建新修订,其可在文档中所有段落上改变 (其中存储段落标识符的)属性。第二种方法可以是在前端实现特定的请求方法。该方法可具有将老段落标识符映射到新标识符的字典的返回值。浏览器可在其接收到辅助元数据中的种子同步元素时发出请求,并使用得到的映射来解释元数据的其余部分。在替换实施例中,为使服务器负载保持为最小,可实现轻量请求以确定用户是否是文档的唯一的共同作者。基于web浏览器的客户端还可实现“只有我吗? ”请求以最小化服务器负载。以下作为示例实施例示出整个序列。在以下步骤中,⑶是‘浏览器’,而⑶是服务器(前端应用)。1.⑶使得基于web浏览器的服务请求得到文件的内容2. (S)试图用模式锁来锁定文件,并加入会话a. (S)如果文件已经用模式锁锁定,则继续,该用户已经不是单独的了。b. (S)如果文件用任何其它锁锁定,则失败。c.⑶发出取得当前用户凭证和服务器时间的请求3. (S)从存储检索文件(作为流)4. (S)将流变换为图(走查通过文件中的每个xml元素)a.⑶记住是否遇到不允许共同创作会话的任何元素5.⑶调整锁a. (S)如果已经用模式锁锁定i. (S)如果没有元素从步骤如中提交,则继续;否则试图切换到独占性锁b. (S)记录应用以模式锁还是独占性锁结束。还根据加记住用户是否在文档中是否已经不是单独的了,6. (S)将该图存储在存储中,并向该图给予用户专用根。以此方式,多个用户可在存储的同一分区中具有完全不同的图内容,而彼此不冲突。示例情况是两个用户以相同的文档开始但作出不同的改变。为存储图的目的,其改变必须保持分开,直到一个用户然后是另一用户通过调用保存操作来提交其改变。该根对用户而言是唯一的(但对其浏览器或计算机而言不是),使得如果同一用户从另一计算机或浏览器的另一实例引导应用时,(即使在崩溃之后),系统可标识图的哪些部分属于该用户。7.⑶将该图发送给浏览器8.⑶使内容去串行化并显示内容9. (B)如果应用在步骤5c中具有模式锁a. (B)如果在此刻是单独的(根据步骤2a),则启动频繁询问只有我吗的过程来确定何时/是否有其它作者加入b. (B)当用户编辑时,创建锁(无论用户是不是单独的)c. (B)如果不是单独的(根据步骤2a)或者不再是单独的(根据以上9a),i. (B)开始显示在此会话中创建的任何锁(步骤9b)ii.⑶发出请求以将当前用户添加到编辑者表iii. (B)开始用于编辑者表和辅助元数据的重复过程关于附加作者或锁的新信息可按需应用于图。一旦用户离开编辑器,应用可发出将当前用户从编辑者表中移除并离开共同创作会话的请求。在又一实施例中,实现可支持“不可编辑区域”。完整特征可考虑横跨可编辑和不可编辑区域两者的选择,以及包含除文本以外的对象或文本和其它对象的混合的范围。用户可能需要能够作出选择并将其内容置于不可编辑区域中以提供对非基于浏览器的客户端的一致体验。图3示出了根据某些实施例的示例场景。如示意图300中所示,应用服务器330 可提供文档编辑服务。文档可以是各种格式的,包括但不限于文本、绘图、图像、视频和音频。示例实现可以是应用服务器对多个用户的多个客户端应用310管理共同创作的文档。 或者,文档可以是单种格式的,或者可包含类型的组合,诸如组合文本、音频和视频内容的文档。如图300中所示,客户端应用可作出请求来保存由用户编辑的文档(312)。应用服务器可检索存储在文档存储服务器350中的文档(332)。在步骤314,应用服务器可检索或创建本地存储的文档的基准图。在步骤316,应用服务器可检索包含用户编辑的图的修订。 然后,检索到的文档可被变换成本地存储的基准修订(318)。基准修订与所存储的文档之间的任何改变可由应用服务器同步。在步骤320,应用服务器可比较最近还原的基准图与包含用户编辑的任何修订之间的各修订。在步骤322,使可被输入到基准图的编辑准备好输入到文档。应注意到,即使在332检索的文档与用于创建图修订316的文档不是同一个文档,这也可能发生。因此,共同创作应用不必保存“原始”文档的本地副本,这改进了其超过尺寸范围(scale out)的能力(因为应用针对服务器上的最近副本工作)。对文档的改变可被保存到存储服务器(334)。在保存了对文档的改变之后,应用服务器可将包含改变的修订添加到基准图。在步骤326,应用图可本地存储改变后的图。在步骤336,可用锁刷新来释放任何锁持有。在实施例中,在非浏览器和基于浏览器的客户端两者中,任何改变可在当前会话中被添加到文档。然而,诸如非基于浏览器的客户端的胖客户端可在保存动作期间从服务器获取文档的最近版本。可要求用户解决任何冲突的改变或编辑。用户选择可被记录在图中的对应组件中以解决冲突。发送给基于浏览器的应用的冲突解决信息可包括编辑时间、 用户的认证信息、用户的在场信息以及用户的角色。得到的内容可被保存回服务器作为新的最近版本。在另一实施例中,用于在保存期间合并的高层实现可包括1.获取由其它用户(即作者)作出的改变的集合,2.将由用户作出的改变同由其它作者作出的改变进行比较。服务器可收集两者均操纵的所有对象的列表作为“冲突”,3.对被认为有冲突的所有对象,服务器可确定应用是否能无需用户干涉解决冲突。解决冲突可通过操纵当前用户的修订以表示所需的经合并的改变集合来实现。如果有任何对象仍未解决,则服务器可异常中止合并操作,并发信号给浏览器以向用户呈现UI以解决冲突,4.改变可应用于文档并被保存到存储服务器,以及5.应用服务器可将来自其它作者的改变集合发送到浏览器。此外,如果可对用户自己的改变作出任何修改以便解决冲突,则也可发送该修改。获取由其它用户作出的改变的集合仍可能提出一些挑战。输入对管理其它用户的改变而言可能显得不完整。文档的当前状态可能可用,但原始状态可能不可用。然而,应用服务器可通过原始图来了解文档的原始状态。用户作出的改变不可能与其它作者在文档中原始未被转换成图的部分中作出的改变冲突。服务器应用可转换文档的当前状态,并将得到的图与原始图进行比较。比较可得到由其它共同作者对文档作出的改变的集合。改变的集合可被最自然地表示为修订,因为它是图的两个状态之间的差异。因此,服务器应用可获取检测冲突所需的所有信息,且能够在合并操作的结束时将其它共同作者的改变发送给浏
IrWSB 见益。将从文档的当前状态得到的图与原始图进行比较有其自己的挑战。不能简单地使用图中节点的一对一比较,因为可能按照任何任意的方式添加或者移除或甚至移动了段落和其它对象。对文档中向其附连了某种唯一标识符的构造(其示例是段落或表行),可使用这些标识符来从原始图中挑选应与所述构造对应的节点,并比较属性来查看是否有过改变。在示例实施例中,系统将首先读完整个原始图,构造从段落标识符到曾表示该对象(的原始状态)的图节点的映射。然后,构造对应于文档的当前状态的图。当构造对应于此新图中的段落的节点时,使用段落的id查找原始节点。如果在基于原始图构造的映射中没有找到这样的段落,则该段落是由其它作者新添加的。如果在图中找到节点,则将当前节点的属性与原始节点的属性进行比较。如果添加或移除了任何属性,或者如果属性的值与原始节点上相同属性的值不同,则该段落已经被改变。文档中可能存在对其不适用唯一标识符的构造。为了执行当前和原始之间的比较,可依赖于这些构造附近或包含在这些构造中的、与唯一标识符相关联的其它对象。例如,表单元可能不具有其自己的唯一标识符。然而,在此实施例中,与任何表单元中包含的最后一个段落相关联的标识符被用作该表的标识符(以及该段落本身的标识符;因为表单元和段落节点对象是不同类型的,使用同一值作为两者的标识符没有歧义)。这可要求编辑系统的其它各方在修改这样的对象时观察某些规则以不改变其身份。在表单元示例的情况中,对单元的编辑不可改变最后一个段落的段落标识符。或者,在不能自动解决冲突的情况中,包含由其它作者作出的改变的修订可被发送给浏览器,标记为冲突中的对象。另外,相同的改变可被发送给浏览器以使用户的文档最新。最后,可向用户呈现UI以解决冲突。一旦所有冲突已经被解决,用户可尝试再次保存。示例序列详细描述了保存操作期间执行合并。在以下步骤中,⑶是‘浏览器’,而 ⑶是‘服务器’(前端应用)。1.⑶发送基于web浏览器的服务请求以保存文档,2.⑶向存储服务器检索文档的当前状态(作为IStream),3. (S)检索在加载期间存储在存储中的原始图,4. (S)检索在用户作出编辑时在服务器上累积的修订,5. (S)变换文档,使用来自步骤3的原始图作为累积由其它用户作出的改变的修订的基线,6.⑶将来自步骤4的修订与来自步骤5的修订进行比较,a.⑶如果任何对象均在两者中找到,则试图通过修改来自步骤3或4的修订来解决,b. (S)如果有任何对象不能被解决,则异常中止保存,返回来自步骤5的修订7. (S)对文档以及来自各步骤的经修改的修订运行保存8. (S)将得到的文档存回存储服务器,9. (S)将来自步骤5的修订添加到基准图,将结果标记为新基准10. (S)将来自步骤6的(可能修改的)修订添加到存储11.⑶刷新文件上的锁,以及12.⑶返回来自步骤5的修订以及来自步骤6(如果修改)的修订两者。图4A到4C示出了根据某些实施例的示例场景。在示例实施例中,当改变彼此正交时,合并对表的结构改变可能是复杂的。在示意图410中,用户可开始编辑2x2表。如果用户在中间添加了列,且另一用户添加了行,则期望的结果看上去可能像示意图420。为了得到期望的结果,服务器应用可能需要检测到在合并期间,添加的行(在表具有两行时添加的)可能需要向其添加第三单元。否则,另一用户添加的列可能导致示意图430中的表, 其丢失一个单元。由于列在文档或图表示中均不被表示为第一类对象,而使这一任务变得困难。当一个用户删除并添加了相同数目的列(看上去列的数目没有改变)或当所有共同作者的动作的总数等于移除整个表时,可能发生这一复杂的情形。在复杂合并解决方案的替换实施例中,基于浏览器的应用可能必须应对编辑同一段落的两个作者。基于浏览器的应用可能不会尝试在没有用户输入的情况下解决这一冲突,因为在字符层面上组合改变可能是不合需要的。由于语言的复杂性,应用可能会创造无意义的词。要分解的下一逻辑单位将位于文字处理边界。基于浏览器的应用还可请求用户输入,因为与两个添加或删除可被理解为合理地不相关的段落或表的行不同,向段落添加或从段落移除词或句子可显著地改变内容。在复杂的合并解决方案的另一实施例中,基于浏览器的应用必须解决对列表和重新编号的冲突。实现可以处于诸如文字处理应用的基于浏览器的应用如何记录并向列表项目分配编号的代码的顶层位置。对列表项目的编号可被计算并存储在图本身中(作为非持久属性)。在列表项目被添加和删除或者向上和向下移动时,可更新编号。此外,在文字处理的示例中,应用可能不会为浏览器中的所有列表成员重新计算这些值。然而,服务器应用相反可在加载操作期间计算值,且在用户编辑操作时仅增量式地修改。在用户和其它作者均作出非冲突的改变时,(但导致列表中项目的编号改变),服务器应用可能需要作为合并操作的一部分更新编号。以上讨论的同步在线文档编辑的系统和实现是为了例示的目的,并且不构成对各实施例的限制。文档可以是各种类型的,包括但不限于文本、绘图、图像、视频和音频。文档可由类型的组合构成。可使用此处讨论的原理采用其它模块、进程和配置来同步用户编辑。图5是可实现各实施例的示例性联网环境。管理用户编辑同步的服务器应用可经由在一个或多个服务器514或诸如托管服务的单个服务器(例如web服务器)516上执行的软件来实现。平台可以通过网络510来与诸如智能电话513、膝上型计算机512、或台式计算机511( ‘客户端设备’)等各个计算设备上的客户端应用进行通信。如上所述,文档应用服务器可执行同步对存储在文档存储服务器中的文档的用户编辑的算法。如果用户编辑文档的各组件,应用服务器可在用户编辑期间将关于所锁定的组件的信息发送给在客户端设备511-513上编辑文档的其它作者。如之前所描述地,客户端设备511-513可允许对在远程服务器(例如,服务器514 中的一个)上执行的应用进行访问。服务器可直接地或通过数据库服务器518来从数据存储519中检索相关的数据,或将相关的数据存储到数据存储519中。网络510可包括服务器、客户端、因特网服务供应商以及通信介质的任何拓扑结构。根据各实施例的系统可以具有静态或动态拓扑结构。网络510可包括诸如企业网络等安全网络、诸如无线开放网络等不安全网络、或因特网。网络510还可通过诸如公共交换电话网络(PSTN)或蜂窝网络等其他网络来协调通信。此外,网络510可包括诸如蓝牙或类似网络等短程无线网络。网络510提供此处描述的节点之间的通信。作为示例而非限制,网络510可以包括例诸如声学、RF、红外线和其它无线介质等的无线介质。可以采用计算设备、应用、数据源和数据分发系统的许多其它配置来同步在线文档编辑。此外,图5中所讨论的联网环境仅用于说明目的。各实施方式不限于示例应用、模块、或过程。图6及相关描述旨在提供对其中可实现各实施例的合适计算环境的简要概括描述。参考图6,示出了根据各实施的例如计算设备600的用于应用的示例性计算操作环境的框图。在基本配置中,计算设备600可以是同步对在线文档的用户编辑的在线应用服务器并且包括至少一个处理单元602和系统存储器604。计算设备600还可包括协作执行程序的多个处理单元。取决于计算设备的确切配置和类型,系统存储器604可以是易失性的(如 RAM)、非易失性的(如ROM、闪存等)或是两者的某种组合。系统存储器604通常包括适于控制平台的操作的操作系统605,例如来自华盛顿州雷德蒙市的微软公司的WINDOWS 操作系统。系统存储器604还可以包括一个或多个软件应用,诸如程序模块606、文档服务 622、以及同步模块624。文档服务622可以是提供在线文档供编辑的服务的一部分。同步模块6M可将用户编辑同步到所存储的文档,并解决因共同作者编辑而导致的冲突。文档可被分解成各组件,且组件可被存储在图中以便实现诸如段落的文档部分编辑的组件层面的锁定。该基本配置在图6中由虚线608内的那些组件示出。计算设备600可以具有附加特征或功能。例如,计算设备600还可包括附加数据存储设备(可移动和/或不可移动),例如磁盘、光盘或磁带。在图6中通过可移动存储器 609和不可移动存储器610示出这样的附加存储。计算机可读存储介质可以包括以用于存储诸如计算机可读指令、数据结构、程序模块或其它数据等信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。系统存储器604、可移动存储609和不可移动存储610都是计算机可读存储介质的示例。计算机可读存储介质包括但不限于,RAM、ROM、 EEPR0M、闪存或其它存储器技术,CD-ROM、数字多功能盘(DVD)或其它光学存储,磁带盒、磁带、磁盘存储或其它磁存储设备,或能用于存储所需信息且能够由计算设备600访问的任何其它介质。任何这样的计算机可读存储介质都可以是计算设备600的一部分。计算设备 600还可以具有输入设备612,诸如键盘、鼠标、笔、语音输入设备、触摸输入设备和类似输入设备。还可以包括输出设备614,诸如显示器、扬声器、打印机和其它类型的输出设备。这些设备在本领域中公知并且无需在此处详细讨论。计算设备600还可以包含允许该设备与其他设备618通信的通信连接616,诸如通过分布式计算环境中的无线网络、卫星链接、蜂窝链接和类似机制。其他设备618可包括执行通信应用的计算机设备、存储服务器和类似设备。通信连接616是通信介质的一个示例。 通信介质可以包括计算机可读指令、数据结构、程序模块、或者诸如载波或其它传输机制等的已调制数据信号中的其它数据,并且包括任何信息传递介质。术语“已调制数据信号”是指其一个或多个特征以这样的方式设置或改变以便在信号中对信息进行编码的信号。作为示例而非限制,通信介质包括诸如有线网络或直接线连接之类的有线介质,以及诸如声学、 RF、红外及其他无线介质之类的无线介质。各示例实施例还包括各种方法。这些方法可以用任何数量的方式,包括本文中所描述的结构来实现。一种此类方式是通过本文中描述的类型的设备的机器操作。另一可任选方式是结合一个或多个人类操作者执行该方法的各个操作中的某一些来执行该方法的一个或多个操作。这些人类操作者无需彼此同在一处,而是其每一个可以仅与执行程序的一部分的机器同在一处。图7示出了根据各实施例的通过在文档组件层面控制修订来同步在线文档编辑的过程700的逻辑流程图。过程700可由向客户端提供在线文档的应用服务器实现。过程700开始于操作710,其中在线文档应用服务器(例如,web服务器前端)从用户接收对文档的请求。文档可以是各种格式的。在接收到用户请求之后,应用服务器可在操作720请求在存储服务器处锁定文档。在锁定文档之后,应用服务器可在操作730从存储服务器检索文档。存储服务器可将文档作为流发送给应用服务器。在操作740,应用服务器可将流变换成文档组件,并将组件加载到图。服务器可比较包含检索到的文档的图修订与本地存储的基准图,并同步组件中的任何改变。在操作750,应用服务器可确定用户可能对哪些文档组件作出了改变。在操作 760,可在用户调用保存操作之后执行保存操作,且应用服务器可基于用户改变确定要锁定图的哪些组件,并在后续操作770创建图的新修订的同时记录对相应组件的改变。在操作780,应用服务器可用本地图上的基于组件的锁来修改文档锁以防止对当前工作的组件的同时用户编辑。客户端应用可显示示出文档的哪些组件可被锁定以及正在由用户操作的通知。所提供的信息还可包含用户在场信息,以及作者名字来指示组件的当前作者。此外,还可向用户显示文档层面的锁。另外,共同作者的在场信息可被存储在共同作者进行最后编辑的图的组件中。共同作者的在场信息可由客户端应用对所编辑的组件显示。在接收到指示文档中其它作者的在场的元数据之后,阻止当前用户进一步修改所锁定的组件。如果/当其它作者保存以提交其改变时,之前由它们持有的任何锁可被移除并被转为“需要刷新”锁。该锁具有不同的外观且不再与该其它作者相关联。相反,在当前用户执行编辑动作时,当前作者的在场可通过添加到描述文档内的锁的在场的元数据而被发送给其它作者(如果有的话)。在当前用户保存其改变时,可向服务器发送移除由当前用户持有的任何锁并改为将它们转为供其他人使用的“需要刷新”锁的请求。包括在过程700内的各操作是用于说明目的。根据各实施例的同步在线文档编辑可以使用此处所述的各原理通过具有更少或更多步骤的相似过程、以及不同的操作次序来实现。以上说明书、示例和数据提供了对各实施方式组成的制造和使用的全面描述。尽管用结构特征和/或方法动作专用的语言描述了本主题,但可以理解,所附权利要求书中定义的主题不必限于上述具体特征或动作。相反,上述具体特征和动作是作为实现权利要求和各实施例的示例形式而公开的。
权利要求
1.一种至少部分地由计算设备执行的用于同步在线文档编辑的方法,所述方法包括 接收与文档的第一部分相关联的第一共同创作元数据的指示,所述第一共同创作元数据是从基于浏览器的客户端应用接收的;接收与所述文档的第二部分相关联的第二共同创作元数据的指示,所述第二共同创作元数据是从第二客户端应用接收的,所述第二客户端应用不在浏览器中操作;基于向所述基于浏览器的客户端应用提供的经变换的表示来转换所述第一共同创作元数据;以及与所述文档相关联地存储所述第一共同创作元数据和第二共同创作元数据。
2.如权利要求1所述的方法,其特征在于,所述第一共同创作元数据包括以下一组中的至少一个用户名字、用户的在场信息以及文档内的锁。
3.如权利要求1所述的方法,还包括在接收到指示文档中另一作者的在场的所述第二共同创作元数据之后,阻止当前用户进一步修改锁定的组件。
4.如权利要求1所述的方法,其特征在于,所述文档的第一部分是段落,所述第一共同创作元数据包括与所述段落相关联的暂时锁。
5.如权利要求1所述的方法,还包括在组件层面识别经改变的文档中与其它编辑冲突的一个或多个编辑。
6.如权利要求5所述的方法,还包括如果同一组件内的冲突编辑是互补的,则尝试合并所述冲突的编辑而不进行通知。
7.如权利要求1所述的方法,其特征在于,所述客户端应用是基于浏览器的客户端应用,且对所述文档的请求是从在所述客户端应用上执行的脚本发送的。
8.如权利要求1所述的方法,还包括在从所述客户端应用接收到请求之后对所述文档的每一段落重新编号,以确保访问所述文档的客户端之间段落编号的同步。
9.如权利要求1所述的方法,还包括向执行与所述文档相关联的共同创作应用的服务器发送请求以确定所述用户是否是所述文档的唯一共同作者。
10.如权利要求1所述的方法,其特征在于,所述客户端应用是以下其中之一文字处理应用、电子表格应用、演示应用以及调度应用。
11.一种用于同步在线文档编辑的在线文档应用服务器,所述服务器包括 存储器;耦合至所述存储器的处理器,所述处理器结合所述存储器中存储的指令来执行一应用,其中所述应用被配置成 从用户接收对文档的请求; 向存储服务器请求对所述文档的文档锁; 从所述存储服务器检索所述文档;将所述文档变换成多个组件,这些组件包括所述文档的内容以及包括用户名字和用户在场信息的第一共同创作元数据;确定至少两个用户作出的编辑之间的冲突;通过评估冲突的编辑来确定所述多个组件的多个组件锁;通过释放所述文档锁、将所述多个组件锁应用于匹配组件,来将所述文档锁调整成所述多个组件锁;以及将所述图发送给基于浏览器的客户端应用以便显示。
12.如权利要求11所述的应用服务器,其特征在于,在确定所述冲突之后,所述应用还被配置成将至少一个冲突的用户编辑和至少一个对应的组件发送给所述基于浏览器的客户端应用以进行至少一项用户选择,其中所述至少一项用户选择被记录在所述至少一个对应的组件中以解决所述冲突。
13.如权利要求11所述的应用服务器,其特征在于,所述应用还被配置成 将所述多个组件锁作为第二共同创作元数据存储在文档图中。
14.如权利要求13所述的应用服务器,其特征在于,基于离线浏览器的客户端应用在重新在线之后传输所述至少一个用户编辑以便集成到所述文档图中。
15.如权利要求11所述的应用服务器,其特征在于,所述应用还被配置成向所述基于浏览器的客户端应用发送以下一组中的至少一个编辑时间、用户的认证信息以及用户的角色。
16.如权利要求11所述的应用服务器,其特征在于,所述文档包括以下一组中的至少一个文本、图像、绘图、音频数据和视频数据。
17.一种其上存储有用于同步在线文档编辑的指令的计算机可读存储介质,所述指令包括从用户接收对文档的请求;向存储服务器请求对所述文档的文档锁;从所述存储服务器检索所述文档;将所述文档变换成多个组件以及将所述多个组件存储在图中,这些组件包括含有用户名字和用户在场信息的第一共同创作元数据;通过评估至少一个用户编辑来为所述多个组件确定多个组件锁; 通过释放所述文档锁来将所述文档锁调整为所述多个组件锁,对图中匹配的组件应用所述多个组件锁,并作为所述图中的第二共同创作元数据存储所述多个组件锁;以及将所述图发送给基于浏览器的客户端应用以便显示。
18.如权利要求17所述的计算机可读存储介质,其特征在于,所述指令还包括 向当前用户通知所述多个组件锁。
19.如权利要求17所述的计算机可读存储介质,其特征在于,所述指令还包括 存储组件层面标识符;以及即使所述文档的其它部分已经改变,也使用所述组件层面标识符将用户的编辑移动至正确的组件区域。
20.如权利要求17所述的计算机可读存储介质,其特征在于,所述指令还包括 向用户通知编辑所述文档的当前作者的名字和在场信息。
全文摘要
本发明涉及同步在线文档编辑。应用服务器提供在线文档服务供用户编辑。文档被存储在应用服务器的本地存储器中的基于组件的结构中以在共同创作和冲突解决方案中提供粒度性。利用组件层面的锁定以最小化基于同时进行的用户编辑的冲突而且还显示了其它用户的在场。存储基于组件的结构修订以捕捉组件编辑并在文档保存动作后同步。当编辑被一个或多个客户端保存到服务器时,它们可被保存到服务器文档的当前版本,即使该文档已经从用于在客户端上创建当前表示的版本中改变了。
文档编号G06F17/30GK102436441SQ20111035502
公开日2012年5月2日 申请日期2011年10月26日 优先权日2010年10月26日
发明者A·塔莱加尼, T·戴维斯 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1