- 浏览: 615533 次
- 性别:
- 来自: 厦门
文章分类
最新评论
-
咖啡舞者:
现在在厦门工作还好吧。
2013换工作记 -
huih1984:
工作8年,算起来楼主和我差不多岁数啊, ,本人现在干着没有合同 ...
2013换工作记 -
无心流泪wan:
乘法法则规定复数的乘法按照以下的法则进行:设z1=a+bi,z ...
帮朋友做的一笔试(友元 运算符重载) -
我叫营长1:
谢谢,很详细呢
SharedPreferences 的用法 -
javalinjx:
挺有意思的。哈哈
2013换工作记
目前在嵌入式系统与其他通信设备的数据同步方面,业界还没有统一的标准、协议。为了解决这个问题,IBM、 Lotus、Motorola、Nokia、Palm Inc、Psion、Starfish Software已经形成了SyncML协议的标准草案。这个草案将会发展成为一个通用的可以被用在工业界的同步协议。本文简单介绍了SyncML协议与 应用该协议的工具包。<!-- START RESERVED FOR FUTURE USE INCLUDE FILES--><!-- include java script once we verify teams wants to use this and it will work on dbcs and cyrillic characters --> <!-- END RESERVED FOR FUTURE USE INCLUDE FILES-->
目前,移动计算和通信设备的流行很大部分原因是因为它们具有一些方便的功能,比如说在需要时可以发送信息给其他用户,用户希望随时随地都可以利用掌上设备访问信息和执行应用程序,甚至在飞行中也可以获得和更新信息。
具有在一台掌上设备运行应用程序和处理信息、还可以将应用程序和信息的更新同步回到办公室的设备或者网上的这种能力对于普遍、离线计算的效用和流行是一个关键。
遗憾的是,到今天为止还有两种方式没有实现:
- 支持任何移动设备同步的网络数据
- 支持同步人和网络数据的移动设备
这样一来,需要为移动设备增加很多用来同步不同的,尽可能多的数据所需要的协议,这些协议中的每一个仅适用于在一个选定的设备子集上进行选定的传输和运行,并且可以访问一部分网络数据,单一同步标准的缺乏为最终用户、设备制造商、应用程序开发者和设备提供商制造了很多问题
SyncML是一个新的标准,为了开发一个简单、通用的可以用于工业界方面的数据同步协议,推进这个标准的有IBM、Lotus、Motorola、Nokia、Palm Inc、Psion、Stafish Software。其他的公司、企业不断的被补充进来。
1.1 通用同步协议的优点
下面让我们看看适合工业界范围的数据同步协议对于每组角色的有益之处。
1. 最终用户:今天移动设备用户可能在每一种设备上使用了不同的同步产品。这样就会,有一种程序用来在膝上电脑和网络数据之间同步文件,另一种用来同步掌上电 脑的日历,还有远程email访问,每一种技术只能用来同步少数应用程序或者被限制成特殊类型的网络连接。这种安排安装昂贵、配置和操作复杂、管理昂贵。 使用SyncML,用户可以购买可以使用广泛的数据类型的设备。
2. 设备制造商:当每一个设备制造商想要支持这种能支持所有用户和服务提供商进行数据访问的技术。实际上一个设备会支持一种数据同步技术。这种选择迫使制造商 压缩存储空间、内存、电源的用量和消耗。设备制造商会从通用的协议中获得好处,这种通用的协议使设备共同使用广泛的应用程序、服务、网络和传输技术。
3. 服务提供商:正在进入快速增长的应用程序舞台的服务提供商非常关注这样一个现象,即同步技术的增多会使在有效的成本下扩展用户和支持用户成为不可能。现在 服务提供商已经支持一定范围的数据类型和应用中的设备;还必须安装、配置多种服务的基础结构,维护和支持这些基础结构,并且保证兼容性和性能。现在可选的 是利用单独的数据连通方案,陷入了避免紧密结合的私有解决方案。使用SyncML,将会使提供支持广阔的应用程序的连接成为可能。
4. 应用程序开发者:选择支持多种同步技术可以使应用程序支持更多的设备类型 和网络数据,但是这种选择有一些浪费。为了保持向下兼容性开发者失去了选择网络数据仓库的灵活性,这也会增加程序开发的消耗和最终产品的复杂性。增加了复 杂性的网络数据仓库对服务供应商的安装和采用是一个障碍。使用SyncML,可以开发能连接更多设备集合和网络数据的应用程序。
1.2 通用同步协议的描述
通用同步协议的目标是普遍适用,同步两端可以是任何一种类型、在任一种网络上面,这样会:
- 同步网络数据与任一种移动设备
- 同步移动设备与任一种网络数据
数据同步协议会同步网络数据和很多不同的设备,包括掌上电脑、移动电话、自动计算机和桌面计算机。一个用户可以在不同的设备上访问、操作同样的数据集合,举个例子,用户可以使用掌上设备或者移动电话阅读电子邮件,还可以维护一个一致的、更新的纪录。
同样的,同步两端可以使用任意类型,这使得移动设备可以支持更多数据类型,包括电子邮件、日历、事务管理信息、数据库中的企业数据和Web文档。这种功能使得想要通过电子邮件接收订单的用户可以在同样的设备上访问公司的目录清单系统,用来最后决定交付日期。
实现这个目标,协议需要下列特性:
- 可以有效的在有线和无线网络上运作
- 支持多种传输协议
- 支持任意的网络数据
- 可由多种应用程序访问
- 考虑到移动设备的资源限制
- 构造于现有的全球互联网和Web技术之上
- 协议最小功能就是赋予所有设备最常用的同步能力
|
2.1 绑定Http
2.1.1 Tcp 传输服务
Http通信一般是在 Tcp连接之上的,这个绑定不是必需的,如果Http基于其它的协议,那么需求也和下面Tcp定义的相似
2.1.1.1 连接
在Http客户端连接到Http服务器端的时候,SyncML客户端建立一个Tcp连接在客户和服务器之间通过使用Tcp open操作,在超时的情况下还需要SyncML客户端从新建立连接。
2.1.1.2连接选项
关于端口和协议版本的一些选项。
2.1.1.3 断开连接
当连接不需要的时候,SyncML客户端负责使用tcp close操作结束连接。如果固定连接存在于Http请求中,Http连接的关闭有Http客户端来完成,当Http客户端接收到来自服务器的Http应答中指明这是最后一个SyncML的包。
2.1.1.4 终止
有时候非正常时间发生会要求应用程序中断Tcp连接,这种情况下,Tcp从新初始化来结束当前连接。
2.1.1.5 超时
当服务器超时,SyncML客户端需要重建一个新的HTTP会话并且Http服务器端会尝试从新发送当前的SyncML包
2.1.2. SyncML信息交换
一旦Http连接建立,一个或者多个SyncML消息会通过连接由SyncML客户端传输,它们存在于Http客户端的请求或者Http服务器端的应答中。
在Http请求中POST方法用来传递SyncML消息。
2.1.2.1 每包一个消息
下面是Http请求的部分代码:
POST ./servlet/syncit HTTP/1.1 Host: www.datasync.org Content-Type: application/vnd.syncml-xml; charset="utf-8" Content0Length: 1023 Accept: application/vnd.syncml-xml |
下面是Http应答的部分代码:
HTTP/1.1 200 ok Content-Type: application/vnd.syncml-wbxml; charset="utf-8" Content-LengthL 1023 --HTTP body--- |
2.1.2.2 一个包里包含多个消息
每 一个Sync消息必须使用SyncML MIME媒体类型在HTTP请求或应答中传递,当每个包里有多个SyncML消息的时候,每一个消息是否在分离的HTTP请求或应答传递依赖于它是否是 SyncML的请求和应答。可以根据每一个SyncML消息是否有最后一个元素来判断这个包中是否有更多的SyncML消息,如够有最后一个元素,那么这 消息就是该包中最后一个消息。
2.1.3 传输命令
HTTP使用一系列的命令,包括传输方法,头部信息,请求的头部信息,应答的头部信息
2.1.3.1 传输方法
SyncML客户端必须使用POST方法或者可以使用CONNECT方法(如果支持的话)来给SyncML服务器发送SyncML请求。CONNECT方法用来初始化SSL会话以验证HTTP客户和服务器,其他的方法目前没有用在SyncML客户端。
2.2 绑定Obex
2.3 绑定Wsp
|
3.1 动机:
- 表示协议并不足够来实现信息的交互性
- 可以在多种设备之间传输多种格式的数据
3.2 设计原则
- 满足网络延迟的需要
- 满足各种设备
- 满足现有的各种储存模式
- 满足多种安全需求
- 多种使用模式
3.3 Sync 类型
3.3.1双向同步
- 客户端和服务器端双向传输信息
- 在特殊情况下采用Slow sync 作为传输模式
3.3.2 客户端单向同步
- 只有客户端提出修改信息
- 特殊情况下,数据可以被输出
3.3.3 服务器端单向同步
- 只有服务器端提出修改信息
- 特殊情况下,数据可以被输入
3.3.4 服务器端通告
- 同步要求从服务器端传到客户端
3.3.5 双向同步例子
- 日历的同步传输
- 客户端的认证请求被接受
- 客户端传送两条信息
- 服务器端传送一条信息
- 服务器端和客户端的数据一致会立刻完成
下面是一个例子,描述同步传输的大体过程。同步传输有七种方式,下面的例子是双向传输,最复杂的一种。首先进行初始的准备工作,然后进行传输,再进行确认。
3.3.5.1客户端发出同步请求
<SyncML>
相当于同步的头文件,基本为固定模式
<SyncHdr>
<VerDTD>1.0</VerDTD>
<VerProto>SyncML/1.0</VerProto>
<SessionID>1</SessionID>
<MsgID>1</MsgID>
同步初始化时数值为一,相当于第几个回合
目标地址
<Target><LocURI>http://www.syncml.org/sync-server</LocURI></Target>
源地址
<Source><LocURI>IMEI:493005/10/059280/0</LocURI></Source>
认证
<Cred> <!--The authentication is optional.-->
认证模式
<Meta><Type xmlns='syncml:metinf'>syncml:auth-basic</Type></Meta>
相当于密码
<Data>dXNlcmlkOnBhc3N3b3Jk=</Data> <!--base64 formatting of "userid:password"-->
</Cred>
<Meta> <!--The Meta is now used to indicate the maximum SyncML message size, which
client can receive.-->
<mi:MaxMsgSize xmlns:mi='syncml:metinf'>5000</mi:MaxMsgSize>
</Meta>
</SyncHdr>
头文件结束
<SyncBody>
唤醒对方,相当于发出信号
<Alert>
<CmdID>1</CmdID>
命令ID为1
<Data>200</Data> <!-- 200 = TWO_WAY_ALERT -->
共有七种连接方式,200代表其中一种
<Item>
<Target><LocURI>./contacts/james_bond</LocURI></Target>
进行操作的目标和地址,相当于数据库
<Source><LocURI>./dev-contacts</LocURI></Source>
<Meta>
相当于认证
<Anchor xmlns='syncml:metinf'>
<Last>234</Last>
<Next>276</Next>
</Anchor>
</Meta>
</Item>
</Alert>
上传
<Put>
<CmdID>2</CmdID>
<Meta><Type xmlns='syncml:metinf'>application/xml</Type></Meta>
固定的格式
<Item>
<Source><LocURI> devinf10</LocURI></Source>
固定的格式
<Data>
<DevInf xmlns='syncml:devinf'>
相当于本地的数据描述
<Man>Big Factory, Ltd.</Man>
<Mod>4119</Mod>
<OEM>Jane's phones</OEM>
<FwV>2.0e</FwV>
<SwV>2.0</SwV>
<HwV>1.22I</HwV>
<DevId>1218182THD000001-2</DevId>
<DevTyp>phone</DevTyp>
<DataStore>
<SourceRef>./contacts</SourceRef>
<DisplayName>Phonebook</DisplayName>
<MaxGUIDSize>32</MaxGUIDSize>GUID
相当于索引
<Rx-Pref>
<CTType>text/x-vcard </CTType>
<VerCT>2.1</VerCT>
</Rx-Pref>
<Tx-Pref>
<CTType>text/x-vcard</CTType>
<VerCT>2.1</VerCT>
</Tx-Pref>
数据存储能力
<DSMem>
<MaxMem>32650</MaxMem>
<MaxID>250</MaxID>
<FreeMem>22430</FreeMem>
<FreeID>122</FreeID>
</DSMem>
</DataStore>
<CTCap>
<CTType>text/x-vcard</CTType>
<PropName>BEGIN</PropName>
<ValEnum>VCARD</ValEnum>
<PropName>END</PropName>
<ValEnum>VCARD</ValEnum>
<PropName>VERSION</PropName>
<ValEnum>2.1</ValEnum>
<PropName>N</PropName>
<PropName>TEL</PropName>
<ParamName>VOICE</ParamName>
<ParamName>CELL</ParamName>
</CTCap>
<SyncCap>
<SyncType>01</SyncType>
<SyncType>02</SyncType>
</SyncCap>
</DevInf>
</Data>
</Item>
</Put>
<Get>
<CmdID>3</CmdID>
<Meta><Type xmlns='syncml:metinf'>application/xml</Type></Meta>
<Item>
<Target><LocURI> devinf10</LocURI></Target>
</Item>
</Get>
<Final/>
</SyncBody>
</SyncML>
3.3.5.2服务器端发出同步请求
<SyncML>
头文件
<SyncHdr>
<VerDTD>1.0</VerDTD>
<VerProto>SyncML/1.0</VerProto>
<SessionID>1</SessionID>
<MsgID>1</MsgID>
<Target><LocURI>IMEI:493005/10/059280/0</LocURI></Target>
<Source><LocURI>http://www.syncml.org/sync-server</LocURI></Source>
<Cred> <!--The authentication is optional.-->
<Meta><Type xmlns='syncml:metinf'>syncml:auth-basic</Type></Meta>
<Data>dXNlcmlkOnBhc3N3b3Jk=</Data> <!--base64 formatting of "userid:password"-->
</Cred>
</SyncHdr>
<SyncBody>
相当于回复客户端请求
回复头文件
<Status>
<MsgRef>1</MsgRef><CmdRef>0</CmdRef><Cmd>SyncHdr</Cmd>
<TargetRef>http://www.syncml.org/sync-server</TargetRef>
<SourceRef>IMEI:493005/10/059280/0</SourceRef>
212代表正常
<Data>212</Data> <!--Statuscode for OK, authenticated for session-->
</Status>
回复Alert
<Status>
<MsgRef>1</MsgRef><CmdRef>1</CmdRef><Cmd>Alert</Cmd>
<TargetRef>./contacts/james_bond</TargetRef>
<SourceRef>./dev-contacts</SourceRef>
<Data>200</Data> <!--Statuscode for OK-->
200代表正常
把认证对上,对方请求的值
<Item>
<Data><Anchor xmlns='syncml:metinf'><Next>276</Next></Anchor></Data>
</Item>
</Status>
<Status>
回复Put
<MsgRef>1</MsgRef><CmdRef>2</CmdRef><Cmd>Put</Cmd>
<SourceRef> devinf10</SourceRef>
<Data>200</Data> <!--Statuscode for OK-->
</Status>
返回值,请求对方
<Results>
<MsgRef>1</MsgRef><CmdRef>3</CmdRef>
<Meta><Type xmlns='syncml:metinf'>application/xml</Type></Meta>
固定格式
<Item>
<Source><LocURI>devinf10</LocURI></Source>
固定格式
<Data>
相当于数据描述
<DevInf xmlns='syncml:devinf'>
<Man>Small Factory, Ltd.</Man>
<Mod>Tiny Server</Mod>
<OEM>Tiny Shop</OEM>
<DevId>485749KR</DevId>
<DevTyp>Server</DevTyp>
<DataStore>
<SourceRef>./contacts</SourceRef>
<DisplayName>Addressbook</DisplayName>
<Rx-Pref>
<CTType>text/x-vcard </CTType>
<VerCT>2.1</VerCT>
</Rx-Pref>
<Rx>
<CTType>text/vcard </CTType>
<VerCT>3.0</VerCT>
</Rx>
<Tx-Pref>
<CTType>text/x-vcard</CTType>
<VerCT>2.1</VerCT>
</Tx-Pref>
<Tx>
<CTType>text/vcard</CTType>
<VerCT>3.0</VerCT>
</Tx>
存储能力
<DSMem>
<MaxMem>132650</MaxMem>
<MaxID>1250</MaxID>
<FreeMem>122430</FreeMem>
<FreeID>1122</FreeID>
</DSMem>
</DataStore>
<CTCap>
<CTType>text/x-vcard</CTType>
<PropName>BEGIN</PropName>
<ValEnum>VCARD</ValEnum>
<PropName>END</PropName>
<ValEnum>VCARD</ValEnum>
<PropName>VERSION</PropName>
<ValEnum>2.1</ValEnum>
<PropName>N</PropName>
<PropName>TEL</PropName>
<ParamName>VOICE</ParamName>
<ParamName>CELL</ParamName>
<CTType>text/vcard</CTType>
<PropName>BEGIN</PropName>
<ValEnum>VCARD</ValEnum>
<PropName>END</PropName>
<ValEnum>VCARD</ValEnum>
<PropName>VERSION</PropName>
<ValEnum>3.0</ValEnum>
<PropName>N</PropName>
<PropName>TEL</PropName>
<ParamName>VOICE</ParamName>
<ParamName>FAX</ParamName>
<ParamName>CELL</ParamName>
<CTType>text/vcard</CTType>
<PropName>BEGIN</PropName>
<ValEnum>VCARD</ValEnum>
<PropName>END</PropName>
<ValEnum>VCARD</ValEnum>
<PropName>VERSION</PropName>
<ValEnum>3.0</ValEnum>
<PropName>N</PropName>
<PropName>TEL</PropName>
<ParamName>VOICE</ParamName>
<ParamName>FAX</ParamName>
<ParamName>CELL</ParamName>
</CTCap>
<SyncCap>
<SyncType>01</SyncType>
<SyncType>02</SyncType>
<SyncType>07</SyncType>
</SyncCap>
</DevInf>
</Data>
</Item>
</Results>
进行双向传输,唤醒对方
<Alert>
<CmdID>1</CmdID>
<Data>201</Data> <!-- 201 = TWO_WAY_ALERT -->
<Item>
<Target><LocURI>./dev-contacts</LocURI></Target>
<Source><LocURI>./contacts/james_bond</LocURI></Source>
<Meta>
发送认证
<Anchor xmlns='syncml:metinf'>
<Last>200005021T081812Z </Last>
<Next>200005022T093223Z </Next>
</Anchor>
</Meta>
</Item>
</Alert>
<Final/>
</SyncBody>
</SyncML>
3.3.5.3客户端提交数据
<SyncML>
<SyncHdr>
<VerDTD>1.0</VerDTD>
<VerProto>SyncML/1.0</VerProto>
<SessionID>1</SessionID>
<MsgID>2</MsgID>
<Target><LocURI>http://www.syncml.org/sync-server</LocURI></Target>
<Source><LocURI>IMEI:493005/10/059280/0</LocURI></Source>
</SyncHdr>
<SyncBody>
回复服务器的请求
<Status>
<MsgRef>1</MsgRef><CmdRef>0</CmdRef><Cmd>SyncHdr</Cmd>
<TargetRef>IMEI:493005/10/059280/0</TargetRef>
<SourceRef> http://www.syncml.org/sync-server </SourceRef>
<Data>212</Data> <!--Statuscode for OK, authenticated for session-->
</Status>
回复服务器的请求
<Status>
<MsgRef>1</MsgRef><CmdRef>1</CmdRef><Cmd>Alert</Cmd>
<TargetRef>./dev-contacts</TargetRef>
<SourceRef>./contacts/james_bond</SourceRef>
<Data>200</Data> <!--Statuscode for Success-->
<Item>
<Data>
Anchor回复对方请求的<next>值
<Anchor xmlns='syncml:metinf'><Next>200005022T093223Z </Next></Anchor>
</Data>
</Item>
</Status>
<Sync>
<CmdID>1</CmdID>
<Target><LocURI>./contacts/james_bond</LocURI></Target>
<Source><LocURI>./dev-contacts</LocURI></Source>
<Meta>
存储能力
<DSMem xmlns='syncml:devinf'>
<FreeMem>8100</FreeMem>
<!--Free memory (bytes) in Calendar database on a device -->
<FreeId>81</FreeId>
<!--Number of free records in Calendar database-->
</DSMem>
</Meta>
<Replace>
<CmdID>2</CmdID>
<Meta><Type xmlns='syncml:metinf'>text/x-vcard</Type></Meta>
<Item>
<Source><LocURI>1012</LocURI></Source>
数据项地址
<Data><!--The vCard data would be placed here.--></Data>
</Item>
</Replace>
</Sync>
<Final/>
</SyncBody>
</SyncML>
3.3.5.4服务器端提交数据
<SyncML>
<SyncHdr>
<VerDTD>1.0</VerDTD>
<VerProto>SyncML/1.0</VerProto>
<SessionID>1</SessionID>
<MsgID>2</MsgID>
<Target><LocURI>IMEI:493005/10/059280/0</LocURI></Target>
<Source><LocURI>http://www.syncml.org/sync-server</LocURI></Source>
</SyncHdr>
<SyncBody>
回复客户请求
<Status>
<MsgRef>2</MsgRef><CmdRef>0</CmdRef><Cmd>SyncHdr</Cmd>
<TargetRef>http://www.syncml.org/sync-server</TargetRef>
<SourceRef>IMEI:493005/10/059280/0</SourceRef>
<Data>200</Data>
</Status>
回复Sync请求
<Status><!--This is a status for the client modifications to the server.-->
<MsgRef>2</MsgRef><CmdRef>1</CmdRef><Cmd>Sync</Cmd>
<TargetRef>./contacts/james_bond</TargetRef>
<SourceRef>./dev-contacts</SourceRef>
<Data>200</Data> <!--Statuscode for Success-->
</Status>
回复Replace
<Status>
<MsgRef>2</MsgRef><CmdRef>2</CmdRef><Cmd>Replace</Cmd>
<SourceRef>1012</SourceRef>
<Data>200</Data> <!--Statuscode for Success-->
</Status>
发出同步请求
<Sync>
<CmdID>1</CmdID>
<Target><LocURI>./dev-contacts</LocURI></Target>
<Source><LocURI>./contacts/james_bond</LocURI></Source>
<Replace>
<CmdID>2</CmdID>
<Meta><Type xmlns='syncml:metinf'>text/x-vcard</type></Meta>
<Item>
<Target><LocURI>1023</LocURI></Target>
<Data><!--The vCard data would be placed here.--></Data>
</Item>
</Replace>
<Add>
<CmdID>3</CmdID>
<Meta><Type xmlns='syncml:metinf'>text/x-vcard</type></Meta>
<Item>
<Source><LocURI>10536681</LocURI></Source>
<Data><!--The vCard data would be placed here.--></Data>
</Item>
</Add>
</Sync>
<Final/>
</SyncBody>
</SyncML>
3.3.5.5客户端显示数据更改情况
<SyncML>
<SyncHdr>
<VerDTD>1.0</VerDTD>
<VerProto>SyncML/1.0</VerProto>
<SessionID>1</SessionID>
<MsgID>3</MsgID>
<Target><LocURI>http://www.syncml.org/sync-server</LocURI></Target>
<Source><LocURI>IMEI:493005/10/059280/0</LocURI></Source>
</SyncHdr>
<SyncBody>
回复同步请求
<Status>
<MsgRef>2</MsgRef><CmdRef>0</CmdRef><Cmd>SyncHdr</Cmd>
<TargetRef>IMEI:493005/10/059280/0</TargetRef>
<SourceRef> http://www.syncml.org/sync-server </SourceRef>
<Data>200</Data>
</Status>
<Status>
<MsgRef>2</MsgRef><CmdRef>1</CmdRef><Cmd>Sync</Cmd>
<TargetRef>./dev-contacts</TargetRef>
<SourceRef>./contacts/james_bond</SourceRef>
<Data>200</Data>
</Status>
<Status>
<MsgRef>2</MsgRef><CmdRef>2</CmdRef><Cmd>Replace</Cmd>
<TargetRef>1023</TargetRef>
<Data>200</Data>
</Status>
<Status>
<MsgRef>2</MsgRef><CmdRef>3</CmdRef><Cmd>Add</Cmd>
<SourceRef>10536681</SourceRef>
<Data>200</Data>
</Status>
<Map>服务器和客户端的数据保持同步
<CmdID>1</CmdID>
<Target><LocURI>./contacts/james_bond</LocURI></Target>
<Source><LocURI>./dev-contacts</LocURI></Source>
<MapItem>
10536681和1024指的是同一个数据
<Target><LocURI>10536681</LocURI></Target>
<Source><LocURI>1024</LocURI></Source>
</MapItem>
</Map>
<Final/>
</SyncBody>
</SyncML>
3.3.5.6服务器端确认更改
<SyncML>
<SyncHdr>
<VerDTD>1.0</VerDTD>
<VerProto>SyncML/1.0</VerProto>
<SessionID>1</SessionID>
<MsgID>3</MsgID>
<Target><LocURI>IMEI:493005/10/059280/0</LocURI></Target>
<Source><LocURI>http://www.syncml.org/sync-server</LocURI></Source>
</SyncHdr>
<SyncBody>
<Status>
<MsgRef>3</MsgRef><CmdRef>0</CmdRef><Cmd>SyncHdr</Cmd>
<TargetRef>http://www.syncml.org/sync-server</TargetRef>
<SourceRef>IMEI:493005/10/059280/0</SourceRef>
<Data>200</Data>
</Status>
证实数据已经做了更改
<Status>
<MsgRef>3</MsgRef><CmdRef>1</CmdRef><Cmd>Map</Cmd>
<TargetRef>./contacts/james_bond </TargetRef>
<SourceRef>./dev-contacts</SourceRef>
<Data>200</Data>
</Status>
<Final/>
</SyncBody>
</SyncML>
|
SyncML表示协议没有指定数据同步协议、同步引擎。而是指定了一些同步框架、格式使之适应不同的数据同步模型。SyncML指定了很多同步操作的结果。
- 定义了一种格式
- 注册为 MIME(多用途网际邮件扩充协议)媒体格式
- 定义了独立的同步传输协议
- 可以适合于多种同步传输方式的需要
- 与后台数据存储无关
- 与同步对象类型分离
4.1 SyncML 命令
4.1.1 请求的命令
- Add:允许发送者将数据元素加入到接收者可以识别的同步数据中去,该命令必须在Sync命令中指定。
- Alert:允许发送者通知接收者,通知可以作为应用程序和应用程序之间消息或者是接收用户接口的显示消息扩展。
- Atomic:允许发送者指明一个命令集合可在带有语义或者没有任何语义的执行。
- Copy:允许发送者复制可被接受者接收的数据。
- Delete:允许发送者删除可被接受者接收的数据。Delete命令可以包含一个请求魏实现数据存档,删除可以是回收删除或者实际删除。
- Exec:发送者可以要求接收者调用一个命名的、可执行的程序。
- Get:发送者可以从接收者那里申请数据元素,这个命令不能被Sync命令指定。
- Map:发送者可以接收者更新标识符在两个数据集合之间。
- Put:允许发送者发送数据给接收者,这个命令不能被Sync命令指定。
- Release:允许发送者对接收者可以接受的数据元素进行替换,这个命令不能被Sync命令指定。
- Search:允许发送者进行数据元素的查询。
- Sequence:允许发送者指定一系列按顺序执行。
- Sync:允许发送者指定包含的命令作为同步两个数据集合的部分。
4.1.2 应答的命令
- Status:当处理前一个请求发生错误的时候,指明一个操作的完成状态。
- Results:用来返回Get或者Search命令的数据结果。
4.2 SyncML数据格式
SyncMl 不但提供了通用的指令集合,还指明了一个小的通用的数据格式。数据格式提供了普通的为交换访问信息的媒体集合。例如通讯录、日历和消息。这三种数据格式是 为了这个规范强制的,另外对于这些一般格式,SyncML允许鉴定其他的登记格式。SyncML利用MiME内容类型框架来鉴别数据格式。
4.3 使用XML
SyncML 消息是使用一种标记语言,而SynML表示协议其实是一个XML应用。SyncML DTD定义了用来表示SyncML消息的XML文档。SyncML大量的使用了XML的名空间,名空间必须在第一个元素类型声明。在SyncML DTD中的元素类型被定义在一个URI为“http://www.syncml.org/docs /syncml_represent_v10_20001207.dtd或者URN为syncml:syncml。SyncML DTD也可以被ISO 9070标准公用标示符-//SYNCML//DTD SyncML 1.0//EN识别。任何XML 的标准属性可以被用在SyncML文档中。
4.4使用 MIME
互 联网标准提供了一个工业界广泛接受的机制来鉴别不同的内容种类。SyncML消息用MiME媒体类型来鉴别,SyncML消息的媒体类型被登记在生产厂家 列表中。目前有两个MIME内容可以用在SyncML消息中。applicattion/vnd.syncml+xml的MIME内容类型鉴别了 SyncML消息基于文本的XML表达。applicattion/vnd.syncml+wbxml的MIME内容类型鉴别了SyncML消息基于文本 的WBXML二进制表达。
4.5 SyncML标记语言描述
4.5.1 一般使用元素
Archive、 Chal、Cmd、CmdID、CmdRef、Cred、Final、Lang、LocURI、MsgID、MsgRef、NoResp、 NoResult、RespURI、SessionID、SftDel、Source、SourceRef、Target、TargetRef、 VerDTD、VerProto。
4.5.2 消息容器元素
SyncML、SyncHdr、SyncBody。
4.5.3 数据描述元素
Data、Item、Meta。
4.5.4 协议管理元素
Status。
4.5.5 协议命令元素
Add、Alert、Atomic、Copy、Delete、Exec、Get、Map、MapItem、Put、Replace、Result、Search、Sequence、Sync。
详细内容请查阅相关文档。
|
工具包在XML语言和SyncML之间起到桥梁的作用
5.1使用 SyncML 工具包
- 可以只使用一个工作空间
- 可以为一个应用程序分配一个工作空间
- 把 in 和 out 分成两个工作空间
5.2 使用SyncML工具包的工作空间 当同步开始,工作空间被创建:
instanceOptions.encoding = SML_WBXML; instanceOptions.workspaceName ="MyWorkspace"; instanceOptions.workspaceSize =20000; callbacks.addCmdFunc = &handleAddCmdFunc; ...rc = smlInitInstance(callbacks, instanceOptions, &instanceID); |
5.3 使用SyncML工具包解析器
体积小而且经过了优化处理(代替 DOM XML 解析器)支持以下格式:
- XML
- WBXML
回调函数将把解析后的信息送到应用程序,开始解析SyncML :
smlProcessData(instanceID, // pass the instance SML_ALL_COMMANDS, // parse entire Msg pUserData); // a void ptr |
5.4 使用工具包 编码器
需要编码的信息要经过Toolkit.
pAddStruct->elementType = SML_PE_ADD; pAddStruct->cmdID = ... ; pAddStruct->itemList = ... ; pAddStruct->cred = ... ; smlAddCmd(instanceID, pAddStruct); |
5.5 内容与通信
5.5.1 整合负载
解析、编码嵌入式数据格式
- vCard
- vCalendar
- ....
数据库接口
- Lotus Domino
- Outlook
- DB2
- ...
5.5.2 发布同步信息
传输绑定
- HTTP
- OBEX (Infrared)
- WSP
- Floppy Disk
下面的链接是SyncML标准的网站
SyncML站点TAG: 嵌入式 简介 系统 SyncML 协议
评论
The Target and Source addresses are referenced in the TargetRef and SourceRef
element types, respectively. When present, the TargetRef element type contains the
value that was in the Target element type in a corresponding command. Respectively, the
SourceRef element type contains the value that was in the Source element type in a
corresponding command. For example, the TargetRef and SourceRef in a Status
contain the respective Target and Source values from the command corresponding to
the Status.
您了解吗?可否给我解释一下呢?谢谢了。
发表评论
-
自己的感想:如何在非纯软件公司做研发
2010-11-17 10:16 2256在这家公司挺多年的,公司是以硬件销售为主,也这个是 ... -
转 从我写程序那天起:我就没打算写程序
2010-08-31 16:23 1750序: 大约是前年的时 ... -
oracle自动备份脚本
2010-07-29 09:16 978具体参看附件 -
元宵节后上班
2010-03-01 16:23 1082在新岗位上工作一星期了,慢慢有点感觉了。今天早上经 ... -
Modem 安装指南.pdf
2009-10-16 08:13 1032MTK模块建立拔号上网的指南,有时可以用做检验模块GPRS拔号 ... -
是什么在阻碍移动公司电子渠道的发展
2009-09-28 18:01 1480如果从一个软件工程师的角度来分析这个问题,可能显得十分狭隘。但 ... -
SubVersion服务器Windows安装指南
2009-05-18 16:32 2645SubVersion及TortoiseSVN下载 ... -
WinCVS 1.3.6.1简明操作指南
2009-05-18 13:59 2754作者:陈先波 邮件:turbochen@163.com ... -
MTK之LCD亮度调整测试代码块
2009-05-14 15:05 2773前一段的东西做完了准备要提交测试了,这次是第二版本 ... -
MTK打印之:定时器设计两式比较
2009-05-13 20:49 2266MTK打印之:定时器设计 ... -
如何使用Outlook Express拒收邮件
2009-05-13 15:07 1677我们公司有上bu ... -
使用StarUML建模
2009-05-09 15:40 4338http://javasso.cn/2009/04/29/%E ... -
Writing SMS Messages to Memory / Message Storage
2009-04-28 09:04 2266转自:http://www.developershome.co ... -
MTK电话本短信同步
2009-04-27 20:03 3533做MTK开发也有一段时间,最近做一个产品,其中有一个测试功能, ... -
串口通讯的python模块——pySerial
2009-04-27 19:42 9118pySerial Overview This modu ... -
设计模式趣解
2009-04-24 08:32 10861、FACTORY-工厂模式:追MM少不了请吃饭了,麦当劳的 ... -
我对acts as tree的理解及应用
2007-04-30 17:13 2876最近在看敏捷一书,把我对Acts as tree一节的理解写下 ...
相关推荐
通过对SyncML协议的研究,不仅可以更好地理解其工作机制,还能在此基础上提出更有效的改进措施,从而推动数据同步技术的发展。 通过本文的介绍可以看出,SyncML不仅解决了不同设备间数据同步的兼容性问题,还为移动...
### SyncML数据同步协议的核心模块实现 #### 一、引言 随着信息技术的快速发展,不同设备之间的数据同步...随着移动通信技术的不断进步,SyncML协议的应用范围还将进一步扩大,为用户提供更加便捷的数据同步体验。
### 基于SyncML协议的异构数据源同步方法详解 #### 一、移动计算环境与...随着移动计算技术的不断发展,异构数据源同步的重要性将日益凸显,基于SyncML协议的同步方法有望成为移动设备和系统之间数据同步的首选方案。
本文将详细介绍SyncML协议及其在移动数据同步系统中的应用。 #### SyncML协议简介 SyncML是一种通用的数据同步协议,由Data Synchronization Forum制定。该协议基于XML(Extensible Markup Language),具有简单、...
SyncML协议的优点在于其开放性和兼容性,它简化了跨平台的数据同步,减少了开发成本,同时增强了设备的互操作性。然而,由于XML的复杂性,SyncML协议本身相对较为繁琐,处理效率可能不如其他轻量级的同步方案。随着...
7. **通讯协议**:无线同步可能涉及到各种通讯协议,如SyncML、Exchange ActiveSync等,这些协议定义了数据交换的格式和过程。 8. **安全性**:在无线同步中,数据安全是关键。系统可能采用了加密技术,如SSL/TLS,...
SyncML协议不仅适用于Java平台,还可以与各种操作系统(如iOS、Android、Windows Mobile等)兼容,因此它是跨平台数据同步的理想选择。 通过提供的压缩包文件“syncml”,我们可以期待找到关于SyncML的中文文档和...
研究者们不断探索SyncML协议的优化和扩展,如提高同步效率、增强安全性、优化冲突处理策略等,以满足日益复杂的移动环境需求。 综上所述,SyncML作为移动数据同步的重要协议,不仅在学术界受到关注,也在实际应用中...
在SyncML协议中,数据同步过程通过XML格式的报文进行,这些报文包含了同步的元数据、认证信息以及实际的数据内容。协议通常由两个主要部分组成:SyncHdr(同步头)和SyncBody(同步体)。 1. **初始化**: - **...
【Android 平台和SyncML协议在智能农业数据同步中的应用】 随着农业信息化技术的快速发展,移动终端在农业领域的应用越来越广泛。然而,目前农业信息化领域缺乏专门针对数据同步的技术和协议,这限制了农业移动设备...
SyncML协议,全称Synchronization Markup Language,是一种用于设备间数据同步的标准协议,旨在促进不同设备和应用程序之间的数据一致性。该协议定义了客户端和服务端如何通过SyncML表示层协议进行通信,实现数据的...
移动计算环境下各个同步设备上存储的数据元结构不尽相同,这给移动计算环境下的数据同步带来了...提出了基于SyncML协议的异构数据源同步方法,该方法可以在不改变SyncML协议的基础上方便地完成异构数据源之间的同步。
SyncML协议1.1中文版是一种开放的移动数据同步化标准,旨在打破不同设备、系统和数据类型之间的互不兼容的私有协议壁垒。SyncML倡议由多个行业巨头联合创立,目的是实现无论使用何种终端设备,都能随时随地访问任何...
为了解决SyncML协议中数据同步的安全问题,本文提出了一种安全数据同步交换服务应用程序接口(Secure Data Synchronization Exchange Service Application Programming Interface,简称SDSXS_API)。SDSXS_API旨在...
SyncML协议,全称为Synchronization Markup Language,是一种用于设备间数据同步的标准协议,它使得手机、个人电脑(PC)以及其他智能设备之间的数据交换变得简单而高效。SyncML的设计目标是提供一个开放、标准化的...