跳转到内容

XML - 数据交换管理/SyncML

来自 Wikibooks,开放世界中的开放书籍



上一章 下一章
数据库和 XML SVG



学习目标

[编辑 | 编辑源代码]

完成本章后,您将能够

  • 理解 SyncML 基础知识和通用语法。
  • 了解 SyncML 如何以及为何实现。
  • 快速查找和使用 SyncML 技术规范。

诸如 PDA、寻呼机、手机和笔记本电脑等移动设备本质上并非始终连接到网络。然而,这些设备包含需要从网络获取信息才能发挥作用的应用程序。虽然大多数 PDA 和手机都包含日历、任务列表和通讯录等应用程序来存储有用信息,但当这些信息是静态的,仅在设备本身上可用时,其效用就大打折扣。例如,当在一份副本上进行更改时,静态信息的副本将始终存在差异。同步使设备能够连接到网络以更新设备上的信息或网络上的信息,从而使两组信息保持一致并更新。

鉴于专有移动设备和协议的激增,以及消费者对无处不在的移动信息访问的需求日益增长,领先的技术公司看到了创建一种标准的通用语言来描述设备和应用程序之间同步操作的必要性。他们组成了一个联盟来赞助 SyncML 计划以创建这种语言。

目前,SyncML 联盟已被开放移动联盟(一个拥有 300 多家公司的更大的组织,该组织赞助了许多协作技术项目和协议)采用并纳入其中。

什么是 SyncML?

[编辑 | 编辑源代码]

SyncML 或同步标记语言是一种基于 XML 的行业标准协议,用于在各种网络、平台和设备之间同步移动数据。SyncML 最初是 2000 年中期由爱立信、IBM、Palm Inc.、Lotus、松下电器(Panasonic)、摩托罗拉、诺基亚、Openwave、Starfish Software、Psion 和 Symbian 等主要科技公司发起的一项倡议。他们的倡议目标是从移动设备使用的众多专有同步协议中创建一种通用语言,并为未来的设备提供一整套同步功能。该联盟于 2000 年 12 月发布了 1.0 版。然后,他们在后续版本中实现了新功能并解决了问题,并于 2002 年 2 月完成了 1.1 版的协议。

SyncML 协议的设计目标如下:

  • 作为一种通用语言,任何设备都应该能够与任何 SyncML 服务(网络数据存储库)同步。
  • 任何使用 SyncML 的服务都应该能够与任何支持 SyncML 的设备同步。
  • 该协议必须解决移动设备的限制,尤其是在内存存储方面。
  • 它必须支持各种传输协议,例如 HTTP、SMTP、蓝牙等。
  • 它必须向所有设备提供常见的同步命令。
  • 它建立在现有的 Web 技术之上,特别是 XML。
  • 支持异步通信和错误处理,因为互联网存在延迟。

SyncML 由包含在 DTD 定义中的客户端和服务器命令组成……

SyncML 基础

[编辑 | 编辑源代码]

词汇表

[编辑 | 编辑源代码]

让我们从定义词汇表开始:

  • 客户端 - 移动设备、其应用程序和本地数据库。
  • 服务器 - 与系统数据库或应用程序通信的远程系统。
  • 修改 - 数据库中字段中的数据发生更改。
  • 同步 - 客户端和服务器使用命令交换 SyncML 消息。
  • 数据包 - 符合 SyncML DTD 的 XML 标记,描述 SyncML 客户端或服务器要采取的请求或操作。数据包是要执行的一系列操作的集合。
  • 消息 - SyncML 标记的最小单位。大型数据包被分解成单独的消息。
  • 映射 - 使用中间标识符将两条信息关联起来。例如:假设“绿色”是“5”,而“5”很好。什么是好的?如果你说是“绿色”,那么你答对了。你刚刚做了映射!

缩写

IMEI 国际移动设备识别码
GUID 全局唯一标识符
LUID 本地唯一标识符

消息和数据包

[编辑 | 编辑源代码]

SyncML 消息是客户端或服务器发出的执行某些操作的请求。该操作可能是同步数据、对数据执行一些检查、更新状态或处理与这些操作相关的任何错误。消息被捆绑在一起形成数据包,就像一个待办事项列表。消息是请求的清单,如果提供了足够的信息来识别该消息属于哪个数据包,则可以按任意顺序将它们拼凑在一起。

SyncML 的设计考虑了错误和消息丢失的情况。如果一条消息丢失,SyncML 客户端或服务器将知道存在问题,因为无法完成映射。然后,它将发出重新发送信息的请求。收到数据后,可以继续对信息进行更新。

SyncML 消息的结构

[编辑 | 编辑源代码]

与 SOAP 类似,SyncML 消息也分为两部分:Sync Header <SyncHdr> 和 Sync Body <SyncBody>。标题包含有关请求的元信息,例如目标数据库 <Target> 和源数据库 <Source> URI、身份验证信息 <Cred>、会话 ID <SessionID>、消息 ID <MsgID> 和 SyncML 版本声明 <VerDTD>。主体包含实际的请求、警报和数据。

寻址是通过 <syntaxhighlight> 和 <LocURI> 标签完成的。服务器将具有类似 http://www.chris.syncml.org/sync 的熟悉 URI,而客户端移动设备将具有类似 30400495959596904 的 IMEI 识别号。

SyncML 基于这样的理念:客户端和服务器可以有自己映射数据库中信息的方式。因此,客户端和服务器必须各自具有一组唯一的标识符。

  • 本地唯一标识符 (LUID) 是客户端分配给本地数据库中数据对象(如字段或行)的数字。它们是由 SyncML 客户端分配给这些对象的不可重用的数字。
  • 全局唯一标识符 (GUID) 是分配给数据对象以在远程数据库中使用的数字。此标识符由服务器分配。

LUID 和 GUID 编号只有在两个通信方之间使用的表格中才需要唯一。换句话说,这些数字是临时的,用于将数据映射到表格,并且仅在客户端和服务器之间的事务持续期间存在。

服务器将创建一个映射表以将 LUID 和 GUID 关联起来。

客户端数据

LUID
----
5

Data
----
Green

服务器端数据

GUID
----
5050505

Data
----
Green


服务器映射

GUID
----
5050505

LUID
----
5

变更日志

[编辑 | 编辑源代码]

服务器和客户端通过“变更日志”跟踪在同步期间对其数据库所做的更改。SyncML 未定义变更日志,而是要求客户端和服务器通过消息协商更改和更正。使用变更日志,客户端和服务器知道哪些字段需要更新。将在使用 SyncML 的应用程序中实现变更跟踪的方式未定义。

同步锚点

[编辑 | 编辑源代码]

在同步期间,客户端和服务器需要知道要更新哪些字段。如果客户端/服务器应用程序在更新/修改字段之前检查这些字段,那么客户端/服务器如何跟踪数据库中当前字段的位置?答案是“使用同步锚点”。

锚点有两种:Last 和 Next。“Last”锚点描述上次同步事件期间发生的更新。“Next”锚点描述当前和未来的同步请求。这些锚点从发送设备的角度描述事件。

锚点在客户端和服务器之间来回发送,以跟踪数据库字段发生的情况以及在同步操作的整个生命周期中发生的情况。

通过将同步锚点和变更日志与请求的同步类型协调,服务器应用程序可以确定和跟踪(使用变更日志)哪些信息是最新的。例如,可以使用较旧的信息覆盖“较新”的信息,即变更日志中具有最新时间戳的信息。这可以通过选择客户端告诉服务器用客户端数据覆盖其信息的同步来实现。这称为“来自客户端的刷新同步”。同步类型在下面描述。

SyncML 1.1 语言中有七种类型的同步。以下部分描述了同步类型。

  1. 双向同步 - 客户端和服务器交换有关修改数据的信。客户端首先发送修改。
  2. 慢速同步 - 一种双向同步,其中检查数据库中所有字段的逐字段基础。此类型的同步用于第一次同步或同步失败后。
  3. 仅客户端单向同步 - 客户端首先发送修改后的数据。服务器接受并更新数据,而不发送其修改。
  4. 来自客户端的刷新同步 - 客户端将整个数据库发送到服务器。服务器不进行同步。相反,服务器用客户端的数据库替换目标数据库。
  5. 仅服务器单向同步 - 服务器首先发送修改后的数据。客户端接受并更新数据,而不发送其修改。
  6. 来自服务器的刷新同步 - 服务器将其数据库中的所有信息发送到客户端,替换客户端的数据库。
  7. 服务器提醒同步 - 服务器远程命令客户端使用服务器启动上述同步类型之一。这样,服务器就可以远程控制客户端。

同步启动

[编辑 | 编辑源代码]

同步启动是客户端和服务器在实际同步之前必须经历的过程。第一步是客户端和服务器使用相同的语言,交换和揭示彼此的功能(由设备定义,例如内存量,以及由 DTD 定义的协议)。第二步是识别要同步的数据库。接下来,两者必须确定同步类型。第三步也是最后一步是身份验证。成功完成此步骤后,同步活动即可开始。


身份验证

[编辑 | 编辑源代码]

SyncML 服务器可以向客户端发送包含<Chal>标签的消息,以表示对客户端尝试访问的信息进行身份验证的挑战。然后,客户端必须响应,在<Cred>标签中提供用户名和密码。

SyncML 使用 MD5 摘要访问身份验证。客户端和服务器在身份验证过程中交换凭据,如果过程在某个点中断,则返回错误代码。<Cred>标签用于<SyncHdr>中,用于保存用于身份验证的凭据。

常见的 SyncML 实现

[编辑 | 编辑源代码]

诺基亚是第一家制造支持 SyncML 的手机的公司。它同步了手机上的日历数据库。SyncML 可以同步待办事项列表、日历、地址簿、电话簿,几乎任何组织者可以执行的操作。SyncML 能够做更多的事情。在需要共享相同数据的两个不同的远程应用程序之间,使用 SyncML 将是合适的。

SyncML 语法

[编辑 | 编辑源代码]

SyncML 示例

[编辑 | 编辑源代码]

SyncML 示例(简化)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<SyncML>
<SyncHdr>
<VerDTD>1.1</VerDTD>
<VerProto>SyncML/1.1</VerProto>
<SessionID>104050403</SessionID>
<MsgID>5</MsgID>
<Cred>...</Cred>
</SyncHdr>
<SyncBody>
<Status>...</Status>
<Sync>
<Target>target database URI</Target>
<Source>source database URI</Source>
<Add>datafield and data</Add>
<Replace>an existing data field with some data</Replace>
</Sync>
</SyncBody>
</SyncML>

请注意,第 {1} 行和第 {18} 行使用根标签开始 SyncML 文件。接下来,第 {2} 行和第 {8} 行定义 SyncHdr。此外,第 {3,4} 行定义版本信息,第 {5} 行定义 sessionID 以区分客户端和服务器应用程序之间发生的唯一对话,第 {6} 行显示 MsgID 以唯一标识此请求集(整个标记),以便由请求的应用程序执行。SyncHeader 中还有凭据,位于第 {7} 行。

SyncBody 从第 {9} 行开始。在此 SyncML 消息的这一部分中,给出了设备/应用程序状态 {10}、目标/源 URI {12,13} 和请求的操作,例如第 {11,16} 行之间的同步本身、添加和替换 {14,15} 命令。

WBXML 和 SyncML

[编辑 | 编辑源代码]

WAP 二进制 XML (WBXML) 是一种 XML 格式,其中 XML 标签被缩写,以缩短发送到移动设备的标记,这些设备通常具有带宽和内存限制。XML 标签被编码成二进制速记以节省空间。让我们看一个例子,这样会更有意义。

以下是描述 SyncML 消息的 WBXML 二进制代码。请注意,第一行有一个文档类型定义,这里用十六进制标记表示。你能看到以下字符串发生了什么?"//SYNCML//DTD SYNCML 1.1//EN"

wbxml

紧跟此字符串后面的是字符“6D 6L 71”。每个字符都代表一个 SyncML 标签。

wbxml 缩写

6D
6C
71
= "<SyncML>"
= "<SyncHdr>"
= "<VerDTD>"


wbxml 缩写(续)

C3
03
"1" "." "1"
01
 = represents the beginning of opaque (xml) data
= this represents the length of this opaque data
= The characters "1" followed by "." and "1"
= represents "</VerDTD>"


告诉 SyncML 处理器这是不透明(xml)数据的开始,这表示此不透明数据的长度。字符“1”后跟“.”和“1”表示“</VerDTD>”


总而言之,此 WBXML 代码片段6D6L71C303"1.1"01表示

SyncML 标头片段

1
2
3
<SyncML>
<SyncHdr>
<VerDTD>1.1</VerDTD>

因此您可以看到使用 WBXML 速记将是表示 XML 的更紧凑的方法,从而为移动设备节省带宽。

有关更多信息,请参阅 Ed Dumbill 关于使用 WBXML 的 syncML 的文章。

SyncML 规范

[编辑 | 编辑源代码]

有关 SyncML 的最佳信息来源是协议本身。访问开放移动联盟以获取 SyncML 规范。

开放移动联盟

[编辑 | 编辑源代码]

开放移动联盟下载OMA SyncML 规范和白皮书。或者查看开放移动联盟上的SyncML 文章

SyncML 实现

[编辑 | 编辑源代码]

虽然 SyncML 规范很有用,但您仍然需要在应用程序中实现该协议。有一些工具包和实现可供使用,您可以使用它们来快速入门。

SyncML 参考工具包

[编辑 | 编辑源代码]

开放移动联盟(Open Mobile Alliance)已经发布了一个用C语言编写的工具包来演示SyncML。您可以在这里获取它。如果您能阅读德语,您可以在这里获取一个使用该工具包的示例应用程序。

有兴趣为Java开发SyncML吗?查看开源项目Funambol。它提供了一个实现了SyncML数据同步协议的Java和C++ SDK,一个用于构建SyncML服务器应用程序的基于Java的应用程序框架,以及一个独立的SyncML服务器。

移动设备技术正在快速发展和变化。随着美国电信公司实施第三代(3G)WCDMA技术(宽带码分多址)或无线宽带,我们将开始看到强大的设备出现在市场上。这些设备将能够提供全彩色、视频、流媒体多媒体和各种数据服务,例如通过WAP提供的多媒体信息服务(MMS)。由于基础设施变得越来越便宜,这些电信公司开始转向成为服务提供商和媒体供应商,而不是通信公用事业。Cingular无线、多媒体消息和铃声服务是他们公司转向成为媒体平台的一个很好的例子。能够生存下来的公司将是那些倾听客户需求并提供易于使用的服务的公司。

电信公司可以通过创建使用SyncML进行同步的自定义应用程序和服务来为其服务增加价值。


  1. 访问开放移动联盟网站,下载SyncML v. 1.1协议的pdf并查看它。阅读此参考是学习的有价值的练习。
  2. 回答以下问题
    • 什么是WBXML,为什么使用它?
    • 您如何预测SyncML在未来的应用?
    • 命名一个问题情境,其中SyncML是最佳的“工具”。

答案:2a) WBXML是无线应用协议二进制XML(Wap Binary XML),它是一种XML形式,其中XML标签被缩写以缩短发送到移动设备的标记,移动设备通常具有带宽和内存限制。2b) SyncML可能会被用作一种通用的标准同步机制,用于在系统之间同步数据集,而不仅仅用于移动设备。2c) 一个名为TNT helpdesk的工单跟踪系统是一个基于Web的开放工作请求管理系统。运行此系统的员工希望在其PDA上拥有来自该系统的实时数据,列出开放请求。目前,PDA数据库通过连接到员工PC的对接同步站进行同步。员工必须将请求列表下载为CSV文件,将其转换为可用的PDA数据库并将其上传到PDA,这使得此过程变得繁琐、容易出错且始终过时。建议:创建一个自定义应用程序,使用蓝牙/无线通过SyncML将实时更新推送到PDA。

参考文献

[编辑 | 编辑源代码]
Dumbill, E.(2002年1月1日)。XML观察:拥有数据,即可传输。IBM.com。于2004年4月6日从
http://www-106.ibm.com/developerworks/xml/library/x-synchml/index.html
Dumbill, E.(2003年3月1日)。XML观察:WBXML和基本的SyncML服务器需求。IBM.com。于2004年4月6日从
http://www-106.ibm.com/developerworks/xml/library/x-syncml2.html
[SyncML]的工作原理(n.a)。Nokia.com。于2004年4月6日从
http://www.nokia.com/nokia/0,8764,2559,00.html
新的SyncML标准。Cellular Dot Co Dot Za网站。于2004年4月6日从
http://www.cellular.co.za/syncml.htm
开放移动联盟(2002年4月2日)。SyncML版本1.0、1.1规范、白皮书、勘误表。于2004年4月6日从
http://www.openmobilealliance.org/tech/affiliates/syncml/syncmlindex.html
Pabla, C(2002年4月1日)。SyncML强化:SyncML协议和流程的初学者指南。IBM.com。于2004年4月6日从
http://www-106.ibm.com/developerworks/xml/library/wi-syncml2/
SyncML Initiative, Ltd.(2000年12月7日)。SyncML规范协议版本1.0。开放移动联盟。于2004年4月6日从
http://www.openmobilealliance.org/tech/affiliates/syncml/syncml_represent_v10_20001207.pdf
SyncML Initiative, Ltd.(2002年2月15日)。SyncML设备信息DTD版本1.1。。于2004年4月6日从
http://www.openmobilealliance.org/tech/affiliates/syncml/syncml_devinf_v11_20020215.pdf
Saarilahti, A, Group SyncML,等(2001年4月23日)。Tik-76.115 SyncML简要介绍。。于2004年4月6日从
http://www.hut.fi/u/asaarila/syncml/syncml_intro.html
Stemberger, S.(2002年10月)。同步数据:SyncML简介。IBM.com。于2004年4月6日从
http://www-106.ibm.com/developerworks/wireless/library/wi-syncml/
Synchronica Software GmbH(n.d.)。SyncML for Microsoft Exchange。Synchronica Software网站。于2004年5月24日从
http://www.synchronica.com/products/syncml/corporate_syncml.html
Weblicon Technologies AG (n.d.)。SyncML for SunOne。Weblicon Technologies AG网站。于2004年4月6日从
http://www.weblicon.net/html/products_syncml.html
XML Cover Pages (n.a., 2003年4月29日)。SyncML计划。XML Cover Pages Dot Org网站。于2004年4月6日从
http://xml.coverpages.org/syncML.html
华夏公益教科书