用于计算、应用和显示文档增量的系统和方法与流程

文档序号:11890791阅读:289来源:国知局
用于计算、应用和显示文档增量的系统和方法与流程

本申请要求2014年3月18日提交的美国临时专利申请第61/954,818号的优先权,该案的全部内容以引用的方式并入本文,并且要求2015年3月11日提交的美国专利申请第14/645,072号的优先权,该案的全部内容以引用的方式并入本文。



背景技术:

协同内容创建(例如,协同文档创建和编辑)存在多种技术难题,其中最突出的难度是对不同版本内容之间的差异(或者增量)的计算、应用和显示。具体地,随着时间的推移,若干协作者不断推进着内容创建,对关于内容增量(例如,由谁改变的、改变了什么、和何时改变的)的信息进行计算和传送的能力提出了若干计算和人机界面技术难题。



技术实现要素:

因此,本文描述了用于计算、应用和显示文档增量的系统和方法。在某些方面中,本文描述的系统和方法涉及对文档快照进行扁平化并且将扁平化的一维文档快照进行比较。存储协同文档的第一快照。接收来自第一用户的对协同文档的编辑,并且基于第一编辑来修改协同文档。存储修改后的协同文档的第二快照。将第一快照扁平化成第一一维串以产生第一扁平化快照。将第二快照扁平化成第二一维串以产生第二扁平化快照。确定第二扁平化快照的最小子集,该第二扁平化快照的最小子集与第一扁平化快照的对应子集不同。生成包括所确定的最小子集的表示的馈送;并且将该馈送发送至客户端装置以显示在该客户端装置上。

在某些方面中,通过反转所确定的最小子集的扁平化可以生成新的部分,并且通过反转对应子集的扁平化可以生成旧的部分。在某些方面中,馈送包括电子文档的对于第一快照和第二快照公共的上下文部分。

在某些方面中,接收来自第一用户和第二用户中的一个的评论。将馈送修改为包括该评论的表示,并且将经修改的馈送发送至客户端装置以显示在客户端装置上。

在某些方面中,接收来自第二用户的对经修改的协同文档的第二编辑。基于该第二编辑进一步修改该经修改的协同文档。存储该进一步修改的协同文档的第三快照。将该第三快照扁平化成第三一维串以产生第三扁平化快照。确定第三扁平化快照的第二最小子集,该第三扁平化快照的第二最小子集与第二扁平化快照的对应子集不同。将馈送修改为包括第二最小子集的表示。将馈送发送至客户端装置以显示在该客户端装置上。

在某些方面中,将第一快照扁平化成第四一维串以产生第四扁平化快照。将第二快照扁平化成第五一维串以产生第五扁平化快照。确定第五扁平化快照的第三最小子集,该第五扁平化快照的第三最小子集与第四扁平化快照的对应子集不同。在某些方面中,该确定的最小子集是第三最小子集。

在某些方面中,协同文档是电子表格文档。第四一维串和第五一维串每个包含多个标识符,并且标识符中的每个标识符表示在电子表格文档中的行。

在某些方面中,协同文档的每个快照包括节点的层级结构,该节点的层级结构包括:多个级别、包含数据的一个主节点、和包含数据的多个非主节点。非主节点中的每个非主节点具有在该级别之上的父节点,并且节点中的每个节点在下一级别中具有零个、一个、或者多个子节点。在一个级别中的每个节点与主节点之间的级别的数目相同。将第一快照扁平化成第一一维串包括:选择级别、将在所选择的级别中的第一节点映射至第一标识符,并且将该第一标识符添加至第一一维串。在某些方面中,将第二快照扁平化成第二一维串包括:基于确定第二节点的内容与第一节点的内容相同,将在第二快照的该对应的所选择的级别中的第二节点映射至该第一标识符,并且将该第一标识符添加至第二一维字符串。

在某些方面中,将第二快照扁平化成第二一维串进一步包括:基于确定在第三节点中包含的数据与在第一快照的所选择的级别中的节点中的任何节点的内容不同,将在第二快照的对应的所选择的级别中的该第三节点映射至第二标识符,并且将该第二标识符添加至第二一维串。

在某些方面中,确定最小子集包括:确定第一一维串和第二一维串包含第一标识符并且从最小子集排除第一标识符。

在某些方面中,确定最小子集包括:确定第一一维串不包含第二标识符并且将第二标识符包括在最小子集中。

附图说明

本公开的上述和其它的特征(包括其性质及其各种优点)将在考虑以下结合附图的具体实施方式时变得更加显而易见,在附图中:

图1是根据图示实施方式的用于计算、应用、和显示文档增量的系统的框图;

图2是根据图示实施方式的云计算服务的框图;

图3是根据图示实施方式的文档对象模型的框图;

图4描绘了根据图示实施方式的文档的快照和扁平化快照;

图5描绘了根据图示实施方式的电子表格文档的快照;

图6描绘了根据图示实施方式的文档扁平化模块的运算;

图7描绘了根据图示实施方式的扁平化快照的行方向集合和列方向集合;

图8描绘了根据图示实施方式的电子表格文档的快照;

图9描绘了根据图示实施方式的文档扁平化模块的运算;

图10描绘了根据图示实施方式的扁平化快照的行方向集合和列方向集合;

图11描绘了根据图示实施方式的用于计算在文字处理文档之间的增量的方法的流程图、和用于计算在电子表格文档之间的增量的方法的流程图;

图12描绘了根据图示实施方式的显示文档的两个块的概述的用户界面;

图13A和13B描绘了根据图示实施方式的在执行行方向和列方向比较之后行和列已经剥离的示例;

图14描绘了根据图示实施方式的用于为存储在云存储中的文档计算和高速缓存增量的系统;

图15描绘了根据图示实施方式的包含文档的变化概述的馈送;

图16描绘了根据图示实施方式的两个用户界面;

图17描绘了根据图示实施方式的用户界面,该用户界面示出了级别增加的上下文用于更快的用户解释;

图18描绘了根据图示实施方式的用户界面,该用户界面示出了变化的子集;

图19描绘了根据图示实施方式的用户界面,该用户界面由用户界面模块输出并且对该用户界面进行渲染以在移动装置上进行显示;

图20描绘了根据图示实施方式的用户界面,该用户界面示出了电子表格文档的变化;

图21描绘了根据图示实施方式的配置为允许用户控制是接收还是拒绝变化或者增量的用户界面;

图22描绘了根据图示实施方式的文档比较模块使增量反转的示例;

图23描绘了根据图示实施方式的变化菜单;

图24描绘了根据图示实施方式的用于存储元数据的位的映射;

图25描绘了根据图示实施方式的由文档比较系统用于计算增量并且生成馈送以向用户显示的方法的流程图;

图26是根据图示实施方式的图示了移动装置软件的架构的框图;以及

图27是计算机系统的示例形式的机器的框图。

具体实施方式

在以下说明中,出于解释之目的,陈述了若干特定细节以便提供对一些示例的全面理解。然而,显然的是,对于本领域的技术人员而言,在没有这些特定细节时,也可以实践本发明。例如,虽然特定参照文档和电子表格对本文的示例进行了讨论,但是本文所描绘的方法和系统同样可以应用于其它类型的内容。

利用基于协同云的文档,多个用户可以频繁地进行改变。计算、识别并且显示什么被改变了和由谁改变的在技术上可以是具有挑战性的。本文描绘了用于以人类可读且简洁的方式呈现这些文档(或者内容)变化的系统和方法。示例方法非常适合于在“新馈送”、电子邮件概述、移动应用、和屏幕尺寸有限的其它使用情况下进行演示。这种使用情况使用户能够在不需要打开文档并且搜索已经改变的内容的情况下快速地采集在若干文档和众多作者中已经改变的内容。本文描绘的系统和方法适用于任何文档内容类型,该任何文档内容类型包括但不限于:文字处理文档、电子表格文档、演示文档、表格文档、数据库文档、网页文档、和纯文本文档。本文描绘的系统和方法可以向用户提供:简洁的且人类可读的概述、上下文相关性、和对于多个装置和多种屏幕分辨率的可用性。

根据一个示例,可以在图1所示的文档比较系统的上下文中实施本文描述的各种算法。图1描绘了文档服务器102,该文档服务器102经由网络110通信地耦合至客户端装置104a和104b和文档比较系统120。文档服务器102还通信地耦合至文档存储装置108。文档比较系统120通信地耦合至增量存储库140a,在增量储存库140a中存储有关于多个文档的增量(例如,变化)信息,文档比较系统120可以经由网络110访问该文档(或者在其它示例中,相对于文档比较系统本地存储的文档)。文档服务器102通过公开应用编程接口(API)103与网络110接口连接。文档比较系统120通过公开API 122与网络110接口连接。文档比较系统120包括:文档比较模块124、文档扁平化模块126、和用户界面(UI)模块128,所有这些模块彼此通信。UI模块128包括变化接受/拒绝模块130和馈送模块132。

具体地,文档比较系统120可以经由API(可以包括API 130和API 122)访问文档服务器,以便检索来自文档存储装置108的各种版本的文档。在其它示例中,文档比较系统120可以经由文档服务器的API从文档服务器102接收版本管理和/或变化信息,所述信息指示在文档存储内存储的文档之间的差异或者增量。

在文档比较系统120有权访问本地文档存储装置108(例如,作为服务器或者计算机系统的一部分)的示例中,文档比较系统120可以访问文档的本地版本以便识别版本,和/或提取与本地文档有关的版本管理/变化信息。

在一些进一步的示例中,可以将文档比较系统120至少部分地实施为在客户端装置104a或104b(例如,移动或者便携式计算装置)上执行的文档比较应用。

根据各种示例,本文描述了用于计算在公共类别的格式之间的增量、将增量以人类可读的格式呈现、并且在云存储中所存储的文档集合中计算和存储上述增量的系统和方法。同样,本文描述了针对多种屏幕分辨率呈现文档增量、应用或者反转文档增量、并且为文档子元素快速、细粒度地确定最后的作者的系统和方法。

图2示出了包括云计算服务202和多个客户端装置204a至204d(通常,客户端装置204)的客户端-服务器系统200。云计算服务202为一组客户端装置204提供计算服务。具体地,云计算服务202可以包括一个或者多个服务器,该一个或者多个服务器存储可由客户端装置204a至204d访问的多个文件(诸如,示例性协同电子表格206)。在客户端装置204处的用户可以创建、编辑、复制、共享、和删除在云计算服务202上存储的文件。例如,客户端装置204可以每个都使用web浏览器同时访问在云计算服务202上的电子表格206。云计算服务202将电子表格206的本地副本提供给每个客户端装置204,在客户端装置204上的用户然后可以查看和编辑所述副本。云计算服务202可以使电子表格206的本地副本彼此同步并且可以使电子表格206的本地副本与在云计算服务202中的服务器上存储的电子表格206的副本同步。在一个示例中,将由客户端装置204a进行的编辑(本文可以将此称为变化)自动地发送至云计算服务202并且传送至其它客户端装置204b、204c、和204d。按照这种方式,由一个协作者做出的改变可以直接被其它协作者看见。

如本文所使用的,文件包括在存储介质上存储的一组数字编码的位。云文件包括在服务器上存储并且可经由网络访问的文件。本地文件包括在用户的本地装置上存储的文件。客户端装置包括以客户端-服务器的关系与服务器通信的本地装置。如本文所使用的,除非上下文中另有指示,否则客户端装置等同于用户装置和本地装置。如本文所使用的,文档可以与多个文件相关联。例如,云文件可以是在服务器上存储的文件的副本,并且本地文件可以是在本地装置上存储的相同文档的副本。通常,相同文档的多个副本可以是相同的,但是如果由一个协同者进行的改变尚未传送至其它协同者,则它们可能会不同。在网络连接较慢或者断断续续时可能会出现这种情况。如果将副本存储在不同类型的装置(诸如,具有不同操作系统的装置)上,则相同文档的多个副本也可能略有不同。在这种情况下,不同的副本可以具有略有不同的元数据,或者可以不同地进行编码。例如,一个副本可以编码成字节中的第一位包含最重要的位的格式,并且另一个副本可以编码成字节中的第一位包含最不重要的位的格式。在作为相同文档的副本的多个文件中可以存在这些格式差异,只要向用户显示的信息的实质在副本之间是相同的。本地装置可以读取文件(存储在非易失性存储器中)的内容并且将表示文件的模型存储在工作存储器中。工作存储器可以是易失性的(例如,RAM或者等效物)。

客户端装置204可以包括桌面型计算机、膝上型计算机、平板、智能电话、移动电子装置、或者可以通过网络连接至云计算服务202的任何其它装置的任何组合。在系统200中仅示出了四个客户端装置204,但是应该理解的是,任何类型的任何数目的客户端装置204都可以配置为与云计算服务202通信。系统200的云计算服务202和客户端装置204可以通过远程网络(诸如,因特网)连接。可以通过局域网、广域网、以太网、光纤网络、无线网络、蜂窝网络、交互式电视网络、电话网络、无线数据传输系统、双向电缆系统、定制专用计算机网络或者公共计算机网络、交互亭网络、直接链接、卫星网络、和/或任何其它有线连接或者无线连接来促进网络连接。

文档比较系统可以包括多个子模块,即文档比较模块、文档扁平化模块、和用户界面模块。用户界面模块又可以包括变化接受/拒绝模块、和馈送模块。

由公共应用生成的文件保持用户数据。用于文档的公共文件格式包括:文字处理文档、演示、和电子表格。计算在文档之间的增量(或者差异)对于改变追踪以便让用户知道在不同版本的文档中已经发生了什么改变、以及对文档进行选择性地取消编辑或者应用编辑非常有用。

本文可互换地使用术语“增量”和“差异”。

已知有计算在两个给定一维串序列之间的增量的算法(诸如,DIFF MATCH_PATCH)。这种算法操作如下:给定原始的字符序列“ABC”和修改的字符序列“ABCD”,这种算法将返还将字符串“ABC”表示成未修改、并且将字符串“D”表示成添加的输出。给定初始的字符串“ABC”和修改的字符串“AB”,这种算法将返还将字符串“AB”表示成未修改、和将字符串“C”表示成删除的输出。给定原始的字符串ABC和修改的字符串“ABE”,这种算法将返还将字符串“AB”表示成未修改、将字符串“C”指示成删除、并且将字符串“E”表示成插入的输出。给定原始字符串“ABC”和修改的字符串“ABC”,这种算法将返还将字符串“ABC”表示成未修改的输出。因此,这种算法可以容易地计算在一维字符串序列之间的增量。

然而,基本串增量计算并不适合文档、电子表格、或者演示,因为文档中经常会存在复杂且嵌套的结构,这些复杂且嵌套的结构通常存储为二进制格式。可以将文档和电子表格作为层级结构存储在存储器中。可以使用的一种类型的层级结构是文档对象模型“DOM”。

图3示意性地图示了用于编辑和渲染文档文件的文档对象模型(DOM)300。文档文件可以指包含文字处理文档、电子表格文档、演示文档、绘图文档、数据库文档、HTWL文档、XML文档、图像文档、和文本文档的文件,或者包含用户数据的任何其它文档文件。在DOM300中,文档305的对象布置为在层级中的节点。对象可以是文件的特征。节点可以具有在层级中低于该节点的一个或者多个节点,并且节点可以具有在层级中高于该节点的一个或者多个节点。例如,节点315具有低于该节点315的节点320和在高于该节点315的节点310。类似的节点可以在层级中的相同级别处。例如,节点330、340、和350可以在层级中的相同别处。在一个示例中,模型-视图-控制器(MVC)实现用于创建和编辑DOM 300并且用于向用户显示DOM 300的内容。在该示例中,MVC的模型部分解析文件并且将文件的与文档305的对象对应的部分放入到DOM 300的节点中。

例如,可以将段落放入到DOM 300的节点350中,并且可以将在该段落中的句子放入节点355中。可以将句子的一个字放入到节点360中,并且可以将另一个字放入到节点365中。可以将段落的另一个句子放入到节点370中,将其字放入节点375和380中。为了图示的清楚性起见,上文和图3中仅描述了两个句子节点和四个字节点,但是段落可以具有任何数目的句子和对应的句子节点,并且一个句子可以具有任何数目的字和对应的字节点。在另一示例中,可以将表格放入到DOM 300的节点350中,将表格行元素放入节点355和370中。可以将在表格行中的每个单元格的内容相应地地放入节点360、365、375和380中。表格可以具有任何数目的行和行节点,并且行可以具有任何数目的单元格节点,但是此处为了图示的清楚性起见描述了两个行节点和四个单元格节点。在另一示例中,可以将表格放入到以列作为主索引的DOM 360中。在该示例中,节点355和370与表格的列对应,并且节点360、365、375、和380与在表格列中的每个单元格的内容对应。在示例中,节点310可以包含文档的头部信息。节点315可以包含头部的句子,并且节点320可以包含头部句子的字。

为了图示的清楚性起见,节点310仅仅具有一个从属节点315,该从属节点315本身仅仅具有一个从属节点320。此外,如所图示,DOM 300具有四个层级级别。然而,在DOM中的任何节点都可以具有任何数目的从属节点,并且DOM可以具有任何数目的层级级别。

在模型部分创建DOM 300并且将内容放入到节点中之后,MVC的视图部分可以逐个节点地遍历DOM 300并且渲染在DOM 300的节点中包含的一些或者所有的对象。视图部分可以是渲染引擎。随着视图部分遍历DOM 300的每个节点,视图部分将渲染节点的内容(如果视图部分配置为要这样做)。当视图部分在遍历时遇到节点,它可以使用硬编码逻辑对每个节点的内容进行解码或者解析。如果硬编码逻辑配置为对节点的内容进行解码或者解析,则视图部分将渲染节点的内容以向用户显示。如果硬编码逻辑未配置为对节点的内容进行解码或者解析,则视图部分将不渲染节点的内容并且将遍历到另一节点。在示例中,视图部分可以在模型部分正在创建或者更新DOM 300的同时遍历DOM 300。

MVC的控制器部分可以与MVC的视图部分和模型部分交互以便促进由DOM 300表示的文档305的编辑。当用户提供编辑输入时,控制器接收该输入,确定与该输入对应的DOM 300的节点,并且更新该对应的节点。控制器然后指令MVC的视图部分渲染更新的节点。必须验证对DOM 300的更新的正确性。这种验证可以在视图部分渲染更新的节点之前或者之后发生。在示例中,控制器可以执行DOM 300的积极更新。在该示例中,控制器部分直接将该更新发送至视图部分以用于渲染,并且异步地更新并且验证DOM 300。如果验证成功,则不针对该更新采取进一步行动。如果验证失败,则撤销对DOM 300的更新,并且因为视图部分在该更新之前存在,所以视图部分对DOM 300进行渲染。这种积极更新提供对用户编辑的更快显示。通过将文档305的特征归类到层级结构中,视图部分和控制器部分可以高效地与DOM300交互以便显示和编辑文档305。

图4描绘了在一个时间点上存储的文档的快照400,并且在稍后的时间点上存储的相同文档的另一快照450。图4还描绘了快照400的扁平化快照430和快照450的扁平化快照480。快照400包括三个段落406、412、和420。段落406包括两个句子402和404。段落412包括两个句子408和410。段落420包括三个句子414、416、和418。快照450包括三个段落456、462、和470。段落456包括两个句子452和454。段落462包括图像472和两个句子458和460。段落470包括三个句子464、466、和468。本文描述的示例计算在快照400与快照450之间的增量,快照400和450是文档的加载到存储器中的版本,并且作为异质元素的嵌套阵列进行存储。根据示例,可以通过执行过程来计算增量,该过程对文档的树形结构执行“扁平化”从而使得可以将其简化为串。文档扁平化模块126可以通过实施以下步骤来执行文档扁平化:第一,扁平化模块递归地遍历文档,并且构造表示对计算增量来说很重要的所有属性的节点。第二,扁平化模块在所有最高级别的节点上单独地采用串行器。一种这种串行器可以是JSON ENCODER。该过程将树转变成串阵列。

图4描绘了文档扁平化模块126的输出。文档比较模块124执行将快照400的句子映射至字母数字字符以产生扁平化快照430。与先前映射的句子相同的句子将被映射至与先前映射的句子相同的字母数字字符。与先前映射的句子不同的句子将被映射至独特字母数字字符。虽然本文将单个的字母数字字符描述为映射目标,但是可以替代地使用多个字母数字字符的串。扁平化快照430包含独特字符的三个集合423、434、和436。扁平化快照430还包含表示独特段落438、440、和442的字符。为了生成字符集合432,通过字符“M”表示句子402并且通过字符“N”表示句子404。因为这些句子是不同的句子,所以将它们映射至不同的字母数字字符。同样,通过将句子408映射至字符“O”并且将句子410映射至字符“P”来生成字符集合434。此外,通过将句子414映射至字符“Q”,将句子416映射至字符“R”和将句子414映射至字符“S”来生成集合436。将集合432本身映射至独特字母数字字符“T”438。集合434与集合432不同,因此将集合434映射至独特字母数字字符“U”440。集合436与集合432或者集合432都不同,因此将集合436映射至另一独特字母数字字符“V”442。

文档扁平化模块126按照类似的方式从快照450生成扁平化快照480。文档扁平化模块126将句子452映射至字符“M”并且将句子454映射至字符“N”以便产生集合482。文档扁平化模块126将图像472映射至字符“I”,将句子458映射至字符“O”和将句子460映射至字符“P”以产生集合484。文档扁平化模块126将句子464映射至字符“Q”,将句子466映射至字符“X”并且将句子468映射至字符“S”以产生集合486。因为句子452与句子402相同,这两个句子接收相同的字符“M”。同样,句子458、460、464、和468与在先前的快照400中的句子相同,并且不给每个句子分配独特字符,相反,给每个句子分配相同的字母数字字符作为其匹配句子。因为图像472和句子466未出现在快照400中,所以给它们分配新的、独特字母数字字符。文档扁平化模块126进一步将这些集合482、484、和486扁平化成独特字母数字字符。因为集合482与集合432相同,所以给集合482分配相同的字母数字字符“T”488。因为集合484与集合434以及所有先前映射的集合都不同,所以给集合484分配新的独特字母数字字符“W”490。同样,因为集合486与集合436以及所有其它集合都不同,所以将集合486映射至新的独特字母数字键盘“Y”492。

在文档扁平化模块126已经从文档快照产生扁平化快照之后,文档比较模块124然后可以通过应用一维文档增量算法来计算在这两个快照之间的增量。

因此,扁平化模块能够通过使其适合应用标准化最长公用子序列算法(例如,DIFF_MATCH_PATCH)来减少这种问题:将复杂的嵌套结构比作为将字符串“TUV”与“TWY”进行比较的简单比较。一旦已经在简单的扁平化字符串上计算了增量,便通过将映射反转在文档空间中重构了增量的含义。这种方法还适合替选树形结构文档格式或者DOM层级,包括但不限于电子表格、演示、PDF文件、和CAD文件。

应用生成的文件可以具有高阶维度。例如,相较于文字处理文档,电子表格具有附加的维度阶。通常,按照特定于更高维度的方式来操纵在这些更高维度的文档中的数据。例如,在电子表格中,用户可以执行运算(诸如,添加行、移动行、删除行、复制行、添加列、移动列、删除列、和复制列)。因为很多运算会对很多的行和列都产生影响,所以将该数据形成为一系列的行的初级方法可能会失败。

根据示例,文档比较系统120可以将两个电子表格快照S1和S2进行如下比较。首先,文档扁平化模块126遍历电子表格S1,每次遍历一行。接着,文档扁平化模块126将在快照中的每一行映射至字母数字字符(并且,如果该行与先前映射的行不同,则映射至新的独特字母数字字符)。接着,文档扁平化模块126将每个映射的字母数字字符添加至集合S1_HORIZONTAL。

然后,文档比较模块遍历快照S2,每次遍历一行。文档扁平化模块126将在快照S2中的每一行映射至字母数字字符(并且,如果该行与先前映射的行不同,则映射至新的独特字母数字字符)。接着,文档扁平化模块126将遇到的每个字母数字字符添加至集合S2_HORIZONTAL。然后,文档比较模块124计算集合S1_HORIZONTAL和集合S2_HORIZONTAL的交集的基数。如下面将进一步详细描述的,计算集合的交集的基数包括计算共享的元素的数目。

前进到列方向,文档扁平化模块126遍历电子表格快照S1,每次遍历一列。接着,文档扁平化模块126将在快照S1中的每一列映射至字母数字字符(并且,如果该行与先前映射的行不同,则映射至新的独特字母数字字符。)接着,文档扁平化模块126将遇到的每个字母数字字符添加至集合S1_VERTICAL。然后,文档扁平化模块126遍历电子表格快照S2,每次遍历一列。接着,文档扁平化模块126将在输入表格中的每一列映射至字母数字字符(并且,如果该行与先前映射的行不同,则映射至新的独特字母数字字符)。接着,文档扁平化模块126将遇到的每个字母数字字符添加至集合S2_VERTICAL。最后,文档比较模块124计算集合SI_HORIZONTAL和集合S2_HORIZONTAL的交集的基数。

图5描绘了电子表格文档的两个快照500和550。快照500包含单元格502、504、506、508、510、和512。快照550包含单元格552、554、和556。除了已经删除的行,快照550与快照500相同。

图6描绘了当对快照500和550进行运算时文档扁平化模块126的运算。图6描绘了扁平化快照600和610。扁平化快照600是快照500和550的行方向的扁平化。扁平化快照600包含两个字符集合602和604。集合602和604包含独特行。快照500的第一行用集合602表示,并且快照500的第二行用集合604表示。因为快照550的第一行与快照500的第一行相同,所以将快照550的第一行映射至集合602。将集合602本身映射至字母数字字符“M”606。将集合604映射至独特字母数字字符“N”608。因此,当快照550可以用字母数字字符“M”表示时,快照500可以表示为“MN”。

扁平化快照610表示快照500和550的列方向的扁平化。将快照500的列A、B、和C相应地映射至集合612、614、和616。将快照550的列A、B、和C相应地映射至集合618、620、和622。将集合612、614、616、618、620、和622相应地映射至独特字母数字字符624、626、628、630、632、和634。因为快照500和550没有一列与彼此相同,所以将这些集合相应映射至独特字母数字字符。例如,虽然快照500的列A和快照550的列A共享共同的单元格,但是这些列由于删除了第二行而不相同。因此,这些列不是相同的。

接着,文档比较模块124计算在扁平化快照600和610中的集合的交集的基数。图7描绘了扁平化快照600和610的行方向集合和列方向集合、和它们相应的基数。图7包括行方向映射700和列方向映射750。行方向映射700包括表示快照500的集合S1_HORITONZAL702和表示快照550的集合S2_HORIZONTAL 704。集合702包含字符“M”和“N”,每个字符表示在快照500中的行。集合704包含单个字符“M”,该字符“M”表示在快照550中的单个行。行方向映射700还包含计算得到的基数706。集合702和704的交集的基数706是1,符号“∧”表示交集运算符。因为集合702和704共享一个元素,即“M”,所以基数706是1。

列方向映射750包含列方向集合752和754。列方向集合752表示快照500的列,如根据映射610映射至字母数字字符。列方向集合754表示快照550的列,通过列方向映射610表示。列方向映射750还包含计算得到的集合752和754的基数756。因为在集合752与集合754之间没有共享的元素,所以基数756是零。集合的交集的基数表示在集合之间的重叠程度,或者,替选地,在集合之间的共享的元素的数目。当确定是以行方向基础还是列方向基础比较两个快照时,文档比较模块124将选择使用具有最高基数的基础来进行比较。在图7描绘的示例中,行方向基础700具有更高的基数706。因此,当将快照500和快照550进行比较时,文档比较模块124将在行方向基础上比较这些快照。因此,文档比较模块124可以使用最高效的基础来进行比较。

图8描绘了两个电子表格快照800和850。快照800表示具有以行和列为索引的六个单元格的电子表格。快照800的第一行包含单元格802、804、和806。快照800的第二行包含单元格808、810、和812。快照850包含以行和列为索引的四个单元格。快照850的第一行包含单元格852和854。快照850的第二行包含单元格856和858。

图9描绘了快照800和850的行方向映射900和列方向映射920。快照800的第一行和第二行相应地用集合902和904表示。快照850的第一行和第二行相应地用集合908和910表示。使用相对于图6描绘的系统和方法,将集合902、904、908、和910相应地映射至字母数字字符912、914、916、和918。映射920表示将快照800和850的列映射至独特字母数字字符。快照800的第一列、第二列、和第三列相应地用集合922、924、和926表示。因为第一列(快照850的“列A”)与快照800的第一列相同,所以快照850的第一列也用集合922表示。同样,因为快照850的第二列与快照800的第二列相同,所以快照850的第二列也用集合924表示。使用已经关于图6描述的系统和方法,将集合922、924、和926相应地映射至独特字母数字字符928、930、和932。

接着,文档比较模块124计算在扁平化快照900和910中的集合的交集的基数。图10描绘了扁平化快照900和910的行方向集合和列方向集合、和它们相应的基数。图10包括行方向映射1000和列方向映射1050。行方向映射1000包括表示快照800的集合S1_HORITONZAL 1002和表示快照850的集合S2_HORIZONTAL1004。集合1002包含字符“M”和“N”,每个字符表示在快照800中的行。集合1004包含符“O”和“P”,每个字符表示在快照850中的行。行方向映射1000还包含计算得到的基数1006。集合1004和1002的交集的基数1006是1,符号“∧”表示交集运算符。因为在集合1002与1004之间没有共享元素,所以基数1006是零。

列方向映射1050包含列方向集合1052和1054。列方向集合1052表示快照800的列,如根据映射910映射至字母数字字符。列方向集合1054表示快照850的列,通过列方向映射910表示。列方向映射1050还包含计算得到的集合1052和1054的基数1056。因为集合1052和集合1054共享两个元素“R”和“S”,所以基数1056是2。集合的交集的基数表示在集合之间的重叠程度,或者,替选地,在集合之间共享的元素的数目。当确定是在行方向基础还是在列方向基础上比较两个快照时,文档比较模块124将选择使用具有最高基数的基础来进行比较。在图10描绘的示例中,列方向基础1000具有更高的基数1056。因此,当将快照800与快照850进行比较时,文档比较模块124将在列方向基础上比较这些快照。因此,文档比较模块124可以使用最有效的基础来进行比较。

如前所述,由比较模块采用的方法还滤掉了公共类别的较小编辑(例如,将电子表格分类或者对行进行复制),虽然在一些情况下排序很重要,诸如,包含项而非集合的优先级的电子表格,可以维护将与行对应的字母数字字符映射至针对行的位置列表的字典。

总之,比较模块可以执行电子表格的两次水平遍历和垂直遍历来识别改变的元素,并且然后丢弃两个结果中的较大者。因为遍历在扫描的同时会偶然查看内容,所以我们将它们称为内容寻址扫描。同样,为了确保比较模块可以高效地容纳大量的行,可以使用多字节字符编码(诸如,Unicode)。通常,电子表格具有多个表格,并且用户可以添加或者插入表格。可以只将电子表格精简成串并且将它们映射至字符序列,因此,可以运行标准算法。

图11描绘了用于计算在文字处理文档之间的增量的方法1100和用于计算在电子表格文档之间的增量的方法1150的流程图。在方法1100中,在扁平化步骤1102中,文档扁平化模块126将文档扁平化成文档快照。在增量计算步骤1104中,文档比较模块124计算在两个扁平化快照之间的增量。增量可以用不在快照之间共享的一维字符表示。在重构步骤1106中,文档比较系统120通过将用于扁平化步骤1102中的映射反转来重构快照的修改的部分。这些重构的部分是人类可读的并且可以通过合适的用户界面呈现给用户。

用于计算在电子表格进行之间的增量的方法1150如下继续:通过文档扁平化模块126处理输入的电子表格1152和1154。文档扁平化模块执行行方向内容寻址扫描1156和列方向内容寻址扫描1158。在步骤1160中,文档比较模块124选择具有较小增量的扫描基础。文档比较模块124通过选择具有更高基数的集合的交集来进行该步骤,如相对于图7和图10描述的。文档比较模块124然后产生包含较小增量的输出1162。这样,文档比较模块计算以最高效的方式计算在快照之间的增量。

有时,针对完整文档或者电子表格的增量可以较大,并且因为它们的主要用途是保证用户可以在无需查看整个文件的情况下看见已经改变的内容,在一些示例中,可以使用与改进的演示相关的增强方式来增强差异算法。

在一些示例中,文档比较模块124为文档增量执行块排序和块过滤。块排序和块过滤对于限制对已经明显改变的文档的组件的显示可以是有用的。块是文档的子集(诸如,页、段落、句子、字、列、或者行)。在一些示例中,文档比较模块124(实现文档增量算法)检查在文档中的所有增量并且基于在每个增量中的变化的字符的数目来对增量进行排序。然后,文档比较模块124选择具有最大增量的N个块。文档比较系统120然后向用户显示包含N个块和对应增量的概述。UI模块128可以执行该显示。可以基于屏幕尺寸或屏幕分辨率来选择数目“N”。

图12描绘了显示具有最大增量的文档的两个块的概述的用户界面。在该示例中,N=2。图12描绘了与句子对应的块1210和与段落对应的块1220。在块1210中,已经进行了文本插入1212。该文本插入1212包含三个字符的插入。在包括三个句子的块1220中,已经进行了删除1222和两个插入1224和1226。从图12所示的用户界面中省略了不包含增量的文档块。这样,用户可以迅速地确定已经改变的文档块。在一些示例中,为了帮助用户迅速地辨别已经编辑的文档的部分,UI模块1228高亮显示文本的已经改变的部分。在这些示例中,可以通过更改文本周围的背景颜色、更改文本的字体颜色、向文本添加下划线、向文本添加删除线、或者针对字体的其它修改(诸如,字体的类型、字体大小、或者字体强调(诸如,斜体))来高亮显示文本的部分。在图12描绘的示例中,用具有白色背景的黑色字体颜色渲染未修改的文本,用具有浅绿色背景的深绿色字体渲染插入的文本,并且用具有浅红色背景的深红色字体渲染删除的字体并且向其添加删除线。在其它示例中,可以用单种颜色渲染所有文本而用另一单种颜色渲染背景,可以对插入的文本添加下划线,并且可以向删除的文本添加删除线或者用方括号括上删除的文本。这样,用户可以迅速地确认所显示的块的已经编辑的部分。

在一些示例中,文档比较模块124剥离并且增强显示数据以便促进演示。在一些示例中,当计算在两个电子表格快照之间的增量时,文档比较模块124执行剥离和增强。在图示的示例中,文档比较模块124计算在两个电子表格快照之间的增量并且确定只有两行包含变化。可以将这两行,例如,行17和行18,与头部行隔开很多行。如果中间的行也显示在用户界面中,则用户可能会难以确认变化的上下文。因此,为便于用户解释,如下操作是有价值的:示出电子表格的头部行,但不示出未改变的行,并且示出向用户说明在行中存在间隙的指示符。在行中的间隙与未改变的行对应。如此,文档比较模块(以及,在一个示例实施例中,电子表格子模块)实施算法,该算法基于对生成水平增量的确定来复制电子表格的顶行,并且基于对生成垂直增量的确定来复制第一列,并且对任何中间的未改变的行进行剥离。

图13A和13B描绘了在执行行方向差异和列方向差异之后行和列已经剥离的示例。图13A包括用户界面1300,该用户界面1300将增量描绘为由行方向差异确定。在用户界面1300中,折页1304向用户图示了已经从电子表格的所显示部分消除了未改变的中间行。用户界面1300包括头部行1302以便为电子表格的已改变的部分提供上下文。用户界面1300还包括包含已编辑部分1316、1318、1320、和1322的行1306、1308、1310、1312、和1314。用高亮显示、背景颜色、向文本添加删除线、和其它字体修改来描绘已编辑部分1316、1318、1320、和1322以向用户图示已经改变了这些部分。

图13B描绘了用户界面1350,该用户界面1350图示了由文档比较模块124执行的列方向差异计算的结果。用户界面1350包括头部列1352、折页1354、和已编辑列1356。已编辑列1356包括改变的单元格1358、1360、1362和1364。折页1354表示列B至列J,这些列包含未改变的数据并且被省略不在用户界面1350中显示。头部列1352包含向已改变的部分1358、1360、1362、和1364提供上下文的头部信息。通过将头部列1352包括进来,用户界面1350向用户提供改变的简洁的且有意义的表示。

在一些示例中,文档比较系统120对云存储中的文档的大集合进行运算。在这些示例中,文档比较系统120可以计算递增的增量。在进一步示例中,文档比较模块124可以为特定用户有权访问的所有文件生成活动馈送。确保在空间和时间上快速并且高效地访问增量是有利的(但是尽管如此仍是技术难题)。考虑到获取和下载用于计算增量的行数据成本较高,根据一些示例,提供了高速缓存层,该高速缓存层递增地计算增量以确保在应用(例如,网站、在线文字处理器、或者移动应用)请求增量以向用户示出已经改变的内容时应用可以用最短的延迟得到响应。高速缓存层(诸如,REDIS和MEMCACHE)通常仅需低于毫秒的时间来响应并且存储对象,并且计算增量,具体地,针对大文件,需要数秒。

图14描绘了用于为在云存储中存储的文件计算和高速缓存增量的系统。图14描绘了计算集群1404、高速缓存层1408、和云存储数据库1414。计算集群1404与应用接口连接并且执行增量计算,也与高速缓存层1408和云存储数据库1414接口连接。计算机集群可以是配置为执行计算集群1404的功能的服务器或者服务器处理器、个人计算机、或者任何计算装置。计算集群1404可以是服务器的集群或者刀片式服务器。高速缓存层1408存储递增地计算得到的增量以供计算集群1404快速地访问并且可以包括REDIS或者MEMCACHE。云存储数据库1414存储进行了增量计算的文档和用于计算增量的快照。

在步骤1412中,接收新文件列表。计算集群然后执行步骤1416并且提取用于文件的数据。计算集群计算在文件的快照之间的增量,并且在步骤1410中将计算得到的增量存储在高速缓存层1408中。在步骤1402中,应用请求文档增量。发出请求的应用可以是云服务应用或者期望快速响应的其它基于网络的应用。计算集群1404与高速缓存层1408接口连接以便从高速缓存读取最新的计算得到的增量,并且然后,在步骤1418中将响应发送至应用。计算集群1404可以与高速缓存层1408接口连接,该与高速缓存层1408的接口连接比计算集群1404可执行按需文档增量计算更快。因此,提高了响应的速度,减少了在响应1418与请求1402之间的延迟。

在步骤1406中,后台进程粗略查看在高速缓存层1408中高速缓存的所有增量并且丢弃任何早于可配置时间阈值的增量。这样,在保留最新增量的同时将高速缓存层的大小保持为最小。

在该节中,描述了根据由文档比较模块实施的一些示例的一种用于高速缓存增量并且用于提供最新增量的方法。通常,云服务利用键来公开事件的顺序,该键表示最近事件的单调递增的计数器。例如,假定用户的事件指示它们具有特定数目的事件,其中,最近事件的顺序顺序号为100。

由文档比较模块实施的方法追踪最近顺序号,针对该最近顺序号用户的增量是最新的,并且将100存储在用户账户的数据库中。每当请求到来以便为用户生成文档更新的新馈送时,文档比较模块查看事件,并且仅针对具有顺序号>100的事件重新计算增量。为了公开一个给定文件的所有活动,为相同的文件计算多个增量可以是有用的。为了支持多个增量,高速缓存键方案使用三元组:文件的独特标识符、旧版本的标识符、和新版本的标识符。

图15描绘了包含针对文档的变化的概述与关于该文档和变化的用户评论的馈送1500。馈送1500包括评论1502、1508、和1510。馈送1500还包括变化1504、1506、和1512。利用周围文本的上下文来描述该变化1512以便帮助用户解释该变化。评论1502、1508、和1510允许用户关于该文档和变化进行通信。将这些评论包括在馈送1500中为变化1504、1506、和1512提供了进一步的上下文。

虽然下面的说明与电子表格相关,但是要理解的是,这种方法适用于其它文档或者内容类型。

在一些示例中,文档比较系统120按照近似于原始文档的格式来呈现概述。在图13描绘的示例中,该概述近似于其原始文档类型:图13中的电子表格用绿色描绘了添加的高亮显示,并且利用删除线用红色描绘出删除的高亮显示。这方便用户迅速地扫描并且辨别已改变的部分。此外,本文描述的系统和方法可以显示跨电子表格文档的多个表格或者文字处理文档的页的变化。电子表格工作簿文件可以包含几十个表格,并且文字处理文档可以包含很多页。在一些示例中,本文描述的系统和方法将仅检测并且显示包含页的表格或者页的增量。

文档比较系统120可以通过提供文档的上下文相关的部分来增加呈现的信息的值。图16描绘了两种可能的用户界面1600和1603。在用户界面1600中,仅显示已改变的部分1602。查看用户界面1600的用户可以看到插入了文本“6”,但是用户可能无法意识到该插入的重要性。用户界面1603包括类似的改变的单元格1608,还以头部行1604和描绘省略的中间行的折页1606的形式包括上下文。在没有合适的上下文的情况下,将“6”插入到单元格中是无意义的。如用户界面1603所示,头部行1604向用户表达该“6”指的是Chris的评级。

虽然该上下文是有用的,但显示头部列和附加的周围单元格以使得查看者完全理解变化的完整意义也是有用的。图17描绘了用户界面1700,该用户界面1700示出了级别增加的上下文用于更快的用户解释。用户界面1700包括文本“6”1708、头部行1704、和示出了省略的中间行的折页1706的插入,并且也示出了周围的单元格。如图17所示,插入的“6”1708是Chris针对特定瓶装和年份的葡萄酒的评级。借助该示例方法所提供的完整上下文,用户现在可以理解该插入“6”1708的意思。具体地,用户可以理解“6”1708是Chris针对一瓶2012年份的Penfolds Shiraz的评级。

根据一些示例,该方法解析和理解文档的布局和变化的位置。该方法然后提供确定量的上下文相关的信息以便使该变化有意义。该方法在对文本的需要与保持文档增量简洁的意义两者之间折中。相对于特定的变化,该方法确定哪些列或者行对于提供与上下文相关的观点是必要的。在一些示例中,诸如,图13中的用户界面1300,该方法显示头部行以便提供上下文。在一些示例中,诸如在用户界面1350中,文档比较系统120仅显示头部列而不是头部行。

在移动装置、新馈送和邮件上并且在其它介质中,考虑到屏幕空间有限,信息的简洁是所期望的,但是要实现这点在技术上存在难题。简单地显示具有成百个行或者列的整个电子表格可能是不可用的。根据一些示例,文档比较系统120考虑到了这一点并且通过多种示例方法从简洁方面优化了显示。

在图17中描绘的用户界面1700中,仅仅对第11行进行了修改。根据示例,文档比较系统120仅显示对上下文必要的头部行和包含了新变化的行,而非显示行2到行10。将省略的行表示为折页以便通知用户文档比较系统120省略了与显示不相关的、未改变的行。用户比较系统120可以根据关键上下文所在的位置来水平地或者垂直地提供折页。

当修改了电子表格的大部分时,变化的显示仍然可以很大。在一些使用情况中,尤其在馈送中,虽然仍然允许用户具有看到完整变化的选择权,但是需要限制任何一个变化的高度。如果该变化超出了特定的高度阈值,则文档比较系统120和UI模块128通过折叠该变化来提供这种能力。

如图18所示,用户可以选择查看整个变化。图18描述示出了变化的子集的用户界面1800。用户界面1800包括可点击部分1802,用户选择该可点击部分1802触发UI模块128以平滑的动画来扩展该变化。

针对特别长的文本,该方法可以限制变化的内容。如果该变化超出了阈值,则该方法截断文本并且插入省略号。这对屏幕尺寸非常有限的移动使用情况或者其它使用情况特别有用。如图18所示,变化1804包括在文本的显示部分的结束处的省略号,该省略号指示未显示完整的变化。

该方法的输出可以是任何标记语言(例如,HTML),该任何标记语言可以用于并且渲染在几乎任何装置或者应用中。图19将用户界面1900描绘为由用户界面模块128输出并且渲染以显示在移动装置上。

图20描绘了用户界面2000,该用户界面2000示出了由用户界面模块128渲染并且显示在移动装置上的电子表格文档的变化和用户评论的字段。

为了使用户能够控制哪些编辑想要保持和哪些编辑想要丢弃,文档比较模块124可以向用户提供接受哪些增量和拒绝哪些增量的选择性控制。图21描绘了配置为允许用户控制是接受还是拒绝改变或者增量的用户界面2100。用户界面2100包括文档显示器2110和追踪变化显示器2150。文档显示器2110包括两个变化2112和2114。追踪变化显示器2150包括变化2152和可点击区域2154和2156的概述。可点击区域2154是“接受”按钮,并且用户选择可点击区域2154触发文档比较系统120接受该变化或者将该变化合并到文档中。用户选择可点击区域2156触发文档比较系统120拒绝该变化并且从增量库140删除对应的增量。

云服务公开API以获得文档的所有元件的列表,并且还公开了用于更改它们的API。

图22描绘了文档比较模块124(作为内容管理系统的一部分)将增量反转的示例。图22包括一组快照2200。该组快照2200包括活动文档2210和基本快照2220。当文档扁平化模块126粗略查看文档的树形结构、对树形结构进行扁平化或者串行化,并且存储串行化的或者扁平化的快照时,生成该基本快照。该存储的快照至此称为“基本快照”2220。当文档扁平化模块126在稍后的时间点粗略查看树形结构、对树形结构进行串行化或者扁平化,并且存储串行化的或者扁平化的快照时,由文档扁平化模块126生成活动文档快照2210。该快照2210是实时文档的扁平化快照。文档比较模块124使用差异算法2230来定期地计算在活动文档快照2210与基本快照2220之间的增量。文档比较系统120定期地向用户示出这些计算得到的增量。文档比较模块124使用本文描述的系统和模块来定期地计算这些增量。基本快照2220包含三个段落:A 2222、B 2224和C 2226。在文档扁平化模块126已经将文档扁平成基本快照2220之后,文档比较系统120的用户已经删除段落B 2224。因此,活动文档快照2210仅包含段落A 2212和C 2214。文档比较系统120不断地将基本快照2220与当前或者活动文档快照2210进行比较并且生成用户可以接受或者拒绝的增量。

图22还描绘了文档比较系统120的应用级输出2250。该输出2250是包括文档显示器2260和追踪改变显示器2265的用户界面。文档显示器2260描绘活动文档并且包括段落A 2262和段落C 2264的渲染。追踪改变显示器2265包括可点击部分2272,当点击该可点击部分2272时,该点击该可点击部分2272触发文档比较系统120开始追踪变化,将文档扁平化成扁平化快照,并且计算增量。追踪变化显示器2265还包括可点击区域2274,当用户选择该可点击区域2274时,该可点击区域2274触发UI模块128高亮显示新变化。追踪变化显示器2365包括变化2276的概述,该变化2276的概述提供了对变化的数目和按照变化的类型进行的分解的简短概要。追踪变化显示器2265还包括接收用户输入以接受或者拒绝特定变化的变化菜单2278。变化菜单2278包括变化2226和两个可点击区域2268和2270的概述。相对于图23进一步解释该变化菜单2278的运算。

图23描绘了变化菜单2300和变化菜单2350。变化菜单2300提供用户界面,用于接收来自用户的输入以将变化反转,或者换言之,以取消变化。用户界面2300包括变化2302、生成变化的用户的指示符、和可点击区域2304的概述。用户选择可点击区域2304触发文档比较系统120拒绝该变化。因此,可点击区域2304是拒绝按钮。文档比较系统120使用以下算法来拒绝变化。第一,文档比较系统120通过基本快照重建元素的先前版本,按照适当的偏移将重建的元素插入到当前文档中,并且删除当前元素。

变化菜单2350包括变化2352的概述、生成变化的用户的指示、和可点击区域2354和2356。可点击区域2354是接受按钮,当用户选择该可点击区域2354时,该可点击区域2354触发文档比较系统接受该变化。如相对于菜单2300所描述的,可点击区域2356是拒绝按钮,并且当点击可点击区域2356时,该可点击区域2356触发文档比较系统120拒绝该变化。当用户选择可点击区域2354接受变化时,文档比较系统120使用下面的算法来接受所选择的增量2352。第一,文档比较系统120在文档的最新快照中定位包含增量2352的元素。然后,文档比较系统120利用用户接受的定位的元素替代在基本快照中的对应元素。这些元素可以是增量或者块。这样,文档比较系统120可以接收来自用户的输入以便接受或者拒绝在文档中的特定变化。

为了允许多个用户就文档进行协作并且精确地捕获哪个用户进行了哪些编辑,用户可以按照每个字符级存储元数据,所述元数据是关于谁发起变化和何时将其以文档的颜色进行编码。为了将文档的状态转化成哪个用户进行了什么编辑,用户可以遍历文档并且可以反转从颜色到用户/编辑时间的映射。当在应用(诸如,文字处理器)中公开了该数据时,该数据可以方便用户就文档进行协作。在大多数计算机系统中的颜色表示为由8个位组成的3个通道,该3个通道分别是红色、绿色、和蓝色。因为存在有限数目的颜色位并且为了视觉的一致性,所以重要的是,来自相同用户的编辑保持相同的颜色。还考虑到大多数文档都具有白色背景,所以具有较浅的颜色也是很重要的。

图24描绘了用于存储包括变化的时间和作者的元数据的位的映射。图24描绘了使用红色通道、绿色通道、和蓝色通道来表示在文档中的文本的颜色的示例。图24包括红色通道2402、绿色通道2404、和蓝色通道2406。通道2402、2404、和2406中的每一个都是8位通道,这意味着可以按照从0到255或者28的范围来表示由通道表示的颜色的比例。UI模块128以下面的方式将值分配给在通道2402、2404、和2406中的每个位。第一,将在每个通道2408中的最高有效位设置为1。这将编辑的颜色限制为浅色、白色、背景友好色。第二,用户界面模块128通过将用户的用户ID标识符映射至9位数字来表示用户的用户ID标识符。UI模块128将该9位的数字存储为位U-0到位U-8,用位块2410表示。第三,UI模块128表示通过将时间映射至表示年时间的12位数字来表示编辑时间。用户界面模块128将映射的12位数字存储为位T-0到位T-11,用位块2412表示。该映射产生三个小时的精度,但是实际考虑到云服务API,文档比较系统120可以将由给定用户修正的最后一次的交点计算为在三个小时窗口内并且针对编辑时间得到的细粒度结果。这样,显示变化的颜色可以提供关于用户和编辑时间的信息。将该信息编码成颜色可以允许用户确定作者和编辑时间,并且还可以提供一种按照紧凑的方式将该信息编码在编辑内的手段。

图25描绘了由文档比较系统120用于计算增量并且生成馈送以显示给用户的方法2500的流程图。在步骤2502中,文档比较系统120计算并且存储在服务器上托管的协同文档的第一快照。在步骤2504中,文档比较系统120接收来自第一用户的对协同文档的第一编辑。在步骤2506中,文档比较系统120基于第一编辑来修改协同文档的活动版本。在步骤2508中,文档比较系统120存储修改的协同文档的第二快照,该第二快照反映第一编辑的结果。在步骤2510中,文档比较系统将第一快照和第二快照扁平化成扁平化快照。该扁平化可以在步骤2508之后立即发生,或者文档比较系统120可以在步骤2502之后的任何时间将第一快照扁平成第一扁平化快照。在步骤2512中,文档比较系统120确定第一扁平化快照和第二扁平化快照的所有子集。这些确定的子集可以是或者可以不是变化的最紧凑的表示,并且方法2500继续确定最紧凑的表示。在步骤2514中,文档比较系统120处理第二扁平化快照的每个子集,如下:在判定块2516处,文档比较模块124确定正在讨论的子集是否与第一扁平化快照的对应子集不同。如果第一扁平化快照的对应子集与第二扁平化快照的正在讨论的子集相同,则该方法进入步骤2518,在该步骤2518中,丢弃第二扁平化快照的正在讨论的子集。

在判定块2516中,如果文档比较系统120确定第二扁平化快照的正在讨论的子集与第一扁平化快照的对应子集不同,则该方法进入判定块2520。在判定块2520中,文档比较模块124确定第二扁平化快照的正在讨论的子集是否小于被确定为是不同的任何其它子集。如果正在讨论的子集不小于被确定为是不同的任何其它子集,则该方法进入步骤2522,在该步骤2522中,丢弃该子集。

在步骤2520中,如果文档比较模块124确定正在讨论的子集小于任何其它不同的子集,则该方法进入步骤2524。在步骤2524中,文档比较模块124将正在讨论的子集存储为在第一快照与第二快照之间的增量。在步骤2526中,馈送模块132生成包括增量的馈送。在步骤2528中,UI模块128将生成的馈送发送至客户端装置以向用户显示。生成的馈送可以包括在图12、13、和15至23中描绘的任何用户界面中。

图26是图示了移动装置软件2600的构架的框图,该移动装置软件2600可以安装在用于执行上文讨论的部分或者所有示例方法的任何一个或者多个移动装置上。

移动装置软件2600由不同层的软件栈(即,操作系统层2602、运行时2604、库2606、应用框架/API 2608、和应用2610)组成。操作系统层2602包括一个或者多个内核2612、驱动2614、和其它服务2616。

内核2612用作在移动装置的硬件和其它软件层之间的抽象层。例如,内核2612可以负责存储器管理、进程管理、组网、安全设置等。驱动器2614负责控制与底层硬件的通信(例如,促进与可以用于NFC标记识别的蓝牙硬件的通信)。驱动器2614可以包括:显示器驱动器、摄像头驱动器、蓝牙驱动器、闪存驱动器、USB驱动器、键盘驱动器、Wi-Fi驱动器、音频驱动器、和电源管理驱动器。

运行时2604可以包括虚拟机2618(例如,Dalvik Virtual Machine或者Java Virtual Machine)。其它示例运行时包括对象-C运行时2600,该对象C运行时2600包括对象-C动态链接运行时库和底层C库。

库2606使移动装置能够处理不同类型的数据。库2606可以用C/C++来编写并且经由Java接口访问。库2606包括用于合成窗口、2D和3D图形、媒体编解码器(例如,MPEG4、H2664、MP3等)、和SQL数据库(例如,SQL光)和本机web浏览器引擎(例如,WebKit)的界面管理器。示例库包括:实现在屏幕上直接绘制的界面管理器库、提供允许不同媒体格式的录制或者回放的媒体编解码器(例如,MPEG4、H2664、MP3等)的媒体框架、用于在屏幕上的图形内容中渲染2D和3D的OpenGL框架、和作为用于显示HTMR内容的浏览器引擎的WebKit。

应用框架2608可以包括:管理应用的活动生活方式的活动管理器、管理在应用之间进行数据共享的内容提供器、处理与GUI相关的任务的视图系统、管理语音通话的电话管理器、提供以位置为基础的服务(例如,使用GPS或者NFC信息并且支持细粒度的位置提供器(诸如,GPS)和粗粒度的位置提供器(诸如,手机三角测量))的位置管理器、和管理由应用2610使用的不同类型的资源的资源管理器。

应用2610包括家庭应用2650、联系人应用2652、浏览器应用2654、阅读器应用2656、教育应用2658至2660、游戏应用2662至2664、和文档处理模块2666。文档处理模块2666可以并入文档比较模块来执行上文描述的方法。

操作上,应用2610可以通过移动装置软件2600的软件栈来执行API调用2670并且可以响应于这种API调用接收消息2672。

图27是以计算机系统2700为示例形式的的机器的框图,在该机器2700内可以执行使该机器执行本文描述的任何一种或者多种方法的指令。

在替选示例中,该机器操作为独立装置运行或者可以连接(例如,联网)至其它机器。在联网的部署中,该机器可以在服务器-客户端网络环境下以服务器或者客户端机器的能力运行,或者可以在对等(或者分布式)网络环境中作为对等机运行。该机器可以是个人计算机(PC)、平板PC、机顶盒(STB)、个人数字助理(PDA)、蜂窝电话、web电器、网络路由器、交换机或者桥接器、或者能够执行指定由该机器采取的动作的指令(顺序或其他指令)的任何机器。进一步地,虽然只图示了单个机器,但是术语“机器”也应理解为包括单独地或者联合地执行用于进行本文所讨论的任何一种或者多种方法中的指令集的机器的任何集合。

示例计算机系统2700包括处理器2702(例如,中央处理器(CPU)、图形处理器(GPU)或者两者)、经由总线2708彼此通信的主存储器2704和静态存储器2706。计算机系统2700可以进一步包括视频显示单元2710(例如,液晶显示器(LCD)或者阴极射线管(CRT))。计算机系统2700还包括字母数字输入装置2712(例如,键盘)、用户界面(UI)导航装置2714(例如,鼠标)、盘驱动单元2716、信号发生装置2718(例如,扬声器)、和网络接口装置2720。

盘驱动单元2716包括在其上存储有体现本文所描述的任何一种或者多种方法或者功能或者通过本文所描述的任何一种或者多种方法或者功能利用的一个或多个指令集和数据结构(例如,软件)2724的机器可读介质2722。指令2724还可以在由计算机系统2700执行期间完全地或者至少部分地驻留在主存储器2704和/或处理器2702内,该主存储器2704和处理器2702还组成机器可读介质。

虽然在示例中将机器可读介质2722示出为单个介质,但是术语“机器可读介质”可以包括存储一个或多个指令或者数据结构的单个介质或者多个介质(例如,集中式或分布式数据库、和/或关联的高速缓存和服务器)。术语“机器可读介质”还应理解为包括能够存储、编码或者携带用于由机器执行的使该机器执行本发明的任何一种或者多种方法的指令或者能够存储、编码、或者携带由这种指令利用或者与这种指令有关联的数据结构的任何有形介质。术语“机器可读介质”应该相应地被理解为包括但不限于固态存储器、光学介质和磁性介质。机器可读介质的具体示例包括非易失性存储器,该非易失性存储器包括:例如,半导体存储器装置(例如,可擦可编程只读存储器(EPROM)、电可擦可编程只读存储器(EEPROM)、和闪速存储器装置)、磁盘(诸如,内部硬盘和可移动盘)、磁光盘、CD-ROM盘和DVD-ROM盘。

可以进一步使用传输介质通过通信网络2726来传输或者接收指令2724。可以使用网络接口装置2720和多种已知传输协议中的任何一种(例如,HTTP)来传输指令2724。通信网络的示例包括局域网(“LAN”)、广域网(“WAN”)、因特网、移动通话网络、普通老式通话服务(POTS)网络、和无线数据网络(例如,WiFi和WiMax网络)。术语“传输介质”应理解为包括能够存储、编码或者携带用于由机器执行的指令的任何无形介质,并且包括数字通信信号或者模拟通信信号或者用于促进这样的软件的通信的其它无形介质。

上文描述的方法和系统可以通过逻辑或者多个组件、模块、或者机构来执行,或者可以将上文描述的方法和系统实施为逻辑或者多个组件、模块、或者机构。模块可以构成软件模块(例如,体现在(1)非暂时性机器可读介质上或者(2)传输信号中)或者硬件实现的模块。硬件实现的模块是能够执行特定操作的有形单元,并且可以按照特定的方式来配置或者布置。在示例中,一个或者多个计算机系统(例如,独立式计算机系统、客户端计算机系统、或者服务器计算机系统)或者一个或者多个处理器可以通过软件(例如,应用或者应用部分)配置为操作以执行本文描述的特定操作的硬件实现的模块。

在各种示例中,可以将硬件实现的模块机械地或者电子地实施。例如,硬件实现的模块可以包括永久地配置(例如,作为专用处理器,诸如,现场可编程门阵列(FPGA)或者专用集成电路(ASIC))为执行特定操作的专用电路系统或者逻辑。硬件实现的模块还可以包括通过软件暂时地配置为执行特定操作的可编程逻辑或者电路系统(例如,包含在公共处理器或者其它可编程处理器内)。要理解的是,将硬件实现的模块机械地实施在专用的或者永久地配置的电路系统中或者实施在暂时配置的电路系统(例如,通过软件配置的)中的决定可能是出于成本和时间的考虑。

因此,术语“硬件实现的模块”应该理解为包含有形的实体,该有形的实体应该是物理构造、永久地配置(例如,硬接线)或者暂时地或者短暂地配置(例如,编程)为按照特定的方式运行和/或执行本文描述的特定操作的实体。考虑到硬件实现的模块是暂时配置(例如,编程)的示例,不需要将每个硬件实现的模块在任一时刻配置或者实体化。例如,在硬件实现的模块包括使用软件配置的公共处理器的情况下,可以在不同的时间将公共处理器配置为相应不同的硬件实现的模块。因此,例如,软件可以相应地将处理器配置为:在一个时刻组成具体的硬件实现的模块,并且,在不同的时刻组成不同的硬件实现的模块。

硬件实现的模块可以将信息提供至其它硬件实现的模块并且从其它硬件实现的模块接收信息。因此,可以将所描述的硬件实现的模块视为通信地耦合。在多个这种硬件实现的模块同时存在的情况下,可以通过连接硬件实现的模块的信号传输(例如,通过合适的电路和总线)来实现通信。在多个硬件实现的模块在不同时间被配置或者实例化的示例中,例如,在这种多个硬件实现的模块之间的通信例如可以通过存储和检索在该多个硬件实现的模块有权访问的存储器结构中的信息来实现。例如,一个硬件实现的模块可以执行操作并且将该操作的输出存储在其通信地耦合的存储器装置中。进一步的硬件实现的模块可以在稍后的时间访问存储器装置以便检索和处理所存储的输出。硬件实现的模块还可以发起与输入或者输出装置的通信,并且可以对资源(例如,信息的集合)进行操作。

本文描述的示例方法的各种操作可以至少部分地通过暂时配置(例如,通过软件)或者永久配置为执行相关操作的一个或者多个处理器来执行。不论是暂时地配置还是永久地配置,这种处理器都可以组成操作以执行一个或多个操作或者功能的处理器实现的模块。在一些示例中,本文提及的模块可以包括处理器实现的模块。

同样,本文描述的方法可以至少部分地由处理器实现。例如,该方法的至少一些操作可以由一个或者多个处理器或者处理器实现的模块来执行。特定操作的性能可以分布在该一个或者多个处理器中,不仅驻留在单个机器内,也跨多个机器部署。在一些示例中,一个处理器或者多个处理器可以位于单个位置(例如,在家庭环境、办公环境内或者作为服务器群),而在其它示例中,处理器可以分布在多个位置上。

该一个或者多个处理器还可以操作以在“云计算”环境中或者作为SaaS支持相关操作的性能。例如,至少一些操作可以由一组计算机(作为包括处理器的机器的示例)执行,这些操作经由网络(例如,互联网)并且经由一个或者多个适当的接口(例如,应用编程接口(APIs))进行访问。

虽然已经参照特定示例对示例进行了描述,但是要明白的是,在不脱离本发明的更广泛的精神和范围的情况下,可以对这些示例做出不同的修改和改变。因此,说明书和附图被认为是图示性的而不是限制性的。形成本文的一部分的附图通过图示而不是限制的方式示出了可以实践本主题的具体示例。用足够的细节描述了图示的示例以使本领域的技术人员能够实践本文所公开的教导。可以由此利用或者推出其它示例,使得在不脱离本公开的范围的情况下,可以进行结构和逻辑的替换和改变。因此,本详细说明不是限制性的,并且各个示例的范围仅由随附权利要求书以及这种权利要求书所赋予的全部范围的等效物一起限定。

可以在本文中单独地和/或统称地提及本发明的主题的这种示例,术语“发明”仅仅是为了方便而不旨在将本申请的范围自动地限制到任何单个发明或者发明构思(如果事实上公开了多于一个的发明)。因此,虽然本文已经图示并且描述了具体的示例,但是应该理解的是,可以使用能够实现相同目的的任何计算得到的布置来替代本文所示的具体示例。本公开旨在涵盖各种示例的任何和所有的适应或者变型。对于本领域的技术人员来说,在回顾上述描述之后,上述示例的组合和本文未具体描述的其它示例将变得显而易见。

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