draft-ietf-calext-jscalendar-03.txt   draft-ietf-calext-jscalendar-04.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: November 10, 2018 May 9, 2018 Expires: November 26, 2018 May 25, 2018
JSCalendar: A JSON representation of calendar data JSCalendar: A JSON representation of calendar data
draft-ietf-calext-jscalendar-03 draft-ietf-calext-jscalendar-04
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. extendable and simple to process.
Status of This Memo Status of This Memo
skipping to change at page 1, line 34 skipping to change at page 1, line 34
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 November 10, 2018. This Internet-Draft will expire on November 26, 2018.
Copyright Notice Copyright Notice
Copyright (c) 2018 IETF Trust and the persons identified as the Copyright (c) 2018 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 16 skipping to change at page 2, line 16
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4
1.1. Relation to the iCalendar format . . . . . . . . . . . . 4 1.1. Relation to the iCalendar format . . . . . . . . . . . . 4
1.2. Notational Conventions . . . . . . . . . . . . . . . . . 5 1.2. Notational Conventions . . . . . . . . . . . . . . . . . 5
2. JSCalendar objects . . . . . . . . . . . . . . . . . . . . . 5 2. JSCalendar objects . . . . . . . . . . . . . . . . . . . . . 5
2.1. JSEvent . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.1. JSEvent . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.2. JSTask . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.2. JSTask . . . . . . . . . . . . . . . . . . . . . . . . . 5
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 . . . . . . . . . . . . . . . . . . . . . . . 6 3.2. Data Types . . . . . . . . . . . . . . . . . . . . . . . 7
3.2.1. UTCDate . . . . . . . . . . . . . . . . . . . . . . . 6 3.2.1. UTCDate . . . . . . . . . . . . . . . . . . . . . . . 7
3.2.2. LocalDate . . . . . . . . . . . . . . . . . . . . . . 7 3.2.2. LocalDate . . . . . . . . . . . . . . . . . . . . . . 7
3.2.3. Duration . . . . . . . . . . . . . . . . . . . . . . 7 3.2.3. Duration . . . . . . . . . . . . . . . . . . . . . . 7
3.2.4. PatchObject . . . . . . . . . . . . . . . . . . . . . 7 3.2.4. PatchObject . . . . . . . . . . . . . . . . . . . . . 8
3.2.5. Identifiers . . . . . . . . . . . . . . . . . . . . . 8 3.2.5. Identifiers . . . . . . . . . . . . . . . . . . . . . 8
3.2.6. Normalisation and equivalence . . . . . . . . . . . . 8 3.2.6. Normalisation and equivalence . . . . . . . . . . . . 8
3.3. Custom property extensions and values . . . . . . . . . . 9 3.3. Custom property extensions and values . . . . . . . . . . 9
4. Common JSCalendar properties . . . . . . . . . . . . . . . . 9 4. Common JSCalendar properties . . . . . . . . . . . . . . . . 9
4.1. Metadata properties . . . . . . . . . . . . . . . . . . . 9 4.1. Metadata properties . . . . . . . . . . . . . . . . . . . 9
4.1.1. @type . . . . . . . . . . . . . . . . . . . . . . . . 9 4.1.1. @type . . . . . . . . . . . . . . . . . . . . . . . . 9
4.1.2. uid . . . . . . . . . . . . . . . . . . . . . . . . . 10 4.1.2. uid . . . . . . . . . . . . . . . . . . . . . . . . . 10
4.1.3. relatedTo . . . . . . . . . . . . . . . . . . . . . . 10 4.1.3. relatedTo . . . . . . . . . . . . . . . . . . . . . . 10
4.1.4. prodId . . . . . . . . . . . . . . . . . . . . . . . 11 4.1.4. prodId . . . . . . . . . . . . . . . . . . . . . . . 11
4.1.5. created . . . . . . . . . . . . . . . . . . . . . . . 11 4.1.5. created . . . . . . . . . . . . . . . . . . . . . . . 11
4.1.6. updated . . . . . . . . . . . . . . . . . . . . . . . 11 4.1.6. updated . . . . . . . . . . . . . . . . . . . . . . . 11
4.1.7. sequence . . . . . . . . . . . . . . . . . . . . . . 11 4.1.7. sequence . . . . . . . . . . . . . . . . . . . . . . 12
4.1.8. method . . . . . . . . . . . . . . . . . . . . . . . 11 4.1.8. method . . . . . . . . . . . . . . . . . . . . . . . 12
4.2. What and where properties . . . . . . . . . . . . . . . . 12 4.2. What and where properties . . . . . . . . . . . . . . . . 12
4.2.1. title . . . . . . . . . . . . . . . . . . . . . . . . 12 4.2.1. title . . . . . . . . . . . . . . . . . . . . . . . . 12
4.2.2. description . . . . . . . . . . . . . . . . . . . . . 12 4.2.2. description . . . . . . . . . . . . . . . . . . . . . 12
4.2.3. htmlDescription . . . . . . . . . . . . . . . . . . . 12 4.2.3. htmlDescription . . . . . . . . . . . . . . . . . . . 12
4.2.4. locations . . . . . . . . . . . . . . . . . . . . . . 12 4.2.4. locations . . . . . . . . . . . . . . . . . . . . . . 12
4.2.5. links . . . . . . . . . . . . . . . . . . . . . . . . 14 4.2.5. links . . . . . . . . . . . . . . . . . . . . . . . . 14
4.2.6. locale . . . . . . . . . . . . . . . . . . . . . . . 15 4.2.6. locale . . . . . . . . . . . . . . . . . . . . . . . 16
4.2.7. keywords . . . . . . . . . . . . . . . . . . . . . . 16 4.2.7. keywords . . . . . . . . . . . . . . . . . . . . . . 16
4.2.8. categories . . . . . . . . . . . . . . . . . . . . . 16 4.2.8. categories . . . . . . . . . . . . . . . . . . . . . 16
4.2.9. color . . . . . . . . . . . . . . . . . . . . . . . . 16 4.2.9. color . . . . . . . . . . . . . . . . . . . . . . . . 16
4.3. Recurrence properties . . . . . . . . . . . . . . . . . . 16 4.3. Recurrence properties . . . . . . . . . . . . . . . . . . 16
4.3.1. recurrenceRule . . . . . . . . . . . . . . . . . . . 16 4.3.1. recurrenceRule . . . . . . . . . . . . . . . . . . . 17
4.3.2. recurrenceOverrides . . . . . . . . . . . . . . . . . 18 4.3.2. recurrenceOverrides . . . . . . . . . . . . . . . . . 21
4.4. Sharing and scheduling properties . . . . . . . . . . . . 19 4.3.3. excluded . . . . . . . . . . . . . . . . . . . . . . 22
4.4.1. priority . . . . . . . . . . . . . . . . . . . . . . 19 4.4. Sharing and scheduling properties . . . . . . . . . . . . 22
4.4.2. freeBusyStatus . . . . . . . . . . . . . . . . . . . 19 4.4.1. priority . . . . . . . . . . . . . . . . . . . . . . 22
4.4.3. privacy . . . . . . . . . . . . . . . . . . . . . . . 20 4.4.2. freeBusyStatus . . . . . . . . . . . . . . . . . . . 23
4.4.4. replyTo . . . . . . . . . . . . . . . . . . . . . . . 21 4.4.3. privacy . . . . . . . . . . . . . . . . . . . . . . . 23
4.4.5. participants . . . . . . . . . . . . . . . . . . . . 22 4.4.4. replyTo . . . . . . . . . . . . . . . . . . . . . . . 24
4.4.5. participants . . . . . . . . . . . . . . . . . . . . 25
4.5. Alerts properties . . . . . . . . . . . . . . . . . . . . 25 4.5. Alerts properties . . . . . . . . . . . . . . . . . . . . 28
4.5.1. useDefaultAlerts . . . . . . . . . . . . . . . . . . 25 4.5.1. useDefaultAlerts . . . . . . . . . . . . . . . . . . 28
4.5.2. alerts . . . . . . . . . . . . . . . . . . . . . . . 25 4.5.2. alerts . . . . . . . . . . . . . . . . . . . . . . . 28
5. Type-specific JSCalendar properties . . . . . . . . . . . . . 28 4.6. Multilingual properties . . . . . . . . . . . . . . . . . 31
5.1. JSEvent properties . . . . . . . . . . . . . . . . . . . 28 4.6.1. localizations . . . . . . . . . . . . . . . . . . . . 31
5.1.1. start . . . . . . . . . . . . . . . . . . . . . . . . 28 5. Type-specific JSCalendar properties . . . . . . . . . . . . . 32
5.1.2. timeZone . . . . . . . . . . . . . . . . . . . . . . 28 5.1. JSEvent properties . . . . . . . . . . . . . . . . . . . 32
5.1.3. duration . . . . . . . . . . . . . . . . . . . . . . 28 5.1.1. start . . . . . . . . . . . . . . . . . . . . . . . . 32
5.1.4. isAllDay . . . . . . . . . . . . . . . . . . . . . . 29 5.1.2. timeZone . . . . . . . . . . . . . . . . . . . . . . 32
5.1.5. status . . . . . . . . . . . . . . . . . . . . . . . 29 5.1.3. duration . . . . . . . . . . . . . . . . . . . . . . 32
5.2. JSTask properties . . . . . . . . . . . . . . . . . . . . 29 5.1.4. isAllDay . . . . . . . . . . . . . . . . . . . . . . 33
5.2.1. due . . . . . . . . . . . . . . . . . . . . . . . . . 29 5.1.5. status . . . . . . . . . . . . . . . . . . . . . . . 33
5.2.2. start . . . . . . . . . . . . . . . . . . . . . . . . 29 5.2. JSTask properties . . . . . . . . . . . . . . . . . . . . 33
5.2.3. timeZone . . . . . . . . . . . . . . . . . . . . . . 30 5.2.1. due . . . . . . . . . . . . . . . . . . . . . . . . . 33
5.2.4. estimatedDuration . . . . . . . . . . . . . . . . . . 30 5.2.2. start . . . . . . . . . . . . . . . . . . . . . . . . 34
5.2.5. completed . . . . . . . . . . . . . . . . . . . . . . 30 5.2.3. timeZone . . . . . . . . . . . . . . . . . . . . . . 34
5.2.6. isAllDay . . . . . . . . . . . . . . . . . . . . . . 30 5.2.4. estimatedDuration . . . . . . . . . . . . . . . . . . 34
5.2.7. progress . . . . . . . . . . . . . . . . . . . . . . 31 5.2.5. completed . . . . . . . . . . . . . . . . . . . . . . 34
5.2.8. status . . . . . . . . . . . . . . . . . . . . . . . 31 5.2.6. isAllDay . . . . . . . . . . . . . . . . . . . . . . 34
5.3. JSGroup properties . . . . . . . . . . . . . . . . . . . 32 5.2.7. progress . . . . . . . . . . . . . . . . . . . . . . 35
5.3.1. entries . . . . . . . . . . . . . . . . . . . . . . . 33 5.2.8. status . . . . . . . . . . . . . . . . . . . . . . . 35
5.3.2. source . . . . . . . . . . . . . . . . . . . . . . . 33 5.3. JSGroup properties . . . . . . . . . . . . . . . . . . . 36
6. Conversion from and to iCalendar . . . . . . . . . . . . . . 33 5.3.1. entries . . . . . . . . . . . . . . . . . . . . . . . 37
6.1. JSEvent . . . . . . . . . . . . . . . . . . . . . . . . . 33 5.3.2. source . . . . . . . . . . . . . . . . . . . . . . . 37
6.2. JSTask . . . . . . . . . . . . . . . . . . . . . . . . . 34 6. Conversion from and to iCalendar . . . . . . . . . . . . . . 37
6.3. JSGroup . . . . . . . . . . . . . . . . . . . . . . . . . 36 6.1. JSEvent . . . . . . . . . . . . . . . . . . . . . . . . . 37
6.4. Common properties . . . . . . . . . . . . . . . . . . . . 36 6.2. JSTask . . . . . . . . . . . . . . . . . . . . . . . . . 38
6.5. Locations and participants . . . . . . . . . . . . . . . 38 6.3. JSGroup . . . . . . . . . . . . . . . . . . . . . . . . . 40
6.6. Unknown properties . . . . . . . . . . . . . . . . . . . 41 6.4. Common properties . . . . . . . . . . . . . . . . . . . . 40
7. JSCalendar object examples . . . . . . . . . . . . . . . . . 42 6.5. Locations and participants . . . . . . . . . . . . . . . 43
7.1. Simple event . . . . . . . . . . . . . . . . . . . . . . 42 6.6. Unknown properties . . . . . . . . . . . . . . . . . . . 45
7.2. Simple task . . . . . . . . . . . . . . . . . . . . . . . 42 7. JSCalendar object examples . . . . . . . . . . . . . . . . . 46
7.3. Simple group . . . . . . . . . . . . . . . . . . . . . . 42 7.1. Simple event . . . . . . . . . . . . . . . . . . . . . . 46
7.4. All-day event . . . . . . . . . . . . . . . . . . . . . . 43 7.2. Simple task . . . . . . . . . . . . . . . . . . . . . . . 46
7.5. Task with a due date . . . . . . . . . . . . . . . . . . 43 7.3. Simple group . . . . . . . . . . . . . . . . . . . . . . 46
7.6. Event with end time-zone . . . . . . . . . . . . . . . . 44 7.4. All-day event . . . . . . . . . . . . . . . . . . . . . . 47
7.7. Floating-time event (with recurrence) . . . . . . . . . . 44 7.5. Task with a due date . . . . . . . . . . . . . . . . . . 47
7.8. Event with multiple locations . . . . . . . . . . . . . . 45 7.6. Event with end time-zone . . . . . . . . . . . . . . . . 48
7.9. Recurring event with overrides . . . . . . . . . . . . . 45 7.7. Floating-time event (with recurrence) . . . . . . . . . . 48
7.10. Recurring event with participants . . . . . . . . . . . . 46 7.8. Event with multiple locations and localization . . . . . 49
8. Security Considerations . . . . . . . . . . . . . . . . . . . 48 7.9. Recurring event with overrides . . . . . . . . . . . . . 50
9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 48 7.10. Recurring event with participants . . . . . . . . . . . . 51
10. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 48 8. Security Considerations . . . . . . . . . . . . . . . . . . . 53
11. References . . . . . . . . . . . . . . . . . . . . . . . . . 48 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 53
11.1. Normative References . . . . . . . . . . . . . . . . . . 48 10. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 53
11.2. Informative References . . . . . . . . . . . . . . . . . 50 11. References . . . . . . . . . . . . . . . . . . . . . . . . . 53
11.3. URIs . . . . . . . . . . . . . . . . . . . . . . . . . . 51 11.1. Normative References . . . . . . . . . . . . . . . . . . 53
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 51 11.2. Informative References . . . . . . . . . . . . . . . . . 55
11.3. URIs . . . . . . . . . . . . . . . . . . . . . . . . . . 56
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 56
1. Introduction 1. Introduction
This document defines a data model for calendar event and task This document defines a data model for calendar event and task
objects, or groups of such objects, in electronic calendar objects, or groups of such objects, in electronic calendar
applications and systems. It aims to be unambiguous, extendable and applications and systems. It aims to be unambiguous, extendable and
simple to process. simple to process.
The key design considerations for this data model are as follows: The key design considerations for this data model are as follows:
skipping to change at page 16, line 34 skipping to change at page 17, line 4
4.2.9. color 4.2.9. color
Type: "String|null" Type: "String|null"
Specifies a color clients MAY use when displaying this calendar Specifies a color clients MAY use when displaying this calendar
object. The value is a case-insensitive color name taken from the object. The value is a case-insensitive color name taken from the
CSS3 set of names, defined in Section 4.3 of W3C.REC- CSS3 set of names, defined in Section 4.3 of W3C.REC-
css3-color-20110607 [3] or a CSS3 RGB color hex value. css3-color-20110607 [3] or a CSS3 RGB color hex value.
4.3. Recurrence properties 4.3. Recurrence properties
4.3.1. recurrenceRule 4.3.1. recurrenceRule
Type: "Recurrence" Type: "Recurrence"
Defines a recurrence rule (repeating pattern) for recurring calendar Defines a recurrence rule (repeating pattern) for recurring calendar
objects. objects.
A *Recurrence* object is a JSON object mapping of a RECUR value type A *Recurrence* object is a JSON object mapping of a RECUR value type
in iCalendar, see [RFC5545] and[RFC7529]. Objects recur by applying in iCalendar, see [RFC5545] and[RFC7529]. A JSEvent recurs by
the recurrence rule (and *recurrenceOverrides*) to the *start* date/ applying the recurrence rule (and *recurrenceOverrides*) to the
time. A JSTask (Section 2.2) without a *start* property value recurs *start* date/time. A JSTask recurs by applying the recurrence rule
by its *due* date/time, if defined. (and *recurrenceOverrides*) to its *start* date/time, if defined. If
the task does not define a start date-time, it recurs by its *due*
date-time. If it neither defines a start or due date-time, it MUST
NOT define a *recurrenceRule*.
A Recurrence object has the following properties: A Recurrence object has the following properties:
o *frequency*: "String" This MUST be one of the following values: o *frequency*: "String" This MUST be one of the following values:
* "yearly" * "yearly"
* "monthly" * "monthly"
* "weekly" * "weekly"
* "daily" * "daily"
* "hourly" * "hourly"
* "minutely" * "minutely"
skipping to change at page 18, line 35 skipping to change at page 19, line 10
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. o *until*: "LocalDate"(optional) The UNTIL part from iCalendar.
This MUST NOT be included if a *count* property is specified. This MUST NOT be included if a *count* property is specified.
Note, as in iCalendar, this date is presumed to be in the time- Note, as in iCalendar, this date is presumed to be in the time-
zone specified in *timeZone*. It is not a UTC time. zone specified in *timeZone*. It is not a UTC time.
A recurrence rule specifies a set of set of date-times for recurring
calendar objects. A recurrence rule has the following semantics:
1. A set of candidates is generated. This is every second within a
period defined by the frequency property:
* *yearly*: every second from midnight on the 1st January
(inclusive) to midnight the following 1st January (exclusive)
* *monthly*: every second from midnight on the 1st of a month
(inclusive) to midnight on the 1st of the following month
(exclusive)
* *weekly*: every second from midnight (inclusive) on the first
day of the week (as defined by the firstDayOfWeek property, or
Monday if omitted), to midnight 7 days later (exclusive).
* *daily*: every second from midnight at the start of the day
(inclusive) to midnight at the end of the day (exclusive).
* *hourly*: every second from the beginning of the hour
(inclusive) to the beginning of the next hour (exclusive).
* *minutely*: every second from the beginning of the minute
(inclusive) to the beginning of the next minute (exclusive).
* *secondly*: the second itself, only.
2. Each date-time candidate is compared against all of the byX
properties of the rule except bySetPosition. If any property in
the rule does not match the date-time, it is eliminated. Each
byX property is an array; the date-time matches the property if
it matches any of the values in the array. The properties have
the following semantics:
* *byMonth*: the date-time is in the given month.
* *byMonthDay*: the date-time is on the given day of the month.
Negative numbers mean the nth last day of the month.
* *byDay*: the date-time is on the given day of the week. If
the day is prefixed by a number, it is the nth occurrence of
that day of the week within the month (if frequency is
monthly) or year (if frequency is yearly). Negative numbers
means nth last occurrence within that period.
* *byYearDay*: the date-time is on the nth day of year.
Negative numbers mean the nth last day of the year.
* *byWeekNo*: the date-time is in the nth week of the year.
Negative numbers mean the nth last week of the year. This
corresponds to weeks according to week numbering as defined in
ISO.8601.2004, with a week defined as a seven day period,
starting on the firstDayOfWeek property value or Monday if
omitted. Week number one of the calendar year is the first
week that contains at least four days in that calendar year.
* *byHour*: the date-time has the given hour value.
* *byMinute*: the date-time has the given minute value.
* *bySecond*: the date-time has the given second value.
3. If a bySetPosition property is included, this is now applied to
the ordered list of remaining dates (this property specifies the
indexes of date-times to keep; all others should be eliminated.
Negative numbers are indexes from the end of the list, with -1
being the list item).
4. Any date-times before the start date of the event are eliminated
(see below for why this might be needed).
5. If further dates are required (we have not reached the until
date, or count limit) skip the next (interval - 1) sets of
candidates, then continue from step 1.
When determining the set of occurrence dates for an event or task,
the following extra rules must be applied:
1. The start date-time is always the first occurrence in the
expansion (and is counted if the recurrence is limited by a
"count" property), even if it would normally not match the rule.
2. The first set of candidates to consider is that which would
contain the start date-time. This means the first set may
include candidates before the start; such candidates are
eliminated from the results in step (4) as outlined before.
3. The following properties MUST be implicitly added to the rule
under the given conditions:
* If frequency > "secondly" and no bySecond property: Add a
bySecond property with the sole value being the seconds value
of the start date-time.
* If frequency > "minutely" and no byMinute property: Add a
byMinute property with the sole value being the minutes value
of the start date-time.
* If frequency > "hourly" and no byHour property: Add a byHour
property with the sole value being the hours value of the
start date-time.
* If frequency is "weekly" and no byDay property: Add a byDay
property with the sole value being the day-of-the-week of the
start date-time.
* If frequency is "monthly" and no byDay property and no
byMonthDay property: Add a byMonthDay property with the sole
value being the day-of-the-month of the start date-time.
* If frequency is "yearly" and no byDay, byYearDay or byWeekNo
properties:
+ if there is no byMonthDate property: Add a byMonthDay
property with the sole value being the day-of-the-month of
the start date-time.
+ if there is no byMonth property: Add a byMonth property
with the sole value being the month of the start date-time.
4.3.2. recurrenceOverrides 4.3.2. recurrenceOverrides
Type: "LocalDate[PatchObject|null]|null" Type: "LocalDate[PatchObject|null]|null"
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 either "null", to indicate the occurrence should be occurrence) to an object of patches to apply to the generated
deleted, or an object of patches to apply to the generated occurrence occurrence object.
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 to be "true",
then the recurring calendar object does not occur at the recurrence-
id date-time (like an EXDATE from iCalendar). Such a 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. However, individual properties of the occurrence can new start time of the LocalDate key. However, individual properties
be modified by a patch, or multiple patches. of the occurrence can be modified by a patch, or multiple patches.
It is valid to patch the start property value, and this patch takes
precedence over the LocalDate key. Both the LocalDate key as well as
the patched start date-time may occur 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 NOT start with one of the following
prefixes; any patch with such a key MUST be ignored: prefixes; any patch with such a key MUST be ignored:
o @type o @type
o uid o uid
o relatedTo o relatedTo
skipping to change at page 19, line 28 skipping to change at page 22, line 35
o method o method
o isAllDay o isAllDay
o recurrenceRule o recurrenceRule
o recurrenceOverrides o recurrenceOverrides
o replyTo o replyTo
4.3.3. excluded
Type: "Boolean"(defaults to "false" if omitted)
Defines if this object is an overridden, excluded instance of a
recurring JSCalendar object (also see Section 4.3.2). If this
property value is "true", this calendar object instance MUST be
treated as if not existent.
4.4. Sharing and scheduling properties 4.4. Sharing and scheduling properties
4.4.1. priority 4.4.1. priority
Type: "Number"(defaults to "0" if omitted) Type: "Number"(defaults to "0" if omitted)
Specifies a priority for the calendar object. This may be used as Specifies a priority for the calendar object. This may be used as
part of scheduling systems to help resolve conflicts for a time part of scheduling systems to help resolve conflicts for a time
period. period.
skipping to change at page 21, line 4 skipping to change at page 24, line 16
* description * description
* htmlDescription * htmlDescription
* locations * locations
* links * links
* locale * locale
* localizations
* participants * participants
* replyTo * replyTo
In addition, any patches in "recurrenceOverrides" whose key is In addition, any patches in "recurrenceOverrides" whose key is
prefixed with one of the above properties MUST be stripped. prefixed with one of the above properties MUST be stripped.
o "secret": The object is hidden completely (as though it did not o "secret": The object is hidden completely (as though it did not
exist) when the calendar is shared. exist) when the calendar is shared.
skipping to change at page 21, line 30 skipping to change at page 24, line 45
available methods. The value is a URI to use that method. Future available methods. The value is a URI to use that method. Future
methods may be defined in future specifications; a calendar client methods may be defined in future specifications; a calendar client
MUST ignore any method it does not understand. MUST ignore any method it does not understand.
The following methods are defined: The following methods are defined:
o "imip": The organizer accepts an iMIP [RFC6047] response. The o "imip": The organizer accepts an iMIP [RFC6047] response. The
value MUST be a "mailto:" URI. value MUST be a "mailto:" URI.
o "web": There is a web page where the user may submit an RSVP using o "web": There is a web page where the user may submit an RSVP using
their browser. The value MUST be an "http:" or "https:" URI their browser. The value MUST be a "https:" URI Template
Template ([RFC6570]) in level 1 format. The template MAY contain ([RFC6570]) in level 1 format. The template MAY contain variables
variables that MUST be expanded from the JSCalendar object as that MUST be expanded from the JSCalendar object as defined in
defined in table Table 1. Calendar clients SHOULD be prepared to table Table 1. Calendar clients SHOULD be prepared to handle
handle authentication requests from the respective web page and authentication requests from the respective web page and for the
for the participant email, but this specification does not mandate participant email, but this specification does not mandate any
any specific mechanism. specific mechanism.
+--------------+----------------------------------------------------+ +--------------+----------------------------------------------------+
| Variable | Expand to | | Variable | Expand to |
+--------------+----------------------------------------------------+ +--------------+----------------------------------------------------+
| email | The *email* property value of the replying | | email | The *email* property value of the replying |
| | *Participant* object. | | | *Participant* object. |
| | | | | |
| uid | The *uid* property value of the JSCalendar object. | | uid | The *uid* property value of the JSCalendar object. |
| | | | | |
| sequence | The *sequence* property value of the JSCalendar | | sequence | The *sequence* property value of the JSCalendar |
| | object. | | | object. |
| | | | | |
| recurrenceId | The recurrence-id when replying for a single | | recurrenceId | The recurrence-id when replying for a single |
| | occurrence of a recurring JSCalendar object. The | | | occurrence of a recurring JSCalendar object. The |
| | value is the date-time of the non-overridden start | | | LocalDate-typed value is the recurrence-id of a |
| | as determined by expanding the *recurrenceRule* of | | | non-overriden recurrence, or the key of a |
| | the JSCalendar object. | | | recurrenceOverride of this JSCalendar object. |
+--------------+----------------------------------------------------+ +--------------+----------------------------------------------------+
Table 1: replyTo URI Template variables Table 1: replyTo URI Template variables
4.4.5. participants 4.4.5. participants
Type: "String[Participant]|null" Type: "String[Participant]|null"
A map of participant ids to participants, describing their A map of participant ids to participants, describing their
participation in the calendar object. A participant id may be any participation in the calendar object. A participant id may be any
skipping to change at page 28, line 14 skipping to change at page 31, line 14
the contents of the *attachments* property (e.g. they MUST NOT the contents of the *attachments* property (e.g. they MUST NOT
include a subset of attachments). include a subset of attachments).
An *UnknownAction* object is an object that contains a *type * An *UnknownAction* object is an object that contains a *type *
property whose value is not "email" or "string", plus zero or more property whose value is not "email" or "string", plus zero or more
other properties. This is for compatibility with client other properties. This is for compatibility with client
extensions and future RFCs. The client or server SHOULD NOT extensions and future RFCs. The client or server SHOULD NOT
trigger any type of alert for action types they do not understand, trigger any type of alert for action types they do not understand,
but MUST preserve them. but MUST preserve them.
4.6. Multilingual properties
4.6.1. localizations
Type: "String[PatchObject]|null"
A map of [RFC5646] language tags to patch objects, which localise the
calendar object into the locale of the respective language tag.
See the description of PatchObject (Section 3.2.4) for the structure
of the PatchObject. The patches are applied to the top-level object.
In addition to all the restrictions on patches specified there, the
pointer also MUST NOT start with one of the following prefixes; any
patch with a such a key MUST be ignored:
o @type
o due
o duration
o freeBusyStatus
o localization
o method
o participants
o prodId
o progress
o relatedTo
o sequence
o start
o status
o timeZone
o uid
o useDefaultAlerts
Note that this specification does not define how to maintain validity
of localized content. For example, a client application changing a
JSCalendar object's title property might also need to update any
localizations of this property. Client implementations SHOULD
provide the means to manage localizations, but how to achieve this is
specific to the application's workflow and requirements.
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" e.g. "2015-09-02T00:00:00" Type: "LocalDate" e.g. "2015-09-02T00:00:00"
skipping to change at page 37, line 38 skipping to change at page 41, line 38
| | ([RFC7986]). The *type* property | | | ([RFC7986]). The *type* property |
| | corresponds to the FMTTYPE parameter, the | | | corresponds to the FMTTYPE parameter, the |
| | *size* property to the SIZE parameter. | | | *size* property to the SIZE parameter. |
| | Mapping all other properties is | | | Mapping all other properties is |
| | implementation-specific. | | | implementation-specific. |
| | | | | |
| locale | Corresponds to the LANGUAGE parameter in | | locale | Corresponds to the LANGUAGE parameter in |
| | iCalendar, which is added to individual | | | iCalendar, which is added to individual |
| | properties. When converting from | | | properties. When converting from |
| | iCalendar, one language must be picked as | | | iCalendar, one language must be picked as |
| | the main locale. | | | the main locale for the object, and all |
| | properties in other languages moved to the |
| | localizations JSEvent property. |
| | |
| localizations | Implementation-specific. |
| | | | | |
| locations | See Section 6.5. | | locations | See Section 6.5. |
| | | | | |
| method | Corresponds to the METHOD property in | | method | Corresponds to the METHOD property in |
| | iCalendar. | | | iCalendar. |
| | | | | |
| participants | See Section 6.5. | | participants | See Section 6.5. |
| | | | | |
| priority | Corresponds to the PRIORITY property in | | priority | Corresponds to the PRIORITY property in |
| | iCalendar. | | | iCalendar. |
skipping to change at page 45, line 5 skipping to change at page 49, line 5
{ {
"...": "", "...": "",
"title": "Yoga", "title": "Yoga",
"start": "2018-01-01T07:00:00", "start": "2018-01-01T07:00:00",
"duration": "PT30M", "duration": "PT30M",
"recurrenceRule": { "recurrenceRule": {
"frequency": "daily" "frequency": "daily"
} }
} }
7.8. Event with multiple locations 7.8. Event with multiple locations and localization
This example illustrates an event that happens at both a physical and This example illustrates an event that happens at both a physical and
a virtual location. Fans can see a live convert on premises or a virtual location. Fans can see a live convert on premises or
online. online. The event title and descriptions are localized. (Note: the
localization of the event description contains an UTF-8 encoded
German Umlaut. This character may have been replaced with ASCII
characters in the plain-text rendering of this RFC document)
{ {
"...": "", "...": "",
"title": "Live from Music Bowl: The Band", "title": "Live from Music Bowl: The Band",
"description": "Go see the biggest music event ever!", "description": "Go see the biggest music event ever!",
"locale": "en", "locale": "en",
"start": "2018-07-04T17:00:00", "start": "2018-07-04T17:00:00",
"timeZone": "America/New_York", "timeZone": "America/New_York",
"duration": "PT3H", "duration": "PT3H",
"locations": { "locations": {
skipping to change at page 45, line 35 skipping to change at page 49, line 38
"6f3696c6-1e07-47d0-9ce1-f50014b0041a": { "6f3696c6-1e07-47d0-9ce1-f50014b0041a": {
"name": "Free live Stream from Music Bowl", "name": "Free live Stream from Music Bowl",
"rel": "virtual", "rel": "virtual",
"features": [ "features": [
"video", "video",
"audio", "audio",
"chat" "chat"
], ],
"uri": "https://stream.example.com/the_band_2018" "uri": "https://stream.example.com/the_band_2018"
} }
},
"localizations": {
"de": {
"title": "Live von der Music Bowl: The Band!",
"description": "Schau dir das groesste Musikereignis an!",
"locations/6f3696c6-1e07-47d0-9ce1-f50014b0041a/name":
"Gratis Live-Stream aus der Music Bowl"
}
} }
} }
7.9. Recurring event with overrides 7.9. Recurring event with overrides
This example illustrates the use of recurrence overrides. A math This example illustrates the use of recurrence overrides. A math
course at a University is held for the first time on January 8, 2018 course at a University is held for the first time on January 8, 2018
at 9am London time and occurs every week until June 25, 2018. Each at 9am London time and occurs every week until June 25, 2018. Each
lecture lasts for one hour and 30 minutes and is located at the lecture lasts for one hour and 30 minutes and is located at the
Mathematics department. This event has exceptional occurrences: at Mathematics department. This event has exceptional occurrences: at
the last occurrence of the course is an exam, which lasts for 2 hours the last occurrence of the course is an exam, which lasts for 2 hours
and starts at 10am. Also, the location of the exam differs from the and starts at 10am. Also, the location of the exam differs from the
usual location. On April 2, May 7 and May 28 no course is held. usual location. On April 2 no course is held. On January 5 at 2pm
is an optional introduction course, that occurs before the first
regular lecture.
{ {
"...": "", "...": "",
"title": "Calculus I", "title": "Calculus I",
"start": "2018-01-08T09:00:00", "start": "2018-01-08T09:00:00",
"timeZone": "Europe/London", "timeZone": "Europe/London",
"duration": "PT1H30M", "duration": "PT1H30M",
"locations": { "locations": {
"2a358cee-6489-4f14-a57f-c104db4dc2f1": { "2a358cee-6489-4f14-a57f-c104db4dc2f1": {
"title": "Math lab room 1", "title": "Math lab room 1",
"description": "Math Lab I, Department of Mathematics" "description": "Math Lab I, Department of Mathematics"
} }
}, },
"recurrenceRule": { "recurrenceRule": {
"frequency": "weekly", "frequency": "weekly",
"until": "2018-06-25T09:00:00" "until": "2018-06-25T09:00:00"
}, },
"recurrenceOverrides": { "recurrenceOverrides": {
"2018-04-02T09:00:00": null, "2018-01-05T14:00:00": {
"2018-05-07T09:00:00": null, "title": "Introduction to Calculus I (optional)"
"2018-05-28T09:00:00": null, },
"2018-04-02T09:00:00": {
"excluded": "true"
},
"2018-06-25T09:00:00": { "2018-06-25T09:00:00": {
"title": "Calculus I Exam", "title": "Calculus I Exam",
"start": "2018-06-25T10:00:00", "start": "2018-06-25T10:00:00",
"duration": "PT2H", "duration": "PT2H",
"locations": { "locations": {
"2a358cee-6489-4f14-a57f-c104db4dc2f1": { "2a358cee-6489-4f14-a57f-c104db4dc2f1": {
"title": "Big Auditorium", "title": "Big Auditorium",
"description": "Big Auditorium, Other Road" "description": "Big Auditorium, Other Road"
} }
} }
skipping to change at page 51, line 5 skipping to change at page 56, line 5
[RFC8288] Nottingham, M., "Web Linking", RFC 8288, [RFC8288] Nottingham, M., "Web Linking", RFC 8288,
DOI 10.17487/RFC8288, October 2017, DOI 10.17487/RFC8288, October 2017,
<https://www.rfc-editor.org/info/rfc8288>. <https://www.rfc-editor.org/info/rfc8288>.
11.2. Informative References 11.2. Informative References
[draft-apthorp-ical-tasks] [draft-apthorp-ical-tasks]
"Task Extensions to iCalendar", "Task Extensions to iCalendar",
<https://tools.ietf.org/html/draft-apthorp-ical-tasks>. <https://tools.ietf.org/html/draft-apthorp-ical-tasks>.
[draft-daboo-valarm-extensions]
"VALARM Extensions for iCalendar",
<https://tools.ietf.org/html/
draft-daboo-valarm-extensions>.
[draft-ietf-calext-eventpub-extensions] [draft-ietf-calext-eventpub-extensions]
"Event Publishing Extensions to iCalendar", "Event Publishing Extensions to iCalendar",
<https://tools.ietf.org/html/ <https://tools.ietf.org/html/
draft-ietf-calext-eventpub-extensions>. draft-ietf-calext-eventpub-extensions>.
[draft-ietf-calext-ical-relations] [draft-ietf-calext-ical-relations]
"Support for iCalendar Relationships", "Support for iCalendar Relationships",
<https://tools.ietf.org/html/ <https://tools.ietf.org/html/
draft-ietf-calext-ical-relations>. draft-ietf-calext-ical-relations>.
 End of changes. 27 change blocks. 
98 lines changed or deleted 312 lines changed or added

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