draft-ietf-calext-jscalendar-16.txt   draft-ietf-calext-jscalendar-17.txt 
Calendaring extensions N. Jenkins Calendaring extensions N. Jenkins
Internet-Draft R. Stepanek Internet-Draft R. Stepanek
Intended status: Standards Track FastMail Intended status: Standards Track FastMail
Expires: December 26, 2019 June 24, 2019 Expires: December 31, 2019 June 29, 2019
JSCalendar: A JSON representation of calendar data JSCalendar: A JSON representation of calendar data
draft-ietf-calext-jscalendar-16 draft-ietf-calext-jscalendar-17
Abstract Abstract
This specification defines a data model and JSON representation of This specification defines a data model and JSON representation of
calendar data that can be used for storage and data exchange in a calendar data that can be used for storage and data exchange in a
calendaring and scheduling environment. It aims to be an alternative calendaring and scheduling environment. It aims to be an alternative
to the widely deployed iCalendar data format and to be unambiguous, to the widely deployed iCalendar data format and to be unambiguous,
extendable and simple to process. In contrast to the JSON-based jCal extendable and simple to process. In contrast to the JSON-based jCal
format, it is not a direct mapping from iCalendar and expands format, it is not a direct mapping from iCalendar and expands
semantics where appropriate. semantics where appropriate.
skipping to change at page 1, line 36 skipping to change at page 1, line 36
Internet-Drafts are working documents of the Internet Engineering Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet- working documents as Internet-Drafts. The list of current Internet-
Drafts is at https://datatracker.ietf.org/drafts/current/. Drafts is at https://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress." material or to cite them other than as "work in progress."
This Internet-Draft will expire on December 26, 2019. This Internet-Draft will expire on December 31, 2019.
Copyright Notice Copyright Notice
Copyright (c) 2019 IETF Trust and the persons identified as the Copyright (c) 2019 IETF Trust and the persons identified as the
document authors. All rights reserved. document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents Provisions Relating to IETF Documents
(https://trustee.ietf.org/license-info) in effect on the date of (https://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents publication of this document. Please review these documents
skipping to change at page 2, line 20 skipping to change at page 2, line 20
1.1. Relation to the iCalendar format . . . . . . . . . . . . 4 1.1. Relation to the iCalendar format . . . . . . . . . . . . 4
1.2. Relation to the jCal format . . . . . . . . . . . . . . . 5 1.2. Relation to the jCal format . . . . . . . . . . . . . . . 5
1.3. Notational Conventions . . . . . . . . . . . . . . . . . 5 1.3. Notational Conventions . . . . . . . . . . . . . . . . . 5
2. JSCalendar objects . . . . . . . . . . . . . . . . . . . . . 5 2. JSCalendar objects . . . . . . . . . . . . . . . . . . . . . 5
2.1. JSEvent . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.1. JSEvent . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.2. JSTask . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.2. JSTask . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.3. JSGroup . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.3. JSGroup . . . . . . . . . . . . . . . . . . . . . . . . . 6
3. Structure of JSCalendar objects . . . . . . . . . . . . . . . 6 3. Structure of JSCalendar objects . . . . . . . . . . . . . . . 6
3.1. Type signatures . . . . . . . . . . . . . . . . . . . . . 6 3.1. Type signatures . . . . . . . . . . . . . . . . . . . . . 6
3.2. Data Types . . . . . . . . . . . . . . . . . . . . . . . 7 3.2. Data Types . . . . . . . . . . . . . . . . . . . . . . . 7
3.2.1. UTCDate . . . . . . . . . . . . . . . . . . . . . . . 7 3.2.1. UTCDateTime . . . . . . . . . . . . . . . . . . . . . 7
3.2.2. LocalDate . . . . . . . . . . . . . . . . . . . . . . 7 3.2.2. LocalDateTime . . . . . . . . . . . . . . . . . . . . 7
3.2.3. Duration . . . . . . . . . . . . . . . . . . . . . . 7 3.2.3. Duration . . . . . . . . . . . . . . . . . . . . . . 7
3.2.4. PatchObject . . . . . . . . . . . . . . . . . . . . . 8 3.2.4. PatchObject . . . . . . . . . . . . . . . . . . . . . 8
3.2.5. Identifiers . . . . . . . . . . . . . . . . . . . . . 9 3.2.5. Identifiers . . . . . . . . . . . . . . . . . . . . . 9
3.2.6. Time Zones . . . . . . . . . . . . . . . . . . . . . 9 3.2.6. Time Zones . . . . . . . . . . . . . . . . . . . . . 9
3.2.7. Normalization and equivalence . . . . . . . . . . . . 9 3.2.7. Normalization and equivalence . . . . . . . . . . . . 9
3.3. Custom property extensions and values . . . . . . . . . . 10 3.3. Custom property extensions and values . . . . . . . . . . 10
4. Common JSCalendar properties . . . . . . . . . . . . . . . . 10 4. Common JSCalendar properties . . . . . . . . . . . . . . . . 10
4.1. Metadata properties . . . . . . . . . . . . . . . . . . . 10 4.1. Metadata properties . . . . . . . . . . . . . . . . . . . 10
4.1.1. @type . . . . . . . . . . . . . . . . . . . . . . . . 10 4.1.1. @type . . . . . . . . . . . . . . . . . . . . . . . . 10
4.1.2. uid . . . . . . . . . . . . . . . . . . . . . . . . . 11 4.1.2. uid . . . . . . . . . . . . . . . . . . . . . . . . . 11
skipping to change at page 7, line 19 skipping to change at page 7, line 19
o "Foo[]": An array of objects of type "Foo". o "Foo[]": An array of objects of type "Foo".
o "String[Foo]": A JSON "Object" being used as a map (associative o "String[Foo]": A JSON "Object" being used as a map (associative
array), where all the values are of type "Foo". array), where all the values are of type "Foo".
3.2. Data Types 3.2. Data Types
In addition to the standard JSON data types, the following data types In addition to the standard JSON data types, the following data types
are used in this specification: are used in this specification:
3.2.1. UTCDate 3.2.1. UTCDateTime
This is a string in [RFC3339] "date-time" format, with the further This is a string in [RFC3339] "date-time" format, with the further
restrictions that any letters MUST be in upper-case, the time restrictions that any letters MUST be in upper-case, the time
component MUST be included and the time MUST be in UTC. Fractional component MUST be included and the time offset MUST be the character
second values MUST NOT be included unless non-zero and MUST NOT have "Z". Fractional second values MUST NOT be included unless non-zero
trailing zeros, to ensure there is only a single representation for and MUST NOT have trailing zeros, to ensure there is only a single
each date-time. representation for each date-time.
For example "2010-10-10T10:10:10.003Z" is OK, but For example "2010-10-10T10:10:10.003Z" is OK, but
"2010-10-10T10:10:10.000Z" is invalid and MUST be encoded as "2010-10-10T10:10:10.000Z" is invalid and MUST be encoded as
"2010-10-10T10:10:10Z". "2010-10-10T10:10:10Z".
In common notation, it should be of the form "YYYY-MM-DDTHH:MM:SSZ". In common notation, it should be of the form "YYYY-MM-DDTHH:MM:SSZ".
3.2.2. LocalDate 3.2.2. LocalDateTime
This is a date-time string _with no time zone/offset information_. This is a date-time string _with no time zone/offset information_.
It is otherwise in the same format as UTCDate, including fractional It is otherwise in the same format as UTCDateTime, including
seconds. For example "2006-01-02T15:04:05" and fractional seconds. For example "2006-01-02T15:04:05" and
"2006-01-02T15:04:05.003" are both valid. The time zone to associate "2006-01-02T15:04:05.003" are both valid. The time zone to associate
the LocalDate with comes from an associated property, or if no time the LocalDateTime with comes from an associated property, or if no
zone is associated it defines _floating time_. Floating date-times time zone is associated it defines _floating time_. Floating date-
are not tied to any specific time zone. Instead, they occur in every times are not tied to any specific time zone. Instead, they occur in
time zone at the same wall-clock time (as opposed to the same instant every time zone at the same wall-clock time (as opposed to the same
point in time). instant point in time).
3.2.3. Duration 3.2.3. Duration
A Duration object is represented by a subset of ISO8601 duration A Duration object is represented by a subset of ISO8601 duration
format, as specified by the following ABNF: format, as specified by the following ABNF:
dur-secfrac = "." 1*DIGIT dur-secfrac = "." 1*DIGIT
dur-second = 1*DIGIT [dur-secfrac] "S" dur-second = 1*DIGIT [dur-secfrac] "S"
dur-minute = 1*DIGIT "M" [dur-second] dur-minute = 1*DIGIT "M" [dur-second]
dur-hour = 1*DIGIT "H" [dur-minute] dur-hour = 1*DIGIT "H" [dur-minute]
skipping to change at page 12, line 33 skipping to change at page 12, line 33
value, as defined in [ISO.9070.1991]. It MUST only use characters of value, as defined in [ISO.9070.1991]. It MUST only use characters of
an iCalendar TEXT data value (see section 3.3.11 in [RFC5545]). an iCalendar TEXT data value (see section 3.3.11 in [RFC5545]).
This property SHOULD NOT be used to alter the interpretation of an This property SHOULD NOT be used to alter the interpretation of an
JSCalendar object beyond the semantics specified in this document. JSCalendar object beyond the semantics specified in this document.
For example, it is not to be used to further the understanding of For example, it is not to be used to further the understanding of
non-standard properties. non-standard properties.
4.1.5. created 4.1.5. created
Type: UTCDate (optional). Type: UTCDateTime (optional).
The date and time this object was initially created. The date and time this object was initially created.
4.1.6. updated 4.1.6. updated
Type: UTCDate (mandatory). Type: UTCDateTime (mandatory).
The date and time the data in this object was last modified. The date and time the data in this object was last modified.
4.1.7. sequence 4.1.7. sequence
Type: Number (optional, default: "0"). Type: Number (optional, default: "0").
Initially zero, this MUST be a non-negative integer that is Initially zero, this MUST be a non-negative integer that is
monotonically incremented each time a change is made to the object. monotonically incremented each time a change is made to the object.
skipping to change at page 14, line 15 skipping to change at page 14, line 15
4.2.5. locations 4.2.5. locations
Type: String[Location] (optional). Type: String[Location] (optional).
A map of location identifiers to Location objects, representing A map of location identifiers to Location objects, representing
locations associated with the object. locations associated with the object.
A Location object has the following properties. It must define at A Location object has the following properties. It must define at
least one other property than the "relativeTo" property. least one other property than the "relativeTo" property.
o name: String (optional, default: empty String). The human- o name: String (optional). The human-readable name of the location.
readable name of the location.
o description: String (optional). Human-readable, plain-text o description: String (optional). Human-readable, plain-text
instructions for accessing this location. This may be an address, instructions for accessing this location. This may be an address,
set of directions, door access code, etc. set of directions, door access code, etc.
o relativeTo: String (optional). The relation type of this location o relativeTo: String (optional). The relation type of this location
to the JSCalendar object. to the JSCalendar object.
This MUST be either one of the following values, registered in a This MUST be either one of the following values, registered in a
future RFC, or a vendor-specific value. Any value the client or future RFC, or a vendor-specific value. Any value the client or
skipping to change at page 19, line 36 skipping to change at page 19, line 36
o bySecond: Number[] (optional). The BYSECOND part from iCalendar. o bySecond: Number[] (optional). The BYSECOND part from iCalendar.
The array MUST have at least one entry if included. The array MUST have at least one entry if included.
o bySetPosition: Number[] (optional). The BYSETPOS part from o bySetPosition: Number[] (optional). The BYSETPOS part from
iCalendar. The array MUST have at least one entry if included. iCalendar. The array MUST have at least one entry if included.
o count: Number (optional). The COUNT part from iCalendar. This o count: Number (optional). The COUNT part from iCalendar. This
MUST NOT be included if an "until" property is specified. MUST NOT be included if an "until" property is specified.
o until: LocalDate (optional). The UNTIL part from iCalendar. This o until: LocalDateTime (optional). The UNTIL part from iCalendar.
MUST NOT be included if a "count" property is specified. Note: if This MUST NOT be included if a "count" property is specified.
not specified otherwise for a specific JSCalendar object, this Note: if not specified otherwise for a specific JSCalendar object,
date is presumed to be in the time zone specified in "timeZone". this date is presumed to be in the time zone specified in
As in iCalendar, the until value bounds the recurrence rule "timeZone". As in iCalendar, the until value bounds the
inclusively. recurrence rule inclusively.
A recurrence rule specifies a set of set of date-times for recurring A recurrence rule specifies a set of set of date-times for recurring
calendar objects. A recurrence rule has the following semantics. calendar objects. A recurrence rule has the following semantics.
Note, wherever "year", "month" or "day of month" is used, this is Note, wherever "year", "month" or "day of month" is used, this is
within the calendar system given by the "rscale" property, which within the calendar system given by the "rscale" property, which
defaults to gregorian if omitted. defaults to gregorian if omitted.
1. A set of candidates is generated. This is every second within a 1. A set of candidates is generated. This is every second within a
period defined by the frequency property value: period defined by the frequency property value:
skipping to change at page 23, line 30 skipping to change at page 23, line 30
+ if there is no byMonthDay, byWeekNo or byDay properties: + if there is no byMonthDay, byWeekNo or byDay properties:
Add a byMonthDay property with the sole value being the Add a byMonthDay property with the sole value being the
day-of-the-month of the start date-time. day-of-the-month of the start date-time.
+ if there is a byWeekNo property and no byMonthDay or byDay + if there is a byWeekNo property and no byMonthDay or byDay
properties: Add a byDay property with the sole value being properties: Add a byDay property with the sole value being
the day-of-the-week of the start date-time. the day-of-the-week of the start date-time.
4.3.2. recurrenceOverrides 4.3.2. recurrenceOverrides
Type: LocalDate[PatchObject] (optional). Type: LocalDateTime[PatchObject] (optional).
A map of the recurrence-ids (the date-time of the start of the A map of the recurrence-ids (the date-time of the start of the
occurrence) to an object of patches to apply to the generated occurrence) to an object of patches to apply to the generated
occurrence object. occurrence object.
If the recurrence-id does not match an expanded start date from a If the recurrence-id does not match an expanded start date from a
recurrence rule, it is to be treated as an additional occurrence recurrence rule, it is to be treated as an additional occurrence
(like an RDATE from iCalendar). The patch object may often be empty (like an RDATE from iCalendar). The patch object may often be empty
in this case. in this case.
If the patch object defines the "excluded" property value to be If the patch object defines the "excluded" property value to be
"true", then the recurring calendar object does not occur at the "true", then the recurring calendar object does not occur at the
recurrence-id date-time (like an EXDATE from iCalendar). Such a recurrence-id date-time (like an EXDATE from iCalendar). Such a
patch object MUST NOT patch any other property. patch object MUST NOT patch any other property.
By default, an occurrence inherits all properties from the main By default, an occurrence inherits all properties from the main
object except the start (or due) date-time, which is shifted to the object except the start (or due) date-time, which is shifted to the
new start time of the LocalDate key. However, individual properties new start time of the LocalDateTime key. However, individual
of the occurrence can be modified by a patch, or multiple patches. properties of the occurrence can be modified by a patch, or multiple
It is valid to patch the start property value, and this patch takes patches. It is valid to patch the start property value, and this
precedence over the LocalDate key. Both the LocalDate key as well as patch takes precedence over the LocalDateTime key. Both the
the patched start date-time may occur before the original JSCalendar LocalDateTime key as well as the patched start date-time may occur
object's start or due date. before the original JSCalendar object's start or due date.
A pointer in the PatchObject MUST NOT start with one of the following A pointer in the PatchObject MUST be ignored if it starts with one of
prefixes; any patch with such a key MUST be ignored: the following prefixes:
o @type o @type
o uid o uid
o relatedTo o relatedTo
o prodId o prodId
o method o method
skipping to change at page 29, line 41 skipping to change at page 29, line 41
o scheduleSequence: Number (optional, default: "0"). The sequence o scheduleSequence: Number (optional, default: "0"). The sequence
number of the last response from the participant. If defined, number of the last response from the participant. If defined,
this MUST be a non-negative integer. this MUST be a non-negative integer.
This can be used to determine whether the participant has sent a This can be used to determine whether the participant has sent a
new RSVP following significant changes to the calendar object, and new RSVP following significant changes to the calendar object, and
to determine if future responses are responding to a current or to determine if future responses are responding to a current or
older view of the data. older view of the data.
o scheduleUpdated: UTCDate (optional). The "updated" property of o scheduleUpdated: UTCDateTime (optional). The "updated" property
the last iMIP response from the participant. of the last iMIP response from the participant.
This can be compared to the "updated" property timestamp in future This can be compared to the "updated" property timestamp in future
iMIP responses to determine if the response is older or newer than iMIP responses to determine if the response is older or newer than
the current data. the current data.
o invitedBy: String (optional). The participant id of the o invitedBy: String (optional). The participant id of the
participant who invited this one, if known. participant who invited this one, if known.
o delegatedTo: String[Boolean] (optional). A set of participant ids o delegatedTo: String[Boolean] (optional). A set of participant ids
that this participant has delegated their participation to. Each that this participant has delegated their participation to. Each
skipping to change at page 31, line 33 skipping to change at page 31, line 33
+ "end": triggers the alert relative to the end/due time of + "end": triggers the alert relative to the end/due time of
the calendar object the calendar object
An *UnknownTrigger* object is an object that contains a *type* An *UnknownTrigger* object is an object that contains a *type*
property whose value is not "offset", plus zero or more other property whose value is not "offset", plus zero or more other
properties. This is for compatibility with client extensions and properties. This is for compatibility with client extensions and
future RFCs. Implementations SHOULD NOT trigger for trigger types future RFCs. Implementations SHOULD NOT trigger for trigger types
they do not understand, but MUST preserve them. they do not understand, but MUST preserve them.
o acknowledged: UTCDate (optional). o acknowledged: UTCDateTime (optional).
When the user has permanently dismissed the alert the client MUST When the user has permanently dismissed the alert the client MUST
set this to the current time in UTC. Other clients which sync set this to the current time in UTC. Other clients which sync
this property can then automatically dismiss or suppress duplicate this property can then automatically dismiss or suppress duplicate
alerts (alerts with the same alert id that triggered on or before alerts (alerts with the same alert id that triggered on or before
this date-time). this date-time).
For a recurring calendar object, the "acknowledged" property of For a recurring calendar object, the "acknowledged" property of
the parent object MUST be updated, unless the alert is already the parent object MUST be updated, unless the alert is already
overridden in the "recurrenceOverrides" property. overridden in the "recurrenceOverrides" property.
o snoozed: UTCDate (optional). o snoozed: UTCDateTime (optional).
If the user temporarily dismisses the alert, this is the UTC date- If the user temporarily dismisses the alert, this is the UTC date-
time after which it should trigger again. Setting this property time after which it should trigger again. Setting this property
on an instance of a recurring calendar object MUST update the on an instance of a recurring calendar object MUST update the
alarm on the top-level object, unless the respective instance alarm on the top-level object, unless the respective instance
already is defined in "recurrenceOverrides". It MUST NOT generate already is defined in "recurrenceOverrides". It MUST NOT generate
an override for the sole use of snoozing an alarm. an override for the sole use of snoozing an alarm.
o action: String (optional, default: "display"). Describes how to o action: String (optional, default: "display"). Describes how to
alert the user. alert the user.
skipping to change at page 34, line 5 skipping to change at page 34, line 5
zones are not allowed). zones are not allowed).
An identifier need only be unique to this JSCalendar object. An identifier need only be unique to this JSCalendar object.
A TimeZone object maps a VTIMEZONE component from iCalendar A TimeZone object maps a VTIMEZONE component from iCalendar
([RFC5545]). A valid time zone MUST define at least one transition ([RFC5545]). A valid time zone MUST define at least one transition
rule in the "standard" or "daylight" property. Its properties are: rule in the "standard" or "daylight" property. Its properties are:
o tzId: String (mandatory). The TZID property from iCalendar. o tzId: String (mandatory). The TZID property from iCalendar.
o lastModified: UTCDate (optional). The LAST-MODIFIED property from o lastModified: UTCDateTime (optional). The LAST-MODIFIED property
iCalendar. from iCalendar.
o url: String (optional). The TZURL property from iCalendar. o url: String (optional). The TZURL property from iCalendar.
o validUntil: UTCDate (optional). The TZUNTIL property from o validUntil: UTCDateTime (optional). The TZUNTIL property from
iCalendar specified in [RFC7808]. iCalendar specified in [RFC7808].
o aliases: String[Boolean] (optional). Maps the TZID-ALIAS-OF o aliases: String[Boolean] (optional). Maps the TZID-ALIAS-OF
properties from iCalendar specified in [RFC7808] to a JSON set of properties from iCalendar specified in [RFC7808] to a JSON set of
aliases. The set is represented as an object, with the keys being aliases. The set is represented as an object, with the keys being
the aliases. The value for each key in the set MUST be "true". the aliases. The value for each key in the set MUST be "true".
o standard: TimeZoneRule[] (optional). The STANDARD sub-components o standard: TimeZoneRule[] (optional). The STANDARD sub-components
from iCalendar. The order MUST be preserved during conversion. from iCalendar. The order MUST be preserved during conversion.
o daylight: TimeZoneRule[] (optional). The DAYLIGHT sub-components o daylight: TimeZoneRule[] (optional). The DAYLIGHT sub-components
from iCalendar. The order MUST be preserved during conversion. from iCalendar. The order MUST be preserved during conversion.
A TimeZoneRule object maps a STANDARD or DAYLIGHT sub-component from A TimeZoneRule object maps a STANDARD or DAYLIGHT sub-component from
iCalendar, with the restriction that at most one recurrence rule is iCalendar, with the restriction that at most one recurrence rule is
allowed per rule. It has the following properties: allowed per rule. It has the following properties:
o start: LocalDate (mandatory). The DTSTART property from o start: LocalDateTime (mandatory). The DTSTART property from
iCalendar. iCalendar.
o offsetTo: String (mandatory). The TZOFFSETTO property from o offsetTo: String (mandatory). The TZOFFSETTO property from
iCalendar. iCalendar.
o offsetFrom: String (mandatory). The TZOFFSETFROM property from o offsetFrom: String (mandatory). The TZOFFSETFROM property from
iCalendar. iCalendar.
o recurrenceRule: RecurrenceRule (optional). The RRULE property o recurrenceRule: RecurrenceRule (optional). The RRULE property
mapped as specified in Section 4.3.1. During recurrence rule mapped as specified in Section 4.3.1. During recurrence rule
evaluation, the "until" property value MUST be interpreted as a evaluation, the "until" property value MUST be interpreted as a
local time in the UTC time zone. local time in the UTC time zone.
o recurrenceDates: LocalDate[Boolean] (optional). Maps the RDATE o recurrenceDates: LocalDateTime[Boolean] (optional). Maps the
properties from iCalendar to a JSON set. The set is represented RDATE properties from iCalendar to a JSON set. The set is
as an object, with the keys being the recurrence dates. The value represented as an object, with the keys being the recurrence
for each key in the set MUST be "true". dates. The value for each key in the set MUST be "true".
o names: String[Boolean] (optional). Maps the TZNAME properties o names: String[Boolean] (optional). Maps the TZNAME properties
from iCalendar to a JSON set. The set is represented as an from iCalendar to a JSON set. The set is represented as an
object, with the keys being the names. The value for each key in object, with the keys being the names. The value for each key in
the set MUST be "true". the set MUST be "true".
o comments: String[] (optional). Maps the COMMENT properties from o comments: String[] (optional). Maps the COMMENT properties from
iCalendar. The order MUST be preserved during conversion. iCalendar. The order MUST be preserved during conversion.
5. Type-specific JSCalendar properties 5. Type-specific JSCalendar properties
5.1. JSEvent properties 5.1. JSEvent properties
In addition to the common JSCalendar object properties (Section 4) a In addition to the common JSCalendar object properties (Section 4) a
JSEvent has the following properties: JSEvent has the following properties:
5.1.1. start 5.1.1. start
Type: LocalDate (mandatory). Type: LocalDateTime (mandatory).
The date/time the event would start in the event's time zone. The date/time the event would start in the event's time zone.
5.1.2. timeZone 5.1.2. timeZone
Type: String|null (optional, default: "null"). Type: String|null (optional, default: "null").
Identifies the time zone the event is scheduled in, or "null" for Identifies the time zone the event is scheduled in, or "null" for
floating time. If omitted, this MUST be presumed to be "null" (i.e. floating time. If omitted, this MUST be presumed to be "null" (i.e.
floating time). Also see Section 3.2.6. floating time). Also see Section 3.2.6.
skipping to change at page 36, line 25 skipping to change at page 36, line 25
o "tentative": Indicates the event is tentative. o "tentative": Indicates the event is tentative.
5.2. JSTask properties 5.2. JSTask properties
In addition to the common JSCalendar object properties (Section 4) a In addition to the common JSCalendar object properties (Section 4) a
JSTask has the following properties: JSTask has the following properties:
5.2.1. due 5.2.1. due
Type: LocalDate (optional). Type: LocalDateTime (optional).
The date/time the task is due in the task's time zone. The date/time the task is due in the task's time zone.
5.2.2. start 5.2.2. start
Type: LocalDate (optional). Type: LocalDateTime (optional).
The date/time the task should start in the task's time zone. The date/time the task should start in the task's time zone.
5.2.3. timeZone 5.2.3. timeZone
Type: String|null (optional, default: "null"). Type: String|null (optional, default: "null").
Identifies the time zone the task is scheduled in, or "null" for Identifies the time zone the task is scheduled in, or "null" for
floating time. If omitted, this MUST be presumed to be "null" (i.e. floating time. If omitted, this MUST be presumed to be "null" (i.e.
floating time). Also see Section 3.2.6. floating time). Also see Section 3.2.6.
5.2.4. estimatedDuration 5.2.4. estimatedDuration
Type: Duration (optional). Type: Duration (optional).
Specifies the estimated positive duration of time the task takes to Specifies the estimated positive duration of time the task takes to
complete. complete.
5.2.5. statusUpdatedAt 5.2.5. statusUpdatedAt
Type: UTCDate (optional). Type: UTCDateTime (optional).
Specifies the date/time the task status properties was last updated. Specifies the date/time the task status properties was last updated.
If the task is recurring and has future instances, a client may want If the task is recurring and has future instances, a client may want
to keep track of the last status update timestamp of a specific task to keep track of the last status update timestamp of a specific task
recurrence, but leave other instances unchanged. One way to achieve recurrence, but leave other instances unchanged. One way to achieve
this is by overriding the statusUpdatedAt property in the task this is by overriding the statusUpdatedAt property in the task
"recurrenceOverrides" property. However, this could produce a long "recurrenceOverrides" property. However, this could produce a long
list of timestamps for regularly recurring tasks. An alternative list of timestamps for regularly recurring tasks. An alternative
approach is to split the JSTask into a current, single instance of approach is to split the JSTask into a current, single instance of
skipping to change at page 37, line 46 skipping to change at page 37, line 46
The value MUST be at most one of the following values, registered The value MUST be at most one of the following values, registered
in a future RFC, or a vendor-specific value: in a future RFC, or a vendor-specific value:
* "completed": The participant completed their task. * "completed": The participant completed their task.
* "in-process": The participant has started this task. * "in-process": The participant has started this task.
* "failed": The participant failed to complete their task. * "failed": The participant failed to complete their task.
o timestamp: UTCDate (mandatory). Describes the last time when the o timestamp: UTCDateTime (mandatory). Describes the last time when
participant progress got updated. the participant progress got updated.
5.2.7. status 5.2.7. status
Type: String (optional). Type: String (optional).
Defines the overall status of this task. If omitted, the default Defines the overall status of this task. If omitted, the default
status (Section 4.4) of a JSTask is defined as follows (in order of status (Section 4.4) of a JSTask is defined as follows (in order of
evaluation): evaluation):
o "completed": if the "status" property value of all participant o "completed": if the "status" property value of all participant
 End of changes. 28 change blocks. 
55 lines changed or deleted 54 lines changed or added

This html diff was produced by rfcdiff 1.47. The latest version is available from http://tools.ietf.org/tools/rfcdiff/