event XML 1.1 (fix recurrances)
Martin Konold
martin.konold at erfrakon.de
Thu Dec 7 01:46:32 CET 2006
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 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>}
- If a tag is not present in a <subevent> the value is inherited from the
primary <event>.
- If no <attendee> is listed in a <subevent> the list of attendees is
inherited from the primary <event>. If there is any change to any member of
the list of attendees then all attendees must be listed in the <subevent>
entry. All <attendee> entries must be complete and there is no inheritence
involved with regards to subtree elements of <attendee>. E.g if the <status>
of an <attendee> is changed for a subevent the complete list of all attendees
must be included in the subevent and all tags except the <status> tag are
repeated unchanged in the subevent.
- The concluding list of allowed tags below <subevent> is:
<summary>(string, optional)</summary>
<location>(string, optional)</location>
<start-date>(date or datetime, mandatory)</start-date>
<end-date>(date or datetime, mandatory</end-date>
<alarm>(number, optional)</alarm>
<color-label>(string, optional)</color-label>
<show-time-as>(string, optional)</show-time-as>
{<attendee>} <!-- default not present - if present the
list of attendees must be complete! -->
<display-name>(string, optional)</display-name>
<smtp-address>(string, optional)</smtp-address>
<status>(string, optional)</status>
<request-response>(bool, default true)</request-response>
<role>(string, default "required", optional)</role>
</attendee>}
<inline-attachment>(string, optional)</inline-attachment>
<link-attachment>(string, optional)</link-attachment>
- as the above list of fields is concluding tags like <recurrence> or
<sensivity> are disallowed within a <subevent>!
- one or more <subevent> entries are only allowed if a <recurrence> is present
in the primary <event>.
Yours,
-- martin
--
http://www.erfrakon.com/
Erlewein, Frank, Konold & Partner - Beratende Ingenieure und Physiker
More information about the format
mailing list