event XML 1.1 (fix recurrances)

Joon Radley joon at radleys.co.za
Thu Dec 7 14:01:15 CET 2006


Hi Martin,

This is a good extension that is needed. I will only be back at the office
on Monday then I can check all the documentation, but from what I can
remember the adding of an attachment and the changing of an attendee creates
a new object in Outlook 2000 and I think 2002/XP/2003, it is not supported
by the exception structure. This will lead to the problem of object
fragmentation we discussed some time ago.

One extra field that is supported by Outlook is the all day event that can
be set or removed in exceptions.

Best regards

Joon Radley
Radley Network Technologies CC
Cell: +27 (0)83 368 8557
Fax: +27 (0)12 998 4346
E-Mail: joon at radleys.co.za
 

> -----Original Message-----
> From: kolab-format-bounces at kolab.org 
> [mailto:kolab-format-bounces at kolab.org] On Behalf Of Martin Konold
> Sent: 07 December 2006 02:47 AM
> To: kolab-format at kolab.org
> Subject: event XML 1.1 (fix recurrances)
> 
> 
> Hi,
> 
> I want to announce my work on an enhanced XML format for Kolab events.
> 
> Basically version 1.1 it is the well known old 1.0 format 
> with a single additional tag <subevent></subevent>. To my 
> knowledge this enhanced format is able to describe all known 
> kinds of events which are possible in Microsoft Outlook 2k-2k3.(*)
> 
> Joon: Do you know if anything changed in this regard between 
> OL2K3 and OL2K7?
>       Please speak up if this is the case!
> 
> <?xml version="1.0" encoding="UTF-8"?>
>   <event version="1.1">
>   <!-- Common fields -->
>   <uid>(string, no default)</uid>
>   <body>(string, default empty)</body>
>   <categories>(string, default empty)</categories>
>   <creation-date>(datetime, no default)</creation-date>
>   <last-modification-date>(datetime, no 
> default)</last-modification-date>
>   <sensitivity>(string, default public)</sensitivity>
>   {<inline-attachment>(string, no default)</inline-attachment>}
>   {<link-attachment>(string, no default)</link-attachment>}
>   <product-id>(string, default empty)</product-id>
>   <!-- Incidence fields -->
>   <summary>(string, default empty)</summary>
>   <location>(string, default empty)</location>
>   <organizer>
>     <display-name>(string, default empty)</display-name>
>     <smtp-address>(string, default empty)</smtp-address>
>   </organizer>
>   <start-date>(date or datetime, default not present)</start-date>
>   <end-date>(date or datetime, default not present)</end-date>
>   <show-time-as>(string, default busy)</show-time-as>
>   <color-label>(string, default none)</color-label>
>   <alarm>(number, no default)</alarm>
>   <recurrence cycle="cycletype" [type="extra type"]>
>     <interval>(number, default 1)</interval>
>     {<day>(string, no default)</day>}
>     <daynumber>(number, no default)</daynumber>
>     <date>(number, no default)</date>
>     <month>(string, no default></month>
>     <range type="rangetype">(date or number or nothing, no 
> default)</range>
>     {<exclusion>(date, no default)</exclusion>}
>   </recurrence>
>   {<attendee>
>     <display-name>(string, default empty)</display-name>
>     <smtp-address>(string, default empty)</smtp-address>
>     <status>(string, default none)</status>
>     <request-response>(bool, default true)</request-response>
>     <role>(string, default required)</role>
>   </attendee>}
>   <!-- sub events -->
>   <!-- Multiple subevents are allowed. If a <subevent> 
> changes an event of 
>        a series this element must be excluded in the primary 
> event using
>        the <exclusion> tag! Tags which are by default "not 
> present" inherit
>        their values from the primary event if they are not 
> explicitly set.
>        Basically this means that mainly the difference 
> towards the primary
>        event is stored in subevents! -->
>   {<subevent>
>     <summary>(string, default not present)</summary>
>     <location>(string, default not present)</location>
>     <start-date>(date or datetime, default not present)</start-date>
>     <end-date>(date or datetime, default not present)</end-date>
>     <alarm>(number, default not present)</alarm>
>     <color-label>(string, default not present)</color-label>
>     <show-time-as>(string, default not present)</show-time-as>
>     {<attendee> <!-- attendee is optional but if present the 
>                      list of attendees must be complete! -->
>       <display-name>(string, default empty)</display-name>
>       <smtp-address>(string, default empty)</smtp-address>
>       <status>(string, default none)</status>
>       <request-response>(bool, default true)</request-response>
>       <role>(string, default required)</role>
>     </attendee>}
>     <inline-attachment>(string, no default)</inline-attachment>
>     <link-attachment>(string, no default)</link-attachment>  
> </subevent>} </event>
> 
> (*) A trivial example where the old 1.0 format is not capable 
> enough is:
> 
> Imagine a recurring board meeting weekly on wednesday with 
> three attendees P1,
> P2 and P3 in Room R1. Due to some circumstances the room R1 
> is not available on Dec. 13th 2006 and the meeting is 
> therefore moved to room R2. 
> 
> This can be easily expressed in the OL GUI but it is 
> impossible in the old Kolab XML format 1.0. --> The really 
> bad thing about that is that the resulting information loss 
> for the user is initially not visible because the OL PST 
> happily stores this information which is later lost...
> 
> With the new XML format 1.1 this will be expressed using a subevent:
> 
> <?xml version="1.0" encoding="UTF-8"?>
> <event version="1.1" >
>  <product-id>KOrganizer 3.5.5, Kolab resource</product-id>  
> <uid>libkcal-1405437328.834</uid>  
> <creation-date>2006-12-03T23:50:00Z</creation-date>
>  <last-modification-date>2006-12-06T23:54:41Z</last-modification-date>
>  <sensitivity>public</sensitivity>
>  <start-date>2006-12-06T09:00:00Z</start-date>
>  <summary>Board Meeting</summary>
>  <location>Stuttgart</location>
>  <organizer>
>   <display-name>Martin Konold</display-name>
>   <smtp-address>martin.konold at erfrakon.de</smtp-address>
>  </organizer>
>  <recurrence cycle="weekly" >
>   <interval>1</interval>
>   <day>wednesday</day>
>   <range type="none" ></range>
>   <!-- the modified date dec 13th is excluded 
>        from the primary event as it is described 
>        in a subevent -->
>   <exclusion>2006-12-13</exclusion>
>  </recurrence>
>  <attendee>
>   <display-name>P1 Surname</display-name>
>   <smtp-address>P1.surname at erfrakon.de</smtp-address>
>   <status>none</status>
>   <request-response>true</request-response>
>   <invitation-sent>false</invitation-sent>
>   <role>required</role>
>  </attendee>
>  <attendee>
>   <display-name>P2 Surname</display-name>
>   <smtp-address>p2.surname at erfrakon.de</smtp-address>
>   <status>none</status>
>   <request-response>true</request-response>
>   <invitation-sent>false</invitation-sent>
>   <role>required</role>
>  </attendee>
>  <attendee>
>   <display-name>P3 Surname</display-name>
>   <smtp-address>p3.surname at erfrakon.de</smtp-address>
>   <status>none</status>
>   <request-response>true</request-response>
>   <invitation-sent>false</invitation-sent>
>   <role>required</role>
>  </attendee>
>  <attendee>
>   <display-name>Room 1</display-name>
>   <smtp-address>room.1 at erfrakon.de</smtp-address>
>   <status>accepted</status>
>   <request-response>true</request-response>
>   <invitation-sent>false</invitation-sent>
>   <role>resource</role>
>  </attendee>
>  <revision>0</revision>
>  <show-time-as>busy</show-time-as>
>  <end-date>2006-12-06T11:00:00Z</end-date>
>  <subevent>
>    <summary>Board Meeting in Room 2 </summary>
>    <!-- location did not change and therefore 
>         <location> is ommited in the subevent. -->
>    <location>(string, default not present)</location>
>    <start-date>(date or datetime, default not present)</start-date>
>    <end-date>(date or datetime, default not present)</end-date>
>    <alarm>(number, default not present)</alarm>
>    <color-label>(string, default not present)</color-label>
>    <show-time-as>(string, default not present)</show-time-as>
>    <attendee>
>      <display-name>P1 Surname</display-name>
>      <smtp-address>P1.surname at erfrakon.de</smtp-address>
>      <status>none</status>
>      <request-response>true</request-response>
>      <invitation-sent>false</invitation-sent>
>      <role>required</role>
>    </attendee>
>    <attendee>
>      <display-name>P2 Surname</display-name>
>      <smtp-address>p2.surname at erfrakon.de</smtp-address>
>      <status>none</status>
>      <request-response>true</request-response>
>      <invitation-sent>false</invitation-sent>
>      <role>required</role>
>    </attendee>
>    <attendee>
>      <display-name>P3 Surname</display-name>
>      <smtp-address>p3.surname at erfrakon.de</smtp-address>
>      <status>none</status>
>      <request-response>true</request-response>
>      <invitation-sent>false</invitation-sent>
>      <role>required</role>
>    </attendee>
>    <!-- the room changed from room 1 to room 2 -->
>    <attendee>
>      <display-name>Room 2</display-name>
>      <smtp-address>room.2 at erfrakon.de</smtp-address>
>      <status>accepted</status>
>      <request-response>false</request-response>
>      <invitation-sent>false</invitation-sent>
>      <role>resource</role>
>    </attendee>
>  </subevent>
> </event>
> 
> The following is new in version 1.1:
> 
> - new tag <subevent></subevent>
> This tag may occur multiple times exclusivly as a subtree 
> element of a single <event> element.
> 
> - In order to remain compatible with Microsoft Outlook every 
> subevent must be listed in <exlusion>(date, no 
> default)<exlusion> in the primary event.
> 
> - The following explicit list of tags is allowed within a subevent:
> 
> {<subevent>
>     <summary>(string, default not present)</summary>
>     <location>(string, default not present)</location>
>     <start-date>(date or datetime)</start-date>
>     <end-date>(date or datetime</end-date>
>     <alarm>(number, default not present)</alarm>
>     <color-label>(string, default not present)</color-label>
>     <show-time-as>(string, default not present)</show-time-as>
>     {<attendee> <!-- default not present - if present the 
>                      list