<!-- 
SyncML Representation Protocol (SYNCML) V1.2 Document Type Definition modified  03 Mar 2005

Copyright Open Mobile Alliance Ltd., 
          All rights reserved

SYNCML is an XML language. Typical usage:
   <?xml version="1.0"?>
   <!DOCTYPE SyncML PUBLIC "-//SYNCML//DTD SYNCML 1.2//EN"
             "http://www.openmobilealliance.org/tech/DTD/OMA-SUP-DTD-SyncML_RepPro-V1_2.dtd"
             [<?oma-syncml-ver supported-versions="1.2"?>]>
   <SyncML>
      ...
   </SyncML>

-->
LEGAL DISCLAIMER

    Use of this document is subject to all of the terms and conditions
    of the Use Agreement located at
        http://www.openmobilealliance.org/UseAgreement.html

    You may use this document or any part of the document for internal
    or educational purposes only, provided you do not modify, edit or
    take out of context the information in this document in any manner.
    Information contained in this document may be used, at your sole
    risk, for any purposes.

    You may not use this document in any other manner without the prior
    written permission of the Open Mobile Alliance.  The Open Mobile
    Alliance authorizes you to copy this document, provided that you
    retain all copyright and other proprietary notices contained in the
    original materials on any copies of the materials and that you
    comply strictly with these terms.  This copyright permission does
    not constitute an endorsement of the products or services.  The
    Open Mobile Alliance assumes no responsibility for errors or
    omissions in this document.

    Each Open Mobile Alliance member has agreed to use reasonable
    endeavors to inform the Open Mobile Alliance in a timely manner of
    Essential IPR as it becomes aware that the Essential IPR is related
    to the prepared or published specification.  However, the members
    do not have an obligation to conduct IPR searches.  The declared
    Essential IPR is publicly available to members and non-members of
    the Open Mobile Alliance and may be found on the "OMA IPR
    Declarations" list at http://www.openmobilealliance.org/ipr.html.
    The Open Mobile Alliance has not conducted an independent IPR review
    of this document and the information contained herein, and makes no
    representations or warranties regarding third party IPR, including
    without limitation patents, copyrights or trade secret rights.  This
    document may contain inventions for which you must obtain licenses
    from third parties before making, using or selling the inventions.
    Defined terms above are set forth in the schedule to the Open Mobile
    Alliance Application Form.

    NO REPRESENTATIONS OR WARRANTIES (WHETHER EXPRESS OR IMPLIED) ARE
    MADE BY THE OPEN MOBILE ALLIANCE OR ANY OPEN MOBILE ALLIANCE MEMBER
    OR ITS AFFILIATES REGARDING ANY OF THE IPR'S REPRESENTED ON THE "OMA
    IPR DECLARATIONS" LIST, INCLUDING, BUT NOT LIMITED TO THE ACCURACY,
    COMPLETENESS, VALIDITY OR RELEVANCE OF THE INFORMATION OR WHETHER OR     
    NOT SUCH RIGHTS ARE ESSENTIAL OR NON-ESSENTIAL.

    THE OPEN MOBILE ALLIANCE IS NOT LIABLE FOR AND HEREBY DISCLAIMS ANY
    DIRECT, INDIRECT, PUNITIVE, SPECIAL, INCIDENTAL, CONSEQUENTIAL, OR
    EXEMPLARY DAMAGES ARISING OUT OF OR IN CONNECTION WITH THE USE OF
    DOCUMENTS AND THE INFORMATION CONTAINED IN THE DOCUMENTS.

    Copyright 2006 Open Mobile Alliance Ltd.  All Rights Reserved.
    Used with the permission of the Open Mobile Alliance Ltd. under the
    terms set forth above.

-->

<?xml version="1.0" encoding="UTF-8"?>
<!-- Root Element -->
<!ELEMENT SyncML (SyncHdr, SyncBody)>
<!ELEMENT SyncHdr (VerDTD, VerProto, SessionID, MsgID, Target, Source, RespURI?, NoResp?, Cred?, Meta?)>
<!ELEMENT SyncBody ((Alert | Atomic | Copy | Exec | Get | Map | Put | Results | Search | Sequence | Status | Sync | Add | Move | Replace | Delete)+, Final?)>
<!-- Commonly Used Elements -->
<!-- Archive indicator for Delete -->
<!ELEMENT Archive EMPTY>
<!-- Value must be one of "Add" | "Alert" | "Atomic" | "Copy" | "Delete" | "Exec" | "Get" | "Map" | "Move" | "Put" | "Replace" | "Results" | "Search" | "Sequence" | "Status" | "Sync". -->
<!ELEMENT Cmd (#PCDATA)>
<!-- Authentication Challenge -->
<!ELEMENT Chal (Meta)>
<!-- Sync message unique identifier for command -->
<!ELEMENT CmdID (#PCDATA)>
<!-- Reference to command identifier -->
<!ELEMENT CmdRef (#PCDATA)>
<!-- Credentials -->
<!ELEMENT Cred (Meta?, Data)>
<!-- Final message flag -->
<!ELEMENT Final EMPTY>
<!-- Desired language for results -->
<!ELEMENT Lang (#PCDATA)>
<!-- Location displayable name -->
<!ELEMENT LocName (#PCDATA)>
<!-- Location URI -->
<!ELEMENT LocURI (#PCDATA)>
<!-- Indication for more data to come -->
<!ELEMENT MoreData EMPTY>
<!-- SyncML Message ID -->
<!ELEMENT MsgID (#PCDATA)>
<!-- Reference to a SyncML Message ID -->
<!ELEMENT MsgRef (#PCDATA)>
<!-- No Response Status Requested Indicator -->
<!ELEMENT NoResp EMPTY>
<!-- No Results Requested Indicator -->
<!ELEMENT NoResults EMPTY>
<!-- NumberOfChanges used to display progress information -->
<!ELEMENT NumberOfChanges (#PCDATA)>
<!-- URI recipient used for response -->
<!ELEMENT RespURI (#PCDATA)>
<!-- SyncML session identifier -->
<!ELEMENT SessionID (#PCDATA)>
<!-- Soft delete indicator for Delete -->
<!ELEMENT SftDel EMPTY>
<!-- Source location -->
<!ELEMENT Source (LocURI, LocName?)>
<!ELEMENT SourceParent (LocURI)>
<!ELEMENT SourceRef (#PCDATA)>
<!-- Target location information -->
<!ELEMENT Target (LocURI, LocName?, Filter?)>
<!ELEMENT TargetParent (LocURI)>
<!ELEMENT TargetRef (#PCDATA)>
<!-- SyncML specificaiton major/minor version info. -->
<!-- For this version of the DTD, the value is "1.2" -->
<!ELEMENT VerDTD (#PCDATA)>
<!-- Data sync protocol major/minor version -->
<!-- For example, "xyz/1.2" -->
<!ELEMENT VerProto (#PCDATA)>
<!-- Synchronization data elements -->
<!-- Item element type -->
<!ELEMENT Item (Target?, Source?, SourceParent?, TargetParent?, Meta?, Data?, MoreData?)>
<!-- Meta element type -->
<!-- Element types in the content MUST have name space declared. -->
<!--The Meta content would be something such as: <Meta> <Type xmlns='syncml:metinf'>text/calendar</Type> <Format xmlns='syncml:metinf'>xml</Format> </Meta>-->
<!ELEMENT Meta (#PCDATA)>
<!--Correlator element type -->
<!ELEMENT Correlator (#PCDATA)>
<!-- Actual data content -->
<!ELEMENT Data (#PCDATA)>
<!-- SyncML Commands -->
<!-- Add operation. -->
<!ELEMENT Add (CmdID, NoResp?, Cred?, Meta?, Item+)>
<!-- Alert operation. -->
<!-- Alert types are either "User Agent" or "Application" oriented -->
<!ELEMENT Alert (CmdID, NoResp?, Cred?, Data?, Correlator?, Item*)>
<!-- Atomic operation. All or nothing semantics. -->
<!ELEMENT Atomic (CmdID, NoResp?, Meta?, (Add | Replace | Delete | Copy | Atomic | Map | Move | Sequence | Sync | Get | Exec | Alert)+)>
<!-- Copy operation. -->
<!ELEMENT Copy (CmdID, NoResp?, Cred?, Meta?, Item+)>
<!-- Delete operation. -->
<!ELEMENT Delete (CmdID, NoResp?, Archive?, SftDel?, Cred?, Meta?, Item+)>
<!-- Exec operation -->
<!-- Executable can either be referenced with Target element type -->
<!-- or can be specified in the Data element type. -->
<!ELEMENT Exec (CmdID, NoResp?, Cred?, Meta?, Correlator?, Item)>
<!-- Get operation. -->
<!ELEMENT Get (CmdID, NoResp?, Lang?, Cred?, Meta?, Item+)>
<!-- MAP operation. Create/Delete an item id map kept at the server. -->
<!ELEMENT Map (CmdID, Target, Source, Cred?, Meta?, MapItem+)>
<!ELEMENT MapItem (Target, Source)>
<!-- Move operation. -->
<!ELEMENT Move (CmdID, NoResp?, Cred?, Meta?, Item+)>
<!-- Put operation. -->
<!ELEMENT Put (CmdID, NoResp?, Lang?, Cred?, Meta?, Item+)>
<!-- Replace operation. -->
<!ELEMENT Replace (CmdID, NoResp?, Cred?, Meta?, Item+)>
<!-- Results operation. -->
<!ELEMENT Results (CmdID, MsgRef?, CmdRef, Meta?, TargetRef?, SourceRef?, Item+)>
<!-- Search operation. -->
<!ELEMENT Search (CmdID, NoResp?, NoResults?, Cred?, Target?, Source+, Lang?, Meta, Data)>
<!-- Sequence operation. -->
<!ELEMENT Sequence (CmdID, NoResp?, Meta?, (Add | Replace | Delete | Copy | Atomic | Map | Move | Sync | Get | Alert | Exec)+)>
<!-- Status operation. -->
<!ELEMENT Status (CmdID, MsgRef, CmdRef, Cmd, TargetRef*, SourceRef*, Cred?, Chal?, Data, Item*)>
<!-- Synchronize Operation. -->
<!ELEMENT Sync (CmdID, NoResp?, Cred?, Target?, Source?, Meta?, NumberOfChanges?, (Add | Atomic | Copy | Delete | Move | Replace | Sequence)*)>
<!-- Filtering operations -->
<!ELEMENT Filter (Meta, Field?, Record?, FilterType?)>
<!ELEMENT Field (Item)>
<!ELEMENT Record (Item)>
<!ELEMENT FilterType (#PCDATA)>
<!-- End of DTD Definition -->

