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 1.0 specification was released on December 17, 2000, and 1.1 on February 26, 2002.

Internals

SyncML works by exchanging commands, which can be requests and responses. As an example:

SyncML

the mobile sends an Alert command for signaling the wish to begin a refresh-only synchronization the computer responds with a Status command for accepting the request the mobile sends one or more Sync command containing an Add sub-command for each item (e.g., phonebook entry); if the number of entries is large, it does not include the tag; in the latter case, the computer requests to continue with an appropriate Alert message, and the mobile sends another chunk of items; otherwise, the computer confirms it received all data with a Status command

SyncML

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.

SyncML

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:

<?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>

The response from the computer could be an xml document like (comments added

for the sake of explanation):

<?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>