CN112751903B - 支持共享文档的脱机编辑的协作环境 - Google Patents
支持共享文档的脱机编辑的协作环境 Download PDFInfo
- Publication number
- CN112751903B CN112751903B CN202010351012.4A CN202010351012A CN112751903B CN 112751903 B CN112751903 B CN 112751903B CN 202010351012 A CN202010351012 A CN 202010351012A CN 112751903 B CN112751903 B CN 112751903B
- Authority
- CN
- China
- Prior art keywords
- document
- collaboration
- servers
- commands
- server
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 claims abstract description 77
- 238000003860 storage Methods 0.000 claims abstract description 65
- 238000012545 processing Methods 0.000 claims description 32
- 230000008859 change Effects 0.000 claims description 13
- 230000004044 response Effects 0.000 claims description 8
- 230000008569 process Effects 0.000 abstract description 16
- 230000015654 memory Effects 0.000 description 21
- 230000001052 transient effect Effects 0.000 description 15
- 230000005540 biological transmission Effects 0.000 description 13
- 238000006243 chemical reaction Methods 0.000 description 13
- 230000009466 transformation Effects 0.000 description 8
- 238000013519 translation Methods 0.000 description 7
- 230000014616 translation Effects 0.000 description 7
- 230000003287 optical effect Effects 0.000 description 5
- 238000003780 insertion Methods 0.000 description 4
- 230000037431 insertion Effects 0.000 description 4
- 230000001360 synchronised effect Effects 0.000 description 4
- 238000000547 structure data Methods 0.000 description 3
- 238000000844 transformation Methods 0.000 description 3
- 238000004590 computer program Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 241000699670 Mus sp. Species 0.000 description 1
- ATJFFYVFTNAWJD-UHFFFAOYSA-N Tin Chemical compound [Sn] ATJFFYVFTNAWJD-UHFFFAOYSA-N 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000012790 confirmation Methods 0.000 description 1
- 229910000078 germane Inorganic materials 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000000737 periodic effect Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 238000005096 rolling process Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 239000000126 substance Substances 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/93—Document management systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/166—Editing, e.g. inserting or deleting
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1097—Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/176—Support for shared access to files; File sharing support
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/18—File system types
- G06F16/182—Distributed file systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/18—File system types
- G06F16/1873—Versioning file systems, temporal file systems, e.g. file system supporting different historic versions of files
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/62—Protecting access to data via a platform, e.g. using keys or access control rules
- G06F21/6218—Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database
- G06F21/6245—Protecting personal data, e.g. for financial or medical purposes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/103—Formatting, i.e. changing of presentation of documents
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/12—Use of codes for handling textual entities
- G06F40/123—Storage facilities
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/12—Use of codes for handling textual entities
- G06F40/151—Transformation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/197—Version control
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1095—Replication or mirroring of data, e.g. scheduling or transport for data synchronisation between network nodes
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Health & Medical Sciences (AREA)
- Health & Medical Sciences (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Databases & Information Systems (AREA)
- Artificial Intelligence (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Bioethics (AREA)
- General Business, Economics & Management (AREA)
- Business, Economics & Management (AREA)
- Medical Informatics (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Document Processing Apparatus (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本公开涉及支持共享文档的脱机编辑的协作环境。本公开描述了允许多个用户创建和编辑文档的文档协作方法和系统。此类方法和系统可支持在设备相对于文档协作服务是脱机的时接收和处理对一个或多个文档的编辑的设备。这些方法和系统可使用基于网络的存储系统(例如,“云存储平台”)来存储基于在一个或多个其他用户脱机时从正在(或已经)使用文档协作服务的用户接收的编辑的表示该文档的最近协作状态的文档(例如,“云存储文档”)。
Description
背景技术
本文所述的实施方案涉及协作环境,其中由一组用户创建和编辑文档,该组用户能够随着时间同时处理该文档以创建和编辑文档。
提供协作环境以由通常同时创建和编辑文档的多个用户创建和编辑文档的数据处理系统已经存在了一段时间。例如,Google Wave和Google Docs是可以提供实时协作的应用的示例。一种用于促进此类应用的技术是被称为操作转换的技术,其支持高级协作软件系统中的一系列协作功能。操作转换最初是针对纯文本文档的协作编辑中的一致性保持和并行控制而开发的。例如,参见Ellis,C.A.;Gibbs,S.J.(1989),“Concurrency controlin groupware systems”(群件系统中的并发控制),《ACM SIGMOD Record》,第18卷第2期,第399-407页。使用操作转换的协作文档环境的示例在发明者为David Underwood、Elizabeth Reid和Peter Su的公布的美国专利申请公布2017/0357675中有所描述。协作文档环境的另一个示例在发明者为Chi Ming To、David Underwood、Man Hon Chan、RalphMelton、Tamara Abell和Tin Yin Lam的公布的美国专利申请公布2017/0359444中有所描述。在一些情况下,先前的协作文档环境不支持在设备脱机时对文档进行编辑的设备;换句话讲,该设备必须联机以便参与协作环境。
发明内容
描述了允许多个用户创建和编辑文档的文档协作方法和系统。此类方法和系统可支持在设备相对于文档协作服务是脱机的时接收和处理对一个或多个文档的编辑的设备。这些方法和系统可使用基于网络的存储系统(例如,“云存储平台”)来存储基于在一个或多个其他用户脱机时从正在(或已经)使用文档协作服务的用户接收的编辑的表示该文档的最近协作状态的文档(例如,“云存储文档”)。在一个实施方案中,当设备已脱机超过预先确定的标准(例如,基于时间的标准或版本号标准或其他标准)时,先前脱机设备可从基于网络的存储系统(例如,“云存储文档”)接收文档以恢复或加入协作,并且可使用所接收的文档对所接收的文档应用改变,其中该改变基于在设备脱机时在该设备处输入但未被服务器确认的命令。在接收到云存储文档之后转换这些命令,并且将已转换命令应用于所接收的文档以进行该改变。在一个实施方案中,该改变基于脱机时输入的命令的转换,并且该转换可基于来自操作历史中接收到的命令的操作,该操作历史可与来自云存储系统的所接收的文档包括在一起。在一个实施方案中,操作历史可包括关于该命令中的每个命令的数据,但不包括文档的内容(而云存储文档包含所有内容),并且这可改善一些实施方案的隐私方面。在一个实施方案中,预先确定的标准可基于文档协作服务保留当前命令队列的时间量,该当前命令队列是从在文档处交互的用户接收的。如果设备已脱机大于该时间段,则在一个实施方案中,它使用来自云存储平台的文档重新加入协作,而不是使用文档的先前使用的本地版本;另一方面,如果设备已脱机小于(或等于)该预先确定的时间段,则设备可使用该文档的其本地版本和来自文档协作服务的队列中的命令来使用在例如已公布的美国专利公布2017/0359444中所述的技术重新加入协作。
根据至少一个实施方案的方法可包括以下操作:在第一设备处,建立与一个或多个服务器的连接,所述一个或多个服务器为多个用户提供文档协作服务以对由所述一个或多个服务器处理并存储在所述一个或多个服务器上的文档进行协作;在所述第一设备处,接收基于在所述第一设备未连接到所述一个或多个服务器时由其他设备对所述文档作出的改变的表示所述文档的最近协作状态的第一文档;在所述第一设备处,对所述第一文档应用一个或多个改变,所述一个或多个改变基于在所述第一设备未连接到所述一个或多个服务器时在所述第一设备处接收到的一个或多个命令;以及从所述第一设备向所述一个或多个服务器传输一个或多个已转换命令,所述一个或多个已转换命令基于在所述第一设备未连接到所述一个或多个服务器时在所述第一设备处接收的所述一个或多个命令。在一个实施方案中,所述方法还可包括确定在所述第一设备未连接到所述一个或多个服务器时由所述第一设备更新的第二文档是否将用于与所述最近协作状态保持一致。在一个实施方案中,所述第二文档将基于以下中的一者或多者而不用于与所述最近协作状态保持一致:(a)与所述第二文档相关联的修订序列号跟与所述第一文档相关联的修订序列号的比较;或(B)自所述第一设备最后一次连接到所述一个或多个服务器以来已过去的时间段;或(C)当所述第一设备未连接到所述一个或多个服务器时由所述一个或多个服务器接收的多个命令。在一个实施方案中,响应于确定所述第二文档将不用于保持一致,接收所述第一文档。在一个实施方案中,在所述第一设备未连接到所述一个或多个服务器时在所述第一设备处接收的所述一个或多个命令在建立与所述一个或多个服务器的所述连接之前被应用于所述第二文档。
在一个实施方案中,本文所述的方法还可包括以下操作:在传输所述已转换命令之后,对存储在所述第一设备处的所述第一文档的更高版本应用回滚操作和重新应用操作;在应用回滚和重新应用操作之后丢失与所述一个或多个服务器的所述连接,然后重新建立连接;响应于重新建立所述连接,确定所述第一文档的所述更高版本将用于与所述协作保持一致(基于时间标准或修订序列号标准等);以及在重新建立所述连接之后,将进一步的回滚和重新应用操作应用于所述第一文档的所述更高版本。在一个实施方案中,所述第一文档是表示并包含所述协作的最近协作状态的服务器实况文档,并且在所述第一文档中表示来自所述协作中的所有用户的所述改变。在一个实施方案中,其中所述第一文档包括作为条目集合的操作历史,并且所述条目集合中的每个条目包括修订序列号和按服务器顺序由所述一个或多个服务器应用于所述第一文档的所有命令的操作的列表,其中所述条目集合基于所述修订序列号按修订序列顺序存储在所述操作历史中,并且所述操作历史提供先前按所述服务器顺序应用于所述第一文档的所有命令的所述操作的顺序时间线。在一个实施方案中,所述操作历史中的所述操作指定文档结构的变化但不包含来自所述第一文档的内容。在一个实施方案中,所述方法还可包括以下操作:确定在所述第一设备未连接到所述一个或多个服务器时由所述第一设备利用脱机命令更新的第二文档将不被用于与所述最近协作状态保持一致。以及由所述第一设备应用对所述第二文档的编辑,其中所述编辑在所述第一设备处被接收并且在所述第一设备正在对所述第一文档应用所述一个或多个改变(基于来自其他用户的命令)时由所述第一设备应用。在一个实施方案中,所述方法还可包括以下操作:在完成对所述第一文档应用所述一个或多个改变之后,丢弃所述第二文档;以及使用所述第一文档的更高版本来与所述协作保持一致。在一个实施方案中,所述第一文档是从与提供所述文档协作服务的所述一个或多个服务器不同的云存储服务服务器接收的,而在另一个实施方案中,所述第一文档是从也提供所述文档协作服务的云存储平台服务服务器接收的。
在一个实施方案中,文档协作服务器或一组此类服务器可执行以下操作:从已与管理文档协作系统的一个或多个服务器连接并且已编辑由所述文档协作系统托管的文档的一组用户中的一个或多个用户接收一个或多个编辑,所述编辑是在第一设备未连接到所述一个或多个服务器时接收到的,并且所述第一设备在未连接到所述文档协作系统时已对所述第一设备上的所述文档的本地版本进行一个或多个改变;在与所述文档协作系统断开连接的同时,建立与已对所述第一设备上的所述本地版本进行所述一个或多个改变的所述第一设备的连接;以及响应于确定所述本地版本太旧,向所述第一设备传输服务器实况文档,所述服务器实况文档表示所述文档协作系统中的所述文档的最近协作状态;以及从所述第一设备接收已转换命令,所述已转换命令基于在所述第一设备未连接到所述文档协作系统时应用于所述本地版本的命令。
本文所述的方法可通过数据处理系统诸如智能电话或台式计算机或膝上型计算机或平板电脑或娱乐系统或其他消费电子设备或服务器系统来实现。本文所述的方法还可由执行存储在一个或多个非暂态机器可读介质(例如,易失性DRAM或非易失性闪存存储器等)上的可执行指令的一个或多个数据处理系统来实现,所述可执行指令使得一个或多个数据处理系统执行本文所述的一个或多个方法。因此,本文所述的实施方案包括方法、数据处理系统和非暂态机器可读介质。
以上概述不包括本公开的所有实施方案的详尽列表。所有系统和方法可根据以上概述的各个方面和实施方案以及以下具体实施方式中所公开的那些的所有合适的组合来实践。
附图说明
本发明以举例的方式进行说明,并且不仅限于各个附图的图形,在附图中类似的标号指示类似的元件。
图1示出了协作环境的示例,该协作环境可包括多个用户系统和一个或多个服务器系统。
图2为示出根据本文所述的一个或多个实施方案的方法的概览的流程图。
图3为示出根据本文所述的一个实施方案的方法的流程图。
图4为示出根据本文所述的一个实施方案的方法的流程图。
图5示出了操作历史的示例,该操作历史可包括修订序列标识符以及对应的操作。
图6示出了设备上的活动文档的示例,该设备可相对于文档协作服务是脱机的。
图7示出了在设备已重新建立与协作环境的连接之后使用暂存文档的过程的示例。
图8A示出了在至少一个设备脱机时可存在的协作环境的示例。
图8B示出了设备刚回到与协作环境联机之后的该协作环境的示例。
图8C示出了先前脱机设备处的协作环境的示例,该先前脱机设备现已联机并且已从云存储平台接收到更新。
图8D示出了最近已与协作服务重新联机并且已接收到文档的更新的云存储版本并且已在设备上创建了暂存文档的设备的示例。
图8E示出了在命令已被转换并应用于设备上的暂存文档之后的图8D的设备的示例。
图8F示出了根据一个实施方案的将已转换命令发送至协作服务之后的图8D的设备。
图9示出了可用于实现或执行本文所述的一个或多个实施方案的数据处理系统的示例。
具体实施方式
将参考以下论述的细节来描述各种实施方案和方面,并且附图将对各种实施方案进行说明。以下说明书和附图为例示性的,并且不应被理解为限制性的。描述了许多具体细节,以提供对各个实施方案的全面理解。然而,在某些实例中,熟知的或常规的细节并未被描述,以便提供对实施方案的简明论述。
在本说明书中提到的“一个实施方案”或“实施方案”是指结合该实施方案所述的特定特征、结构或特性可被包括在至少一个实施方案中。在本说明书中的各个位置出现短语“在一个实施方案中”不一定都是指同一个实施方案。在随后的附图中所描绘的过程由包括硬件(例如,电路、专用逻辑部件等等)、软件或这两者的组合的处理逻辑部件来执行。虽然下文按照某些顺序操作来描述该过程,但应当理解,所描述的某些操作可以不同的顺序执行。此外,某些操作也可并行执行而非按顺序执行。
传统协作架构中的文档改变可由命令设计模式驱动。命令对象可以封装对文档的改变。可在一组命令对象中将命令序列化并发送到实时协作会话中的另一个节点(例如,另一个数据处理系统),使得可对文档的任何本地副本应用相同的改变。如果会话中的所有节点以相同的顺序执行相同的命令,那么它们最终将在同一个文档上会聚。为了实现这一点,传统的协作环境包括服务器,该服务器包含根据命令构建的文档(服务器副本),该命令是按照服务器从环境中的客户端接收到该命令的顺序(称为服务器顺序)执行的。服务器还将它接收到的每个命令广播给所有参与的客户端(按服务器顺序),从而允许那些客户端在同一文档上会聚。因为客户端在将自己的命令发送到服务器之前在本地执行了这些命令,所以每当该客户端从服务器接收远程命令(其集合可以称为“diff”)时,客户端都必须回滚由其本地命令进行的改变(在被处理时未被服务器确认),应用由远程进行的改变,将转换(例如,操作转换)应用到其本地命令(已回滚),然后应用已转换的本地命令。客户端将本地命令存储在传出命令队列中,本地命令保留在该队列中并且它们参与回滚以及重新应用,直到它们在从服务器接收到的“diff”中被“确认”为止。
用于在多个作者或用户之间创建文档的协作环境通常涉及多个不同的用户系统,每个用户系统由用户和一个或多个服务器系统操作。图1示出此类协作环境的示例。图1所示的协作环境包括通过一个或多个网络102耦接到多个用户系统诸如用户系统103和用户系统104的一个或多个服务器系统101。图1中的环境还可包括可从一个或多个服务器系统101接收服务器实况副本并存储这些服务器实况副本以用于以后传输到用户系统诸如用户系统103和104的一个或多个云存储系统100(例如,来自加利福尼亚州库比蒂诺的苹果公司的iCloud),如下文进一步所述。一个或多个网络102可以是例如互联网。在其他实施方案中,服务器系统可通过本领域已知的技术直接连接到用户系统中的每个用户系统,或者可通过局域网连接到用户系统等等。图1中所示的系统中的每个系统可为例如台式计算机或膝上型计算机或平板电脑或其他消费电子设备,尽管服务器系统通常使用至少有些像台式计算机或可提供类似或更大的处理能力的其他数据处理系统的之类的设备来实现。在一个实施方案中,系统中的每个系统可执行本机应用程序,该本机应用程序被设计用于创建和编辑文档,诸如文字处理文档、电子表格文档、图形文档、呈现文档(诸如Keynote或PowerPoint)或可在协作环境中创建的其他类型的文档。因此,用户系统103和104可各自包括本机应用程序,诸如用于在协作环境中创建文档的文字处理应用程序,并且该服务器系统可包括该本机应用程序的服务器版本以从用户系统接收命令和数据并将对文档的更新传输到一些或所有用户系统。在另选的实施方案中,用户系统可针对该系统中的至少一些系统使用网页浏览器,该网页浏览器可显示包括嵌入式软件的网页,该嵌入式软件可使网页能够在协作环境中显示和处理文档。例如,用户系统103可包括用于在协作环境中处理文档的本机应用程序,而用户系统104可使用常规网页浏览器,该常规网页浏览器被配置为处理网页内的JavaScript或其他软件以使得该网页浏览器能够在协作环境中呈现文档,以及处理本地命令以实现本地副本中的改变,以及将改变发送至服务器并从服务器接收改变,以及以本文所述的方式处理这些改变。
图1示出了如何通过从每个用户系统向一个或多个服务器系统101传输命令以及通过从其他系统诸如用户系统103和用户系统104接收命令来执行协作。具体地,用户系统103传输其命令,该命令指定对该用户系统在传输107A中的文档的副本的改变,并且这些命令作为传输107B从服务器系统101传输到用户系统104。类似地,用户系统104传输包括命令的传输108A,该命令指示由用户系统104的用户对系统104上的本地副本所作的改变。传输108A由一个或多个服务器系统101接收并被处理以对服务器副本进行改变,并且在进行这些改变之后,服务器传输包括命令的传输108B,该命令指示由系统104的用户所做的供用户系统103接收的改变。在一个实施方案中,服务器维护被认为是文档的实况的服务器副本,并且该系统以如下方式被实现:其中每个客户端(诸如用户系统103和用户系统104)必须以相同的顺序(通常为服务器顺序)执行相同的命令,使得每个用户的文档在处理所有命令之后看起来相同。该命令的顺序由服务器指定并且可被称为服务器顺序,并且服务器上的副本可被称为服务器副本以及可被视为在协作环境中创建的文档的“实况”。在一个实施方案中,每个用户系统将传输指示其本地副本的改变的命令和数据,该命令和数据先前未被传输到该服务器系统,或者如果它们先前已被传输,则尚未在被接收和处理时被该一个或多个服务器系统101确认。
现在将结合对图2的参考来提供根据一个实施方案的方法的概览。图2中所示的方法可用于协作中的联机设备;此外,在一个实施方案中,图2中所示的方法可用于在短时间段内脱机并且然后在协作服务支持短期暂时断开条件下重新加入协作的设备。图2中所示的方法可在图1所示的系统中实现,以用于提供用于创建和编辑文档的协作环境。在操作201中,一个或多个服务器系统诸如服务器系统101可(从一个或多个客户端系统)接收对协作环境中的文档的改变。这些改变可由与该文档相关联的一个或多个命令和数据来指示。在一个实施方案中,每个客户端可仅发送自在被接收和处理时被该一个或多个服务器系统诸如服务器系统101确认的先前一组命令以来在该客户端系统处执行的最近命令。因此,不是将整个文档从客户端传输到服务器以及要求服务器确定该改变是什么,而是每个客户端自行确定自上次传输在被接收时被服务器系统确认的命令以来发生了什么改变。在一个实施方案中,由服务器系统对接收的确认是通过以下方式执行的:每个客户端检查从服务器接收到的改变以通过在来自服务器的改变中查找(然后忽略)命令来确定是否已接收到由客户端发送的该命令。在服务器在操作201中接收到来自一个或多个客户端系统的对文档的改变之后,操作203中的服务器系统通过在服务器处对服务器的副本(“服务器副本”)执行所接收的改变(表示为命令和相关联的数据)来更新服务器系统处的文档。在一个实施方案中,服务器副本被认为是文档的“实况”,并且服务器以特定顺序在命令列表中进行存储,该特定顺序是基于从每个用户系统(诸如图1中所示的用户系统103和104)接收到的变化而随时间在服务器副本上执行的命令的服务器顺序。在服务器系统于操作203中更新文档之后,其随后可在操作205中传输文档的新版本(例如,改变的列表)。具体地,在操作205中,服务器系统可向所有客户端系统传输自服务器系统上次传输改变以来所进行的最后一组改变。在一个实施方案中,仅传输那些改变而不传输整个文档。在一个实施方案中,不再次传输由服务器系统传输到客户端系统的先前命令。然后在操作207中,接收来自操作205的改变的传输的每个客户端系统将执行回滚操作。在一个实施方案中,回滚操作将回滚在被接收时未被服务器系统确认的本地改变或命令。换句话讲,将回滚在用户系统上执行的尚未发送至服务器系统或者如果已发送但在被接收时未被服务器系统确认的每个本地命令,从而使该文档将其状态改变为在被回滚的所有此类本地命令之前存在的状态。回滚进程将撤销尚未被发送或在被接收时尚未被确认的每个命令。这在客户端系统处提供了一个一致性点,并确保客户端系统处本地副本上的所有命令将按照与服务器副本上的命令相同的顺序执行。然后在操作209中,用户系统诸如用户系统103或用户系统104在客户端系统处应用来自服务器的改变。换句话讲,在操作205中通过传输操作接收到的改变被应用于操作209中的本地副本的回滚版本。然后在操作211中,每个用户系统通过使用例如已知的操作转换来转换被回滚的本地改变,以转换那些本地改变或本地命令,然后这些本地改变或本地命令可在操作212中被重新应用于本地副本。图2中所示的方法通常随着时间而重复,因为每个用户系统接收本地输入并将那些本地输入传输至服务器系统并接收来自服务器的改变,该改变反映服务器副本随时间的改变。在每种情况下,因为该循环重复,所以图2中所示的方法随着时间而重复。
在实时协作环境中,必须根据其他远程客户端的编辑对本地客户端对文档的编辑进行转换,以便使文档最终在所有客户端上保持一致,而不会发生冲突。因此,如果本地客户端在没有网络访问托管文档的协作服务器的情况下长时间段编辑文档(脱机编辑),则该客户端将需要在重新获得网络连接时下载所有居间远程编辑,以便转换本地编辑并赶上表示文档的最新状态的服务器实况文档。在其中使用命令设计模式封装编辑的传统协作系统中,这可能会产生显著的成本。例如,完全描述编辑的命令可消耗大量的磁盘空间、存储器和带宽(例如,如果它们封装了大图像或电影的插入)。这既消耗了客户端资源也消耗了服务器资源,并增加了脱机客户端再次联机后该脱机客户端需要赶上的时间量。命令可以包含添加到文档的内容诸如图像、电影或文本的完整编码。通过保留用户打算在某个时刻删除的潜在个人可识别信息,存储这些命令的长记录可能会损害用户隐私。在服务器上长时间段存储命令还可能在某些地区违反有关长期存储个人可识别信息的隐私法规。
本文所述的实施方案允许系统通过在一个实施方案中使用云存储和操作历史的组合来重新连接和赶上(或恢复)脱机编辑,以保持隐私并且还提供优于常规文档协作环境的经改善的性能。本文所述的一个或多个实施方案可以使用任何云存储平台来实现这一点,并且可以实现这一点使得允许客户端在赶上的同时继续编辑文档,从而对于用户来说尽可能无缝地完成该体验。在一个实施方案中,系统可使用操作历史,该操作历史可存储来自随时间应用于文档的命令的操作。在一个实施方案中,操作历史可存储与每个命令相关的结构数据,而不包括可包括在每个命令中的用户数据;在一个实施方案中,可将每个命令视为包括用户数据和该结构数据的实体。下文提供此类用户数据和结构数据的示例。此外,本文所述的实施方案可以使用操作转换操作来转换如本文所述的命令。在一个实施方案中,操作历史可直接存储在文档文件中,该文档文件是针对参与云存储平台中的协作的用户而存储的。该云存储平台可用于在参与协作环境的客户端上进行自动同步。与云存储平台的同步可独立于协作环境来进行,并且可随时间而定期地执行以确保每个客户端具有从云存储平台接收的文档的最新副本。在一个实施方案中,协作服务器可定期地将协作环境中的文档的最新服务器副本上载至云存储平台,然后可如下文进一步所述使用该最新服务器副本。在一个实施方案中,可使用操作转换的变体,其中操作仅描述对文档结构的改变而不描述内容。例如,操作可描述在文本运行中在给定索引处插入的字符数,而不包含已插入的实际文本。插入的该实际文本可从云存储平台提供的服务器副本获得。因此,该操作历史所需的存储可以是最小的,并且该操作历史可不包含任何个人可识别信息。当客户端设备脱机时,它可以本地累积命令队列,该队列可被优化地应用于文档的本地副本。当客户端设备重新连接到协作服务时,它可以等待云存储服务通过提供具有最近操作历史的文档的最新版本来同步文档的最新版本。然后,可以使用该操作历史来转换优化地应用的命令,使得随后将这些命令发送到其他客户端,例如,通过将已转换命令发送到服务器,然后该服务器将已转换命令发送到其他客户端。
根据一个实施方案的方法在图3中示出,并且该方法可由相对于协作服务已经脱机的客户端设备执行,该协作服务包括耦接到云存储平台的一个或多个协作服务器。在图3所示的方法中,脱机客户端设备从该脱机客户端设备的用户接收到命令,而该脱机客户端设备未连接到协作服务(因此,相对于协作服务是脱机的)。此外,在该方法中,其他客户端设备连接到协作服务并且在该脱机设备脱机时正向文档提供改变。图3中所示的方法示出了脱机设备可如何重新建立文档的当前状态的示例。在操作301中,第一设备可建立与一个或多个服务器的连接,该一个或多个服务器为多个用户提供文档协作服务。在操作303中,客户端设备然后可响应于建立连接来接收表示最近协作状态的第一文档,并且该第一文档可以是基于来自其他设备的在第一设备未连接到协作服务时所作的改变的文档的服务器副本或实况文档。在一个实施方案中,该第一文档可从存储服务器副本的云存储平台被接收,并且第第一文档可包括文档的完整整个副本。然后在操作305中,客户端设备可对该第一文档应用一个或多个改变,其中这些改变基于在该设备未连接到协作服务时应用于本地文档的命令。这些改变是通过在该设备未连接到协作服务时转换应用于本地文档的命令来创建的;这些命令的转换可使用常规的操作转换技术来基于来自其他设备的由协作服务器所接收的命令来转换这些命令。一旦所有脱机命令已被转换以创建改变该第一文档的已转换命令,则该第一设备可随后将该已转换命令传输到协作服务器,以使该协作服务器生成在该协作服务器处维护的第一文档的更新版本,并且还可将该已转换命令应用于第一文档以在该第一设备处创建文档的最新版本。
如本领域已知的,操作转换是一种技术,在该技术中,当以不同于最初执行命令的顺序来执行该命令时,可以保留该命令的语义意图。这是通过基于由先前命令(以服务器顺序)所作的改变来转换该命令而完成的。例如,如果优化地应用了在位置零处插入单词“world”的命令,并且接收到在位置零处插入文本“hello”(带空格)的较早的(按服务器顺序)传入命令,那么该优化地应用的命令可由按服务器顺序较早的该传入命令来转换以在位置六处插入其(被转换的命令的,即插入文本“world”)文本,从而导致当按服务器顺序执行这两个命令时,插入“hello world”。可通过将每个命令表示为可针对彼此进行转换的少量原语操作的集合来执行该转换。无论初始顺序如何,该转换应该在任何客户端或服务器上生成相同的结果,从而满足在任何转换之后按可以是服务器顺序的相同顺序来执行相同命令的要求。此类系统描述于以下出版物中,诸如Ellis,C.A.;Gibbs,S.J.(1989),“Concurrency control in groupware systems”(群件系统中的并发控制),《ACM SIGMODRecord》,第18卷第2期,第399-407页。
图4示出例示了根据一个实施方案的更详细方法的流程图。图4中所示的方法可由相对于协作服务已脱机的客户端设备执行,该协作服务已接收到相对于该协作服务联机的其他设备的改变,并且执行图4的方法的客户端设备可在该客户端设备相对于协作服务脱机时从该客户端设备的用户接收脱机命令。在图4的操作401中,当该第一设备从提供文档协作服务的一个或多个服务器脱机时,该第一设备接收命令以编辑在该第一设备处维护的文档的本地版本。该文档的本地版本可被称为“活动文档”(或“第二文档”),该活动文档基于在第一设备相对于协作服务脱机时所接收的命令而被编辑。然后在操作403中,该第一设备连接到提供文档协作服务的一个或多个服务器,并且现在该第一设备相对于协作服务恢复联机。
然后,该设备和该协作服务的一个或多个服务器执行操作405中所示的操作,其中该操作中的参与者确定在该第一设备处维护的本地版本是否太旧而不能参与当前的联机协作服务。在一个实施方案中,操作405可使用修订序列号来确定本地版本是否太旧。例如,协作服务器可以接收本地版本的修订序号,并将该修订序号与协作服务器处的文档版本的修订序号进行比较。在另一个实施方案中,由操作405渲染的决策可基于时间,诸如在协作服务器处的截短历史的时间段。例如,如果第一设备相对于协作服务已脱机达一时间段,该时间段长于协作服务器处的截短历史的时间段(例如,5分钟),则确定本地版本太旧而不能参与当前的联机协作服务。在一个实施方案中,协作服务器可仅保留从客户端设备接收的最近一组命令,并且该最近一组命令可基于时间(诸如所接收的命令的最后5分钟)而受限;将废弃超过最后5分钟的任何命令。如果客户端设备已脱机超过5分钟,则服务器无法提供命令列表以使客户端设备与协作保持同步。在另一个实施方案中,由操作405渲染的决策可基于协作服务器在设备脱机之后接收到的命令的数量。如果操作405确定本地版本不是太旧,则处理继续进行到操作407,该操作可使用图2中所示的方法来保持第一设备处的本地版本的状态。只要第一设备相对于协作服务保持连接并且联机,则操作407可重复419,直到第一设备再次恢复脱机,在这种情况下,操作407将反转421回到操作401。在操作407中,第一设备使用其本地副本基于来自服务器的改变来更新该本地副本,而不是从云存储平台接收整个文档的服务器实况副本(其发生在下文所述的操作409中)。如果操作405确定本地版本太旧而不能参与当前的联机协作服务,则操作409遵循操作405。
在操作409中,第一设备接收表示文档的最近协作状态的第一文档。在一个实施方案中,该第一文档是从云存储系统接收的,并且该第一文档表示由云存储平台维护的服务器实况副本,并且该第一文档可包括正在协作环境中创建的文档的整个内容。在一个实施方案中,协作服务器可以是独立的并且不同于云存储平台,并且协作服务器可以通过网络周期性地将服务器实况文档上载到该云存储平台;在另一个实施方案中,可将云存储平台和协作服务器在公共系统中组合在一起。在一个实施方案中,第一文档可包含文档的内容以及将在下文进一步描述的操作历史。在该协作系统的一个实施方案中,共享文档诸如第一文档的整个内容可永久地存储在云存储平台上,在该云存储平台中,文档的副本随着每次编辑时该文档改变而同步到协作中涉及的所有客户端,但不必实时地,并且不具有用于解决来自多个客户端的冲突并发编辑的内置设施。在此类系统中,所有用户编辑的实时更新和保存由协作服务器在该文档的临时活动副本上进行处理,而该协作服务器负责将其文档的副本周期性地上载为仅应用了服务器顺序命令的实况文档,并且协作服务器将该实况文档上载至云存储平台。在该系统中,客户端设备可经由来自云存储平台的周期性同步在后台下载实况文档的更新版本,但客户端设备的用户可始终与可包含优化地应用的编辑的文档的临时活动副本进行交互。
在操作411中,第一设备可使用操作转换技术来转换用于编辑本地版本的脱机命令(例如,在操作401中)并将那些已转换命令应用于可被称为暂存文档的第一文档。在该操作411中,操作可使用操作转换的变型形式,其中所述转换仅包含关于编辑的结构的信息(例如,结构数据),而不包含该编辑的内容。例如,将文本“hello”插入在位置0(零)处具有标识符A的文本存储中的命令:
插入文本(“hello”,A,0)
具有仅描述插入的位置和长度但不描述插入的文本(可被视为用户数据)本身的对应操作:
替换范围(A,{0,0},5)。
此处,A是文本存储的标识符,{0,0}是要替换的文本存储中的范围,并且5是该替换的长度。在不包含任何实际内容(例如,用户数据)的情况下,该操作(在本示例中通过结构数据指定)足以转换修改相同文本存储的其他命令。因此,在操作411中使用的操作转换技术可以使用操作转换的这种变型形式,其中内容不包括在用于转换命令的转换数据中。在一个实施方案中,来自已转换命令的操作可包括在下文进一步描述的操作历史中,并且第一设备可使用来自操作411中的操作历史中的已转换命令的操作。图5示出操作历史的示例。在一个实施方案中,在不对第一文档进行任何回滚的情况下执行操作411(与图2中的操作207中所示的协作方法不同)。
在一个实施方案中,当正在执行操作411中的转换时,第一设备还可在操作413中接收并应用另外的编辑本地版本(也称为“活动文档”)的命令,同时在操作411中将已转换命令应用于该第一文档。这允许用户在执行操作411的同时继续编辑本地版本;这还允许用户继续访问该文档,并且使得用第一文档替换本地版本对用户来说看起来是无缝的。因此,作为该示例中的第一设备的客户端设备可在文档正在同步并且现有命令正被转换的同时继续优化地应用命令。下文将通过在客户端仍同时编辑较旧的活动文档的同时暂存该文档的副本并进行处理来进一步描述这一点。当转换所有优化地应用的命令后,可以在用户界面中用暂存文档无缝地替换活动文档。下文结合图8A至图8F来进一步描述这一点。然后,在操作415中,第一设备可将已转换命令在外发命令队列中传输到协作服务器。这些已转换命令是在操作411中转换的命令。服务器可使用这些已转换命令来更新服务器副本,并且图2中所示的操作203提供此类更新的示例。在操作411和413已将已转换命令应用到第一文档之后,第一设备可执行操作417。在操作417中,第一设备将本地版本替换为第一文档(称为暂存文档),该第一文档随后成为该第一设备处的新本地版本或活动文档。操作415可在操作417之后执行。然后,处理可反转恢复到操作407,该操作可使用图2所示和上文所述的方法与协作服务器在协作中维护该第一设备处的本地版本;一旦该第一设备已重新联机并且已完成图4所示的方法的处理,该第一设备只要其保持联机就可使用其本地版本保持与协作的同步,并且只要其保持联机(或在操作405中的测试的边界内)就不需要使用来自云存储平台的服务器实况副本来保持同步。
在一个实施方案中,每次协作服务器将一组命令应用于服务器副本时,该协作服务器使该文档的修订序列号递增,该修订序列号可以是在按服务器顺序应用命令时对应于该文档的每个连续状态的单调递增的整数。当客户端设备从服务器接收到一组命令时,该客户端设备使用相同的修订序号接收这些命令,当客户端应用这些命令时,该客户端应用到该文档的其本地副本。在一个实施方案中,修订序列号可包括在操作历史中,该操作历史可包括在存储在云存储平台上的服务器实况副本中。
图5示出了操作历史的示例,该操作历史包括修订序列号和关于每个修订序列号处的操作的信息;在一个实施方案中,该操作可描述如上所述的命令,而不包括可在从如本文所述的云存储平台获得的文档中找到的内容。图5中的操作历史501包括至少3组操作505、509和513。在每组操作中,描述了该操作或命令中的一者或多者,并且每个组包括修订序号503、507和513。操作历史501可为条目集合,其中每个条目包含:在给定修订序列处由服务器应用于文档的服务器副本的所有命令的操作转换操作(其中在该操作中指定修订序列号内的一个或多个命令的顺序,诸如操作组505);以及用于将这些命令按服务器顺序应用于服务器实况副本文档的修订序列号。这些条目可以按修订序列号顺序存储在操作历史中,从而在该操作历史中提供先前按服务器顺序应用于该文档的所有命令的操作的顺序时间线。在一个实施方案中,由于操作历史中的操作只能够包含文档结构中的改变而不包含内容,因此该操作历史中的操作可能显著小于最初创建该操作的命令。此外,该操作可不包含任何个人可识别信息,因此该操作可以帮助保护隐私。在一个实施方案中,操作历史可存储在服务器实况文档中,该服务器实况文档从协作服务器上载到云存储平台,然后存储在可作为永久云存储的该云存储平台上。因为在一个实施方案中,该服务器将条目添加到每个文档修订序列号的操作历史,因此最后一个操作历史条目的修订序列将与文档的修订序号相匹配。
图6和图7示出了具有活动文档(其为脱机客户端上的本地副本)的脱机客户端可如何使用操作历史来赶上到协作服务中的协作的当前状态的示例,该操作历史可存储在例如在云存储平台上或提供协作服务的一个或多个服务器上存储的服务器实况文档中。图6示出了脱机客户端的活动文档601,并且还示出了包括命令603、605和607的外发命令队列。当客户端设备相对于协作服务脱机时,输入命令603、605和607。命令603、605和607存储在外发命令队列中,因为在从协作服务器接收到它们时尚未被确认。因此,图6表示一个示例,其中客户端设备的用户已通过当托管活动文档601的客户端设备脱机时在活动文档601上输入和执行命令来执行文档编辑。如图6所示,该客户端设备在文档修订序列n处存储文档,并且命令603、605和607被优化地应用于文档并在外发命令队列608中按执行顺序排队。在修订序列n处具有优化地应用的本地命令的文档的该副本是活动文档,该活动文档在脱机客户端设备上的用户界面中对用户是可见的。在客户端设备连接到协作服务之后,该客户端设备可从云存储平台获得存储在该云存储平台上的服务器实况文档的最新版本,该最新版本在图7中所示的示例中位于修订序列m处。文档的该副本为在一个实施方案中对用户是尚不可见的暂存文档611。如图7所示,基于暂存文档的操作存储612,使用操作转换操作615来对外发命令队列608中的命令进行转换,该暂存文档的操作存储在一个实施方案中包括操作历史(诸如,图5中所示的操作历史),该操作历史可用于创建该操作转换操作以在修订序列n和修订序列m之间转换命令,该修订序列m是协作服务中的文档的最新版本。操作转换操作615分别将命令603、605和607转换成命令603A、605A和607A,如图7中所示。然后将这些已转换命令应用于暂存文档611,并且还将这些命令发送至协作服务器。图6和图7中所示的操作对应于图4所示的操作,例如,在客户端设备脱机时接收命令对应于图4中的操作401。转换操作615对应于图4中的操作411,并且已转换命令到协作服务器的传输对应于图4中的操作415。在一个实施方案中,在将已转换命令应用于暂存文档之后(从而成为客户端设备上的活动文档本身),可将该活动文档无缝地替换为用户界面中的暂存文档,并且该替换可在该已转换命令被传输至协作服务器并在接收时被协作服务器确认之前进行。在将已转换命令应用于暂存文档之后,可恢复使用上述图2的方法的传统协作。需注意,代替将本地命令回滚至其被优化地应用的文档修订序列n,该本地命令被转换,然后在修订序列m处直接应用于新下载的文档。在一个实施方案中,图6和图7中所示的示例可使用图4中的操作413。由于对暂存文档的处理在用户界面中是不可见的,直到所有本地命令已被转换和应用,因此可以在活动文档中继续用户编辑的同时来执行该处理。换句话讲,该用户可在执行操作转换615时继续编辑该活动文档。当用户继续将优化地应用的外发命令排队到活动文档时,这些命令可被附加到要从修订序列n转换到修订序列m的现有外发命令队列并应用于该暂存文档。当外发命令中的所有命令已被转换并应用于暂存文档时,该暂存文档可无缝地替换如上所述的用户界面中的活动文档。
图8A、图8B、图8C、图8D、图8E和图8F示出了脱机客户端设备可如何恢复参与与可包括一个或多个协作服务器的协作服务的协作的另一个示例。在图8A中,设备A是脱机的,而设备B是联机的并且正在将由命令表示的编辑发送至包括截短历史的709的协作服务器703,该截短历史可包括命令和基于从设备B接收到的命令的(相对于那些命令的)内容。设备A包括在设备脱机时已在该设备A处输入的脱机命令705。设备B已将许多命令(包括命令B10至B200)发送至协作服务器703,而设备A已脱机。如图8A中所示,设备A包括表示修订2处的文档X的协作高速缓存文档701(其为文档的本地副本或者设备A的文档的本地版本),而设备B包括协作高速缓存文档707(其为文档的本地副本或者设备B的文档的本地版本),该协作高速缓存文档表示在修订201(在修订2之后对文档X具有许多修订)处的文档X。协作服务器703包括服务器实况文档的副本并且还包括截短历史709,该截短历史可用于向客户端设备提供已转换命令以确保客户端设备在协作期间相对于服务器副本是最新的。可以针对已经从参与协作的所有客户端设备接收到的最近命令(诸如最后5分钟内的最近命令)来维护截短历史709。该截短历史709可用于操作205(图2中)以将最近的命令传输到协作中联机的所有客户端设备。协作服务器703包含位于修订201处的服务器实况文档X。
图8B示出设备A再次联机并且与协作服务器703重新连接时的状态。协作服务器703可周期性地并重复地将服务器实况文档的最近版本上载718至云存储平台719。该服务器实况文档可包括该服务器实况文档的整个内容并且还包括操作历史,诸如操作历史711,其可类似于图5中所示的操作历史。在一个实施方案中,操作历史711可包括关于命令的信息,而不包括由该命令处理的内容。具有操作历史711的服务器实况文档的上载可使得云存储平台719存储具有该操作历史的服务器实况文档,并且还可使得云存储平台将具有操作历史的服务器实况副本推送到已恢复联机的脱机客户端设备,或者使得云存储平台等待此类客户端设备请求具有该操作历史的服务器实况文档的副本。因此,设备A可从云存储平台719接收716服务器实况文档的更新版本,并且该更新的云存储版本可替换图8B中所示的旧的本地云存储版本715。可以看出,旧的本地云存储版本715包括更旧的操作历史717。当设备A恢复联机时,设备A(设备702)可引起针对设备A上的文档的当前版本的修订号或一些其他数据的传输710。响应于该传输710,协作服务器可发送消息712,该消息指示设备A上的本地副本(其为协作高速缓存文档701)太旧而无法参与或赶上协作服务。在一个实施方案中,传输710和消息712可为图4中所示的操作405的一部分。在另一个实施方案中,协作服务器703可将自设备A上次连接到协作服务器703以来已过去的时间段与截短历史709的时间段进行比较;例如,如果截短历史709限于对文档的命令/改变的最后5分钟,并且设备A已与协作服务器703断开超过5分钟,则设备A的协作高速缓存文档701可能太旧。应当理解,截短历史709的最后5分钟时段是一个可能时间段的示例,并且可使用更长或更短的针对截短历史的其他时间段。因此,设备A请求或被推送服务器实况文档的更新版本,该更新版本替换旧的本地云存储版本715。这在图8C中示出,其中设备A(设备702)现在具有本地云存储版本721,该本地云存储版本包括更新的操作历史,该更新的操作历史是来自协作服务器703的操作历史711。如操作8D中所示,设备A可复制本地云存储版本721以创建初始匹配本地云存储版本721的内容的暂存文档723。然后,如图8E所示,通过以下方式来转换723A该暂存文档:获取每个脱机命令(例如,A2)并利用操作历史711将其进行转换来创建已转换脱机命令,该已转换脱机命令随后被发送到协作服务器以添加到截短历史来创建图8F中所示的截短历史709A。然后可通过将已转换命令应用于该暂存文档来编辑该暂存文档,该暂存文档随后可用于替换作为协作高速缓存文档701的活动文档。图8F中示出了用已转换暂存文档替换旧的活动文档。在该已转换暂存文档成为客户端设备702上的新活动文档701A之后,可恢复正常协作诸如图2所示的协作方法,同时设备702相对于协作服务保持联机。
图9示出了可与一个实施方案一起使用的数据处理系统800的示例。例如,系统800可被实现为提供图1所示的系统,诸如系统103、104、101和100。需注意,虽然图9示出了设备的各种部件,但是其并不旨在表示使这些部件互连的任何特定架构或方式,因此此类细节与本公开并无密切关系。还应理解,具有较少部件或可能具有较多部件的网络计算机和其他数据处理系统或其他消费电子设备也可用于本公开的实施方案。
如图9所示,数据处理系统形式的设备800包括耦接到一个或多个微处理器805、ROM(只读存储器)807、易失性RAM 809和非易失性存储器811的总线803。该一个或多个微处理器805可从存储器807、809、811检索指令并执行所述指令以执行上述操作。该一个或多个微处理器805可包含一个或多个处理内核。总线803与这些各种部件互连在一起,并且还将这些部件805、807、809和811互连至显示控制器和显示设备813,以及互连至外围设备诸如输入/输出(I/O)设备815,该输入/输出(I/O)设备可以是触摸屏、鼠标、键盘、调制解调器、网络接口、打印机和本领域熟知的其他设备。通常,输入/输出设备815通过输入/输出控制器810耦接到系统。易失性RAM(随机存取存储器)809通常被实现为需要连续供电以刷新或保持存储器中的数据的动态RAM(DRAM)。
非易失性存储器811通常为即使在系统断电后也保持数据(例如,大量数据)的磁性硬盘驱动器、或磁光驱动器、或光驱、或DVD RAM、或闪存存储器、或其他类型的存储器系统。通常,该非易失性存储器811也可以是随机存取存储器,虽然这并非是必需的。虽然图9显示该非易失性存储器811为直接耦接到数据处理系统中的其余部件的本地设备,但应当理解,本公开的实施方案可利用远离系统的非易失性存储器,诸如通过网络接口诸如调制解调器或以太网接口或无线网络而被耦接到数据处理系统的网络存储设备。该总线803可包括通过本领域熟知的各种桥接器、控制器和/或适配器相互连接的一个或多个总线。
上文所述内容的部分可以利用诸如专用逻辑电路之类的逻辑电路或者利用微控制器或者其他形式的执行程序代码指令的处理核来实现。从而,可利用程序代码诸如机器可执行指令来执行上述讨论所教导的过程,该机器可执行指令使得机器执行这些指令以执行某些函数。在该上下文中,“机器”可为将中间形式(或“抽象”)指令转换为特定于处理器的指令(例如,抽象执行环境诸如“虚拟机”(例如,Java虚拟机)、解译器、公共语言运行时、高级语言虚拟机等)的机器,和/或设置在被设计用于执行指令的半导体芯片(例如,利用晶体管实现的“逻辑电路”)诸如通用处理器和/或专用处理器上的电子电路。上述讨论所教导的过程也可通过(作为机器的替代或与机器结合)电子电路来执行,该电子电路被设计用于执行过程(或其一部分)而不执行程序代码。
本公开还涉及一种用于执行本文所述的操作的装置。该装置可专门被构造用于所需的目的,或者可包括由存储在设备中的计算机程序选择性地激活或重新配置的通用设备。此类计算机程序可被存储在计算机可读存储介质中,诸如但不限于任何类型的盘,包括软盘、光盘、CD-ROM和磁光盘、DRAM(易失性)、闪存存储器、只读存储器(ROM)、RAM、EPROM、EEPROM、磁卡或光卡、或适用于存储电子指令的任何类型的介质,并且每一者均耦接到设备总线。
机器可读介质包括用于以机器(例如计算机)可读形式存储信息的任何机构。例如,机器可读介质包括只读存储器(“ROM”);随机存取存储器(“RAM”);磁盘存储介质;光学存储介质;闪存设备;等。
制品可用于存储程序代码。存储程序代码的制品可被实施为但不限于一个或多个存储器(例如,一个或多个闪存存储器、随机存取存储器(静态、动态或其他))、光盘、CD-ROM、DVD ROM、EPROM、EEPROM、磁卡或光卡、或适用于存储电子指令的其他类型的机器可读介质。也可借助被包含在传播介质(例如,经由通信链路(例如网络连接))中的数据信号来将程序代码从远程计算机(例如,服务器)下载到请求计算机(例如,客户端)。
已按照对设备存储器内的数据位进行操作的算法和符号表示来呈现前面的详细描述。这些算法描述和表示是数据处理领域的技术人员所使用的工具,而这些工具也能最有效地将其工作实质传达给该领域的其他技术人员。算法在这里并通常是指导致所希望的结果的操作的自相一致的序列。操作是需要对物理量进行物理操纵的那些操作。通常,尽管不是必须的,但这些量采用能够被存储、传送、组合、比较以及换句话讲操纵的电信号或磁信号的形式。已被证明其在主要出于通用原因而将这些信号指代为位、数值、元素、符号、字符、术语、数字等时是方便的。
然而,应当牢记的是,所有这些以及类似的术语都与适当的物理量相关联,并且其只是应用于这些量的方便标签。除非另外特别说明,否则从上述讨论中显而易见的是,可以理解,在整个说明书中,使用术语诸如“接收”、“确定”、“发送”、“终止”、“等待”、“改变”等的讨论是指对设备或类似的电子计算设备的行动和处理,这些设备可对设备的寄存器和存储器中表示为物理(电子)量的数据进行操纵,并将其转换成在设备存储器或寄存器或其他此类信息存储、传输或显示设备中相似地表示为物理量的其他数据。
本文中所呈现的过程和显示并不固有地与任何特定设备或其他装置相关。根据本文的教导内容,各种通用系统可与程序一起使用,或者可证明其便于构造用于执行所述操作的更专用的装置。根据下文的描述,用于各种这些系统的所需结构将是显而易见的。此外,本公开未参照任何特定的编程语言进行描述。应当理解,多种编程语言可用于实现如本文所述的本公开的教导内容。
前面的讨论仅描述了本公开的一些示例性实施方案。本领域的技术人员将易于从这些讨论、附图和权利要求书中认识到,可在不脱离本公开的实质和范围的情况下进行各种修改。相应地,说明书和附图被视为是例示性意义而不是限定性意义。
Claims (21)
1.一种存储可执行指令的非暂态机器可读介质,所述可执行指令当由数据处理系统执行时使得所述数据处理系统执行方法,所述方法包括:
在第一设备处,建立与一个或多个服务器的连接,所述一个或多个服务器为多个用户提供文档协作服务以对由所述一个或多个服务器处理并存储在所述一个或多个服务器上的文档进行协作;
在所述第一设备处,接收基于在所述第一设备未连接到所述一个或多个服务器时由其他设备对所述文档作出的改变的表示所述文档的最近协作状态的第一文档;
在所述第一设备处,对所述第一文档应用一个或多个改变,所述改变基于在所述第一设备未连接到所述一个或多个服务器时在所述第一设备处接收到的一个或多个命令;
从所述第一设备向所述一个或多个服务器传输一个或多个已转换命令,所述一个或多个已转换命令基于在所述第一设备未连接到所述一个或多个服务器时在所述第一设备处接收的所述一个或多个命令;
确定在所述第一设备未连接到所述一个或多个服务器时由所述第一设备更新的第二文档是否将用于与所述最近协作状态保持一致;
在传输所述已转换命令之后,对存储在所述第一设备处的所述第一文档的更高版本应用回滚操作和重新应用操作;
在应用回滚和重新应用操作之后丢失与所述一个或多个服务器的所述连接,然后重新建立所述连接;
响应于重新建立所述连接,确定所述第一文档的所述更高版本将用于与所述协作保持一致;以及
在重新建立所述连接之后,将进一步的回滚和重新应用操作应用于所述第一文档的所述更高版本。
2.根据权利要求1所述的介质,其中所述第二文档将基于以下中的一者或多者而不用于保持一致:(a)与所述第二文档相关联的修订序列号跟与所述第一文档相关联的修订序列号的比较;或(b)自所述第一设备最后一次连接到所述一个或多个服务器以来已过去的时间段;或(c)当所述第一设备未连接到所述一个或多个服务器时由所述一个或多个服务器接收的多个命令。
3.根据权利要求1所述的介质,其中响应于确定所述第二文档将不被用于保持一致或将不被用作与云存储平台同步的结果来接收所述第一文档。
4.根据权利要求1所述的介质,其中在所述第一设备未连接到所述一个或多个服务器时在所述第一设备处接收的所述一个或多个命令在建立与所述一个或多个服务器的所述连接之前被应用于所述第二文档。
5.根据权利要求1所述的介质,其中所述第一文档是表示并包含所述协作的最近协作状态的服务器实况文档,并且在所述第一文档中表示来自所述协作中的所有用户的改变。
6.根据权利要求5所述的介质,其中所述第一文档包括作为条目集合的操作历史,并且所述条目集合中的每个条目包括修订序列号和按服务器顺序由所述一个或多个服务器应用于所述第一文档的所有命令的操作的列表,并且其中所述条目集合基于修订序列号按修订序列顺序存储在所述操作历史中,并且所述操作历史提供先前按所述服务器顺序应用于所述第一文档的所有命令的所述操作的顺序时间线。
7.根据权利要求6所述的介质,其中所述操作历史中的所述操作指定文档结构的改变但不包含来自所述第一文档的内容。
8.根据权利要求1所述的介质,其中所述方法还包括:
确定在所述第一设备未连接到所述一个或多个服务器时由所述第一设备利用脱机命令更新的第二文档将不用于与所述最近协作状态保持一致;
由所述第一设备应用对所述第二文档的编辑,其中所述编辑在所述第一设备处被接收并且在所述第一设备正在对所述第一文档应用所述一个或多个改变时由所述第一设备应用。
9.根据权利要求8所述的介质,其中所述方法还包括:
在完成对所述第一文档应用所述一个或多个改变之后,丢弃所述第二文档;
使用所述第一文档的更高版本来与所述协作保持一致。
10.根据权利要求1所述的介质,其中所述第一文档是从与提供所述文档协作服务的所述一个或多个服务器不同的云存储服务服务器接收的。
11.一种方法,包括:
在第一设备处,建立与一个或多个服务器的连接,所述一个或多个服务器为多个用户提供文档协作服务以对由所述一个或多个服务器处理并存储在所述一个或多个服务器上的文档进行协作;
在所述第一设备处,接收基于在所述第一设备未连接到所述一个或多个服务器时由其他设备对所述文档作出的改变的表示所述文档的最近协作状态的第一文档;
在所述第一设备处,对所述第一文档应用一个或多个改变,所述改变基于在所述第一设备未连接到所述一个或多个服务器时在所述第一设备处接收到的一个或多个命令;
从所述第一设备向所述一个或多个服务器传输一个或多个已转换命令,所述一个或多个已转换命令基于在所述第一设备未连接到所述一个或多个服务器时在所述第一设备处接收的所述一个或多个命令;
确定在所述第一设备未连接到所述一个或多个服务器时由所述第一设备利用脱机命令更新的第二文档将不用于与所述最近协作状态保持一致;以及
由所述第一设备应用对所述第二文档的编辑,其中所述编辑在所述第一设备处被接收并且在所述第一设备正在对所述第一文档应用所述一个或多个改变时由所述第一设备应用。
12.根据权利要求11所述的方法,其中所述第二文档被确定为将基于以下中的一者或多者而不用于保持一致:(a)与所述第二文档相关联的修订序列号跟与所述第一文档相关联的修订序列号的比较;或(b)自所述第一设备最后一次连接到所述一个或多个服务器以来已过去的时间段;或(c)当所述第一设备未连接到所述一个或多个服务器时由所述一个或多个服务器接收的多个命令。
13.根据权利要求11所述的方法,其中响应于确定所述第二文档将不被用于保持一致或将不被用作与云存储平台同步的结果来接收所述第一文档。
14.根据权利要求11所述的方法,其中在所述第一设备未连接到所述一个或多个服务器时在所述第一设备处接收的所述一个或多个命令在建立与所述一个或多个服务器的所述连接之前被应用于所述第二文档。
15.根据权利要求11所述的方法,其中所述方法进一步包括:
在传输所述已转换命令之后,对存储在所述第一设备处的所述第一文档的更高版本应用回滚操作和重新应用操作;
在应用回滚和重新应用操作之后丢失与所述一个或多个服务器的所述连接,然后重新建立所述连接;
响应于重新建立所述连接,确定所述第一文档的所述更高版本将用于与所述协作保持一致;
在重新建立所述连接之后,将进一步的回滚和重新应用操作应用于所述第一文档的所述更高版本。
16.根据权利要求11所述的方法,其中所述第一文档是表示并包含所述协作的最近协作状态的服务器实况文档,并且在所述第一文档中表示来自所述协作中的所有用户的改变。
17.根据权利要求16所述的方法,其中所述第一文档包括作为条目集合的操作历史,并且所述条目集合中的每个条目包括修订序列号和按服务器顺序由所述一个或多个服务器应用于所述第一文档的所有命令的操作的列表,并且其中所述条目集合基于修订序列号按修订序列顺序存储在所述操作历史中,并且所述操作历史提供先前按所述服务器顺序应用于所述第一文档的所有命令的所述操作的顺序时间线。
18.根据权利要求17所述的方法,其中所述操作历史中的所述操作指定文档结构的变化但不包含来自所述第一文档的内容。
19.根据权利要求11所述的方法,其中所述方法进一步包括:
在完成对所述第一文档应用所述一个或多个改变之后,丢弃所述第二文档;
使用所述第一文档的更高版本来与所述协作保持一致。
20.根据权利要求11所述的方法,其中所述第一文档是从与提供所述文档协作服务的所述一个或多个服务器不同的云存储服务服务器接收的。
21.一种存储可执行指令的非暂态机器可读介质,所述可执行指令当由一个或多个数据处理系统执行时,使得所述一个或多个数据处理系统执行方法,所述方法包括:
从已与管理文档协作系统的一个或多个服务器连接并且已编辑由所述文档协作系统托管的文档的一组用户中的一个或多个用户接收一个或多个编辑,所述一个或多个编辑是在第一设备未连接到所述一个或多个服务器时接收到的,并且所述第一设备在未连接到所述文档协作系统时已对所述第一设备上的所述文档的本地版本进行一个或多个改变;
建立与已对所述第一设备上的所述本地版本进行所述一个或多个改变的所述第一设备的连接;
响应于确定所述本地版本太旧,向所述第一设备传输服务器实况文档,所述服务器实况文档表示所述文档协作系统中的所述文档的最近协作状态;
从所述第一设备接收已转换命令,所述已转换命令基于在所述第一设备未连接时应用于所述本地版本的命令;
其中所述服务器实况文档包括作为条目集合的操作历史,并且所述条目集合中的每个条目包括修订序列号和命令的操作的列表,所述命令与由所述一个或多个数据处理系统应用于所述服务器实况文档的所述一个或多个编辑相关联,并且其中所述条目集合基于修订序列号按修订序列顺序存储在所述操作历史中,并且所述操作历史提供先前按所述服务器顺序应用于所述服务器实况文档的所述命令的所述操作的顺序时间线。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/669,258 US11455345B2 (en) | 2019-10-30 | 2019-10-30 | Collaboration environments that support offline edits of shared documents |
US16/669,258 | 2019-10-30 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112751903A CN112751903A (zh) | 2021-05-04 |
CN112751903B true CN112751903B (zh) | 2024-05-14 |
Family
ID=75645155
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010351012.4A Active CN112751903B (zh) | 2019-10-30 | 2020-04-28 | 支持共享文档的脱机编辑的协作环境 |
Country Status (2)
Country | Link |
---|---|
US (1) | US11455345B2 (zh) |
CN (1) | CN112751903B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9292876B1 (en) | 2014-12-16 | 2016-03-22 | Docusign, Inc. | Systems and methods for employing document snapshots in transaction rooms for digital transactions |
US11424936B2 (en) | 2020-10-30 | 2022-08-23 | Docusign, Inc. | Post-completion action management in online document system |
US11894019B2 (en) * | 2020-12-30 | 2024-02-06 | Linearity Gmbh | Time-lapse |
US11314927B1 (en) * | 2021-03-31 | 2022-04-26 | Docusign, Inc. | Management of tracked changes objects for cloud document editing |
CN113472776B (zh) * | 2021-06-30 | 2022-12-27 | 亿图软件(湖南)有限公司 | 一种多人实时协作方法及系统 |
US11941355B2 (en) * | 2022-06-09 | 2024-03-26 | Google Llc | Using operational transforms to perform operations on parallel copies of a document model |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103020026A (zh) * | 2012-11-15 | 2013-04-03 | 无锡永中软件有限公司 | 协同文档处理系统及方法 |
CN103685338A (zh) * | 2012-08-31 | 2014-03-26 | 英业达科技有限公司 | 在离线时储存目标文档以等待在线时同步的系统及其方法 |
US8738706B1 (en) * | 2011-11-16 | 2014-05-27 | Google Inc. | Systems and methods for collaborative document editing |
CN107003879A (zh) * | 2014-12-11 | 2017-08-01 | 利夫卢珀股份有限公司 | 用于计算机应用软件中的同时协同撤销操作的方法和系统 |
CN107667361A (zh) * | 2015-12-11 | 2018-02-06 | 利夫卢珀股份有限公司 | 针对多用户协作应用的混合操作转换 |
Family Cites Families (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
AU2001234541A1 (en) * | 2000-01-25 | 2001-08-07 | Autodesk, Inc. | Method and apparatus for providing access to and working with architectural drawings on the internet |
US7792788B2 (en) | 2005-03-04 | 2010-09-07 | Microsoft Corporation | Method and system for resolving conflicts operations in a collaborative editing environment |
US8326926B2 (en) * | 2005-09-13 | 2012-12-04 | Mentor Graphics Corporation | Distributed electronic design automation architecture |
US9361296B2 (en) * | 2009-01-22 | 2016-06-07 | Adobe Systems Incorporated | Method and apparatus for processing collaborative documents |
US9384295B2 (en) * | 2009-01-22 | 2016-07-05 | Adobe Systems Incorporated | Method and apparatus for viewing collaborative documents |
US10956667B2 (en) * | 2013-01-07 | 2021-03-23 | Google Llc | Operational transformations proxy for thin clients |
US8909596B1 (en) | 2013-01-08 | 2014-12-09 | Google Inc. | Operational-transform-compatible representation of 2-dimensional page layout data |
US9836549B2 (en) | 2013-05-12 | 2017-12-05 | Sap Se | Collaboration adapter to exploit single-user web applications for collaborative work |
US10025782B2 (en) * | 2013-06-18 | 2018-07-17 | Litera Corporation | Systems and methods for multiple document version collaboration and management |
US10089056B2 (en) * | 2015-06-07 | 2018-10-02 | Apple Inc. | Device, method, and graphical user interface for collaborative editing in documents |
US10108688B2 (en) * | 2015-12-22 | 2018-10-23 | Dropbox, Inc. | Managing content across discrete systems |
US20170359444A1 (en) * | 2016-06-10 | 2017-12-14 | Apple Inc. | Change propagation for realtime collaboration |
US10423671B2 (en) * | 2016-06-10 | 2019-09-24 | Apple Inc. | Selection behavior history and transformation |
US11409706B2 (en) * | 2016-08-04 | 2022-08-09 | Hancom Inc. | Document cooperation supporting apparatus for supporting simultaneous edit of document, and operating method thereof |
US20180168135A1 (en) * | 2016-12-20 | 2018-06-21 | Hency Anthony Bunner | Open eye hook |
US10382547B2 (en) * | 2017-01-31 | 2019-08-13 | Box, Inc. | Collaborative cloud-based document editing from a browser-enabled platform native application |
US10721084B2 (en) * | 2017-09-25 | 2020-07-21 | Microsoft Technology Licensing, Llc | Providing a private mode in asynchronous collaboration for a synchronous collaboration environment |
US10775974B2 (en) * | 2018-08-10 | 2020-09-15 | Vignet Incorporated | User responsive dynamic architecture |
-
2019
- 2019-10-30 US US16/669,258 patent/US11455345B2/en active Active
-
2020
- 2020-04-28 CN CN202010351012.4A patent/CN112751903B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8738706B1 (en) * | 2011-11-16 | 2014-05-27 | Google Inc. | Systems and methods for collaborative document editing |
CN103685338A (zh) * | 2012-08-31 | 2014-03-26 | 英业达科技有限公司 | 在离线时储存目标文档以等待在线时同步的系统及其方法 |
CN103020026A (zh) * | 2012-11-15 | 2013-04-03 | 无锡永中软件有限公司 | 协同文档处理系统及方法 |
CN107003879A (zh) * | 2014-12-11 | 2017-08-01 | 利夫卢珀股份有限公司 | 用于计算机应用软件中的同时协同撤销操作的方法和系统 |
CN107667361A (zh) * | 2015-12-11 | 2018-02-06 | 利夫卢珀股份有限公司 | 针对多用户协作应用的混合操作转换 |
Non-Patent Citations (1)
Title |
---|
多媒体文档协同编著系统的关键技术研究;鲁东明, 鲍宏伟, 潘云鹤;通信学报(09);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN112751903A (zh) | 2021-05-04 |
US11455345B2 (en) | 2022-09-27 |
US20210133253A1 (en) | 2021-05-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112751903B (zh) | 支持共享文档的脱机编辑的协作环境 | |
JP5250637B2 (ja) | 共同オーサリングモード | |
EP1681629B1 (en) | Method and system for transitioning between synchronous and asynchronous communication modes | |
US10216755B2 (en) | Multi-master text synchronization using deltas | |
US7340534B2 (en) | Synchronization of documents between a server and small devices | |
US8219526B2 (en) | Synchronizing file partitions utilizing a server storage model | |
KR101574816B1 (ko) | 비동기 복제 | |
US10880372B2 (en) | Blended operational transformation for multi-user collaborative applications | |
EP2439660A2 (en) | Data synchronization protocol | |
EP2028599A2 (en) | Synchronising data | |
US20030182450A1 (en) | Generic Infrastructure for converting documents between formats with merge capabilities | |
US20140082136A1 (en) | Method and system for transmission of application status between different devices | |
US20030172168A1 (en) | Document conversion with merging | |
EP3065375A1 (en) | A method for controlling access to electronic documents based on stateless communication | |
CN105493070A (zh) | 用于高效数据共享的任务上下文架构 | |
NZ544151A (en) | File synchronisation and conflict resolution | |
TW201128404A (en) | Input content to application via web browser | |
US20150295984A1 (en) | Multi Web Application Management Framework System and Method | |
EP3230894B1 (en) | Blended operational transformation for multi-user collaborative applications | |
EP3256957B1 (en) | Externalized execution of input method editor | |
CN111124293B (zh) | 一种地址空间转换算法中的部分复制方法 | |
CN107667361B (zh) | 用于传播文档更改的方法、系统和计算机可读介质 | |
CN116414579B (zh) | 基于分布式群组通信实现的多副本间数据一致性的方法 | |
Canals et al. | XWiki Concerto: A P2P wiki system supporting disconnected work | |
CN116450419A (zh) | 主从节点数据同步的方法、系统、介质及电子设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |