一種基于操作轉換的文本編輯實時協(xié)同方法
【專利摘要】本發(fā)明提出了一種基于操作轉換的文本編輯實時協(xié)同方法,本發(fā)明首先通過產生的本地操作發(fā)送到其他站點,然后通過因果接受找出與該操作具有并發(fā)關系的操作;對其進行轉換得到該操作在該站點的執(zhí)行形式,并將該操作加入到執(zhí)行隊列,完成協(xié)同編輯;本發(fā)明能夠支持在網絡環(huán)境下多用戶實時對同一文本進行協(xié)同編輯;本發(fā)明能夠支持實時協(xié)同編輯工作,即所有的用戶最終得到一致的結果的,并且結果是用戶想要的;本發(fā)明應用到實時協(xié)同編輯中不需要全序控制;不僅能夠做到結果一致,而且能夠保證意圖維護。
【專利說明】一種基于操作轉換的文本編輯實時協(xié)同方法
【技術領域】
[0001]本發(fā)明涉及計算機支持的協(xié)同領域,尤其涉及一種基于操作轉換的文本編輯實時協(xié)同方法。
【背景技術】
[0002]公知,協(xié)同編輯是計算機支持的協(xié)同工作中的一個重要應用領域。協(xié)同編輯作為一種分布式系統(tǒng),允許地理位置上分散的用戶共同編輯同一對象。為了實現實時協(xié)同編輯,每個站點都復制了一個相同的對象,以便達到最短的操作響應時間。然而在網絡環(huán)境下,不同用戶的操作必然會發(fā)生沖突,并發(fā)控制方法就是為了解決高并發(fā)情況下的沖突事件能夠無沖突的執(zhí)行,達成共同的目標。
[0003]目前實時協(xié)同編輯工作中并發(fā)控制策略的主要使用的是操作轉換(Operat1nalTransformat1pn, 0T)的方法。OT是一種樂觀的并發(fā)控制方法,允許沖突的發(fā)生,通過把操作轉換成另一種執(zhí)行形式得到一致的結果。具體來說,對本地操作立即執(zhí)行,因此能夠很好的滿足實時性的要求;對接收到的遠程操作,首先要將該操作對已執(zhí)行的并發(fā)操作進行轉換,然后才執(zhí)行轉換的結果。OT能夠確保即使在不同站點執(zhí)行的操作順序不同,最終也能得到一致的結果。
[0004]OT從協(xié)同編輯系統(tǒng)中抽象出兩個元操作(插入操作,刪除操作),并且認為操作的對象是線性排列結構。最初提出的OT算法被應用于協(xié)同文本編輯,即操作的對象是文本對象(字符)。實際上,由于OT轉換的是操作對象的位置,OT可以支持任何線性排列的復雜對象。本發(fā)明提出的OT算法同樣可以適用于其他復雜對象的協(xié)同。
[0005]OT算法通常包含操作轉換函數和控制過程。操作轉換函數負責定義操作之間如何轉換,控制過程主要負責定義某個該操作與哪些操作進行轉換。
[0006]基于Lamport定義的“happened-before” [I]理論定義操作之間的先后關系:
[0007]定義I因果關系給定任意兩個分別位于站點i和站點j上的操作OPa和0Pb,稱OPa和OPb存在因果關系(記作OPa — OPb),當且僅當OPa和OPb滿足下列三個條件之一:(I) i=j并且操作OPa發(fā)生在OPb之前;(2) i古j并且操作OPa在站點j的執(zhí)行先于操作OPb的產生;(3)存在操作OPx,并且有OPa — OPx和OPx — OPb。
[0008]定義2并發(fā)關系給定任意兩個操作OPa和0Pb,稱OPa和OPb存在并發(fā)關系(記做OPa 11 OPb),當且僅當OPa和OPb既不滿足OPa — OPb,又不滿足OPb — OPa。
[0009]OT的一致性模型要求能夠保持操作之間的因果關系,結果的一致性以及意圖保持。實際情況下,大多數OT算法利用控制過程對操作施加全序達到唯一的轉換路徑,從而實現結果一致,但是這種方法未能考慮操作之間的位置關系,并不能保證實現意圖保持。圖2描述了全序OT算法不能實現意圖保持的實例。
[0010]當出現Ins(p+1, c)操作,對并發(fā)的操作序列{Del(p), Ins (ρ)}進行轉換的時候會出現兩種結果,因此這是一種潛在的導致結果不一致和違背用戶意圖的因素。為了克服上述現有技術的不足,本發(fā)明提供了一種基于操作轉換的文本編輯實時協(xié)同方法,能夠實現結果一致和意圖保持。其中,意圖保持遵守Lidu[2]提出的保持操作之間的位置關系。
[0011]參考文獻:
[0012][I] Lamport Leslie.Time, clocks, and the ordering of events in adistributed system.Communicat1n of ACM, 1978, 21 (7):558-565.
[0013][2]Li Du,Li Ru1.An admissibility-based operat1nal transformat1nframework for collaborative editing systems.Computer Supported CooperativeWork(CSCff), 2010, 19(1):1-43.
【發(fā)明內容】
[0014]本發(fā)明的技術方案是:一種基于操作轉換的文本編輯實時協(xié)同方法,包括如下步驟:所述協(xié)同編輯系統(tǒng)中的每個站點都包括接受隊列,等待隊列,執(zhí)行隊列;
[0015]步驟1:每個站點產生的操作在該站點立即執(zhí)行,并將該操作加入執(zhí)行隊列,同時將該操作發(fā)送到其他站點;
[0016]步驟2:每個站點接收到的遠程操作加入到接收隊列,當該遠程操作的所有因操作已經被加入到執(zhí)行隊列,進入步驟3,否則,將該操作加入到等待隊列中;
[0017]步驟3:每個站點根據操作規(guī)則在執(zhí)行隊列中找出與該操作具有并發(fā)關系的操作;
[0018]步驟4:將找出的并發(fā)操作進行轉換得到該操作在該站點的執(zhí)行形式;
[0019]步驟5:執(zhí)行換后的操作并將該操作加入到執(zhí)行隊列;
[0020]步驟6:完成協(xié)同編輯。
[0021]根據權利要求1所述的一種基于操作轉換的文本編輯實時協(xié)同方法,其特征在于:所述的找出與該操作具有并發(fā)關系的操作的規(guī)則為:
[0022]包含轉換用IT表示,排斥轉換用ET表示;對于任何一個操作ο,ο.t表示操作的類型:插入記為Ins、刪除記為Del,0.c表示操作的作用字符,ο.P表示操作的位置,0.1d表示產生該操作的站點標識,ο.dn表示與之轉換的刪除操作位置小于ο.ρ的操作數量;操作的包含轉換或者排斥轉換只會改變ο.P的值,其他屬性保持不變;每個站點維護一個字典Die,用于查詢ol在對o2進行包含轉換IT (ol, o2)之前的位置,其中ol為插入操作,o2為刪除操作,字典的關鍵字為〈indexl, index2>的二元組,值為ol在對o2進行包含轉換之前的ρ ;indexl為操作ol在執(zhí)行隊列中的位置,index2為操作o2在執(zhí)行隊列中的位置;
[0023]當ol.t = Ins, o2.t = Ins ;如果 ο1.ρ〈ο2.ρ,則 IT(ol,o2)=Ins (pi, cl, idl, dnl);如果 ol.p = o2.p 并且 ol.dn〈o2.dn,則 IT(ol,o2)=Ins (pi, cl, idl, dnl);如果 ol.p = o2.p 并且 ol.dn = o2.dn 和 ol.1d<o2.1d,則 IT (ol, o2)=Ins (pi, cl, idl, dnl);如果 ol.p>o2.p,貝丨J IT (ol, o2) = Ins (pl+1, cl, idl, dnl);如果
ol.p = o2.p 并且 o1.dn>o2.dn,則 IT (ol, o2) = Ins (pl+1, cl, idl, dnl);如果 ol.p = o2.p并且 ol.dn = o2.dn 和 ol.1d>o2.1d,則 IT (ol, o2) = Ins (pl+1, cl, idl, dnl);
[0024]當ol.t = Ins, o2.t = Del ;如果 ol.ρ ^ ο2.ρ,貝IT (ο?, ο2)=Ins (pi, cl, idl, dnl);如果 ol.ρ>ο2.ρ,則 IT (ol, ο2) = Ins(pl-1, cl, idl, dnl+1);Dic<indexl, index2> = ol.p ;
[0025]當ol.t = Del, o2.t = Ins ;如果 ol.ρ〈ο2.p,則 IT (ol, o2) = Del (pi);如果ol.p ^ ο2.ρ,則 IT (ol, o2) = Del (pl+1);
[0026]當ol.t = Del, o2.t = Del ;如果 ol.ρ〈ο2.p,則 IT (ol, o2) = Del (pi);如果ol.p>o2.p,則 IT (ol, o2) = Del (pl-1);如果 ol.p = o2.p,則 IT (ol, o2) = Nop ;其中 Nop
表示空操作;
[0027]當ol.t = Ins, o2.t = Ins ;如果 ol.ρ ^ ο2.ρ,則 ΕΤ(ο1,ο2)=Ins (pi, cl, idl, dnl);如果 ol.ρ = ο2.ρ,則 ET (ol, ο2) = Ins (pl-1, cl, idl, dnl);
[0028]當ol.t = Ins, o2.t = Del;如果 ο1.ρ〈ο2.ρ,則 ET(ol,o2)=Ins (pi, cl, idl, dnl);如果 ol.p>o2.p,則 ET (ol, o2) = Ins (pi,, cl, idl, dnl_l),pi,=Dic<indexl, index2>,如果 ol.p = o2.p,則 pi,= Dic<indexl, index2> ;假如 pi,>o2.p,則 ET (ol, o2) = Ins (pi,,cl, idl, dn 1-1);否則 ET (ol, o2) = Ins (pi,, cl, idl, dnl);
[0029]當ol.t = Del, o2.t = Ins ;如果 ol.ρ〈ο2.p,則 ET (ol, o2) = Del (pi);如果 ol.ρ> o2.p,則 ET (ol, o2) = Del (pl+1);不存在 ol.ρ = ο2.p 的情況;
[0030]當ol.t = Del, ο2.t = Del ;如果 ol.ρ〈ο2.ρ,則 ET (ol, ο2) = Del (pi);如果
01.ρ ^ ο2.ρ,則 ET (ol, o2) = Del (pl+1)。
[0031]所述的步驟3中在執(zhí)行隊列中找出與該操作具有并發(fā)關系的操作包括如下步驟:
[0032]將站點歷史記錄劃分成因操作序列,并發(fā)操作序列兩部分;從左到右掃描歷史記錄H[k],k e {0,1,.... .L},L為H的長度,并且記錄與操作ο具有因果關系的操作的位置ha,ha初始為-1 ;如果操作0與町《是并發(fā)關系,則繼續(xù)判斷第k+Ι個操作;如果操作0與H[k]的操作是因果關系,則對第k到n+2的操作交換H[k]和H[k-1]的位置,然后將ha加I ;
[0033]3.1 當 k_ha〈3 時,記 ο I = H[k], o2 = H[k_l];根據 ο I = H[k], ο2 = H[k_l]的操作類型,按照轉換規(guī)則5-8,調用ET (ol,o2)的到ol’,然后根據o2.t和ol.t的操作類型,按照轉換規(guī)則1-4,調用IT(02,ol’ )的到02’ ;分別賦值H[k] = o2’,H[k_l] = ol’,實現了交換H[k],H[k-l],交換之后執(zhí)行效果相同;
[0034]3.2當k-ha≤3時,判斷k_l到n+2的操作中是否存在{Ins(p, c), Del (ρ)}和{Del (ρ),Ins (p, c)的連續(xù)序列;
[0035]如果不存在,則根據opl =H[k],op2 = H[k-l]的操作類型,按照轉換規(guī)則5_8,調用ET (opl, op2)的到opl’,然后根據op2.t和opl.t的操作類型,按照轉換規(guī)則1-4,調用ΙΤ(ορ2,ορ)的到 ορ2’;分別賦值 H[k] =op2,,H[k_l] = opl’,實現交換 H[k]和 H[k_l]的執(zhí)行順序,交換之后執(zhí)行的效果相同;將k減1,繼續(xù)上面的判斷;如果存在,則按照如下兩種情況進行處理:
[0036]存在{Ins(ρ, c),Del (ρ)},其中 H[k] = ol,H[k_l] = Ins (p, c, dn, id)=o2,H[k_2] =Del(p) = o3 ;查詢 Dic〈idnexl, idnex3> 的值得到 pi’,ol.ρ = ρ’ ;按照規(guī)則I調用IT(o3,ol)得到o3,,IT(o2,ol) =。2,;將三個操作的位置互換得到,H[k]=o3,H[k_l] = o2,H[k] = ο I ;
[0037]存在{Del(ρ),Ins (p, c)},其中 H[k] = ol,H[k_l] = Ins (p, c, dn, id)=
02,H[k-2] = Del (p) = o3 ;如果 0.p>o2.p,則 0.dn 加 I ;ο.ρ < ο2.ρ,則 ο2.ρ 加 I, ol.ρ加I ;將三個操作的位置互換得到,H[k] = o3,H[k-l] = o2,H[k] = ol。
[0038]根據權利要求4所述的一種基于操作轉換的文本編輯實時協(xié)同方法,其特征在于:所述的步驟5包括如下步驟:
[0039]5.1 當 L-k < 2 時,記 opl = H[k], k e {ha+1,...., L};根據 op 和 opl 的操作類型,按照轉換規(guī)則1-4,調用IT(op,opl)得到opl’ 加I,繼續(xù)進行判斷并調用IT進行轉換;
[0040]5.2當L_k>2時,判斷ha+Ι到L的操作中是否存在{Ins (p, c),Del (ρ)}和{Del (ρ), Ins (p, c)的連續(xù)序列;
[0041]存在{Ins(p, c), Del (ρ)},其中 opl = H[k] = Ins (p, c, dn, id), op2 = H[k+1]== Del(p);如果 op.p>opl.p,則將 op.dn 加 I,然后返回 op’= op ;如果 op.p ≤opl.p,貝丨J返回 op’ = op ;
[0042]存在{Del(ρ),Ins (p, c)},其中 opl = H[k] = Del (ρ), ορ2 = H[k+1]==Ins (ρ, c, dn, id);如果 op.t = Ins,則將 op.p 存入 Dic<indexl, index2>,其中 indexl 等于L, index2為k ;然后根據轉換規(guī)則2調用IT (op, opl)得到op,,然后根據轉換規(guī)則I調用IT (op,,op)得到op”;op”為操作op在該站點的執(zhí)行形式;如果op.t = Del, op.ρ = opl.P,則操作op在該站點的執(zhí)行形式為空操作,op.ρ不等于opl.ρ,則操作op為該站點的執(zhí)行形式。
[0043]本發(fā)明的有益效果是:本發(fā)明應用到實時協(xié)同編輯中不需要全序控制;不僅能夠做到結果一致,而且能夠保證意圖維護。
【專利附圖】
【附圖說明】
[0044]圖1是本發(fā)明的流程圖;
[0045]圖2.1是本發(fā)明的合并包含轉換示意圖;
[0046]圖2.2是本發(fā)明的依次包含轉換示意圖;
[0047]圖3.1是本發(fā)明的合并后向轉換示意圖;
[0048]圖3.2是本發(fā)明的依次后向轉換示意圖。
【具體實施方式】
[0049]對本發(fā)明的核心步驟作進一步詳細的描述,但本發(fā)明的實施方式不限于此。
[0050]首先,定義若干操作轉換規(guī)則。其中包含轉換用IT(Inclusive Transformat1n)表示,排斥轉換用ET (Exclusive Transformat1n)表示。對于任何一個操作op, op.t表示操作的類型(插入記為Ins、刪除記為Del) ,op.c表示操作的作用字符,op.ρ表示操作的位置,op.1d表示產生該操作的站點標識,op.dn表示與之轉換的刪除操作位置小于op.ρ的數目。操作的包含轉換或者排斥轉換只會改變op.ρ的值,其他屬性保持不變。每個站點維護一個字典Die,便于查詢opl在對op2進行包含轉換IT (opl, op2)之前的位置,其中opl為插入操作,op2為刪除操作,字典的關鍵字為〈idnexl, index2>的二元組,值為opl在對op2進行包含轉換之前的P。indexl為操作opl在執(zhí)行隊列中的位置,index2為操作op2在執(zhí)行隊列中的位置。
[0051]1.當 opl.t = Ins, op2.t = Ins ;如果 opl.ρ〈ορ2.ρ,則 IT(opl,op2)=Ins (pi, cl, idl, dnl);如果 opl.ρ = ορ2.ρ 并且 opl.dn〈op2.dn,則 IT (opl, op2)=Ins (pi, cl, idl, dnl);如果 opl.p = op2.p 并且 opl.dn = op2.dn 和 opl.1d<op2.id,貝丨J IT (opl, op2) = Ins (pi, cl, idl, dnl);如果 opl.ρ>ορ2.p,貝丨J IT (opl, op2)=Ins (pl+1, cl, idl, dnl);如果 opl.p = op2.p 并且 opl.dn>op2.dn,則 IT (opl, op2)=Ins (pl+1, cl, idl, dnl);如果 opl.p = op2.p 并且 opl.dn = op2.dn 和 opl.1d>op2.1d,則IT (opl, op2) = Ins (pl+1, cl, idl, dnl);
[0052]2.當 opl.t = Ins, op2.t = Del ;如果 opl.p ^ op2.p,貝[I IT (opl, op2)=Ins (pi, cl, idl, dnl);如果 opl.p>op2.p,則 IT(opl,op2) = Ins (pl-1, cl, idl, ?η^Ι);Dic<indexl, index2> = opl.p ;
[0053]3.當 opl.t = Del, op2.t = Ins ;如果 opl.ρ〈ορ2.p,則 IT (opl, op2) = Del (pi);如果 opl.p ≥ op2.p,貝丨J IT (opl, op2) = Del (p!+l);
[0054]4.當 opl.t = Del, op2.t = Del ;如果 opl.ρ〈ορ2.p,則 IT (opl, op2) = Del (pi);如果 opl.p>op2.p,貝丨J IT (opl, op2) = Del (P1-1);如果 opl.p = op2.p,貝丨J IT (opl, op2)=Nop ;其中Nop表示空操作,不產生任何效果;
[0055]5.當 opl.t = Ins, op2.t = Ins ;如果 opl.p ^ ορ2.ρ,則 ET(opl,op2)=Ins (pi, cl, idl, dnl);如果 opl.p = op2.p,則 ET (opl, op2) = Ins (pl-1, cl, idl, dnl);
[0056]6.當 opl.t = Ins, op2.t = Del ;如果 opl.ρ〈ορ2.p,則 ET(opl,op2)=Ins (ρI, cl, idl, dnl);如果 opl.p>op2.p,則 ET (opl, op2) = Ins (pi,, cl, idl, dnl_l),pi,=Dic<indexl, index2>,即 pi’ 是字典中的詞;如果 opl.ρ = op2.p,則 pi’ =Dic〈indexl, index2> ;假如 pi,>ορ2.ρ,則 ET(opl,op2) = Ins (pi,,cl, idl, dnl_l);否則ET (opl, op2) = Ins (pi,, cl, idl, dnl);
[0057]7.當 opl.t = Del, op2.t = Ins ;如果 opl.ρ〈ορ2.p,則 ET (opl, op2) = Del (pi);如果 opl.ρ > op2.p,則 ET (opl, op2) = Del (pl+1);不存在 opl.p = op2.p 的情況;
[0058]8.當 opl.t = Del, op2.t = Del ;如果 opl.ρ〈ορ2.p,則 ET (opl, op2) = Del (pi);如果 opl.p ≥ ορ2.p,則 ET(opl,op2) = Del (pl+1);
[0059]1-8的轉換規(guī)則都是按照操作類型自動選擇的,其中1-4規(guī)則對應于ΙΤ,5_8規(guī)則對應于ET。比如opl.t = Ins, op2.t = Del,則自動按照規(guī)則2調用IT (opl, op2),按照規(guī)則 5 調用 ET (opl,op2)。
[0060]一種基于合并操作的操作轉換系統(tǒng)框架,包括下述步驟:
[0061]步驟1:每個站點上都有3個隊列:接收隊列,等待隊列,執(zhí)行隊列。每個站點產生的操作都會在該站點立即執(zhí)行,并將該操作加入執(zhí)行隊列。每個站點需要狀態(tài)向量SV(State Vector),向量的長度等于協(xié)同的站點數,SV的第i個分量等于第i個站點執(zhí)行的操作數。
[0062]接收隊列用于保存從其他協(xié)同站點發(fā)送到該站點的操作;所述等待隊列中操作的排列順序基于接收到的操作的時間順序;所述執(zhí)行隊列保存該站點執(zhí)行過的操作,其中操作的排列順序基于執(zhí)行順序。
[0063]廣播本地操作到其他協(xié)同站點。發(fā)送的操作包括如下信息:站點標識(id),操作的類型(Ins,Del),操作的位置(ρ),操作的目標(C),站點的狀態(tài)向量SV。SV[i]代筆第I個站點執(zhí)行的操作數目。假設當前站點為j,由于本地執(zhí)行了一個操作則將sv[j]加I。
[0064]步驟2:每個站點接收到的遠程操作加入到接收隊列,當該遠程操作的所有因操作已經被加入到執(zhí)行隊列,進入步驟3,否則,將該操作加入到等待隊列中.每當有遠程操作被加入到執(zhí)行隊列,則立即檢查等待隊列是否有滿足因果關系的操作,有則被后續(xù)步驟處理并且加入到執(zhí)行隊列,沒有則轉到接收隊列進行判斷。
[0065]每個站點接收到的遠程操作都加入到接收隊列。按照因果順序集成遠程操作。只有當一個操作的所有因操作已經被加入到執(zhí)行隊列,該操作才能被后續(xù)步驟處理。假如接收到的操作來自站點j,接收到的SV為S',當前的站點為i ;如果滿足SVi[j]+l = SVj[j],該遠程操作才會被后續(xù)步驟處理并加入到執(zhí)行隊列,同時將SViU]加I。否則,將該操作加入到等待隊列中。
[0066]步驟3:每個站點在執(zhí)行隊列中找出與該操作具有并發(fā)關系的操作。記被比較的兩個操作狀態(tài)向量分別為SV1、SV2,k e {O, 1,2,3……η},其中η是站點的數量,遍歷SV1和SV20如果SV1Di] <SV2[k]的次數少于n,則判斷兩個操作是并發(fā)操作,等于η則判斷SV1K代表的操作是因操作,SV2所代表的操作是果操作。
[0067]將站點歷史記錄劃分成因操作序列,并發(fā)操作序列兩部分,記錄它們的分界位置為ha。從左到右掃描歷史記錄H[k],k e {O, I,……L},L為H的長度,ha初始為-1。如果操作op與H[k]是并發(fā)關系,則繼續(xù)判斷第k+Ι個操作;如果操作op與H[k]的操作是因果關系,則對第k到ha+2的操作交換H[k]和H[k-1]的位置,然后將ha加I。
[0068]①當k_ha〈3 時,記 opl = H[k],op2 = H[k_l]。根據 opl = H[k],op2 = H[k_l]的操作類型,按照轉換規(guī)則5-8,調用ET(opl,op2)的到opl’,然后根據op2.t和opl.t的操作類型,按照轉換規(guī)則1-4,調用IT (op2,opl’)的到op2’。分別賦值H[k] =op2,,H[k_l]=opl’,實現了交換H[k], H[k-1]的目的,并且交換之后執(zhí)行的效果一樣。
[0069]②當k-ha≥3時,判斷k-Ι到記錄與操作op具有因果關系的操作的位置ha+2的操作中是否存在Uns (ρ, c), Del (ρ)}和{Del (p),Ins (p, c)的連續(xù)序列,即在同一個位置進行插入刪除(或者刪除插入)的連續(xù)操作。
[0070]③如果不存在,則根據opl = H[k],op2 = H[k_l]的操作類型,按照轉換規(guī)則5_8,調用ET (opl, op2)得到opl’,然后根據op2.t和opl.t的操作類型,按照轉換規(guī)則1-4,調用 IT(op2,opl’ )得到 ορ2,。
[0071]分別賦值H[k] =op2’,H[k_l] = opl’,實現了交換H[k],H[k_l]的目的,并且交換之后執(zhí)行的效果一樣。將k減1,繼續(xù)利用上面的過程交換H[k]和H[k-1]位置的操作。如果存在,但是opl.t = Del,則同樣按照上面的過程處理。
[0072]④存在{Ins(ρ, c),Del (ρ)},其中 H[k] =opl,H[k_l] = Ins (p, c, dn, id)=ορ2, H[k-2] = Del (ρ) = op3 ;查詢 Dic<idnexl, idnex3> 的值得到 pi,, opl.ρ = ρ,;按照規(guī)則I調用IT(op3,opl)得到ορ3,,IT(op2,opl) = ορ2,;將三個操作的位置互換得到,H[k] = op3,H[k_l] = op2, H[k] = opl。
[0073]⑤存在{Del(ρ),Ins (p, c)},其中 H[k] =opl,H[k_l] = Ins (p, c, dn, id)=op2, H[k-2] = Del (p) = op3 ;如果 op.p>op2.p,貝丨J op.dn 加 I ;op.p ( op2.p,貝丨J op2.p 加
I,opl.p加I ;將三個操作的位置互換得到,H[k] = op3,H[k-l] = op2, H[k] = opl。
[0074]步驟4:將找出的并發(fā)操作進行轉換得到該操作在該站點的執(zhí)行形式。經過上一個步驟之后,可以得知H[l,...,ha]為因操作,H[ha+l,——,L]為并發(fā)操作。將操作op對并發(fā)操作進行包含轉換得到op’,op’即為操作op在該站點的執(zhí)行形式。
[0075]①當L-ha < 2 時,記 opl = H[k], k e {ha+1,....,L}。根據 op 和 opl 的操作類型,按照轉換規(guī)則1-4,調用IT(op,opl)得到op’。將k加1,重復上述過程。
[0076]②當L_ha>2時,判斷ha+Ι到L的操作中是否存在{Ins (p, c), Del (ρ)}和{Del (p), Ins (p, c)的連續(xù)序列,即在同一個位置進行插入刪除(或者刪除插入)的連續(xù)操作。
[0077]③存在{Ins(p, c), Del (ρ)},其中 opl = H[k] = Ins (p, c, dn, id), op2 = H[k+1]==Del (p);如果 op.p>opl.p,則將 op.dn 加 I,然后返回 op,= op ;如果 op.p ≤ opl.ρ,則返回op,= op ;
[0078]④存在{Del(ρ), Ins (p, c)},其中 opl = H[k] = Del (ρ), op2 = H[k+1]==Ins (p, c, dn, id);如果 op.t = Ins,則將 op.p 存入 Dic<indexl, index2>,其中 indexl 等于L, index2為k。然后根據轉換規(guī)則2調用IT(op,opl)得到op’,然后根據轉換規(guī)則I調用IT (op,,op)得到op”。op”即為操作op在該站點的執(zhí)行形式。如果op.t = Del, op.ρ =opl.P,則操作op在該站點的執(zhí)行形式為空操作,沒有實際效果,也不會加入到執(zhí)行隊列。op.P不等于opl.P,則操作OP就是在該站點的執(zhí)行形式。
[0079]步驟5:執(zhí)行轉換后的操作并將該操作加入到執(zhí)行隊列;
[0080]步驟6:完成協(xié)同編輯。
[0081]下面利用一個實例來對本發(fā)明作進一步說明:
[0082]如表1所示,4個站點的協(xié)同文本編輯系統(tǒng),初始化文檔狀態(tài)為” abCd”,每個站點的本地操作如表1所示,站點操作的編號從O開始。在圖2中描述站點2執(zhí)行本地操作以及接收遠程操作的順序。表2給出了每個站點接收到的遠程操作的順序,可以看出每個站點接收的操作順序不一樣。從表3可以看出,采用上面提出的OT算法來支持這種協(xié)同,盡管執(zhí)行的操作順序不同,但是最終每個站點都得到了一致的結果并且實現了實時協(xié)同文本編輯。因為在定義包含轉換的時候,規(guī)定了如果在同一個位置插入字符,那么站點小的插入的位置在后面;所以,字符U、V的位置會在字符1、m之前,其他同理。顯然,最終的結果符合用戶操作的實時協(xié)同。
[0083]綜上所述,一種基于操作轉換的文本編輯實時協(xié)同方法,能夠實現多個站點協(xié)同的結果一致性與意圖維護。
[0084]表1站點的本地操作
[0085]
【權利要求】
1.一種基于操作轉換的文本編輯實時協(xié)同方法,其特征在于:包括如下步驟:所述協(xié)同編輯系統(tǒng)中的每個站點都包括接受隊列,等待隊列,執(zhí)行隊列; 步驟1:每個站點產生的操作在該站點立即執(zhí)行,并將該操作加入執(zhí)行隊列,同時將該操作發(fā)送到其他站點; 步驟2:每個站點接收到的遠程操作加入到接收隊列,當該遠程操作的所有因操作已經被加入到執(zhí)行隊列,進入步驟3,否則,將該操作加入到等待隊列中; 步驟3:每個站點根據操作 規(guī)則在執(zhí)行隊列中找出與該操作具有并發(fā)關系的操作; 步驟4:將找出的并發(fā)操作進行轉換得到該操作在該站點的執(zhí)行形式; 步驟5:執(zhí)行轉換后的操作并將該操作加入到執(zhí)行隊列; 步驟6:完成協(xié)同編輯。
2.根據權利要求1所述的一種基于操作轉換的文本編輯實時協(xié)同方法,其特征在于:所述的找出與該操作具有并發(fā)關系的操作的規(guī)則為: 包含轉換用IT表示,排斥轉換用ET表示;對于任何一個操作O, 0.t表示操作的類型:插入記為Ins、刪除記為Del, ο.c表不操作的作用字符,ο.ρ表不操作的位置,0.1d表不產生該操作的站點標識,ο.dn表示與之轉換的刪除操作位置小于P的數目;操作的包含轉換或者排斥轉換只會改變ο.P的值,其他屬性保持不變;每個站點維護一個字典Die,用于查詢ol在對o2進行包含轉換IT (ol, o2)之前的位置,其中ol為插入操作,o2為刪除操作,字典的關鍵字為〈idnexl, idnex2>的二元組,值為ol在對o2進行包含轉換之前的p ;idnexl為操作ol在執(zhí)行隊列中的位置,idnex2為操作o2在執(zhí)行隊列中的位置;
當 ol.t=Ins, o2.t=Ins;如果 ol.ρ〈ο2.p,則 IT (οI, ο2) =Ins (pi, cl, idl, dnl);如果 ol.ρ=ο2.ρ 并且 ol.dn<o2.dn,則 IT (ol, o2) =Ins (pi, cl, idl, dnl);如果 ol.p=o2.p并且 ol.dn=o2.dn 和 ol.1d<o2.1d,則 IT (ol, o2) =Ins (pi, cl, idl, dnl);如果 ol.p>o2.p,則 IT (ol, o2) =Ins (pl+1, cl, idl, dnl);如果 ol.p=o2.p 并且 ol.dn>o2.dn,則IT (ol, o2) =Ins (pl+1, cl, idl, dnl);如果 ol.p=o2.p 并且 ol.dn=o2.dn 和 ol.1d>o2.1d,則IT (ol, o2) =Ins (pl+1, cl, idl, dnl);
當 ol.t=Ins, o2.t=Del;如果 ol.p ^ o2.p,則 IT (ol, o2) =Ins (pi, cl, idl, dnl);如果ol.p>o2.p,則 IT (ol, o2) =Ins (pl-1, cl, idl, dnl+1) ; Dic<indexl, index2>=ol.p;
當 ol.t=Del, o2.t=Ins;如果 ol.ρ〈ο2.p,則 IT (ol, o2) =Del (pi);如果 ol.p ^ o2.ρ,則 IT(ol,o2)=Del(Pl+l);
當 ol.t=Del, ο2.t=Del;如果 ol.ρ〈ο2.ρ,貝丨J IT (ol, ο2) =Del (pi);如果 ol.ρ>ο2.ρ,貝丨JIT (ol, o2) =Del (P1-1);如果 ol.ρ=ο2.p,貝丨J IT (ol, o2) =Nop;其中 Nop 表示空操作;
當 ol.t=Ins, ο2.t=Ins;如果 ol.ρ ^ ο2.ρ,則 ET (ol, ο2) =Ins (pi, cl, idl, dnl);如果ol.ρ=ο2.ρ,則 ET (ol, ο2) =Ins (pl-1, cl, idl, dnl);
當 ol.t=Ins, ο2.t=Del; 如果 ol.ρ<ο2.ρ,則 ET (οI, o2) =Ins (pi, cl, idl, dnl);如果 ο 1.ρ>ο2.ρ,則 ET(ol,o2)=Ins(pl,,cl,idl,dnl-l),pl,=Dic〈indexl,index2> ;如果 ol.ρ=ο2.ρ,貝丨J pi ’ =Dic〈indexl, index2> ; 假如 pl,>o2.p,貝丨JET (ol, o2) =Ins (pi,, cl, idl, dnl-1);否則 ET (ol, o2) =Ins (pi,, cl, idl, dnl);
當 ol.t=Del, o2.t=Ins;如果 ol.ρ〈ο2.p,則 ET (ol, o2) =Del (pi);如果 ol.ρ > ο2.ρ,貝丨J ET (ol, ο2) =Del (pl+1);不存在 ol.ρ=ο2.ρ 的情況;當 ol.t=Del, ο2.t=Del;如果 ol.ρ〈ο2.ρ,則 ET (ol, ο2) =Del (pi);如果 ol.ρ ^ ο2.ρ,則 ET (ol,o2)=Del(pl+l)。
3.根據權利要求2所述的一種基于操作轉換的文本編輯實時協(xié)同方法,其特征在于:所述的步驟3中在執(zhí)行隊列中找出與該操作具有并發(fā)關系的操作包括如下步驟: 將站點歷史記錄劃分成因操作序列caList,并發(fā)操作序列coList兩部分;從左到右掃描歷史記錄H[k],k e {0,1,.....L},L為H的長度,并且記錄與操作ο具有因果關系的操作的位置η,η初始為-1 ;如果操作0與町《是并發(fā)關系,則繼續(xù)判斷第k+Ι個操作;如果操作ο與H[k]的操作是因果關系,則對第k到n+2的操作交換H[k]和H[k-1]的位置,然后將η加I ; . 3.1當 k-n〈3 時,記 ol=H[k], o2=H[k-l];根據 ol=H[k],o2=H[k_l]的操作類型,按照轉換規(guī)則5-8,調用ET (ol,o2)的到ol’,然后根據o2.t和ol.t的操作類型,按照轉換規(guī)則.1-4,調用 ΙΤ(ο2,οL)的到 ο2’;分別賦值町《=02’,!1[1^1]=01’,實現了交換!1[10,!1[1^1],交換之后執(zhí)行效果相同; .3.2當k-n≤3時,判斷k-Ι到n+2的操作中是否存在{Ins (p, c),Del (ρ)}和{Del (ρ),Ins (p, c)的連續(xù)序列; 如果不存在,則根據opl=H[k],op2=H[k-l]的操作類型,按照轉換規(guī)則5-8,調用ET(opl, op2)的到opr,然后根據op2.t和opl.t的操作類型,按照轉換規(guī)則1-4,調用ΙΤ(ορ2,ορL )的到 ορ2’;分別賦值 H[k]=op2’,H[k_l] =opl’,實現交換 H[k]和 H[k_l]的執(zhí)行順序,交換之后執(zhí)行的效果相同;將k減1,繼續(xù)上面的判斷;如果存在,則按照如下兩種情況進行處理:
存在{Ins (ρ, c), Del (ρ)},其中 H[k] =ol, H[k_l] =Ins (p, c, dn, id) =o2, H[k_2]=Del (p)=o3;查詢 Dic〈idnexl, idnex3> 的值得到 ρL,ol.p=p’ ;按照規(guī)則 I 調用 IT (o3, ol)得到.03,,IT(o2,ol)=o2,;將三個操作的位置互換得到,H[k]=03,H[k-l]=02,H[k]=0l ;
存在{Del (ρ), Ins (p, c)},其中 H[k] =ol, H[k_l] =Ins (p, c, dn, id) =o2, H[k_2]=Del (p)=o3;如果0.p>o2.p,貝丨J 0.dn加I ;0.p ^ ο2.p,貝丨J ο2.ρ加I, ol.ρ加I ;將三個操作的位置互換得到,H[k] =o3,H[k-l]=o2, H[k] =oI。
4.根據權利要求3所述的一種基于操作轉換的文本編輯實時協(xié)同方法,其特征在于:所述的步驟5包括如下步驟: . 5.1當L-k≤2時,記opI=H[k],k e {n+1,——,L};根據op和opl的操作類型,按照轉換規(guī)則1-4,調用IT(op,opl)得到opl’ 加1,繼續(xù)進行判斷并調用IT進行轉換; . 5.2當L-k>2時,判斷n+1到L的操作中是否存在{Ins (p,c),Del (ρ)}和{Del (ρ),Ins (p, c)的連續(xù)序列;
存在{Ins (p, c),Del (ρ)},其中 opl=H[k] =Ins (p, c, dn, id),op2=H[k+l] ==Del (ρ);如果 op.p>opl.p,則將 op.dn 加 I,然后返回 op,=op;如果 op.ρ ( opl.p,則返回 op,=op ;
存在{Del (ρ),Ins (p, c)},其中 opl=H[k] =Del (p),op2=H[k+l] ==Ins (p, c, dn, id);如果 op.t=Ins,則將 op.p 存入 Dic<indexl, index2>,其中 indexl 等于 L, index2 為 k ;然后根據轉換規(guī)則2調用IT (op, opl)得到op,,然后根據轉換規(guī)則I調用IT (op,,op)得到op”;op”為操作op在該站點的執(zhí)行形式;如果op.t=Del, op.p=opl.p,則操作op在該站點的執(zhí)行形式為空操作,op.ρ不等于opl.p,則操作op為該站點的執(zhí)行形式。
【文檔編號】G06F17/30GK104077425SQ201410362735
【公開日】2014年10月1日 申請日期:2014年7月28日 優(yōu)先權日:2014年7月28日
【發(fā)明者】何發(fā)智, 蔡維緯, 呂曉 申請人:武漢大學