SyncML

SyncMLSynchronization Markup Language)は、クロスプラットフォームで使えるXMLを基にしたデータ同期のオープン規格の以前の名前である。2000年12月17日にSyncML 1.0がリリース[1]、1.1は2002年2月26日にリリースされた[2]。このプロジェクトは現在、 オープン・モバイル・アライアンス (Open Mobile Alliance、OMA)で Data Synchronization (データ同期) プロジェクトとDevice Management (デバイス管理) プロジェクトとなっている。 SyncMLの目的は、既存のデータ同期ソリューションの代わりとなるオープン標準を提供することである。既存のデータ同期ソリューションは、ほとんどがベンダー、アプリケーション、オペレーティングシステムに固有となっている。

詳細

[編集]

SyncMLは、以下のように要求と応答のコマンドを交換することで機能する。

  • 携帯機器が、Alertコマンドを送信し、更新のみの同期を開始したいことを伝える
  • コンピュータは、Statusコマンドで要求を受け入れる応答をする
  • 携帯機器が、1つ以上のSyncコマンドを送り、各コマンドにはAddサブコマンドで電話帳エントリなどの追加項目が含まれる。エントリ数が多い場合は、<Final />タグは含まれない。
  • <Final/>タグが含まれなかった場合、コンピュータは適切なAlertメッセージの続行を要求し、携帯機器は別の項目を送信する。もしくは、コンピュータはStatusコマンドですべてのデータを受信したことを確認する。

コマンド(AlertSyncStatusなど)はメッセージにグループ化される。各メッセージとその各コマンドには識別子があるため、MsgID、CmdIDのペアがコマンドを一意に決定する。 Statusコマンドなどの応答には、コマンドを識別するペアが続く。

コマンドの前に、メッセージにはトランザクションに関するさまざまなデータを指定するヘッダーが含まれる。前の例のように、更新同期を開始するためAlertコマンドを含むメッセージの例は次の通りとなる。

<?xml version="1.0"?> <!DOCTYPE SyncML PUBLIC "-//SYNCML//DTD SyncML 1.2//EN" "http://www.openmobilealliance.org/tech/DTD/OMA-TS-SyncML_RepPro_DTD-V1_2.dtd"> <SyncML xmlns="SYNCML:SYNCML1.2">  <SyncHdr>   <VerDTD>1.1</VerDTD>   <VerProto>SyncML/1.1</VerProto>   <SessionID>1</SessionID>   <MsgID>1</MsgID>   <Target><LocURI>PC Suite</LocURI></Target>   <Source><LocURI>IMEI:3405623856456</LocURI></Source>   <Meta><MaxMsgSize xmlns="syncml:metinf">8000</MaxMsgSize></Meta>  </SyncHdr>   <SyncBody>   <Alert>    <CmdID>1</CmdID>    <Data>203</Data>   <!-- 203 = mobile signals a refresh from it to computer -->    <Item>     <Target><LocURI>Events</LocURI></Target>     <Source><LocURI>/telecom/cal.vcs</LocURI></Source>     <Meta><Anchor xmlns="syncml:metinf"><Last>42</Last><Next>42</Next></Anchor></Meta>    </Item>   </Alert>    <Final/>  </SyncBody> </SyncML> 

コンピュータからの応答は、次のようなxmlドキュメントとなる(説明のためにコメントが追加されている)。

<?xml version="1.0"?> <!DOCTYPE SyncML PUBLIC "-//SYNCML//DTD SyncML 1.2//EN" "http://www.openmobilealliance.org/tech/DTD/OMA-TS-SyncML_RepPro_DTD-V1_2.dtd"> <SyncML>  <SyncHdr>   <VerDTD>1.1</VerDTD>   <VerProto>SyncML/1.1</VerProto>   <SessionID>1</SessionID>   <MsgID>1</MsgID>   <Target><LocURI>IMEI:3405623856456</LocURI></Target>   <Source><LocURI>PC Suite</LocURI></Source>  </SyncHdr>   <SyncBody>    <!-- accept the header of the last message from the client -->   <Status>    <CmdID>1</CmdID>    <MsgRef>1</MsgRef>    <CmdRef>0</CmdRef>	<!-- 0 = header of the message -->    <Cmd>SyncHdr</Cmd>    <TargetRef>PC Suite</TargetRef>    <SourceRef>IMEI:3405623856456</SourceRef>    <Data>200</Data>	<!-- 200 = ok, accepted -->   </Status>    <!-- accept the request of the mobile for a sync -->   <Status>    <CmdID>2</CmdID>	<!-- this is command #2 -->    <MsgRef>1</MsgRef>    <CmdRef>1</CmdRef>	<!-- it respond to command msg=1,cmd=1 -->    <Cmd>Alert</Cmd>    <TargetRef>Events</TargetRef>    <SourceRef>/telecom/cal.vcs</SourceRef>    <Meta><Anchor xmlns="syncml:metinf"><Next>0</Next><Last>0</Last></Anchor></Meta>    <Data>200</Data>	<!-- 200 = ok, accepted -->   </Status>    <Final/>  </SyncBody> </SyncML> 

このトランザクションでは、その後、Syncコマンドを含む携帯機器からのメッセージを続行する。

この例は、携帯機器がすべてのデータをコンピュータに送信し、その逆は何も送信しない更新である。 Alertコマンドのさまざまなコードを使用して、他の種類の同期も開始できる。たとえば、「双方向同期」では、最後の同期からの変更のみがコンピュータに送信される。これでも同様のことが行われる。

LastタグとNextタグは、同期が失われる可能性の追跡に使用される。 Lastは、各デバイスで測定された、同期の最後の操作の時刻を表す。例えば、携帯機器側では、時間の順序を表す単調増加の番号(123、...)を使ったり、コンピュータ側では20140112T213401Z のような文字列を使ったりする。 Nextは現在の時刻を表し、Lastと同じ書式である。このタイミングで保存されたデータと、次の同期の際にLastと違いがある場合は、同期が失われていることを示す。非同期を検出すると、適切なアクションを実行して、デバイスを同期に戻す。必要に応じてすべてのデータの送信をすることもある。

アンカーは同期の喪失を検出するためにのみ使用され、送信されるデータを示すものではない。同期が失われた場合を除いて、通常の(更新されない)同期では、各デバイスは最後の同期以降のすべての変更を送信する。

関連項目

[編集]

脚注

[編集]
  1. ^ SyncML Delivers Tomorrow´s Technology Today”. SyncML.org (2000年12月7日). 2001年4月10日時点のオリジナルよりアーカイブ。2021年4月2日閲覧。
  2. ^ SyncML Turns Two, Releases Specifications v1.1 for Mobile Data Sync”. SyncML.org (2002年2月26日). 2002年4月18日時点のオリジナルよりアーカイブ。2021年4月2日閲覧。

外部リンク

[編集]