大河颂电视剧皇后难产:SyncML技术笔记

来源:百度文库 编辑:中财网 时间:2024/04/25 19:28:17

最近公司要做手机,邮件客户端与网站联系人卡片的同步功能
用SyncML来实现

这里先给出一些参考资料
后面会写出自己的实现的步骤

相关方面的知识:
1.XML
2.WBXML: Wireless Binary XML(WBXML,无线二进制 XML)
3.熟悉SyncML 1.1 规范

实现方法:
1.SyncML Reference Toolkit, RTK
sourceforge.net/projects/syncml-ctoolkit/
RTK 是一个比较成熟的产品,可以在 Windows 平台和 Linux 平台上编译。但是,Linux 用户必须作一些更改,因为该工具箱并未彻底消除一些小错误,例如期望不区分大小写的文件名。该工具箱包含一个综合 C 库,用于创建、发送、接收和解析 SyncML 消息。它支持 XML 和 WBXML 编码,还支持 HTTP(用于 Web 上的同步)、WSP(在 WAP 上使用)和 OBEX(在 IrDA 或蓝牙上使用)传输。

小结
优点:C 是优秀的共同特性;权威性来源;成熟的产品;活跃的支持邮件列表。
缺点:拥有大量 API;文档不友好;入门困难。

2.Sync4J
sourceforge.net/project/showfiles.php?group_id=30236
sync4j.funambol.com/main.jsp?main=theproject
Sync4J 需要 J2EE 环境,以在其中使用 Java 1.4 来运行。对于象我这样不经常接触 J2EE 领域的人来说,Sync4J 提供了 JBoss 安装,从而使我们可以轻松地获得 J2EE 环境。如果您当前的基础结构位于 J2EE 环境,那么该环境的优点一目了然。如果不是位于 J2EE 环境,那么您可能会发现令人有点讨厌的相关资源开销。但是,因为服务器可以使用文件系统作为其同步存储,所以您不必对项目的每一部分都使用 Java 代码。

小结
优点:专业实现;是大型系统的良好基础;Java;很可能有很长的寿命。
缺点:庞大的资源开销;需要 J2EE 应用程序服务器。

3.补充
服务器端:libwbxml 的 wbxml2 cvs build + WBXML PHP extension 0.1

其他不成熟的参考:
1.SyncML 服务器的 PHP 实现
nicolas.bougues.net/syncml/
对 SyncML 的最直接使用可能是用它备份您手机上的数据。这是 Nicolas Bougues 已经用他的 SyncML 服务器实现完成的应用程序。Nicolas 的代码是用流行的 Web 脚本编制语言 PHP 编写的,并使用了 MySQL 数据库作为后端存储器。它只支持 SyncML 进行 XML 编码,而不支持 WBXML 编码,并且它是针对 Sony Ericsson P800 手机而开发的。P800 只执行 HTTP 连接上的同步,这是通过使用 GPRS/GSM 连接,或当通过其底座连接至计算机时实现的。

小结
优点:是开始试验 MySQL 的有趣且有用的方法。
缺点:不成熟,仅限于服务器的实现;PHP 不适合客户机端的开发;无 WBXML 支持。
2.LibSyncML
libsyncml.sourceforge.net/
因为可能您认为我还没有讨论所有主要的编程语言 - 所以这里就给出用 C++ 编写的 SyncML 库。尽管这个项目的开发有点停滞(自 2002 年 4 月以来就没有变化)是事实,但是 LibSyncML 还是给我留下了深刻的印象。它是一个组装得很好的项目,在分发版的构造中,具有与您期望从 GNU 工具所获得的一样的仔细周到。

由于 LibSyncML 还不成熟,所以文档很少。但是,它的示例却相当多。通过通读源代码,我对该库所提供的干净封装的 API 印象深刻,它与 上面提到的 SyncML 参考工具箱形成了强烈的反差。如果您想要自己实现 SyncML,并乐意进行 C++ 编程,那么我可以这样说,它是最值得您关注的项目。作者的确已经朝着这个正确的方向出发了。

小结
优点:基于简单自动工具的编译;API 比 RTK 的干净得多。
缺点:处于早期阶段;维护人员没有时间继续开发它;C++ 不通用。

SyncML 服务器的基本需求:
服务器至少要能够理解基本 SyncML 词汇表。此外,如果它要实现通讯簿、日历、任务安排以及电子邮件,则必须分别支持 vCard、vCalendar、vTodo、以及 RFC2822/RFC2045规范。(有关这些规范的链接,请参阅 www.wapforum.org/what/technical.htm)

然而,服务器并不必实现 SyncML 协议的全部功能。SyncML Representation Protocol 规范的第七部分定义了所有必须满足的要求及其细节信息(有关 SyncML 规范的链接,请参阅 参考资料)。表 1 中描述了基本 SyncML 操作的语义,并对基本功能进行了总结。

表 1: SyncML 对服务器命令的最小需求描述

命令名称 在 SyncML 服务器环境中的功能描述

Add 用于指示服务器在客户机的数据中建立了新的内容(比如说在电话本中新
建一项)

Alert 用于通知服务器。所谓通知就是一些同步请求,其中携带了表示客户机数
据库状态的数据。请参考 example.xml 中 CmdID2 和 3 的 Alert 命令,
它们请求的是同步日历与电话本。 Data 元素所关联的代码指明了请求的
类型,在这个例子中类型为 201 ,意思是“慢同步”(Slow
Synchrionization)。在“SyncML Sync Representation 勘误信息”规范中可
以找到这些代码的完整列表(请参阅 参考资料)。

Copy 请求在接收者数据库中的其他位置创建某个项的拷贝。

Delete 请求从服务器的数据库中永久删除某项。

Get 显式地请求根据所请求的 URI 从服务器数据库中获取数据项。

Map 用于维护将本地资源标识与远程资源对应的映射表。比如说,移动电话上
的某项资源可能具有一个2字节的标识,而在服务器上,同一项资源的 ID
则用一个16个字符的字符串表示。

Put 用于将数据项上传到服务器指定的 URI 处。比如说 example.xml 中处理
CmdID 1 的 Put 命令。这一命令请求服务器将电话的容量(已经 SyncML
Device Information DTD 编码)存储到相对 URI /devinf10 处。 Put 命令
在设备同步之外使用。

Replace 请求将指定的对象替换成同步信息中的一部分。

Results 用于携带 Get 等请求返回的结果对象。

Status 用于返回与请求相关的状态代码。

Sync 用于将一组命令(如 Add、Replace 、及 Delete )封装成一次同步。

对 SyncML 客户机的基本需求与服务器的相似。随着将来在 XML 观察专栏对协议实现的深入讨论,我将进一步介绍这些内容。

SyncML 用 URI 的语义来指示位于本地和远程数据库中的数据项。这意味着文件系统作为同步数据库的底层支持是合情合理的。有了这样的认识,下一篇专栏文章将着眼于构造一台基本的服务器,它即可以使用 WBXML 编码的 SyncML,也可以使用 XML 编码。

相关链接:

www-128.ibm.com/developerworks/cn/xml/x-watch/index.html

XML 观察:准备好数据去旅行
本文介绍 SyncML 的研究与部署。
www-128.ibm.com/developerworks/cn/xml/x-synchml/index.html

XML 观察: SyncML 工具箱
本文介绍 Wireless Binary XML(无线二进制 XML,WBXML),并探讨 SyncML 服务器的最小功能需求。
www-128.ibm.com/developerworks/cn/xml/x-syncml3/

XML 观察: WBXML 与 SyncML 服务器的基本需求
本文探究各种 SyncML 工具箱和产品,着重介绍了开放源码产品。
www-128.ibm.com/developerworks/cn/xml/x-syncml2/index.html

备注:

针对于foxmail server的参考:
同步原理
Foxmail地址簿的同步功能遵循SyncML协议。SyncML是为了实现任何网络下的传输设备和应用设备之间实现信息共享而开发出来的一个数据传输协议。SyncML标准以其独具的开放性,兼容目前业界采用的各种通信协议标准,并支持不同应用软件之间和跨操作平台的资料共享。目前,SyncML协议正被迅速推广应用于PC、PDA、手机等设备。

SyncML定义了多种数据同步模式。Foxmail地址簿使用“双向同步”和“慢同步”两种同步模式实现数据同步。

双向同步(Two-way sync):表示客户端与服务器端双方把自从上一次同步以来更新过的数据发送给对方,实现双方数据一致的同步方式。

慢同步(Slow sync):是Two-way sync的一种,但是客户端与服务器端会把自己的所有数据都发送给对方,进行一对一的比较同步,需时较长,所以叫Slow sync。

在客户端与服务器端对数据进行增加、修改和删除操作,都会被记录下来。使用双向同步模式同步数据时,服务器端与客户端先后获取对方自从上次同步以来的操作记录,并以之更新自身的数据,实现数据同步。如果是第一次进行同步,或者服务器要求进行慢同步,Foxmail将自动从双向同步模式切换到慢同步模式。

使用慢同步模式同步数据,Foxmail将把所有同步文件夹的卡片信息发送给服务器,服务器把收到的信息与服务器上现有的联系人信息进行比较,更新服务器的信息,接着,服务器把Foxmail同步文件夹中没有的数据发送回来,Foxmail把收到的数据添加到地址簿的第一个同步文件夹中,实现双方数据的同步。

WBXML格式:


Kannel: Open Source WAP and SMS gateway  -- http://www.taoer.com/2005/07/11/syncml-server-build-config-sync/