具体实施方式
在详细描述根据本发明的实施例之前,应该注意实施例主要在于用于使大对象数据同步的方法步骤以及与方法相关的装置部件的组合。因此,装置部件和方法步骤在图中在合适处由传统符号表示,仅仅示出了与用于理解本发明实施例相关的那些特定细节,以避免以受益于本文的描述的本领域普通技术人员很容易明白的细节来模糊本公开内容。
在本文中,例如左和右、第一和第二等的关系术语可以仅仅被用来将一个实体或动作与另一个实体或动作区分开,而不一定要求或暗示在这种实体或动作之间的任何实际上的这种关系或顺序。术语“包括”、“包含”或其任何其它变化形式旨在覆盖非穷举的包含,因此包括一系列单元的过程、方法、产品或装置不仅仅包括这些单元,而是可以包括没有明确列出的或者这种过程、方法、产品或装置非固有的其它单元。如果没有更多限制,出现在“包括”之后的单元不排除在包括该单元的过程、方法、产品或装置中额外的相同单元的存在。
现在参照图1,示意图图示了执行本发明方法的无线电话100形式的移动设备。电话100包括被耦合成与处理器103通信的射频通信单元102。电话100还包括被耦合成与处理器103通信的键盘106和显示屏幕105。如本领域技术人员将很清楚的,屏幕105可以是触摸屏从而使得键盘106为可选。
处理器103包括带有相关联的代码只读存储器(ROM)112的编码器/解码器111,只读存储器112存储用于编码和解码可能由无线电话100发送的或者接收的语音或其它信号的数据。处理器103还包括通过公用数据和地址总线117耦合到编码器/解码器111的微处理器113、字符只读存储器(ROM)、随机访问存储器(RAM)104、静态可编程存储器116和SIM接口118。操作上耦合到SIM接口118的静态可编程存储器116和SIM的每一个可以存储选出的进入文本消息以及电话号码数据库TND(电话簿)等等,TND包括用于电话号码的号码域和用于与号码域中号码之一相关联的标识符的名字域。例如,电话号码数据库TND中的一个条目可能是91999111111(输入在号码域中),其名字域中相关联的标识符为“Steven C!at work”。
微处理器113具有用于耦合到键盘106、屏幕105和警报器115的端口,警报器115典型地包含警报扬声器、振动电动机和相关联的驱动器。此外,微处理器113具有用于耦合到麦克风135和通信扬声器140的端口。字符只读存储器114存储用于对可能由通信单元102接收的文本消息进行解码或编码的代码。在该实施例中,字符只读存储器114还存储用于微处理器113的操作代码(OC)和用于执行与无线电话100相关联的功能的代码。
射频通信单元102是具有公用天线107的组合式接收器和传送器。通信单元102具有经由射频放大器109耦合到天线107的收发器。收发器108还被耦合到将通信单元102耦合到处理器103的组合式调制器/解调器110。
现在参照图2,消息序列图(MSC)200图示了根据1.2版SyncML标准的双路同步方法。首先,SyncMl客户设备205和SyncML服务器210被配置成能够彼此通信。用户215然后通过在客户设备205处输入同步命令而起动同步方法。客户初始化包(包1)然后被从设备205传送到服务器210。服务器210然后通过将服务器初始化包(包2)发送到设备205而作出响应。接下来,设备205准备需要被发送到服务器210的数据,并将同步包(包3)传送到服务器210。例如,同步包可以包括存储在连接到设备205的SIM卡中的个人信息管理器(PIM)数据。服务器210接收同步包、更新其数据库并将状态和同步包(包4)传送到设备205。设备205然后接收同步包,用它更新其数据库,例如存储在SIM卡上的数据库,并将状态包(包5)传送到服务器210。服务器210然后传送确认包(包6)到设备205。最后,设备205向用户215提供同步已成功完成的指示。
根据1.2版SyncML标准,客户初始化包和服务器初始化包两者都是一般的同步初始化包,它们不能提供有关将被同步的数据的详细信息。例如声音、图像或视频文件的大对象数据经常被自动同步,而不管这种大对象数据是否需要同步。例如,相同的图像文件可以嵌入在存储于SIM卡的联络数据库中的多个v卡中。在与联络数据库有关的同步处理过程中,相同的图像文件将在移动设备205与服务器210之间被空中传送多次。这种不必要的冗余的传送浪费了网络带宽,还浪费了移动设备205的处理器和电源资源。
现在参照图3,MSC 300图示了根据本发明实施例的双路同步方法。首先,例如无线电话100的客户移动设备和服务器310被配置成能够彼此通信。用户315通过输入同步命令而起动同步方法,然后电话100将客户初始化包(包1)传送到服务器310。服务器310然后将服务器初始化包(包2)传送到电话100。接下来,电话100准备合适的同步数据和描述大对象数据的客户大对象元数据。例如,客户大对象元数据可以包括大对象数据的属性,例如文件名、文件大小、检验和或者与大对象数据是否应该被同步相关的其它元数据。电话100然后将包括客户大对象元数据的客户同步包(包3)传送到服务器310。
服务器310然后将客户大对象元数据与描述服务器大对象数据的服务器大对象元数据进行比较。例如,客户大对象元数据可以包括图像文件名以及指示与图像文件相关联的图像文件何时被最后修改的时间戳。服务器大对象元数据可以包括相同的图像文件名和相关联的时间戳。服务器310将客户大对象元数据中的时间戳与服务器大对象元数据中的时间戳相比较。如果时间戳是相同的,那么服务器310认定存储在服务器310处的图像文件与存储在电话100处的图像文件是相同的,并且不需要图像文件的同步和传送。或者,如果时间戳是不同的,那么服务器310认定存储在服务器310处的图像文件与存储在电话100处的图像文件不同,从而需要图像文件的同步与传送。
在将客户大对象元数据与服务器大对象元数据进行比较之后,服务器310向电话100传送包括指示比较结果的服务器状态代码的服务器同步包(包4)。例如,样本状态代码可以如下定义:
·代码250:新文件,传递大对象数据;
·代码251:现有文件的新版本,传递大对象数据;
·代码252:现有文件的老版本,不传递大对象数据;
·代码351:大对象数据同步错误,重新发送请求。
如将由本领域技术人员了解的,多种其它的状态代码定义也都在本发明的范围之内,包括基于大对象元数据的比较指示大对象数据是否应该被同步的任何类型的信息。
包4还可以包括描述额外服务器大对象数据的额外服务器大对象元数据。这种额外服务器大对象数据可以包括例如既存储在服务器310处又存储在电话100处的图像文件,服务器310确定该文件应该被同步,但是该文件在被从电话100发送到服务器310的客户同步包中没有被描述。额外服务器大对象元数据因此作为对电话100的询问,并从电话100请求关于额外服务器大对象数据是否需要被传递到电话100并被同步的响应。额外服务器大对象元数据然后在电话100处被与额外客户大对象元数据进行比较。
如果在包4中接收的状态代码指示大对象数据需要被从电话100传递到服务器310,那么电话100将客户大对象数据包(包5)传送到服务器310,该包包括所要求的大对象数据。客户大对象数据包还可以包括响应于包4中所含的额外服务器大对象元数据的客户状态代码。可用客户状态代码可以与服务器状态代码相同,例如前面列出的样本状态代码,并指示额外的服务器大对象元数据与额外的客户大对象元数据在电话100处的比较结果。
如果客户状态代码指示额外的服务器大对象数据应该被传送和同步,那么服务器310响应于接收自电话100的客户状态代码将服务器大对象数据包(包6)传送到电话100。电话100然后将数据更新状态包(包7)传送到服务器310,服务器310将映射确认包(包8)传送回电话100。最后,上述同步过程的结果例如通过显示在电话100的显示屏105上的消息而被提供给用户315。
为了使本发明的一般特征更加清楚,下面是使用样本可扩展标记语言(XML)代码实现本发明特定实施例的一组示例性包1到8。下面的包1到8对应于图3中示出的包1到8。在下面的XML示例中,电话100请求包括嵌入式图像的新v卡记录的同步,服务器310请求新联络记录的同步。
示例包1:从客户到服务器的客户初始化包:
(与标准SyncML初始化包1相同。)
样本代码:
<SyncML xmlns=″syncml:SYNCML1.1″>
<SyncHdr>
……
<Target>
<LocURI>SyncMLServer</LocURI>
</Target>
<Source>
<LocURI>000000011234564</LocURI>
<LocName>moto</LocName>
</Source>
……
</SyncHdr>
<SyncBody>
<Alert>
<CmdID>1</CmdID>
<Data>200</Data>
<Item>
<Target>
<LocURI>Contacts</LocURI>
</Target>
<Source>
<LocURI>./Contact</LocURI>
</Source>
<Meta>
<Anchor xmlns=″syncml:mgtinf″>
<Last>474</Last>
<Next>475</Next>
</Anchor>
</Meta>
</Item>
</Alert>
……
<Final/>
</SyncBody>
</SyncML>
示例包2:从服务器到客户的服务器初始化包:
(与标准SyncML初始化包2相同。)
样本代码:
<SyncML xmlns=″syncml:SYNCML1.1″>
<SyncHdr>
……
</SyncHdr>
<SyncBody>
<Status>
<CmdID>1</CmdID>
<MsgRef>1</MsgRef>
<CmdRef>0</CmdRef>
<Cmd>SyncHdr</Cmd>
<TargetRef>SyncMLServer</TargetRef>
<SourceRef>000000011234564</SourceRef>
<Data>212</Data>
</Status>
……
<Alert>
<CmdID>6</CmdID>
<Data>200</Data>
<Item>
<Target>
<LocURI>Contact</LocURI>
</Target>
<Source>
<LocURI>Contacts</LocURI>
</Source>
<Meta>
<Type xmlns=″syncml:metinf″>text/x-vcard</Type>
<Anchor xmlns=″syncml:metinf″>
<Last>20051208T045312Z</Last>
<Next>20051208T045548Z</Next>
</Anchor>
</Meta>
</Item>
</Alert>
<Final/>
</SyncBody>
</SyncML>
示例包3:从客户到服务器的客户同步包:
样本代码:
<SyncML xmlms=″syncml:SYNCML1.1″>
<SyncHdr>
……
</SyncHdr>
<SyncBody>
……
<Sync>
……
<Add>
<CmdID>10</CmdID>
<Meta>
<Type xmlns=″syncml:metinf″>text/x-vcard</Type>
</Meta>
<Item>
<Source>
<LocURI>86</LocURI>
</Source>
<Data><![CDATA[BEGIN:VCARD
VERSION:2.1
N;CHARSET=UTF-8:B;A
TEL;CELL;HOME;CHARSET=UTF-8:1111
PHOTO;ENCODING=BASE64;TYPE=JPEG:PhoneRecordImage.jpg
]]></Data>
<!-->v卡中的大对象同步>
<!—该部分对大对象同步是新的。新的公用单元在这里增加作为“附件”,这意味着单独的大对象。附件的操作只是“增加”或“更新”。用户可以根据需要定义。新的数据将被增加,并且较新版本应该更新较旧版本。-->
<附件>
<File>
<name>PhoneRecordImage.jpg</name>
<created>20030807T231830</created>
<modified>20030809T015500</modified>
<attributes>
OMA-DS-DataObjFile-V1_2-20040601-C Page 25(26)
<h>false</h>
<a>true</a>
</attributes>
</File>
</Attach>
</Item>
</Add>
</Sync>
<Final/>
</SyncBody>
</SyncML>
示例包4:从服务器到客户的服务器同步包:
样本代码:
<SyncMLxmlns=″syncml:SYNCML1.1″>
<SyncHdr>
……
</SyncHdr>
<SyncBody>
……
<Status>
<CmdID>3</CmdID>
<MsgRef>2</MsgRef>
<CmdRef>10</CmdRef>
<Cmd>Add</Cmd>
<SourceRef>86</SourceRef>
<Data>201</Data>
<!—在这里增加了新的通用元素“AttData”,其是通过元数据的比较而得出的状态代码,指示新文件需要大对象数据的传递。>
<AttData>250</AttData>
</Status>
<Sync>
<CmdID>4</CmdID>
<Target>
<LocURI>Contact</LocURI>
</Target>
<Source>
<LocURI>Contacts</LocURI>
</Source>
<Add>
<CmdID>5</CmdID>
<Meta>
<Type xmlns=″syncml:metinf″>text/x-vcard</Type>
</Meta>
<Item>
<Source>
<LocURI>T-0</LocURI>
</Source>
<Data><![CDATA[BEGIN:VCARD
VERSION:2.1
N:D;C
TEL;WORK:2222
PHOTO;ENCODING=BASE64;JPEG:ServerRecordImage.jpg
END:VCARD]]></Data>
<!—这部分对大对象同步是新的。-->
<附件>
<File>
<name>ServerRecordImage.jpg</name>
<created>20030807T231830</created>
<modified>20030809T015500</modified>
<attributes>
OMA-DS-DataObjFile-V1_2-20040601-C Page 25(26)
<h>false</h>
<a>true</a>
</attributes>
</File>
</Attach>
</Item>
</Add>
</Sync>
<Final/>
</SyncBody>
</SyncML>
示例包5:从客户到服务器的客户大对象数据包:
样本代码:
……
<Status>
<CmdID>7</CmdID>
<MsgRef>3</MsgRef>
<CmdRef>5</CmdRef>
<Cmd>Add</Cmd>
<Data>201</Data>
<!状态代码251指示“现有文件的新版本,传递大对象数据”-->
<AttData>251</AttData>
</Status>
<!—根据包#4’cmd 3 AttData 250同步到服务器的大对象-->
<Sync>
<CmdID>8</CmdID>
……
<Add><!--Add new file from client to server-->
<CmdID>9</CmdID>
<Meta><Type xmlns=′syncml:metinf′>application/vnd.omads-file+xml</Type></Meta>
<Item>
……
<SourceParent><LocURI>86</LocURI></SourceParent>
<!--send the file to server-->
<Data><!CDATA[
<File>
<name>PhoneRecordImage.jpg</name>
<created>20030807T231830</created>
<modified>20030809T015500</modified>
<attributes>
OMA-DS-DataObjFile-V1_2-20040601-C Page 25(26)
<h>false</h>
<a>true</a>
</attributes>
<body enc=″base64″>
<!--The content of the file goes here-->
……
</body>
</File>]]>
</Data>
</Item>
</Add><!--AttData 250-->
</Sync>
……
包6:从服务器到客户的服务器大对象数据包:
样本代码:
……
<!-->>large object patent-->
<Status>
<!--Server′s response of syncing large object from client-->
<CmdID>3</CmdID>
<MsgRef>2</MsgRef>
<CmdRef>9</CmdRef>
<Cmd>Add</Cmd>
<SourceParent>
<LocURI>86</LocURI>
</SourceParent>
<AttData>201</AttData>
</Status>
<Sync>
<!--Sync file to client according to pkg #5′cmd 7:AttData 251-->
<CmdID>4</CmdID>
……
<Replace><!--Replace client′s file by using server side one-->
<CmdId>5</CmdId>
<Meta><Type xmlns=′syncml:metinf′>application/vnd.omads-file+xml</Type></Meta>
<Item>
……
<SourceParent><LocURI>T-0</LocURI></SourceParent>
<!--Server sends the file to phone-->
<Data><![CDATA[
<File>
<name>ServerRecordImage.jpg</name>
<created>20030807T231830</created>
<modified>20030809T015500</modified>
<attributes>
OMA-DS-DataObjFile-V1_2-20040601-C Page 25(26)
<h>false</h>
<a>true</a>
</attributes>
<body enc=″base64″>
<!--The content of the file goes here-->
……
</body>
</File>]]>
</Data>
</Item>
</Replace><!--AttData 251-->
</Sync>
……
包7:从客户到服务器的数据更新状态包:
样本代码:
……
<Status>
<CmdID>8</CmdID>
<MsgRef>4</MsgRef>
<CmdRef>5</CmdRef>
<Cmd>Replace</Cmd>
<SourceParent>
<LocURI>T-0</LocURI>
</SourceParent>
<AttData>201</AttData>
</Status>
<Map>
<CmdID>9</CmdID>
<Target>
<LocURI>Contacts</LocURI>
</Target>
<Source>
<LocURI>./Contact</LocURI>
</Source>
<MapItem>
<Target>
<LocURI>T-0</LocURI>
</Target>
<Source>
<LocURI>87</LocURI>
</Source>
</MapItem>
</Map>
……
示例包8:从服务器到客户的映射确认:
样本代码:
<SyncML xmlns=″syncml:SYNCML1.1″>
<SyncHdr>
<VerDTD>1.1</VerDTD>
<VerProto>SyncML/1.1</VerProto>
<SessionID>0812523800</SessionID>
<MsgID>5</MsgID>
<Target>
<LocURI>000000011234564</LocURI>
</Target>
<Source>
<LocURI>SyncMLServer</LocURI>
</Source>
</SyncHdr>
<SyncBody>
<Status>
<CmdID>1</CmdID>
<MsgRef>4</MsgRef>
<CmdRef>0</CmdRef>
<Cmd>SyncHdr</Cmd>
<TargetRef>SyncMLServer</TargetRef>
<SourceRef>000000011234564</SourceRef>
<Data>200</Data>
</Status>
<Status>
<CmdID>2</CmdID>
<MsgRef>4</MsgRef>
<CmdRef>9</CmdRef>
<Cmd>Map</Cmd>
<TargetRef>Contacts</TargetRef>
<SourceRef>Contact</SourceRef>
<Data>200</Data>
</Status>
<Final/>
</SyncBody>
</SyncML>
根据本发明的实施例,例如电话100的移动设备在使存储在各种位置中的大对象数据同步方面具有很大的灵活性。例如,从显示屏105上的同步菜单中,用户315可以定义限定电话100与服务器310之间的同步过程将如何运行的各种同步参数。这种同步参数可以包括将根据本发明方法而被同步的文件类型的定义以及将根据现有技术标准而被自动同步的文件类型的定义。同步参数还可以包括大对象数据的定义,例如大小大于500千字节的所有文件。因而根据本发明的实施例,用户315对大对象数据的同步的控制有很大改进。
现在参照图4,总体流程图图示了根据本发明实施例从服务器310角度描述的用于使大对象数据同步的方法400。首先,在步骤405,接收自例如无线电话100的移动设备的客户同步包在服务器310被处理。客户同步包包括描述第一客户大对象数据的第一客户大对象元数据。例如,第一客户大对象数据可以包含图像文件,第一大对象元数据可以包括图像文件的属性,例如文件名、指示文件何时被创建的时间戳以及指示文件何时被最后修改的时间戳。在步骤410,第一客户大对象元数据被与描述第一服务器大对象数据的第一服务器大对象元数据进行比较。例如,第一服务器大对象数据可以是具有与第一客户大对象数据相同文件名、但是具有指示服务器处的文件比电话100处的文件更新近被修改的时间戳的图像文件。
因此在步骤415,服务器状态代码被从服务器310传送到移动设备,该代码指示第一客户大对象数据与第一服务器大对象数据不同。服务器状态代码被在服务器同步包中从服务器传送到移动设备,所述服务器同步包还包括描述第二服务器大对象数据的第二服务器大对象元数据。例如,第二服务器大对象数据可以包括既存储在服务器310处又存储在移动设备处的图像文件,服务器310确定其应该被同步,但是其在被从移动设备发送到服务器310的客户同步包中没有被描述。在步骤420,第一客户大对象数据和第一服务器大对象数据在服务器310处被同步,在服务器310处响应于服务器状态代码第一客户大对象数据被从移动设备接收。
在步骤425,响应于接收自移动设备的客户状态代码,第二服务器大对象数据被传送到移动设备。客户状态代码源自在移动设备处第二大对象元数据与描述第二客户大对象数据的第二客户大对象元数据的比较。最后,在步骤430,接收自移动设备的数据更新状态包在服务器310处被处理。数据更新状态包指示第二服务器大对象数据是否在移动设备处被成功地与第二客户大对象数据同步。
现在参照图5,总体流程图图示了从例如电话100的移动设备角度描述的用于使大对象数据同步的方法500。在步骤505,客户同步包被从移动设备传送到服务器310。客户同步包包括描述第一客户大对象数据的第一客户大对象元数据。在步骤510,接收自服务器310的服务器状态代码在移动设备处被处理。服务器状态代码在服务器同步包中被从服务器310传送到移动设备,所述服务器同步包还包括描述第二服务器大对象数据的第二服务器大对象元数据。基于服务器310处客户同步包的处理,服务器状态代码指示第一客户大对象数据与第一服务器大对象数据不同。
在步骤515,第二服务器大对象元数据被与描述第二客户大对象数据的第二客户大对象元数据进行比较。然后在步骤520,响应于服务器状态代码,第一客户大对象数据包被从移动设备传送到服务器310。第一客户大对象数据包包括第一客户大对象数据以及指示第二服务器大对象数据与第二客户大对象数据不同的客户状态代码两者。在步骤525,第二客户大对象数据和第二服务器大对象数据在移动设备处被同步。响应于客户状态代码,第二服务器大对象数据被从服务器310接收。最后,在步骤530,数据更新状态包被从移动设备传送到服务器310,指示第二服务器大对象数据在移动设备处被成功地与第二客户大对象数据同步。
因此本发明提供了用于使大对象数据同步的有效方法。例如声音、图像或视频文件的大对象数据的多个副本可以被存储在与无线电话100相关联的多个存储器中,但是每一个副本不会被冗余地或不必要地与在服务器310处存储的大对象数据同步。相反,大对象数据仅在必要时被同步,从而节省了例如带宽和电源资源的网络和移动设备资源。
上面详细的描述只是提供了示例性的实施例,并不是要限制本发明的范围、适用性或配置。实际上,示例性实施例的详细描述向本领域的普通技术人员提供了使他们能够实施本发明示例性实施例的描述。应该理解,可以在单元和步骤的功能及安排中作出多种改变而不脱离如所附权利要求给出的本发明的精神和范围。将理解,这里描述的本发明的实施例可以由一个或多个传统的处理器和所唯一存储的程序指令组成,所述指令控制所述一个或多个处理器结合某些非处理器电路来实现如这里描述的使大对象数据同步的一些、大部分或全部功能。非处理器电路可以包括但不限于无线电接收器、无线电发送器、信号驱动器、时钟电路、电源电路和用户输入设备。这样,这些功能可以被解释为用于使大对象数据同步的方法的步骤。或者,一些或所有功能可以由没有存储的程序指令的状态机实现,或者在一个或多个特定用途集成电路(ASIC)中实现,其中,每一个功能或者某些功能的一些组合被实现为定制逻辑。当然,也可以使用两者方法的组合。这样,在这里已经描述了用于这些功能的方法和方式。此外,可以预见,本领域的普通技术人员,虽然可能还需要由例如可用时间、现有技术和经济考虑而激发的很多努力和许多设计选择,但是在受到这里所公开的概念和原理的指导时,将很容易就能够通过最少的试验而产生这种软件指令和程序以及IC。
在前面的说明书中,已经描述了本发明的特定实施例。但是,本领域的普通技术人员了解可以作出各种改进和改变而不脱离如下面权利要求阐述的本发明的范围。因此,说明书和附图将被看作是说明性的而非限制性的,并且所有这种改进都将包含在本发明的范围之内。好处、优点、问题的解决办法以及可能使任何好处、优点或问题解决方法发生或变得更加明显的任何元素,都不能被解释为是权利要求之任一个或全部的关键的、所必需的或者必要的特征或元素。本发明仅由包括该申请未决期间作出的任何修改的所附权利要求及这些权利要求的所有等同内容限定。