由多个用户对博客的实时同步文档编辑的制作方法

文档序号:11950193阅读:301来源:国知局
由多个用户对博客的实时同步文档编辑的制作方法与工艺

技术领域

本发明总体上涉及电子文档的协作编辑,包括但不限于用于各种类型电子文档的实时协作编辑的方法与系统。



背景技术:

电子文档在我们生活的许多领域中被广泛使用。这种电子文档既可以从台式计算机也可以从便携式计算设备(例如,膝上型计算机、个人数字助理(PDA)、移动电话和可戴式计算机)进行编辑。

有时候,多个编辑者需要同时编辑一个文档。但是,对于实时编辑来说,协调来自多个编辑者的输入不是个简单的问题。因此,需要为了电子文档的实时编辑而处理来自多个编辑者的输入的新方法与系统。



技术实现要素:

以下更具体地给出克服上述限制与缺点的多种实施例(例如,服务器系统、客户端端系统或设备,及操作这种系统或设备的方法)。这些实施例提供用于发送文档的拷贝进行实时编辑并且把与变更关联的信息分发到文档的方法、系统与图形用户界面(GUI)。

如以下更具体地描述的,本发明的有些实施例涉及一种向多个客户端提供文档进行实时编辑的方法,包括把该文档的拷贝发送到多个客户端进行实时编辑。获得用于所述多个客户端中两个或多个对应客户端的对应变更集。对应的变更集代表在对应的客户端对文档的对应拷贝的一个或多个变更。结果变更集是根据对应的变更集生成的。结果变更集发送到多个客户端,用于在多个客户端更新该文档的对应拷贝。

一种用于把一个文档提供给多个客户端进行实时编辑的服务器系统包括一个或多个处理器,及存储由所述一个或多个处理器执行的一个或多个程序的存储器。所述一个或多个程序包括用于把文档的拷贝发送到多个客户端进行实时编辑的指令;及获得用于所述多个客户端中两个或多个对应客户端的对应变更集的指令。对应的变更集代表在对应客户端对文档的对应拷贝的一个或多个变更。所述一个或多个程序还包括根据对应变更集生成结果变更集的指令;及把结果变更集发送到多个客户端用于在所述多个客户端更新文档的对应拷贝的指令。

一种计算机可读存储介质存储配置成由服务器的一个或多个处理器执行的一个或多个程序。所述一个或多个程序包括用于把文档的拷贝发送到多个客户端进行实时编辑的指令,及获得用于所述多个客户端中两个或多个对应客户端的对应变更集的指令。对应的变更集代表在对应客户端对文档的对应拷贝的一个或多个变更。对应的变更集代表在对应客户端对文档的对应拷贝的一个或多个变更。所述一个或多个程序包括根据对应变更集生成结果变更集的指令,及把结果变更集发送到多个客户端用于在所述多个客户端更新文档的对应拷贝的指令。

一种处理文档进行实时编辑的方法包括显示该文档的对应拷贝的至少一部分。从客户端的对应用户接收用于编辑该文档的输入。根据该输入,文档信息发送到连接到多个客户端的服务器。在客户端接收用于更新该文档的对应拷贝的结果变更集。结果变更集代表在多个客户端中两个或多个客户端对对应文档拷贝的变更而对文档的变更。文档的对应拷贝是根据结果变更集在客户端更新的。

一种用于处理文档进行实时编辑的客户端包括一个或多个处理器,及存储由所述一个或多个处理器执行的一个或多个程序的存储器。所述一个或多个程序包括显示文档的对应拷贝的至少一部分的指令,及从客户端的对应用户接收用于编辑文档的输入的指令。所述一个或多个程序还包括根据所述输入把文档信息发送到连接到多个客户端的服务器的指令,及在客户端接收结果变更集用于更新文档的对应拷贝的指令。结果变更集代表基于在多个客户端中两个或多个客户端对文档的对应拷贝的变更而对文档的变更。所述一个或多个程序还包括根据所述结果变更集在客户端更新文档的对应拷贝的指令。

一种计算机可读存储介质存储配置成用于由客户端的一个或多个处理器执行的一个或多个程序。所述一个或多个程序包括显示文档的对应拷贝的至少一部分的指令,及从客户端的对应用户接收用于编辑文档的输入的指令。所述一个或多个程序还包括根据所述输入把文档信息发送到连接到多个客户端的服务器的指令,及在客户端接收结果变更集用于更新文档的对应拷贝的指令,其中结果变更集代表基于在多个客户端中两个或多个客户端对文档的对应拷贝的变更而对文档的变更。所述一个或多个程序还包括根据所述结果变更集在客户端更新文档的对应拷贝的指令。

一种把文档提供给多个客户端进行实时编辑的方法包括向多个客户端中的第一客户端发送文档的第一拷贝。文档的第二拷贝发送到所述多个客户端中的第二客户端。从第一客户端获得第一变更集,并且从第二客户端获得第二变更集。第一变更集代表在第一客户端对文档的第一拷贝的一个或多个变更,而第二变更集代表在第二客户端对文档的第二拷贝的一个或多个变更。根据至少所述第一变更集和第二变更集生成结果变更集。结果变更集发送到第一客户端,用于更新文档的第一拷贝,并且发送到第二客户端,用于更新文档的第二拷贝。

附图说明

图1是说明根据一些实施例的示例性分布式计算机系统的框图。

图2是说明根据一些实施例的文档管理系统的框图。

图3是说明根据一些实施例的客户端的框图。

图4A是说明根据一些实施例的用户数据库中示例性条目的框图。

图4B是说明根据一些实施例的文档数据库中示例性条目的框图。

图5说明了根据一些实施例的示例性文本文档。

图6说明了根据一些实施例的、用于实时写博客的示例性用户接口。

图7是说明根据一些实施例的、由客户端和文档管理系统执行的处理的高级流程图。

图8A和8B是代表根据一些实施例的、向多个客户端提供文档进行实时编辑的方法的流程图。

图9是代表根据一些实施例的、在客户端执行的处理文档进行实时编辑的方法的流程图。

图10是代表根据一些实施例的、向多个客户端提供文档进行实时编辑的方法的流程图。

图11是根据本发明一种示例性实施例的、用于协作修订文本文档的示例性方法的流程图表示。

图12是根据本发明一种示例性实施例的、用于协作修订文本文档的示例性方法的流程图表示。

图13是说明根据一些实施例的、更新变更集的方法的流程图。

图14是说明根据本发明各种实施例的实时博客交付的流程图。

具体实施方式

描述了用于提供文档进行实时编辑的方法与系统。将参考本发明的某些实施例,这些实施例的例子在附图中说明。尽管本发明将联系实施例来描述,但是应当理解,不是要把本发明限定到仅仅这些特定的实施例。相反,本发明是要覆盖属于由所附权利要求定义的本发明主旨与范围的备选方案、修改与等价物。

而且,在以下描述当中,阐述各种具体细节是为了提供对本发明的透彻理解。但是,对本领域的普通技术人员来说很显然,本发明可以没有这些特定的细节来实践。在其它实例中,对本领域普通技术人员来说众所周知的方法、过程、部件和网络没有具体描述,以避免模糊本发明的各方面。

还应当理解,尽管术语第一、第二等可以在这里用于描述各种元件,但是这些元件不应当被这些术语限制。这些术语仅仅是用来区分一个元件与另一个元件。例如,在不背离本发明范围的情况下,第一触点可以说成是第二触点,而且,类似地,第二触点可以说成是第一触点。第一触点和第二触点都是触点,但它们不是同一个触点。

本文实施例描述中所使用的术语仅仅是为了描述特定的实施例而不是要成为本发明的限制。如在本发明描述和所附权利要求中所使用的,除非上下文清楚地另外指示,否则单数形式“一个”和“这个”也要包括复数形式。还应当理解,如在此所使用的术语“和/或”指并且包含一个或多个关联列出的项的任意和全部可能组合。还应当理解,当在本说明书中使用时,术语“包括”指定所述特征、整数、步骤、操作、元件和/或部件的存在,但是不排除一个或多个其它特征、整数、步骤、操作、元件、部件和/或其组的存在或添加。

如在此所使用的,依赖于上下文,术语“如果”可以被认为是指“当…时”或者“在…时”或者“响应确定”或者“响应检测到”或者“根据确定(所规定的先决条件为真,或者不为真)”。类似地,依赖于上下文,短语“如果确定”或者“如果检测到[所规定的条件或事件]”可以被认为是指“在确定…时”或者“响应确定”或者“在检测到(所规定的条件或事件)…时”或者“响应检测到(所规定的条件或事件)”。

如在此所使用的,术语“博客”指网络日志,包括允许用户输入评论、事件描述或者例如图像、照片和/或视频的其它素材的网站类型或者网站部分。输入评论、描述和其它素材的这种行为常常被称为“发布博客”或者“发帖到博客”。在有些实施例中,博客只允许具有编辑权限的用户发布博客。在有些实施例中,博客只允许具有访问权限的用户观看所发布的博客(例如,条目)。在有些实施例中,发布博客被称为“写博客”。在有些其它实施例中,“写博客”还指访问博客(例如,访问包括作为网站一部分的网络日志的网站)。在有些实施例中,博客指电子论坛,一个或多个用户在其中提供内容,让一个或多个其它用户观看。一般来说,博客包括可以随着时间推移提供的多于一个博客条目。

在各种实施例中,所公开的是允许文档,例如文本文档,的协作编辑的系统,及用于协作编辑文本文档的计算机实现方法。示例性系统包括经网络与多个客户端计算系统中的每一个通信的宿主计算系统,例如服务器。在有些实施例中,宿主和客户端计算系统运行基于web的协作文本编辑应用,有时候称为web应用,包括由宿主计算系统执行的宿主代码和与每个客户端计算系统上运行的对应浏览器应用关联执行的客户端代码。协作文本编辑web应用可以用于编辑除文本文档之外的其它文档,例如,图形文档、电子数据表等,而且文本文档在这里仅仅是作为例子来讨论的。类似地,尽管所说明的方法涉及文本文档,但相同的方法可以应用到其它类型文档的协作编辑。

在有些实施例中,客户端代码和宿主代码中的每一个都并行地维护其对应计算系统上的文本文档。第一客户端计算系统的客户端代码接收由用户指定的对文本文档的编辑,例如字符的插入或删除,相应地修改其本地维护的文本文档,并且把所述编辑发送到宿主计算系统的宿主代码。宿主代码根据接收到的编辑创建文本文档的新版本、确定用于在其它客户端计算系统上运行的几个客户端代码的合适更新并且随后把所述更新提供给其它客户端代码。其它客户端代码使用所述更新把来自第一客户端计算系统的编辑结合到它们本地维护的所述文本文档的拷贝当中。以足够的频率把编辑发送到宿主计算系统并且快速地把更新发送到其它客户端计算系统允许每个用户都实时地看到其他用户的编辑。

在有些实施例中,由多个用户共享的文档的实时编辑用于提供实时博客。实时博客一般是其中主编辑者提供文档内容(例如词、字符、图像或其它对象)的博客,而且这个内容实时地显示给博客的观看者。经浏览器和互联网观看实时博客的用户可以在对象由主编辑者提供时看到实时出现的对象。依赖于应用到用户输入的粒度水平,用户可以看到博客被一个字符一个字符或者一个词一个词地修改。实时博客可选地用于在事件发生时对其进行报导。实时文档编辑的使用意味着当博客被修改时写该博客的人(例如,主编辑者)持续地更新被其他人看到的博客的视图。实时博客可选地包括一些静态的内容(例如,博客条目)和一些实时的内容(例如,实时更新的内容)。

在有些实施例中,实时博客内容可以被多于一个编辑者(例如,一般被主编辑者授予编辑特权的初级编辑者)编辑。初级编辑者和主编辑者所进行的修改可选地都在进行修改时在客户端上实时地显示。主编辑者和初级编辑者可以同时对同一个博客进行修改,而不锁定博客内容。在有些实施例中,对之前博客内容的变更作标记,显示内容被修改过,同时新的素材以不加标记的形式添加。当编辑者在进行修改时,修改被自动更新到博客并且更新到观看该博客的客户端,而没有编辑者的进一步动作,例如,没有来自编辑者的明确更新命令。

如在此所使用的,静态博客条目或文档是当编辑者输入修改时不自动实时更新的对象。当被编辑者明确地启动时,例如,在编辑者完成一个博客条目或者其主要部分之后,更新可以出现。在静态博客中,每次更新一般必须由编辑者单独地启动。

主编辑者还可以控制对实时博客的评论的添加。例如,主编辑者可以指定任何人都可以从任何客户端添加评论,或者选定的用户和/或客户端组可以对博客添加评论。来自其他用户的评论可选地是实时添加的。例如,在主编辑者向一个博客条目添加素材的同时,第二个用户可以同时对这个博客条目进行评论。评论可选地实时地向用户显示。具体而言,评论可以在其由第二用户提供时一个字符一个字符地(逐字符地)或者一个词一个词地(逐词地)显示给其他用户(和主用户)。如在图6中可以看到的,评论可选地与一个博客条目的具体部分或者与该博客条目的全部关联。

如在此所使用的,术语实时用于指示在时间上紧邻其起因出现的事件,例如,没有不必要的延迟。例如,实时文档是一种文档,其中对文档的修改可以在它们一被接收到就可以获得而且一旦可以获得所述修改就更新该文档。如在此所使用的,实时编辑指根据用户输入实时地修订文档(例如,在预定义的时限内,例如0.1秒或者0.5秒)。在有些实施例中,实时编辑包括从用户接收输入、根据该用户输入修订文档并且把修订后的文档(或者该文档修订后的部分)发送到与该文档关联的多个用户,这些动作都是实时的。实时编辑环境包括根据来自编辑者(或用户)的输入实时地修订至少一个文档的系统与方法。这种输入可以具有一个字符一个字符的粒度或者一个词一个词的粒度(例如,每个输入可以包括单个字符或者单个词)。

图1是说明根据某些实施例的示例性分布式计算机系统100的框图。在图1中,系统100包括一个或多个客户端计算机120(也称为客户端计算系统)、通信网络130和宿主服务器系统110(也称为文档管理系统或宿主计算系统)。系统100一般包括两个或多个客户端计算机120。宿主服务器系统110的各种实施例实现本文档中所述的文档管理系统。

客户端计算机120可以是用于启动下述行为的多种计算设备中的任意一种(例如,互联网信息站、个人数字助理、手机、游戏设备、台式计算机、膝上型计算机、手持式计算机或者其组合)。客户端计算机120在这里也被称为客户端。客户端120包括图形用户界面(GUI)111。客户端120以下参考图3更具体地描述。客户端120经通信网络130连接到宿主服务器系统110。如以下更具体描述的,GUI111用于显示文档或者文档的一部分。宿主服务器系统110向从客户端120访问文档的用户群体(例如,一个公司的员工、一个组织或组的成员、网络日志(也称为博客)的访问者,等等)提供文档管理服务。

宿主服务器系统110包括连接到通信网络130的一个或多个服务器,例如服务器112。可选地,所述一个或多个服务器经前端服务器122(例如,向系统110的适当服务器传送(并可选地解析)入站请求并且格式化响应该请求而发送到客户端的响应和/或其它信息的服务器)连接到通信网络130。如果存在的话,前端服务器122可以是向宿主服务器系统110提供基于web的访问的web服务器。如果存在的话,前端服务器122还可以把通信路由到其它目的地,例如授权系统(未示出),或者从其它目的地路由通信。

宿主服务器系统110包括用户信息数据库114、文档数据库116及可选地修订数据库118。在有些实施例中,宿主服务器系统110还包括或者可以访问一个或多个其它数据库,例如广告数据库(未示出)。实时写博客应用140包括接收模块142、变更集模块144和/或编辑权限控制模块146。服务器112利用局域网、通过内部通信总线或者通过任何其它适当的机制或机制组合与宿主服务器系统110内部的数据库,例如用户信息数据库114、文档数据库116和可选的修订数据库118,通信。

服务器112经前端服务器122(如果存在的话)和通信网络130与客户端120通信。在有些实施例中,通信网络130是互联网。在其它实施例中,通信网络130可以是任何局域网(LAN)、广域网(WAN)、城域网或者此类网络的组合。在有些实施例中,服务器112是利用适当的通信协议管理文档的web服务器。可选地,如果服务器112是在内联网中使用,那么它还可以是内联网服务器。

应用138包括运行在服务器112上的应用程序,包括实时写博客应用140,该应用用于管理在线文档管理系统。在有些实施例中,应用138还包括用户信息处理模块(未示出),其中用户信息处理模块帮助访问和更新用户信息数据库114。用户信息数据库114存储与宿主服务器系统110的用户关联的各种信息,包括用户偏好、编辑权限、认证信息等。用户信息数据库114以下参考图4A更具体地描述。

接收模块142从客户端120接收变更集和/或输入。变更集模块144根据所接收到的变更集或输入维护并更新变更集和/或文档。在有些实施例中,文档存储在文档数据库116中。在有些实施例中,变更集存储在文档数据库116中或者,如果存在的话,修订数据库118中。

文档数据库116存储与宿主服务器系统110中所存储的文档关联的各种信息(例如,文档ID、内容、编辑权限、修订历史,等等)。在有些实施例中,文档数据库116还存储从客户端120接收到的变更集和/或输入。文档数据库116以下参考图4B更具体地描述。

可选地,宿主服务器系统110还包括修订数据库118。修订数据库118可以包括从客户端120接收到的变更集和/或输入。在有些实施例中,修订数据库118包括对应文档的多个版本(例如,根据用户输入编辑之前和之后的版本)。在有些实施例中,修订数据库118包括用于一个或多个文档的修订历史。在有些实施例中,修订数据库118包括在文档数据库116中。

本质上,服务器112配置成管理宿主服务器系统110(文档管理系统)的某些方面,包括从客户端120接收修订信息(例如,变更集和/或输入)并且把修订信息(经过或者没有经过进一步的处理)发送到其它客户端120。

可选地,宿主服务器系统110是作为提供通用文档管理服务的通用文档管理系统的一部分来实现的。可选地,宿主服务器系统110可以实现为只为写博客而提供文档管理服务的写博客系统。

在有些实施例中,更少的和/或附加的模块、功能或数据库包括在宿主服务器系统110和服务器112中。宿主服务器系统110和服务器112中所示的模块代表在某些实施例中执行的功能。

图2是说明根据一些实施例的宿主服务器系统110(也称为文档管理系统)的框图。宿主服务器系统110一般包括一个或多个处理单元(CPU)202、一个或多个网络或者其它通信接口204、存储器206及用于互连这些部件的一根或多根通信总线208。在有些实施例中,通信总线208包括互连并控制系统部件之间的通信的电路系统(有时候被称为芯片集)。在有些其它实施例中,宿主服务器系统110包括用户接口(未示出)(例如,具有显示设备、键盘和鼠标或其它定点设备的用户接口),但是更一般地说,宿主服务器系统110是从各种客户端系统(例如,120)控制并由其访问的。

宿主服务器系统110的存储器206包括高速随机存取存储器,例如DRAM、SRAM、DDR RAM或其它随机存取固态存储器设备;而且可以包括非易失性存储器,例如一个或多个磁盘存储设备、光盘存储设备、闪存存储器设备,或者其它非易失性固态存储设备。存储器206可以可选地包括远离CPU 202定位的一个或多个存储设备。存储器206,或者可选地是存储器206中的非易失性存储器设备,包括非临时性的计算机可读存储介质。在有些实施例中,存储器206或者存储器206的非临时性计算机可读存储介质存储以下程序、模块和数据结构或者其子集:

·操作系统210,包括用于处理各种基本系统服务和用于执行依赖硬件的任务的过程;

·网络通信模块(或指令)212,用于经一个或多个网络接口204和一个或多个通信网络130(图1),例如互联网、其它广域网、局域网、城域网等,把宿主服务器系统110连接到其它计算机(例如,客户端120);

·服务器112,用于管理宿主服务器系统110的某些方面,包括文档管理服务;及

·呈现模块220,用于格式化来自服务器112(例如,实时写博客应用140)的结果,在对应的客户端显示;例如,呈现模块220可以生成包括对应文档的内容的网页或XML文档;在有些实施例中,呈现模块220是由前端服务器122执行的,其中前端服务器122包括实现文档管理系统的服务器中的一个;可选地,呈现模块220是实时写博客应用140的一个模块。

在有些实施例中,服务器112包括以下程序、模块和数据结构或者其子集或超集:

·应用138,包括用于执行文档管理系统的主要功能的实时写博客应用140;应用138可以可选地包括其它应用218;

·用户信息数据库114,存储用户信息(见图4A);

·文档数据库116,存储文档及关于所存储的文档的信息(例如,元数据)(例如,文档标题、文档类型、创建日期、第一作者、最后更新时间戳、位置,等等);及

·可选的修订数据库118,存储关于文档数据库116中所存储的文档的修订信息(例如,变更集、时间戳、编辑者、编辑权限、编辑权限控制,等等);否则,关于编辑权限和编辑权限控制的信息可以存储在用户数据库114和/或文档数据库116中。

实时写博客应用140一般处理来自客户端120的与文档相关的请求和输入并且向其提供响应。在有些实施例中,实时写博客应用140包括实时写博客-客户端接口程序216,和/或应用分发模块222。

实时写博客-客户端接口程序216处理成客户端120接收请求和输入并且向客户端120发送信息。在有些实施例中,实时写博客-客户端接口程序216包括:

·接收模块142,经通信接口204和/或网络通信模块212从客户端120接收变更集和/或输入;

·变更集模块144,根据所接收到的变更集或输入维护并更新变更集和/或文档;及

·编辑权限控制模块146,基于存储在用户信息数据库114和/或文档数据库116中的信息访问、验证并更新对应用户的编辑权限。

如果存在的话,应用分发模块222把用于显示文档、从用户接收输入和/或更新文档等的一组指令分发到客户端120。在有些实施例中,该组指令是作为web应用分发的。在有些实施例中,该组指令是作为web页面中的嵌入式应用(这种嵌入式应用可以基于Java script、Java applet、Ajax、Comet、Active X或者任何其它编程语言和工具)分发的。在有些实施例中,该组指令是作为用于客户端120中对应浏览器应用(例如,图3中的314)的附件、插件和/或工具栏分发的。

以上识别出的每个模块和应用都对应于用于执行上述一个或多个功能的一组指令。这些模块(即,指令集)不需要实现为单独的软件程序、过程或模块,而且因此这些模块的各个子集在各种实施例中可以组合或者以别的方式重新布置。在有些实施例中,存储器206可以存储以上识别出的模块和数据结构的子集。此外,存储器206还可以存储以上未描述的附加模块与数据结构。

尽管在图1和2中示为离散的方框,但是这些图是要作为一些实施例的功能性描述,而不是这些实施例中功能性元件的结构性描述。本领域普通技术人员将认识到,实际的实现可能让功能性元件在各种部件之间分组或分离。在实践当中,而且就像本领域普通技术人员将认识到的,单独示出的项可以组合而且有些项可以分离。例如,在有些实施例中,文档数据库116是服务器112的一部分或者存储在其中。在其它实施例中,文档数据库116是利用其主要功能为存储并处理文档信息的一个或多个服务器实现的。在有些实施例中,文档数据库116包括修订数据库118,或者反之亦然。在有些实施例中,文档数据库116还包括用户数据库114,或者反之亦然。在有些实施例中,在与服务器112不同的物理位置,远端数据库服务器包括用户数据库114、文档数据库116和/或修订数据库118。用户数据库114、文档数据库116和/或修订数据库118可以在一个或多个服务器上实现。

用于实现宿主服务器系统110的服务器的实际数量及特征如何在它们之间分配将每种实现都有变化而且可以部分地依赖于在峰值使用周期中及平均使用周期中系统必须处理的数据流量的量,而且还可以依赖于文档管理系统所存储的数据的量。而且,图1中的一个或多个方框可以在设计成提供所述功能性的一个或多个服务器上实现。尽管这里的描述参考在客户端120中实现的某些特征和在服务器112中实现的某些特征,但是实施例不限于这种区分。例如,在此描述成作为服务器112一部分的特征中的至少一些可以全部或部分地在客户端120中实现,而且反之亦然。

图3是说明根据一些实施例的客户端(也称为客户端系统或客户端设备)的框图。客户端120包括一般包括显示设备301的用户接口300及一个或多个输入设备303,例如键盘和鼠标或其它定点设备。如以上所指出的,客户端120包括图形用户界面(GUI)111,该GUI在显示设备301上显示。客户端120一般包括一个或多个处理单元(CPU)302、一个或多个网络或其它网络通信接口304、存储器306及用于互连这些部件的一根或多根通信总线308。通信总线308可以包括互连并控制系统部件之间通信的电路系统(有时候称为芯片集)。

存储器306包括高速随机存取存储器,例如DRAM、SRAM、DDR RAM或其它随机存取固态存储器设备;而且可以包括非易失性存储器,例如一个或多个磁盘存储设备、光盘存储设备、闪存存储器设备,或者其它非易失性固态存储设备。存储器306可以可选地包括远离CPU 302定位的一个或多个存储设备。存储器306,或者可选地是存储器306中的非易失性存储器设备,包括非临时性的计算机可读存储介质。在有些实施例中,存储器306或者存储器306的非临时性计算机可读存储介质存储以下程序、模块和数据结构或者其子集:

·操作系统310,包括用于处理各种基本系统服务和用于执行依赖硬件的任务的过程;

·网络通信模块(或指令)312,用于经一个或多个通信网络接口304和一个或多个通信网络130(图1),例如互联网、其它广域网、局域网、城域网等,把客户端120连接到其它计算机(例如,宿主服务器系统110和其它客户端120);

·浏览器应用314;可选地,浏览器应用314或者浏览器应用的扩展、插件或工具栏包括在提供文档编辑环境中处理数据格式化和/或管理任务的客户端助手316,其至少一些将以别的方式由呈现模块220(图2)来处理;

·实时写博客网页318,这是从宿主服务器系统110接收到的网页,用于在GUI 111中显示文档的至少一部分;实时写博客网页318可以可选地包括实时写博客模块320,该模块是嵌入到网页318中的可执行代码;

·(可选的)文档数据322,这是用于编辑和/或显示的对应文档的本地存储拷贝;如果存储在客户端120的话,文档数据322可选地包括关于文档的元数据(例如,文档标题、文档类型、创建日期、第一作者、最后更新时间戳、位置、编辑权限、编辑权限控制,等等);在有些实施例中,文档数据322包括在网页318中;及

·(可选的)变更集数据324,这代表对文档的修订/修改(例如,存储在文档数据322中和/或包括在实时写博客网页318中);如果包括在客户端120中的话,变更集数据324一般包括第一变更集326-1和第二变更集326-2;变更集数据324可选地包括第三变更集326-3和/或结果变更集328。

在有些实施例中,客户端120包括多个实时写博客网页。在有些实施例中,客户端120包括多个实时编辑环境。例如,客户端120可以包括用于博客的主要文本的一个实时编辑环境及用于与该博客的全部或部分关联的评论的一个或多个实时编辑环境。可选地,这些实时编辑环境是一起(即,同时)显示的。

在有些实施例中,除浏览器应用314和实时写博客网页318之外或者代替其,客户端120包括文档编辑应用(未示出)。在这种实施例中,文档编辑应用包括客户端助手316和/或实时写博客模块320及处理(例如,来自输入设备303的)输入、维护变更集(例如,324)和更新文档数据322所需的附加模块的功能性。

在有些实施例中,客户端120可以是“瘦客户端”,它包括显示从宿主服务器系统110接收到的实时写博客网页318的浏览器应用314。在这种实施例中,客户端120只显示实时写博客网页,并且,如果有的话,就执行嵌入在实时写博客网页318中的程序,但是不包括附加的软件。在有些实施例中,嵌入在实时写博客网页318中的程序格式化文档,用于显示。在瘦客户端实施例中,除用户数据输入与文档显示之外的文档相关处理都是由宿主服务器系统110处理的(例如,确定变更集,例如第一变更集和/或结果变更集)。

图4A是说明根据一些实施例的示例性用户信息数据库114和示例性用户记录402-2的框图。用户信息数据库114存储用户记录402(例如,402-1至402-N,其中N代表记录的个数)。

用户记录402包括以下用于用户的数据或者其子集或超集:

·用户ID 410,唯一识别宿主服务器系统110的用户;

·用户元数据412(例如,账号创建日期、最后登录日期、最近的行为、指向最近访问过的文档的指针(或者其文档ID);

·编辑权限414,指示用户的编辑权限(例如,只能读;读和编辑;读、创建和编辑文档);在有些实施例中,编辑权限414是特定于文档的(例如,用户可以读取并编辑文档A,但是只能读文档B)或者特定于类的(例如,用户可以读取并编辑类A中的文档,但只能读类B中的文档);

·编辑权限控制416,指示用户控制其他用户编辑权限的权限;

·用户定义的标签418,用于指示由对应用户对文档所进行的变更(例如,用户名、昵称、用户名的缩写、其它唯一文本,等等);

·客户端设备ID/类型420,代表客户端设备(例如,120)的类型与标识符;在有些实施例中,客户端设备ID/类型420可以用于格式化网页;

·用户偏好422(例如,显示风格、文档编辑偏好(例如,在编辑文档时排斥其他的编辑者)等);

·用户认证信息428,包括认证用户所需的信息(例如,口令等)和/或包括认证的状态/结果(例如,通过认证、认证失败、认证过期等);

·(可选的)用户在线状态426,指示用户的在线状态(例如,登入、登出、输入、读取、离开,等等);

·(可选的)与用户关联的ID地址430;及

·(可选的)用户的电子邮件地址430。

在有些实施例中,一个对应的用户可以与多个客户端设备(例如,手机、家用计算机和工作计算机)关联,而且用户信息数据库114可以包括用于与该对应用户关联的对应客户端设备的对应用户记录402。可选地,用户信息数据库114可以包括对应的用户记录402,该用户记录402包括用于与该对应用户关联的对应客户端设备的对应客户端设备ID/类型。

图4B是说明根据一些实施例的示例性文档数据库116和示例性文档记录440-2的框图。文档数据库116存储文档记录440(例如,440-1至440-X,其中X代表记录的个数)。

文档记录440包括以下用于用户的数据或者其子集或超集:

·文档ID 442,唯一识别存储在宿主服务器系统110中的文档;

·文档元数据444(例如,文档标题、文档类型、创建日期、第一作者、最后更新时间戳、位置,等等);

·编辑权限446,为对应的用户指示编辑权限(例如,456)和控制其它用户的编辑权限的权限(例如,编辑权限控制458);

·时间戳448(例如,创建的时间/日期、最后访问的时间/日期、最后修订的时间/日期,等等);

·内容450(例如,文档的主要文本);及

·修订历史452。

编辑权限446指示相应的用户是否具有编辑权限(例如,编辑对应文档的权限)。在有些实施例中,编辑权限是二进制的(是/否或者真/假),以便指示相应的用户是否可以编辑相应的文档。在有些实施例中,编辑权限具有多级权限或者权限的组合,指示相应的用户是否可以编辑文档的某些部分(例如,用户可以发布评论但不可以编辑主要文本)或者执行某些类型的编辑(例如,用户可以向文档添加文本但不可以删除或修订文本)。在有些实施例中,编辑权限446包括访问权限(例如,相应的用户是否可以访问/观看相应的文档)。

在有些实施例中,修订历史452包括一个或多个修订记录460。如所说明的,对应的修订记录460是为对应的结果变更集创建的(例如,当创建结果变更集时,生成修订记录)。可选地,对应的修订记录460可以包括由对应用户所作的修订/编辑和/或给定时间间隔内所作的修订/编辑。

在有些实施例中,修订记录460(例如,460-2)包括:

·修订号462,唯一识别对应的修订记录460;

·修订元数据464(例如,指向文档的指针、从客户端接收到的输入/变更集序列,等等);

·时间戳466,指示对应修订记录460被创建或更新的时间;

·变更集474,包括从客户端接收到的一个或多个变更集(例如,变更集468-1至468-R);

·作者关系476,指示编辑了文档的一个或多个用户(或作者);每个作者470-1可以包括作者的用户ID(例如,410)或者指向用户ID的指针;及

·结果变更集472,根据来自多个客户端的变更集或输入生成。

作者身份470中作者的个数常常与变更集468中变更集的个数匹配(例如,每个作者发送一个变更集)。但是,作者的个数不需要与变更集的个数匹配。例如,某些变更集可能由于各种原因(例如,作者不具有编辑权限、变更集是冗余的,等等)而不予处理。此外,有些作者可以发送在单个修订记录中被捕捉到的多个变更集。

图5图示说明了根据一些实施例、在显示器(例如,图3中的301)的窗口510中显示的文本文档500。例如,文本文档中的字符可以包括字母、数字、符号、空格和标点符号。文本文档500的每个字符都具有一个索引,以例如第一个字符为零(0)索引开始。可选地,文本文档500还可以由定义为字符总数的长度来特征化。如所说明的,文本文档500具有长度24。在有些实施例中,索引在变更集中用于代表对文本串和/或文本文档的变更,如以下所描述的。

变更集代表对文本文档一个版本的一组变更。这些变更可以包括一个或多个字符对该版本的文本文档的添加和/或删除。当变更集应用到文本文档的特定版本时,可以生成该文本文档的新版本。因此,将认识到,文本文档的任何版本也都可以由变更集的有序序列表示,其中第一个变更集应用到文本文档的初始版本。在各种实例中,文本文档的初始版本可以是空文本文档或者预先存在的文本文档。

在有些实施例中,变更集是规范的,在这里定义成指存储器中文档的给定表示只对应于一个变更集。因而,存储器中文档的不同表示有必要对应于不同的变更集。由于是规范的,因此变更集是可比较的。在有些实施例中,变更集还可以是紧凑的,这意味着,如果存在多于一种方式在存储器中表示变更集,那么将使用占用最少字节数的那种方式。

存在表示变更集的许多方式。在有些实施例中,变更集是由以下格式表示的:

(l→l’)[c1;c2;c3;…]

其中l是应用变更之前文本文档500的一个版本的长度,而l’是变更之后文本文档500的下一个版本的长度。数组[c1;c2;c3;…]指示保留了来自前一版本的哪些字符及哪些字符添加到了新的版本。保留的字符用它们在文本文档500前一版本中的索引表示并且忽略被删除的字符。新字符由它们本身来表示。例如,如果文本文档500的第一个版本是“charge”而且下一个版本是“changes”,则变更集将是

(6→7)[0,1,2,n,4,5,s]

这还可以更紧凑地表示为

(6→7)[0-2,n,4,5,s]

作为另一个例子,表示从“changes”到“hangs”的进一步修改的变更集将是

(7→5)[1-4,6]

将认识到,每个变更集都具有其自己的索引集合,从0开始,使得,在以上例子中,文本文档前一版本中的索引1-4映射到当前变更集中的索引0-3,而且之前索引6的字符映射到新索引4。

以下例子说明文本文档如何可以表示为变更集的有序序列。在这个例子中,A代表应用到文本文档的初始(第一个)空版本的第一变更集,而B代表应用到文本文档的第二个版本的第二变更集。

A=(0→5)[H,e,l,l,o]

B=(5→11)[0-4,,w,o,r,l,d]

这个文本文档的第三个版本是“Hello world”而且可以表示为AB。在这里,这被称为A和B的合成,而且在合成的情况下变更集是闭合的,意味着执行两个变更集的合成的结果总是产生另一个变更集。很显然,合成AB可以精简成单个变更集C,其中C=(0→11)[H,e,l,l,o,,w,o,r,l,d]。用速记法写就是AB=C。以下,Q将用于表示文本文档的版本,使得QA、QB等代表通过对应变更集A和B修改的文本文档的版本。

对于实时文档编辑,多于一个变更集可以应用到文本文档的同一版本。例如,采用两个不同客户端计算系统120的两个用户每个都对文本文档的同一版本Q进行变更。但是,变更集可能不是可以合成的,而且,即使变更集可以合成,这种合成也可能没意义。作为例子,每个用户设法修改的文本文档具有长度n而且两个接收到的变更集是

A=(n→na)[…na characters],及

B=(n→nb)[…nb characters]

其中n≠na≠nb。如果A应用到文本文档,QA,则结果具有长度na,而且因此B不能进一步应用到合并,因为B需要初始长度n。同样,A不能应用到将具有长度nb的B与该文本文档的合成,QB,因为A也需要初始长度n。

合并是从两个变更集计算单个变更集的过程,所述两个变更集都要应用到一个文本文档的同一版本。合并设法保留两个变更集的意图。在有些实施例中,结果变更集被称为A和B的合并而且表示为m(A,B)。

用于合并变更集的示例性实现具有设计成保留对应用户意图的以下规则。首先,m(A,B)=m(B,A)。如果而且只有如果一个字符在A和B中都保留,那么这个字符才在m(A,B)中保留。因而,如果其中任何一个变更集删除了一个字符,就保留该用户删除这个字符的意图。合并m(A,B)包括在任何一个变更集中被插入字符的全部字符。在这里,保留每个用户插入字符的意图。其结果是,如果两个变更集都在文本文档的同一位置插入相同的字符,那么该字符将在文本文档的后续版本中出现两次。

此外,合并m(A,B)保留来自两个变更集的连续字符。一个变更集中连续插入的字符在这里被称为顺串(run)。一般来说,来自不同变更集的顺串不混合,同样,这保留了用户把顺串保持在一起的意图。在后续变更集的例子中,顺串被放在引号当中,指示这些字符是作为一个顺串来维护的。合并m(A,B)还保留来自任一变更集的插入与所保留的字符之间的关系。相应地,任何一个变更集中两个被保留字符之间一个或多个字符的插入将在m(A,B)中相同的两个被保留字符之间保持,从而保留每个用户在文本文档中特定位置插入字符的意图。

在不同字符或顺串插入到相同的两个被保留字符之间时,来自一个变更集的插入将不可避免地在来自另一个变更集的插入之前进行。在这里,需要有一个规则来确定哪个字符或顺串将在另一个之前进行,而且,尽管规则可以是任意的,但规则应当始终如一地应用。例如,规则可以指定次序按用户的字母表次序前进。因而,如果一个变更集来自识别为“bob25”的用户而另一个来自识别为“tinman”的用户,则来自bob25的插入将首先出现。

在多个用户编辑同一文本文档的实例中,要计算的另一个有用变更集是将更新由客户端计算系统120保留的文本文档的修改版本的变更集。例如,第一用户修改了文本文档的一个版本Q而且代表变更的变更集是A。在客户端计算系统120的显示器上第一用户看到QA。类似地,第二用户修改文本文档的同一版本Q,代表变更的变更集是B,而且在客户端计算系统120的显示器上第二用户看到QB。尽管运行在宿主服务器系统110上的主机代码可以计算到达Q的下一个版本的m(A,B),但是客户端计算系统120不需要m(A,B),但是需要知道为了到达Q的下一个版本如何修改QA或QB。相应地,指定为“跟随”的变更集是如以下所说明那样计算的。

如以下更具体地描述的,一个客户端计算系统120发送变更集A并接收变更集B,而第二客户端计算系统120发送B并接收A。为了让两个客户端计算系统120同步,使得两个系统都继续显示相同的文本文档,Q与m(A,B)合成,于是

QAB’=QBA’=Qm(A,B)

其中A’和B’是跟随变更集。在以下讨论中,A’还可以表示为f(B,A),而B’可以表示为f(A,B),而且因此

Af(A,B)=Bf(B,A)=m(A,B)=m(B,A).

就像对于合并的情况一样,跟随是通过规则的应用来计算的,而且存在可以采用的许多可能的规则集。用于计算跟随变更集的示例性规则集包括三个规则。对于跟随f(A,B),第一个规则是A中的插入变成f(A,B)中的保留字符。作为第二个规则,B中的插入被认为是f(A,B)中的插入字符。最后,A和B中都保留的字符被保留在f(A,B)中。

作为例子,文本文档的一个版本Q是“baseball”。第一个用户通过用“si”替换“sebal”把“baseball”变成了“basil”,而第二个用户通过删除“as”、“ba”并且用“ow”代替最后的“l”把“baseball”变成“below”。相应地,

Q=(0→8)[b,a,s,e,b,a,l,l];

A=(8→5)[0,1,“si”,7];

B=(8→5)[0,e,6,“ow”];

m(A,B)=(8→6)[0,e,“si”,“ow”]=(8→6)[0,“esiow”];

B’=f(A,B)=(5→6)[0,e,2,3,“ow”];and

A’=f(B,A)=(5→6)[0,1,“si”,3,4]。

可以看到,AB’=BA’=m(A,B)=(8→6)[0,“esiow”]。

返回到在执行客户端代码的同时客户端计算系统120的操作,在有些实施例中,客户端计算系统120维护三个变更集A、X和Y作为存储器中的变量,其中A代表文本文档的当前版本,包括发送到宿主服务器系统110(在执行宿主代码的同时)并且被宿主服务器系统110确认的那些变更集;X代表提交给宿主服务器系统110但还没有被宿主服务器系统110确认的任何变更(例如,图3中的326-1);而Y代表还没有提交给宿主服务器系统110的变更(例如,图3中的326-2)。A、X和Y的合成产生本地文本文档,

本地文本文档=AXY。

在有些实施例中,客户端计算系统120还维护窗口W,窗口W代表真正提供给客户端计算系统120的显示器要由用户观看的本地文本文档的部分。维护窗口不是必需的,因为本地文本文档总是可以从A、X和Y确定而且因此本地文本文档的一部分可以被选择并显示,但是在对较大的文本文档工作时维护窗口提供了更高的效率。

在有些实施例中,运行在客户端计算系统120上的客户端代码配置成执行五个操作,鉴于由客户端计算系统120的用户所作的变更并鉴于在其它客户端计算系统120所作的变更来保持本地文本文档是最新的。第一个操作是连接到宿主服务器系统110并且建立本地文本文档。第二个操作是允许对该本地文本文档本地进行变更。第三个操作是把本地所作的变更发送到宿主服务器系统。第四个操作是从宿主服务器系统接收对变更的确认并且更新A和X。第五个操作是从宿主服务器系统110接收来自另一客户端计算系统120的变更集并且相应地修改A、X和Y。

在第一个操作中,(在客户端代码的控制下运行的)客户端连接到宿主服务器系统110并且建立本地文本文档。例如,客户端可以通过指定用于宿主服务器系统110的适当URL连接到宿主服务器系统110。连接到宿主服务器系统110可以进一步包括向宿主服务器系统110提供浏览器cookie,其中该浏览器cookie指定用于客户端计算系统120的唯一ID。如果不存在这种cookie,则连接到宿主服务器系统110可选地进一步包括向客户端计算系统120分配唯一的ID并且把该唯一的ID存储在浏览器cookie中。

分配唯一ID可以多种方式执行。例如,在不同的实施例中,(在客户端代码的控制下运行的)客户端计算系统120或者(在宿主代码的控制下运行的)宿主服务器系统110生成唯一ID。示例性唯一ID是从客户端计算系统120的IP地址、当前的时间戳数字和随机数生成的串,例如“18.4.234.1.9837459873.2345878927349”。在其它实施例中,客户端计算系统120或宿主从大量预定义的唯一ID选择唯一ID。

如所指出的,第一个操作还包括建立本地文本文档。建立本地文本文档可以包括设置用于A、X和Y的初始值。对于A,客户端计算系统120从宿主服务器系统110接收文本文档的当前版本,在这里被称为HEADTEXT,而X和Y设置成身份(identity),使得

A=(0→N)[<原始文本>];

X=(N→N)[0,1,2,…N-1];及

Y=(N→N)[0,1,2,…N-1]。

可以看到,当与其它变更集合成时,(下文中表示为IN的)身份不修改其它变更集。

在有些实施例中,第一个操作还包括建立并显示窗口W。当A的长度超过W的最大长度时,建立W可以包括把A的索引分配给W,从零开始,直到到达其最大长度。

第二个操作允许对本地文本文档进行本地变更。在这里,用户通过客户端计算设备120的输入设备进行编辑,E,而且客户端计算设备120通过计算YE的合成来更新Y。更新Y也可以表示为

Y←YE

其中“←”意味着分配,就像是(as in)Y是存储器中保持本地未提交变更的一个变量而且被分配了新值YE。在那些采用W的实施例中,第二个操作还包括更新W:

W←WE。

在其它实施例中,客户端计算系统120计算AXY与更新后的Y的合成并且重新显示结果。

第三个操作包括把本地进行的变更Y发送到宿主服务器系统110。第三个操作包括三个任务。这个操作的第一个任务是把Y传送给宿主服务器系统110。在这里,Y与唯一ID一起发送到宿主服务器系统110。第二个任务是把Y分配给X,

X←Y

而且第三个任务是重新把身份分配给Y

Y←IN

在一种示例性实施例中,客户端计算系统120每500ms执行一次第三个操作。如在此所使用的,500ms是实时编辑的示例性阈值。在有些实施例中,客户端计算系统120比500ms更频繁地把Y传送给宿主服务器系统110,例如每450ms、每400ms、每350ms、每300ms、每250ms、每200ms、每150ms、每100ms或者每50ms。如果比500ms更不频繁,那么同步中的延迟开始变得可以被察觉。在有些实施例中,如果500ms过去了,还没有从宿主服务器系统110接收到确认,那么这第三个操作不再重复,直到接收到这种确认之后。而且,在有些实例中,如果Y是身份,就不执行这第三个操作,表示在这个间隔中没有进行编辑。

在第四个操作中,客户端计算系统120从宿主服务器系统110接收确认并且作为响应而更新A和X。为了更新A,客户端计算系统120合成AX并且把该合成分配给A

A←AX

为了更新X,客户端计算系统120把身份分配给X

X←IN

由于身份直到接收到确认并且更新A之后才分配给X,因此没有丢失编辑。将认识到,即使由于慢连接而与宿主服务器系统110的通信存在延迟,(在客户端代码的控制下)客户端计算系统120也允许用户继续编辑文本文档的本地拷贝。

第五个操作是从另一个客户端计算系统120接收变更集B并且相应地修改A、X和Y。A、X和Y是通过分配以下来修改的:

A←AB;

X←f(B,X);及

Y←f(f(X,B),Y)。

在有些实施例中,W也作为第五个操作的一部分而被修改。在这里,可以应用到W的变更集确定成使得

W←WD

其中,

D=f(Y,f(X,B))。

运行在宿主服务器系统110上的宿主代码还执行多个操作。在有些实施例中,宿主服务器系统110(在执行宿主代码的同时)维护修订记录的有序列表,其中修订记录是包括变更集和作者关系信息的数据结构。示例性修订如下:

{变更集,唯一ID,修订号}

其中唯一ID识别与变更集关联的客户端计算系统120,而修订号是顺序分配的。按照惯例,在有些实施例中,第一个修订号是零。可选地,宿主服务器系统110还维护HEADTEXT并且对每个连续的修订记录更新这个变量。在可选方案中,HEADTEXT可以根据需要通过按顺序合成修订记录中所包含的变更集来计算。

如以上关于客户端计算系统120所指出的,每个客户端计算系统120都连接到宿主服务器系统110并且建立本地文本文档。另一方面,宿主服务器系统110接受该连接、利用用于连接客户端计算系统120的唯一ID更新所连接的客户端计算系统120、把HEADTEXT发送到连接的客户端计算系统120并且把所发送HEADTEXT的修订号与所述唯一ID关联。在有些实施例中,修订号也与HEADTEXT一起发送并且由客户端计算系统120并行地维护。在有些实施例中,宿主服务器系统110还可以存储与每个唯一ID关联的附加信息,例如在客户端计算系统120连接到宿主服务器系统110时可以获得的用户的屏幕名字。

当宿主服务器系统110从客户端计算系统120接收到变更集C时,宿主服务器系统110更新其它连接的客户端计算系统120并且存储新的修订记录。为了执行这些任务,宿主服务器系统110首先把C与修订号rc关联,用于向客户端计算系统120发送最新的修订。在有些实施例中,客户端计算系统120与变更集一起发送修订号,而在其它实施例中,当修订号随着每次更新前进时,宿主服务器系统110对用于每个客户端计算系统120的修订号保持跟踪。在还有进一步的实施例中,客户端计算系统120发送修订号而且宿主服务器系统110还跟踪该修订号,为了冗余性和错误检查,修订号应当一致。

接下来,宿主服务器系统110相对于由宿主服务器系统110保留的文本文档的最当前版本计算跟随变更集C’,其中最当前的修订号指定为rh,其中下标代表HEADTEXT。宿主服务器系统110通过计算跟随f(Qrc+1,C)来计算用于修订rh的C’,其中Qrc+1指定文本文档的下一个顺序版本,然后对每个后续的版本重复,直到到达最当前的版本。然后,最后的跟随C’发送到除起源的客户端计算系统120之外的每个客户端计算系统120,可选地带有下一个修订号。宿主服务器系统110把确认发送到起源的客户端计算系统120。最后,宿主服务器系统110从C’为起源的客户端计算系统120创建新修订记录、新修订号和唯一ID,并且把新修订记录添加到修订记录列表。

图6说明了根据一些实施例的、显示在用户的客户端计算系统120上的示例性实时博客条目(例如,网页318)。如所说明的,示例性博客条目包括如可以由报导直播事件的写博客者所生成的内容。为了说明这种内容的实时本质,时间戳605放在每个新段落的开始。一般来说,在从主编辑者接收到时,所示出的每个字符都一个字符一个字符地或者一个词一个词地实时提供给客户端。字符或词可以作为变更集提供,如本文其它地方所讨论的。内容在主区610中显示并且可以包括文本及例如图像615的其它对象。

新内容添实时地加到博客的底部620,如由时间戳所指示的。如果主编辑者(具有编辑权限和编辑权限控制的用户)或者初级编辑者(具有编辑权限但不具有编辑权限控制的用户)对前面提供的内容进行变更,然后可选地对这些改变做标记。例如,标记625显示插入了词“comes”并且校正了词“ovation”。在有些实施例中,与内容的剩余部分相比,标记具有不同的颜色。

图6的示例性博客条目包括几个评论625A-625C。这些评论可选地与该博客条目中的具体对象(例如,具体的词、句子、段落、图像,等等)关联。例如,评论625A与词“those”关联,而评论625B与图像615关联。评论还可以与另一个评论关联。评论625C是关于一个评论的评论而且与评论625B关联。一系列评论可以彼此关联,形成嵌套评论。在有些实施例中,关联的评论在视觉上利用该评论关联的对象来识别(例如,一个或多个词、一个或多个句子、内容的一部分、另一个评论或者另一个评论的一部分)。例如,与评论625A关联的词“those”在视觉上被区分开了(例如,通过高亮或者通过围绕该词的方框),而词“those”与评论625A的关联在视觉上通过连接线来识别。类似地,评论625B与评论625C之间的关联在视觉上通过连接线来识别。

在有些实施例中,评论是当其被多个用户接收时其内容实时地显示给多个用户的实时文档本身。评论可以具有与主区610中所显示的博客条目类似的特性。相应地,在有些实施例中,评论可以被一个或多个编辑者编辑和/或与其它评论关联。在有些实施例中,评论从它们与之关联的对象继承特性(例如,评论可以与它们与之关联的对象具有相同的颜色、相同的字体、相同的尺寸、相同的背景颜色、相同的高亮颜色,等等)。在有些实施例中,当内容添加到博客条目而且一个或多个评论也同时添加时,这种内容和/或评论作为一个或多个变更集实时地提供给其他用户。

图6中所说明的示例性博客条目进一步包括几个可选的用户接口对象,例如,显示在图形用户界面上的按钮。这些包括保存按钮630,配置成让主编辑者、初级编辑者或者其它用户在静态存储器中保存当前的博客。在有些实施例中,编辑者对保存按钮的激活启动向宿主服务器系统110发送消息,使得实时博客的当前状态被拷贝到存储器(例如,206或306)。

锁定按钮635配置成把实时博客变成静态博客。当在客户端120上被用户激活时,锁定按钮可以用于防止在用户有机会检查内容之前对博客的改变。然后,用户可以使用直播按钮640给博客解锁,使得博客再次变成实时的。然后,为用户显示在博客被锁定时对该博客发生的变更。用户可以利用直播按钮640把静态博客变成实时博客。编辑者可以使用锁定按钮635临时暂停对博客的直播更新。这允许编辑者进行一组修改,这些修改随后用于在激活直播按钮640时更新博客。

评论按钮645配置成让编辑者或者其他用户把评论附连到博客。所附连的评论可选地与博客中或者之前存在的评论中的特定部分关联,例如文本或对象。在有些实施例中,编辑者和/或其他用户被允许使用图6中所说明的控制元件。

图7是说明根据一些实施例的、由客户端和文档管理系统执行的过程的高级流程图。本领域普通技术人员将认识到,所述的一个或多个动作可以由硬件、软件或者其组合来执行,就像可以在一个或多个计算系统中所体现的。在有些实施例中,由宿主服务器系统110执行的操作的部分可以由客户端120执行。

在图7中,对应的客户端120(例如,120-1或120-2)是用户使用的计算机或者其它设备。宿主服务器系统110把文档的拷贝发送(702)到多个客户端(例如,客户端120-1或120-2)。在有些实施例中,所述多个客户端120首先发送观看和/或编辑文档的请求,而且宿主服务器系统110通过把文档的拷贝发送到所述多个客户端120作出响应。

对应的客户端120显示(704)文档的一部分,并且从对应的用户接收(706)输入。可选地,对应的客户端120维护(708)一组变更集(例如,图4B的468)。该组变更集代表对文档的变更。对应的客户端120把文档变更信息(例如,像击键的输入,或者基于所述输入确定的变更集)发送(710)到宿主服务器系统110。

例如通过从对应的客户端120接收变更集,或者通过基于从对应客户端120接收到的输入生成变更集,宿主服务器系统110获得(712)变更集。宿主服务器系统110基于所获得的变更集生成(714)结果变更集,并且把结果变更集发送(716)到多个客户端120(例如,120-1或120-2)。这允许宿主服务器系统110把客户端120-1所作的变更发送到客户端120-2,而且反之亦然。

对应的客户端120接收(718)结果变更集,并且更新(720)存储在该对应客户端120的文档或文档拷贝。可选地,对应的客户端120更新(722)在该对应客户端120维护的变更集集合。

图8A和8B是代表根据一些实施例的、向多个客户端提供文档进行实时编辑的方法的流程图。在某些实施例中,宿主服务器系统110包括具有一个或多个处理器及存储用于由所述一个或多个处理器执行的一个或多个程序的存储器的服务器。

服务器把文档的拷贝发送(802)到多个客户端,进行实时编辑。例如,服务器利用实时写博客-客户端接口程序216把来自文档数据库116的文档的对应拷贝(例如,包括内容450的一部分在内的对应拷贝)发送到对应的客户端(例如,120)。在有些实施例中,对应的客户端接收文档的对应拷贝并且存储所接收到的拷贝(例如,图3中的322)。

在有些实施例中,在发送文档的拷贝之前,服务器先把浏览器附件发送到多个客户端120。浏览器附件包括用于接收一个或多个变更集、基于所接收到的变更集更新文档的对应拷贝并且显示更新后的文档的对应拷贝的指令。浏览器附件的对应拷贝在对应的客户端与对应的浏览器应用314关联执行。

在有些实施例中,服务器把网页中文档的内容发送(816)到多个客户端,进行实时编辑。网页配置成,当在具有编辑权限的对应客户端呈现时,从对应客户端的对应用户接收用于编辑文档的输入。

在有些实施例中,网页包括从对应客户端的对应用户接收用于编辑文档的输入的指令。在有些实施例中,网页包括用于把该输入发送到服务器的指令。在有些实施例中,所述指令利用应用分发模块222准备和/或嵌入到网页中。

在有些实施例中,网页包括用于(例如,根据所接收到的结果变更集)自动更新网页的指令。

在有些实施例中,服务器根据对应客户端所发送的输入生成用于对应客户端的对应变更集(例如,服务器根据由对应客户端发送的对应键盘敲击生成对应的变更集)。例如,输入包括键盘敲击、字符流,等等。在有些实施例中,输入包括通过语音识别转换成文本的语音输入。

在有些实施例中,网页包括(818)用于根据输入确定对应变更集及把对应变更集发送到服务器的指令(例如,图3的实时写博客模块320)。在有些实施例中,对应的客户端以预定义的时间间隔、在预定义的字符或词个数之后、响应来自于服务器的发送对应变更集的请求、响应来自用户的输入(例如,当用户按下键时)或者其任意组合把对应的变更集发送到服务器。

在有些实施例中,服务器把对应变更集的确认发送(820)到对应的客户端。网页包括用于在对应的客户端维护一组变更集的指令。该组变更集包括:第一变更集(例如,326-1),代表没有发送到服务器的变更;及第二变更集(例如,326-2),代表发送到服务器但没有被服务器确认的变更。网页还包括用于把第一变更集发送到服务器的指令;及用于响应对应客户端接收到对应变更集的确认而更新第二变更集的指令。在有些实施例中,当对应的客户端从服务器接收到确认时,对应的客户端更新第一和第二变更集。

在有些实施例中,在对应客户端维护的该组变更集进一步包括第三变更集(例如,326-3),代表发送到服务器并且被服务器确认的变更。

在有些实施例中,网页包括(822)用于根据结果变更集更新该组变更集的指令。例如,实时写博客模块320可以包括用于根据结果变更集(例如,328)更新该组变更集(例如,326-1、326-2和/或326-3)的指令,如以上参考图5所描述的。

在有些实施例中,网页包括(824)用于接收结果变更集以便在对应客户端更新文档的对应拷贝及根据结果变更集在对应客户端更新文档的对应拷贝的指令(例如,实时写博客模块320)。

在有些实施例中,网页包括(826)用于选择实时观看对文档的变更的指令。在有些实施例中,用于选择实时观看对文档的变更的指令与网页上的用户接口对象(例如,图6的直播按钮640)关联。当网页从静态状态切换成直播状态时,一个或多个变更集可选地提供给客户端。这些变更集代表所观看的静态状态与博客的当前状态之间的任何区别。在有些实施例中,网页是基于用户选择利用这些变更集更新的。

在有些实施例中,网页包括(828)网络日志的至少一部分(例如,见图6)。在有些实施例中,文档包括用于接收评论和对评论的变更的指令。在有些实施例中,变更集可以包括对一个或多个评论的变更。这允许服务器从多个客户端中的一个接收评论,并且把该评论发送到所述多个客户端中的其它成员,用于实时地一个字符一个字符或一个词一个词地显示。

在有些实施例中,服务器维护(830)用于对应客户端的修订记录(例如,图4B的文档数据库116中的修订记录460)。

服务器获得(804)用于多个客户端中两个或多个对应客户端的变更集。对应的变更集(例如,468)代表在对应客户端对文档的对应拷贝的一个或多个变更。在有些实施例中,服务器从一个或多个客户端120获得对应的变更集326(例如,服务器利用接收模块142接收存储在一个或多个客户端的对应变更集326)。在有些实施例中,获得对应的变更集包括从两个或多个对应的客户端接收对应的第一变更集(例如,326-1)。在有些实施例中,服务器至少部分地基于从一个或多个客户端接收到的信息(例如,键盘敲击,等等)确定对应的变更集。

在有些实施例中,服务器把编辑权限控制分配(806)给主编辑者。编辑权限控制配置成修改对应客户端的编辑权限。例如,服务器利用编辑权限控制模块146更新用户信息数据库114中的编辑权限控制416,以便指示与对应用户关联的对应客户端具有编辑权限控制(例如,对应的用户是主编辑者)。例如,编辑权限控制允许主编辑者修改博客、授予其他用户对博客进行编辑和/或评论的许可,和/或允许与博客关联的评论。在有些实施例中,分配编辑权限控制包括认证对应的用户(例如,利用口令或者类似的访问控制机制)。获得用于两个或多个对应客户端的对应变更集包括当所述两个或多个对应的客户端具有编辑权限时从所述两个或多个对应的客户端接收对应的变更集。在有些实施例中,服务器对不具有编辑权限的对应客户端发送的对应变更集不予处理。

反过来,与主编辑者关联的对应客户端可以修改(例如,授予和/或除去)一个或多个客户端的编辑权限。

在有些实施例中,编辑权限包括(808)用于评论的编辑权限。服务器把网页中文档的内容发送到多个客户端,进行实时编辑。网页被配置成,当在具有编辑权限的对应客户端被呈现时,接收关于该文档的一个或多个评论并且把所述一个或多个评论传送到服务器。从对应的客户端接收对应的变更集包括当对应的客户端具有用于评论的编辑权限时从对应的客户端接收对应的变更集而且对应的变更集包括关于该文档的对应评论的至少一部分。当对应的评论包括在结果变更集中时,对应的评论作为网页318的一部分显示(例如,图6的评论625A-625C)。

服务器根据对应的变更集生成(810)结果变更集。在有些实施例中,结果变更集是用于对应客户端的对应变更集的合并,如以上参考图5所描述的。在有些实施例中,生成结果变更集包括根据在生成前一结果变更集之后所获得的对应变更集生成结果变更集。在有些实施例中,生成结果变更集包括根据预定义时间周期内获得的对应变更集生成结果变更集。

服务器把结果变更集发送(812)到多个客户端,用于在所述多个客户端更新文档的对应拷贝。例如,服务器利用实时写博客-客户端接口程序216发送文档数据库116中的结果变更集,并且客户端接收并存储结果变更集(例如,图3的328)。在有些实施例中,客户端利用结果变更集更新存储在该客户端的文档。

在有些实施例中,服务器根据对应的变更集更新(814)存储在服务器的文档。更新存储在服务器的文档可以按以上参考图5所述的方式利用实时写博客应用140,或者更具体地说是变更集模块144,执行。

应当指出,以上关于方法800所述的过程细节还可以按与以下所述方法,包括方法900和1000,类似的方式应用。为了简洁,这些细节在以下不再重复。

图9是代表根据一些实施例的、在客户端执行的处理文档进行实时编辑的方法的流程图。在某些实施例中,该方法是在具有一个或多个处理器及存储用于由所述一个或多个处理器执行以便执行所述方法的一个或多个程序的存储器的客户端(例如,图3的客户端120)执行的。

客户端显示(902)文档的对应拷贝的至少一部分。

客户端从该客户端的对应用户接收(904)用于编辑文档的输入(例如,键盘敲击,等等)。

客户端根据所述输入向连接到多个客户端的服务器发送(906)文档信息。在有些实施例中,客户端以预定义的时间间隔、在预定义的字符或词数量之后、响应来自服务器的请求、响应来自用户的输入(例如,当用户按下键时)或者其任意组合把文档信息发送到服务器。

在有些实施例中,发送文档信息包括把输入发送到服务器(例如,客户端把键盘敲击发送到服务器)。

在有些实施例中,客户端根据输入确定(908)对应的变更集。对应的变更集代表在该客户端对文档的一个或多个变更。发送文档信息包括发送对应的变更集(例如,图3的326)。

在有些实施例中,客户端在该客户端维护(910)一组变更集。该组变更集包括:第一变更集(例如,326-1),代表没有发送到服务器的变更;及第二变更集(例如,326-2),代表发送到服务器但没有被服务器确认的变更。客户端对文档的至少一部分显示该变更集。发送对应的变更集包括发送第一变更集(例如,326-1)。

在有些实施例中,该组变更集进一步包括第三变更集(例如,326-3),代表发送到服务器并且被服务器确认的变更。

在有些实施例中,客户端显示在该组变更集中表示的变更的子集。例如,在该组变更集中所表示的一些变更可以不显示,因为变更的区域在文档所显示部分的外面。

客户端接收(912)结果变更集(例如,328),用于在该客户端更新文档的对应拷贝。结果变更集代表基于在多个客户端中两个或多个客户端对文档对应拷贝的变更的对文档的变更。在有些实施例中,结果变更集代表包括在客户端对文档的对应拷贝的变更在内的变更。

按以上参考图5所述的方式,客户端根据结果变更集更新(914)该客户端的文档的对应拷贝。

在有些实施例中,按以上参考图5所述的方式,客户端根据结果变更集更新(916)该组变更集。在有些实施例中,第一变更集中已经反映在结果变更集中的变更可以被删除,以防止冗余的改变。

图10是代表根据一些实施例的、向多个客户端提供文档用于实时编辑的方法的流程图。在有些实施例中,该方法是在宿主服务器110执行的。在某些实施例中,宿主服务器110包括具有一个或多个处理器及存储用于由所述一个或多个处理器执行的一个或多个程序的存储器的服务器。

服务器向多个客户端中的第一客户端发送(1002)文档的第一拷贝(例如,图7中对客户端120-1的操作702)。

服务器向多个客户端中的第二客户端发送(1004)文档的第二拷贝(例如,图7中对客户端120-2的操作704)。

服务器从第一客户端获得(1006)第一变更集(例如,图7中与客户端120-1关联的操作712)。该第一变更集代表在第一客户端对文档的第一拷贝的一个或多个变更(例如,在客户端120-1的变更集326-1)。

服务器从第二客户端获得(1008)第二变更集(例如,图7中与客户端120-2关联的操作712)。该第二变更集代表在第二客户端对文档的第二拷贝的一个或多个变更(例如,在客户端120-2的变更集326-1)。

服务器根据至少所述第一变更集和第二变更集(例如,来自客户端120-1和120-2的变更集326-1)生成(1010)结果变更集。

服务器把该结果变更集发送(1012)到第一客户端,用于更新文档的第一拷贝(例如,图7中对客户端120-1的操作716)。

服务器把该结果变更集发送(1014)到第二客户端,用于更新文档的第二拷贝(例如,图7中对客户端120-2的操作716)。

在有些实施例中,与把结果变更集发送到第一客户端和第二客户端同时,服务器把该结果变更集发送(1016)到第三客户端,用于更新文档的第三拷贝。

图11-14描述了根据一些实施例的本发明的各种方法。在有些实施例中,图11-14中所说明的方法和/或操作在以上所述的方法,包括方法800、900和1000,中使用。此外,在有些实施例中,图11-14中所说明的方法和/或操作可以补充以上所述的方法与操作。例如,以上参考图9所述的方法900可以包括以下参考图12所述的方法1400中的一个或多个操作。

图11是根据本发明一种示例性实施例的、用于协作修订文本文档的示例性方法1300的流程图表示。例如,方法1300可以由例如服务器的宿主服务器系统110执行。

方法1300包括响应编辑而定义文本文档的新版本,并且把一个或多个客户端计算系统更新成与该新版本一致。定义文本文档的新版本包括接收指定对文本文档第一版本的编辑的第一变更集的操作1310、基于第一变更集定义第二变更集的操作1320,其中第二变更集定义成修改文本文档的第二版本,还包括定义包括第二变更集及第一变更集的作者关系的修订记录的操作1330,及把修订记录添加到修订记录的有序列表的操作1340。把一个或多个客户端计算系统更新成与新版本一致包括把第二变更集提供给一个或多个客户端计算系统的操作1350。

操作1310包括接收指定对文本文档的第一版本的编辑的第一变更集。例如,第一变更集可以从第一客户端计算系统120接收。例如,编辑可以代表一个字符的至少一次插入和/或一个字符从文本文档的第一版本的至少一次删除。在有些实施例中,第一变更集指定文本文档第一版本由于编辑造成的长度变化、通过其索引指定文本文档第一版本中的保留字符,并且相对于所保留字符的索引指定插入的字符。在有些实施例中,字符的删除是通过变更集中缺少其索引来表示的。可选地,第一变更集还指定用于文本文档的第一版本的修订号。

操作1320包括基于第一变更集定义第二变更集,其中第二变更集定义成修改文本文档的第二版本。在这里,文本文档的第二版本是文本文档的最近版本(在这里也称为HEADTEXT)。第二版本将是文本文档第一版本的后续版本,例如,当刚好在操作1310中接收到第一变更集之前从一个不同的客户端计算系统120接收到指定编辑的另一个变更集时。相应地,第二变更集指定如何把第一变更集中指定的编辑结合到文本文档的最近版本中。第二变更集是基于第一变更集,因为第二变更集是结合了第一变更集的编辑的跟随变更集。

操作1330包括定义包括第二变更集及第一变更集的作者关系的修订记录。第一变更集的作者关系可以是与从其接收第一变更集的客户端计算系统120关联的唯一ID。在有些实施例中,作者关系是利用第一变更集接收的。在其它实施例中,宿主计算系统120可以通过保持跟踪哪个TCP端口用于每个连接的客户端计算系统120并且通过指出通过哪个TCP端口接收变更集来确定作者关系。在有些实施例中,定义修订记录还可以包括包括修订号,其中,在有些实施例中,修订号是顺序分配的。

操作1340包括把修订记录添加到修订记录的有序列表。这个操作可以包括在存储器中存储修订记录。操作1350包括把第二变更集提供给一个或多个客户端计算系统120。

图12是根据本发明一种示例性实施例的、用于协作修订文本文档的示例性方法1400的流程图表示。例如,方法1400可以由例如计算机的客户端计算系统120执行。方法1400包括利用本地创建的编辑修订文本文档并且把所述编辑提供给宿主服务器系统110。利用本地创建的编辑修订文本文档可选地包括建立本地文本文档的操作1410。修订文本文档包括从输入设备接收编辑的操作1420及更新第一变更集以便包括该编辑的操作1430。把编辑提供给宿主服务器系统110包括把包括所述编辑的第一变更集发送到宿主服务器系统110的操作1440及把包括所述编辑的第一变更集分配给第二变更集并且然后把身份分配给第一变更集的操作1450。方法1400还包括从宿主服务器系统110接收确认的操作1460、在接收到确认之后把第一变更集和第二变更集的合成分配给第三变更集的操作1470及在把所述合成分配给第三变更集之后把身份分配给第二变更集的操作1480。

方法1400可选地包括建立本地文本文档的操作1410,该操作包括把身份分配给第一和第二变更集并且把文本文档的版本分配给第三变更集。当三个变更集A、X和Y的合成用于代表本地文本文档时,身份分配给X和Y,而文本文档的版本,例如HEADTEXT,分配给A。

在操作1420中,编辑是从例如执行方法1400的客户端计算系统的键盘的输入设备接收的。例如,编辑可以代表字符的至少一次插入和/或字符从文本文档版本的至少一次删除。在操作1430中,第一变更集被更新成包括所述编辑。在这里,例如,变更集Y在操作1430中被更新。当编辑被表示为变更集E时,更新Y包括计算YE的合成并且把该合成分配给Y。

在操作1440中,包括所述编辑的第一变更集被发送到宿主服务器系统110。在有些实施例中,包括所述编辑的第一变更集被发送到宿主服务器系统110,带版本号和唯一ID中的任意一个或者两个都带。在有些实施例中,把包括所述编辑的第一变更集发送到宿主计算系统是在从操作1420中从输入设备接收到编辑的时刻开始的500ms内执行的。在接收到时,宿主服务器系统110利用在操作1460中从宿主服务器系统110接收到的确认作出响应。

在操作1450中,把包括编辑的第一变更集分配给第二变更集,然后把身份分配给第一变更集。例如,把Y分配给X,然后把身份分配给Y。在操作1460中从宿主服务器系统110接收到确认之后,在操作1470中,第三变更集与第二变更集合成,并且把该合成分配给第三变更集。例如,把与X合成的A分配给A。操作1480在把所述合成分配给第三变更集之后执行并且包括把身份(I)分配给第二变更集。因此,在把与X合成的A分配给A之后,把身份(I)分配给X。

在附加的实施例中,方法1400可选地包括把来自另一客户端的编辑结合到文本文档中的操作1490。操作1490参考图13更具体地描述。

图13是说明根据一些实施例的更新变更集的方法的流程图。在图13中,方法1400的操作1490包括更新在操作1410-1480中所采用的三个变更集A、X和Y中每一个的操作。因而,更新第三变更集A包括从宿主服务器系统110接收第四变更集,例如变更集B,的操作1500,在操作1510中计算第三变更集和第四变更集的合成(AB),并且在操作1520中把第三变更集和第四变更集的合成分配给第三变更集A。

更新第二变更集X是通过计算用于第二变更集与第四变更集的跟随变更集f(B,X)的操作1530和把该跟随变更集分配给第二变更集X的操作1540执行的。更新第一变更集Y是通过计算作为第四变更集与第二变更集的跟随变更集f(X,B)的第五变更集的操作1550、计算作为第五变更集与第一变更集的跟随变更集f(f(X,B),Y)的第六变更集的操作1560和把第六变更集分配给第一变更集Y的操作1570执行的。

图14是根据本发明各种实施例说明实时博客的交付的流程图。实时博客包括一个或多个博客条目,每个博客条目都包括至少一个文档。一般来说,同时只有一个博客条目是直播的,而其它博客条目是静态的。但是,实时评论可以与静态博客条目关联。如所说明的,实时博客的交付包括使用在本文其它地方讨论过的系统与方法来提供实时编辑环境。图14中所说明的操作可以广泛变化的可选次序执行。

在打开文档操作1710中,文档在实时编辑环境中打开。这种文档与博客条目关联。文档可选地可以被几个用户同时编辑,而不锁定该文档或者其子集。

在可选的提供选项操作1715中,为编辑者和博客的观看者提供作为静态对象或者实时文档来观看文档的选项,其中静态对象除非明确地刷新否则不改变,而实时文档在被编辑时实时变化。这些实时变更可以是一个字符一个字符的、一个词一个词的或者一段一段的。提供选项操作1715可选地是在实时博客交付过程中的不同时间或者多次执行的。

在可选的分配控制操作1720中,文档的控制分配给称作主编辑者的至少一个用户。在有些实施例中,控制同等地分配给多个用户或者分配给每个用户。这种分配过程可选地包括例如口令或证书的使用的安全性提供。分配控制操作1720可选地包括由主编辑者对其他用户的特权委托。如在此所讨论的,这种委托可以包括访问、编辑、评论和/或其它特权。主编辑者可选地是博客所有者,在这种情况下分配控制操作1720可以通过博客所有者登录到其博客中来实现,在这个时候任何打开的文档都是自动分配的。

在接收请求操作1725中,在宿主服务器系统110分别从一个或多个客户端计算系统120接收一个或多个观看文档的请求。这些请求可选地是以访问位于具体统一资源定位符的信息的TCP/IP请求的形式。例如,请求可以通过用户在客户端计算系统120选择统一资源定位符、文档识别参数等来生成。请求可选地包括文档是作为静态文档还是作为实时文档被观看的选择。

在接收字符操作1730中,字符、其它对象、修改和/或其它信息被宿主服务器系统110接收。所接收到的信息一般是从主编辑者和/或其他编辑者接收的,并且用于修改存储在宿主服务器系统110的文档的拷贝。基于所述信息的修改可以包括插入、对文档中现有对象(文本等)的删除和/或替换或者可能导致新对象添加到文档的末尾。接收字符操作1730一般在操作1735-1750过程中继续,这将在下面讨论。

在提供字符操作1735中,在接收字符操作1730中接收到的信息实时地提供给一个或多个客户端计算系统120。信息是以配置成用于更新存储在客户端计算系统120上的文档拷贝的形式提供的。例如,在有些实施例中,信息是在一系列一个或多个变更集中提供的。依赖于这些客户端计算系统120中每一个上每个文档拷贝的状态,不同的变更集可以提供给不同的客户端计算系统120。如果文档在客户端计算系统120中的一个或多个上是被实时观看的,就在宿主服务器系统110接收到信息时把变更集实时地提供给那个客户端计算系统120。

在可选的接收评论操作1740中,关于文档和/或关于另一个评论的评论在宿主服务器系统110被接收。评论一般是经网络130从一个客户端计算系统120接收的。评论可以作为单个对象块或者作为对象流来接收。例如,评论可以作为字符流或者作为静态字符集接收。如果评论是作为对象流接收的,那么接收评论操作1740可以在操作1745和1750的执行过程中继续,如以下所讨论的。接收到的评论可选地是实时文档。实时评论可以对静态博客条目进行。评论可以在编辑者,例如主编辑者,对文档进行变更的同时接收。

在可选的关联评论操作1745中,评论与文档、与博客条目、与博客、与文档中的具体对象、与另一评论中的具体对象、与另一评论、与一个段落、与一个词、与一个句子等关联。评论与之关联的实体可选地依赖于与评论一起从客户端计算系统120接收到的信息。例如,如果用户指定评论应当与(静态或实时)博客条目的具体段落关联,那么这种指定将用于在宿主服务器系统110存储适当的关联。

在可选的提供评论操作1750中,把在接收评论操作1740中接收到的评论提供给一个或多个客户端计算系统120。评论可选地是作为实时文档提供的。例如,当评论被宿主服务器系统110接收时,评论可以作为变更集实时地提供。在关联评论操作1745中所进行的评论的任何关联一般还都提供给一个或多个客户端计算系统120。

在可选的保存文档操作1755中,文档作为静态文档保存。文档可以存储在宿主服务器系统110或者一个或多个客户端计算系统120。可选地,静态文档是作为包括多个静态博客条目的博客中一个静态博客条目的一部分保存的。

尽管在此参考博客公开了实施例的各种特征,但是这些及其它特征可以应用到其中两个或多个用户利用实时文本窗口彼此聊天的聊天系统。

为了解释,以上所述已经参考具体实施例进行了描述。但是,以上的说明性讨论不是详尽的或者要把本发明限定到所公开的精确形式。鉴于以上教义,许多修改与变化都是可能的。实施例的选择和描述是为了最好地解释本发明的原理及其实践应用,由此使本领域其他技术人员能够最好地利用本发明及具有适于预期特定用途的各种修改的各种实施例。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1