<!--Copyright Notice
Copyright Notice
Copyright (c) Ericsson, IBM, Lotus, Matsushita Communication Industrial
Co., LTD, Motorola, Nokia, Palm, Inc., Psion, Starfish Software (2000).
All Rights Reserved.  

Implementation of all or part of any Specification may require licenses under 
third party intellectual property rights, including without limitation, patent rights 
(such a third party may or may not be a Supporter). The Sponsors of the 
Specification are not responsible and shall not be held responsible in any 
manner for identifying or failing to identify any or all such third party intellectual 
property rights.

THIS DOCUMENT AND THE INFORMATION CONTAINED HEREIN ARE PROVIDED ON AN
"AS IS" BASIS WITHOUT WARRANTY OF ANY KIND AND ERICSSON, IBM, LOTUS,
MATSUSHITA COMMUNICATION INDUSTRIAL CO. LTD, MOTOROLA, NOKIA, PALM INC.,
PSION, STARFISH SOFTWARE AND ALL OTHER SYNCML SPONSORS DISCLAIM ALL
WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY
THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR
ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR
PURPOSE. IN NO EVENT SHALL ERICSSON, IBM, LOTUS, MATSUSHITA COMMUNICATION
INDUSTRIAL CO., LTD, MOTOROLA, NOKIA, PALM INC., PSION, STARFISH SOFTWARE
OR ANY OTHER SYNCML SPONSOR BE LIABLE TO ANY PARTY FOR ANY LOSS OF PROFITS,
LOSS OF BUSINESS, LOSS OF USE OF DATA, INTERRUPTION OF BUSINESS, OR FOR
DIRECT, INDIRECT, SPECIAL OR EXEMPLARY, INCIDENTAL, PUNITIVE OR
CONSEQUENTIAL DAMAGES OF ANY KIND IN CONNECTION WITH THIS DOCUMENT OR THE
INFORMATION CONTAINED HEREIN, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
LOSS OR DAMAGE.

The above notice and this paragraph must be included on all copies of this 
document that are made. -->
<!-- This DTD defines the SyncML DTD. The document type defines a common format for representing data sychronization protocol data units.
This DTD is to be identified by the URI string "syncml:syncml".
Single element types from this name space can be referenced as follows:
    <element xmlns='syncml:syncml'>blah, blah</element>
-->
<!-- Root or Document Element and -->
<!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)+, Final?)>
<!-- Commonly Used Elements -->
<!-- Archive indicator for Delete -->
<!ELEMENT Archive EMPTY>
<!-- Value must be one of "Add" | "Alert" | "Atomic" | "Copy" | "Delete" | "Exec" | "Get" | "Map" | "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)>
<!-- 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>
<!-- URI recipient uses 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 SourceRef (#PCDATA)>
<!-- Target location information -->
<!ELEMENT Target (LocURI, LocName?)>
<!ELEMENT TargetRef (#PCDATA)>
<!-- SyncML specificaiton major/minor version info. -->
<!-- For this version of the DTD, the value is "1.0" -->
<!ELEMENT VerDTD (#PCDATA)>
<!-- Data sync protocol major/minor version -->
<!-- For example, "xyz/1.0" -->
<!ELEMENT VerProto (#PCDATA)>
<!-- Synchronization data elements -->
<!-- Item element type -->
<!ELEMENT Item (Target?, Source?, Meta?, Data?)>
<!-- 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)>
<!-- 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?, Item+)>
<!-- Atomic operation. All or nothing semantics. -->
<!ELEMENT Atomic (CmdID, NoResp?, Meta?, (Add | Replace | Delete | Copy | Atomic | Map | Sequence | Sync)+)>
<!-- 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?, 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)>
<!-- 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 | Sync)+)>
<!-- Status operation. -->
<!ELEMENT Status (CmdID, MsgRef, CmdRef, Cmd, TargetRef*, SourceRef*, Cred?, Chal?, Data, Item*)>
<!-- Synchronize Operation. -->
<!ELEMENT Sync (CmdID, NoResp?, Cred?, Target?, Source?, Meta?, (Add | Atomic | Copy | Delete | Replace | Sequence)*)>
<!-- End of DTD Definition -->

