專利名稱:一種實(shí)現(xiàn)數(shù)據(jù)同步的方法、系統(tǒng)、客戶端及服務(wù)器的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及開放移動(dòng)聯(lián)盟定義的同步標(biāo)簽語(yǔ)言(SyncML,SynchronizationMarker-up Language)數(shù)據(jù)同步規(guī)范技術(shù)領(lǐng)域,特別是指在SyncML協(xié)議實(shí)現(xiàn)數(shù)據(jù)同步的方法、系統(tǒng)、客戶端及服務(wù)器。
背景技術(shù):
為了制訂可以在多個(gè)平臺(tái)及網(wǎng)絡(luò)之間實(shí)現(xiàn)個(gè)人信息及企業(yè)內(nèi)數(shù)據(jù)同步的標(biāo)準(zhǔn)規(guī)格,開放移動(dòng)聯(lián)盟(OMA)提出了SyncML數(shù)據(jù)同步規(guī)范。開發(fā)SyncML的目的在于,使終端用戶、設(shè)備開發(fā)商、基礎(chǔ)構(gòu)件開發(fā)商、數(shù)據(jù)提供商、使用軟件開發(fā)商以及服務(wù)提供商協(xié)同工作,真正實(shí)現(xiàn)使用任何終端設(shè)備均可隨時(shí)隨地訪問任何網(wǎng)絡(luò)的數(shù)據(jù)。SyncML數(shù)據(jù)同步的典型應(yīng)用是移動(dòng)設(shè)備或應(yīng)用服務(wù)器、與網(wǎng)絡(luò)服務(wù)器之間的數(shù)據(jù)同步。除此之外,SyncML還可用于對(duì)等的數(shù)據(jù)同步,如兩臺(tái)PC之間的數(shù)據(jù)同步。
圖1為基于SyncML規(guī)范實(shí)現(xiàn)同步的示意圖??蛻舳伺c服務(wù)器經(jīng)過(guò)同步初始化階段的參數(shù)協(xié)商以后,互相發(fā)送各自發(fā)生改變的數(shù)據(jù),以保證雙方數(shù)據(jù)的同步。
同步客戶端(DS Client,Data Synchronization Client)通常指PC軟件、手機(jī)或PDA等智能終端。DS Client中設(shè)置有客戶端數(shù)據(jù)庫(kù)(ClientDatabase),用來(lái)存儲(chǔ)用戶所需的數(shù)據(jù),這些數(shù)據(jù)包括通訊錄、日程、便箋、短信、電子郵件等。這些數(shù)據(jù)均有標(biāo)準(zhǔn)規(guī)范定義其格式,同步客戶端可以將數(shù)據(jù)轉(zhuǎn)換成標(biāo)準(zhǔn)的格式發(fā)送給同步服務(wù)器,同步服務(wù)器處理后就可將數(shù)據(jù)保存入自己的數(shù)據(jù)庫(kù)中。
同步服務(wù)器(DS Server),可接收來(lái)自DS Client的數(shù)據(jù)同步消息和同步命令,并能向同步客戶端發(fā)送同步消息。該設(shè)備可以為網(wǎng)絡(luò)服務(wù)器或PC。DS Server中設(shè)置有服務(wù)器數(shù)據(jù)庫(kù)(Server Database),用來(lái)存放該同步服務(wù)器的數(shù)據(jù)。
同步客戶端和同步服務(wù)器都存儲(chǔ)有數(shù)據(jù)標(biāo)識(shí),其中,同步客戶端使用本地唯一標(biāo)識(shí)(LUID,Local Unique Identifier)作為數(shù)據(jù)標(biāo)識(shí),而同步服務(wù)器使用全球唯一標(biāo)識(shí)(GUID,Global Unique Identifier)作為數(shù)據(jù)標(biāo)識(shí)。
圖2為同步客戶端和同步服務(wù)器的數(shù)據(jù)存儲(chǔ)示意圖。參見圖2,在同步客戶端,只需維護(hù)各個(gè)LUID與數(shù)據(jù)之間的對(duì)應(yīng)關(guān)系,在同步服務(wù)器端,則不僅要維護(hù)各個(gè)GUID與數(shù)據(jù)之間的對(duì)應(yīng)關(guān)系,還要維護(hù)各個(gè)GUID與LUID之間的對(duì)應(yīng)關(guān)系。其中,數(shù)據(jù)同步的類型有多種,具體參見表1。
表1 另外,SyncML規(guī)范中規(guī)定的同步流程通常分為三個(gè)階段 1、同步初始化階段,主要完成身份鑒權(quán)、要同步的數(shù)據(jù)庫(kù)之間的協(xié)商、同步能力的協(xié)商(包括支持同步哪些數(shù)據(jù)、支持哪些同步類型等),該協(xié)商過(guò)程可能需要持續(xù)多次才能完成。
2、同步階段,主要包括客戶端和服務(wù)器中的一端,實(shí)時(shí)監(jiān)控?cái)?shù)據(jù)的狀態(tài),將發(fā)生改變的數(shù)據(jù)以操作命令的方式發(fā)送到客戶端和服務(wù)器中的另一端,由另一端使用發(fā)生改變的數(shù)據(jù)、執(zhí)行該操作命令(如更新、刪除、增加等操作命令)對(duì)自身數(shù)據(jù)進(jìn)行更新,以達(dá)到數(shù)據(jù)同步的目的。
3、同步完成階段,主要包括客戶端和服務(wù)器互相確認(rèn)同步完成。
現(xiàn)有技術(shù)中,為數(shù)據(jù)定義了文件夾(Folder)和文件(File)的存儲(chǔ)方式,該存儲(chǔ)方式模擬了PC機(jī)的基于文件夾和文件的樹狀目錄結(jié)構(gòu)。
對(duì)于以類似文件系統(tǒng)目錄結(jié)構(gòu)的方式存儲(chǔ)的數(shù)據(jù)而言,現(xiàn)有技術(shù)并未提出具體的同步方法,并且不支持同步整個(gè)目錄結(jié)構(gòu)中特定目錄下的內(nèi)容,也不能對(duì)某一物理方式存在的目錄結(jié)構(gòu)的內(nèi)容進(jìn)行分類同步。
但是,目前存在大量需要同步的以目錄結(jié)構(gòu)存儲(chǔ)的數(shù)據(jù)。例如,用戶手機(jī)內(nèi)存儲(chǔ)通訊錄、短信、電子郵件等幾個(gè)以物理方式存在的目錄結(jié)構(gòu)。按現(xiàn)有技術(shù),用戶只能同步短信這一整體目錄結(jié)構(gòu),而不能將已存儲(chǔ)的短信分為“笑話”和“祝?!眱蓚€(gè)邏輯類進(jìn)行同步,更不能只同步“笑話”這一邏輯類。同時(shí)也不支持一個(gè)數(shù)據(jù)項(xiàng)同時(shí)存在于兩個(gè)分類中,例如對(duì)于用戶通訊簿,張三既屬于“同事組”,又屬于“朋友組”的需求無(wú)法實(shí)現(xiàn) 可見,現(xiàn)有的數(shù)據(jù)同步技術(shù)還不能滿足實(shí)際的需求,尤其不能實(shí)現(xiàn)目錄結(jié)構(gòu)數(shù)據(jù)的同步。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明的主要目的在于提供實(shí)現(xiàn)數(shù)據(jù)同步的方法,以實(shí)現(xiàn)目錄級(jí)別的數(shù)據(jù)同步。
本發(fā)明的另一主要目的在于提供一種實(shí)現(xiàn)數(shù)據(jù)同步的系統(tǒng)、客戶端及服務(wù)器,能夠?qū)`活實(shí)現(xiàn)目錄的數(shù)據(jù)同步。
為達(dá)到上述目的,本發(fā)明的技術(shù)方案是這樣實(shí)現(xiàn)的 本發(fā)明公開了一種實(shí)現(xiàn)數(shù)據(jù)同步的方法,應(yīng)用于客戶端和服務(wù)器之間,該方法包括客戶端和服務(wù)器中的任一端發(fā)送第一同步命令至二者中的另一端;該方法還包括 在發(fā)送第一同步命令之前,客戶端和服務(wù)器確定待同步目錄; 所述第一同步命令的接收端在收到第一同步命令之后,按接收到的第一同步命令,對(duì)所確定的待同步目錄進(jìn)行數(shù)據(jù)同步。
其中,所述客戶端和服務(wù)器確定待同步目錄的方法為協(xié)商得到待同步目錄。
其中,所述客戶端和服務(wù)器協(xié)商得到待同步目錄的方法為所述客戶端和服務(wù)器中的任一端發(fā)送攜帶待同步目錄地址的第二同步命令至另一端,該另一端按第二同步命令中的待同步目錄地址確定當(dāng)前待同步的目錄。
其中,所述待同步目錄包括一個(gè)或多個(gè)目錄;當(dāng)待同步目錄包括多個(gè)目錄時(shí),所述客戶端和服務(wù)器通過(guò)發(fā)送第二同步命令協(xié)商得到待同步目錄的方法為針對(duì)待同步目錄中包括的所有目錄,所述客戶端和服務(wù)器中的任一端發(fā)送一個(gè)第二同步命令至另一端,該第二同步命令中攜帶所有目錄的地址;該另一端按第二同步命令中的所有目錄的地址確定當(dāng)前待同步目錄中包括的所有目錄;或者,針對(duì)待同步目錄中包括的每一目錄,所述客戶端和服務(wù)器中的任一端發(fā)送一個(gè)攜帶該目錄地址的第二同步命令至另一端;該另一端按每一第二同步命令中的目錄地址一一確定當(dāng)前待同步目錄中包括的每一目錄。
其中,所述客戶端和服務(wù)器中的任一端發(fā)送第二同步命令至另一端之前,包括該第二同步命令的發(fā)送端直接確定待同步目錄在本端的地址,然后將所確定的待同步目錄地址攜帶在第二同步命令中。
其中,所述客戶端和服務(wù)器中的任一端發(fā)送第二同步命令至另一端之前,包括該第二同步命令發(fā)送端確定該待同步目錄在另一端的目錄地址并將其作為待同步目錄地址攜帶在第二同步命令中。
其中,所述第二同步命令的發(fā)送端確定該待同步目錄在另一端的目錄地址的方法為另一端將待同步目錄在本端的目錄地址發(fā)送至該第二同步命令的發(fā)送端。
其中,所述第二同步命令發(fā)送端確定該待同步目錄在另一端的目錄地址的方法為該第二同步命令的發(fā)送端從另一端獲取該另一端的目錄結(jié)構(gòu),并按所獲取的目錄結(jié)構(gòu)確定待同步目錄在另一端的目錄地址。
其中,所述第二同步命令的發(fā)送端從另一端獲取該另一端的目錄結(jié)構(gòu)的方法為該第二同步命令的發(fā)送端發(fā)送第三同步命令至另一端,該第三同步命令指示請(qǐng)求獲取指定數(shù)據(jù)庫(kù)的目錄結(jié)構(gòu);該另一端在該第三同步命令的響應(yīng)中攜帶本端指定數(shù)據(jù)庫(kù)的目錄結(jié)構(gòu)并返回給該第二同步命令的發(fā)送端。
其中,所述在第三同步命令的響應(yīng)中攜帶指定數(shù)據(jù)庫(kù)的目錄結(jié)構(gòu)的方法為針對(duì)該目錄結(jié)構(gòu)中的每一節(jié)點(diǎn),使用一個(gè)該第三同步命令的子元素來(lái)攜帶該節(jié)點(diǎn)的地址;該所述第二同步命令的發(fā)送端在收到該第三同步命令的響應(yīng)后,按各節(jié)點(diǎn)的地址確定目錄結(jié)構(gòu)。
其中,所述在第三同步命令的響應(yīng)中攜帶指定數(shù)據(jù)庫(kù)的目錄結(jié)構(gòu)的方法為針對(duì)該目錄結(jié)構(gòu)中的每一節(jié)點(diǎn),使用一個(gè)該第三同步命令的子元素來(lái)攜帶該節(jié)點(diǎn)及其子節(jié)點(diǎn)的信息;或者,使用一個(gè)該第三同步命令的子元素來(lái)封裝整個(gè)目錄結(jié)構(gòu)的數(shù)據(jù)。
其中,所述第二同步命令發(fā)送端確定該待同步目錄在另一端的目錄地址的方法為該第二同步命令的發(fā)送端按用戶輸入的信息確定待同步目錄地址。
其中,所述第二同步命令發(fā)送端確定該待同步目錄在另一端的目錄地址的方法為第二同步命令發(fā)送端直接指定待同步目錄在另一端上的地址,如果該目錄地址在該另一端上不存在,則該另一端直接在第二同步命令發(fā)送端指定的地址上創(chuàng)建該待同步目錄。
其中,所述第二同步命令發(fā)送端確定該待同步目錄在另一端的目錄地址的方法為客戶端和服務(wù)器預(yù)先設(shè)定待同步目錄的地址。
其中,所述客戶端和服務(wù)器通過(guò)發(fā)送第二同步命令協(xié)商得到待同步目錄時(shí),進(jìn)一步包括協(xié)商當(dāng)前同步類型。
其中,所述協(xié)商同步類型的方法為在客戶端和服務(wù)器通過(guò)發(fā)送第二同步命令協(xié)商得到待同步目錄時(shí),該第二同步命令中進(jìn)一步攜帶同步類型,按該第二同步命令中的同步類型確定當(dāng)前同步類型。
其中,所述待同步目錄包括一個(gè)或多個(gè)目錄;當(dāng)待同步目錄包括多個(gè)目錄時(shí),所述客戶端和服務(wù)器通過(guò)發(fā)送第二同步命令協(xié)商得到待同步目錄和同步類型的方法為針對(duì)待同步目錄中包括的所有目錄,所述客戶端和服務(wù)器中的任一端發(fā)送一個(gè)第二同步命令至另一端,該第二同步命令中攜帶所有目錄的地址以及這些目錄對(duì)應(yīng)的同步類型;該另一端按第二同步命令中的所有目錄的地址確定當(dāng)前待同步目錄中包括的所有目錄以及當(dāng)前同步類型。
其中,所述待同步目錄包括一個(gè)或多個(gè)目錄;當(dāng)待同步目錄包括多個(gè)目錄時(shí),所述客戶端和服務(wù)器通過(guò)發(fā)送第二同步命令協(xié)商得到待同步目錄和同步類型的方法為針對(duì)待同步目錄中包括的所有目錄,所述客戶端和服務(wù)器中的任一端發(fā)送一個(gè)第二同步命令至另一端,該第二同步命令中攜帶所有目錄的地址以及每一目錄對(duì)應(yīng)的同步類型;該另一端按第二同步命令中的所有目錄的地址確定當(dāng)前待同步目錄中包括的所有目錄以及每一目錄當(dāng)前的同步類型。
其中,所述待同步目錄包括一個(gè)或多個(gè)目錄;當(dāng)待同步目錄包括多個(gè)目錄時(shí),所述客戶端和服務(wù)器通過(guò)發(fā)送第二同步命令協(xié)商得到待同步目錄和同步類型的方法為針對(duì)待同步目錄中包括的每一目錄,所述客戶端和服務(wù)器中的任一端發(fā)送一個(gè)攜帶該目錄地址及其對(duì)應(yīng)的同步類型的第二同步命令至另一端;該另一端按每一第二同步命令中的目錄地址和同步類型一一確定當(dāng)前待同步目錄中包括的每一目錄及其當(dāng)前同步類型。
其中,所述第一同步命令攜帶操作類型;所述按接收到的第一同步命令對(duì)所確定的待同步目錄進(jìn)行數(shù)據(jù)同步的方法為按第一同步命令攜帶的操作類型,對(duì)所確定的待同步目錄中的數(shù)據(jù)作該操作類型指定的同步操作。
其中,該第一同步命令進(jìn)一步攜帶待同步目錄地址;所述按接收到的第一同步命令對(duì)所確定的待同步目錄進(jìn)行數(shù)據(jù)同步的方法進(jìn)一步包括確定該第一同步命令中攜帶的待同步目錄地址,在所確定的待同步目錄地址下進(jìn)行同步操作。
其中,該第一同步命令進(jìn)一步攜帶該數(shù)據(jù)內(nèi)容;所述按接收到的第一同步命令對(duì)所確定的待同步目錄進(jìn)行數(shù)據(jù)同步的方法進(jìn)一步包括確定該第一同步命令中攜帶的數(shù)據(jù)內(nèi)容,將該數(shù)據(jù)內(nèi)容保存在該待同步目錄地址下。
其中,所述客戶端和服務(wù)器確定待同步的目錄的方法為按預(yù)先配置確定待同步的目錄。
其中,所述第二同步命令中進(jìn)一步攜帶遞歸同步標(biāo)志;所述按第二同步命令中的待同步目錄地址確定當(dāng)前待同步的目錄時(shí),進(jìn)一步包括判斷該第二同步命令是否攜帶有效的遞歸同步標(biāo)志,如果是,確定當(dāng)前待同步目錄要進(jìn)行遞歸同步;否則確定當(dāng)前待同步目錄要進(jìn)行非遞歸同步;當(dāng)確定當(dāng)前待同步目錄要進(jìn)行遞歸同步時(shí),所述第一同步命令中攜帶的數(shù)據(jù)內(nèi)容包括當(dāng)前待同步目錄的根節(jié)點(diǎn)以及各個(gè)子節(jié)點(diǎn)的數(shù)據(jù)內(nèi)容,該第一同步命令的接收端按第一同步命令中攜帶的根節(jié)點(diǎn)以及各子節(jié)點(diǎn)的數(shù)據(jù)內(nèi)容,依次同步該待同步目錄的根節(jié)點(diǎn)以及各個(gè)子節(jié)點(diǎn)的數(shù)據(jù)內(nèi)容;當(dāng)確定當(dāng)前待同步目錄要進(jìn)行非遞歸同步時(shí),所述第一同步命令中攜帶的數(shù)據(jù)內(nèi)容包括當(dāng)前待同步目錄根節(jié)點(diǎn)的數(shù)據(jù)內(nèi)容,該第一同步命令的接收端僅同步該待同步目錄的根節(jié)點(diǎn)的數(shù)據(jù)內(nèi)容。
其中,當(dāng)?shù)谝煌矫顢y帶的操作類型為刪除、且要同步待同步目錄下的數(shù)據(jù)項(xiàng)時(shí),進(jìn)一步包括判斷當(dāng)前待同步目錄的數(shù)據(jù)項(xiàng)的數(shù)據(jù)內(nèi)容是否僅存于該待同步目錄下,如果是,則在該第一同步命令中進(jìn)一步攜帶有效的永久刪除標(biāo)志;否則在該第一同步命令中進(jìn)一步攜帶無(wú)效的永久刪除標(biāo)志;該第一同步命令的接收端對(duì)待同步目錄所進(jìn)行的數(shù)據(jù)同步操作包括判斷該第一同步命令中是否攜帶有效的永久刪除標(biāo)志,如果是,則刪除該待同步目錄下數(shù)據(jù)項(xiàng)的數(shù)據(jù)內(nèi)容;否則取消該數(shù)據(jù)項(xiàng)與該待同步目錄之間的對(duì)應(yīng)關(guān)系。
本發(fā)明還公開了一種實(shí)現(xiàn)數(shù)據(jù)同步的系統(tǒng),該系統(tǒng)包括客戶端和服務(wù)器,且二者之間通過(guò)交互同步命令來(lái)實(shí)現(xiàn)通信;其特征在于, 所述客戶端和服務(wù)器進(jìn)一步用于確定待同步目錄,并對(duì)所確定的待同步目錄進(jìn)行數(shù)據(jù)同步。
本發(fā)明公開了一種客戶端包括第一目錄地址處理模塊,用于確定待同步目錄的地址并輸出至數(shù)據(jù)同步模塊;從數(shù)據(jù)同步模塊接收待同步目錄的地址并按此地址確定當(dāng)前待同步目錄,提供待同步目錄下的客戶端與服務(wù)器之間的數(shù)據(jù)同步處理;第一數(shù)據(jù)同步模塊,用于從目錄地址處理模塊接收待同步目錄的地址,構(gòu)造攜帶該待同步目錄地址的同步命令并輸出至服務(wù)器;從服務(wù)器接收同步命令并從中解析得到待同步目錄地址輸出至目錄地址處理模塊。
本發(fā)明又公開了一種服務(wù)器包括第二目錄地址處理模塊,用于確定待同步目錄的地址并輸出至數(shù)據(jù)同步模塊;從數(shù)據(jù)同步模塊接收待同步目錄的地址并按此地址確定當(dāng)前待同步目錄,提供待同步目錄下的客戶端與服務(wù)器之間的數(shù)據(jù)同步處理; 第二數(shù)據(jù)同步模塊,用于從目錄地址處理模塊接收待同步目錄的地址,構(gòu)造攜帶該待同步目錄地址的同步命令并輸出至客戶端;從客戶端接收同步命令并從中解析得到待同步目錄地址輸出至目錄地址處理模塊。
因此,采用本發(fā)明能夠靈活實(shí)現(xiàn)針對(duì)某一目錄的數(shù)據(jù)同步,在數(shù)據(jù)同步時(shí)不必在客戶端和服務(wù)器之間傳遞整個(gè)數(shù)據(jù)庫(kù)的數(shù)據(jù),從而能提高數(shù)據(jù)同步效率并節(jié)約系統(tǒng)資源。
圖1所示為實(shí)現(xiàn)同步的示意圖。
圖2所示為客戶端和服務(wù)器端的數(shù)據(jù)存儲(chǔ)示意。
圖3a所示為應(yīng)用本發(fā)明實(shí)施例一的用戶定義的數(shù)據(jù)結(jié)構(gòu)示意圖。
圖3b所示為應(yīng)用本發(fā)明實(shí)施例一的客戶端的數(shù)據(jù)存儲(chǔ)示意圖。
圖4a所示為應(yīng)用本發(fā)明實(shí)施例二的用戶定義的數(shù)據(jù)結(jié)構(gòu)示意圖。
圖4b所示為應(yīng)用本發(fā)明實(shí)施例二的客戶端的數(shù)據(jù)存儲(chǔ)示意圖。
圖5a所示為應(yīng)用本發(fā)明實(shí)施例三的用戶定義的數(shù)據(jù)結(jié)構(gòu)示意圖。
圖5b所示為應(yīng)用本發(fā)明實(shí)施例三的客戶端的數(shù)據(jù)存儲(chǔ)示意圖。
圖6a所示為應(yīng)用本發(fā)明實(shí)施例四的用戶定義的數(shù)據(jù)結(jié)構(gòu)示意圖。
圖6b所示為應(yīng)用本發(fā)明實(shí)施例四的客戶端的數(shù)據(jù)存儲(chǔ)示意圖。
圖7a所示為應(yīng)用本發(fā)明實(shí)施例五的用戶定義的數(shù)據(jù)結(jié)構(gòu)示意圖。
圖7b所示為應(yīng)用本發(fā)明實(shí)施例五的客戶端的數(shù)據(jù)存儲(chǔ)示意圖。
圖8a所示為應(yīng)用本發(fā)明實(shí)施例六的用戶定義的數(shù)據(jù)結(jié)構(gòu)示意圖。
圖8b所示為應(yīng)用本發(fā)明實(shí)施例六的客戶端的數(shù)據(jù)存儲(chǔ)示意圖。
圖9所示為應(yīng)用本發(fā)明實(shí)施例的實(shí)現(xiàn)數(shù)據(jù)同步的系統(tǒng)結(jié)構(gòu)示意圖。
具體實(shí)施例方式 下面結(jié)合附圖及具體實(shí)施例,對(duì)本發(fā)明再做進(jìn)一步地詳細(xì)說(shuō)明。
本發(fā)明公開了一種實(shí)現(xiàn)數(shù)據(jù)同步的方法,其主要處理思想為客戶端和服務(wù)器中的任一端發(fā)送第一同步命令至二者中的另一端;在發(fā)送第一同步命令之前,客戶端和服務(wù)器確定待同步目錄;該第一同步命令的接收端在收到第一同步命令之后,按接收到的第一同步命令對(duì)所確定的待同步目錄進(jìn)行數(shù)據(jù)同步。
眾所周知,按SyncML協(xié)議,同步的實(shí)現(xiàn)分為三個(gè)階段同步初始化階段、同步階段和同步完成階段。在本發(fā)明中同步完成階段的處理與現(xiàn)有方式相同,因此,以下僅就同步初始化階段和同步階段進(jìn)行描述。
在同步初始化階段,除了像現(xiàn)有技術(shù)一樣協(xié)商需要同步的數(shù)據(jù)庫(kù)、終端能力之外,還要指明待同步目錄,客戶端和服務(wù)器可通過(guò)發(fā)送第二同步命令協(xié)商得到待同步目錄。其中,所述客戶端和服務(wù)器通過(guò)發(fā)送第二同步命令協(xié)商得到待同步目錄的方法可以為客戶端和服務(wù)器中的任一端發(fā)送攜帶待同步目錄地址的第二同步命令至另一端,該另一端按第二同步命令中的待同步目錄地址確定當(dāng)前待同步的目錄。本發(fā)明所述的待同步目錄可以包括一個(gè)或多個(gè)目錄;當(dāng)待同步目錄包括多個(gè)目錄時(shí),所述客戶端和服務(wù)器通過(guò)發(fā)送第二同步命令協(xié)商得到待同步目錄的方法可以為針對(duì)待同步目錄中包括的所有目錄,所述客戶端和服務(wù)器中的任一端發(fā)送一個(gè)第二同步命令至另一端,該第二同步命令中攜帶所有目錄的地址;該另一端按第二同步命令中的所有目錄的地址確定當(dāng)前待同步目錄中包括的所有目錄;或者,針對(duì)待同步目錄中包括的每一目錄,所述客戶端和服務(wù)器中的任一端發(fā)送一個(gè)攜帶該目錄地址的第二同步命令至另一端;該另一端按每一第二同步命令中的目錄地址一一確定當(dāng)前待同步目錄中包括的每一目錄。另外,也可在客戶端和服務(wù)器中預(yù)先配置待同步目錄的地址,從而不必在同步初始化階段通過(guò)第二同步命令來(lái)協(xié)商得到待同步目錄。
上述實(shí)現(xiàn)第二同步命令攜帶待同步目錄地址的方式具體有以下兩種 方式一在現(xiàn)有協(xié)議的同步命令中用于指明目標(biāo)數(shù)據(jù)庫(kù)的元素中指明待同步目錄,也就是說(shuō),對(duì)現(xiàn)有協(xié)議的同步命令中用于攜帶待同步數(shù)據(jù)地址的元素進(jìn)行擴(kuò)展,使其從能夠指示數(shù)據(jù)庫(kù)級(jí)別地址的元素?cái)U(kuò)展為能夠指示目錄級(jí)別地址的元素,這里,待同步目錄的地址就可由該被擴(kuò)展的用于攜帶待同步數(shù)據(jù)地址的元素來(lái)承載。具體實(shí)現(xiàn)過(guò)程可以為對(duì)統(tǒng)一資源標(biāo)識(shí)符(URI,UniformResource Identifier)的格式作預(yù)定義,預(yù)先指定哪一級(jí)URI標(biāo)識(shí)數(shù)據(jù)庫(kù)地址,哪一級(jí)URI標(biāo)識(shí)目錄的地址,通過(guò)URI的標(biāo)識(shí)指明待同步目錄,比如指定“./files”為數(shù)據(jù)庫(kù)級(jí)的地址,指定“./files/folders”為數(shù)據(jù)庫(kù)下的名為folder1的目錄的地址,其中,files為數(shù)據(jù)庫(kù)的名稱,folders為目錄的名稱。為了更精確的指定待同步目錄的地址,可以在URI的標(biāo)識(shí)中采用數(shù)據(jù)庫(kù)或目錄的編號(hào)來(lái)表示。比如指定./4980為待同步數(shù)據(jù)庫(kù)級(jí)的地址,指定./4980/4560為數(shù)據(jù)庫(kù)4980下的編號(hào)為4560的子目錄的地址。如果數(shù)據(jù)庫(kù)下有更多的分級(jí),可采用多級(jí)結(jié)構(gòu),例如./4560/4980/556等。還可以采用編號(hào)和目錄名相結(jié)合的表示方法,例如./files/4890。當(dāng)然,如果需要同步多個(gè)目錄,可同時(shí)給出多個(gè)URI予以指明。
方式二在現(xiàn)有協(xié)議的同步命令中用于指明過(guò)濾條件的元素中指明待同步目錄。也就是說(shuō),在現(xiàn)有協(xié)議的同步命令中新增用于攜帶目錄級(jí)別過(guò)濾條件的元素,由該用于攜帶目錄級(jí)別過(guò)濾條件的元素來(lái)承載待同步目錄地址。具體實(shí)現(xiàn)過(guò)程可以為擴(kuò)展現(xiàn)有的過(guò)濾功能,在過(guò)濾條件(如Filter命令)中指明待同步目錄。當(dāng)然,如果需要同步多個(gè)目錄,可同時(shí)指出多個(gè)目錄。
下面對(duì)這兩種指明待同步目錄的方式作詳細(xì)說(shuō)明。
一、方式一為通過(guò)擴(kuò)展現(xiàn)有協(xié)議的同步命令中用于攜帶待同步數(shù)據(jù)地址的元素來(lái)實(shí)現(xiàn)協(xié)商待同步目錄的一種方案,所述待同步數(shù)據(jù)地址通常指URI。
本發(fā)明中,客戶端和服務(wù)器通過(guò)發(fā)送第二同步命令協(xié)商得到待同步目錄時(shí),可進(jìn)一步協(xié)商當(dāng)前同步類型??蛻舳撕头?wù)器通過(guò)發(fā)送第二同步命令協(xié)商得到待同步目錄時(shí),該第二同步命令中可以進(jìn)一步攜帶同步類型,按該第二同步命令中的同步類型確定當(dāng)前同步類型。該第二同步命令可采用同步標(biāo)簽語(yǔ)言(SyncML)協(xié)議的警報(bào)(Alert)元素來(lái)實(shí)現(xiàn),所述用于攜帶待同步數(shù)據(jù)地址的元素可以為Alert元素的子元素,項(xiàng)目(Item)元素,所述用于攜帶同步類型的元素可以為Alert元素的子元素,數(shù)據(jù)(Data)元素。該采用Alert元素實(shí)現(xiàn)的第二同步命令又可被稱為Alert同步命令。其中,作為第二同步命令的Alert元素中,也可采用其它子元素,如代碼(Code)等,來(lái)攜帶同步類型和待同步目錄地址,也可采用Alert元素的屬性來(lái)攜帶同步類型和待同步目錄地址,這些情況下的命令結(jié)構(gòu)本文就不一一示出,但均在本發(fā)明的保護(hù)范圍之內(nèi)。
為了實(shí)現(xiàn)多個(gè)目錄的同步,可以進(jìn)一步的擴(kuò)充Alert命令,使其可以用于指定一個(gè)或多個(gè)目錄的待同步目錄,并且對(duì)不同的目錄可采用不同的同步類型。以下給出實(shí)現(xiàn)該功能的方案 在同步初始化階段,可擴(kuò)充現(xiàn)有的同步協(xié)議中Alert命令中的URI的定義,使其可以用于指定目錄級(jí)別的地址。假定由客戶端向服務(wù)器發(fā)起待同步目錄的協(xié)商過(guò)程。
客戶端向服務(wù)器發(fā)送Alert命令,其中攜帶待同步目錄的地址,該地址可為待同步目錄的URI。之后,服務(wù)器可以向客戶端返回響應(yīng)。以下給出該Alert命令的一個(gè)舉例。例如,客戶端指定要同步的是名稱為folder1的目錄,客戶端向服務(wù)器發(fā)送Alert命令,其中攜帶要建立的同步類型以及待同步目錄的地址(如URI)。其中,如果客戶端與服務(wù)器端的目錄結(jié)構(gòu)相同,則客戶端可以按自身的目錄結(jié)構(gòu)直接確定服務(wù)器上該待同步目錄的地址。如果客戶端與服務(wù)器端的目錄結(jié)構(gòu)不同,則客戶端要先確定該待同步目錄在服務(wù)器上的目錄地址,具體確定方法可包括以下幾種1、事先,客戶端從服務(wù)器端獲取服務(wù)器的目錄結(jié)構(gòu),并按服務(wù)器的目錄結(jié)構(gòu)確定當(dāng)前待同步目錄在服務(wù)器上的地址,2、由服務(wù)器向客戶端發(fā)送待同步目錄的地址,3、客戶端直接指定該待同步目錄在服務(wù)器端的地址,如果該目錄地址在服務(wù)器上不存在,則服務(wù)器根據(jù)客戶端的要求直接在該客戶端指定的地址上創(chuàng)建該待同步目錄,4、按用戶輸入的信息確定待同步目錄地址,即由用戶指定待同步目錄地址,5、客戶端與服務(wù)器預(yù)先設(shè)定待同步的目錄地址。例如,雙方約定,如果進(jìn)行備份同步,則使用服務(wù)器端數(shù)據(jù)庫(kù)中名字為備份(backup)的目錄。上述的目錄結(jié)構(gòu)可以是生成后保存在服務(wù)器端,或是不保存,當(dāng)客戶端需要時(shí),由服務(wù)器端為指定的數(shù)據(jù)庫(kù)實(shí)時(shí)生成的。
其中,客戶端獲取服務(wù)器的目錄結(jié)構(gòu),可以通過(guò)同步會(huì)話實(shí)現(xiàn),以下提供了一種實(shí)現(xiàn)方案,其流程如下 1、客戶端向服務(wù)器發(fā)送建立同步會(huì)話的命令,在發(fā)送確定同步目錄地址的Alert命令之前,客戶端向服務(wù)器發(fā)送用于請(qǐng)求獲取指定數(shù)據(jù)庫(kù)的目錄結(jié)構(gòu)的同步命令,為與前述兩種同步命令相區(qū)別,該同步命令可被稱為第三同步命令。該第三同步命令可采用Get元素來(lái)實(shí)現(xiàn),如下例中所示的提取(Get)命令實(shí)例。現(xiàn)有的Get命令只能用來(lái)請(qǐng)求獲取設(shè)備的性能信息,為了實(shí)現(xiàn)請(qǐng)求獲取數(shù)據(jù)庫(kù)的目錄結(jié)構(gòu),必須擴(kuò)充現(xiàn)有的Get命令的含義,在其中增加一個(gè)表示請(qǐng)求獲取數(shù)據(jù)庫(kù)的目錄結(jié)構(gòu)的標(biāo)識(shí)。
<Get> <CmdID>12</CmdID> …… <Item> <Target><LocURI>./contacts List=struct</LocURI></Target> <Source><LocURI>./dev-contacts</LocURI></Source> </Item> …… </Get> 其中,在Target標(biāo)簽中,“./contacts”為指定的數(shù)據(jù)庫(kù)的URI,“ List=struct”為表示請(qǐng)求獲取數(shù)據(jù)庫(kù)的目錄結(jié)構(gòu)的標(biāo)識(shí),服務(wù)器接收到該Get命令,根據(jù)數(shù)據(jù)庫(kù)的URI找到對(duì)應(yīng)的數(shù)據(jù)庫(kù)。
2、服務(wù)器將指定數(shù)據(jù)庫(kù)的目錄結(jié)構(gòu)通過(guò)Get命令的響應(yīng),結(jié)果(Results)命令,返回給客戶端。設(shè)定服務(wù)器的數(shù)據(jù)庫(kù)的目錄結(jié)構(gòu)為在根目錄(即第一級(jí)目錄節(jié)點(diǎn)),“./contacts”,之下,有A、B、C和D四個(gè)子節(jié)點(diǎn),即第二級(jí)目錄節(jié)點(diǎn);在第二級(jí)目錄節(jié)點(diǎn)A之下還有A1和A2兩個(gè)子節(jié)點(diǎn),即第三級(jí)目錄節(jié)點(diǎn)。此時(shí),返回的Results命令可有以下的幾種組織方式 (1)對(duì)目錄結(jié)構(gòu)中的每一個(gè)節(jié)點(diǎn)用一個(gè)Item元素來(lái)指示其URI??蛻舳私邮盏酱薘esults命令,可以根據(jù)每個(gè)Item中的URI來(lái)構(gòu)建服務(wù)器端的目錄結(jié)構(gòu)。該Results命令格式如下 <Results>……<CmdRef>12</CmdRef><TargetRef>./contacts</TargerRef><SourceRef>./dev-contacts</SourceRef><Item>……<Source><LocURI>./A</LocURI></Source>……</Item><Item>……<Source><LocURI>./A/A1</LocURI></Source>……<!-- SIPO <DP n="13"> --><dp n="d13"/></Results> (2)對(duì)目錄結(jié)構(gòu)中的每一個(gè)節(jié)點(diǎn)構(gòu)建一個(gè)Item元素。其中,第一個(gè)Item元素中攜帶的是數(shù)據(jù)庫(kù)目錄的第一級(jí)目錄節(jié)點(diǎn)的子節(jié)點(diǎn)信息(如節(jié)點(diǎn)標(biāo)識(shí)等),該Item元素中,源(Source)元素用于攜帶該第一級(jí)目錄節(jié)點(diǎn)的URI,數(shù)據(jù)(Data)元素用于指定該第一級(jí)目錄節(jié)點(diǎn)的子節(jié)點(diǎn)信息(即節(jié)點(diǎn)A、B和C的信息)。第二個(gè)Item元素中攜帶的是數(shù)據(jù)庫(kù)目錄的第二級(jí)目錄節(jié)點(diǎn)(即節(jié)點(diǎn)A)的子節(jié)點(diǎn)信息(即節(jié)點(diǎn)A1和A2的信息),該Item元素中,Source元素用于攜帶該第二級(jí)目錄節(jié)點(diǎn)的URI,Data元素用于指定該第二級(jí)目錄節(jié)點(diǎn)的子節(jié)點(diǎn)信息。該Results命令格式如下所示 <Results>……<Item>……<Data>A/B/C/D</Data></Item><Item>……<Source><LocURI>./A</LocURI></Source><Data>A1/A2</Data></Item>……</Results> (3)將所有目錄結(jié)構(gòu)數(shù)據(jù)封裝在一個(gè)元素中,例如,可以將目錄結(jié)構(gòu)數(shù)據(jù)封裝在Results元素中Item子元素的Data元素中,該Data元素?cái)y帶的目錄結(jié)構(gòu)數(shù)據(jù)可以以文件的形式存在,此種情況下的Results命令格式如下所示 <Results> …… <Item> …… <Data>目錄結(jié)構(gòu)數(shù)據(jù)</Data> </Item> </Results> 其中,上述作為第三同步命令的Get元素中,也可采用其它子元素或?qū)傩詠?lái)指示請(qǐng)求獲取目錄結(jié)構(gòu),而作為第三同步命令響應(yīng)的Results元素中也可采用其它子元素或?qū)傩詠?lái)攜帶目錄結(jié)構(gòu)數(shù)據(jù),這些情況下的命令結(jié)構(gòu)本文就不一一示出,無(wú)論上述Get和Results命令以何種方式組合,均在本發(fā)明的保護(hù)范圍內(nèi)。
此外,客戶端獲取服務(wù)器端目錄結(jié)構(gòu)可以通過(guò)一個(gè)獨(dú)立同步會(huì)話來(lái)實(shí)現(xiàn)。此種情況下獲取目錄結(jié)構(gòu)的方法如下所述 1、客戶端向服務(wù)器請(qǐng)求建立同步會(huì)話時(shí),可在現(xiàn)有協(xié)議或未來(lái)可能出現(xiàn)的各種形式的Alert命令中擴(kuò)展或定義新的子元素,在此子元素中采用參數(shù)的形式來(lái)指明當(dāng)前同步內(nèi)容,并將該同步內(nèi)容指定為目錄結(jié)構(gòu)。此時(shí),Alert命令格式如下所示 <Alert> …… <同步內(nèi)容>目錄結(jié)構(gòu)</同步內(nèi)容> <Item> <Source><LocURI>./Contacts</LocURI></Source> <Target><LocURI>./Contacts<LocURI></Source> </Item> </Alert> 2、客戶端向服務(wù)器請(qǐng)求建立同步會(huì)話時(shí),可將當(dāng)前的同步內(nèi)容等信息以Alert命令的屬性形式攜帶在在現(xiàn)有協(xié)議或未來(lái)可能出現(xiàn)的各種形式的Alert命令中,具體命令格式如下所示 <Alert……同步內(nèi)容=目錄結(jié)構(gòu)>(Alert命令的屬性) …… </Alert> 服務(wù)器在收到上述Alert命令之后,向客戶端返回確認(rèn)信息并向客戶端發(fā)送服務(wù)器端指定數(shù)據(jù)庫(kù)的目錄結(jié)構(gòu),該指定數(shù)據(jù)庫(kù)目錄結(jié)構(gòu)的發(fā)送可通過(guò)擴(kuò)展現(xiàn)有同步命令來(lái)實(shí)現(xiàn),例如擴(kuò)展Add命令或Replace命令使其能夠攜帶目錄結(jié)構(gòu)數(shù)據(jù),客戶端接收到此種Add命令或Replace命令后能將服務(wù)器端的指定數(shù)據(jù)庫(kù)的目錄結(jié)構(gòu)作為一個(gè)新的數(shù)據(jù)項(xiàng)添加到客戶端的數(shù)據(jù)庫(kù)中。如下命令格式所示,可擴(kuò)展Add命令的子元素,Item元素,使Item元素的子元素,Data元素,能夠攜帶目錄結(jié)構(gòu)數(shù)據(jù),從而服務(wù)器端可將指定數(shù)據(jù)庫(kù)的目錄結(jié)構(gòu)通過(guò)Add命令返回給客戶端。
<Add>……<數(shù)據(jù)類型>目錄結(jié)構(gòu)</數(shù)據(jù)類型>……<Item>……<Data>服務(wù)器端指定數(shù)據(jù)庫(kù)的目錄結(jié)構(gòu)</Data>……</Item>……</Add> 當(dāng)采用Add命令或Replace命令的子元素,Item元素,來(lái)攜帶目錄結(jié)構(gòu)數(shù)據(jù)時(shí),可采用前面所述Results命令的子元素,Item元素,攜帶目錄結(jié)構(gòu)的方式1)使用至少一個(gè)Item元素,每一Item元素?cái)y帶一個(gè)節(jié)點(diǎn)的地址;2)使用至少一個(gè)Item元素,每一Item元素?cái)y帶一個(gè)節(jié)點(diǎn)及其子節(jié)點(diǎn)的信息(如目錄節(jié)點(diǎn)標(biāo)識(shí)等);3)使用一個(gè)Item元素,在該Item元素中攜帶以文件形式存在的整個(gè)目錄結(jié)構(gòu)數(shù)據(jù)。這三種情況下的命令格式本文就不再示出,另外,上述作為第三同步命令的Alert元素中,也可采用其它子元素或?qū)傩詠?lái)指示請(qǐng)求獲取目錄結(jié)構(gòu),而作為第三同步命令響應(yīng)的Add元素中也可采用其它子元素或?qū)傩詠?lái)攜帶目錄結(jié)構(gòu)數(shù)據(jù),這些情況下的命令結(jié)構(gòu)本文就不一一示出,但均在本發(fā)明的保護(hù)范圍之內(nèi)。
客戶端確定服務(wù)器端待同步目錄的地址也可以是服務(wù)器主動(dòng)向客戶端發(fā)送待同步目錄的地址,該方案可以通過(guò)服務(wù)器向客戶端發(fā)送通知來(lái)實(shí)現(xiàn),該通知可采用數(shù)據(jù)同步協(xié)議中的通知格式,也可以由服務(wù)器通過(guò)其它引擎下發(fā),例如短消息業(yè)務(wù)(SMS)、無(wú)線應(yīng)用協(xié)議推送業(yè)務(wù)(WAP Push)、會(huì)話初始化協(xié)議消息(SIP Message)、多媒體消息業(yè)務(wù)(MMS)等??蛻舳私邮盏椒?wù)器發(fā)送的通知后,可從中提取出待同步目錄的URI。
在客戶端確定待同步目錄的地址后,客戶端可進(jìn)一步發(fā)送Alert命令,其中攜帶了確定好的服務(wù)器端待同步目錄的地址,其命令格式如下 <Alert> <CmdID>1</CmdID> <同步類型>雙向同步</同步類型> <Item> <Target><LocURI>./files/folder1(服務(wù)器上待同步目錄folder1的 URI)</LocURI></Target>) <Source><LocURI>./files/folder1(客戶端上待同步目錄folder1的 URI)</LocURI></Source>) …… </Item> …… </Alert> 如果待同步目錄包括多個(gè)目錄,則可以在一個(gè)Alert命令中攜帶一個(gè)同步類型以及多個(gè)Item元素,其中每一個(gè)Item元素用于攜帶一個(gè)目錄的地址,此時(shí)待同步目錄中包括的各個(gè)目錄的同步類型相同。以下給出待同步目錄為folder1和folder2的<Alert>命令,如下所示 <Alert> ?。糃mdID>1</CmdID> <同步類型>雙向同步</同步類型> ?。糏tem> <Target><LocURI>./files/folder1(服務(wù)器上待同步目錄folder1的 URI)</LocURI></Target>) ?。糞ource><LocURI>./files/folder1(客戶端上待同步目錄folder1的 URI)</LocURI></Source>) …… </Item> <Item> <Target><LocURI>./files/folder2(服務(wù)器上待同步目錄folder2的 URI)</LocURI></Target> <Source><LocURI>./files/folder2(客戶端上待同步目錄folder2的 URI)</LocURI></Source>) …… ?。?Item> …… </Alert> 服務(wù)器接收到客戶端發(fā)送的Alert命令,會(huì)向客戶端返回響應(yīng),該響應(yīng)攜帶待同步目錄協(xié)商結(jié)果,以確認(rèn)待同步目錄是否可以進(jìn)行同步。該響應(yīng)可以為現(xiàn)有協(xié)議中用于返回狀態(tài)碼的同步命令,比如SyncML協(xié)議的狀態(tài)(Status)命令。
如果待同步目錄包括多個(gè)目錄,則服務(wù)器返回響應(yīng)給客戶端的方法可以為針對(duì)待同步目錄中包括的所有目錄,服務(wù)器返回一個(gè)響應(yīng),該響應(yīng)攜帶所有目錄的協(xié)商結(jié)果;或者,針對(duì)待同步目錄中包括的每一目錄,服務(wù)器返回一個(gè)響應(yīng);每一響應(yīng)攜帶一個(gè)目錄的協(xié)商結(jié)果。當(dāng)針對(duì)待同步目錄中包括的每一目錄,服務(wù)器返回一個(gè)響應(yīng),且每一響應(yīng)攜帶一個(gè)目錄的協(xié)商結(jié)果時(shí),可以用多個(gè)Status命令針對(duì)相應(yīng)的目錄返回協(xié)商結(jié)果(也可稱為狀態(tài)碼)。
另外,客戶端也可以用多個(gè)Alert命令來(lái)指定多個(gè)待同步的目錄,且每一Alert命令對(duì)應(yīng)一個(gè)待同步的目錄。這時(shí),服務(wù)器也可以用對(duì)應(yīng)于上述的Alert命令的協(xié)商結(jié)果返回響應(yīng),該Alert命令的響應(yīng)采用SyncML協(xié)議的狀態(tài)Status元素來(lái)實(shí)現(xiàn)。
另外,為了實(shí)現(xiàn)對(duì)不同的目錄采用不同的同步類型,可以采用以下的幾種方案 1、針對(duì)待同步目錄中包括的所有目錄,客戶端發(fā)送一個(gè)Alert命令至服務(wù)器,該Alert命令中攜帶所有目錄的地址以及每一目錄對(duì)應(yīng)的同步類型;該服務(wù)器按Alert命令中的所有目錄的地址確定當(dāng)前待同步目錄中包括的所有目錄以及每一目錄對(duì)應(yīng)的同步類型。此時(shí),該Alert命令攜帶多個(gè)用于攜帶待同步數(shù)據(jù)地址的元素(如Item元素);且每一用于攜帶待同步數(shù)據(jù)地址的元素被擴(kuò)展為能夠指示目錄級(jí)別地址和一種同步類型的元素,并承載一個(gè)待同步目錄的地址及其對(duì)應(yīng)的同步類型。具體實(shí)現(xiàn)方法可以為將原有的Alert命令中用于攜帶同步類型的元素與用于攜帶待同步數(shù)據(jù)地址的元素合并為一個(gè)元素,比如將用于攜帶同步類型的元素合并到用于攜帶待同步數(shù)據(jù)地址的元素中。
2、針對(duì)待同步目錄中包括的每一目錄,客戶端發(fā)送一個(gè)攜帶該目錄地址及其對(duì)應(yīng)的同步類型的Alert命令至服務(wù)器;該服務(wù)器按每一Alert命令中的目錄地址和同步類型一一確定當(dāng)前待同步目錄中包括的每一目錄及其當(dāng)前同步類型。此時(shí),該Alert命令攜帶用于攜帶待同步數(shù)據(jù)地址的元素和用于攜帶同步類型的元素;且該用于攜帶待同步數(shù)據(jù)地址的元素被擴(kuò)展為能夠指示目錄級(jí)別地址的元素,并承載一個(gè)待同步目錄的地址;所述用于攜帶同步類型的元素承載一種同步類型。
然而,當(dāng)待同步目錄包括多個(gè)目錄、且各個(gè)目錄的同步類型相同時(shí),針對(duì)待同步目錄中包括的所有目錄,客戶端發(fā)送一個(gè)Alert命令至服務(wù)器,該Alert命令中攜帶所有目錄的地址以及這些目錄對(duì)應(yīng)的同一同步類型;服務(wù)器按Alert命令中的所有目錄的地址確定當(dāng)前待同步目錄中包括的所有目錄以及當(dāng)前同步類型。此時(shí),該Alert命令攜帶多個(gè)用于攜帶待同步數(shù)據(jù)地址的元素(如Item元素)和一個(gè)用于攜帶同步類型的元素(如Data元素);且每一用于攜帶待同步數(shù)據(jù)地址的元素被擴(kuò)展為能夠指示目錄級(jí)別地址的元素,并承載一個(gè)待同步目錄的地址;所述用于攜帶同步類型的元素承載一種同步類型。其中,作為第二同步命令的Alert元素也可采用其它子元素或?qū)傩詠?lái)攜帶同步類型、待同步目錄地址等,本文就不再一一示出各種情況下的命令格式,但均在本發(fā)明的保護(hù)范圍之內(nèi)。
二、方式二為采用過(guò)濾機(jī)制來(lái)指定待同步目錄地址的一種方式。
現(xiàn)有的過(guò)濾機(jī)制只可以實(shí)現(xiàn)域級(jí)別和數(shù)據(jù)項(xiàng)級(jí)別的過(guò)濾,本發(fā)明可將現(xiàn)有的過(guò)濾機(jī)制擴(kuò)充到目錄級(jí)別,其擴(kuò)充可以通過(guò)在現(xiàn)有SyncML協(xié)議的過(guò)濾(Filter)元素中新增用于攜帶目錄級(jí)別過(guò)濾條件的子元素,例如,該元素可以命名為目錄級(jí)別(FolderLevel),在該元素中可采用通用網(wǎng)關(guān)接口(CGI,CommonGateway Interface)語(yǔ)法來(lái)指定待同步的目錄。其中,也可采用Filter元素的屬性或新增的其它子元素來(lái)攜帶目錄級(jí)別過(guò)濾條件,此種情況下的命令結(jié)構(gòu)本文不再示出,但均在本發(fā)明的保護(hù)范圍之內(nèi)。
以下給出待同步目錄為編號(hào)112和113的目錄的Filter命令格式 <Filter> …… <FolderLevel> <Item> ?。糓eta><Type>syncml:filtertype-cgi</Type></Meta> ?。糄ata>&LUID&EQ;112&AND;&LUID&EQ;113(采用filter 的CGI語(yǔ)法指定同步的目錄為編號(hào)是112和113的目錄)</Data><!-- SIPO <DP n="20"> --><dp n="d20"/> </Item> ?。?FolderLevel> …… </Filter> 此外,在同步階段,可通過(guò)發(fā)送第一同步命令來(lái)指明目錄同步的操作類型,或進(jìn)一步指明待同步目錄地址,或進(jìn)一步攜帶數(shù)據(jù)內(nèi)容。
當(dāng)該第一同步命令攜帶待同步目錄地址時(shí),可擴(kuò)充現(xiàn)有的同步(Sync)命令中用于攜帶待同步數(shù)據(jù)地址的元素,如目標(biāo)(Target)元素,從而可將同步的粒度從數(shù)據(jù)庫(kù)級(jí)別擴(kuò)充到目錄級(jí)別。比如可以在Sync命令中攜帶能夠指示目錄級(jí)別地址(如待同步目錄的URI)的Target元素?,F(xiàn)有的Sync命令只能攜帶整個(gè)數(shù)據(jù)庫(kù)中需要同步的數(shù)據(jù),且現(xiàn)有Sync命令的Target元素只能指示數(shù)據(jù)庫(kù)的地址。本發(fā)明Sync命令能夠指明目錄級(jí)別的地址,該Sync命令中攜帶的數(shù)據(jù)內(nèi)容就可以僅為數(shù)據(jù)內(nèi)容,而不需要是整個(gè)數(shù)據(jù)庫(kù)的同步數(shù)據(jù)。以下給出該Sync命令的一個(gè)實(shí)例 <Sync> <CmdID>3</CmdID> <Target><LocURI>./files/folder1(服務(wù)器上待同步目錄folder1的URI)</LocURI></Target>) <Source><LocURI>./files/folder1(客戶端待同步目錄folder1的URI)</LocURI></Source>) …… </Sync> 其中,一個(gè)Sync命令可攜帶一個(gè)待同步目錄的地址,如果有多個(gè)目錄需要同步,則可以通過(guò)多個(gè)Sync命令來(lái)攜帶多個(gè)目錄的地址。比如由兩個(gè)Sync命令分別攜帶兩個(gè)待同步目錄folder1和folder2的地址。另外,上述作為第一同步命令的Sync元素中,也可采用其它子元素或?qū)傩詠?lái)攜帶待同步目錄地址,這些情況下的命令結(jié)構(gòu)本文就不一一示出,但均在本發(fā)明的保護(hù)范圍之內(nèi)。
當(dāng)?shù)谝煌矫?比如Sync命令)攜帶操作類型時(shí),具體攜帶操作類型的方式與現(xiàn)有技術(shù)相同,比如如前述Sync命令格式所述,在Sync命令中攜帶用于攜帶操作類型的子元素,如指示新增操作的增加(Add)元素,指示更新操作的更新(Replace)元素。這樣,接收第一同步命令的一端可按第一同步命令攜帶的操作類型,對(duì)所確定的待同步目錄作該操作類型指定的同步操作。這里,第一同步命令所能攜帶的操作類型包括新增(Add)、更新(Replace)、刪除(Delete)、移動(dòng)(Move),這樣,Sync命令可按實(shí)際情況,選擇攜帶Add元素、Replace元素、Delete元素或Move元素來(lái)指示各種操作類型。
當(dāng)該第一同步命令攜帶該數(shù)據(jù)內(nèi)容時(shí),具體攜帶數(shù)據(jù)的方式可為在Sync命令的對(duì)應(yīng)新增、更新等操作類型的子元素中增加用于攜帶數(shù)據(jù)內(nèi)容的子元素,數(shù)據(jù)(Data)元素。這樣,收到該第一同步命令的一端可首先確定該第一同步命令中攜帶的數(shù)據(jù)內(nèi)容,然后將該數(shù)據(jù)內(nèi)容保存在該待同步目錄地址下。通常,攜帶數(shù)據(jù)內(nèi)容的第一同步命令所攜帶的操作類型為Add或Replace,收到第一同步命令的一端會(huì)將該待同步目錄下增加該第一同步命令中攜帶的數(shù)據(jù),或者將該待同步目錄下已存的數(shù)據(jù)更新為該第一同步命令中攜帶的數(shù)據(jù)。由于,本發(fā)明的第一同步命令中攜帶的數(shù)據(jù)僅為某數(shù)據(jù)內(nèi)容,而無(wú)需攜帶整個(gè)數(shù)據(jù)庫(kù)的數(shù)據(jù),因此采用本發(fā)明之后,在數(shù)據(jù)同步階段,數(shù)據(jù)傳輸量將大大減少,從而提高同步效率。
當(dāng)?shù)谝煌矫畹慕邮斩嗽谕瓿蓴?shù)據(jù)同步之后,還可進(jìn)一步返回該第一同步命令的響應(yīng)給該第一同步命令的發(fā)送端,由該第一同步命令的響應(yīng)來(lái)攜帶數(shù)據(jù)同步結(jié)果,以向該發(fā)送端確認(rèn)數(shù)據(jù)同步是否成功。另外,針對(duì)某些同步類型,比如雙向同步、客戶端單向同步、服務(wù)器單向同步等,在確定待同步目錄之后還要判斷待同步目錄是否發(fā)生變化,如果發(fā)生變化,再按當(dāng)前待同步目錄的變化狀態(tài)構(gòu)造第一同步命令并發(fā)送。
上述本發(fā)明的各種第一、第二和第三同步命令攜帶的各種信息,如待同步目錄數(shù)據(jù)、目錄級(jí)別地址過(guò)濾條件、同步類型、目錄結(jié)構(gòu)數(shù)據(jù)等等,并不限于攜帶在文中所示各個(gè)命令格式中的子元素或?qū)傩灾校€可采用其它子元素或?qū)傩詠?lái)攜帶這些信息,鑒于命令格式的組合情況較多,本文就不再將這些命令格式一一示出,但均在本發(fā)明的保護(hù)范圍之內(nèi)。
下面結(jié)合具體實(shí)施例對(duì)同步階段進(jìn)行說(shuō)明。由于客戶端發(fā)起同步與服務(wù)器端發(fā)起同步的處理流程相類似,下面僅以客戶端發(fā)起同步,服務(wù)器端執(zhí)行數(shù)據(jù)同步操作為例進(jìn)行說(shuō)明。以下實(shí)例中,所述第一同步命令采用SyncML協(xié)議的Sync元素來(lái)實(shí)現(xiàn);該第一同步命令通過(guò)攜帶Sync元素的子元素,新增Add元素,來(lái)攜帶新增操作類型,通過(guò)攜帶Sync元素的子元素,更新Replace元素,來(lái)攜帶更新操作類型,通過(guò)攜帶Sync元素的子元素,移動(dòng)Move元素,來(lái)攜帶移動(dòng)操作類型,通過(guò)攜帶Sync元素的子元素,刪除Delete元素,來(lái)攜帶刪除操作類型。
為了實(shí)現(xiàn)能夠使用戶按照自己的意愿創(chuàng)建物理或邏輯分類目錄,并指定任意一分類目錄進(jìn)行遞歸同步或非遞歸同步,需要在客戶端和服務(wù)器端分別設(shè)置以下三個(gè)數(shù)據(jù)表 1、數(shù)據(jù)條目表(Data Item Table)該表用于保存所有的數(shù)據(jù)項(xiàng)目信息,其包括數(shù)據(jù)項(xiàng)目編號(hào)與具體的數(shù)據(jù)內(nèi)容(Data)的對(duì)應(yīng)關(guān)系;其中,所述數(shù)據(jù)項(xiàng)目編號(hào)在客戶端以Item LUID表示,在服務(wù)器端以Item GUID表示 2、目錄表(Folder Table)該表用于保存所有的目錄項(xiàng)信息,其包括目錄項(xiàng)編號(hào)、目錄名(Name)、該目錄項(xiàng)所屬的父目錄(Parent Source)、該目錄項(xiàng)狀態(tài)(Folder Status)以及這四者之間的對(duì)應(yīng)關(guān)系。其中的目錄項(xiàng)狀態(tài)主要包括如下狀態(tài)現(xiàn)存未修改(Existing)(可用E來(lái)標(biāo)識(shí))、新增(New)(可用N來(lái)標(biāo)識(shí))、更新(Update)(可用U來(lái)標(biāo)識(shí))、刪除(Delete)(可用D來(lái)標(biāo)識(shí))、移動(dòng)(Move)(可用M來(lái)標(biāo)識(shí))以及復(fù)制(Copy)(可用C來(lái)標(biāo)識(shí));其中,Delete可以分為永久刪除(Delete permanently)(可用P-D來(lái)標(biāo)識(shí))和非永久刪除(Delete non-permanently)(可用P-ND來(lái)標(biāo)識(shí))兩種狀態(tài);所述目錄項(xiàng)編號(hào)在客戶端以Folder LUID表示,在服務(wù)器端以Folder GUID表示。
3、數(shù)據(jù)條目-目錄的對(duì)應(yīng)關(guān)系索引表(Index Table)該表用于保存數(shù)據(jù)項(xiàng)目的歸屬關(guān)系,其包括數(shù)據(jù)項(xiàng)目編號(hào)、父目錄(Parent Source)以及數(shù)據(jù)項(xiàng)目狀態(tài)(Data Status)的對(duì)應(yīng)關(guān)系;其中所述數(shù)據(jù)項(xiàng)目編號(hào)在客戶端以Item LUID表示,在服務(wù)器端以Item GUID表示。
再有,在服務(wù)器端還需保存數(shù)據(jù)在客戶端內(nèi)的編號(hào)與服務(wù)器內(nèi)的編號(hào)的對(duì)應(yīng)關(guān)系列表,即GUID與LUID之間的對(duì)應(yīng)關(guān)系。
實(shí)施例一用戶在短信的根目錄(如./sms)下增加了一個(gè)新的目錄“bless”,并且,在“bless”目錄下又增加了兩個(gè)子目錄分別為“Spring Festival”和“Mid-autumn Festival”,同時(shí),在每個(gè)目錄下分別增加了一個(gè)數(shù)據(jù),比如在“bless”目錄下增加了數(shù)據(jù)N1,在“Spring Festival”目錄下增加了數(shù)據(jù)N2,在“Mid-autumn Festival”目錄下增加了數(shù)據(jù)N3。
參見圖3a和圖3b,圖3a所示為應(yīng)用本發(fā)明實(shí)施例一的用戶定義的數(shù)據(jù)結(jié)構(gòu)示意圖,其中,方框表示目錄(Folder),圓圈表示數(shù)據(jù)條目(data Item);實(shí)線表示的狀態(tài)為Existing,虛線表示的狀態(tài)為New。圖3b所示為應(yīng)用本發(fā)明實(shí)施例一的客戶端的數(shù)據(jù)存儲(chǔ)示意圖。在客戶端保存有數(shù)據(jù)條目表DataItem Table、目錄表Folder Table和“數(shù)據(jù)條目-目錄”對(duì)應(yīng)關(guān)系索引表IndexTable。各個(gè)列表所增加數(shù)據(jù)的狀態(tài)在圖3b都有相應(yīng)的反映。
當(dāng)用戶要求同步“bless”目錄時(shí),客戶端順序生成以下同步命令 首先,客戶端根據(jù)接收到的來(lái)自用戶的同步bless目錄的命令并確定同步數(shù)據(jù)是一個(gè)目錄項(xiàng)后,從Folder Table中確定該bless的狀態(tài)為N,之后,構(gòu)建表示增加目錄的同步命令,比如在Sync命令中增加Add子元素,以構(gòu)成Add同步命令,該Add同步命令也可稱為Sync命令的子命令。并且,在該所構(gòu)建的Add命令中,使用Meta字段指明數(shù)據(jù)類型為目錄項(xiàng)(Folder),該數(shù)據(jù)類型為根據(jù)Folder Table所確定的,使用LUID字段指明待同步數(shù)據(jù)的編號(hào)為1006,使用Data字段指明具體的數(shù)據(jù)為bless,使用SourceParent字段指明其所屬父目錄為根目錄。
之后,客戶端確定bless目錄下數(shù)據(jù)項(xiàng)目狀態(tài),由于在Index Table中,數(shù)據(jù)項(xiàng)目2001所對(duì)應(yīng)的狀態(tài)為N,因此,構(gòu)建Add同步命令;并且當(dāng)從DataItem Table中確定數(shù)據(jù)項(xiàng)目2001所對(duì)應(yīng)的具體數(shù)據(jù)內(nèi)容為N1后,在該所構(gòu)建的Add同步命令中,使用Meta字段指明數(shù)據(jù)類型為數(shù)據(jù)項(xiàng)目(Item),使用LUID字段指明待同步數(shù)據(jù)的編號(hào)為2001,使用Data字段指明具體的數(shù)據(jù)為N1,使用SourceParent字段指明其所屬父目錄為1006。
當(dāng)客戶端確定bless目錄下沒有新增加的數(shù)據(jù)項(xiàng)目后,索引該bless目錄下子目錄的狀態(tài),其具體方法與確定bless目錄的方法相同,此處不再贅述。其確定的結(jié)果是構(gòu)建兩個(gè)Add同步命令,其中一個(gè)Add命令中,Meta字段指明數(shù)據(jù)類型為目錄項(xiàng)Folder,LUID字段指明待同步數(shù)據(jù)的編號(hào)1007,Data字段指明具體的數(shù)據(jù)為春節(jié)(Spring Festival),SourceParent字段指明其所屬父目錄為1006;而另一個(gè)Add命令中的Meta字段指明數(shù)據(jù)類型為目錄項(xiàng)(Folder),LUID字段指明待同步數(shù)據(jù)的編號(hào)為1008,Data字段指明具體的數(shù)據(jù)為中秋節(jié)(Mid-autumn Festival),SourceParent字段指明其所屬父目錄為1006。
當(dāng)客戶端確定bless目錄下沒有新增加的子目錄后,再確定SpringFestival目錄和Mid-autumn Festival目錄下的數(shù)據(jù)項(xiàng)目的狀態(tài),其具體方法與確定N1的方法相同,即客戶端會(huì)分別再構(gòu)造兩條Add同步命令,在此不再贅述。
以此類推,直到針對(duì)所有增加的數(shù)據(jù)均發(fā)出Add同步命令為止,這樣也就實(shí)現(xiàn)了遞歸同步。而非遞歸同步指的是1、只同步某一目錄項(xiàng),而不再同步該目錄項(xiàng)下的數(shù)據(jù)項(xiàng),比如修改目錄項(xiàng)的名稱;2、只同步某一目錄項(xiàng)及該目錄項(xiàng)下的數(shù)據(jù)項(xiàng)目,而不再同步該目錄項(xiàng)下的子目錄項(xiàng)。
最后,將所構(gòu)造的Add同步命令全部發(fā)送給服務(wù)器。如果Add命令的數(shù)據(jù)量較少,則可在一個(gè)消息中包含多個(gè)Add命令,一次性交互即可;如果Add命令的數(shù)據(jù)量較大,則需要多次交互。在實(shí)際應(yīng)用中,還可以只發(fā)送一個(gè)Add同步命令,并在該Add命令中包含多個(gè)目錄和數(shù)據(jù)項(xiàng)目,其邏輯上仍然可看作是多個(gè)Add命令。
下面說(shuō)明服務(wù)器端接收到上述Add命令后,執(zhí)行同步操作的過(guò)程。該過(guò)程所涉及的表格與圖3b所示表格類似,這里不再將此表格示出。
當(dāng)服務(wù)器端接收到增加bless目錄項(xiàng)的同步命令后,通過(guò)接收到的同步命令中的Meta字段確定待同步數(shù)據(jù)的類型為目錄項(xiàng),根據(jù)LUID字段確定該待同步數(shù)據(jù)在客戶端的編號(hào)為1006,根據(jù)Data字段確定其名稱為bless,根據(jù)SourceParent字段確定其父目錄為根目錄。之后,為該待同步數(shù)據(jù)分配服務(wù)器本地編號(hào)(Folder GUID),如100006。然后,在本地已設(shè)置的目錄表中增加相應(yīng)條目,即增加條目100006、bless、根目錄、該bless數(shù)據(jù)項(xiàng)當(dāng)前狀態(tài),以及這四者的對(duì)應(yīng)關(guān)系。并且,在自身已設(shè)置的客戶端內(nèi)編號(hào)與服務(wù)器內(nèi)編號(hào)的對(duì)應(yīng)關(guān)系列表中保存該同步數(shù)據(jù)的客戶端內(nèi)編號(hào)(即LUID)、該同步數(shù)據(jù)在服務(wù)器端內(nèi)編號(hào)(即GUID)以及二者對(duì)應(yīng)關(guān)系,即保存1006、100006以及二者之間的對(duì)應(yīng)關(guān)系。
當(dāng)服務(wù)器端接收到增加N1數(shù)據(jù)項(xiàng)目的同步命令后,通過(guò)接收到的同步命令中的Meta字段確定待同步數(shù)據(jù)的類型為數(shù)據(jù)項(xiàng)目,根據(jù)LUID字段確定該待同步數(shù)據(jù)在客戶端內(nèi)的編號(hào)為2001,根據(jù)Data字段確定其具體的數(shù)據(jù)內(nèi)容為N1,根據(jù)SourceParent字段確定其父目錄為1006。之后,在本地?cái)?shù)據(jù)庫(kù)中保存該N1數(shù)據(jù),然后為該待同步數(shù)據(jù)分配服務(wù)器本地編號(hào)(FolderGUID),如200001,并在本地已設(shè)置的數(shù)據(jù)條目表Data Item Table中增加相應(yīng)條目,即增加條目200001、N1以及二者的對(duì)應(yīng)關(guān)系;在Index Table中增加相應(yīng)條目,即增加條目200001、100006、該N1數(shù)據(jù)當(dāng)前狀態(tài)、以及這三者的對(duì)應(yīng)關(guān)系,在自身已設(shè)置的客戶端內(nèi)編號(hào)與服務(wù)器內(nèi)編號(hào)的對(duì)應(yīng)關(guān)系列表中保存該同步數(shù)據(jù)在客戶端內(nèi)的編號(hào)、該同步數(shù)據(jù)在服務(wù)器端內(nèi)的編號(hào)以及二者的對(duì)應(yīng)關(guān)系,即保存2001、200001以及二者之間的對(duì)應(yīng)關(guān)系。
服務(wù)器端增加Spring Festival目錄項(xiàng)和Mid-autumn Festival目錄項(xiàng)的方式與增加bless目錄項(xiàng)的方式相同,增加N2和N3數(shù)據(jù)項(xiàng)目的方法與增加N1數(shù)據(jù)項(xiàng)目的方式相同,在此不再贅述。
另外,有一點(diǎn)需要說(shuō)明的是如果是服務(wù)器端發(fā)起同步請(qǐng)求,由客戶端執(zhí)行同步操作,則服務(wù)器端發(fā)送給客戶端的同步請(qǐng)求中包含待同步數(shù)據(jù)在服務(wù)器端的編號(hào),客戶端執(zhí)行完同步操作后,將給服務(wù)器端返回該數(shù)據(jù)客戶端內(nèi)編號(hào)與服務(wù)器內(nèi)編號(hào)的對(duì)應(yīng)關(guān)系即LUID與GUID的對(duì)應(yīng)關(guān)系,由服務(wù)器端將接收到的對(duì)應(yīng)關(guān)系保存在本地已設(shè)置的客戶端內(nèi)編號(hào)與服務(wù)器內(nèi)編號(hào)的對(duì)應(yīng)關(guān)系列表內(nèi)。
至此,實(shí)現(xiàn)了增加數(shù)據(jù)的同步操作,而且該數(shù)據(jù)可以是一個(gè)具體的數(shù)據(jù)項(xiàng)目,也可以是根據(jù)用戶的意愿而創(chuàng)建的目錄項(xiàng),且該目錄項(xiàng)不受系統(tǒng)的數(shù)據(jù)物理結(jié)構(gòu)的限制。可見,應(yīng)用本發(fā)明的好處是相同的數(shù)據(jù)只需傳遞一份,而且,執(zhí)行同步操作的一端,對(duì)相同數(shù)據(jù)也只需保存一份,大大節(jié)省了網(wǎng)絡(luò)資源和設(shè)備本身的資源。例如,假設(shè)N1同時(shí)屬于bless、Spring Festival和Mid-autumn Festival目錄下,那么在服務(wù)器端的同步操作過(guò)程中,只需在Index Table中再增加兩條相應(yīng)條目,即增加條目1200001、100007、該N1數(shù)據(jù)當(dāng)前狀態(tài)以及這三者對(duì)應(yīng)關(guān)系,和條目2200001、100008、該N1數(shù)據(jù)當(dāng)前狀態(tài)以及這三者的對(duì)應(yīng)關(guān)系即可。
實(shí)施例二用戶在短信的根目錄(./sms)下更新了目錄“bless”的屬性,并更新了“bless”目錄下數(shù)據(jù)項(xiàng)U1,僅更新了“Spring Festival”目錄下的數(shù)據(jù)項(xiàng)U2。本實(shí)施例中,U2同時(shí)屬于Spring Festival和Mid-autumn Festival兩個(gè)目錄下。
參見圖4a和圖4b,圖4a所示為應(yīng)用本發(fā)明實(shí)施例二的用戶定義的數(shù)據(jù)結(jié)構(gòu)示意圖,其中,方框表示Folder,圓圈表示data Item;實(shí)線表示的狀態(tài)為Existing,點(diǎn)畫線表示的狀態(tài)為Update。圖4b所示為應(yīng)用本發(fā)明實(shí)施例二的客戶端的數(shù)據(jù)存儲(chǔ)示意圖。在客戶端保存有數(shù)據(jù)條目表(Data ItemTable)、目錄表(Folder Table)和數(shù)據(jù)條目-目錄對(duì)應(yīng)關(guān)系索引表(IndexTable)。各個(gè)數(shù)據(jù)表中數(shù)據(jù)的狀態(tài)在圖4b中都有相應(yīng)的反映。
當(dāng)用戶要求同步“bless”目錄時(shí),客戶端順序生成以下同步命令 首先,客戶端根據(jù)接收到的來(lái)自用戶的同步bless目錄的命令并確定同步數(shù)據(jù)是目錄項(xiàng)之后,從Folder Table中確定該bless目錄的狀態(tài)為U,之后,構(gòu)建指示更新的Sync命令,比如更新(Replace)同步命令,該Replace同步命令可稱為是Sync命令的子命令。并且,使用該所構(gòu)建的Replace命令中的Meta字段指明數(shù)據(jù)類型為目錄項(xiàng)(Folder),該數(shù)據(jù)類型可根據(jù)FolderTable確定;使用LUID字段指明待同步數(shù)據(jù)的編號(hào)為1006,使用Data字段指明具體的數(shù)據(jù)為bless,使用SourceParent字段指明該bless目錄所屬父目錄為根目錄。
之后,客戶端確定bless目錄下數(shù)據(jù)項(xiàng)目的狀態(tài),由于在Index Table中,1006所對(duì)應(yīng)的數(shù)據(jù)項(xiàng)目為2001,且其狀態(tài)為U,因此,構(gòu)建Replace同步命令,并且當(dāng)從Data Item Table中確定2001所對(duì)應(yīng)的具體數(shù)據(jù)內(nèi)容為U1后,使用該所構(gòu)建的Replace同步命令中的Meta字段指明數(shù)據(jù)類型為數(shù)據(jù)項(xiàng)目(Item),使用LUID字段指明待同步數(shù)據(jù)的編號(hào)為2001,使用Data字段指明具體的數(shù)據(jù)為U1,使用SourceParent字段指明該數(shù)據(jù)項(xiàng)目所屬父目錄為1006。
然后,當(dāng)客戶端確定bless目錄下沒有更新的數(shù)據(jù)項(xiàng)目后,索引該bless目錄下子目錄的狀態(tài),其具體方法與確定bless目錄的方法相同,本例中,該bless目錄下子目錄的狀態(tài)未發(fā)生變化,因此不做處理。
最后,當(dāng)客戶端確定bless目錄下沒有更新的子目錄后,再確定子目錄Spring Festival下的數(shù)據(jù)項(xiàng)目的狀態(tài),其具體方法與確定U1的方法相同。即最終的結(jié)果是構(gòu)建Replace同步命令,并且在從Data Item Table中確定2002所對(duì)應(yīng)的具體數(shù)據(jù)內(nèi)容為U2之后,使用該所構(gòu)建的Replace同步命令中的Meta字段指明數(shù)據(jù)類型為數(shù)據(jù)項(xiàng)目(Item),使用LUID字段指明待同步數(shù)據(jù)的編號(hào)為2002,使用Data字段指明具體的數(shù)據(jù)為U2,使用SourceParent字段指明其所屬父目錄為1007。
以此類推,直到針對(duì)所有更新的數(shù)據(jù)均發(fā)出Replace同步命令為止,這樣也就實(shí)現(xiàn)了遞歸同步。當(dāng)然,也可能實(shí)現(xiàn)的是非遞歸同步,具體實(shí)現(xiàn)原理與遞歸同步類似,這里就不再進(jìn)一步描述。其中,可在同步初始化階段協(xié)商待同步目錄時(shí)確定當(dāng)前同步是否為遞歸同步,這樣,本發(fā)明的第二同步命令中進(jìn)一步攜帶遞歸同步標(biāo)志,當(dāng)攜帶有效的遞歸同步標(biāo)志時(shí),說(shuō)明當(dāng)前待同步目錄進(jìn)行的是遞歸同步,該待同步目錄的根節(jié)點(diǎn)以及所有子節(jié)點(diǎn)均要進(jìn)行數(shù)據(jù)同步,當(dāng)攜帶無(wú)效的遞歸同步標(biāo)志時(shí),說(shuō)明當(dāng)前待同步目錄進(jìn)行的是非遞歸同步,只有該待同步目錄的根節(jié)點(diǎn)要進(jìn)行數(shù)據(jù)同步。當(dāng)在同步初始化階段確定當(dāng)前待同步目錄要進(jìn)行遞歸同步之后,同步階段中客戶端或服務(wù)器發(fā)送的第一同步命令中攜帶的數(shù)據(jù)內(nèi)容包括當(dāng)前待同步目錄的根節(jié)點(diǎn)以及各個(gè)子節(jié)點(diǎn)的數(shù)據(jù)內(nèi)容;此時(shí),第一同步命令的接收端按第一同步命令中攜帶的根節(jié)點(diǎn)以及各子節(jié)點(diǎn)的數(shù)據(jù)內(nèi)容,依次同步該待同步目錄的根節(jié)點(diǎn)以及各個(gè)子節(jié)點(diǎn)的數(shù)據(jù)內(nèi)容。當(dāng)在同步初始化階段確定當(dāng)前待同步目錄要進(jìn)行非遞歸同步之后,同步節(jié)點(diǎn)中客戶端或服務(wù)器發(fā)送的第一同步命令中攜帶的數(shù)據(jù)內(nèi)容包括當(dāng)前待同步目錄根節(jié)點(diǎn)的數(shù)據(jù)內(nèi)容;此時(shí),該第一同步命令的接收端僅同步該待同步目錄的根節(jié)點(diǎn)的數(shù)據(jù)內(nèi)容。這里,本文所述的數(shù)據(jù)內(nèi)容指待同步目錄中根節(jié)點(diǎn)或子節(jié)點(diǎn)的目錄項(xiàng)和數(shù)據(jù)項(xiàng)的內(nèi)容,如目錄項(xiàng)的名稱(Name)、數(shù)據(jù)項(xiàng)的數(shù)據(jù)(Data)。
此后,將所構(gòu)造的Replace同步命令全部發(fā)送給服務(wù)器,具體發(fā)送方式與發(fā)送Add同步命令的方式相同,在此不再贅述。
下面說(shuō)明服務(wù)器端接收到上述Replace命令后,執(zhí)行同步操作的過(guò)程。該過(guò)程所涉及的表格與圖4b所示表格類似,因此這里并未示出該表格。
當(dāng)服務(wù)器端接收到更新bless目錄項(xiàng)的同步命令后,通過(guò)接收到的同步命令中的Meta字段確定待同步數(shù)據(jù)的類型為目錄項(xiàng),根據(jù)LUID字段確定該待同步數(shù)據(jù)在客戶端的編號(hào)為1006,根據(jù)Data字段確定其名稱為bless,根據(jù)SourceParent字段確定其父目錄為根目錄。之后,在已設(shè)置的客戶端內(nèi)編號(hào)與服務(wù)器內(nèi)編號(hào)的對(duì)應(yīng)關(guān)系列表中獲取該更新的待同步數(shù)據(jù)在服務(wù)器本地的編號(hào),如100006。然后,在本地已設(shè)置的目錄表中更新相應(yīng)條目,即更新條目中的bless的屬性信息,該條目中包括100006、bless、根目錄、該bless數(shù)據(jù)當(dāng)前狀態(tài)以及這四者的對(duì)應(yīng)關(guān)系。
當(dāng)服務(wù)器端接收到更新U1數(shù)據(jù)項(xiàng)目的同步命令后,通過(guò)接收到的同步命令中的Meta字段確定待同步數(shù)據(jù)的類型為數(shù)據(jù)項(xiàng)目,根據(jù)LUID字段確定該待同步數(shù)據(jù)在客戶端的編號(hào)為2001,根據(jù)Data字段確定其具體的數(shù)據(jù)內(nèi)容為U1,根據(jù)SourceParent字段確定其父目錄為1006。之后,在已設(shè)置的客戶端內(nèi)編號(hào)與服務(wù)器內(nèi)編號(hào)的對(duì)應(yīng)關(guān)系列表中獲取該更新的待同步數(shù)據(jù)在服務(wù)器本地的編號(hào),如200001,在本地已設(shè)置的數(shù)據(jù)條目表中更新待同步數(shù)據(jù)的本地編號(hào)所對(duì)應(yīng)的條目,即更新200001和U1及其對(duì)應(yīng)關(guān)系條目中的U1的信息。
服務(wù)器端更新U2的方法與更新U1的方法相同,在此不再贅述。
此處需要說(shuō)明一點(diǎn),本例中,U2既屬于Spring Festival目錄又屬M(fèi)id-autumn Festival目錄,但更新U2時(shí)只需發(fā)送一次Replace命令,服務(wù)器端也只需更新一次U2,就可以使兩個(gè)目錄下的U2都得到更新。這是因?yàn)椋诜?wù)器端實(shí)際只保存了一份數(shù)據(jù),該數(shù)據(jù)的隸屬關(guān)系是通過(guò)Index Table表來(lái)體現(xiàn)的。可見,采用本發(fā)明的方法可最大限度地減少冗余數(shù)據(jù)的存在,進(jìn)而最大限度地節(jié)省有限的資源。
實(shí)施例三用戶將“music”目錄下的數(shù)據(jù)項(xiàng)目“M1”移動(dòng)到“favorite”目錄下;將“mp3”整個(gè)目錄移動(dòng)到“favorite”下。
參見圖5a和圖5b,圖5a所示為應(yīng)用本發(fā)明實(shí)施例三的用戶定義的數(shù)據(jù)結(jié)構(gòu)示意圖,其中,方框表示Folder,圓圈表示data Item;實(shí)線表示的狀態(tài)為Existing,雙點(diǎn)畫線表示的狀態(tài)為Move。圖5b所示為應(yīng)用本發(fā)明實(shí)施例三的客戶端的數(shù)據(jù)存儲(chǔ)示意圖。在客戶端保存有數(shù)據(jù)條目表(Data ItemTable)、目錄表(Folder Table)和數(shù)據(jù)條目-目錄對(duì)應(yīng)關(guān)系索引表(IndexTable)。各個(gè)數(shù)據(jù)表中數(shù)據(jù)的狀態(tài)在圖5b都有相應(yīng)的反映。
當(dāng)用戶要求同步根目錄時(shí),客戶端順序生成以下同步命令 首先,客戶端根據(jù)接收到的來(lái)自用戶的同步根目錄的命令后,索引該根目錄下的所有子目錄的狀態(tài),本例中,該根目錄下所有子目錄的狀態(tài)未發(fā)生變化,因而不做處理。然后,客戶端索引該根目錄下的數(shù)據(jù)項(xiàng)目的狀態(tài)是否發(fā)生變化,本例中,該根目錄下的數(shù)據(jù)項(xiàng)目的狀態(tài)也未發(fā)生變化,因此不做處理。
之后,客戶端依次索引每個(gè)子目錄中的子目錄狀態(tài)是否發(fā)生變化,本例中,客戶端確定music目錄下的“mp3”子目錄的狀態(tài)為M,之后,構(gòu)建移動(dòng)(Move)同步命令,該Move同步命令也稱為是一種Sync命令的子命令,用于攜帶移動(dòng)數(shù)據(jù)。并且,使用該所構(gòu)建的Move命令中的Meta字段指明數(shù)據(jù)類型為目錄項(xiàng)(Folder),該數(shù)據(jù)類型根據(jù)Folder Table確定,使用LUID字段指明待同步數(shù)據(jù)的編號(hào)為1006,使用SourceParent字段指明該目錄移動(dòng)后所屬父目錄為1004。
然后,客戶端確定music目錄下數(shù)據(jù)項(xiàng)目的狀態(tài),由于在Index Table中,1006所對(duì)應(yīng)的數(shù)據(jù)項(xiàng)目為2001,且其狀態(tài)為M,因此構(gòu)建Move同步命令,并且,使用該構(gòu)建的命令中的Meta字段指明數(shù)據(jù)類型為數(shù)據(jù)項(xiàng)目(Item),使用LUID字段指明待同步數(shù)據(jù)的編號(hào)為2001,使用SourceParent字段指明其移動(dòng)后所屬的父目錄為1004。
以此類推,本例中沒有其他發(fā)生移動(dòng)的數(shù)據(jù),因此不再處理。
之后,將所構(gòu)造的Move同步命令全部發(fā)送給服務(wù)器,具體發(fā)送方式與發(fā)送Add同步命令的方式相同,在此不再贅述。
下面說(shuō)明服務(wù)器端接收到上述Move命令后,執(zhí)行同步操作的過(guò)程。該過(guò)程所涉及的表格與圖5b所示表格類似,因此圖未示。
當(dāng)服務(wù)器端接收到指示移動(dòng)mp3目錄項(xiàng)的Move同步命令后,通過(guò)接收到的Move同步命令中的Meta字段確定待同步數(shù)據(jù)的類型為目錄項(xiàng),根據(jù)LUID字段確定該待同步數(shù)據(jù)在客戶端內(nèi)的編號(hào)為1006,根據(jù)SourceParent字段確定該mp3目錄項(xiàng)移動(dòng)后所屬父目錄為1004,之后,在已設(shè)置的客戶端內(nèi)編號(hào)與服務(wù)器內(nèi)編號(hào)的對(duì)應(yīng)關(guān)系列表中獲取該待移動(dòng)數(shù)據(jù)在服務(wù)器本地的編號(hào),如100006,在本地已設(shè)置的Folder Table中該待同步數(shù)據(jù)的本地編號(hào)所對(duì)應(yīng)的條目中,將所屬父目錄更改為接收到的Move同步命令中的父目錄,即將該表中的100006所對(duì)應(yīng)的父目錄由1005改為1004。
當(dāng)服務(wù)器端接收到指示移動(dòng)M1數(shù)據(jù)項(xiàng)目的Move同步命令后,通過(guò)接收到的Move同步命令中的Meta字段確定待同步數(shù)據(jù)的類型為Item,根據(jù)LUID字段確定該待同步數(shù)據(jù)在客戶端的編號(hào)為2001,根據(jù)SourceParent字段確定其移動(dòng)后所屬父目錄為1004,之后,從已設(shè)置的客戶端內(nèi)編號(hào)與服務(wù)器內(nèi)編號(hào)的對(duì)應(yīng)關(guān)系列表獲取該更新的待同步數(shù)據(jù)在服務(wù)器本地的編號(hào),如200001,在本地已設(shè)置的Index Table中該待同步數(shù)據(jù)的本地編號(hào)所對(duì)應(yīng)的條目中,將所屬父目錄更改為接收到的同步命令中的父目錄,即將該表中的200001所對(duì)應(yīng)的父目錄由1005改為1004。
可見,采用本發(fā)明的方法進(jìn)行移動(dòng)的同步操作時(shí),僅需修改相應(yīng)數(shù)據(jù)表中的對(duì)應(yīng)關(guān)系,不需要對(duì)實(shí)際數(shù)據(jù)進(jìn)行移動(dòng),從而最大限度節(jié)省了有限的資源。
另外需要說(shuō)明一點(diǎn)在移動(dòng)某個(gè)目錄及其下的子目錄和數(shù)據(jù)項(xiàng)目時(shí),比如移動(dòng)mp3目錄項(xiàng)時(shí),只需針對(duì)mp3目錄項(xiàng)只發(fā)送一條Move命令,而不需再針對(duì)mp3目錄下的子目錄和數(shù)據(jù)項(xiàng)目發(fā)送Move命令,因?yàn)槠湎碌淖幽夸浐蛿?shù)據(jù)項(xiàng)目所屬的父目錄是未發(fā)生任何變化的。
當(dāng)?shù)谝煌矫顢y帶的操作類型為刪除,且要同步的是待同步目錄下的數(shù)據(jù)項(xiàng)時(shí),進(jìn)一步包括判斷當(dāng)前待同步目錄的數(shù)據(jù)項(xiàng)的數(shù)據(jù)內(nèi)容是否僅存于該待同步目錄下,如果是,則在該第一同步命令中進(jìn)一步攜帶有效的永久刪除標(biāo)志;否則在該第一同步命令中進(jìn)一步攜帶無(wú)效的永久刪除標(biāo)志;此時(shí),該第一同步命令的接收端對(duì)待同步目錄所進(jìn)行的數(shù)據(jù)同步操作包括判斷該第一同步命令中是否攜帶有效的永久刪除標(biāo)志,如果是,則刪除該待同步目錄下數(shù)據(jù)項(xiàng)的數(shù)據(jù)內(nèi)容;否則取消該數(shù)據(jù)項(xiàng)與該待同步目錄之間的對(duì)應(yīng)關(guān)系。
實(shí)施例四用戶刪除了“bless”目錄下的“D1”數(shù)據(jù)項(xiàng)目,對(duì)“SpringFestival”目錄下的數(shù)據(jù)“U2”選擇了永久刪除,“D3”選擇了非永久刪除。本例中,僅是對(duì)刪除數(shù)據(jù)項(xiàng)目的描述。
參見圖6a和圖6b,圖6a所示為應(yīng)用本發(fā)明實(shí)施例四的用戶定義的數(shù)據(jù)結(jié)構(gòu)示意圖,其中,方框表示Folder,圓圈表示data Item;實(shí)線表示的狀態(tài)為Existing,點(diǎn)線表示的狀態(tài)為Delete。圖6b所示為應(yīng)用本發(fā)明實(shí)施例四的客戶端的數(shù)據(jù)存儲(chǔ)示意圖。在客戶端保存有數(shù)據(jù)條目表(Data Item Table)、目錄表(Folder Table)和數(shù)據(jù)條目-目錄對(duì)應(yīng)關(guān)系索引表(Index Table)。各個(gè)列表中數(shù)據(jù)的狀態(tài)在圖6b都有相應(yīng)的反映。
當(dāng)用戶要求同步“bless”目錄時(shí),客戶端順序生成以下同步命令 客戶端確定bless目錄下數(shù)據(jù)項(xiàng)目的狀態(tài),由于在Index Table中,數(shù)據(jù)項(xiàng)目為2001的狀態(tài)為永久刪除(P-D),因此,構(gòu)建刪除(Delete)同步命令,該Delete同步命令也為一種Sync命令的子命令,用于攜帶刪除某數(shù)據(jù);并且,使用該所構(gòu)建的Delete同步命令中的Meta字段指明數(shù)據(jù)類型為數(shù)據(jù)項(xiàng)目(Item),使用LUID字段指明待同步數(shù)據(jù)的編號(hào)為2001,并且該Delete同步命令中還需包括指明永久刪除的標(biāo)識(shí)。
之后,當(dāng)客戶端確定bless目錄下沒有刪除的數(shù)據(jù)項(xiàng)目后,索引該bless目錄下子目錄的狀態(tài),本例中,該bless目錄下子目錄的狀態(tài)未發(fā)生變化,因此不做處理。
當(dāng)客戶端確定bless目錄下沒有刪除的子目錄后,再確定子目錄SpringFestival下的數(shù)據(jù)項(xiàng)目的狀態(tài),其具體方法與確定D1的方法相同。即最終的結(jié)果是構(gòu)建兩條Delete同步命令,其中一條Delete同步命令中,使用Meta字段指明數(shù)據(jù)類型為數(shù)據(jù)項(xiàng)目(Item),使用LUID字段指明待同步數(shù)據(jù)的編號(hào)為2002,并且該命令中還需包括指明永久刪除的標(biāo)識(shí),如P-D。而另一條Delete同步命令中,使用Meta字段指明數(shù)據(jù)類型為數(shù)據(jù)項(xiàng)目(Item),LUID字段指明待同步數(shù)據(jù)的編號(hào)為2003,并且在該命令中還需包括指明非永久刪除的標(biāo)識(shí),如NP-D。
所構(gòu)建的Delete同步命令中,不需要包含要?jiǎng)h除的數(shù)據(jù),只需指明要?jiǎng)h除數(shù)據(jù)的類型、編號(hào)、以及是永久刪除還是非永久刪除即可。以上是Delete命令的一種實(shí)現(xiàn)方式,即該命令中包含類型、編號(hào)、以及用于攜帶永久刪除或非永久刪除的標(biāo)志位這三種信息;當(dāng)然,還可以有其他的實(shí)現(xiàn)方式,比如,將Delete分為兩種命令,一種永久刪除P-Delete命令,另一種是非永久刪除NP-Delete命令,這樣,每種刪除命令中只需包含待刪除數(shù)據(jù)的類型、編號(hào)即可。
最后,將所構(gòu)造的用于攜帶刪除的同步命令全部發(fā)送給服務(wù)器。
下面說(shuō)明服務(wù)器端接收到上述Delete命令后,執(zhí)行同步操作的過(guò)程。
當(dāng)服務(wù)器端接收到刪除D1數(shù)據(jù)項(xiàng)目的同步命令后,通過(guò)接收到的同步命令中的Meta字段確定待同步數(shù)據(jù)的類型為數(shù)據(jù)項(xiàng)目Item,根據(jù)LUID字段確定該待同步數(shù)據(jù)在客戶端的編號(hào)為2001,并確定此次刪除為永久刪除,之后,在已設(shè)置的客戶端內(nèi)編號(hào)與服務(wù)器內(nèi)編號(hào)的對(duì)應(yīng)關(guān)系列表中獲取該待刪除數(shù)據(jù)在服務(wù)器本地的編號(hào),如200001,從本地的數(shù)據(jù)條目表和數(shù)據(jù)條目-目錄對(duì)應(yīng)關(guān)系表中,分別刪除待同步數(shù)據(jù)本地編號(hào)所對(duì)應(yīng)的條目,即刪除編號(hào)為200001的整個(gè)條目。同時(shí),在本地?cái)?shù)據(jù)庫(kù)中刪除數(shù)據(jù)D1。
當(dāng)服務(wù)器端接收到用于攜帶刪除D2數(shù)據(jù)項(xiàng)目的Delete同步命令后,即刪除相應(yīng)數(shù)據(jù)表中的整個(gè)條目,其刪除D2的方法與刪除D1的方法相同,在此不再贅述。
當(dāng)服務(wù)器端接收到用于攜帶刪除D3數(shù)據(jù)項(xiàng)目的Delete同步命令后,通過(guò)接收到的Delete同步命令中的Meta字段確定待同步數(shù)據(jù)的類型為數(shù)據(jù)項(xiàng)目Item,根據(jù)LUID字段確定該待同步數(shù)據(jù)在客戶端的編號(hào)為2003,并確定此次刪除為非永久刪除,之后,在已設(shè)置的客戶端內(nèi)編號(hào)與服務(wù)器內(nèi)編號(hào)的對(duì)應(yīng)關(guān)系列表中獲取該待刪除數(shù)據(jù)在服務(wù)器本地的編號(hào),如200003,并只在本地的數(shù)據(jù)條目-目錄對(duì)應(yīng)關(guān)系表中刪除該待同步數(shù)據(jù)的本地編號(hào)所對(duì)應(yīng)的條目,即刪除該表中編號(hào)為200003的整個(gè)條目,而在本地?cái)?shù)據(jù)庫(kù)內(nèi)不刪除D3數(shù)據(jù)。
可見,采用本發(fā)明的方法進(jìn)行刪除的同步操作時(shí),僅需在客戶端與服務(wù)器端之間傳遞標(biāo)識(shí),不需要傳輸具體的數(shù)據(jù)內(nèi)容,最大限度節(jié)省了有限的資源。
實(shí)施例五用戶刪除了整個(gè)“bless”目錄。這相當(dāng)于同時(shí)刪除了其下的所有子目錄以及其下的所有數(shù)據(jù)項(xiàng)目。本例中,D1和D2僅存在于bless目錄下,D3存在于bless和joke目錄下,且本例僅是對(duì)刪除目錄項(xiàng)的描述。
參見圖7a和圖7b,圖7a所示為應(yīng)用本發(fā)明實(shí)施例五的用戶定義的數(shù)據(jù)結(jié)構(gòu)示意圖,其中,方框表示Folder,圓圈表示data Item;實(shí)線表示的狀態(tài)為Existing,點(diǎn)線表示的狀態(tài)為Delete。圖7b所示為應(yīng)用本發(fā)明實(shí)施例五的客戶端的數(shù)據(jù)存儲(chǔ)示意圖。在客戶端保存有數(shù)據(jù)條目表(Data Item Table)、目錄表(Folder Table)和數(shù)據(jù)條目-目錄對(duì)應(yīng)關(guān)系索引表(Index Table)。各個(gè)數(shù)據(jù)表中數(shù)據(jù)的狀態(tài)在圖7b都有相應(yīng)的反映。
當(dāng)用戶要求同步根目錄時(shí),客戶端順序生成以下同步命令 首先,客戶端根據(jù)接收到的來(lái)自用戶的同步根目錄的命令后,索引該根目錄下的所有子目錄的狀態(tài),本例中,從Folder Table表中確定bless的狀態(tài)為D,則客戶端還要進(jìn)一步執(zhí)行如下步驟判斷該待刪除目錄下的數(shù)據(jù)項(xiàng)目以及該目錄的子目錄下的數(shù)據(jù)項(xiàng)目是否僅存在于該待刪除目錄下,如果是,則構(gòu)建一條Delete同步命令,且該Delete同步命令中包含指示永久刪除的信息;否則,針對(duì)每個(gè)數(shù)據(jù)項(xiàng)目和目錄項(xiàng)分別構(gòu)建一條Delete同步命令,并且,僅存在于該待刪除目錄下的數(shù)據(jù)項(xiàng)目或目錄項(xiàng)所對(duì)應(yīng)的Delete同步命令中將包含指示永久刪除的信息,而并非僅存在于該待刪除目錄下的數(shù)據(jù)項(xiàng)目或目錄項(xiàng)所對(duì)應(yīng)的Delete同步命令中則包含指示非永久刪除的信息。也就是說(shuō),如果某個(gè)數(shù)據(jù)項(xiàng)目或目錄項(xiàng),還存在于其他目錄下(這里的其他目錄不包括bless子目錄),則在這樣的數(shù)據(jù)所對(duì)應(yīng)的Delete同步命令中包含非永久刪除信息,如果不是這樣的數(shù)據(jù),則其所對(duì)應(yīng)的Delete同步命令中包含永久刪除信息。之后,將所構(gòu)建的所有Delete同步命令均發(fā)送給服務(wù)器。這里,針對(duì)每個(gè)數(shù)據(jù)項(xiàng)目和目錄項(xiàng)分別構(gòu)建一條刪除命令,實(shí)際就是一種遞歸的同步。
下面說(shuō)明服務(wù)器端接收到上述Delete同步命令后,執(zhí)行同步操作的過(guò)程。
如果服務(wù)器接收到的是針對(duì)數(shù)據(jù)項(xiàng)目的Delete同步命令,則與實(shí)施例四中所述的處理方式相同,不再贅述。
如果服務(wù)器接收到的是針對(duì)目錄項(xiàng)的Delete同步命令,則在已設(shè)置的客戶端內(nèi)編號(hào)與服務(wù)器內(nèi)編號(hào)的對(duì)應(yīng)關(guān)系列表中獲取該待刪除數(shù)據(jù)在服務(wù)器本地的編號(hào),然后,無(wú)論是永久刪除還是非永久刪除,都要從本地已設(shè)置的目錄表中刪除該待同步數(shù)據(jù)的本地編號(hào)所對(duì)應(yīng)的條目。
對(duì)于目錄刪除操作還有一點(diǎn)需要說(shuō)明作為同步發(fā)起方的客戶端,在刪除某個(gè)目錄項(xiàng)時(shí),如刪除bless目錄項(xiàng),其可以針對(duì)該目錄項(xiàng)只構(gòu)建一條Delete同步命令,而其所執(zhí)行的其他操作,如“判斷該待刪除目錄下的數(shù)據(jù)項(xiàng)目以及該目錄的子目錄下的數(shù)據(jù)項(xiàng)目是否僅存在于該待刪除目錄下”等,均由服務(wù)器來(lái)執(zhí)行,這樣可以簡(jiǎn)化客戶端的操作。當(dāng)然,反之也適用。
在實(shí)際應(yīng)用中,實(shí)施例四、五通常會(huì)結(jié)合起來(lái)同時(shí)使用。
另外,對(duì)于刪除操作,在服務(wù)器端完成同步操作后,客戶端也會(huì)將自身相應(yīng)數(shù)據(jù)表中的條目刪除。
實(shí)施例六用戶將“music”目錄下的數(shù)據(jù)項(xiàng)目“M1”復(fù)制到“favorite”目錄下;將“mp3”目錄復(fù)制到“favorite”目錄下。
參見圖8a和圖8b,圖8a所示為應(yīng)用本發(fā)明實(shí)施例六的用戶定義的數(shù)據(jù)結(jié)構(gòu)示意圖,其中,方框表示Folder,圓圈表示data Item;實(shí)線表示的狀態(tài)為Existing,粗實(shí)線表示的狀態(tài)為Copy。圖8b所示為應(yīng)用本發(fā)明實(shí)施例六的客戶端的數(shù)據(jù)存儲(chǔ)示意圖。在客戶端保存有數(shù)據(jù)條目表(Data Item Table)、目錄表(Folder Table)和數(shù)據(jù)條目-目錄對(duì)應(yīng)關(guān)系索引表(Index Table)。各個(gè)列表所增加數(shù)據(jù)的狀態(tài)在圖3b都有相應(yīng)的反映。
需要說(shuō)明的是,上述實(shí)施例中,服務(wù)器中設(shè)置有客戶端內(nèi)編號(hào)與服務(wù)器內(nèi)編號(hào)之間的對(duì)應(yīng)關(guān)系列表,比如LUID與GUID的對(duì)應(yīng)關(guān)系表,此表的設(shè)置是考慮到目前還存在一些服務(wù)器與客戶端的編號(hào)支持能力不同的問題。而在服務(wù)器與客戶端的編號(hào)支持能力相同的情況下,對(duì)于同一數(shù)據(jù)而言,客戶端和服務(wù)器使用相同的目錄項(xiàng)編號(hào)和數(shù)據(jù)項(xiàng)編號(hào),那么就不需要先進(jìn)行從客戶端內(nèi)編號(hào)到服務(wù)器內(nèi)編號(hào)的映射就可直接使用客戶端內(nèi)編號(hào)進(jìn)行處理,因此,此種情況下,本發(fā)明方法的實(shí)施并未受到限制。
當(dāng)用戶要求同步根目錄時(shí),客戶端與服務(wù)器端的操作與實(shí)施例一的操作基本一致。所不同之處在于,在實(shí)施例一中,客戶端要針對(duì)每一個(gè)數(shù)據(jù)項(xiàng)目和目錄項(xiàng)都發(fā)送一次Add同步命令,而在本例中,如果客戶端對(duì)某一目錄項(xiàng)發(fā)出Copy同步命令(該Copy同步命令也為一種Sync命令的子命令,用于攜帶復(fù)制數(shù)據(jù)),則不需對(duì)該目錄項(xiàng)下的子目錄項(xiàng)和數(shù)據(jù)項(xiàng)目再發(fā)Copy同步命令,從而進(jìn)一步減少數(shù)據(jù)量的傳輸,節(jié)約網(wǎng)絡(luò)資源。而本例中服務(wù)器端的處理過(guò)程與實(shí)施例一中的處理過(guò)程是相同的,其也是針對(duì)每一個(gè)目錄項(xiàng)和數(shù)據(jù)項(xiàng)目逐一地進(jìn)行處理。
再有,在執(zhí)行Copy同步時(shí),用戶可根據(jù)需要決定是否在再指令復(fù)制一份實(shí)際數(shù)據(jù),如果是,則執(zhí)行同步操作的一方的數(shù)據(jù)同步操作進(jìn)一步包括在本地?cái)?shù)據(jù)庫(kù)內(nèi)在復(fù)制一份數(shù)據(jù),并在本地已設(shè)置的數(shù)據(jù)目錄表中增加相應(yīng)條目。
如果客戶端和服務(wù)器端的修改操作存在沖突,如在被移動(dòng)的目錄中增加、更新或者刪除了一些條目,本發(fā)明可通過(guò)擴(kuò)展現(xiàn)有的沖突機(jī)制來(lái)確??蛻舳撕头?wù)器端的數(shù)據(jù)完全同步。具體實(shí)現(xiàn)為將現(xiàn)有的以客戶端為主(Client-Win)和以服務(wù)器端為主(Server-Win)的仲裁結(jié)果加以擴(kuò)展,增加一種以服務(wù)器端和客戶端合并處理(Win-Win)的仲裁結(jié)果,通過(guò)雙贏的方式來(lái)確??蛻舳撕头?wù)器端的數(shù)據(jù)完全一致。當(dāng)服務(wù)器端和客戶端的數(shù)據(jù)操作發(fā)生沖突時(shí),客戶端根據(jù)服務(wù)器的數(shù)據(jù)操作執(zhí)行同步操作,并且,服務(wù)器根據(jù)客戶端的數(shù)據(jù)操作執(zhí)行同步操作;所述數(shù)據(jù)操作包括新增操作、更新操作、移動(dòng)操作、刪除操作、復(fù)制操作或此五者的任意組合。例如,用戶在客戶端上移動(dòng)A目錄使其成為B目錄的子目錄,而服務(wù)器端是在A目錄中增加了一個(gè)條目,此時(shí),服務(wù)器端將移動(dòng)A目錄使其成為B目錄的子目錄,并且,客戶端在A目錄中也增加一個(gè)條目,從而確保客戶端和服務(wù)器端的數(shù)據(jù)完全一致。
基于上述本發(fā)明方法,本發(fā)明還提供了一種實(shí)現(xiàn)數(shù)據(jù)同步的系統(tǒng),該系統(tǒng)包括客戶端和服務(wù)器,二者之間通過(guò)交互同步命令來(lái)實(shí)現(xiàn)通信。其中,客戶端和服務(wù)器進(jìn)一步用于確定待同步目錄,并對(duì)所確定的待同步目錄進(jìn)行數(shù)據(jù)同步。
圖9為所示為應(yīng)用本發(fā)明實(shí)施例的實(shí)現(xiàn)數(shù)據(jù)同步的系統(tǒng)結(jié)構(gòu)示意圖。如圖9所示,客戶端包括第一目錄地址處理模塊和第一數(shù)據(jù)同步模塊,服務(wù)器包括第二目錄地址處理模塊和第二數(shù)據(jù)同步模塊。
客戶端中,第一目錄地址處理模塊用于確定待同步目錄的地址并輸出至數(shù)據(jù)同步模塊;從數(shù)據(jù)同步模塊接收待同步目錄的地址并按此地址確定當(dāng)前待同步目錄,提供待同步目錄下的客戶端與服務(wù)器之間的數(shù)據(jù)同步處理;第一數(shù)據(jù)同步模塊用于從目錄地址處理模塊接收待同步目錄的地址,構(gòu)造攜帶該待同步目錄地址的同步命令并輸出至服務(wù)器;從服務(wù)器接收同步命令并從中解析得到待同步目錄地址輸出至目錄地址處理模塊。其中,第一目錄地址處理模塊可進(jìn)一步用于從接收用戶通過(guò)配置命令輸入的待同步目錄的地址,以使用戶能在客戶端上設(shè)定待同步目錄地址。
服務(wù)器中,第二目錄地址處理模塊用于確定待同步目錄的地址并輸出至數(shù)據(jù)同步模塊;從數(shù)據(jù)同步模塊接收待同步目錄的地址并按此地址確定當(dāng)前待同步目錄,提供待同步目錄下的客戶端與服務(wù)器之間的數(shù)據(jù)同步處理;第二數(shù)據(jù)同步模塊用于從目錄地址處理模塊接收待同步目錄的地址,構(gòu)造攜帶該待同步目錄地址的同步命令并輸出至客戶端;從客戶端接收同步命令并從中解析得到待同步目錄地址輸出至目錄地址處理模塊。
基于上述實(shí)現(xiàn)數(shù)據(jù)同步的系統(tǒng)可見,本發(fā)明還公開了一種實(shí)現(xiàn)數(shù)據(jù)同步的客戶端和一種實(shí)現(xiàn)數(shù)據(jù)同步的服務(wù)器,該客戶端和服務(wù)器的實(shí)現(xiàn)原理與前述系統(tǒng)中的客戶端和服務(wù)器相同,這里就不再對(duì)其工作原理及內(nèi)部構(gòu)造做詳細(xì)說(shuō)明,但均在本發(fā)明保護(hù)范圍之內(nèi)。
以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1、一種實(shí)現(xiàn)數(shù)據(jù)同步的方法,應(yīng)用于客戶端和服務(wù)器之間,該方法包括客戶端和服務(wù)器中的任一端發(fā)送第一同步命令至二者中的另一端;其特征在于,該方法還包括
在發(fā)送第一同步命令之前,客戶端和服務(wù)器確定待同步目錄;
所述第一同步命令的接收端在收到第一同步命令之后,按接收到的第一同步命令,對(duì)所確定的待同步目錄進(jìn)行數(shù)據(jù)同步。
2、根據(jù)權(quán)利要求1所述的方法,其特征在于,所述客戶端和服務(wù)器確定待同步目錄的方法為協(xié)商得到待同步目錄。
3、根據(jù)權(quán)利要求2所述的方法,其特征在于,所述客戶端和服務(wù)器協(xié)商得到待同步目錄的方法為
所述客戶端和服務(wù)器中的任一端發(fā)送攜帶待同步目錄地址的第二同步命令至另一端,該另一端按第二同步命令中的待同步目錄地址確定當(dāng)前待同步的目錄。
4、根據(jù)權(quán)利要求3所述的方法,其特征在于,所述待同步目錄包括一個(gè)或多個(gè)目錄;當(dāng)待同步目錄包括多個(gè)目錄時(shí),所述客戶端和服務(wù)器通過(guò)發(fā)送第二同步命令協(xié)商得到待同步目錄的方法為
針對(duì)待同步目錄中包括的所有目錄,所述客戶端和服務(wù)器中的任一端發(fā)送一個(gè)第二同步命令至另一端,該第二同步命令中攜帶所有目錄的地址;該另一端按第二同步命令中的所有目錄的地址確定當(dāng)前待同步目錄中包括的所有目錄;或者,
針對(duì)待同步目錄中包括的每一目錄,所述客戶端和服務(wù)器中的任一端發(fā)送一個(gè)攜帶該目錄地址的第二同步命令至另一端;該另一端按每一第二同步命令中的目錄地址一一確定當(dāng)前待同步目錄中包括的每一目錄。
5、根據(jù)權(quán)利要求3所述的方法,其特征在于,所述客戶端和服務(wù)器中的任一端發(fā)送第二同步命令至另一端之前,包括該第二同步命令的發(fā)送端直接確定待同步目錄在本端的地址,然后將所確定的待同步目錄地址攜帶在第二同步命令中。
6、根據(jù)權(quán)利要求3所述的方法,其特征在于,所述客戶端和服務(wù)器中的任一端發(fā)送第二同步命令至另一端之前,包括該第二同步命令發(fā)送端確定該待同步目錄在另一端的目錄地址并將其作為待同步目錄地址攜帶在第二同步命令中。
7、根據(jù)權(quán)利要求6所述的方法,其特征在于,所述第二同步命令的發(fā)送端確定該待同步目錄在另一端的目錄地址的方法為
另一端將待同步目錄在本端的目錄地址發(fā)送至該第二同步命令的發(fā)送端。
8、根據(jù)權(quán)利要求7所述的方法,其特征在于,所述另一端將待同步目錄在本端的目錄地址發(fā)送至該第二同步命令的發(fā)送端的方法為通過(guò)發(fā)攜帶該目錄地址的通知來(lái)發(fā)送該目錄地址。
9、根據(jù)權(quán)利要求6所述的方法,其特征在于,所述第二同步命令發(fā)送端確定該待同步目錄在另一端的目錄地址的方法為
該第二同步命令的發(fā)送端從另一端獲取該另一端的目錄結(jié)構(gòu),并按所獲取的目錄結(jié)構(gòu)確定待同步目錄在另一端的目錄地址。
10、根據(jù)權(quán)利要求9所述的方法,其特征在于,所述第二同步命令的發(fā)送端從另一端獲取該另一端的目錄結(jié)構(gòu)的方法為
該第二同步命令的發(fā)送端發(fā)送第三同步命令至另一端,該第三同步命令指示請(qǐng)求獲取指定數(shù)據(jù)庫(kù)的目錄結(jié)構(gòu);
該另一端在該第三同步命令的響應(yīng)中攜帶本端指定數(shù)據(jù)庫(kù)的目錄結(jié)構(gòu)并返回給該第二同步命令的發(fā)送端。
11、根據(jù)權(quán)利要求10所述的方法,其特征在于,所述在第三同步命令的響應(yīng)中攜帶指定數(shù)據(jù)庫(kù)的目錄結(jié)構(gòu)的方法為針對(duì)該目錄結(jié)構(gòu)中的每一節(jié)點(diǎn),使用一個(gè)該第三同步命令的子元素來(lái)攜帶該節(jié)點(diǎn)的地址;
該所述第二同步命令的發(fā)送端在收到該第三同步命令的響應(yīng)后,按各節(jié)點(diǎn)的地址確定目錄結(jié)構(gòu)。
12、根據(jù)權(quán)利要求10所述的方法,其特征在于,所述在第三同步命令的響應(yīng)中攜帶指定數(shù)據(jù)庫(kù)的目錄結(jié)構(gòu)的方法為針對(duì)該目錄結(jié)構(gòu)中的每一節(jié)點(diǎn),使用一個(gè)該第三同步命令的子元素來(lái)攜帶該節(jié)點(diǎn)及其子節(jié)點(diǎn)的信息;或者,使用一個(gè)該第三同步命令的子元素來(lái)封裝整個(gè)目錄結(jié)構(gòu)的數(shù)據(jù)。
13、根據(jù)權(quán)利要求10所述的方法,其特征在于,所述第三同步命令采用同步標(biāo)簽語(yǔ)言SyncML協(xié)議的提取Get元素來(lái)實(shí)現(xiàn);采用Get元素的子元素或?qū)傩詠?lái)攜帶指定數(shù)據(jù)庫(kù)的地址并指示請(qǐng)求獲取該指定數(shù)據(jù)庫(kù)的目錄結(jié)構(gòu);或者,所述第三同步命令采用SyncML協(xié)議的警報(bào)Alert元素來(lái)實(shí)現(xiàn),該Alert元素?cái)y帶指定數(shù)據(jù)庫(kù)的地址,并采用Alert元素的屬性或子元素來(lái)指示請(qǐng)求獲取該指定數(shù)據(jù)庫(kù)的目錄結(jié)構(gòu)。
14、根據(jù)權(quán)利要求11所述的方法,其特征在于,所述第三同步命令的響應(yīng)采用SyncML協(xié)議的結(jié)果Results元素、新增Add或更新Replace元素,來(lái)實(shí)現(xiàn),并采用至少一個(gè)Results元素、Add元素或Replace元素的子元素或?qū)傩詠?lái)攜帶節(jié)點(diǎn)的地址,其中,每一子元素或?qū)傩詳y帶一個(gè)節(jié)點(diǎn)的地址。
15、根據(jù)權(quán)利要求12所述的方法,其特征在于,所述第三同步命令的響應(yīng)采用SyncML協(xié)議的Results元素、Add元素或Replace元素,來(lái)實(shí)現(xiàn),并采用至少一個(gè)Results元素、Add元素或Replace元素的子元素或?qū)傩詠?lái)攜帶每一節(jié)點(diǎn)及其子節(jié)點(diǎn)的信息,其中,每一子元素或?qū)傩詳y帶一個(gè)節(jié)點(diǎn)及其子節(jié)點(diǎn)的信息;或者,采用一個(gè)Results元素、Add元素或Replace元素的子元素來(lái)封裝整個(gè)目錄結(jié)構(gòu)的數(shù)據(jù)。
16、根據(jù)權(quán)利要求6所述的方法,其特征在于,所述第二同步命令發(fā)送端確定該待同步目錄在另一端的目錄地址的方法為
該第二同步命令的發(fā)送端按用戶輸入的信息確定待同步目錄地址。
17、根據(jù)權(quán)利要求6所述的方法,其特征在于,所述第二同步命令發(fā)送端確定該待同步目錄在另一端的目錄地址的方法為
第二同步命令發(fā)送端直接指定待同步目錄在另一端上的地址,如果該目錄地址在該另一端上不存在,則該另一端直接在第二同步命令發(fā)送端指定的地址上創(chuàng)建該待同步目錄。
18、根據(jù)權(quán)利要求6所述的方法,其特征在于,所述第二同步命令發(fā)送端確定該待同步目錄在另一端的目錄地址的方法為客戶端和服務(wù)器預(yù)先設(shè)定待同步目錄的地址。
19、根據(jù)權(quán)利要求3所述的方法,其特征在于,所述第二同步命令為現(xiàn)有協(xié)議的同步命令,且采用該現(xiàn)有協(xié)議的同步命令的屬性或用于攜帶待同步數(shù)據(jù)地址的子元素來(lái)攜帶待同步數(shù)據(jù)地址,該用于攜帶待同步數(shù)據(jù)地址的元素被擴(kuò)展為能夠指示目錄級(jí)別地址的元素。
20、根據(jù)權(quán)利要求3所述的方法,其特征在于,所述客戶端和服務(wù)器通過(guò)發(fā)送第二同步命令協(xié)商得到待同步目錄時(shí),進(jìn)一步包括協(xié)商待同步目錄所采用的同步類型。
21、根據(jù)權(quán)利要求20所述的方法,其特征在于,所述待同步目錄包括一個(gè)或多個(gè)目錄,每一目錄對(duì)應(yīng)各自的同步類型;所述協(xié)商同步類型的方法為
在客戶端和服務(wù)器通過(guò)發(fā)送第二同步命令協(xié)商得到待同步目錄時(shí),該第二同步命令中進(jìn)一步攜帶待同步目錄中包括的各個(gè)目錄所對(duì)應(yīng)的同步類型以及各目錄與同步類型之間的對(duì)應(yīng)關(guān)系,按該第二同步命令攜帶的同步類型以及各目錄與同步類型之間的對(duì)應(yīng)關(guān)系確定當(dāng)前待同步目錄包括的各個(gè)目錄對(duì)應(yīng)的同步類型。
22、根據(jù)權(quán)利要求21所述的方法,其特征在于,所述待同步目錄中包括的所有目錄對(duì)應(yīng)同一同步類型,所述通過(guò)發(fā)送第二同步命令協(xié)商得到待同步目錄和同步類型的方法為
針對(duì)待同步目錄中包括的所有目錄,發(fā)送一個(gè)第二同步命令,該第二同步命令中攜帶所有目錄的地址以及這些目錄對(duì)應(yīng)的同一同步類型;該第二同步命令的接收端按第二同步命令中的所有目錄的地址確定當(dāng)前待同步目錄中包括的所有目錄以及當(dāng)前同步類型。
23、根據(jù)權(quán)利要求22所述的方法,其特征在于,所述通過(guò)發(fā)送第二同步命令協(xié)商得到待同步目錄和同步類型的方法為
針對(duì)待同步目錄中包括的所有目錄,發(fā)送一個(gè)第二同步命令,該第二同步命令中攜帶各個(gè)目錄的地址及其對(duì)應(yīng)的同步類型;該第二同步命令的接收端按第二同步命令攜帶的各個(gè)目錄的地址及其對(duì)應(yīng)的同步類型確定當(dāng)前待同步目錄中包括的所有目錄以及每一目錄的同步類型;或者,
針對(duì)待同步目錄中包括的每一目錄,發(fā)送一個(gè)攜帶該目錄地址及其對(duì)應(yīng)的同步類型的第二同步命令;該同步命令的接收端按每一第二同步命令攜帶的目錄地址和同步類型一一確定當(dāng)前待同步目錄中包括的每一目錄及其同步類型。
24、根據(jù)權(quán)利要求22或23所述的方法,其特征在于,所述第二同步命令為現(xiàn)有協(xié)議的同步命令;針對(duì)該第二同步命令攜帶的每一目錄地址采用一個(gè)元素或?qū)傩詠?lái)攜帶該目錄地址,針對(duì)該第二同步命令攜帶的每一同步類型采用一個(gè)元素或?qū)傩詠?lái)攜帶該同步類型;或者,針對(duì)該第二同步命令攜帶的每一目錄地址及其對(duì)應(yīng)的同步類型采用一個(gè)元素或?qū)傩詠?lái)攜帶該目錄地址及其對(duì)應(yīng)的同步類型。
25、根據(jù)權(quán)利要求24所述的方法,其特征在于,所述第二同步命令采用同步標(biāo)簽語(yǔ)言SyncML協(xié)議的警報(bào)Alert元素來(lái)實(shí)現(xiàn),并采用Alert元素的子元素或?qū)傩詠?lái)攜帶目錄地址和同步類型。
26、根據(jù)權(quán)利要求3所述的方法,其特征在于,所述第二同步命令為現(xiàn)有協(xié)議的同步命令,且采用該現(xiàn)有協(xié)議的同步命令的屬性或新增的用于攜帶目錄級(jí)別過(guò)濾條件的元素來(lái)承載待同步目錄地址。
27、根據(jù)權(quán)利要求26所述的方法,其特征在于,所述第二同步命令采用SyncML協(xié)議的過(guò)濾Filter元素來(lái)實(shí)現(xiàn),并采用Filter元素的屬性或子元素來(lái)攜帶目錄級(jí)別過(guò)濾條件。
28、根據(jù)權(quán)利要求1所述的方法,其特征在于,所述第一同步命令攜帶操作類型;所述按接收到的第一同步命令對(duì)所確定的待同步目錄進(jìn)行數(shù)據(jù)同步的方法為按第一同步命令攜帶的操作類型,對(duì)所確定的待同步目錄中的數(shù)據(jù)作該操作類型指定的同步操作。
29、根據(jù)權(quán)利要求28所述的方法,其特征在于,該第一同步命令進(jìn)一步攜帶待同步目錄地址;
所述按接收到的第一同步命令對(duì)所確定的待同步目錄進(jìn)行數(shù)據(jù)同步的方法進(jìn)一步包括確定該第一同步命令中攜帶的待同步目錄地址,在所確定的待同步目錄地址下進(jìn)行同步操作。
30、根據(jù)權(quán)利要求28所述的方法,其特征在于,該第一同步命令進(jìn)一步攜帶該數(shù)據(jù)內(nèi)容;
所述按接收到的第一同步命令對(duì)所確定的待同步目錄進(jìn)行數(shù)據(jù)同步的方法進(jìn)一步包括確定該第一同步命令中攜帶的數(shù)據(jù)內(nèi)容,將該數(shù)據(jù)內(nèi)容保存在該待同步目錄地址下。
31、根據(jù)權(quán)利要求29所述的方法,其特征在于,所述第一同步命令為現(xiàn)有協(xié)議的同步命令,采用該現(xiàn)有協(xié)議的同步命令的屬性或用于攜帶待同步數(shù)據(jù)地址的子元素來(lái)攜帶所述待同步目錄地址,該用于攜帶待同步數(shù)據(jù)地址的元素被擴(kuò)展為能夠指示目錄級(jí)別地址的元素。
32、根據(jù)權(quán)利要求31所述的方法,其特征在于,所述第一同步命令采用SyncML協(xié)議的同步Sync元素來(lái)實(shí)現(xiàn),并采用Sync元素的子元素或?qū)傩詠?lái)攜帶攜帶待同步數(shù)據(jù)地址。
33、根據(jù)權(quán)利要求3所述的方法,其特征在于,所述第二同步命令中進(jìn)一步攜帶遞歸同步標(biāo)志;所述按第二同步命令中的待同步目錄地址確定當(dāng)前待同步的目錄時(shí),進(jìn)一步包括判斷該第二同步命令是否攜帶有效的遞歸同步標(biāo)志,如果是,確定當(dāng)前待同步目錄要進(jìn)行遞歸同步;否則確定當(dāng)前待同步目錄要進(jìn)行非遞歸同步;
當(dāng)確定當(dāng)前待同步目錄要進(jìn)行遞歸同步時(shí),所述第一同步命令中攜帶的數(shù)據(jù)內(nèi)容包括當(dāng)前待同步目錄的根節(jié)點(diǎn)以及各個(gè)子節(jié)點(diǎn)的數(shù)據(jù)內(nèi)容,該第一同步命令的接收端按第一同步命令中攜帶的根節(jié)點(diǎn)以及各子節(jié)點(diǎn)的數(shù)據(jù)內(nèi)容,依次同步該待同步目錄的根節(jié)點(diǎn)以及各個(gè)子節(jié)點(diǎn)的數(shù)據(jù)內(nèi)容;
當(dāng)確定當(dāng)前待同步目錄要進(jìn)行非遞歸同步時(shí),所述第一同步命令中攜帶的數(shù)據(jù)內(nèi)容包括當(dāng)前待同步目錄根節(jié)點(diǎn)的數(shù)據(jù)內(nèi)容,該第一同步命令的接收端僅同步該待同步目錄的根節(jié)點(diǎn)的數(shù)據(jù)內(nèi)容。
34、根據(jù)權(quán)利要求28或29所述的方法,其特征在于,當(dāng)?shù)谝煌矫顢y帶的操作類型為刪除、且要同步待同步目錄下的數(shù)據(jù)項(xiàng)時(shí),進(jìn)一步包括判斷當(dāng)前待同步目錄的數(shù)據(jù)項(xiàng)的數(shù)據(jù)內(nèi)容是否僅存于該待同步目錄下,如果是,則在該第一同步命令中進(jìn)一步攜帶有效的永久刪除標(biāo)志;否則在該第一同步命令中進(jìn)一步攜帶無(wú)效的永久刪除標(biāo)志;
該第一同步命令的接收端對(duì)待同步目錄所進(jìn)行的數(shù)據(jù)同步操作包括判斷該第一同步命令中是否攜帶有效的永久刪除標(biāo)志,如果是,則刪除該待同步目錄下數(shù)據(jù)項(xiàng)的數(shù)據(jù)內(nèi)容;否則取消該數(shù)據(jù)項(xiàng)與該待同步目錄之間的對(duì)應(yīng)關(guān)系。
35、根據(jù)權(quán)利要求1所述的方法,其特征在于,在確定待同步目錄之后進(jìn)一步包括判斷當(dāng)前待同步目錄是否發(fā)生變化,如果發(fā)生變化,則按當(dāng)前待同步目錄的變化狀態(tài)構(gòu)造第一同步命令并發(fā)送。
36、根據(jù)權(quán)利要求1所述的方法,其特征在于,該方法進(jìn)一步包括增設(shè)以服務(wù)器和客戶端合并處理Win-Win為機(jī)制的仲裁結(jié)果;
當(dāng)服務(wù)器端和客戶端的數(shù)據(jù)操作發(fā)生沖突時(shí),客戶端根據(jù)服務(wù)器的數(shù)據(jù)操作執(zhí)行同步操作,并且,服務(wù)器根據(jù)客戶端的數(shù)據(jù)操作執(zhí)行同步操作;所述數(shù)據(jù)操作包括新增操作、更新操作、移動(dòng)操作、刪除操作、復(fù)制操作或此五者的任意組合。
37、一種實(shí)現(xiàn)數(shù)據(jù)同步的系統(tǒng),該系統(tǒng)包括客戶端和服務(wù)器,且二者之間通過(guò)交互同步命令來(lái)實(shí)現(xiàn)通信;其特征在于,
所述客戶端和服務(wù)器進(jìn)一步用于確定待同步目錄,并對(duì)所確定的待同步目錄進(jìn)行數(shù)據(jù)同步。
38、根據(jù)權(quán)利要求37所述的系統(tǒng),其特征在于,所述客戶端包括
第一目錄地址處理模塊,用于確定待同步目錄的地址并輸出至數(shù)據(jù)同步模塊;從數(shù)據(jù)同步模塊接收待同步目錄的地址并按此地址確定當(dāng)前待同步目錄,提供待同步目錄下的客戶端與服務(wù)器之間的數(shù)據(jù)同步處理;
第一數(shù)據(jù)同步模塊,用于從目錄地址處理模塊接收待同步目錄的地址,構(gòu)造攜帶該待同步目錄地址的同步命令并輸出至服務(wù)器;從服務(wù)器接收同步命令并從中解析得到待同步目錄地址輸出至目錄地址處理模塊。
39、根據(jù)權(quán)利要求38所述的系統(tǒng),其特征在于,所述第一目錄地址處理模塊進(jìn)一步用于從接收用戶輸入的待同步目錄的地址。
40、根據(jù)權(quán)利要求37所述的系統(tǒng),其特征在于,所述服務(wù)器包括
第二目錄地址處理模塊,用于確定待同步目錄的地址并輸出至數(shù)據(jù)同步模塊;從數(shù)據(jù)同步模塊接收待同步目錄的地址并按此地址確定當(dāng)前待同步目錄,提供待同步目錄下的客戶端與服務(wù)器之間的數(shù)據(jù)同步處理;
第二數(shù)據(jù)同步模塊,用于從目錄地址處理模塊接收待同步目錄的地址,構(gòu)造攜帶該待同步目錄地址的同步命令并輸出至客戶端;從客戶端接收同步命令并從中解析得到待同步目錄地址輸出至目錄地址處理模塊。
41、一種實(shí)現(xiàn)數(shù)據(jù)同步的客戶端,其特征在于,該客戶端包括
第一目錄地址處理模塊,用于確定待同步目錄的地址并輸出至數(shù)據(jù)同步模塊;從數(shù)據(jù)同步模塊接收待同步目錄的地址并按此地址確定當(dāng)前待同步目錄,提供待同步目錄下的客戶端與服務(wù)器之間的數(shù)據(jù)同步處理;
第一數(shù)據(jù)同步模塊,用于從目錄地址處理模塊接收待同步目錄的地址,構(gòu)造攜帶該待同步目錄地址的同步命令并輸出至服務(wù)器;從服務(wù)器接收同步命令并從中解析得到待同步目錄地址輸出至目錄地址處理模塊。
42、根據(jù)權(quán)利要求41所述的客戶端,其特征在于,所述第一目錄地址處理模塊進(jìn)一步用于從接收用戶通過(guò)配置命令輸入的待同步目錄的地址。
43、一種實(shí)現(xiàn)數(shù)據(jù)同步的服務(wù)器,其特征在于,該服務(wù)器包括
第二目錄地址處理模塊,用于確定待同步目錄的地址并輸出至數(shù)據(jù)同步模塊;從數(shù)據(jù)同步模塊接收待同步目錄的地址并按此地址確定當(dāng)前待同步目錄,提供待同步目錄下的客戶端與服務(wù)器之間的數(shù)據(jù)同步處理;
第二數(shù)據(jù)同步模塊,用于從目錄地址處理模塊接收待同步目錄的地址,構(gòu)造攜帶該待同步目錄地址的同步命令并輸出至客戶端;從客戶端接收同步命令并從中解析得到待同步目錄地址輸出至目錄地址處理模塊。
全文摘要
本發(fā)明公開了一種實(shí)現(xiàn)數(shù)據(jù)同步的方法,應(yīng)用于客戶端和服務(wù)器之間,該方法包括客戶端和服務(wù)器中的任一端發(fā)送第一同步命令至二者中的另一端;該方法還包括在發(fā)送第一同步命令之前,客戶端和服務(wù)器確定待同步目錄;所述第一同步命令的接收端在收到第一同步命令之后,按接收到的第一同步命令,對(duì)所確定的待同步目錄進(jìn)行數(shù)據(jù)同步。本發(fā)明還公開了一種實(shí)現(xiàn)數(shù)據(jù)同步的系統(tǒng)、客戶端及服務(wù)器,使用本發(fā)明方法,采用本發(fā)明能實(shí)現(xiàn)目錄級(jí)別的數(shù)據(jù)同步。
文檔編號(hào)H04L29/06GK1956452SQ20061010959
公開日2007年5月2日 申請(qǐng)日期2006年8月14日 優(yōu)先權(quán)日2005年10月27日
發(fā)明者田林一 申請(qǐng)人:華為技術(shù)有限公司