CN110162761A - 文档的协同编辑方法、装置、设备及存储介质 - Google Patents
文档的协同编辑方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN110162761A CN110162761A CN201910441930.3A CN201910441930A CN110162761A CN 110162761 A CN110162761 A CN 110162761A CN 201910441930 A CN201910441930 A CN 201910441930A CN 110162761 A CN110162761 A CN 110162761A
- Authority
- CN
- China
- Prior art keywords
- instruction
- path
- move
- cross
- new
- 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.)
- Granted
Links
Classifications
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q10/00—Administration; Management
- G06Q10/10—Office automation; Time management
- G06Q10/101—Collaborative creation, e.g. joint development of products or services
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Business, Economics & Management (AREA)
- Entrepreneurship & Innovation (AREA)
- Human Resources & Organizations (AREA)
- Theoretical Computer Science (AREA)
- Strategic Management (AREA)
- General Physics & Mathematics (AREA)
- Physics & Mathematics (AREA)
- Tourism & Hospitality (AREA)
- Health & Medical Sciences (AREA)
- Operations Research (AREA)
- Marketing (AREA)
- General Business, Economics & Management (AREA)
- Economics (AREA)
- Data Mining & Analysis (AREA)
- Quality & Reliability (AREA)
- Artificial Intelligence (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Computational Linguistics (AREA)
- General Health & Medical Sciences (AREA)
- General Engineering & Computer Science (AREA)
- Document Processing Apparatus (AREA)
Abstract
本公开实施例公开了一种文档的协同编辑方法、装置、设备及存储介质。包括:接收至少两个客户端分别发送的基于同一版本文档的操作指令;至少两个操作指令中包含跨层级移动指令;根据第一指令对数据库中的文档进行初次修改,并对第二指令进行转换,获得新的指令;根据新的指令对初次修改的文档进行再次修改,获得最新版本的文档;并向与第二指令对应的客户端发送处理成功的信息,将新的指令推送至其他客户端,以使其他客户端根据新的指令对客户端的文档进行修改,使所有客户端的文档版本一致。可以解决多用户对同一版本的文档协同编辑时,若存在至少一个用户对文档中的节点数据做跨层级移动操作的冲突问题,提高协同编辑的准确性。
Description
技术领域
本公开实施例涉及文档数据处理技术领域,尤其涉及一种文档的协同编辑方法、装置、设备及存储介质。
背景技术
协同编辑是允许多个用户通过网络同时对同一文档进行编辑,与单用户编辑相比,协同编辑可以节省文档编辑的时间,从而提高文档编辑的效率。目前常用的协同算法有EasySync算法、JSON-OT算法等。
协同编辑的场景是多个人同时编辑一个在线文档,一个用户对文档的修改可以实时地被其他人所见,即多个人同时进行编辑,任意进行多次编辑后,所有用户所见的界面内容应该是一致的。当有多个用户基于同一文档的同一版本进行编辑时,多个变更会产生冲突,因而在协同编辑中对冲突的解决显得尤为重要。
现有技术中,当多个用户同时编辑一个在线文档时,若存在至少一个用户对文档中的节点数据做跨层级移动的操作,按照现有的协同算法,被编辑的文档会出现错误。
发明内容
本公开实施例提供一种文档的协同编辑方法、装置、设备及存储介质,可以解决多用户对同一版本的文档协同编辑时,若存在至少一个用户对文档中的节点数据做跨层级移动操作的冲突问题,提高协同编辑的准确性。
第一方面,本公开实施例提供了一种文档的协同编辑方法,所述方法由服务器执行,包括:
接收至少两个客户端分别发送的基于同一版本文档的操作指令;所述至少两个操作指令中包含跨层级移动指令;
根据第一指令对数据库中的文档进行初次修改,并对第二指令进行转换,获得新的指令;其中,第一指令为先接收到的操作指令,第二指令为后接收到的操作指令;
根据所述新的指令对初次修改的文档进行再次修改,获得最新版本的文档;并向与第二指令对应的客户端发送处理成功的信息;
将所述新的指令推送至其他客户端,以使其他客户端根据所述新的指令对客户端的文档进行修改,使所有客户端的文档版本一致;所述其他客户端为所述至少两个客户端中除与第二指令对应的客户端之外的客户端。
第二方面,本公开实施例还提供了一种文档的协同编辑方法,所述方法由客户端执行,包括:
检测用户对当前版本文档的编辑操作,并根据所述编辑操作生成操作指令;所述操作指令包括跨层级移动指令;
将所述操作指令发送至服务器,使服务器根据所述操作指令对文档进行修改或对所述操作指令做转换操作;
接收服务器推送的指令,并根据接收到的指令对文档进行修改,获得最新版本的文档。
第三方面,本公开实施例还提供了一种文档的协同编辑装置,所述装置设置于服务器中,包括:
操作指令接收模块,用于接收至少两个客户端分别发送的基于同一版本文档的操作指令;所述至少两个操作指令中包含跨层级移动指令;
指令转换模块,用于根据第一指令对数据库中的文档进行初次修改,并对第二指令进行转换,获得新的指令;其中,第一指令为先接收到的操作指令,第二指令为后接收到的操作指令;
再次修改文档模块,用于根据所述新的指令对初次修改的文档进行再次修改,获得最新版本的文档,并向与第二指令对应的客户端发送处理成功的信息;
指令推送模块,用于将所述新的指令推送至其他客户端,以使其他客户端根据所述新的指令对客户端的文档进行修改,使所有客户端的文档版本一致;所述其他客户端为所述至少两个客户端中除与第二指令对应的客户端之外的客户端。
第四方面,本公开实施例还提供了一种文档的协同编辑装置,所述装置设置于客户端中,包括:
操作指令生成模块,用于检测用户对当前版本文档的编辑操作,并根据所述编辑操作生成操作指令;所述操作指令包括跨层级移动指令;
操作指令发送模块,用于将所述操作指令发送至服务器,使服务器根据所述操作指令对文档进行修改或对所述操作指令做转换操作;
指令接收模块,用于接收服务器推送的指令,根据接收到的指令对文档进行修改,获得最新版本的文档。
第五方面,本公开实施例还提供了一种电子设备,其特征在于,所述电子设备包括:
一个或多个处理装置;
存储装置,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理装置执行,使得所述一个或多个处理装置实现如本公开实施例所述的文档的协同编辑方法。
第六方面,本方面实施例还提供了一种计算机可读介质,其上存储有计算机程序,其特征在于,该程序被处理装置执行时实现如本公开实施例所述的文档的协同编辑方法。
本公开实施例,接收至少两个客户端分别发送的基于同一版本文档的操作指令,至少两个操作指令中包含跨层级移动指令;然后根据第一指令对数据库中的文档进行初次修改,并对第二指令进行转换操作,获得新的指令,其中,第一指令为先接收到的操作指令,第二指令为后接收到的操作指令;再然后根据新的指令对初次修改的文档进行再次修改,获得最新版本的文档;并向与第二指令对应的客户端发送处理成功的信息;将新的指令推送至其他客户端,以使其他客户端根据新的指令对客户端的文档进行修改,保证所有客户端的文档版本一致;其他客户端为至少两个客户端中除与第二指令对应的客户端之外的客户端。本公开实施例提供的文档的协同编辑方法,通过对后接收到的操作指令进行转换操作形成新的指令,并根据新的指令对文档进行再次修改,并将新的指令发送至其他客户端,可以解决多用户对同一版本的文档协同编辑时,若存在至少一个用户对文档中的节点数据做跨层级移动操作的冲突问题,提高协同编辑的准确性。
附图说明
图1为现有技术中文档的示意图;
图2是本公开实施例一中的一种文档的协同编辑方法的流程图;
图3是本公开实施例二中的一种文档的协同编辑方法的流程图;
图4是本公开实施例三中的一种文档的协同编辑装置的结构示意图;
图5是本公开实施例四中的一种文档的协同编辑装置的结构示意图;
图6是本公开实施例五中的一种电子设备的结构示意图。
具体实施方式
下面结合附图和实施例对本公开作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本公开,而非对本公开的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本公开相关的部分而非全部结构。
本公开实施例基于开源的JSON0协同算法,因其无法支持跨层级移动的场景,所以对其进行指令扩展。表1为现有源的JSON0协同算法支持的指令。
表1
协同算法的基本定义包括:
origin:表示当前文档的Json数据内容
operation(op):表示一次编辑的操作,一个operation代表文档的一次变更
left/right:左偏/右偏,当对同一个位置或者同一个节点有更改产生冲突时,left表示以后提交的op为准,right表示以先提交的op为准。
协同算法的三个核心函数:
transform函数:当出现基于同一个版本的op时,需要将后到的op与先落地的op做transform,否则会造成冲突。transform(op1,op2,"left"),op2表示先落地的op,op1表示后到的op,"left"表示以op1的结果为准。
apply函数:将op应用到json数据的函数。
compose函数:将可以聚合在一起的op进行聚合,例如op1:{path:path1,od:obj1},op2:{path:path1,oi:obj2},由path可看出是对同一个位置的元素进行操作,因此可以聚合成{path:path1,od:obj1,oi:obj2}。
示例性的,图1是一篇文档,如图1所示,标题1、标题2和标题3属于同一个层级,a和b属于同一个层级,现在有两个用户在这篇文档中进行协同编辑,某一时刻文档的版本为10,现在两人基于版本10同时进行编辑,用户A想把标题1下面的值为“a”的节点拖动到标题2下面。用户B也想移动同一个节点“a”到标题3下面。由于是跨节点进行移动,无法使用lm指令,从单个指令的效果来看可以用ld与li的组合指令来完成这次需求。于是产生两个op列表如下:
A产生的op列表:
op1:{{"path":["nodes",0,"children",0],"ld":{"id":11,"children":[],"text":"a"}}
op2:{{"path":["nodes",1,"children",0},"li":{"id":11,"children":[],"text":"a"}}
B产生的op列表:
op3:{{"path":["nodes",0,"children",0],"ld":{"id":11,"children":[],"text":"a"}}
op4:{{"path":["nodes",2,"children",0},"li":{"id":11,"children":[],"text":"a"}}
原始文档用origin表示,那么应用完之后的数据应该是:
apply(apply(origin,op(A)),transform(op(B),op(A),"left"))
观察transform(op(B),op(A),"left"),由于op(B)和op(A)的op列表都并非只有一个op,因此需要做交叉校验。转化出来的结果为:
result:{{"path":["nodes",2,"children",0},"li":{"id":11,"children":[],"text":"a"}}
由于op1和op2已经落地了,因此在标题2下面已经出现了一个id=11,text="a"的节点了,B操作完,将result落地之后,标题3下面也会出现一个id=11,text="a"的节点。由于一篇文档中节点ID的唯一性原则,此时出现了不符合预期的结果。出现这种结果的根本原因还是在于ld和li的指令组合无法真实地表达出用户的操作意图。因此需要扩展一个跨层级移动指令。
实施例一
图2为本公开实施例一提供的一种文档的协同编辑方法的流程图,本公开实施例可适用于多用户对同一版本的文档进行协同编辑的情况,该方法可以由文档的协同编辑装置来执行,该装置可由硬件和/或软件组成,并一般可集成在具有档的协同编辑功能的服务器中。如图2所示,该方法具体包括如下步骤:
步骤110,接收至少两个客户端分别发送的基于同一版本文档的操作指令。
其中,至少两个操作指令中包含跨层级移动指令,即至少两个操作指令中包含至少一个跨层级移动指令。本公开实施例中,跨层级移动指令是基于现有的协同算法扩展出来的指令,用mv表示,表现形式可以是mv:{p:[path1],mv:[path2],value:x},path1表示初始位置路径,path2表示目的位置路径,value为要移动的数据节点的值。
具体的,多个用户基于同一版本的文档进行协同编辑时,各自的客户端检测用户对文档的编辑操作,根据编辑操作生成操作指令,并将操作指令发送至服务器,服务器接收到多个基于同一版本的操作指令。本公开实施例中,多个操作指令中包含有至少一个跨层级移动指令。
步骤120,根据第一指令对数据库中的文档进行初次修改,并对第二指令进行转换,获得新的指令。
其中,第一指令为服务器先接收到的操作指令,第二指令为服务器后接收到的操作指令。
至少两个操作指令先后到达服务器,服务器首先根据先接收到的操作指令对数据库中的文档进行初次修改,先接收到的操作指令可以称作落地指令。接收到后到达的操作指令时,由于两个操作指令是基于同一版本的文档的编辑操作生成的,两个操作指令的对应的编辑操作会产生冲突,因此,需要对后接收到的操作指令进行转换,形成新的指令。
具体的,对第二指令进行转换,获得新的指令,可通过下述方式实施:获取第一指令和第二指令的类别及位置路径的关系;根据类别及位置路径的关系,对第二指令的位置路径和/或节点数据进行调整,获得新的指令。
其中,指令的类别可以包括跨层级移动指令、删除指令、替换指令、***指令及同层级移送指令等。位置路径的关系包括:位置路径相同、位置路径的长度相同且最后一个值不同、包含关系及其他关系等。本公开实施例中,第一指令和第二指令中至少有一个为跨层级移动指令。
步骤130,根据新的指令对初次修改的文档进行再次修改,获得最新版本的文档,并向与第二指令对应的客户端发送处理成功的信息。
具体的,在获得新的指令后,服务器根据新的指令对初次修改的文档进行再次修改,从而获得最新版本的文档。同时,向与第二指令对应的客户端发送处理成功的信息,即当前第二指令对应的客户端中的文档为最新版本的文档。
步骤140,将新的指令推送至其他客户端,以使其他客户端根据新的指令对客户端的文档进行修改,使所有客户端的文档版本一致。
其中,其他客户端为至少两个客户端中除与第二指令对应的客户端之外的客户端。
服务器根据新的指令对数据库中的初次修改后的文档进行再次修改后,并向与第二指令对应的客户端发送处理成功的信息,同时将新的指令发送至除了与第二指令对应的客户端之外的所有客户端,使得所有客户端的文档版本与服务器的版本相同,从而实现协同编辑的功能。
本公开实施例的技术方案,接收至少两个客户端分别发送的基于同一版本文档的操作指令,至少两个操作指令中包含跨层级移动指令;然后根据第一指令对数据库中的文档进行初次修改,并对第二指令进行转换,获得新的指令,其中,第一指令为先接收到的操作指令,第二指令为后接收到的操作指令;再然后根据新的指令对初次修改的文档进行再次修改,获得最新版本的文档,并向与第二指令对应的客户端发送处理成功的信息,最后将新的指令推送至其他客户端,以使其他客户端根据新的指令对客户端的文档进行修改,保证所有客户端的文档版本一致。本公开实施例提供的文档的协同编辑方法,通过对先接收到的操作指令和后接收到的操作指令进行转换操作形成新的指令,并根据新的指令对文档进行再次修改,将新的指令推送至其他客户端,可以解决多用户对同一版本的文档协同编辑时,若存在至少一个用户对文档中的节点数据做跨层级移动操作的冲突问题,提高协同编辑的准确性。
可选的,当第一指令和第二指令均为跨层级移动指令时,根据类别及位置路径的关系,对第二指令的位置路径和/或节点数据进行调整,获得新的指令的方式可以是:
对第一指令和第二指令的目的位置路径进行基准化处理,获得第一新目的位置路径和第二新目的位置路径。
本公开实施例中,在对节点数据跨层级移动时,节点数据在移动前和移动后文档中各节点数据的位置路径会改变,根据初始位置路径对目的位置路径的影响进行基准化处理。
示例性的,用other表示第一指令,op表示第二指令。op.path表示第二指令的位置路径,other.path表示第一指令的位置路径。如果是跨层级移动指令操作,用sourcePath表示起始位置路径,targetPath表示目的位置路径。第一指令和第二指令可以分别表示为:other:path:otherSourcePath,mv:otherTargetPath,value:obj1;op:path:opSourcePath,mv:opTargetPath,value:obj2。对第一指令和第二指令的目的位置路径进行基准化处理,获得第一新目的位置路径和第二新目的位置路径,分别表示为newOtherTargetPath和newOpTargetPath。
若第一指令和第二指令的初始位置路径相同,则按照设定偏移方式对基准化处理后的第二指令进行转换,获得新的指令。
其中,设定偏移方式包括左偏移和右偏移。具体的,第一指令和第二指令的初始位置路径相同,表示两个指令是对同一个节点数据执行的操作,若设定偏移方式为左偏移,则将第二指令的初始位置路径替换为第一指令的目的位置路径,从而获得新的指令。若设定偏移方式为右偏移,则新的指令为空指令。示例性的,若optype=left,结果为path:otherTargetPath,mv:opTargetPath,value:obj2;如果optype=right,返回空op。其中,optype为设定偏移方式。
若第一指令的初始位置路径与第二指令的初始位置路径长度相同且最后一个值不同,则根据第一初始位置路径和/或第一新目的位置路径调整第二初始位置路径及第二目的位置路径,将调整后的第二指令确定为新的指令。
具体的,根据第一初始位置路径对第二初始位置路径及第二新目的位置路径的影响,以及第一新目的位置路径对第二初始位置路径及第二新目的位置路径的影响,调整第二初始位置路径及第二目的位置路径,并将调整后的第二指令确定为新的指令。示例性的,判断otherSourcePath对opSourcePath的影响;判断otherSourcePath对newOpTargetPath的影响;判断newOtherTargetPath对opSourcePath的影响;判断newOtherTargetPath对newOpTargetPath的影响。
若第一指令的初始位置路径包含第二指令的初始位置路径,则将第二初始位置路径的公共前缀替换为第一目的位置路径,将调整后的第二指令确定为新的指令;
具体的,若第一指令的初始位置包含第二指令的初始位置,将第二初始位置路径的公共前缀替换为第一目的位置路径。如果第一目的位置路径与第二目的位置路径相同,且设定偏移方式为左偏移,则以第二目的位置路径为准,若设定偏移方式为右偏移,则将第二目的位置路径的坐标加1。示例性的,用otherTargetPath替换opSourcePath和otherSourcePath的公共前缀;如果otherTargetPath和opTargetPath相等,如果optype=left,以opTargetPath为准;如果optype=right,opTargetPath的坐标加1。
若第二指令的初始位置路径包含第一指令的初始位置路径,根据第一指令调整第二指令中的节点数据,并根据第一目的位置路径调整第二初始位置路径和第二目的位置路径,将调整后的第二指令确定为新的指令。
具体的,更新op的value的值;判断otherTargetPath对opSourcePath的影响;判断otherTargetPath对opTargetPath的影响。
若第一初始位置路径与第二初始位置路径的关系是其他情况,则判断otherSourcePath对opSourcePath的影响;判断otherSourcePath对newOpTargetPath的影响;判断newOtherTargetPath对opSourcePath的影响;如果newOtherTargetPath是opSourcePath的子节点,需要更新value;判断newOtherTargetPath对newOpTargetPath的影响。
可选的,若第一指令为跨层级移动指令,第二指令为删除指令;根据类别及位置路径的关系,对第二指令的位置路径和/或节点数据进行调整,获得新的指令的方式可以是:对跨层级移动指令的目的位置路径进行基准化处理,获得新目的位置路径。
其中,删除指令可以是ld指令。第一指令和第二指令分别表示为:other:path:otherSourcePath,mv:otherTargetPath,value:obj1;op:path:opSourcePath,ld:obj2。对跨层级移动指令的目的位置路径进行基准化处理,获得新目的位置路径newOtherTargetPath。
若跨层级移动指令的初始位置路径和删除指令的位置路径相同,则将删除指令的位置路径替换为目的位置路径,并将调整后的删除指令确定为新的指令。示例性的,令op.path=otherTargetPath。
若跨层级移动指令的初始位置路径与删除指令的位置路径长度相同且最后一个值不同,则根据跨层级移动指令的初始位置路径和/或新目的位置路径调整删除指令的位置路径和/或节点数据,并将调整后删除指令确定为新的指令。
具体的,根据跨层级移动指令的初始位置路径和/或新目的位置路径调整删除指令的位置路径,如果删除指令的位置路径是跨层级移动指令的新目的位置路径的父节点,则对删除指令的节点数据进行更新。示例性的,判断otherSourcePath对opSourcePath的影响;判断newOtherTargetPath对opSourcePath的影响;如果opSourcePath是newOtherTargetPath的父节点,更新op的value。
若跨层级移动指令的初始位置路径包含删除指令的位置路径,则将删除指令的位置路径的公共前缀替换为跨层级移动指令的目的位置路径,并将调整后的删除指令确定为新的指令。示例性的,用commonPrex表示opSourcePath中与otherSourcePath的公共前缀部分,suffix表示opSourcePath除去commonPrex的部分,opSourcePath=commonPrex+suffix。删除指令最终的位置路径为otherTargetPath+suffix。
若删除指令的位置路径包含跨层级移动指令的初始位置路径,则根据跨层级移动指令更新删除指令的节点数据,将调整后的删除指令确定为新的指令。可选的,若跨层级移动指令的新目的位置路径不是删除指令的位置路径的子节点,则生成一个新的删除指令,新的删除指令的位置路径为跨层级移动指令的目的位置路径。示例性的,更新op的ld值;如果newOtherTargetPath不是opSourcePath的子节点,额外生成一个ld操作:newOp,newOp.path=otherTargetPath,newOp的ld操作值等于other的value值。
若跨层级移动指令的初始位置路径与删除指令的位置路径的关系是其他情况,则判断otherSourcePath对opSourcePath的影响;判断otherTargetPath对opSourcePath的影响;如果opSourcePath是newOtherTargetPath的父节点,更新value值。
本公开实施例中,若第二指令是od指令,则可以采用与删除指令相同的方式进行转换。
若第一指令为跨层级移动指令,第二指令为***指令,根据类别及位置路径的关系,对第二指令的位置路径和/或节点数据进行调整,获得新的指令的方式可以是:
对跨层级移动指令的目的位置路径进行基准化处理,获得新目的位置路径。
其中,***指令可以是li指令。示例性的,第一指令和第二指令可以表示为:other:path:otherSourcePath,mv:otherTargetPath,value:obj1;op:path:opSourcePath,li:obj2。
若跨层级移动指令的初始位置路径和***指令的位置路径相同,则将***指令的位置路径替换为跨层级移动指令的目的位置路径,并将调整后的***指令确定为新的指令。示例性的,判断otherTargetPath对opSourcePath的影响。
若跨层级移动指令的初始位置路径与***指令的位置路径长度相同且最后一个值不同,则根据跨层级移动指令的初始位置路径和/或目的位置路径调整***指令的位置路径,并将调整后的***指令确定为新的指令。示例性的,判断otherSourcePath对opSourcePath的影响;判断otherTargetPath对opSourcePath的影响。
若跨层级移动指令的初始位置路径包含***指令的位置路径,则将***指令的位置路径的公共前缀替换为跨层级移动指令的目的位置路径,并将调整后的***指令确定为新的指令。示例性的,用commonPrex表示opSourcePath中与otherSourcePath的公共前缀部分,suffix表示opSourcePath除去commonPrex的部分,opSourcePath=commonPrex+suffix。***指令最终的位置路径为otherTargetPath+suffix。
若***指令的位置路径包含跨层级移动指令的初始位置路径,则根据跨层级移动指令的目的位置路径调整***指令的位置路径,将调整后的***指令确定为新的指令。示例性的,判断otherTargetPath对opSourcePath的影响。
若跨层级移动指令的初始位置路径与***指令的位置路径的关系是其他情况,则判断otherSourcePath对opSourcePath的影响;判断otherTargetPath对opSourcePath的影响。
可选的,当第二指令为oi指令时,同样适用上述方式。
第一指令为跨层级移动指令,第二指令为同层级移动指令,根据类别及位置路径的关系,对第二指令的位置路径和/或节点数据进行调整,获得新的指令的方式可以是:
对跨层级移动指令的目的位置路径进行基准化处理,获得新目的位置路径。
其中,同层级移动指令可以是lm指令。示例性的,第一指令和第二指令可以表示为:other:path:otherSourcePath,mv:otherTargetPath,value:obj1;op:path:opSourcePath,lm:opTargetKey。同层级移动指令的位置路径包括起始路径和最终路径。对跨层级移动指令的目的位置路径进行基准化处理,获得新目的位置路径newOtherTargetPath。
若跨层级移动指令的初始位置路径和同层级移动指令的位置路径相同,则按照设定偏移方式对基准化处理后的同层级移动指令进行转换,获得新的指令。
具体的,如果设定偏移方式为左偏移,则以同层级移动指令作为新的指令;如果设定偏移方式为右偏移,则以跨层级移动指令为准,将空指令作为新的指令。示例性的,如果optype=left,以op移动的最终位置为准;如果optype=right,以other移动的最终位置为准,返回空op。
若跨层级移动指令的初始位置路径与同层级移动指令的位置路径长度相同且最后一个值不同,则根据跨层级移动指令的初始位置路径和/或目的位置路径调整同层级移动指令的位置路径,并将调整后同层级移动指令确定为新的指令。示例性的,判断otherSourcePath对opSourcePath及opTargetKey的影响;判断otherTargetPath对opSourcePath及opTargetKey的影响。
若跨层级移动指令的初始位置路径包含同层级移动指令的位置路径,则将同层级移动指令的位置路径的公共前缀替换为跨层级移动指令的目的位置路径,并将调整后的同层级移动指令确定为新的指令。示例性的,用commonPrex表示opSourcePath中与otherSourcePath的公共前缀部分,suffix表示opSourcePath除去commonPrex的部分,opSourcePath=commonPrex+suffix。同层级移动指令的最终位置路径为otherTargetPath+suffix。
若同层级移动指令的位置路径包含跨层级移动指令的初始位置路径,则根据跨层级移动指令的目的位置路径调整同层级移动指令的位置路径,将调整后的同层级移动指令确定为新的指令。示例性的,判断otherTargetPath对opSourcePath和opTargetKey的影响。
若跨层级移动指令的初始位置路径与同层级移动指令的位置路径的关系是其他情况,则判断otherSourcePath对opSourcePath的影响;判断otherTargetPath对opSourcePath和opTargetKey的影响。
若第一指令为跨层级移动指令,第二指令为替换指令,根据类别及位置路径的关系,对第二指令的位置路径和/或节点数据进行调整,获得新的指令的方式可以是:
对跨层级移动指令的目的位置路径进行基准化处理,获得新目的位置路径。
其中,替换指令可以是ld+li指令。第一指令和第二指令可以表示为other:path:otherSourcePath,mv:otherTargetPath,value:obj1;op:path:opSourcePath,ld:obj2,li:obj3。对跨层级移动指令的目的位置路径进行基准化处理,获得新目的位置路径newOtherTargetPath。
若跨层级移动指令的初始位置路径和替换指令的位置路径相同,则将替换指令的位置路径替换为跨层级移动指令的目的位置路径,并将调整后的替换指令确定为新的指令。示例性的,令op.path=otherTargetPath。
若跨层级移动指令的初始位置路径与替换指令的位置路径长度相同且最后一个值不同,则根据跨层级移动指令的初始位置路径和/或新目的位置路径调整替换指令的位置路径和/或节点数据,并将调整后替换指令确定为新的指令。
具体的,根据跨层级移动指令的初始位置路径和/或新目的位置路径调整替换指令的位置路径,如果替换指令的位置路径是跨层级移动指令的新目的位置路径的父节点,则更新***指令的节点数据。示例性的,判断otherSourcePath对opSourcePath的影响;判断newOtherTargetPath对opSourcePath的影响;如果opSourcePath是newOtherTargetPath的父节点,更新替换指令的value。
若跨层级移动指令的初始位置路径包含替换指令的位置路径,则将替换指令的位置路径的公共前缀替换为跨层级移动指令的目的位置路径,并将调整后的替换指令确定为新的指令。示例性的,用commonPrex表示opSourcePath中与otherSourcePath的公共前缀部分,suffix表示opSourcePath除去commonPrex的部分,opSourcePath=commonPrex+suffix。替换指令的最终位置路径为otherTargetPath+suffix。
若替换指令的位置路径包含跨层级移动指令的初始位置路径,则根据跨层级移动指令更新替换指令的节点数据,将调整后的替换指令确定为新的指令。若跨层级移动指令的新目的位置路径不是替换指令的位置路径的子节点,则生成一个新的删除指令,新的删除指令的位置路径为跨层级移动指令的目的位置路径。示例性的,更新op的ld值;如果newOtherTargetPath不是opSourcePath的子节点,额外生成一个ld操作newOp,newOp.path=otherTargetPath,newOp的ld操作值等于other的value值。
若跨层级移动指令的初始位置路径与替换指令的位置路径的关系是其他情况,则判断otherSourcePath对opSourcePath的影响;判断otherTargetPath对opSourcePath的影响;如果opSourcePath是newOtherTargetPath的父节点,更新value值。
可选的,当第二指令为od+oi时,同样适用上述规则。当第一指令为mv指令,第二指令为si指令、sd指令或na指令时,只需更新第二指令的value值。
本公开实施例中,若第一指令为其他指令,第二指令为跨层级移动指令,转换的方式和上述类似,此处不再赘述。
实施例二
图3为本公开实施例二提供的一种文档的协同编辑方法的流程图,本公开实施例可适用于多用户对同一版本的文档进行协同编辑的情况,该方法可以由文档的协同编辑装置来执行,该装置可由硬件和/或软件组成,并一般可集成在具有档的协同编辑功能的终端中。如图3所示,该方法具体包括如下步骤:
步骤210,检测用户对当前版本文档的编辑操作,并根据编辑操作生成操作指令。
其中,操作指令包括跨层级移动指令。本公开实施例中,用户对文档的编辑操作可以是对节点数据的跨层级移动操作、删除操作、***操作或者替换操作等。根据用户的编辑操作生成对应的操作指令。
步骤220,将操作指令发送至服务器,使服务器根据操作指令对文档进行修改或对操作指令做转换操作。
本公开实施例中,服务器根据接收到的操作指令对数据库中的文档进行修改或者对操作指令做转换操作,做转换操作的方式和上述实施例中的方式相同,此处不再赘述。服务器对操作指令做转换之后,形成新的指令,并将新的指令推送至客户端。
步骤230,接收服务器推送的指令,并根据接收到的指令对文档进行修改,获得最新版本的文档。
其中,服务器推送的的指令可以是对文档修改的指令或者空指令。若是对文档修改的指令,则按照新的指令对文档进行修改,若是空指令,则对文档不进行修改。
本公开实施例的技术方案,检测用户对当前版本文档的编辑操作,并根据编辑操作生成操作指令;将操作指令发送至服务器,使服务器根据操作指令对文档进行修改和/或做转换操作;接收服务器推送的指令,根据接收的指令对文档进行修改,获得最新版本的文档。可以解决多用户对同一版本的文档协同编辑时,若存在至少一个用户对文档中的节点数据做跨层级移动操作的冲突问题,提高协同编辑的准确性。
实施例三
图4为本公开实施例三提供的一种文档的协同编辑装置的结构示意图。该装置设置于服务器中,如图4所示,该装置包括:
操作指令接收模块310,用于接收至少两个客户端分别发送的基于同一版本文档的操作指令;至少两个操作指令中包含跨层级移动指令;
指令转换模块320,用于根据第一指令对数据库中的文档进行初次修改,并对第二指令进行转换操作,获得新的指令;其中,第一指令为先接收到的操作指令,第二指令为后接收到的操作指令;
再次修改文档模块330,用于根据新的指令对初次修改的文档进行再次修改,获得最新版本的文档,并向与第二指令对应的客户端发送处理成功的信息。
指令推送模块340,用于将新的指令推送至其他客户端,以使其他客户端根据新的指令对客户端的文档进行修改,使所有客户端的文档版本一致;其他客户端为至少两个客户端中除与第二指令对应的客户端之外的客户端。
可选的,跨层级移动指令包括节点数据的初始位置路径和目的位置路径;指令转换模块320,还用于:
获取第一指令和第二指令的类别及位置路径的关系;
根据类别及位置路径的关系,对第二指令的位置路径和/或节点数据进行调整,获得新的指令。
可选的,当第一指令和第二指令均为跨层级移动指令时,指令转换模块320,还用于:
对第一指令和第二指令的目的位置路径进行基准化处理,获得第一新目的位置路径和第二新目的位置路径;
若第一指令和第二指令的初始位置路径相同,则按照设定偏移方式对基准化处理后第二指令进行转换,获得新的指令;
若第一指令的初始位置路径与第二指令的初始位置路径长度相同且最后一个值不同,则根据第一初始位置路径和/或第一新目的位置路径调整第二初始位置路径及第二目的位置路径,将调整后的第二指令确定为新的指令;
若第一指令的初始位置路径包含第二指令的初始位置路径,则将第二初始位置路径的公共前缀替换为第一目的位置路径,将调整后的第二指令确定为新的指令;
若第二指令的初始位置路径包含第一指令的初始位置路径,根据第一指令调整第二指令中的节点数据,并根据第一目的位置路径调整第二初始位置路径和第二目的位置路径,将调整后的第二指令确定为新的指令。
可选的,若第一指令为跨层级移动指令,第二指令为删除指令;根据类别及位置路径的关系,指令转换模块320,还用于:
对跨层级移动指令的目的位置路径进行基准化处理,获得新目的位置路径;
若跨层级移动指令的初始位置路径和删除指令的位置路径相同,则将删除指令的位置路径替换为目的位置路径,并将调整后的删除指令确定为新的指令;
若跨层级移动指令的初始位置路径与删除指令的位置路径长度相同且最后一个值不同,则根据跨层级移动指令的初始位置路径和/或新目的位置路径调整删除指令的位置路径和/或节点数据,并将调整后删除指令确定为新的指令;
若跨层级移动指令的初始位置路径包含删除指令的位置路径,则将删除指令的位置路径的公共前缀替换为跨层级移动指令的目的位置路径,并将调整后的删除指令确定为新的指令;
若删除指令的位置路径包含跨层级移动指令的初始位置路径,则根据跨层级移动指令更新删除指令的节点数据,将调整后的删除指令确定为新的指令。
可选的,指令转换模块320,还用于:
若跨层级移动指令的新目的位置路径不是删除指令的位置路径的子节点,则生成一个新的删除指令,新的删除指令的位置路径为跨层级移动指令的目的位置路径。
可选的,若第一指令为跨层级移动指令,第二指令为***指令,指令转换模块320,还用于:
对跨层级移动指令的目的位置路径进行基准化处理,获得新目的位置路径;
若跨层级移动指令的初始位置路径和***指令的位置路径相同,则将***指令的位置路径替换为目的位置路径,并将调整后的***指令确定为新的指令;
若跨层级移动指令的初始位置路径与***指令的位置路径长度相同且最后一个值不同,则根据跨层级移动指令的初始位置路径和/或目的位置路径调整***指令的位置路径,并将调整后的***指令确定为新的指令;
若跨层级移动指令的初始位置路径包含***指令的位置路径,则将***指令的位置路径的公共前缀替换为跨层级移动指令的目的位置路径的公共前缀,并将调整后的***指令确定为新的指令;
若***指令的位置路径包含跨层级移动指令的初始位置路径,则根据跨层级移动指令的目的位置路径调整***指令的位置路径,将调整后的***指令确定为新的指令。
可选的,第一指令为跨层级移动指令,第二指令为同层级移动指令,指令转换模块320,还用于:
对跨层级移动指令的目的位置路径进行基准化处理,获得新目的位置路径;
若跨层级移动指令的初始位置路径和同层级移动指令的位置路径相同,则按照设定偏移方式对基准化处理后的同层级移动指令进行转换,获得新的指令;
若跨层级移动指令的初始位置路径与同层级移动指令的位置路径长度相同且最后一个值不同,则根据跨层级移动指令的初始位置路径和/或目的位置路径调整同层级移动指令的位置路径,并将调整后同层级移动指令确定为新的指令;
若跨层级移动指令的初始位置路径包含同层级移动指令的位置路径,则将同层级移动指令的位置路径的公共前缀替换为跨层级移动指令的目的位置路径,并将调整后的同层级移动指令确定为新的指令;
若同层级移动指令的位置路径包含跨层级移动指令的初始位置路径,则根据跨层级移动指令的目的位置路径调整同层级移动指令的位置路径,将调整后的同层级移动指令确定为新的指令;其中,同层级移动指令的位置路径包括起始路径和最终路径。
可选的,若第一指令为跨层级移动指令,第二指令为替换指令,根据类别及位置路径的关系,指令转换模块320,还用于:
对跨层级移动指令的目的位置路径进行基准化处理,获得新目的位置路径;
若跨层级移动指令的初始位置路径和替换指令的位置路径相同,则将替换指令的位置路径替换为跨层级移动指令的目的位置路径,并将调整后的替换指令确定为新的指令;
若跨层级移动指令的初始位置路径与替换指令的位置路径长度相同且最后一个值不同,则根据跨层级移动指令的初始位置路径和/或新目的位置路径调整替换指令的位置路径和/或节点数据,并将调整后替换指令确定为新的指令;
若跨层级移动指令的初始位置路径包含替换指令的位置路径,则将替换指令的位置路径的公共前缀替换为跨层级移动指令的目的位置路径,并将调整后的替换指令确定为新的指令;
若替换指令的位置路径包含跨层级移动指令的初始位置路径,则根据跨层级移动指令更新替换指令的节点数据,将调整后的替换指令确定为新的指令。
可选的,指令转换模块320,还用于:
若跨层级移动指令的新目的位置路径不是替换指令的位置路径的子节点,则生成一个新的删除指令,新的替换指令的位置路径为跨层级移动指令的目的位置路径。
实施例四
图5为本公开实施例四提供的一种文档的协同编辑装置的结构示意图。该装置设置于客户端中,如图5所示,该装置包括:
操作指令生成模块410,用于检测用户对当前版本文档的编辑操作,并根据编辑操作生成操作指令;操作指令包括跨层级移动指令;
操作指令发送模块420,用于将所述操作指令发送至服务器,使服务器根据操作指令对文档进行修改或对所述操作指令做转换操作;
指令接收模块430,用于接收服务器推送的指令,根据接收到的指令对文档进行修改,获得最新版本的文档。
上述装置可执行本公开前述所有实施例所提供的方法,具备执行上述方法相应的功能模块和有益效果。未在本公开实施例中详尽描述的技术细节,可参见本公开前述所有实施例所提供的方法。
实施例五
下面参考图6,其示出了适于用来实现本公开实施例的电子设备600的结构示意图。本公开实施例中的电子设备可以包括但不限于诸如移动电话、笔记本电脑、数字广播接收器、PDA(个人数字助理)、PAD(平板电脑)、PMP(便携式多媒体播放器)、车载终端(例如车载导航终端)等等的移动终端以及诸如数字TV、台式计算机等等的固定终端,或者各种形式的服务器,如独立服务器或者服务器集群。图6示出的电子设备仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
如图6所示,电子设备600可以包括处理装置(例如中央处理器、图形处理器等)601,其可以根据存储在只读存储装置(ROM)602中的程序或者从存储装置605加载到随机访问存储装置(RAM)603中的程序而执行各种适当的动作和处理。在RAM 603中,还存储有电子设备600操作所需的各种程序和数据。处理装置601、ROM 602以及RAM 603通过总线604彼此相连。输入/输出(I/O)接口605也连接至总线604。
通常,以下装置可以连接至I/O接口605:包括例如触摸屏、触摸板、键盘、鼠标、摄像头、麦克风、加速度计、陀螺仪等的输入装置606;包括例如液晶显示器(LCD)、扬声器、振动器等的输出装置607;包括例如磁带、硬盘等的存储装置608;以及通信装置609。通信装置609可以允许电子设备600与其他设备进行无线或有线通信以交换数据。虽然图6示出了具有各种装置的电子设备600,但是应理解的是,并不要求实施或具备所有示出的装置。可以替代地实施或具备更多或更少的装置。
特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行错别字的纠正方法的程序代码。在这样的实施例中,该计算机程序可以通过通信装置609从网络上被下载和安装,或者从存储装置605被安装,或者从ROM 602被安装。在该计算机程序被处理装置601执行时,执行本公开实施例的方法中限定的上述功能。
需要说明的是,本公开上述的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的***、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储装置(RAM)、只读存储装置(ROM)、可擦式可编程只读存储装置(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储装置(CD-ROM)、光存储装置件、磁存储装置件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行***、装置或者器件使用或者与其结合使用。而在本公开中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读信号介质可以发送、传播或者传输用于由指令执行***、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:电线、光缆、RF(射频)等等,或者上述的任意合适的组合。
上述计算机可读介质可以是上述电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。
上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该处理装置执行时,使得该电子设备执行文档的协同编辑的功能。
可以以一种或多种程序设计语言或其组合来编写用于执行本公开的操作的计算机程序代码,上述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
附图中的流程图和框图,图示了按照本公开各种实施例的***、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的***来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本公开实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现。其中,模块的名称在某种情况下并不构成对该模块本身的限定。
注意,上述仅为本公开的较佳实施例及所运用技术原理。本领域技术人员会理解,本公开不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本公开的保护范围。因此,虽然通过以上实施例对本公开进行了较为详细的说明,但是本公开不仅仅限于以上实施例,在不脱离本公开构思的情况下,还可以包括更多其他等效实施例,而本公开的范围由所附的权利要求范围决定。
Claims (14)
1.一种文档的协同编辑方法,所述方法由服务器执行,其特征在于,包括:
接收至少两个客户端分别发送的基于同一版本文档的操作指令;所述至少两个操作指令中包含跨层级移动指令;
根据第一指令对数据库中的文档进行初次修改,并对第二指令进行转换,获得新的指令;其中,第一指令为先接收到的操作指令,第二指令为后接收到的操作指令;
根据所述新的指令对初次修改的文档进行再次修改,获得最新版本的文档;并向与第二指令对应的客户端发送处理成功的信息;
将所述新的指令推送至其他客户端,以使其他客户端根据所述新的指令对客户端的文档进行修改,使所有客户端的文档版本一致;所述其他客户端为所述至少两个客户端中除与第二指令对应的客户端之外的客户端。
2.根据权利要求1所述的方法,其特征在于,所述跨层级移动指令包括节点数据的初始位置路径和目的位置路径;对第二指令进行转换,获得新的指令,包括:
获取所述第一指令和所述第二指令的类别及位置路径的关系;
根据所述类别及位置路径的关系,对所述第二指令的位置路径和/或节点数据进行调整,获得新的指令。
3.根据权利要求2所述的方法,其特征在于,当第一指令和第二指令均为跨层级移动指令时,根据所述类别及位置路径的关系,对所述第二指令的位置路径和/或节点数据进行调整,获得新的指令,包括:
对所述第一指令和第二指令的目的位置路径进行基准化处理,获得第一新目的位置路径和第二新目的位置路径;
若所述第一指令和所述第二指令的初始位置路径相同,则按照设定偏移方式对基准化处理后的第二指令进行转换,获得新的指令;
若所述第一指令的初始位置路径与所述第二指令的初始位置路径长度相同且最后一个值不同,则根据第一初始位置路径和/或第一新目的位置路径调整第二初始位置路径及第二目的位置路径,将调整后的第二指令确定为新的指令;
若所述第一指令的初始位置路径包含所述第二指令的初始位置路径,则将第二初始位置路径的公共前缀替换为第一目的位置路径,将调整后的第二指令确定为新的指令;
若所述第二指令的初始位置路径包含所述第一指令的初始位置路径,根据第一指令调整第二指令中的节点数据,并根据第一目的位置路径调整第二初始位置路径和第二目的位置路径,将调整后的第二指令确定为新的指令。
4.根据权利要求2所述的方法,其特征在于,若第一指令为跨层级移动指令,第二指令为删除指令;根据所述类别及位置路径的关系,对所述第二指令的位置路径和/或节点数据进行调整,获得新的指令,包括:
对所述跨层级移动指令的目的位置路径进行基准化处理,获得新目的位置路径;
若所述跨层级移动指令的初始位置路径和所述删除指令的位置路径相同,则将删除指令的位置路径替换为所述目的位置路径,并将调整后的删除指令确定为新的指令;
若所述跨层级移动指令的初始位置路径与所述删除指令的位置路径长度相同且最后一个值不同,则根据跨层级移动指令的初始位置路径和/或新目的位置路径调整删除指令的位置路径和/或节点数据,并将调整后删除指令确定为新的指令;
若所述跨层级移动指令的初始位置路径包含所述删除指令的位置路径,则将所述删除指令的位置路径的公共前缀替换为所述跨层级移动指令的目的位置路径,并将调整后的删除指令确定为新的指令;
若所述删除指令的位置路径包含所述跨层级移动指令的初始位置路径,则根据所述跨层级移动指令更新所述删除指令的节点数据,将调整后的删除指令确定为新的指令。
5.根据权利要求4所述的方法,其特征在于,在若所述删除指令的位置路径包含所述跨层级移动指令的初始位置路径,则根据所述跨层级移动指令更新所述删除指令的节点数据,将调整后的删除指令确定为新的指令之后,还包括:
若所述跨层级移动指令的新目的位置路径不是所述删除指令的位置路径的子节点,则生成一个新的删除指令,所述新的删除指令的位置路径为所述跨层级移动指令的目的位置路径。
6.根据权利要求2所述的方法,其特征在于,若第一指令为跨层级移动指令,第二指令为***指令,根据所述类别及位置路径的关系,对所述第二指令的位置路径和/或节点数据进行调整,获得新的指令,包括:
对所述跨层级移动指令的目的位置路径进行基准化处理,获得新目的位置路径;
若所述跨层级移动指令的初始位置路径和所述***指令的位置路径相同,则将***指令的位置路径替换为所述目的位置路径,并将调整后的***指令确定为新的指令;
若所述跨层级移动指令的初始位置路径与所述***指令的位置路径长度相同且最后一个值不同,则根据跨层级移动指令的初始位置路径和/或目的位置路径调整***指令的位置路径,并将调整后的***指令确定为新的指令;
若所述跨层级移动指令的初始位置路径包含所述***指令的位置路径,则将所述***指令的位置路径的公共前缀替换为所述跨层级移动指令的目的位置路径,并将调整后的***指令确定为新的指令;
若所述***指令的位置路径包含所述跨层级移动指令的初始位置路径,则根据所述跨层级移动指令的目的位置路径调整所述***指令的位置路径,将调整后的***指令确定为新的指令。
7.根据权利要求2所述的方法,其特征在于,第一指令为跨层级移动指令,第二指令为同层级移动指令,根据所述类别及位置路径的关系,对所述第二指令的位置路径和/或节点数据进行调整,获得新的指令,包括:
对所述跨层级移动指令的目的位置路径进行基准化处理,获得新目的位置路径;
若所述跨层级移动指令的初始位置路径和所述同层级移动指令的位置路径相同,则按照设定偏移方式对基准化处理后的所述同层级移动指令进行转换,获得新的指令;
若所述跨层级移动指令的初始位置路径与所述同层级移动指令的位置路径长度相同且最后一个值不同,则根据跨层级移动指令的初始位置路径和/或目的位置路径调整同层级移动指令的位置路径,并将调整后同层级移动指令确定为新的指令;
若所述跨层级移动指令的初始位置路径包含所述同层级移动指令的位置路径,则将所述同层级移动指令的位置路径的公共前缀替换为所述跨层级移动指令的目的位置路径,并将调整后的同层级移动指令确定为新的指令;
若所述同层级移动指令的位置路径包含所述跨层级移动指令的初始位置路径,则根据所述跨层级移动指令的目的位置路径调整所述同层级移动指令的位置路径,将调整后的同层级移动指令确定为新的指令;其中,同层级移动指令的位置路径包括起始路径和最终路径。
8.根据权利要求2所述的方法,其特征在于,若第一指令为跨层级移动指令,第二指令为替换指令,根据所述类别及位置路径的关系,对所述第二指令的位置路径和/或节点数据进行调整,获得新的指令,包括:
对所述跨层级移动指令的目的位置路径进行基准化处理,获得新目的位置路径;
若所述跨层级移动指令的初始位置路径和所述替换指令的位置路径相同,则将替换指令的位置路径替换为所述跨层级移动指令的目的位置路径,并将调整后的替换指令确定为新的指令;
若所述跨层级移动指令的初始位置路径与所述替换指令的位置路径长度相同且最后一个值不同,则根据跨层级移动指令的初始位置路径和/或新目的位置路径调整替换指令的位置路径和/或节点数据,并将调整后替换指令确定为新的指令;
若所述跨层级移动指令的初始位置路径包含所述替换指令的位置路径,则将所述替换指令的位置路径的公共前缀替换为所述跨层级移动指令的目的位置路径,并将调整后的替换指令确定为新的指令;
若所述替换指令的位置路径包含所述跨层级移动指令的初始位置路径,则根据所述跨层级移动指令更新所述替换指令的节点数据,将调整后的替换指令确定为新的指令。
9.根据权利要求8所述的方法,其特征在于,在若所述替换指令的位置路径包含所述跨层级移动指令的初始位置路径,则根据所述跨层级移动指令更新所述替换指令的节点数据,将调整后的替换指令确定为新的指令之后,还包括:
若所述跨层级移动指令的新目的位置路径不是所述替换指令的位置路径的子节点,则生成一个新的删除指令,所述新的删除指令的位置路径为所述跨层级移动指令的目的位置路径,节点数据为所述跨层级移动指令的节点数据。
10.一种文档的协同编辑方法,所述方法由客户端执行,其特征在于,包括:
检测用户对当前版本文档的编辑操作,并根据所述编辑操作生成操作指令;所述操作指令包括跨层级移动指令;
将所述操作指令发送至服务器,使服务器根据所述操作指令对文档进行修改或对所述操作指令做转换操作;
接收服务器推送的指令,并根据接收到的指令对文档进行修改,获得最新版本的文档。
11.一种文档的协同编辑装置,所述装置设置于服务器中,其特征在于,包括:
操作指令接收模块,用于接收至少两个客户端分别发送的基于同一版本文档的操作指令;所述至少两个操作指令中包含跨层级移动指令;
指令转换模块,用于根据第一指令对数据库中的文档进行初次修改,并对第二指令进行转换,获得新的指令;其中,第一指令为先接收到的操作指令,第二指令为后接收到的操作指令;
再次修改文档模块,用于根据所述新的指令对初次修改的文档进行再次修改,获得最新版本的文档,并向与第二指令对应的客户端发送处理成功的信息;
指令推送模块,用于将所述新的指令推送至其他客户端,以使其他客户端根据所述新的指令对客户端的文档进行修改,使所有客户端的文档版本一致;所述其他客户端为所述至少两个客户端中除与第二指令对应的客户端之外的客户端。
12.一种文档的协同编辑装置,所述装置设置于客户端中,其特征在于,包括:
操作指令生成模块,用于检测用户对当前版本文档的编辑操作,并根据所述编辑操作生成操作指令;所述操作指令包括跨层级移动指令;
操作指令发送模块,用于将所述操作指令发送至服务器,使服务器根据所述操作指令对文档进行修改或对所述操作指令做转换操作;
指令接收模块,用于接收服务器推送的指令,并根据接收到的指令对文档进行修改,获得最新版本的文档。
13.一种电子设备,其特征在于,所述电子设备包括:
一个或多个处理装置;
存储装置,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理装置执行,使得所述一个或多个处理装置实现如权利要求1-10中任一所述的文档的协同编辑方法。
14.一种计算机可读介质,其上存储有计算机程序,其特征在于,该程序被处理装置执行时实现如权利要求1-10中任一所述的文档的协同编辑方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910441930.3A CN110162761B (zh) | 2019-05-24 | 2019-05-24 | 文档的协同编辑方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910441930.3A CN110162761B (zh) | 2019-05-24 | 2019-05-24 | 文档的协同编辑方法、装置、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110162761A true CN110162761A (zh) | 2019-08-23 |
CN110162761B CN110162761B (zh) | 2023-06-30 |
Family
ID=67632948
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910441930.3A Active CN110162761B (zh) | 2019-05-24 | 2019-05-24 | 文档的协同编辑方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110162761B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113312885A (zh) * | 2021-07-30 | 2021-08-27 | 腾讯科技(深圳)有限公司 | 协同操作处理方法、装置、设备以及介质 |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6983416B1 (en) * | 2000-04-04 | 2006-01-03 | Electronics And Telecommunications Research Institute | System and method for cooperative editing of web document |
US20130339847A1 (en) * | 2012-06-13 | 2013-12-19 | International Business Machines Corporation | Managing concurrent editing in a collaborative editing environment |
US20160173594A1 (en) * | 2014-12-11 | 2016-06-16 | LiveLoop, Inc. | Blended operational transformation for multi-user collaborative applications |
EP3230894A1 (en) * | 2014-12-11 | 2017-10-18 | Liveloop, Inc. | Blended operational transformation for multi-user collaborative applications |
CN107943777A (zh) * | 2017-12-14 | 2018-04-20 | 北京久蓉科技有限公司 | 一种协同编辑、协同处理方法、装置、设备及存储介质 |
CN109445657A (zh) * | 2018-10-17 | 2019-03-08 | 天津字节跳动科技有限公司 | 文档编辑方法和装置 |
CN109492200A (zh) * | 2018-10-26 | 2019-03-19 | 天津字节跳动科技有限公司 | 协同文档还原方法、装置、存储介质及电子设备 |
CN109543163A (zh) * | 2018-10-30 | 2019-03-29 | 天津字节跳动科技有限公司 | 文档修订记录获取方法、装置、存储介质及电子设备 |
US20190102370A1 (en) * | 2015-04-30 | 2019-04-04 | Workiva Inc. | System and method for convergent document collaboration |
CN109710905A (zh) * | 2018-09-30 | 2019-05-03 | 天津字节跳动科技有限公司 | 文档协同编辑方法、装置、存储介质及电子设备 |
-
2019
- 2019-05-24 CN CN201910441930.3A patent/CN110162761B/zh active Active
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6983416B1 (en) * | 2000-04-04 | 2006-01-03 | Electronics And Telecommunications Research Institute | System and method for cooperative editing of web document |
US20130339847A1 (en) * | 2012-06-13 | 2013-12-19 | International Business Machines Corporation | Managing concurrent editing in a collaborative editing environment |
US20160173594A1 (en) * | 2014-12-11 | 2016-06-16 | LiveLoop, Inc. | Blended operational transformation for multi-user collaborative applications |
EP3230894A1 (en) * | 2014-12-11 | 2017-10-18 | Liveloop, Inc. | Blended operational transformation for multi-user collaborative applications |
US20190102370A1 (en) * | 2015-04-30 | 2019-04-04 | Workiva Inc. | System and method for convergent document collaboration |
CN107943777A (zh) * | 2017-12-14 | 2018-04-20 | 北京久蓉科技有限公司 | 一种协同编辑、协同处理方法、装置、设备及存储介质 |
CN109710905A (zh) * | 2018-09-30 | 2019-05-03 | 天津字节跳动科技有限公司 | 文档协同编辑方法、装置、存储介质及电子设备 |
CN109445657A (zh) * | 2018-10-17 | 2019-03-08 | 天津字节跳动科技有限公司 | 文档编辑方法和装置 |
CN109492200A (zh) * | 2018-10-26 | 2019-03-19 | 天津字节跳动科技有限公司 | 协同文档还原方法、装置、存储介质及电子设备 |
CN109543163A (zh) * | 2018-10-30 | 2019-03-29 | 天津字节跳动科技有限公司 | 文档修订记录获取方法、装置、存储介质及电子设备 |
Non-Patent Citations (14)
Title |
---|
GOOGLE DRIVE TEAM: "What is different about the new Google Docs:Making Collaboration fast", 《GOOGLE DRIVE BLOG》 * |
GOOGLE DRIVE TEAM: "What is different about the new Google Docs:Making Collaboration fast", 《GOOGLE DRIVE BLOG》, 23 September 2010 (2010-09-23) * |
PLOYCOM: "Ploycom RealPresence Collaboration Server 1800/2000/4000/Virtual Edition Getting Started Guide", 《GETTING STARTED GUIDE》 * |
PLOYCOM: "Ploycom RealPresence Collaboration Server 1800/2000/4000/Virtual Edition Getting Started Guide", 《GETTING STARTED GUIDE》, 31 October 2018 (2018-10-31) * |
徐保民,徐爱琴,李峰: "协同编辑器中版本管理的设计与实现", 计算机工程与应用, no. 05 * |
王丹等: "移动云平台下基于局部复制的结构性文档协同编辑冲突消解", 《小型微型计算机***》 * |
王丹等: "移动云平台下基于局部复制的结构性文档协同编辑冲突消解", 《小型微型计算机***》, no. 10, 15 October 2018 (2018-10-15) * |
郭拥宾;施运梅;李宁;: "基于文档标注和锁的一致性维护方法", 计算机工程与设计, no. 08 * |
郭拥宾等: "基于文档标注和锁的一致性维护方法", 《计算机工程与设计》 * |
郭拥宾等: "基于文档标注和锁的一致性维护方法", 《计算机工程与设计》, no. 08, 16 August 2016 (2016-08-16) * |
高丽萍等: "移动平台下实时协同关联图文档模型一致性维护算法研究", 《小型微型计算机***》 * |
高丽萍等: "移动平台下实时协同关联图文档模型一致性维护算法研究", 《小型微型计算机***》, no. 08, 15 August 2018 (2018-08-15) * |
高瑜蔚等: "文档协同处理***的设计与实现", 《北京信息科技大学学报(自然科学版)》 * |
高瑜蔚等: "文档协同处理***的设计与实现", 《北京信息科技大学学报(自然科学版)》, no. 01, 15 February 2013 (2013-02-15) * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113312885A (zh) * | 2021-07-30 | 2021-08-27 | 腾讯科技(深圳)有限公司 | 协同操作处理方法、装置、设备以及介质 |
CN113312885B (zh) * | 2021-07-30 | 2021-09-28 | 腾讯科技(深圳)有限公司 | 协同操作处理方法、装置、设备以及介质 |
Also Published As
Publication number | Publication date |
---|---|
CN110162761B (zh) | 2023-06-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110442330A (zh) | 列表组件转换方法、装置、电子设备及存储介质 | |
CN108418851A (zh) | 策略发布***、方法、装置及设备 | |
CN109543163A (zh) | 文档修订记录获取方法、装置、存储介质及电子设备 | |
CN110011785A (zh) | 一种基于区块链对结构化作品进行存证的方法及装置 | |
CN109710905A (zh) | 文档协同编辑方法、装置、存储介质及电子设备 | |
CN106293765A (zh) | 一种布局更新方法及装置 | |
CN109471838A (zh) | 目录文档的操作方法、装置、电子设备、可读存储介质 | |
CN109710865A (zh) | 开放式自动布局方法、装置、电子设备和存储介质 | |
CN109359281A (zh) | 动态表单生成方法及装置 | |
CN101405761A (zh) | 服务序列中的变换的声明 | |
CN109492200A (zh) | 协同文档还原方法、装置、存储介质及电子设备 | |
CN109726217A (zh) | 一种数据库操作方法、装置、设备及存储介质 | |
CN111857720B (zh) | 用户界面状态信息的生成方法、装置、电子设备及介质 | |
CN109492208A (zh) | 文档编辑方法及其装置、设备、存储介质 | |
CN110119386A (zh) | 数据处理方法、数据处理装置、介质和计算设备 | |
US9244652B1 (en) | State management for task queues | |
CN111124541A (zh) | 一种配置文件的生成方法、装置、设备及介质 | |
CN110162761A (zh) | 文档的协同编辑方法、装置、设备及存储介质 | |
CN110083677A (zh) | 联系人的搜索方法、装置、设备及存储介质 | |
CN111278085B (zh) | 用于获取目标网络的方法及装置 | |
CN109359117A (zh) | 一种卡片数据的更新方法和装置 | |
CN109254778A (zh) | 用于部署信息流***的方法和装置 | |
US9471640B2 (en) | Automatic conversion of units of measure during data stream processing | |
CN116860286A (zh) | 页面动态更新方法、装置、电子设备和计算机可读介质 | |
CN110347468A (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 |