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

来源:百度文库 编辑:神马文学网 时间:2024/05/01 18:00:58
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”这个名字在某种程度上会产生误解。它是真正的基于 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 本性的时候了。通常阅读规范总是会有启发,但是也有时候先把玩一番,再问一些问题,会更有益处。我先设置了一台 Web 服务器,用我的移动电话(Ericsson R520m)访问这台服务器,然后看看接收到了什么。服务器日志显示有一个 HTTP post 请求。我编写了一段简单的 CGI 脚本把这个 post 请求的内容导出来,如图 1所示。

您也许第一眼就会注意到,这并不是 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 服务器的基本需求。
您可以参阅本文在 developerWorks 全球站点上的英文原文.
请在讨论论坛上参与本文的讨论。(您也可以单击文章顶部或底部的 讨论来访问论坛。)
请下载这个ZIP 文件,其中包括图 1中讨论的 WBXML 文件与转换后的 XML 文件。
您可以在SyncML 网站上找到 SyncML 的规范。
您可以在Sync Congress中遇到其他与 SyncML 相关的开发人员。
请您阅读 Chandandeep Pabla 的文章,“SyncML intensive”,这篇文章是有关 SyncML 功能的优秀教程。
请您阅读 Aashish Patil 的文章“Sync traps”,其中探讨了同步如何在普适计算中扮演至关重要的角色。
请参考Open Mobile Alliance维护的 WAP 规范,其中包括 WBXML。
请参考开放源代码项目sync4j,他们正在开发基于 J2EE 的 SyncML 服务器。
请参考基于 C 的 WBXML 解析器WBXML Library,最近它已经作为开放源代码项目发布了。
请阅读 Edd Dumbill 以往的XML 观察专栏。
在developerWorks XML 专区中可以找到更多的 XML 资料。
IBM WebSphere Studio Application Developer是一种易于使用的集成开发环境,您可以用它来创建、测试和部署 J2EE 应用程序,还可以从 DTD 和 模式中生成 XML.
请您关注如何才能成为IBM 认证的 XML 及其相关技术开发人员。