歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux資訊 >> 更多Linux >> 嵌入式系統數據同步協議——SyncML 簡介

嵌入式系統數據同步協議——SyncML 簡介

日期:2017/2/27 9:38:21   编辑:更多Linux

 1 SyncML協議簡述  牋牋目前,移動計算和通信設備的流行很大部分原因是因為它們具有一些方便的功能,比如說在需要時可以發送信息給其他用戶,用戶希望隨時隨地都可以利用掌上設備訪問信息和執行應用程序,甚至在飛行中也可以獲得和更新信息。    牋牋具有在一台掌上設備運行應用程序和處理信息、還可以將應用程序和信息的更新同步回到辦公室的設備或者網上的這種能力對於普遍、離線計算的效用和流行是一個關鍵。    牋牋遺憾的是,到今天為止還有兩種方式沒有實現:    支持任何移動設備同步的網絡數據  支持同步人和網絡數據的移動設備  牋牋這樣一來,需要為移動設備增加很多用來同步不同的,盡可能多的數據所需要的協議,這些協議中的每一個僅適用於在一個選定的設備子集上進行選定的傳輸和運行,並且可以訪問一部分網絡數據,單一同步標准的缺乏為最終用戶、設備制造商、應用程序開發者和設備提供商制造了很多問題    牋牋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 SyncML 底層通訊  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 SyncML同步協議  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>    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






Copyright © Linux教程網 All Rights Reserved