[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kolab-format
Subject:    KEP 3 (2010-11-18): Introduction of 'subevent' sub-tag for
From:       "Georg C. F. Greve" <greve () kolabsys ! com>
Date:       2010-11-18 9:29:11
Message-ID: 201011181029.12358.greve () kolabsys ! com
[Download RAW message or body]

[Attachment #2 (multipart/signed)]

[Attachment #4 (multipart/mixed)]


Hi all,

Jeroen is already working on trying to put together some proposed tooling and 
process parameters for the KEP process. Until that is in place, I'll work with 
the date of the draft in the subject line to allow us to keep track of the 
draft.

This revision already includes the Recurrence ID brought up by Sergio to 
address the iTIP handling. It also includes lists of illegal and mandatory 
fields the subevent MUST or MUST NOT define, which Jeroen raised.

Sergio: Do you think this works?

Jeroen: Is this what you had in mind? 

ALL: Opinions about the changes, and the field lists?

Open question: This is still based on the deep nesting, which Bernhard pointed 
out some older clients might mangle despite what the format spec says.

There are fundamentally two options here:

 (a) IGNORE the problem: Newer clients will necessarily write recurrences in 
ways which older clients won't understand, so older clients won't ever be able 
to understand them, so only old or new clients should ever be used on any data 
set.

 (b) UNNEST the structure: This will separate the exclusion date (a.k.a. 
Recurrence ID) from the subevent, which could then hold a mandatory Recurrence 
ID tag to allow finding it again. This is less elegant and puts a higher burden 
on the clients which for instance need to ensure to not leave around orphaned 
subevents and such.

Are there opinions on these choices?

Best regards,
Georg


-- 
Georg C. F. Greve
Chief Executive Officer

Kolab Systems AG
Zürich, Switzerland

e: greve@kolabsys.com
t: +41 78 904 43 33
w: http://kolabsys.com

pgp: 86574ACA Georg C. F. Greve

["KEP-3.txt" (text/plain)]

KEP: 3
Title: Introduction of 'subevent' sub-tag for 'exclusion' from 'recurrence'
Version: $Revision$
Last-Modified: $Date$
Author: Georg Greve <greve@kolabsys.com>
Status: Draft
Type: Design
Content-Type: text/x-rst
Created: 2010-11-17

Abstract
========

The Kolab storage format models allows recurrence to have 'non-occurence' exceptions \
already, but it does not allow to have 'modification' exceptions, e.g. change of time \
or location. The way this has been handled is to create a 'non-occurence' exception, \
and then create a separate event for that day with the default values of the \
recurring event.

This has been understood as a suboptimal solution for a long time because the clients \
cannot easily connect that new event with the recurring event for future \
modifications, while the user logically sees them as connected.

The solution is to introduce a hierarchically nested 'subevent' sub-tag for an \
exception, which takes all default values from the recurring event itself, and only \
contains the differences to these default values. [1]

Update to the XML Format
========================

The type for datetime storage in Kolab XML is modified as follows:

* Clients **MUST** treat the date of the 'exclusion' as the Recurrence ID [2] where \
                applicable, in particular iTIP [3] handling.
* A 'subevent' XML tag **MAY** be added hierarchically nested within an 'exclusion' \
                to a 'recurrence' of an 'event' object.
* There **MUST** be only one 'subevent' per 'exclusion.
* All event values of the 'subevent' default to the 'event' within which it is \
nested. Values within 'subevent' change these values for this 'exception' from the \
                'recurrence' only.
* Fields for 'event' that 'subevent' **MUST NOT** use/override are: *'uid'* and \
                *'recurrence'*
* Fields that 'subevent' **MUST** define are: *'creation-date'* and \
*'last-modification-date'*

Example
-------

Moving one instance of a recurring event from date1, a normal date in the recurrence \
cycle, to new-date1 would express itself as follows

  <event>
  ...

    <recurrence>
    ...

      <exclusion>date1

        <subevent>

          <start-date>new-date1</start-date>

        </subevent>

      </exclusion>

    </recurrence>

  </event>


Upgrade Path
============

When this KEP becomes active, the version number of the Kolab Storage Format \
specification will be updated to 2.1.

New clients that correspond to 2.1 will be fully compatible with older data sets.

Older clients can continue to behave as before at their own choice, and will remain \
consistent with the 2.0 specification and no data will be lost or corrupted. So \
whilst this is important, it is not urgent. Older clients will however not be able to \
display recurrence exceptions of newer clients properly, so it is highly recommended \
to move to the newer 2.1 format when feasible.

References
==========

.. [1] event XML 1.1 (fix recurrances), Konold
   (http://kolab.org/pipermail/kolab-format/2008-December/000876.html)

.. [2] RFC2445: Internet Calendaring and Scheduling Core Object Specification, \
4.8.4.4 Recurrence ID  (http://www.ietf.org/rfc/rfc2445.txt)

.. [3] RFC2446: iCalendar Transport-Independent Interoperability Protocol (iTIP)
   (http://www.ietf.org/rfc/rfc2446.txt)


Copyright
=========

This document has been placed in the public domain.

..
   Local Variables:
   mode: indented-text
   indent-tabs-mode: nil
   sentence-end-double-space: t
   fill-column: 70
   coding: utf-8
   End:


["KEP-3.pdf" (application/pdf)]
["signature.asc" (application/pgp-signature)]

_______________________________________________
Kolab-format mailing list
Kolab-format@kolab.org
https://kolab.org/mailman/listinfo/kolab-format


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic