刚开始接触 SyncML 时,我原以为自己必须实现相当庞大的 SyncML 协议。幸运的是,自那以后有两个因素使我不必这样做:首先,前两篇文章(请参阅 第 1 部分和 第 2 部分)的发表引起了那些致力于 SyncML 的开发人员的关注,而且他们还让我了解他们的工作;其次,内置 SyncML 的手机和 PDA 的不断出现已使这一领域中的活动日渐频繁。
虽然 SyncML 参考工具箱(SyncML Reference Toolkit,RTK)是在 SourceForge 上托管的(请参阅 参考资料),但是它的保密工作还是做得比较好的。它是由 SyncML 联盟自身开发的。当然,该联盟的成员有自己的基于 SyncML 的产品要销售。所以,虽然这个开放源码 RTK 是一份绝佳的奉献,但为了不影响 SyncML 设计人员的业务,未对它作很广泛的发布。因此,该工具箱没有提供任何样本应用程序。
RTK 是一个比较成熟的产品,可以在 Windows 平台和 Linux 平台上编译。但是,Linux 用户必须作一些更改,因为该工具箱并未彻底消除一些小错误,例如期望不区分大小写的文件名。该工具箱包含一个综合 C 库,用于创建、发送、接收和解析 SyncML 消息。它支持 XML 和 WBXML 编码,还支持 HTTP(用于 Web 上的同步)、WSP(在 WAP 上使用)和 OBEX(在 IrDA 或蓝牙上使用)传输。
RTK 附带有一套相当全面,但并不十分详细的 API 文档。该文档中有些部分似乎与库本身有出入,所以还要准备着手查看相应的源文件和头文件。RTK 反映出 SyncML 拥有如此多的组件这一事实,所以它稍微有点杂乱无序。当然,就可移植性而言,C 是一种出众的语言,但是在我研究该工具箱时,使我吃惊的是,Python 更易于访问。
这个工具箱对于长期的 SyncML 开发似乎是一个不错的选择,尤其是如果您想获得速度以及 Windows/Linux 代码可移植性优点时更是如此。但不要指望它能做很多的工作。如果您在寻求支持,那么尝试一下 YahooGroups SyncML 邮件列表(请参阅 参考资料),因为对 RTK 的讨论占据了其中的主要篇幅。
我前面提到过缺少使用 RTK 的示例。但是,Mirko Mrowczynski 提供了一个绝对是“珍宝”的示例。请参阅 参考资料以获取有关如何获得该示例的详细信息。Mirko 的网页是用德语编写的,这有助于解释为什么说英语的人难以找到这个示例。他的样本应用程序是用 RTK 进行编程的良好开端。
优点:C 是优秀的共同特性;权威性来源;成熟的产品;活跃的支持邮件列表。
缺点:拥有大量 API;文档不友好;入门困难。
对 SyncML 的最直接使用可能是用它备份您手机上的数据。这是 Nicolas Bougues 已经用他的 SyncML 服务器实现完成的应用程序。Nicolas 的代码是用流行的 Web 脚本编制语言 PHP 编写的,并使用了 MySQL 数据库作为后端存储器。它只支持 SyncML 进行 XML 编码,而不支持 WBXML 编码,并且它是针对 Sony Ericsson P800 手机而开发的。P800 只执行 HTTP 连接上的同步,这是通过使用 GPRS/GSM 连接,或当通过其底座连接至计算机时实现的。
要使用它,您需要下载脚本(请参阅 参考资料),在您的 Web 服务器上对它们解包,然后在 MySQL 中创建必要的数据库。Nicolas 的代码支持地址簿、日历和记事本应用程序的同步。MySQL 数据库存储了数据的 vCard、vCalendar 和 vNotes 表示。例如,最近在匈牙利召开的 WWW2003 会议上,我与一群朋友到外面吃饭,然后我在 P800 上记下了所点的食物。当将它同步到数据库时,它看上去如清单 1 所示。
清单 1. 在匈牙利布达佩斯的 Fatl 餐馆所点食物的 vNote 表示
BEGIN:VNOTE
VERSION:1.1
DCREATED:20030523T192529Z
LAST-MODIFIED:20030523T211027Z
BODY;ENCODING=QUOTED-PRINTABLE:
food=0D=0Asoup=20540=0D=0Aduck=201690=0D=0Abeer=20590=0D=0A
END:VNOTE
|
尽管这个应用程序显然不具备工业强度(Nicolas 包含了各类有力的免责声明),但是它还是让我考虑用手机可以完成的一些非常好的事情:例如,用它离线编写 Web 日志项,然后通过数据库进行实时发送。对于进一步的探究,这是一个极佳的开端。
优点:是开始试验 MySQL 的有趣且有用的方法。
缺点:不成熟,仅限于服务器的实现;PHP 不适合客户机端的开发;无 WBXML 支持。
当我第一次研究 SyncML 时,Sync4J 是我研究的项目之一。那时,没有完成任何发行版。事实上,该软件的第一个 beta 测试发行版是在最近的 2003 年 5 月初才完成的(要获取下载的详细信息,请参阅 参考资料)。Sync4J 的出现花了一些时间,但是对于 SyncML 的大规模部署而言,它看上去似乎前景最佳。Sync4J 除了是 SyncML API 以外,它还提供了 SyncML 服务器和客户机工具。
Sync4J 需要 J2EE 环境,以在其中使用 Java 1.4 来运行。对于象我这样不经常接触 J2EE 领域的人来说,Sync4J 提供了 JBoss 安装,从而使我们可以轻松地获得 J2EE 环境。如果您当前的基础结构位于 J2EE 环境,那么该环境的优点一目了然。如果不是位于 J2EE 环境,那么您可能会发现令人有点讨厌的相关资源开销。但是,因为服务器可以使用文件系统作为其同步存储,所以您不必对项目的每一部分都使用 Java 代码。
在测试时,遗憾的是,我无法让我的 Sony Ericsson P800 与 Sync4J 完全同步,但是我相信开发人员正在解决该问题背后的错误。事实上,Sync4J 拥有强大的支持社区,拥有独立的用户和开发人员邮件列表,而且其部分资金是由 Funambol 这个商业组织提供的。
优点:专业实现;是大型系统的良好基础;Java;很可能有很长的寿命。
缺点:庞大的资源开销;需要 J2EE 应用程序服务器。
因为可能您认为我还没有讨论所有主要的编程语言 - 所以这里就给出用 C++ 编写的 SyncML 库。尽管这个项目的开发有点停滞(自 2002 年 4 月以来就没有变化)是事实,但是 LibSyncML 还是给我留下了深刻的印象。它是一个组装得很好的项目,在分发版的构造中,具有与您期望从 GNU 工具所获得的一样的仔细周到。
由于 LibSyncML 还不成熟,所以文档很少。但是,它的示例却相当多。通过通读源代码,我对该库所提供的干净封装的 API 印象深刻,它与 上面提到的 SyncML 参考工具箱形成了强烈的反差。如果您想要自己实现 SyncML,并乐意进行 C++ 编程,那么我可以这样说,它是最值得您关注的项目。作者的确已经朝着这个正确的方向出发了。
优点:基于简单自动工具的编译;API 比 RTK 的干净得多。
缺点:处于早期阶段;维护人员没有时间继续开发它;C++ 不通用。
开放源码 SyncML 实现还处于早期阶段。我概述的所有开放源码工具在某种程度上都不能令人满意,但就其自身而言,其中的大多数都是实现 SyncML 的可行且切合实际的替代选择。我非常高兴能够放弃从头开始实现 SyncML 的计划。
那么,在对 SyncML 为期数月的关注行将结束时,我讨论了哪些内容呢?坦率地说,还没有涉及我所希望的比较深入的方面。尽管 SyncML 的概念很简单,但真正实现起来却相当困难 - 尤其是将它与移动领域中先它出现的 IrMC 同步作比较的时候。那些围绕移动 XML 标准由委员会设计的规范让人觉得困惑,而且常常令人烦恼。这些规范本身的标准也没有达到人们通常从万维网联盟所获得的那么高的级别。
在我自己的实现工作中,我理解并实现了 WBXML(XML 的二进制编码),这最终使我从已经花费了大量时间的主要目标中转移出来。现代设备不需要“W*”系列的规范,我很高兴看到这些规范功成身退。
SyncML 最初是为资源非常有限的设备领域设计的,那时还没有出现 SOAP 标准化,也不能提供较高带宽的移动因特网访问。如果目前来设计该协议的话,它看上去可能会有很大的不同,而且几乎肯定是比较容易实现的。毫无疑问,需要某种 轻量型的 SyncML,它使实现的功能集和期望更有效。
- 您可以参阅本文在 developerWorks 全球站点上的
英文原文.
- 参加关于本文的
论坛。(您也可以单击本文顶部或底部的
讨论访问该论坛。)
- 尝试一下在 SourceForge 上托管的开放源码
SyncML 参考工具箱。
- 获取 Mirko Mrowcyznyski 的
示例 SyncML 应用程序,它是用德语编写的,而且利用了 SyncML 参考工具箱(RTK)。
- 查阅
YahooGroups SyncML 邮件列表。它主要讨论了 SyncML 参考工具箱及其部署。
- 阅读 Nicolas Bougues 的
SyncML 的 PHP 实现,它向乐意琢磨的人提供了良好的开端。
-
Sync4J是 SyncML 协议的一个大规模 J2EE 实现。不管有没有 JBoss,都请
下载它。
- 尝试一下独立的用户和开发人员 Sync4J
邮件列表。
- 请预览
LibSyncML,这是用 C++ 编写的 SyncML 的早期阶段实现。可获得示例服务器和客户机工具。
- 请阅读 Edd Dumbill 的所有
以前的 XML 观察专栏文章。
- 在
developerWorks XML 专区上查找更多 XML 资源。
- 最后,请看一下
Rational Application Developer for WebSphere Software, 它可以快速地帮助 Java 开发人员是设计、构建、测试和部署高质量的 Java/J2EE、Portal、Web、Web services 以及 SOA 应用程序。
- 了解
XML 和相关技术的 IBM 认证资源。
Edd Dumbill 是 XML.com的常务编辑,还是 XML 开发人员新闻网站 XMLhack的编辑和发行人。他是 O'Reilly 的 Programming Web Services with XML-RPC的合著者,以及 Pharmalicensing生命科学知识产权交易所的共同创始人和顾问。Edd 还是 XML Europe 2002年度会议的议程主席。可以通过 edd@xml.com与 Edd 联系。