XML 观察: 准备好数据,去旅行

Edd Dumbill 作为一名 XML 开发人员,一直在寻求使他的数据随时随地都可以使用的方式。这一次,他带我们进入 SyncML 的研究与部署之旅。

于是 XML 到来了,与之相伴的还有对开放标准的价值的认同,数据开始从单一应用程序的禁锢中解放出来。当今的软件开发人员明白,数据是要在人和组织之间来回移动的。即将发布的 Microsot Office 11 也支持 XML,这就好比一个人在写遗嘱的时候才终于认识到,已经不能再将数据绑定在某个单一的应用程序上了。

因此,数据在应用程序之间的移动已经开始变得顺畅。除了这个好消息之外,我还很兴奋地看到,数据在设备之间的传输也正在变得更加容易。对于某些特定的常用数据项,如日历与通讯簿等,在标准方面已经达成一致的协议,但是还缺乏方便的方式来传送这些数据。而这些正是 SyncML 的用武之地。 SyncML 是基于 XML 的协议,用于同步数据,现在,它正在最近盛行的移动设备的海洋中大行其道。

即便是有了当前的同步技术,也很难保持我的 Palm Pilot、桌面 PC以及移动电话之间的联系和时间表的同步。事实上这件事情的难度相当大,我屡遭挫折,已经放弃尝试。每次都要记着把我的 PDA 和蜂窝电话一起带上,却只是为了用一下通讯簿,我已经受够了这些事情。而 SyncML 看起来似乎是解决此类问题的大好机会,由于它能够在无线应用协议(Wireless Application Protocol,WAP)上使用,我无论在哪里都可以和远程的服务器保持同步了。

但是还不能高兴的太早,事实上好像还没有什么面向用户的 SyncML 产品,而且支持它的也只有少量的开放源代码项目。因此我打算研究一下,看看如果要用 SyncML 将我的蜂窝电话和个人信息管理软件集成起来,都会涉及到哪些东西,然后我会发布这些代码。在本专栏的下几篇文章中,我将按照这个思路,特别着眼于 XML 技术可以应用的场合。

初探 SyncML

“SyncML”这个名字在某种程度上会产生误解。它是真正的基于 XML 的标记语言,但是却不止是一种数据格式。这种协议通过定义并允许交换数据,以及确定如何解释这些数据,从而提供了代理之间相互同步数据的结构。

在 Chandandeep Pabla 的“SyncML intensive”一文中(请参阅 参考资料),他介绍了一些 SyncML 的基本概念。我将会在逐步深入的过程中,随着这些概念的出现来介绍它们,不过我还是推荐您阅读一下 Chandandeep 的文章,以便能够熟悉 SyncML 的主要概念。

您可以从 SyncML 网站的“Technology”部分中找到 SyncML 1.1 规范,其中收录有大量的 PDF 和 DTD(请参阅 参考资料)。“SyncML Sync Protocol”(PDF 格式)这篇文档是了解 SyncML 功能的最好起点。其中需要您熟悉的有下面三种 XML 语言:

  • SyncML:定义同步过程中涉及到的信息交换。
  • SyncML Meta Information(SyncML 元信息,MetInf):定义 SyncML 中使用到的多种元数据项,如日期、ID、以及大小。
  • SyncML Device Information(SyncML 设备信息,DevInf):用来描述被同步的设备(比如支持何种内容类型、有多少可用内存,等等)。

SyncML 规范也定义了第四种技术,用来进行设备管理和保证对设备进行远程管理操作时的性能。对这个协议的研究已经超出了这一系列文章的范畴。如果您对这个协议感兴趣,可以阅读 SyncML网站上“SyncML Device Mangement Protocol”(SyncML 设备管理协议)这篇文章。

SyncML 与 SOAP 1.2 一样,在协议中仅仅定义了数据的交换。它并没有将自己绑定在某种特定传输方式上。事实上,对多种传输方式的绑定是在 HTTP、Wireless Session Protocol(无线会话协议,是一种加速的 HTTP)以及Object Exchange(OBEX,对象交换协议)协议中定义的。Palm Pilot PDA 这样的设备通过 OBEX,以“beaming”(播放)方式发送与接收数据,非常类似于 HTTP 的二进制版本。





回页首


专利现状

现在很多标准都吹捧说自己是“开放的”,但是这并不总意味着它们是不受专利保护的技术。所以在实现之前最好先看看制定标准的人是谁,以及使用它的条件是什么。

开发 SyncML 的主要是对移动通信感兴趣的公司组成的社团。尽管规范的开发受到社团成员的限制,但是这项规范本身是可以公开使用的。规范中有一段样板戏一样的语言,声称保留规范的制订者征用规范实现的权利,不过根据 SyncML 的主席 Douglas Heintzman 的声明来看,他们并不会真的做出这种要求:

“我们想让我们在 SyncML 上的投入得到补偿。我们相信我们做这件事情的方式(以及率先开始这项工作的原因)是想让许许多多的人接受它。我们知道要做到这一点,最好的方式就是免费发布质量优良、功能丰富、并能解决实际问题的技术。不管从许可证的词汇中可以推论出什么,上面的话都是我们的指导原则。”

可能那些与社团律师有联系的人会想要深入调查一下,但是这样一条信息好像已经足够鼓励人们加紧开发了。





回页首


接收第一条 SyncML 消息

现在舞台已经搭好,是开始了解 SyncML 本性的时候了。通常阅读规范总是会有启发,但是也有时候先把玩一番,再问一些问题,会更有益处。我先设置了一台 Web 服务器,用我的移动电话(Ericsson R520m)访问这台服务器,然后看看接收到了什么。服务器日志显示有一个 HTTP post 请求。我编写了一段简单的 CGI 脚本把这个 post 请求的内容导出来,如 图 1 所示。


图 1. 输出 SyncML 消息
Output

您也许第一眼就会注意到,这并不是 XML。因为移动设备的内存和处理能力都有限,制造商们发明了一种类似 XML 的二进制元语言,称为 Wireless Binary XML(WBXML,无线二进制 XML)。WBXML 的基本原理在于利用 DTD 的先验知识,您可以将标签缩小到一个字节。付出的代价您也看到了,就是丧失了一些易读性。

很多 XML 开发人员从来没有见过 WBXML 规范,这让我觉得很惊讶。开发论坛上也经常遇到有人问有关 XML 二进制编码的问题。WBXML 最普遍的用法是作为 WML 页面的编码,并传送到移动电话的 WAP 浏览器上。

实际上 SyncML 规范同时涉及 XML 和 WBXML 格式的协议编码。SyncML 本意是在任何设备上都可以使用,但是如果要支持移动电话类型的设备,SyncML 服务器除了 XML 之外,还必须能够发送和接收 WBXML。,我已经在本文附带的 ZIP 文档中加入了 1的 WBXML 文件,以及用 XML 翻译后的文件(请参阅 参考资料)。XML 是用我编写的将 SyncML、WBXML 转换成 XML 的代码产生的,详细情况请参看本专栏的下一篇文章。

XML 翻译的指导意义更强,其中包含下面的元素:

  • R520m 移动电话的设备描述
  • 通知自上次同步之后日历的状态
  • 通知自上次同步之后电话簿的状态




回页首


展望

本次研究的目标是创建基本的 SyncML 服务器组件,它即可以部署在 Web 服务器上,也可以部署在 OBEX 服务器上(比如,在具有兰牙功能的计算机上)。我们已经学到,除了实现 SyncML 语言的语义之外,我们还需要能处理 WBXML 和 XML。 参考资料中介绍了这一领域内的一些开放源代码项目。SyncML 在开放源代码世界中只是刚刚开始引起注意而已,当然值得您亲自开发一下。当然也还有很多其他的包值得您研究。

下一篇专栏文章将着眼于 WBXML,并研究它与普通 XML 的相似性与不同之处。同时还会介绍 WBXML 对于 SyncML 服务器的基本需求。



参考资料

关于作者

 

Edd Dumbill 是 XML.com 网站的常务编辑,还是 XML 开发人员新闻网站 XMLhack 的编辑和发行人。他是 O'Reilly 的 Programming Web Services with XML-RPC一书的合著者,以及 Pharmalicensing 生命科学知识产权交易事务所的共同创始人和顾问。Edd 还是 XML Europe 2002 会议的议程主席。可以通过 edd@xml.com 与 Edd 联系。

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值