Re: DTSTART for recurrence instances

Olivier Gutknecht <[email protected]>
Newsgroups gmane.ietf.calendar
Message-ID <[email protected]>

On 2 déc. 03, at 20:01, Doug Royer wrote:
> Because you mixed without quoting the author of the comments, I can not
> figure out which comment your are asking about or commenting on in
> your reply.
> Perhaps your GUI processes leading spaces/tabs differently than mine.

Sorry, I copied some rich text and forgot to reforce everything in 
plain text.
Here is a repost.

On 2 déc. 03, at 03:14, Doug Royer wrote:
> Craig Johnson wrote:
>
>> Unless I have misunderstood, this seems contrary to common
>> practice.  Some clarification regarding DTSTART value for
>> recurrence instances would be helpful.
>>  Suppose we have a recurring event for every Monday in January:
>>  BEGIN:VEVENT
>> SUMMARY:Every Monday in January
>> DTSTART:20040105T100000Z
>> DTEND:20040105T110000Z
>> UID:A-Unique-ID
>> RRULE:FREQ=WEEKLY;UNTIL=20040131T170000Z;
>>  INTERVAL=1;BYDAY=MO;WKST=SU
>> ...
>> END:VEVENT
>>  Now suppose we SEARCH for that event with Expand:TRUE:
>>  BEGIN:VQUERY
>> EXPAND:TRUE
>> QUERY: SELECT * from VEVENT
>>   WHERE UID = 'A-Unique-ID'
>> END:VQUERY
>>  What will be returned in the query?  Will the DTSTART
>> (and DTEND) of each recurrence instance be the same as
>> the 'master' (as in column 1 below)?
>
> Yes. And each object returned will have a RECURRENCE-ID property
> added with its value set to the effective start time of that instance 
> of the component.
> All objects returned will have the same DTSTART /  [ DTEND | DURATION ]

2445 and 2446 mention RECURRENCE-ID as a way to actually identify 
component instance more than for actual date for the event. For 
example, in RFC 2445, sect 4.2.7:
     'Component instances are identified by the combination of "UID", 
"RECURRENCE-ID", and "SEQUENCE"

Or: RFC 2445, sect 4.8.4.4
    The full range of calendar components specified by a
    recurrence set is referenced by referring to just the "UID" property
    value corresponding to the calendar component. The "RECURRENCE-ID"
    property allows the reference to an individual instance within the
    recurrence set.

RFC 2446, sect 2.1.5
     To reference an instance of a recurring component, the primary key 
is composed of the "UID" and
     the "RECURRENCE-ID" properties.

There is also a note in 2445 4.8.4.4 about DATE value type that 
actually tells something about DTSTART semantics in a RECURRENCE-ID 
based component:

  If the value of the "DTSTART" property is a DATE type value, then the
    value MUST be the calendar date for the recurrence instance.

The definition here is for the -recurrence instance- and is a MUST.

> IN 2445 (EXDATE) (a similar section for EXRULE also exists):
>
>   The "EXDATE" property can be used to exclude the value specified in
>   "DTSTART". However, in such cases the original "DTSTART" date MUST
>   still be maintained by the calendaring and scheduling system because
>   the original "DTSTART" value has inherent usage dependencies by other
>   properties such as the "RECURRENCE-ID".

This is coherent in that case: making an exception on original DTSTART 
with an EXDATE must not change the other, unrelated component instances 
in the recurrence, as the RECURRENCE-ID is using the date where an 
occurrence should happen in the recurrence. The recurrence definition 
must not change for this to be possible, this include the RRULE of 
course, and the original DTSTART.  This has been corroborated by Frank 
Dawson and Derik Stenerson recently:

	" a) the value for RECURRENCE-ID was agreed to be the date/time  value 
of the original recurrence instance. This value remains unchanged for 
as  long as the base recurrence set (or pattern) exists. A rescheduling 
of an  individual recurrence instance did not cause creation of new 
base recurrence  set, but only moved the start/end of the specified 
recurrence instance.   "

RFC 2445 in 4.8.5.1 also mentions:
      The "DTSTART" property defines the first instance in the 
recurrence set.
But note that this is in the context of a component definining the 
recurrence (RRULE, EXDATE, RDATE, EXDATE, ...), not in the context of a 
RECURRENCE-ID identified component instance. Actually, DTSTART 
definition (4.8.4.2) only refer to the VEVENT component:
     Description: Within the "VEVENT" calendar component, this property
    defines the start date and time for the event.

So it seems somewhat unrelated to the DTSTART issue within a 
RECURRENCE-ID identified component from Craig's example.

> The only time the DTSTART is not the same as the master is when
> specifying a change to a single instance as described in iTIP 3.7.1
> and 4.4.2 . Then the master is not altered, just the specifc object
> declaring the change details.

I think the issue comes from ambiguities like:

RFC 2445 - 4.8.2.3 Date/Time Due
    Description: The value MUST be a date/time equal to or after the 
DTSTART value, if specified.
RFC 2446 - 4.5.7.2 Calculating due dates in recurring VTODOs
    The due date in a recurring "VTODO" calendar component is either a
    fixed interval specified in the "REQUEST" method or specified using
    the "RECURRENCE-ID" property. The former is calculated by applying
    the difference between "DTSTART" and "DUE" properties and applying it
    to each of the start of each recurring instance. Hence, if the
    initial "VTODO" calendar component specifies a "DTSTART" property
    value of "19970701T190000Z" and a "DUE" property value of
    "19970801T190000Z" the interval of one day which is applied to each
    recurring instance of the "VTODO" calendar component to determine the
    "DUE" date of the instance.

Even if the text mention the original DTSTART as the reference point, 
it does not mention the actual value of the DTSTART/DUE values in an 
identified recurrence instance. The section is actually quite clear 
when it differentiates the 'recurring instance' and the initial VTODO 
component.

And also:

RFC 2245 - 4.6.6 Alarm Component
    In an alarm set to trigger on the "START" of an event or to-do, the
    "DTSTART" property MUST be present in the associated event or to-do.
RFC 2445 - 4.8.6.3 Trigger
     If the trigger is set relative to START, then the "DTSTART" property
    MUST be present in the associated "VEVENT" or "VTODO" calendar
    component.

In all these cases, the property is defined relative to the DTSTART (or 
DTEND) of the associated component. If we assume that the DTSTART is 
the DTSTART of the original event, how can we express an iTIP ADD 
("especially useful if there are instance-specific properties to be 
preserved in a recurring "VEVENT"" -  idem for VTODO) or COUNTER and 
referring to actual DTSTART instance in that case and to global DTSTART 
in another case ?

>> Or will DTSTART and DTEND have the 'effective' value for the 
>> recurrence instance
>> (as in column 2 below)?
> No. Why would there need to be a new property (RECURRENCE-ID)?
> It could be done with a boolean (this is a single instance) to DTSTART
> if that were true.

Why introducing a new parameter if the existing model is sufficient ?

>> The expected result, intuitively and instinctively, is Column 2.
>> The prior discussion thread implied that Column 1 is correct
>> (along with some discussion explaining that this is why DTSTART
>> is not always suitable for use in QUERYs, whereas RECURRENCE-ID
>> is more suitable).
>
> DTSTART is a fixed value for any specific revision of a UID.

I can't see anything in 2445/2446 that explicitly states that (see 
comments above about recurrence instances).

> RECURRENCE-ID is calculated only when the object is expanded.

I agree with that.
However (DUE case above), if in the query result the returned DTSTART 
is the original DTSTART, I assume that means that a DUE property will 
also be the original component DUE value ? If find that worrying for 
two reasons:
    - EXPAND=TRUE is convenient for CUA that don't want or can't handle 
the complete recurrence model (PDA or cell phones were cited in earlier 
discussions). That means that the query results will not be immediately 
usable. I'm also worried with the case of a original event having an 
alarm and a specific instance having a  different alarm (a case likely 
to be related to the ALARMID/SEQUENCE discussion).
    - Semantics of the returned VEVENT/VTODO recurrence instances seem 
to be debatable, because of the parts of RFC 2445  that mentions 
recurrence instances as 'self sufficient' components (see above, 
4.8.4.1, 4.8.4.4).

>>  This is a fundamental issue that impacts interoperability. I'd like 
>> to hear others view on this issue:
>> What is the value of DTSTART for recurrence instances?
>>   - DTSTART is the same as the 'master'.
>>   - DTSTART is the 'effective' value for the instance.

I admit I also understand it as the effective value for the instance 
component, instance which is identified through 
UID/RECURRENCE-ID/SEQUENCE properties.

Ol.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.