draft-ietf-calext-jscalendar-11.txt   draft-ietf-calext-jscalendar-12.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: June 13, 2019 December 10, 2018 Expires: September 6, 2019 March 5, 2019
JSCalendar: A JSON representation of calendar data JSCalendar: A JSON representation of calendar data
draft-ietf-calext-jscalendar-11 draft-ietf-calext-jscalendar-12
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 June 13, 2019. This Internet-Draft will expire on September 6, 2019.
Copyright Notice Copyright Notice
Copyright (c) 2018 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
carefully, as they describe your rights and restrictions with respect carefully, as they describe your rights and restrictions with respect
to this document. Code Components extracted from this document must to this document. Code Components extracted from this document must
include Simplified BSD License text as described in Section 4.e of include Simplified BSD License text as described in Section 4.e of
the Trust Legal Provisions and are provided without warranty as the Trust Legal Provisions and are provided without warranty as
described in the Simplified BSD License. described in the Simplified BSD License.
Table of Contents Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4
1.1. Relation to the iCalendar format . . . . . . . . . . . . 4 1.1. Relation to the iCalendar format . . . . . . . . . . . . 5
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 . . . . . . . . . . . . . . . . . . . . . 6
2.1. JSEvent . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.1. JSEvent . . . . . . . . . . . . . . . . . . . . . . . . . 6
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 . . . . . . . . . . . . . . . . . . . . . 7 3.1. Type signatures . . . . . . . . . . . . . . . . . . . . . 7
3.2. Data Types . . . . . . . . . . . . . . . . . . . . . . . 7 3.2. Data Types . . . . . . . . . . . . . . . . . . . . . . . 7
3.2.1. UTCDate . . . . . . . . . . . . . . . . . . . . . . . 7 3.2.1. UTCDate . . . . . . . . . . . . . . . . . . . . . . . 7
3.2.2. LocalDate . . . . . . . . . . . . . . . . . . . . . . 7 3.2.2. LocalDate . . . . . . . . . . . . . . . . . . . . . . 7
3.2.3. Duration . . . . . . . . . . . . . . . . . . . . . . 8 3.2.3. Duration . . . . . . . . . . . . . . . . . . . . . . 8
3.2.4. PatchObject . . . . . . . . . . . . . . . . . . . . . 8 3.2.4. PatchObject . . . . . . . . . . . . . . . . . . . . . 8
3.2.5. Identifiers . . . . . . . . . . . . . . . . . . . . . 9 3.2.5. Identifiers . . . . . . . . . . . . . . . . . . . . . 9
3.2.6. Normalization and equivalence . . . . . . . . . . . . 9 3.2.6. Time Zones . . . . . . . . . . . . . . . . . . . . . 9
3.3. Custom property extensions and values . . . . . . . . . . 9 3.2.7. Normalization and equivalence . . . . . . . . . . . . 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 . . . . . . . . . . . . . . . . . . . 11
4.1.1. @type . . . . . . . . . . . . . . . . . . . . . . . . 10 4.1.1. @type . . . . . . . . . . . . . . . . . . . . . . . . 11
4.1.2. uid . . . . . . . . . . . . . . . . . . . . . . . . . 10 4.1.2. uid . . . . . . . . . . . . . . . . . . . . . . . . . 11
4.1.3. relatedTo . . . . . . . . . . . . . . . . . . . . . . 11 4.1.3. relatedTo . . . . . . . . . . . . . . . . . . . . . . 11
4.1.4. prodId . . . . . . . . . . . . . . . . . . . . . . . 11 4.1.4. prodId . . . . . . . . . . . . . . . . . . . . . . . 12
4.1.5. created . . . . . . . . . . . . . . . . . . . . . . . 12 4.1.5. created . . . . . . . . . . . . . . . . . . . . . . . 13
4.1.6. updated . . . . . . . . . . . . . . . . . . . . . . . 12 4.1.6. updated . . . . . . . . . . . . . . . . . . . . . . . 13
4.1.7. sequence . . . . . . . . . . . . . . . . . . . . . . 12 4.1.7. sequence . . . . . . . . . . . . . . . . . . . . . . 13
4.1.8. method . . . . . . . . . . . . . . . . . . . . . . . 12 4.1.8. method . . . . . . . . . . . . . . . . . . . . . . . 13
4.2. What and where properties . . . . . . . . . . . . . . . . 12 4.2. What and where properties . . . . . . . . . . . . . . . . 13
4.2.1. title . . . . . . . . . . . . . . . . . . . . . . . . 12 4.2.1. title . . . . . . . . . . . . . . . . . . . . . . . . 13
4.2.2. description . . . . . . . . . . . . . . . . . . . . . 12 4.2.2. description . . . . . . . . . . . . . . . . . . . . . 13
4.2.3. descriptionContentType . . . . . . . . . . . . . . . 13 4.2.3. descriptionContentType . . . . . . . . . . . . . . . 13
4.2.4. locations . . . . . . . . . . . . . . . . . . . . . . 13 4.2.4. locations . . . . . . . . . . . . . . . . . . . . . . 14
4.2.5. virtualLocations . . . . . . . . . . . . . . . . . . 14 4.2.5. virtualLocations . . . . . . . . . . . . . . . . . . 15
4.2.6. links . . . . . . . . . . . . . . . . . . . . . . . . 14 4.2.6. links . . . . . . . . . . . . . . . . . . . . . . . . 15
4.2.7. locale . . . . . . . . . . . . . . . . . . . . . . . 16 4.2.7. locale . . . . . . . . . . . . . . . . . . . . . . . 16
4.2.8. keywords . . . . . . . . . . . . . . . . . . . . . . 16 4.2.8. keywords . . . . . . . . . . . . . . . . . . . . . . 16
4.2.9. categories . . . . . . . . . . . . . . . . . . . . . 16 4.2.9. categories . . . . . . . . . . . . . . . . . . . . . 17
4.2.10. color . . . . . . . . . . . . . . . . . . . . . . . . 16 4.2.10. color . . . . . . . . . . . . . . . . . . . . . . . . 17
4.3. Recurrence properties . . . . . . . . . . . . . . . . . . 16 4.3. Recurrence properties . . . . . . . . . . . . . . . . . . 17
4.3.1. recurrenceRule . . . . . . . . . . . . . . . . . . . 16 4.3.1. recurrenceRule . . . . . . . . . . . . . . . . . . . 17
4.3.2. recurrenceOverrides . . . . . . . . . . . . . . . . . 22 4.3.2. recurrenceOverrides . . . . . . . . . . . . . . . . . 23
4.3.3. excluded . . . . . . . . . . . . . . . . . . . . . . 23 4.3.3. excluded . . . . . . . . . . . . . . . . . . . . . . 24
4.4. Sharing and scheduling properties . . . . . . . . . . . . 24
4.4. Sharing and scheduling properties . . . . . . . . . . . . 23 4.4.1. priority . . . . . . . . . . . . . . . . . . . . . . 24
4.4.1. priority . . . . . . . . . . . . . . . . . . . . . . 23 4.4.2. freeBusyStatus . . . . . . . . . . . . . . . . . . . 25
4.4.2. freeBusyStatus . . . . . . . . . . . . . . . . . . . 24 4.4.3. privacy . . . . . . . . . . . . . . . . . . . . . . . 25
4.4.3. privacy . . . . . . . . . . . . . . . . . . . . . . . 24 4.4.4. replyTo . . . . . . . . . . . . . . . . . . . . . . . 26
4.4.4. replyTo . . . . . . . . . . . . . . . . . . . . . . . 25
4.4.5. participants . . . . . . . . . . . . . . . . . . . . 26 4.4.5. participants . . . . . . . . . . . . . . . . . . . . 26
4.5. Alerts properties . . . . . . . . . . . . . . . . . . . . 29 4.5. Alerts properties . . . . . . . . . . . . . . . . . . . . 30
4.5.1. useDefaultAlerts . . . . . . . . . . . . . . . . . . 29 4.5.1. useDefaultAlerts . . . . . . . . . . . . . . . . . . 30
4.5.2. alerts . . . . . . . . . . . . . . . . . . . . . . . 29 4.5.2. alerts . . . . . . . . . . . . . . . . . . . . . . . 30
4.6. Multilingual properties . . . . . . . . . . . . . . . . . 31 4.6. Multilingual properties . . . . . . . . . . . . . . . . . 31
4.6.1. localizations . . . . . . . . . . . . . . . . . . . . 31 4.6.1. localizations . . . . . . . . . . . . . . . . . . . . 31
5. Type-specific JSCalendar properties . . . . . . . . . . . . . 32 4.7. Time zone properties . . . . . . . . . . . . . . . . . . 33
5.1. JSEvent properties . . . . . . . . . . . . . . . . . . . 32 4.7.1. timeZones . . . . . . . . . . . . . . . . . . . . . . 33
5.1.1. start . . . . . . . . . . . . . . . . . . . . . . . . 32 5. Type-specific JSCalendar properties . . . . . . . . . . . . . 34
5.1.2. timeZone . . . . . . . . . . . . . . . . . . . . . . 32 5.1. JSEvent properties . . . . . . . . . . . . . . . . . . . 34
5.1.3. duration . . . . . . . . . . . . . . . . . . . . . . 32 5.1.1. start . . . . . . . . . . . . . . . . . . . . . . . . 34
5.1.4. isAllDay . . . . . . . . . . . . . . . . . . . . . . 33 5.1.2. timeZone . . . . . . . . . . . . . . . . . . . . . . 34
5.1.5. status . . . . . . . . . . . . . . . . . . . . . . . 33 5.1.3. duration . . . . . . . . . . . . . . . . . . . . . . 35
5.2. JSTask properties . . . . . . . . . . . . . . . . . . . . 33 5.1.4. isAllDay . . . . . . . . . . . . . . . . . . . . . . 35
5.2.1. due . . . . . . . . . . . . . . . . . . . . . . . . . 33 5.1.5. status . . . . . . . . . . . . . . . . . . . . . . . 35
5.2.2. start . . . . . . . . . . . . . . . . . . . . . . . . 34 5.2. JSTask properties . . . . . . . . . . . . . . . . . . . . 36
5.2.3. timeZone . . . . . . . . . . . . . . . . . . . . . . 34 5.2.1. due . . . . . . . . . . . . . . . . . . . . . . . . . 36
5.2.4. estimatedDuration . . . . . . . . . . . . . . . . . . 34 5.2.2. start . . . . . . . . . . . . . . . . . . . . . . . . 36
5.2.5. statusUpdatedAt . . . . . . . . . . . . . . . . . . . 34 5.2.3. timeZone . . . . . . . . . . . . . . . . . . . . . . 36
5.2.6. isAllDay . . . . . . . . . . . . . . . . . . . . . . 34 5.2.4. estimatedDuration . . . . . . . . . . . . . . . . . . 36
5.2.7. progress . . . . . . . . . . . . . . . . . . . . . . 35 5.2.5. statusUpdatedAt . . . . . . . . . . . . . . . . . . . 36
5.2.8. status . . . . . . . . . . . . . . . . . . . . . . . 35 5.2.6. isAllDay . . . . . . . . . . . . . . . . . . . . . . 37
5.3. JSGroup properties . . . . . . . . . . . . . . . . . . . 36 5.2.7. progress . . . . . . . . . . . . . . . . . . . . . . 37
5.3.1. entries . . . . . . . . . . . . . . . . . . . . . . . 36 5.2.8. status . . . . . . . . . . . . . . . . . . . . . . . 38
5.3.2. source . . . . . . . . . . . . . . . . . . . . . . . 37 5.3. JSGroup properties . . . . . . . . . . . . . . . . . . . 38
6. Conversion from and to iCalendar . . . . . . . . . . . . . . 37 5.3.1. entries . . . . . . . . . . . . . . . . . . . . . . . 39
6.1. JSEvent . . . . . . . . . . . . . . . . . . . . . . . . . 37 5.3.2. source . . . . . . . . . . . . . . . . . . . . . . . 39
6.2. JSTask . . . . . . . . . . . . . . . . . . . . . . . . . 38 6. Conversion from and to iCalendar . . . . . . . . . . . . . . 39
6.3. JSGroup . . . . . . . . . . . . . . . . . . . . . . . . . 40 6.1. JSEvent . . . . . . . . . . . . . . . . . . . . . . . . . 39
6.4. Common properties . . . . . . . . . . . . . . . . . . . . 40 6.2. JSTask . . . . . . . . . . . . . . . . . . . . . . . . . 40
6.5. Locations and participants . . . . . . . . . . . . . . . 42 6.3. JSGroup . . . . . . . . . . . . . . . . . . . . . . . . . 41
6.6. Unknown properties . . . . . . . . . . . . . . . . . . . 45 6.4. Common properties . . . . . . . . . . . . . . . . . . . . 42
7. JSCalendar object examples . . . . . . . . . . . . . . . . . 45 6.5. Locations and participants . . . . . . . . . . . . . . . 44
7.1. Simple event . . . . . . . . . . . . . . . . . . . . . . 45 6.6. Unknown properties . . . . . . . . . . . . . . . . . . . 47
7.2. Simple task . . . . . . . . . . . . . . . . . . . . . . . 46 7. JSCalendar object examples . . . . . . . . . . . . . . . . . 47
7.3. Simple group . . . . . . . . . . . . . . . . . . . . . . 46 7.1. Simple event . . . . . . . . . . . . . . . . . . . . . . 47
7.4. All-day event . . . . . . . . . . . . . . . . . . . . . . 46 7.2. Simple task . . . . . . . . . . . . . . . . . . . . . . . 48
7.5. Task with a due date . . . . . . . . . . . . . . . . . . 47 7.3. Simple group . . . . . . . . . . . . . . . . . . . . . . 48
7.6. Event with end time-zone . . . . . . . . . . . . . . . . 47 7.4. All-day event . . . . . . . . . . . . . . . . . . . . . . 48
7.7. Floating-time event (with recurrence) . . . . . . . . . . 48 7.5. Task with a due date . . . . . . . . . . . . . . . . . . 49
7.8. Event with multiple locations and localization . . . . . 48 7.6. Event with end time-zone . . . . . . . . . . . . . . . . 49
7.9. Recurring event with overrides . . . . . . . . . . . . . 49 7.7. Floating-time event (with recurrence) . . . . . . . . . . 50
7.10. Recurring event with participants . . . . . . . . . . . . 50 7.8. Event with multiple locations and localization . . . . . 50
7.9. Recurring event with overrides . . . . . . . . . . . . . 51
8. Security Considerations . . . . . . . . . . . . . . . . . . . 52 7.10. Recurring event with participants . . . . . . . . . . . . 52
9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 52 8. Security Considerations . . . . . . . . . . . . . . . . . . . 54
10. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 53 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 54
11. References . . . . . . . . . . . . . . . . . . . . . . . . . 53 10. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 55
11.1. Normative References . . . . . . . . . . . . . . . . . . 53 11. References . . . . . . . . . . . . . . . . . . . . . . . . . 55
11.2. Informative References . . . . . . . . . . . . . . . . . 55 11.1. Normative References . . . . . . . . . . . . . . . . . . 55
11.3. URIs . . . . . . . . . . . . . . . . . . . . . . . . . . 56 11.2. Informative References . . . . . . . . . . . . . . . . . 57
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 56 11.3. URIs . . . . . . . . . . . . . . . . . . . . . . . . . . 58
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 58
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 7, line 49 skipping to change at page 8, line 5
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. LocalDate
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: "YYYY-MM-DDTHH:MM:SS". It is otherwise in the same format as UTCDate: "YYYY-MM-DDTHH:MM:SS".
The time zone to associate the LocalDate with comes from an The time zone to associate the LocalDate with comes from an
associated property, or if no time zone is associated it defines associated property, or if no time zone is associated it defines
_floating time_. Floating date-times are not tied to any specific _floating time_. Floating date-times are not tied to any specific
time zone. Instead, they occur in every timezone at the same _wall- time zone. Instead, they occur in every time zone at the same _wall-
clock_ time (as opposed to the same instant point in time). clock_ time (as opposed to the same instant point in time).
3.2.3. Duration 3.2.3. Duration
A duration is represented by a subset of ISO8601 duration format, as A *Duration* is represented by a subset of ISO8601 duration format,
specified by the following ABNF: 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]
dur-time = "T" (dur-hour / dur-minute / dur-second) dur-time = "T" (dur-hour / dur-minute / dur-second)
dur-day = 1*DIGIT "D" dur-day = 1*DIGIT "D"
dur-week = 1*DIGIT "W" dur-week = 1*DIGIT "W"
duration = "P" (dur-day [dur-time] / dur-time / dur-week) duration = "P" (dur-day [dur-time] / dur-time / dur-week)
In addition, the duration MUST NOT include fractional second values In addition, the duration MUST NOT include fractional second values
unless the fraction is non-zero. unless the fraction is non-zero.
A *SignedDuration* is represented as a duration, optionally preceeded
by a sign character. It typically is used to express the offset of a
point in time relative to an associated time. It is specified by the
following ABNF:
signed-duration = (["+"] / "-") duration
A negative sign indicates a point in time at or _before_ the
associated time, a positive or no sign a time at or _after_ the
associated time.
3.2.4. PatchObject 3.2.4. PatchObject
A *PatchObject* is of type "String[*|null]", and represents an A *PatchObject* is of type "String[*|null]", and represents an
unordered set of patches on a JSON object. The keys are a path in a unordered set of patches on a JSON object. The keys are a path in a
subset of [RFC6901] JSON pointer format, with an implicit leading "/" subset of [RFC6901] JSON pointer format, with an implicit leading "/"
(i.e. prefix each key with "/" before applying the JSON pointer (i.e. prefix each key with "/" before applying the JSON pointer
evaluation algorithm). evaluation algorithm).
A patch within a PatchObject is only valid, if all of the following A patch within a PatchObject is only valid, if all of the following
conditions apply: conditions apply:
skipping to change at page 9, line 10 skipping to change at page 9, line 26
o Anything else: The value to replace the inherited property on the o Anything else: The value to replace the inherited property on the
patch object with (if present) or add to the property (if not patch object with (if present) or add to the property (if not
present). present).
Implementations MUST reject a PatchObject if any of its patches are Implementations MUST reject a PatchObject if any of its patches are
invalid. invalid.
3.2.5. Identifiers 3.2.5. Identifiers
If not noted otherwise, properties and object keys that define If not stated otherwise in the respective property definition,
identifiers MUST be string values, MUST be at least 1 character and properties and object keys that define identifiers MUST be string
maximum 256 characters in size, and MUST only contain characters from values, MUST be at least 1 character and maximum 256 characters in
the "URL and Filename safe" Base 64 Alphabet, as defined in section 5 size, and MUST only contain characters from the "URL and Filename
of [RFC4648]. This is the ASCII alphanumeric characters (A-Za-z0-9), safe" Base 64 Alphabet, as defined in section 5 of [RFC4648]. This
hyphen (-), and underscore (_). Note that [RFC7493] requires string is the ASCII alphanumeric characters (A-Za-z0-9), hyphen (-), and
values be encoded in UTF-8, so the maximum size of an identifier underscore (_). Note that [RFC7493] requires string values be
according to this definition is 256 octets. encoded in UTF-8, so the maximum size of an identifier according to
this definition is 256 octets.
3.2.6. Normalization and equivalence . Identifiers in object maps need not be universally unique, e.g. two
calendar objects MAY use the same identifiers in their respective
_links_ properties.
Nevertheless, a UUID typically is a good choice.
3.2.6. Time Zones
By default, time zones in JSCalendar are identified by their name in
the IANA Time Zone Database [1], and the zone rules of the respective
zone record apply.
Implementations MAY embed the definition of custom time zones in the
_timeZones_ property (see Section 4.7.1).
3.2.7. Normalization and equivalence
JSCalendar aims to provide unambiguous definitions for value types JSCalendar aims to provide unambiguous definitions for value types
and properties, but does not define a general normalization or and properties, but does not define a general normalization or
equivalence method for JSCalendar objects and types. This is because equivalence method for JSCalendar objects and types. This is because
the notion of equivalence might range from byte-level equivalence to the notion of equivalence might range from byte-level equivalence to
semantic equivalence, depending on the respective use case (for semantic equivalence, depending on the respective use case (for
example, the CalDAV protocol [RFC4791] requires octet equivalence of example, the CalDAV protocol [RFC4791] requires octet equivalence of
the encoded calendar object to determine ETag equivalence). the encoded calendar object to determine ETag equivalence).
Normalization of JSCalendar objects is hindered because of the Normalization of JSCalendar objects is hindered because of the
skipping to change at page 13, line 21 skipping to change at page 14, line 12
"text", and SHOULD be "text/plain" or "text/html" ([MIME]). They MAY "text", and SHOULD be "text/plain" or "text/html" ([MIME]). They MAY
define parameters and the "charset" parameter MUST be "utf-8", if define parameters and the "charset" parameter MUST be "utf-8", if
specified. Descriptions of type "text/html" MAY contain "cid" URLs specified. Descriptions of type "text/html" MAY contain "cid" URLs
([RFC2392]) to reference links in the calendar object by use of the ([RFC2392]) to reference links in the calendar object by use of the
_cid_ property of the _Link_ object. _cid_ property of the _Link_ object.
4.2.4. locations 4.2.4. locations
Type: "String[Location]" (optional) Type: "String[Location]" (optional)
A map of location ids to Location objects, representing locations A map of location identifiers to Location objects, representing
associated with the object. A location id MUST be unique to this locations associated with the object.
object; a UUID is a practical choice.
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 _rel_. least one other property than _rel_.
o *name*: "String" (optional, default:"") The human-readable name of o *name*: "String" (optional, default:"") The human-readable name of
the location. 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.
skipping to change at page 13, line 48 skipping to change at page 14, line 38
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
server doesn't understand should be treated the same as if this server doesn't understand should be treated the same as if this
property is omitted. property is omitted.
* "start": The JSCalendar object starts at this location. * "start": The JSCalendar object starts at this location.
* "end": The JSCalendar object ends at this location. * "end": The JSCalendar object ends at this location.
o *timeZone*: "String" (optional) A time zone for this location. o *timeZone*: "String" (optional) A time zone for this location.
Also see Section 3.2.6.
o *coordinates*: "String" (optional) An [RFC5870] "geo:" URI for the o *coordinates*: "String" (optional) An [RFC5870] "geo:" URI for the
location. location.
o *linkIds*: "String[Boolean]" (optional) A set of link ids for o *linkIds*: "String[Boolean]" (optional) A set of link ids for
links to alternate representations of this location. Each key in links to alternate representations of this location. Each key in
the set MUST be the identifier of a Link object defined in the the set MUST be the identifier of a Link object defined in the
_links_ property of this calendar object. The value for each key _links_ property of this calendar object. The value for each key
in the set MUST be "true". This MUST be omitted if none (rather in the set MUST be "true". This MUST be omitted if none (rather
than an empty set). than an empty set).
For example, an alternative representation could be in vCard For example, an alternative representation could be in vCard
format. format.
4.2.5. virtualLocations 4.2.5. virtualLocations
Type: "String[VirtualLocation]" (optional) Type: "String[VirtualLocation]" (optional)
A map of ids to VirtualLocation objects, representing virtual A map of identifiers to VirtualLocation objects, representing virtual
locations, such as video conferences or chat rooms, associated with locations, such as video conferences or chat rooms, associated with
the object. A virtual location id MUST be unique to this object; a the object.
UUID is a practical choice.
A *VirtualLocation* object has the following properties. A *VirtualLocation* object has the following properties.
o *name*: "String" (optional, default:"") The human-readable name of o *name*: "String" (optional, default:"") The human-readable name of
the virtual location. the virtual 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.
skipping to change at page 14, line 44 skipping to change at page 15, line 33
virtual location. virtual location.
This may be a telephone number (represented as This may be a telephone number (represented as
"tel:+1-555-555-555") for a teleconference, a web address for "tel:+1-555-555-555") for a teleconference, a web address for
online chat, or any custom URI. online chat, or any custom URI.
4.2.6. links 4.2.6. links
Type: "String[Link]" (optional) Type: "String[Link]" (optional)
A map of link ids to Link objects, representing external resources A map of link identifiers to Link objects, representing external
associated with the object. A link id MUST be unique to this resources associated with the object.
calendar object; a UUID is a practical choice.
A *Link* object has the following properties: A *Link* object has the following properties:
o *href*: "String" A URI from which the resource may be fetched. o *href*: "String" A URI from which the resource may be fetched.
This MAY be a "data:" URL, but it is recommended that the file be This MAY be a "data:" URL, but it is recommended that the file be
hosted on a server to avoid embedding arbitrarily large data in hosted on a server to avoid embedding arbitrarily large data in
JSCalendar object instances. JSCalendar object instances.
o *cid* "String" (optional) This MUST be a valid "content-id" value o *cid* "String" (optional) This MUST be a valid "content-id" value
according to the definition of section 2 in [RFC2392]. The according to the definition of section 2 in [RFC2392]. The
identifier MUST be unique within this JSCalendar object but has no identifier MUST be unique within this JSCalendar object Link
meaning beyond that. Specifically, it MAY be different from the objects but has no meaning beyond that. Specifically, it MAY be
link identifier in the enclosing _links_ property. different from the link identifier in the enclosing _links_
property.
o *type*: "String" (optional) The content-type [RFC6838] of the o *type*: "String" (optional) The content-type [RFC6838] of the
resource, if known. resource, if known.
o *size*: "Number" (optional) The size, in bytes, of the resource o *size*: "Number" (optional) The size, in bytes, of the resource
when fully decoded (i.e. the number of bytes in the file the user when fully decoded (i.e. the number of bytes in the file the user
would download), if known. would download), if known.
o *rel*: "String" (optional) Identifies the relation of the linked o *rel*: "String" (optional) Identifies the relation of the linked
resource to the object. If set, the value MUST be a registered resource to the object. If set, the value MUST be a registered
relation type (see [RFC8288] and IANA Link Relations [1]). relation type (see [RFC8288] and IANA Link Relations [2]).
Links with a rel of "enclosure" SHOULD be considered by the client Links with a rel of "enclosure" SHOULD be considered by the client
as attachments for download. as attachments for download.
Links with a rel of "describedby" SHOULD be considered by the Links with a rel of "describedby" SHOULD be considered by the
client to be an alternate representation of the description. client to be an alternate representation of the description.
Links with a rel of "icon" SHOULD be considered by the client to Links with a rel of "icon" SHOULD be considered by the client to
be an image that it MAY use when presenting the calendar data to a be an image that it MAY use when presenting the calendar data to a
user. The _display_ property MAY be set to indicate the purpose user. The _display_ property MAY be set to indicate the purpose
skipping to change at page 16, line 40 skipping to change at page 17, line 28
categories "http://example.com/categories/sports/american-football"" categories "http://example.com/categories/sports/american-football""
and "http://example.com/categories/music/r-b". and "http://example.com/categories/music/r-b".
4.2.10. color 4.2.10. color
Type: "String" (optional) Type: "String" (optional)
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 [2] 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.
skipping to change at page 17, line 32 skipping to change at page 18, line 22
* "hourly" * "hourly"
* "minutely" * "minutely"
* "secondly" * "secondly"
To convert from iCalendar, simply lower-case the FREQ part. To convert from iCalendar, simply lower-case the FREQ part.
o *interval*: "Number" (optional, default:"1") The INTERVAL part o *interval*: "Number" (optional, default:"1") The INTERVAL part
from iCal. If included, it MUST be an integer "x >= 1". from iCalendar. If included, it MUST be an integer "x >= 1".
o *rscale*: "String" (optional, default:""gregorian"") The RSCALE o *rscale*: "String" (optional, default:""gregorian"") The RSCALE
part from iCalendar RSCALE [RFC7529], converted to lower-case. part from iCalendar RSCALE [RFC7529], converted to lower-case.
o *skip*: "String" (optional, default:""omit"") The SKIP part from o *skip*: "String" (optional, default:""omit"") The SKIP part from
iCalendar RSCALE [RFC7529], converted to lower-case. iCalendar RSCALE [RFC7529], converted to lower-case.
o *firstDayOfWeek*: "String" (optional, default:""mo"") The WKST o *firstDayOfWeek*: "String" (optional, default:""mo"") The WKST
part from iCalendar, represented as a lower-case abbreviated two- part from iCalendar, represented as a lower-case abbreviated two-
letter English day of the week. If included, it MUST be one of letter English day of the week. If included, it MUST be one of
skipping to change at page 18, line 46 skipping to change at page 19, line 35
iCalendar. The array MUST have at least one entry if included. iCalendar. 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. 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: if not specified otherwise for a specific JSCalendar object,
zone specified in _timeZone_. It is not a UTC time. this date is presumed to be in the time zone specified in
_timeZone_. As in iCalendar, the until value bounds the
recurrence rule inclusively. To allow for using the same bound
regardless of the value of the _isAllDay_ property, the _until_
date time MAY include non-zero time components even for all-day
calendar objects.
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: period defined by the frequency property:
skipping to change at page 25, line 38 skipping to change at page 26, line 31
Type: "String[String]" (optional) Type: "String[String]" (optional)
Represents methods by which participants may submit their RSVP Represents methods by which participants may submit their RSVP
response to the organizer of the calendar object. The keys in the response to the organizer of the calendar object. The keys in the
property value are the available methods and MUST only contain ASCII property value are the available methods and MUST only contain ASCII
alphanumeric characters (A-Za-z0-9). The value is a URI to use that alphanumeric characters (A-Za-z0-9). The value is a URI to use that
method. Future methods may be defined in future specifications; a method. Future methods may be defined in future specifications; a
calendar client MUST ignore any method it does not understand, but calendar client MUST ignore any method it does not understand, but
MUST preserve the method key and URI. This property MUST be omitted MUST preserve the method key and URI. This property MUST be omitted
if no method is defined (rather than an empty object). if no method is defined (rather than an empty object). If this
property is set, the _participants_ property of this calendar object
MUST contain at least one participant.
The following methods are defined: The following methods are defined:
o "imip": The organizer accepts an iMIP [RFC6047] response at this o "imip": The organizer accepts an iMIP [RFC6047] response at this
email address. The value MUST be a "mailto:" URI. email address. The value MUST be a "mailto:" URI.
o "web": Opening this URI in a web browser will provide the user o "web": Opening this URI in a web browser will provide the user
with a page where they can submit a reply to the organizer. with a page where they can submit a reply to the organizer.
o "other": The organizer is identified by this URI but the method o "other": The organizer is identified by this URI but the method
how to submit the RSVP is undefined. how to submit the RSVP is undefined.
4.4.5. participants 4.4.5. participants
Type: "String[Participant]" (optional) Type: "String[Participant]" (optional)
A map of participant identifiers to participants, describing their
participation in the calendar object. A UUID or the base-64 encoded
email address of the participant is a good choice for the identifier.
A map of participant ids to participants, describing their If this property is set, then the _replyTo_ property of this calendar
participation in the calendar object. A participant id MUST be object MUST define at least one reply method.
unique to this calendar object; a UUID or the base-64 encoded email
address of the participant is a good choice.
A *Participant* object has the following properties: A *Participant* object has the following properties:
o *name*: "String" (optional) The display name of the participant o *name*: "String" (optional) The display name of the participant
(e.g. "Joe Bloggs"). (e.g. "Joe Bloggs").
o *email*: "String" (optional) The email address for the o *email*: "String" (optional) The email address for the
participant. participant.
o *sendTo*: "String[String]" Represents methods by which the o *sendTo*: "String[String]" Represents methods by which the
skipping to change at page 27, line 4 skipping to change at page 27, line 50
o *kind*: "String" (optional) What kind of entity this participant o *kind*: "String" (optional) What kind of entity this participant
is, if known. is, if known.
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
server doesn't understand should be treated the same as if this server doesn't understand should be treated the same as if this
property is omitted. property is omitted.
* "individual": a single person * "individual": a single person
* "group": a collection of people invited as a whole
* "group": a collection of people invited as a whole
* "resource": a non-human resource, e.g. a projector * "resource": a non-human resource, e.g. a projector
* "location": a physical location involved in the calendar object * "location": a physical location involved in the calendar object
that needs to be scheduled, e.g. a conference room. that needs to be scheduled, e.g. a conference room.
o *roles*: "String[Boolean]" A set of roles that this participant o *roles*: "String[Boolean]" A set of roles that this participant
fulfills. fulfills.
At least one role MUST be specified for the participant. The keys At least one role MUST be specified for the participant. The keys
in the set MUST be either one of the following values, registered in the set MUST be either one of the following values, registered
skipping to change at page 29, line 39 skipping to change at page 30, line 36
_alerts_ property. Fetching user defaults is dependent on the API _alerts_ property. Fetching user defaults is dependent on the API
from which this JSCalendar object is being fetched, and is not from which this JSCalendar object is being fetched, and is not
defined in this specification. If an implementation cannot determine defined in this specification. If an implementation cannot determine
the user's default alerts, or none are set, it MUST process the the user's default alerts, or none are set, it MUST process the
alerts property as if useDefaultAlerts is set to "false". alerts property as if useDefaultAlerts is set to "false".
4.5.2. alerts 4.5.2. alerts
Type: "String[Alert]" (optional) Type: "String[Alert]" (optional)
A map of alert ids to Alert objects, representing alerts/reminders to A map of alert identifiers to Alert objects, representing alerts/
display or send the user for this calendar object. The id MUST be reminders to display or send the user for this calendar object.
unique to this calendar object; a UUID is a practical choice.
An *Alert* Object has the following properties: An *Alert* Object has the following properties:
o *relativeTo*: "String" (optional, default:"before-start") o *offset*: "SignedDuration" Defines when to trigger the alert,
Specifies where the offset is relative to for the alarm to relative to the time property defined in the _relativeTo_
trigger. The value MUST be one of: property. If the calendar object does not define a time zone, the
user's default time zone SHOULD be used when determining the
* "before-start" offset, if known. Otherwise, the time zone to use is
implementation specific.
* "after-start" o *relativeTo*: "String" (optional, default:"start") Specifies the
* "before-end" time property which the alert _offset_ is relative to. The value
MUST be one of:
* "after-end" * "start": triggers the alert relative to the start of the
calendar object
o *offset*: "Duration" The offset from the start and end/due of the * "end": triggers the alert relative to the end/due time of the
calendar object to fire the alert. If the calendar object does calendar object
not define a time zone, the user's default time zone SHOULD be
used when determining the offset, if known. Otherwise, the time
zone to use is implementation specific.
o *acknowledged*: "UTCDate" (optional) o *acknowledged*: "UTCDate" (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
skipping to change at page 32, line 4 skipping to change at page 32, line 42
o start o start
o status o status
o timeZone o timeZone
o uid o uid
o useDefaultAlerts o useDefaultAlerts
Note that this specification does not define how to maintain validity Note that this specification does not define how to maintain validity
of localized content. For example, a client application changing a of localized content. For example, a client application changing a
JSCalendar object's title property might also need to update any JSCalendar object's title property might also need to update any
localizations of this property. Client implementations SHOULD localizations of this property. Client implementations SHOULD
provide the means to manage localizations, but how to achieve this is provide the means to manage localizations, but how to achieve this is
specific to the application's workflow and requirements. specific to the application's workflow and requirements.
4.7. Time zone properties
4.7.1. timeZones
Type: "String[TimeZone]" (optional)
Maps identifiers of custom time zones to their time zone definition.
The following restrictions apply for each key in the map:
o It MUST start with the "/" character (ASCII decimal 47; also see
sections 3.2.19 of [RFC5545] and 3.6. of [RFC7808] for discussion
of the forward slash character in time zone identifiers).
o It MUST be a valid _paramtext_ value as specified in section 3.1.
of [RFC5545].
o At least one other property in the same JSCalendar object MUST
reference a time zone using this identifier (i.e. orphaned time
zones are not allowed).
An identifier need only be unique to this JSCalendar object.
A *TimeZone* object maps a VTIMEZONE component from iCalendar
([RFC5545]). A valid time zone MUST define at least one transition
rule in the _standard_ or _daylight_ property. Its properties are:
o *tzId*: "String" The TZID property from iCalendar.
o *lastModified*: "UTCDate" (optional) The LAST-MODIFIED property
from iCalendar.
o *url*: "String" (optional) The TZURL property from iCalendar.
o *validUntil*: "UTCDate" (optional) The TZUNTIL property from
iCalendar specified in [RFC7808].
o *aliases*: "String[Boolean]" Maps the TZID-ALIAS-OF properties
from iCalendar specified in [RFC7808] to a JSON set of 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".
o *standard*: "TimeZoneRule[]" (optional) The STANDARD sub-
components from iCalendar. The order MUST be preserved during
conversion.
o *daylight*: "TimeZoneRule[]" (optional) The DAYLIGHT sub-
components from iCalendar. The order MUST be preserved during
conversion.
A *TimeZoneRule* object maps a STANDARD or DAYLIGHT sub-component
from iCalendar, with the restriction that _at most one_ recurrence
rule is allowed per rule. It has the following properties:
o *start*: "LocalDate" The DTSTART property from iCalendar.
o *offsetTo*: "String" The TZOFFSETTO property from iCalendar.
o *offsetFrom*: "String" The TZOFFSETFROM property from iCalendar.
o *recurrenceRule*: "RecurrenceRule" (optional) The RRULE property
mapped as specified in Section 4.3.1. During recurrence rule
evaluation, the _until_ property value MUST be interpreted as a
local time in the UTC time zone.
o *recurrenceDates*: "LocalDate[Boolean]" (optional) Maps the RDATE
properties from iCalendar to a JSON set. The set is represented
as an object, with the keys being the recurrence dates. The value
for each key in the set MUST be "true".
o *names*: "String[Boolean]" (optional) Maps the TZNAME properties
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
the set MUST be "true".
o *comments*: "String[]" (optional) Maps the COMMENT properties from
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" e.g. "2015-09-02T00:00:00" Type: "LocalDate" e.g. "2015-09-02T00:00:00"
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.
A valid JSEvent MUST include this property. A valid JSEvent MUST include this property.
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
The IANA Time Zone Database [3] name for the time zone the event is floating time. If omitted, this MUST be presumed to be "null" (i.e.
scheduled in, or "null" for floating time. If omitted, this MUST be floating time). Also see Section 3.2.6.
presumed to be "null" (i.e. floating time).
5.1.3. duration 5.1.3. duration
Type: "Duration", e.g. "P2DT3H" (optional, default: "PT0S") Type: "Duration", e.g. "P2DT3H" (optional, default: "PT0S")
The zero or positive duration of the event in the event's start time The zero or positive duration of the event in the event's start time
zone. The same rules as for the iCalendar DURATION value type zone. The same rules as for the iCalendar DURATION value type
([RFC5545]) apply: The duration of a week or a day in hours/minutes/ ([RFC5545]) apply: The duration of a week or a day in hours/minutes/
seconds may vary if it overlaps a period of discontinuity in the seconds may vary if it overlaps a period of discontinuity in the
event's time zone, for example a change from standard time to event's time zone, for example a change from standard time to
skipping to change at page 33, line 18 skipping to change at page 35, line 40
Type: "Boolean" (optional, default:"false") Type: "Boolean" (optional, default:"false")
Specifies if the event is an all day event, such as a birthday or Specifies if the event is an all day event, such as a birthday or
public holiday. public holiday.
If _isAllDay_ is true, then the following restrictions apply: If _isAllDay_ is true, then the following restrictions apply:
o the _start_ property MUST have a time component of "T00:00:00". o the _start_ property MUST have a time component of "T00:00:00".
o the _timeZone_ property MUST be "null"
o the _duration_ property MUST NOT include non-zero time components o the _duration_ property MUST NOT include non-zero time components
(hours, minutes, or seconds). (hours, minutes, or seconds)
Note that all-day events MAY be bound to a specific time zone, as o the _freeBusyStatus_ property MUST NOT be "busy"
defined by the _timeZone_ property.
5.1.5. status 5.1.5. status
Type: "String" (optional, default:"confirmed") Type: "String" (optional, default:"confirmed")
The scheduling status (Section 4.4) of a JSEvent. If set, it MUST be The scheduling status (Section 4.4) of a JSEvent. If set, it MUST be
one of: one of:
o "confirmed": Indicates the event is definite. o "confirmed": Indicates the event is definite.
o "cancelled": Indicates the event is cancelled. o "cancelled": Indicates the event is cancelled.
o "tentative": Indicates the event is tentative. o "tentative": Indicates the event is tentative.
5.2. JSTask properties 5.2. JSTask properties
skipping to change at page 34, line 15 skipping to change at page 36, line 34
5.2.2. start 5.2.2. start
Type: "LocalDate" (optional) e.g. "2015-09-02T00:00:00" Type: "LocalDate" (optional) e.g. "2015-09-02T00:00:00"
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")
The IANA Time Zone Database name for the time zone the task is Identifies the time zone the task is scheduled in, or "null" for
scheduled in, or "null" for floating time. If omitted, this MUST be floating time. If omitted, this MUST be presumed to be "null" (i.e.
presumed to be "null" (i.e. floating time). floating time). Also see Section 3.2.6.
5.2.4. estimatedDuration 5.2.4. estimatedDuration
Type: "Duration" (optional), e.g. "P2DT3H" Type: "Duration" (optional), e.g. "P2DT3H"
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
skipping to change at page 34, line 48 skipping to change at page 37, line 21
to split the JSTask into a current, single instance of JSTask with to split the JSTask into a current, single instance of JSTask with
this instance status update time and a future recurring instance. this instance status update time and a future recurring instance.
Also see the definition of the _relatedTo_ on splitting. Also see the definition of the _relatedTo_ on splitting.
5.2.6. isAllDay 5.2.6. isAllDay
Type: "Boolean" (optional, default:"false") Type: "Boolean" (optional, default:"false")
Specifies if the task is an all day task. Specifies if the task is an all day task.
If _isAllDay_ is true, then the _start_ and _due_ properties MUST If _isAllDay_ is true, then the following restrictions apply:
have a time component of "T00:00:00". Note that the
_estimatedDuration_ property MAY contain a non-zero time duration. o the _start_ and _due_ properties MUST have a time component of
All-day tasks MAY be bound to a specific time zone, as defined by the "T00:00:00", or not be set
_timeZone_ property.
o the _timeZone_ property MUST be "null"
o the _freeBusyStatus_ property MUST NOT be "busy"
5.2.7. progress 5.2.7. progress
In addition to the common properties of a _Participant_ object In addition to the common properties of a _Participant_ object
(Section 4.4.5), a Participant within a JSTask supports the following (Section 4.4.5), a Participant within a JSTask supports the following
property: property:
o *progress*: "ParticipantProgress" (optional) The progress of the o *progress*: "ParticipantProgress" (optional) The progress of the
participant for this task, if known. This property MUST NOT be participant for this task, if known. This property MUST NOT be
set if the _participationStatus_ of this participant is any other set if the _participationStatus_ of this participant is any other
skipping to change at page 37, line 31 skipping to change at page 40, line 9
The iCalendar counterpart to _JSEvent_ is the VEVENT component type The iCalendar counterpart to _JSEvent_ is the VEVENT component type
[RFC5545]. A VEVENT component that is a direct child of a VCALENDAR [RFC5545]. A VEVENT component that is a direct child of a VCALENDAR
component is equivalent to a standalone JSEvent. A VEVENT component component is equivalent to a standalone JSEvent. A VEVENT component
within a VEVENT maps to the entries of the JSEvent within a VEVENT maps to the entries of the JSEvent
_recurrenceOverrides_ property. _recurrenceOverrides_ property.
+----------+--------------------------------------------------------+ +----------+--------------------------------------------------------+
| Property | iCalendar counterpart | | Property | iCalendar counterpart |
+----------+--------------------------------------------------------+ +----------+--------------------------------------------------------+
| isAllDay | True, if the type of the DTSTART property in iCalendar | | isAllDay | True, if the type of the DTSTART property in iCalendar |
| | is DATE. When translating from JSCalendar the | | | is DATE. |
| | iCalendar DTSTART property is of DATE value type, if |
| | the _isAllDay_ property is set to true and the |
| | _timeZone_ property is null. |
| | | | | |
| start | Corresponds to the DTSTART property in iCalendar. Note | | start | Corresponds to the DTSTART property in iCalendar. Note |
| | that time zone information is stored separately in | | | that time zone information is stored separately in |
| | JSEvent. | | | JSEvent. |
| | | | | |
| timeZone | Corresponds to the TZID part of the DTSTART property | | timeZone | Corresponds to the TZID part of the DTSTART property |
| | in iCalendar. If the event has a different end time | | | in iCalendar. If the event has a different end time |
| | zone to start time zone, this should be added as a | | | zone to start time zone, this should be added as a |
| | JSCalendar _location_ with just a _timeZone_ property | | | JSCalendar _location_ with just a _timeZone_ property |
| | and "rel="end"". | | | and "rel="end"". |
skipping to change at page 39, line 9 skipping to change at page 41, line 9
The iCalendar counterpart to _JSTask_ is the VTODO component type The iCalendar counterpart to _JSTask_ is the VTODO component type
[RFC5545]. A VTODO component that is a direct child of a VCALENDAR [RFC5545]. A VTODO component that is a direct child of a VCALENDAR
component is equivalent to a standalone JSTask. A VTODO component component is equivalent to a standalone JSTask. A VTODO component
within a master VTODO maps to the entries of the JSTask within a master VTODO maps to the entries of the JSTask
_recurrenceOverrides_ property. _recurrenceOverrides_ property.
+-------------------+-----------------------------------------------+ +-------------------+-----------------------------------------------+
| Property | iCalendar counterpart | | Property | iCalendar counterpart |
+-------------------+-----------------------------------------------+ +-------------------+-----------------------------------------------+
| isAllDay | True, if the type of the DTSTART property in | | isAllDay | True, if the type of the DTSTART property in |
| | iCalendar is DATE. When translating from | | | iCalendar is DATE. |
| | JSCalendar the iCalendar DTSTART property is |
| | of DATE value type, if the _isAllDay_ |
| | property is set to true and the _timeZone_ |
| | property is null. |
| | | | | |
| due | Corresponds to the DUE and DTSTART+DURATION | | due | Corresponds to the DUE and DTSTART+DURATION |
| | properties in iCalendar. When mapping | | | properties in iCalendar. When mapping |
| | iCalendar VTODOs with DTSTART+DURATION, the | | | iCalendar VTODOs with DTSTART+DURATION, the |
| | due date is the result of adding DURATION to | | | due date is the result of adding DURATION to |
| | DTSTART in the DTSTART time zone. | | | DTSTART in the DTSTART time zone. |
| | | | | |
| start | Corresponds to the DTSTART property in | | start | Corresponds to the DTSTART property in |
| | iCalendar. | | | iCalendar. |
| | | | | |
skipping to change at page 41, line 9 skipping to change at page 43, line 4
| | and its ALTREP parameters in iCalendar. | | | and its ALTREP parameters in iCalendar. |
| | | | | |
| descriptionContentType | Implementation-specific. | | descriptionContentType | Implementation-specific. |
| | | | | |
| freeBusyStatus | Corresponds to the TRANSP property in | | freeBusyStatus | Corresponds to the TRANSP property in |
| | iCalendar. | | | iCalendar. |
| | | | | |
| keywords | Corresponds to the CATEGORIES property | | keywords | Corresponds to the CATEGORIES property |
| | in iCalendar, as specified in [RFC7986]. | | | in iCalendar, as specified in [RFC7986]. |
| | | | | |
| links | Corresponds to the ATTACH ([RFC5545]) or | | links | Use the ATTACH ([RFC5545]), URL or IMAGE |
| | IMAGE ([RFC7986]) properties with a URI | | | ([RFC7986]) property values of URI value |
| | value type set to the link "href". | | | type as the Link _href_. The Link |
| | ([RFC7986]). The _type_ property | | | _type_ property corresponds to the |
| | corresponds to the FMTTYPE parameter, | | | FMTTYPE parameter, the _size_ property |
| | the _size_ property to the SIZE | | | to the SIZE parameter. Mapping all |
| | parameter. Mapping all other properties | | | other properties is implementation- |
| | is implementation-specific. | | | 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 | | | iCalendar, one language must be picked |
| | as the main locale for the object, and | | | as the main locale for the object, and |
| | all properties in other languages moved | | | all properties in other languages moved |
| | to the localizations JSEvent property. | | | to the localizations JSEvent property. |
| | | | | |
| localizations | Implementation-specific. | | localizations | Implementation-specific. |
skipping to change at page 41, line 50 skipping to change at page 43, line 45
| | | | | |
| prodId | Corresponds to the PRODID property in | | prodId | Corresponds to the PRODID property in |
| | iCalendar. | | | iCalendar. |
| | | | | |
| recurrenceOverrides | Corresponds to the RDATE and EXDATE | | recurrenceOverrides | Corresponds to the RDATE and EXDATE |
| | properties in iCalendar, plus VEVENT | | | properties in iCalendar, plus VEVENT |
| | (for JSEvent) or VTODO (for JSTask) | | | (for JSEvent) or VTODO (for JSTask) |
| | instances with a recurrence-id. | | | instances with a recurrence-id. |
| | | | | |
| recurrenceRule | Corresponds to the RRULE property in | | recurrenceRule | Corresponds to the RRULE property in |
| | iCalendar. See the property definition | | | iCalendar. For all-day calendar objects, |
| | at section Section 4.3.1 how to map a | | | convert the _until_ property value to an |
| | RRULE value. | | | iCalendar DATE (effectively removing the |
| | time component). To convert a DATE-typed |
| | UNTIL from iCalendar, set the time |
| | components of the LocalDate value to |
| | "23:59:59". If the iCalendar UNTIL value |
| | is a UTC date time, convert to the local |
| | time in the calendar object time zone. |
| | | | | |
| relatedTo | Corresponds to the RELATED-TO property | | relatedTo | Corresponds to the RELATED-TO property |
| | in iCalendar. | | | in iCalendar. |
| | | | | |
| replyTo | An iCalendar ORGANIZER with a mailto: | | replyTo | An iCalendar ORGANIZER with a mailto: |
| | URI mapped to the "imip" method, or any | | | URI mapped to the "imip" method, or any |
| | other URI mapped to the "other" method. | | | other URI mapped to the "other" method. |
| | Mapping multiple methods is | | | Mapping multiple methods is |
| | implementation-specific. | | | implementation-specific. |
| | | | | |
skipping to change at page 55, line 29 skipping to change at page 57, line 29
[RFC7493] Bray, T., Ed., "The I-JSON Message Format", RFC 7493, [RFC7493] Bray, T., Ed., "The I-JSON Message Format", RFC 7493,
DOI 10.17487/RFC7493, March 2015, DOI 10.17487/RFC7493, March 2015,
<https://www.rfc-editor.org/info/rfc7493>. <https://www.rfc-editor.org/info/rfc7493>.
[RFC7529] Daboo, C. and G. Yakushev, "Non-Gregorian Recurrence Rules [RFC7529] Daboo, C. and G. Yakushev, "Non-Gregorian Recurrence Rules
in the Internet Calendaring and Scheduling Core Object in the Internet Calendaring and Scheduling Core Object
Specification (iCalendar)", RFC 7529, Specification (iCalendar)", RFC 7529,
DOI 10.17487/RFC7529, May 2015, DOI 10.17487/RFC7529, May 2015,
<https://www.rfc-editor.org/info/rfc7529>. <https://www.rfc-editor.org/info/rfc7529>.
[RFC7808] Douglass, M. and C. Daboo, "Time Zone Data Distribution
Service", RFC 7808, DOI 10.17487/RFC7808, March 2016,
<https://www.rfc-editor.org/info/rfc7808>.
[RFC7986] Daboo, C., "New Properties for iCalendar", RFC 7986, [RFC7986] Daboo, C., "New Properties for iCalendar", RFC 7986,
DOI 10.17487/RFC7986, October 2016, DOI 10.17487/RFC7986, October 2016,
<https://www.rfc-editor.org/info/rfc7986>. <https://www.rfc-editor.org/info/rfc7986>.
[RFC8259] Bray, T., Ed., "The JavaScript Object Notation (JSON) Data [RFC8259] Bray, T., Ed., "The JavaScript Object Notation (JSON) Data
Interchange Format", STD 90, RFC 8259, Interchange Format", STD 90, RFC 8259,
DOI 10.17487/RFC8259, December 2017, DOI 10.17487/RFC8259, December 2017,
<https://www.rfc-editor.org/info/rfc8259>. <https://www.rfc-editor.org/info/rfc8259>.
[RFC8288] Nottingham, M., "Web Linking", RFC 8288, [RFC8288] Nottingham, M., "Web Linking", RFC 8288,
skipping to change at page 56, line 10 skipping to change at page 58, line 15
[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>.
[MIME] "IANA Media Types", <https://www.iana.org/assignments/ [MIME] "IANA Media Types", <https://www.iana.org/assignments/
media-types/media-types.xhtml>. media-types/media-types.xhtml>.
11.3. URIs 11.3. URIs
[1] https://www.iana.org/assignments/link-relations/link- [1] https://www.iana.org/time-zones
relations.xhtml
[2] https://www.w3.org/TR/2011/REC-css3-color-20110607/#svg-color [2] https://www.iana.org/assignments/link-relations/link-
relations.xhtml
[3] http://www.iana.org/time zones [3] https://www.w3.org/TR/2011/REC-css3-color-20110607/#svg-color
Authors' Addresses Authors' Addresses
Neil Jenkins Neil Jenkins
FastMail FastMail
PO Box 234 PO Box 234
Collins St West Collins St West
Melbourne VIC 8007 Melbourne VIC 8007
Australia Australia
 End of changes. 55 change blocks. 
174 lines changed or deleted 291 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/