# SyncML
SyncML (Synchronization Markup Language) platform bağımsız bilgi senkronizasyonu standardıdır. Proje şu anda Open Mobile Alliance Veri Senkronizasyonu ve Cihaz Yönetimi olarak adlandırılmaktadır. SyncML'nin amacı, çoğunlukla birtakım satıcı, uygulama veya işletim sistemine özgü olan mevcut veri senkronizasyon çözümlerinin yerini alan bir açık standart sunmaktır.
SyncML, istekleri ve yanıtları olabilecek komutları değiştirerek çalışır. Örnek olarak:
  - mobil, yalnızca bir yenileme senkronizasyonuna başlama isteğini bildirmek için bir Uyarı komutu gönderir
  - bilgisayar, isteği kabul etmek için bir Durum komutuyla yanıt verir
  - mobil, her bir öğe için bir Add alt komutu içeren bir veya daha fazla Sync komutu gönderir (ör., telefon rehberi girişi)  Giriş sayısı büyükse, <Final /> etiketini içermez 
  - ikinci durumda, bilgisayar uygun bir Uyarı mesajıyla devam etmeyi talep eder ve mobil cihaz, başka bir öğe yığını gönderir  aksi halde bilgisayar, tüm verileri bir Durum komutuyla aldığını doğrular.
Komutlar (Alert, Sync, Status, ecc.) Mesajlara ayrılmıştır. Her mesaj ve her bir komutunun bir tanımlayıcısı vardır, böylece MsgID çifti, CmdID bir komutu benzersiz şekilde belirler. Durum komutları gibi yanıtlar, yanıtladıkları komutu belirleyen çifti içerir.


## İşlem.
Komutlardan önce, mesajlar işlemle ilgili çeşitli verileri belirten bir başlık içerir. Önceki örnekteki gibi bir yenileme senkronizasyonuna başlamak için Uyarı komutunu içeren örnek bir mesajdır:
<?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>
Bilgisayardan gelen yanıt, bir xml belgesi gibi olabilir (yorumlar eklendi
açıklama uğruna):
<?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>
İşlem daha sonra, Senk komutunu içeren mobilden bir mesaj ile devam eder.
Bu örnek, cep telefonunun tüm verilerini bilgisayara gönderdiği ve başka bir şekilde hiçbir şeyin gönderilmediği bir yenileme işlemidir. İlk Uyarı komutundaki farklı kodlar, diğer senkronizasyon türlerini başlatmak için kullanılabilir. Örneğin, bir "iki yönlü eşitleme" de, yalnızca son eşitlemeden gelen değişiklikler bilgisayara gönderilir, aynısı yapar.
Son ve Sonraki etiketler olası bir senkronizasyon kaybını takip etmek için kullanılır. Son olarak, her cihaz tarafından ölçülen son senkronizasyon işleminin zamanı gösterilir. Örneğin, bir mobil bilgisayar 20140112T213401Z gibi dizileri kullanırken, bir süreyi temsil etmek için aşamalı sayılar (1, 2, 3, ...) kullanabilir. Bu ikinci veri saklanır ve bir sonraki senkronizasyonda Son ile karşılaştırılır. Herhangi bir fark, senkronizasyon kaybını gösterir. Tüm verileri göndermeyi içeren uygun eylemler daha sonra cihazları tekrar senkronize etmek için alınabilir.
Ankrajlar sadece bir senkronizasyon kaybını tespit etmek için kullanılır, hangi verilerin gönderileceğini belirtmezler. Senkronizasyon durumu kaybı haricinde, normal (yenilenmeyen) bir senkronizasyonda, her cihaz son senkronizasyondan bu yana tüm değişiklikleri gönderir.