SyncML ( язык разметки синхронизации ) — прежнее название независимого от платформы стандарта синхронизации информации . В настоящее время проект называется Open Mobile Alliance Data Synchronization and Device Management . Цель SyncML — предложить открытый стандарт в качестве замены существующим решениям для синхронизации данных , которые в основном зависят от поставщика, приложения или операционной системы. Спецификация SyncML 1.0 была выпущена 17 декабря 2000 г. [1] и 1.1 26 февраля 2002 г. [2]
SyncML работает путем обмена командами, которые могут быть запросами и ответами. В качестве примера:
Alert
команду для сигнализации о желании начать синхронизацию только с обновлениемStatus
на принятие запросаSync
команд, содержащих подкоманду «Добавить» для каждого элемента (например, записи в телефонной книге); если количество записей велико, тег <Final/> не включается;Alert
сообщения, а мобильный телефон отправляет еще один фрагмент элементов; в противном случае компьютер подтверждает получение всех данных Status
командойКоманды ( Alert
, Sync
, Status
, и т.д.) группируются в сообщения. Каждое сообщение и каждая его команда имеют идентификатор, поэтому пара 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 = мобильный сигнализирует об обновлении с него на компьютер --> <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> <Синкбоди> <!-- принять заголовок последнего сообщения от клиента --> <Status> <CmdID> 1 </CmdID> <MsgRef> 1 </MsgRef> <CmdRef> 0 </CmdRef> <!-- 0 = заголовок сообщения --> <Cmd> SyncHdr </Cmd> <TargetRef> PC Suite </TargetRef> <SourceRef> IMEI:3405623856456 </SourceRef> <Data> 200 </Data> <!-- 200 = ок, принято --> </Статус> <!-- принять запрос мобильного телефона на синхронизацию --> <Status> <CmdID> 2 </CmdID> <!-- это команда №2 --> <MsgRef> 1 </MsgRef> <CmdRef> 1 </CmdRef> <!-- он отвечает на команду msg=1,cmd=1 --> <Cmd> Alert </Cmd> <TargetRef> События </TargetRef> <SourceRef> /telecom/cal.vcs </ SourceRef> <Meta><Anchor xmlns= "syncml:metinf" ><Next> 0 </Next><Last> 0 </Last></Anchor></Meta> <Data> 200 </Data> <!- - 200 = ок, принято --> </Status> <Final/> </SyncBody> </SyncML>
Затем транзакция продолжается с сообщением с мобильного телефона, содержащим Sync
команду, и так далее.
Этот пример представляет собой обновление, при котором мобильный телефон отправляет все свои данные на компьютер и ничего наоборот. Различные коды в начальной Alert
команде могут использоваться для инициации других видов синхронизации. Например, при «двусторонней синхронизации» на компьютер отправляются только изменения последней синхронизации, который делает то же самое.
Теги Last
и Next
используются для отслеживания возможной потери синхронизации. Last
представляет время последней операции синхронизации, измеренное каждым устройством. Например, мобильный телефон может использовать прогрессивные числа ( 1
, 2
, 3
,...) для представления времени, а компьютер использует строки типа 20140112T213401Z
. Next
— текущее время в том же представлении. Эти последние данные сохраняются, а затем сравниваются с ними Last
при следующей синхронизации. Любая разница указывает на потерю синхронизации. Затем можно предпринять соответствующие действия, включающие отправку всех данных, чтобы снова синхронизировать устройства.
Якоря используются только для обнаружения потери синхронизации, они не указывают, какие данные следует отправить. За исключением случая потери синхронизации, при обычной синхронизации (без обновления) каждое устройство отправляет все изменения с момента последней синхронизации.
1 SAN = Уведомление о предупреждении сервера. Эта технология SyncML Push основана на определениях Open Mobile Alliance и расширяет существующую спецификацию протокола SyncML, предлагая метод синхронизации, инициируемой сервером.