6 Appendix A: Full XML Schema

For ease of implementation, the following is the full XML schema for this protocol.

 <?xml version="1.0" encoding="utf-8"?>
 <xs:schema elementFormDefault="qualified"
   xmlns:xs="http://www.w3.org/2001/XMLSchema">
   <xs:element name="TaskSet" nillable="true" type="TaskSet" />
   <xs:complexType name="TaskSet">
     <xs:sequence>
       <xs:element minOccurs="0" maxOccurs="1" name="Version" 
         type="Version" />
       <xs:element minOccurs="0" maxOccurs="1" name="Tasks" 
         type="ArrayOfTask" />
     </xs:sequence>
   </xs:complexType>
   <xs:simpleType name="Version">
     <xs:restriction base="xs:string">
       <xs:pattern value="[0-9]+\.[0-9]+(\.[0-9]+(\.[0-9]+)?)?"/>
     </xs:restriction>
   </xs:simpleType>
   <xs:complexType name="ArrayOfTask">
     <xs:sequence>
       <xs:element minOccurs="0" maxOccurs="unbounded" name="Task" 
         nillable="true" type="Task" />
     </xs:sequence>
   </xs:complexType>
   <xs:complexType name="Task">
     <xs:sequence>
       <xs:element minOccurs="0" maxOccurs="1" name="TaskString" 
         type="xs:string" />
       <xs:element minOccurs="0" maxOccurs="1" name="Assignees" 
         type="ArrayOfEmailUser" />
     </xs:sequence>
     <xs:attribute default="-1" name="StartIndex" type="xs:int" />
     <xs:attribute default="LatestReply" name="Position" 
         type="EmailPosition" />
   </xs:complexType>
   <xs:complexType name="ArrayOfEmailUser">
     <xs:sequence>
       <xs:element minOccurs="0" maxOccurs="unbounded" name="EmailUser" 
         nillable="true" type="EmailUser" />
     </xs:sequence>
   </xs:complexType>
   <xs:complexType name="EmailUser">
     <xs:simpleContent>
       <xs:extension base="xs:string">
         <xs:attribute name="Id" type="xs:string" />
       </xs:extension>
     </xs:simpleContent>
   </xs:complexType>
   <xs:simpleType name="EmailPosition">
     <xs:restriction base="xs:string">
       <xs:enumeration value="LatestReply" />
       <xs:enumeration value="Subject" />
       <xs:enumeration value="Signature" />
       <xs:enumeration value="Other" />
     </xs:restriction>
   </xs:simpleType>
   <xs:element name="AddressSet" nillable="true" type="AddressSet" />
   <xs:complexType name="AddressSet">
     <xs:sequence>
       <xs:element minOccurs="0" maxOccurs="1" name="Version" 
         type="Version" />
       <xs:element minOccurs="0" maxOccurs="1" name="Addresses" 
         type="ArrayOfAddress" />
     </xs:sequence>
   </xs:complexType>
   <xs:complexType name="ArrayOfAddress">
     <xs:sequence>
       <xs:element minOccurs="0" maxOccurs="unbounded" name="Address" 
         nillable="true" type="Address" />
     </xs:sequence>
   </xs:complexType>
   <xs:complexType name="Address">
     <xs:simpleContent>
       <xs:extension base="xs:string">
         <xs:attribute default="-1" name="StartIndex" type="xs:int" />
         <xs:attribute default="LatestReply" name="Position" 
           type="EmailPosition" />
       </xs:extension>
     </xs:simpleContent>
   </xs:complexType>
   <xs:element name="MeetingSet" nillable="true" type="MeetingSet" />
   <xs:complexType name="MeetingSet">
     <xs:sequence>
       <xs:element minOccurs="0" maxOccurs="1" name="Version" 
         type="Version" />
       <xs:element minOccurs="0" maxOccurs="1" name="Meetings" 
         type="ArrayOfMeeting" />
     </xs:sequence>
   </xs:complexType>
   <xs:complexType name="ArrayOfMeeting">
     <xs:sequence>
       <xs:element minOccurs="0" maxOccurs="unbounded" name="Meeting" 
         nillable="true" type="Meeting" />
     </xs:sequence>
   </xs:complexType>
   <xs:complexType name="Meeting">
     <xs:sequence>
       <xs:element minOccurs="0" maxOccurs="1" name="MeetingString" 
         type="xs:string" />
       <xs:element minOccurs="0" maxOccurs="1" name="Attendees" 
         type="ArrayOfEmailUser" />
       <xs:element minOccurs="1" maxOccurs="1" name="StartTime" 
         nillable="true" type="xs:dateTime" />
       <xs:element minOccurs="1" maxOccurs="1" name="EndTime" nillable="true" 
         type="xs:dateTime" />
     </xs:sequence>
     <xs:attribute name="Location" type="xs:string" />
     <xs:attribute name="Subject" type="xs:string" />
     <xs:attribute default="-1" name="StartIndex" type="xs:int" />
     <xs:attribute default="LatestReply" name="Position" type="EmailPosition" />
   </xs:complexType>
   <xs:element name="PhoneSet" nillable="true" type="PhoneSet" />
   <xs:complexType name="PhoneSet">
     <xs:sequence>
       <xs:element minOccurs="0" maxOccurs="1" name="Version" 
         type="Version" />
       <xs:element minOccurs="0" maxOccurs="1" name="Phones" 
         type="ArrayOfPhone" />
     </xs:sequence>
   </xs:complexType>
   <xs:complexType name="ArrayOfPhone">
     <xs:sequence>
       <xs:element minOccurs="0" maxOccurs="unbounded" name="Phone" 
         nillable="true" type="Phone" />
     </xs:sequence>
   </xs:complexType>
   <xs:complexType name="Phone">
     <xs:sequence>
       <xs:element minOccurs="0" maxOccurs="1" name="PhoneString" 
         type="xs:string" />
       <xs:element minOccurs="0" maxOccurs="1" name="OriginalPhoneString" 
         type="xs:string" />
     </xs:sequence>
     <xs:attribute default="-1" name="StartIndex" type="xs:int" />
     <xs:attribute default="LatestReply" name="Position" type="EmailPosition" />
     <xs:attribute default="Unspecified" name="Type" type="PhoneType" />
   </xs:complexType>
   <xs:simpleType name="PhoneType">
     <xs:restriction base="xs:string">
       <xs:enumeration value="Unspecified" />
       <xs:enumeration value="Home" />
       <xs:enumeration value="Mobile" />
       <xs:enumeration value="Work" />
       <xs:enumeration value="Fax" />
     </xs:restriction>
   </xs:simpleType>
   <xs:element name="EmailSet" nillable="true" type="EmailSet" />
   <xs:complexType name="EmailSet">
     <xs:sequence>
       <xs:element minOccurs="0" maxOccurs="1" name="Version" 
         type="Version" />
       <xs:element minOccurs="0" maxOccurs="1" name="Emails" 
         type="ArrayOfEmail" />
     </xs:sequence>
   </xs:complexType>
   <xs:complexType name="ArrayOfEmail">
     <xs:sequence>
       <xs:element minOccurs="0" maxOccurs="unbounded" name="Email" 
         nillable="true" type="Email" />
     </xs:sequence>
   </xs:complexType>
   <xs:complexType name="Email">
     <xs:sequence>
       <xs:element minOccurs="0" maxOccurs="1" name="EmailString" 
         type="xs:string" />
     </xs:sequence>
     <xs:attribute default="-1" name="StartIndex" type="xs:int" />
     <xs:attribute default="LatestReply" name="Position" type="EmailPosition" />
   </xs:complexType>
   <xs:element name="UrlSet" nillable="true" type="UrlSet" />
   <xs:complexType name="UrlSet">
     <xs:sequence>
       <xs:element minOccurs="0" maxOccurs="1" name="Version" 
         type="Version" />
       <xs:element minOccurs="0" maxOccurs="1" name="Urls" 
         type="ArrayOfUrl" />
     </xs:sequence>
   </xs:complexType>
   <xs:complexType name="ArrayOfUrl">
     <xs:sequence>
       <xs:element minOccurs="0" maxOccurs="unbounded" name="Url" 
         nillable="true" type="Url" />
     </xs:sequence>
   </xs:complexType>
   <xs:complexType name="Url">
     <xs:sequence>
       <xs:element minOccurs="0" maxOccurs="1" name="UrlString" 
         type="xs:string" />
     </xs:sequence>
     <xs:attribute default="-1" name="StartIndex" type="xs:int" />
     <xs:attribute default="LatestReply" name="Position" type="EmailPosition" />
     <xs:attribute default="Unspecified" name="Type" type="UrlType" />
   </xs:complexType>
   <xs:simpleType name="UrlType">
     <xs:restriction base="xs:string">
       <xs:enumeration value="Unspecified" />
       <xs:enumeration value="Url" />
       <xs:enumeration value="Filename" />
     </xs:restriction>
   </xs:simpleType>
   <xs:element name="ContactSet" nillable="true" type="ContactSet" />
   <xs:complexType name="ContactSet">
     <xs:sequence>
       <xs:element minOccurs="0" maxOccurs="1" name="Version" 
         type="Version" />
       <xs:element minOccurs="0" maxOccurs="1" name="Contacts" 
         type="ArrayOfContact" />
     </xs:sequence>
   </xs:complexType>
   <xs:complexType name="ArrayOfContact">
     <xs:sequence>
       <xs:element minOccurs="0" maxOccurs="unbounded" name="Contact" 
         nillable="true" type="Contact" />
     </xs:sequence>
   </xs:complexType>
   <xs:complexType name="Person">
     <xs:sequence>
       <xs:element minOccurs="0" maxOccurs="1" name="PersonString" 
         type="xs:string" />
     </xs:sequence>
     <xs:attribute default="-1" name="StartIndex" type="xs:int" />
     <xs:attribute default="LatestReply" name="Position" type="EmailPosition" />
   </xs:complexType>
   <xs:complexType name="Business">
     <xs:sequence>
       <xs:element minOccurs="0" maxOccurs="1" name="BusinessString" 
         type="xs:string" />
     </xs:sequence>
     <xs:attribute default="-1" name="StartIndex" type="xs:int" />
     <xs:attribute default="LatestReply" name="Position" type="EmailPosition" />
   </xs:complexType>
   <xs:complexType name="Contact">
     <xs:sequence>
       <xs:element minOccurs="0" maxOccurs="1" name="Person" type="Person" />
       <xs:element minOccurs="0" maxOccurs="1" name="Business" 
         type="Business" />
       <xs:element minOccurs="0" maxOccurs="1" name="Phones" 
         type="ArrayOfPhone" />
       <xs:element minOccurs="0" maxOccurs="1" name="Urls" 
         type="ArrayOfUrl" />
       <xs:element minOccurs="0" maxOccurs="1" name="Emails" 
         type="ArrayOfEmail" />
       <xs:element minOccurs="0" maxOccurs="1" name="Addresses" 
         type="ArrayOfAddress" />
       <xs:element minOccurs="0" maxOccurs="1" name="ContactString" 
         type="xs:string" />
     </xs:sequence>
   </xs:complexType>
 </xs:schema>
Show: