嵌入式系统数据同步协议——SyncML 简介(3)
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>
4 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。
详细内容请查阅相关文档。
5 SyncML 参考工具包
牋牋工具包在XML语言和SyncML之间起到桥梁的作用
5.1使用 SyncML 工具包
牋牋一个缓冲区,存储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>
< 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>
4 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。
详细内容请查阅相关文档。
5 SyncML 参考工具包
牋牋工具包在XML语言和SyncML之间起到桥梁的作用
5.1使用 SyncML 工具包
牋牋一个缓冲区,存储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
本文来源:互联网 作者:
热点资讯(一周点击率)
最受工程师关注文章
热评博文
评一评已有 0 位网友对此文发表了看法。 我也来评一下
快乐大本营
无线时代来临,移动产业生态系统将发生一些根本变化。今日头条推荐“芯片是嵌入式4G技术的关键 产业生态系统将发生变化”。
想了解嵌入式开发工具的市场情况吗?先来体验下我们的在线调查吧!填写调查问卷。

