SyncML (Synchronization Markup Language) is the former name for a platform-independent information synchronization standard. The project is currently referred to as Open Mobile Alliance Data Synchronization and Device Management. The purpose of SyncML is to offer an open standard as a replacement for existing data synchronization solutions, which have mostly been somewhat vendor-, application- or operating system specific.
Syncml works by exchanging commands, which can be requests and responses. As an example:
Commands (Alert
, Sync
, Status
, ecc.) are grouped into messages. Each message and each of its commands has an identifier, so that the pair MsgID,CmdID uniquely determine a command. Responses like Status
commands include the pair identifying the command they are responding to.
Before commands, messages contain a header specifying various data regarding the transaction. An example message containing the Alert
command for begin a refresh synchronization, like in the previous example, is:
The response from the computer could be an xml document like (comments added for the sake of explanation):
The transaction then proceeds with a message from the mobile containing the Sync
command, and so on.
This example is a refresh where the mobile sends all its data to the computer and nothing in the other way around. Different codes in the initial Alert
command can be used to initiate other kinds of synchronizations. For example, in a "two-way sync", only the changes from the last synchronization are sent to the computer, which does the same.
The Last
and Next
tags are used to keep track of a possible loss of sync. Last
represents the time of the last operation of synchronization, as measured by each device. For example, a mobile may use progressive numbers (1
, 2
, 3
,...) to represent time, while the computer uses strings like 20140112T213401Z
. Next
is the current time in the same representation. This latter data is stored and then compared with Last
in the next synchronization. Any difference indicates a loss of sync. Appropriate actions involving sending all data can be then taken to put the devices back in sync.
Anchors are only used to detect a loss of sync, they do not indicate which data is to be sent. Apart from the loss of sync case, in a normal (non-refresh) sync, each device sends all changes since the last synchronization.