draft-ietf-calext-jscalendar-18.txt   draft-ietf-calext-jscalendar-19.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: January 24, 2020 July 23, 2019 Expires: April 5, 2020 October 3, 2019
JSCalendar: A JSON representation of calendar data JSCalendar: A JSON representation of calendar data
draft-ietf-calext-jscalendar-18 draft-ietf-calext-jscalendar-19
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 calendaring and scheduling environment. It aims to be an
alternative, and over time successor to, the widely deployed alternative, and over time successor to, the widely deployed
iCalendar data format and to be unambiguous, extendable and simple to iCalendar data format and to be unambiguous, extendable and simple to
process. In contrast to the JSON-based jCal format, it is not a process. In contrast to the JSON-based jCal format, it is not a
direct mapping from iCalendar and expands semantics where direct mapping from iCalendar and expands semantics where
skipping to change at page 1, line 37 skipping to change at page 1, line 37
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 January 24, 2020. This Internet-Draft will expire on April 5, 2020.
Copyright Notice Copyright Notice
Copyright (c) 2019 IETF Trust and the persons identified as the Copyright (c) 2019 IETF Trust and the persons identified as the
document authors. All rights reserved. document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents Provisions Relating to IETF Documents
(https://trustee.ietf.org/license-info) in effect on the date of (https://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents publication of this document. Please review these documents
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. Motivation and Relation to iCalendar and jCal . . . . . . 5 1.1. Motivation and Relation to iCalendar and jCal . . . . . . 5
1.2. Notational Conventions . . . . . . . . . . . . . . . . . 5 1.2. Notational Conventions . . . . . . . . . . . . . . . . . 6
1.3. Type Signatures . . . . . . . . . . . . . . . . . . . . . 6 1.3. Type Signatures . . . . . . . . . . . . . . . . . . . . . 6
1.4. Data Types . . . . . . . . . . . . . . . . . . . . . . . 6 1.4. Data Types . . . . . . . . . . . . . . . . . . . . . . . 7
1.4.1. Int . . . . . . . . . . . . . . . . . . . . . . . . . 6 1.4.1. Int . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.4.2. UnsignedInt . . . . . . . . . . . . . . . . . . . . . 6 1.4.2. UnsignedInt . . . . . . . . . . . . . . . . . . . . . 7
1.4.3. UTCDateTime . . . . . . . . . . . . . . . . . . . . . 7 1.4.3. UTCDateTime . . . . . . . . . . . . . . . . . . . . . 7
1.4.4. LocalDateTime . . . . . . . . . . . . . . . . . . . . 7 1.4.4. LocalDateTime . . . . . . . . . . . . . . . . . . . . 7
1.4.5. Duration . . . . . . . . . . . . . . . . . . . . . . 7 1.4.5. Duration . . . . . . . . . . . . . . . . . . . . . . 7
1.4.6. SignedDuration . . . . . . . . . . . . . . . . . . . 8 1.4.6. SignedDuration . . . . . . . . . . . . . . . . . . . 8
1.4.7. Id . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.4.7. Id . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.4.8. PatchObject . . . . . . . . . . . . . . . . . . . . . 8 1.4.8. PatchObject . . . . . . . . . . . . . . . . . . . . . 9
1.4.9. Time Zones . . . . . . . . . . . . . . . . . . . . . 9 1.4.9. Time Zones . . . . . . . . . . . . . . . . . . . . . 9
2. JSCalendar Objects . . . . . . . . . . . . . . . . . . . . . 9 1.4.10. Relation . . . . . . . . . . . . . . . . . . . . . . 9
2.1. JSEvent . . . . . . . . . . . . . . . . . . . . . . . . . 9 2. JSCalendar Objects . . . . . . . . . . . . . . . . . . . . . 10
2.2. JSTask . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.1. JSEvent . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.3. JSGroup . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.2. JSTask . . . . . . . . . . . . . . . . . . . . . . . . . 11
3. Structure of JSCalendar Objects . . . . . . . . . . . . . . . 10 2.3. JSGroup . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.1. Normalization and Equivalence . . . . . . . . . . . . . . 10 3. Structure of JSCalendar Objects . . . . . . . . . . . . . . . 11
3.2. Custom Property Extensions and Values . . . . . . . . . . 11 3.1. Normalization and Equivalence . . . . . . . . . . . . . . 11
4. Common JSCalendar Properties . . . . . . . . . . . . . . . . 11 3.2. Vendor-specific Property Extensions and Values . . . . . 12
4.1. Metadata Properties . . . . . . . . . . . . . . . . . . . 11 4. Common JSCalendar Properties . . . . . . . . . . . . . . . . 12
4.1.1. @type . . . . . . . . . . . . . . . . . . . . . . . . 11 4.1. Metadata Properties . . . . . . . . . . . . . . . . . . . 12
4.1.2. uid . . . . . . . . . . . . . . . . . . . . . . . . . 12 4.1.1. @type . . . . . . . . . . . . . . . . . . . . . . . . 12
4.1.3. relatedTo . . . . . . . . . . . . . . . . . . . . . . 12 4.1.2. uid . . . . . . . . . . . . . . . . . . . . . . . . . 13
4.1.3. relatedTo . . . . . . . . . . . . . . . . . . . . . . 13
4.1.4. prodId . . . . . . . . . . . . . . . . . . . . . . . 13 4.1.4. prodId . . . . . . . . . . . . . . . . . . . . . . . 13
4.1.5. created . . . . . . . . . . . . . . . . . . . . . . . 13 4.1.5. created . . . . . . . . . . . . . . . . . . . . . . . 14
4.1.6. updated . . . . . . . . . . . . . . . . . . . . . . . 13 4.1.6. updated . . . . . . . . . . . . . . . . . . . . . . . 14
4.1.7. sequence . . . . . . . . . . . . . . . . . . . . . . 13 4.1.7. sequence . . . . . . . . . . . . . . . . . . . . . . 14
4.1.8. method . . . . . . . . . . . . . . . . . . . . . . . 14 4.1.8. method . . . . . . . . . . . . . . . . . . . . . . . 14
4.2. What and Where Properties . . . . . . . . . . . . . . . . 14 4.2. What and Where Properties . . . . . . . . . . . . . . . . 14
4.2.1. title . . . . . . . . . . . . . . . . . . . . . . . . 14 4.2.1. title . . . . . . . . . . . . . . . . . . . . . . . . 14
4.2.2. description . . . . . . . . . . . . . . . . . . . . . 14 4.2.2. description . . . . . . . . . . . . . . . . . . . . . 14
4.2.3. descriptionContentType . . . . . . . . . . . . . . . 14 4.2.3. descriptionContentType . . . . . . . . . . . . . . . 15
4.2.4. showWithoutTime . . . . . . . . . . . . . . . . . . . 14 4.2.4. showWithoutTime . . . . . . . . . . . . . . . . . . . 15
4.2.5. locations . . . . . . . . . . . . . . . . . . . . . . 15 4.2.5. locations . . . . . . . . . . . . . . . . . . . . . . 15
4.2.6. virtualLocations . . . . . . . . . . . . . . . . . . 16 4.2.6. virtualLocations . . . . . . . . . . . . . . . . . . 16
4.2.7. links . . . . . . . . . . . . . . . . . . . . . . . . 16 4.2.7. links . . . . . . . . . . . . . . . . . . . . . . . . 17
4.2.8. locale . . . . . . . . . . . . . . . . . . . . . . . 18 4.2.8. locale . . . . . . . . . . . . . . . . . . . . . . . 19
4.2.9. keywords . . . . . . . . . . . . . . . . . . . . . . 18 4.2.9. keywords . . . . . . . . . . . . . . . . . . . . . . 19
4.2.10. categories . . . . . . . . . . . . . . . . . . . . . 18 4.2.10. categories . . . . . . . . . . . . . . . . . . . . . 19
4.2.11. color . . . . . . . . . . . . . . . . . . . . . . . . 18 4.2.11. color . . . . . . . . . . . . . . . . . . . . . . . . 19
4.3. Recurrence Properties . . . . . . . . . . . . . . . . . . 19 4.3. Recurrence Properties . . . . . . . . . . . . . . . . . . 19
4.3.1. recurrenceId . . . . . . . . . . . . . . . . . . . . 19 4.3.1. recurrenceId . . . . . . . . . . . . . . . . . . . . 20
4.3.2. recurrenceRule . . . . . . . . . . . . . . . . . . . 19 4.3.2. recurrenceRule . . . . . . . . . . . . . . . . . . . 20
4.3.3. recurrenceOverrides . . . . . . . . . . . . . . . . . 27 4.3.3. recurrenceOverrides . . . . . . . . . . . . . . . . . 28
4.3.4. excluded . . . . . . . . . . . . . . . . . . . . . . 28 4.3.4. excluded . . . . . . . . . . . . . . . . . . . . . . 29
4.4. Sharing and Scheduling Properties . . . . . . . . . . . . 28 4.4. Sharing and Scheduling Properties . . . . . . . . . . . . 29
4.4.1. priority . . . . . . . . . . . . . . . . . . . . . . 28 4.4.1. priority . . . . . . . . . . . . . . . . . . . . . . 29
4.4.2. freeBusyStatus . . . . . . . . . . . . . . . . . . . 29 4.4.2. freeBusyStatus . . . . . . . . . . . . . . . . . . . 29
4.4.3. privacy . . . . . . . . . . . . . . . . . . . . . . . 29 4.4.3. privacy . . . . . . . . . . . . . . . . . . . . . . . 30
4.4.4. replyTo . . . . . . . . . . . . . . . . . . . . . . . 30 4.4.4. replyTo . . . . . . . . . . . . . . . . . . . . . . . 31
4.4.5. participants . . . . . . . . . . . . . . . . . . . . 31 4.4.5. participants . . . . . . . . . . . . . . . . . . . . 31
4.5. Alerts Properties . . . . . . . . . . . . . . . . . . . . 35 4.5. Alerts Properties . . . . . . . . . . . . . . . . . . . . 35
4.5.1. useDefaultAlerts . . . . . . . . . . . . . . . . . . 35 4.5.1. useDefaultAlerts . . . . . . . . . . . . . . . . . . 35
4.5.2. alerts . . . . . . . . . . . . . . . . . . . . . . . 35 4.5.2. alerts . . . . . . . . . . . . . . . . . . . . . . . 36
4.6. Multilingual Properties . . . . . . . . . . . . . . . . . 37 4.6. Multilingual Properties . . . . . . . . . . . . . . . . . 38
4.6.1. localizations . . . . . . . . . . . . . . . . . . . . 37 4.6.1. localizations . . . . . . . . . . . . . . . . . . . . 38
4.7. Time Zone Properties . . . . . . . . . . . . . . . . . . 37 4.7. Time Zone Properties . . . . . . . . . . . . . . . . . . 38
4.7.1. timeZone . . . . . . . . . . . . . . . . . . . . . . 38 4.7.1. timeZone . . . . . . . . . . . . . . . . . . . . . . 39
4.7.2. timeZones . . . . . . . . . . . . . . . . . . . . . . 38 4.7.2. timeZones . . . . . . . . . . . . . . . . . . . . . . 39
5. Type-specific JSCalendar Properties . . . . . . . . . . . . . 40 5. Type-specific JSCalendar Properties . . . . . . . . . . . . . 41
5.1. JSEvent Properties . . . . . . . . . . . . . . . . . . . 40 5.1. JSEvent Properties . . . . . . . . . . . . . . . . . . . 41
5.1.1. start . . . . . . . . . . . . . . . . . . . . . . . . 40 5.1.1. start . . . . . . . . . . . . . . . . . . . . . . . . 41
5.1.2. duration . . . . . . . . . . . . . . . . . . . . . . 40 5.1.2. duration . . . . . . . . . . . . . . . . . . . . . . 41
5.1.3. status . . . . . . . . . . . . . . . . . . . . . . . 41 5.1.3. status . . . . . . . . . . . . . . . . . . . . . . . 42
5.2. JSTask Properties . . . . . . . . . . . . . . . . . . . . 41 5.2. JSTask Properties . . . . . . . . . . . . . . . . . . . . 42
5.2.1. due . . . . . . . . . . . . . . . . . . . . . . . . . 41 5.2.1. due . . . . . . . . . . . . . . . . . . . . . . . . . 42
5.2.2. start . . . . . . . . . . . . . . . . . . . . . . . . 41 5.2.2. start . . . . . . . . . . . . . . . . . . . . . . . . 42
5.2.3. estimatedDuration . . . . . . . . . . . . . . . . . . 41 5.2.3. estimatedDuration . . . . . . . . . . . . . . . . . . 42
5.2.4. statusUpdatedAt . . . . . . . . . . . . . . . . . . . 41 5.2.4. statusUpdatedAt . . . . . . . . . . . . . . . . . . . 42
5.2.5. progress . . . . . . . . . . . . . . . . . . . . . . 42 5.2.5. progress . . . . . . . . . . . . . . . . . . . . . . 43
5.2.6. status . . . . . . . . . . . . . . . . . . . . . . . 42 5.2.6. status . . . . . . . . . . . . . . . . . . . . . . . 44
5.3. JSGroup Properties . . . . . . . . . . . . . . . . . . . 43 5.3. JSGroup Properties . . . . . . . . . . . . . . . . . . . 44
5.3.1. entries . . . . . . . . . . . . . . . . . . . . . . . 44 5.3.1. entries . . . . . . . . . . . . . . . . . . . . . . . 45
5.3.2. source . . . . . . . . . . . . . . . . . . . . . . . 44 5.3.2. source . . . . . . . . . . . . . . . . . . . . . . . 45
6. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . 44 6. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . 45
6.1. Simple Event . . . . . . . . . . . . . . . . . . . . . . 44 6.1. Simple event . . . . . . . . . . . . . . . . . . . . . . 45
6.2. Simple Task . . . . . . . . . . . . . . . . . . . . . . . 44 6.2. Simple task . . . . . . . . . . . . . . . . . . . . . . . 46
6.3. Simple Group . . . . . . . . . . . . . . . . . . . . . . 45 6.3. Simple group . . . . . . . . . . . . . . . . . . . . . . 46
6.4. All-day Event . . . . . . . . . . . . . . . . . . . . . . 45 6.4. All-day event . . . . . . . . . . . . . . . . . . . . . . 47
6.5. Task with a Due Date . . . . . . . . . . . . . . . . . . 46 6.5. Task with a due date . . . . . . . . . . . . . . . . . . 47
6.6. Event with End Time Zone . . . . . . . . . . . . . . . . 46 6.6. Event with end time-zone . . . . . . . . . . . . . . . . 48
6.7. Floating-time Event (with Recurrence) . . . . . . . . . . 47 6.7. Floating-time event (with recurrence) . . . . . . . . . . 48
6.8. Event with Multiple Locations and Localization . . . . . 47 6.8. Event with multiple locations and localization . . . . . 49
6.9. Recurring Event with Overrides . . . . . . . . . . . . . 48 6.9. Recurring event with overrides . . . . . . . . . . . . . 50
6.10. Recurring Event with Participants . . . . . . . . . . . . 49 6.10. Recurring event with participants . . . . . . . . . . . . 51
7. Security Considerations . . . . . . . . . . . . . . . . . . . 51 7. Security Considerations . . . . . . . . . . . . . . . . . . . 53
7.1. Expanding Recurrences . . . . . . . . . . . . . . . . . . 51 7.1. Expanding Recurrences . . . . . . . . . . . . . . . . . . 53
7.2. JSON Parsing . . . . . . . . . . . . . . . . . . . . . . 51 7.2. JSON Parsing . . . . . . . . . . . . . . . . . . . . . . 53
7.3. URI Values . . . . . . . . . . . . . . . . . . . . . . . 52 7.3. URI Values . . . . . . . . . . . . . . . . . . . . . . . 54
8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 52 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 54
9. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 53 8.1. Media Type Registration . . . . . . . . . . . . . . . . . 54
10. References . . . . . . . . . . . . . . . . . . . . . . . . . 53 8.2. Creation of "JSCalendar Properties" Registry . . . . . . 55
10.1. Normative References . . . . . . . . . . . . . . . . . . 53 8.2.1. Preliminary Community Review . . . . . . . . . . . . 56
10.2. Informative References . . . . . . . . . . . . . . . . . 55 8.2.2. Submit Request to IANA . . . . . . . . . . . . . . . 56
10.3. URIs . . . . . . . . . . . . . . . . . . . . . . . . . . 55 8.2.3. Designated Expert Review . . . . . . . . . . . . . . 56
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 56 8.2.4. Change Procedures . . . . . . . . . . . . . . . . . . 57
8.2.5. JMAP Properties Registry Template . . . . . . . . . . 57
8.2.6. Initial Contents for the JSCalendar Properties
Registry . . . . . . . . . . . . . . . . . . . . . . 58
8.3. Creation of "JSCalendar Types" Registry . . . . . . . . . 65
8.3.1. JMAP Types Registry Template . . . . . . . . . . . . 65
8.3.2. Initial Contents for the JSCalendar Properties
Registry . . . . . . . . . . . . . . . . . . . . . . 65
8.4. Creation of "JSCalendar Enum Values" Registry . . . . . . 67
8.4.1. JMAP Enum Subregistry Creation Template . . . . . . . 67
8.4.2. JMAP Enum Subregistry Creation Template . . . . . . . 67
8.4.3. Initial Contents for the JSCalendar Enum Registry . . 67
9. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 74
10. References . . . . . . . . . . . . . . . . . . . . . . . . . 74
10.1. Normative References . . . . . . . . . . . . . . . . . . 74
10.2. Informative References . . . . . . . . . . . . . . . . . 76
10.3. URIs . . . . . . . . . . . . . . . . . . . . . . . . . . 76
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 77
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 9, line 32 skipping to change at page 9, line 47
1.4.9. Time Zones 1.4.9. Time Zones
By default, time zones in JSCalendar are identified by their name in 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 the IANA Time Zone Database [1], and the zone rules of the respective
zone record apply. zone record apply.
Implementations MAY embed the definition of custom time zones in the Implementations MAY embed the definition of custom time zones in the
"timeZones" property (see Section 4.7.2). "timeZones" property (see Section 4.7.2).
1.4.10. Relation
A Relation object defines the relation to other objects, using a
possibly empty set of relation types. The object that defines this
relation is the linking object, the other object is the linked
object. The Relation object has the following property:
o @type: "String" (mandatory)
Specifies the type of this object. This MUST be "Relation".
o relation: "String[Boolean]" (optional, default: empty Object)
Describes how the linked object is related to the linking object.
The relation is defined as a set of relation types. If empty, the
relationship between the two objects is unspecified.
Keys in the set MUST be one of the following values, or specified
in the property definition where the Relation object is used, or
an IANA-registered value, or a vendor-specific value:
* "first": The linked object is the first in a series the linking
object is part of.
* "next": The linked object is the next in a series the linking
object is part of.
* "child": The linked object is a subpart of the linking object.
* "parent": The linking object is part of the overall linked
object.
The value for each key in the set MUST be true.
Note, the Relation object only has one property (except @type); it is
specified as an object with a single property to allow for extension
in the future.
2. JSCalendar Objects 2. JSCalendar Objects
This section describes the calendar object types specified by This section describes the calendar object types specified by
JSCalendar. JSCalendar.
2.1. JSEvent 2.1. JSEvent
MIME type: "application/jscalendar+json;type=jsevent" MIME type: "application/jscalendar+json;type=jsevent"
A JSEvent represents a scheduled amount of time on a calendar, A JSEvent represents a scheduled amount of time on a calendar,
skipping to change at page 11, line 14 skipping to change at page 12, line 19
o Several JSCalendar property values are defined as URIs and MIME o Several JSCalendar property values are defined as URIs and MIME
types, but normalization of these types is inherently protocol and types, but normalization of these types is inherently protocol and
scheme-specific, depending on the use-case of the equivalence scheme-specific, depending on the use-case of the equivalence
definition (see Section 6 of [RFC3986]). definition (see Section 6 of [RFC3986]).
Considering this, the definition of equivalence and normalization is Considering this, the definition of equivalence and normalization is
left to client and server implementations and to be negotiated by a left to client and server implementations and to be negotiated by a
calendar exchange protocol or defined by another RFC. calendar exchange protocol or defined by another RFC.
3.2. Custom Property Extensions and Values 3.2. Vendor-specific Property Extensions and Values
Vendors MAY add additional properties to the calendar object to Vendors MAY add additional properties to the calendar object to
support their custom features. The names of these properties MUST be support their custom features. The names of these properties MUST be
prefixed with a domain name controlled by the vendor to avoid prefixed with a domain name controlled by the vendor to avoid
conflict, e.g. "example.com/customprop". conflict, e.g. "example.com/customprop".
Some JSCalendar properties allow vendor-specific value extensions. Some JSCalendar properties allow vendor-specific value extensions.
If so, vendor specific values MUST be prefixed with a domain name If so, vendor-specific values MUST be prefixed with a domain name
controlled by the vendor, e.g. "example.com/customrel", unless controlled by the vendor, e.g. "example.com/customrel".
otherwise noted.
Vendors are strongly encouraged to standardize any new property Vendors are strongly encouraged to register any new property values
values or extensions that are useful to other systems as well, rather or extensions that are useful to other systems as well, rather than
than use a vendor-specific prefix. use a vendor-specific prefix.
4. Common JSCalendar Properties 4. Common JSCalendar Properties
This section describes the properties that are common to the various This section describes the properties that are common to the various
JSCalendar object types. Specific JSCalendar object types may only JSCalendar object types. Specific JSCalendar object types may only
support a subset of these properties. The object type definitions in support a subset of these properties. The object type definitions in
Section 5 describe the set of supported properties per type. Section 5 describe the set of supported properties per type.
4.1. Metadata Properties 4.1. Metadata Properties
4.1.1. @type 4.1.1. @type
Type: "String" (mandatory). Type: "String" (mandatory).
Specifies the type which this object represents. This MUST be one of Specifies the type which this object represents. This MUST be one of
the following values, registered in a future RFC, or a vendor- the following values, an IANA-registered value, or a vendor-specific
specific value: value:
o "jsevent": a JSCalendar event (Section 2.1). o "jsevent": a JSCalendar event (Section 2.1).
o "jstask": a JSCalendar task (Section 2.2). o "jstask": a JSCalendar task (Section 2.2).
o "jsgroup": a JSCalendar group (Section 2.3). o "jsgroup": a JSCalendar group (Section 2.3).
4.1.2. uid 4.1.2. uid
Type: "String" (mandatory). Type: "String" (mandatory).
skipping to change at page 12, line 29 skipping to change at page 13, line 33
multi-octet sequence. multi-octet sequence.
4.1.3. relatedTo 4.1.3. relatedTo
Type: "String[Relation]" (optional). Type: "String[Relation]" (optional).
Relates the object to other JSCalendar objects. This is represented Relates the object to other JSCalendar objects. This is represented
as a map of the UIDs of the related objects to information about the as a map of the UIDs of the related objects to information about the
relation. relation.
A Relation object has the following property:
o relation: "String[Boolean]" (optional)
Describes how the linked object is related to this object as a set
of relation types. If specified, the set MUST NOT be empty. If
ommitted, the relationship between the two objects is unspecified.
Keys in the set MUST be one of the following values, defined in a
future specification or a vendor-specific value:
* "first": The linked object is the first in the series this
object is part of.
* "next": The linked object is the next in the series this object
is part of.
* "child": The linked object is a subpart of this object.
* "parent": This object is part of the overall linked object.
The value for each key in the set MUST be true.
Note, the Relation object only has one property; it is specified as
an object with a single property rather than mapping directly from
the UID to relation types to allow for extension in the future.
If an object is split to make a "this and future" change to a If an object is split to make a "this and future" change to a
recurrence, the original object MUST be truncated to end at the recurrence, the original object MUST be truncated to end at the
previous occurrence before this split, and a new object created to previous occurrence before this split, and a new object created to
represent all the occurrences after the split. A "next" relation represent all the occurrences after the split. A "next" relation
MUST be set on the original object's relatedTo property for the UID MUST be set on the original object's relatedTo property for the UID
of the new object. A "first" relation for the UID of the first of the new object. A "first" relation for the UID of the first
object in the series MUST be set on the new object. Clients can then object in the series MUST be set on the new object. Clients can then
follow these UIDs to get the complete set of objects if the user follow these UIDs to get the complete set of objects if the user
wishes to modify them all at once. wishes to modify them all at once.
skipping to change at page 15, line 22 skipping to change at page 15, line 45
4.2.5. locations 4.2.5. locations
Type: "Id[Location]" (optional). Type: "Id[Location]" (optional).
A map of location ids to Location objects, representing locations A map of location ids to Location objects, representing locations
associated with the object. associated with the object.
A Location object has the following properties. It MUST have at A Location object has the following properties. It MUST have at
least one property other than the "relativeTo" property. least one property other than the "relativeTo" property.
o @type: "String" (mandatory)
Specifies the type of this object. This MUST be "Location".
o name: "String" (optional) o name: "String" (optional)
The human-readable name of the location. The human-readable name of the location.
o description: "String" (optional) o description: "String" (optional)
Human-readable, plain-text instructions for accessing this Human-readable, plain-text instructions for accessing this
location. This may be an address, set of directions, door access location. This may be an address, set of directions, door access
code, etc. code, etc.
o relativeTo: "String" (optional) o relativeTo: "String" (optional)
The relation type of this location to the JSCalendar object. The relation type of this location to the JSCalendar object.
This MUST be either one of the following values, registered in a This MUST be either one of the following values, an IANA-
future RFC, or a vendor-specific value. Any value the client or registered value, or a vendor-specific value. Any value the
server doesn't understand should be treated the same as if this client or server doesn't understand should be treated the same as
property is omitted. if this 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) o timeZone: "String" (optional)
A time zone for this location. See also Section 1.4.9. A time zone for this location. See also Section 1.4.9.
o coordinates: "String" (optional) o coordinates: "String" (optional)
skipping to change at page 16, line 26 skipping to change at page 17, line 5
4.2.6. virtualLocations 4.2.6. virtualLocations
Type: "Id[VirtualLocation]" (optional). Type: "Id[VirtualLocation]" (optional).
A map of ids to VirtualLocation objects, representing virtual A map of ids 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. the object.
A VirtualLocation object has the following properties. A VirtualLocation object has the following properties.
o @type: "String" (mandatory)
Specifies the type of this object. This MUST be
"VirtualLocation".
o name: "String" (optional, default: empty String) o name: "String" (optional, default: empty String)
The human-readable name of the virtual location. The human-readable name of the virtual location.
o description: "String" (optional) o description: "String" (optional)
Human-readable plain-text instructions for accessing this Human-readable plain-text instructions for accessing this
location. This may be an address, set of directions, door access location. This may be an address, set of directions, door access
code, etc. code, etc.
skipping to change at page 17, line 5 skipping to change at page 17, line 37
4.2.7. links 4.2.7. links
Type: "Id[Link]" (optional). Type: "Id[Link]" (optional).
A map of link ids to Link objects, representing external resources A map of link ids to Link objects, representing external resources
associated with the object. associated with the object.
A Link object has the following properties: A Link object has the following properties:
o @type: "String" (mandatory)
Specifies the type of this object. This MUST be "Link".
o href: "String" (mandatory) o href: "String" (mandatory)
A URI from which the resource may be fetched. 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) o cid: "String" (optional)
This MUST be a valid "content-id" value according to the This MUST be a valid "content-id" value according to the
definition of Section 2 in [RFC2392]. The value MUST be unique definition of Section 2 in [RFC2392]. The value MUST be unique
within this Link object but has no meaning beyond that. It MAY be within this Link object but has no meaning beyond that. It MAY be
different from the link id for this Link object. different from the link id for this Link object.
o type: "String" (optional) o contentType: "String" (optional)
The content-type [RFC6838] of the resource, if known. The content-type [RFC6838] of the resource, if known.
o size: "UnsignedInt" (optional) o size: "UnsignedInt" (optional)
The size, in octets, of the resource when fully decoded (i.e. the The size, in octets, of the resource when fully decoded (i.e. the
number of octets in the file the user would download), if known. number of octets in the file the user would download), if known.
o rel: "String" (optional) o rel: "String" (optional)
skipping to change at page 17, line 50 skipping to change at page 18, line 37
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
of this image. of this image.
o display: "String" (optional) o display: "String" (optional)
Describes the intended purpose of a link to an image. If set, the Describes the intended purpose of a link to an image. If set, the
"rel" property MUST be set to "icon". The value MUST be either "rel" property MUST be set to "icon". The value MUST be either
one of the following values, registered in a future RFC, or a one of the following values, an IANA-registered value, or a
vendor-specific value: vendor-specific value:
* "badge": an image inline with the title of the object. * "badge": an image inline with the title of the object.
* "graphic": a full image replacement for the object itself. * "graphic": a full image replacement for the object itself.
* "fullsize": an image that is used to enhance the object. * "fullsize": an image that is used to enhance the object.
* "thumbnail": a smaller variant of "fullsize" to be used when * "thumbnail": a smaller variant of "fullsize" to be used when
space for the image is constrained. space for the image is constrained.
skipping to change at page 19, line 29 skipping to change at page 20, line 19
If present, this JSCalendar object represents one occurrence of a If present, this JSCalendar object represents one occurrence of a
recurring JSCalendar object. If present the "recurrenceRule" and recurring JSCalendar object. If present the "recurrenceRule" and
"recurrenceOverrides" properties MUST NOT be present. "recurrenceOverrides" properties MUST NOT be present.
The value is a date-time either produced by the "recurrenceRule" of The value is a date-time either produced by the "recurrenceRule" of
the master event, or added as a key to the "recurrenceOverrides" the master event, or added as a key to the "recurrenceOverrides"
property of the master event. property of the master event.
4.3.2. recurrenceRule 4.3.2. recurrenceRule
Type: "Recurrence" (optional). Type: "RecurrenceRule" (optional).
Defines a recurrence rule (repeating pattern) for recurring calendar Defines a recurrence rule (repeating pattern) for recurring calendar
objects. objects.
A JSEvent recurs by applying the recurrence rule to the "start" date- A JSEvent recurs by applying the recurrence rule to the "start" date-
time. time.
A JSTask recurs by applying the recurrence rule to the "start" date- A JSTask recurs by applying the recurrence rule to the "start" date-
time, if defined, otherwise it recurs by the "due" date-time, if time, if defined, otherwise it recurs by the "due" date-time, if
defined. If the task defines neither a "start" nor "due" date-time, defined. If the task defines neither a "start" nor "due" date-time,
its "recurrenceRule" property value MUST be null. its "recurrenceRule" property value MUST be null.
A Recurrence object is a JSON object mapping of a RECUR value type in A RecurrenceRule object is a JSON object mapping of a RECUR value
iCalendar [RFC5545] [RFC7529] and has the same semantics. It has the type in iCalendar [RFC5545] [RFC7529] and has the same semantics. It
following properties: has the following properties:
o @type: "String" (mandatory)
Specifies the type of this object. This MUST be "RecurrenceRule".
o frequency: "String" (mandatory) o frequency: "String" (mandatory)
The time span covered by each iteration of this recurrence rule The time span covered by each iteration of this recurrence rule
(see Section 4.3.2.1 for full semantics). This MUST be one of the (see Section 4.3.2.1 for full semantics). This MUST be one of the
following values: following values:
* "yearly" * "yearly"
* "monthly" * "monthly"
skipping to change at page 21, line 32 skipping to change at page 22, line 24
This is the WKST part from iCalendar. This is the WKST part from iCalendar.
o byDay: "NDay[]" (optional) o byDay: "NDay[]" (optional)
Days of the week on which to repeat. An *NDay* object has the Days of the week on which to repeat. An *NDay* object has the
following properties: following properties:
* day: "String" (mandatory) * day: "String" (mandatory)
A day of the week on which to repeat; the allowed values are A day of the week on which to repeat; the allowed values are
the same as for the "firstDayOfWeek" Recurrence property. the same as for the "firstDayOfWeek" RecurrenceRule property.
This is the day-of-the-week of the BYDAY part in iCalendar, This is the day-of-the-week of the BYDAY part in iCalendar,
converted to lowercase. converted to lowercase.
* nthOfPeriod: "Int" (optional) * nthOfPeriod: "Int" (optional)
If present, rather than representing every occurrence of the If present, rather than representing every occurrence of the
weekday defined in the "day" property, it represents only a weekday defined in the "day" property, it represents only a
specific instance within the recurrence period. The value can specific instance within the recurrence period. The value can
be positive or negative, but MUST NOT be zero. A negative be positive or negative, but MUST NOT be zero. A negative
skipping to change at page 29, line 12 skipping to change at page 29, line 44
of 0 specifies an undefined priority. A value of 1 is the highest of 0 specifies an undefined priority. A value of 1 is the highest
priority. A value of 2 is the second highest priority. Subsequent priority. A value of 2 is the second highest priority. Subsequent
numbers specify a decreasing ordinal priority. A value of 9 is the numbers specify a decreasing ordinal priority. A value of 9 is the
lowest priority. Other integer values are reserved for future use. lowest priority. Other integer values are reserved for future use.
4.4.2. freeBusyStatus 4.4.2. freeBusyStatus
Type: "String" (optional, default: "busy"). Type: "String" (optional, default: "busy").
Specifies how this property should be treated when calculating free- Specifies how this property should be treated when calculating free-
busy state. The value MUST be one of: busy state. This MUST be one of the following values, an IANA-
registered value, or a vendor-specific value:
o "free": The object should be ignored when calculating whether the o "free": The object should be ignored when calculating whether the
user is busy. user is busy.
o "busy": The object should be included when calculating whether the o "busy": The object should be included when calculating whether the
user is busy. user is busy.
4.4.3. privacy 4.4.3. privacy
Type: "String" (optional, default: "public"). Type: "String" (optional, default: "public").
skipping to change at page 29, line 35 skipping to change at page 30, line 20
with other users. The privacy property allows the object owner to with other users. The privacy property allows the object owner to
indicate that it should not be shared, or should only have the time indicate that it should not be shared, or should only have the time
information shared but the details withheld. Enforcement of the information shared but the details withheld. Enforcement of the
restrictions indicated by this property are up to the API via which restrictions indicated by this property are up to the API via which
this object is accessed. this object is accessed.
This property MUST NOT affect the information sent to scheduled This property MUST NOT affect the information sent to scheduled
participants; it is only interpreted when the object is shared as participants; it is only interpreted when the object is shared as
part of a shared calendar. part of a shared calendar.
The value MUST be either one of the following values, registered in a The value MUST be either one of the following values, an IANA-
future RFC, or a vendor-specific value. Vendor specific values MUST registered value, or a vendor-specific value. Any value the client
be prefixed with a domain name controlled by the vendor, e.g. or server doesn't understand should be preserved but treated as
"example.com/topsecret". Any value the client or server doesn't equivalent to "private".
understand should be preserved but treated as equivalent to
"private".
o "public": The full details of the object are visible to those whom o "public": The full details of the object are visible to those whom
the object's calendar is shared with. the object's calendar is shared with.
o "private": The details of the object are hidden; only the basic o "private": The details of the object are hidden; only the basic
time and metadata is shared. The following properties MAY be time and metadata is shared. The following properties MAY be
shared, any other properties MUST NOT be shared: shared, any other properties MUST NOT be shared:
* @type * @type
skipping to change at page 30, line 42 skipping to change at page 31, line 25
exist) when the calendar this object is in is shared. exist) when the calendar this object is in is shared.
4.4.4. replyTo 4.4.4. replyTo
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 and
calendar client MUST ignore any method it does not understand, but registered with IANA; a calendar client MUST ignore any method it
MUST preserve the method key and URI. This property MUST be omitted does not understand, but MUST preserve the method key and URI. This
if no method is defined (rather than an empty object). If this property MUST be omitted if no method is defined (rather than an
property is set, the "participants" property of this calendar object empty object). If this property is set, the "participants" property
MUST contain at least one participant. 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
skipping to change at page 31, line 26 skipping to change at page 32, line 7
Type: "Id[Participant]" (optional). Type: "Id[Participant]" (optional).
A map of participant ids to participants, describing their A map of participant ids to participants, describing their
participation in the calendar object. participation in the calendar object.
If this property is set, then the "replyTo" property of this calendar If this property is set, then the "replyTo" property of this calendar
object MUST define at least one reply method. object MUST define at least one reply method.
A Participant object has the following properties: A Participant object has the following properties:
o @type: "String" (mandatory)
Specifies the type of this object. This MUST be "Participant".
o name: "String" (optional) o name: "String" (optional)
The display name of the participant (e.g. "Joe Bloggs"). The display name of the participant (e.g. "Joe Bloggs").
o email: "String" (optional) o email: "String" (optional)
The email address for the participant. The email address for the participant.
o sendTo: "String[String]" (mandatory) o sendTo: "String[String]" (mandatory)
Represents methods by which the participant may receive the Represents methods by which the participant may receive the
invitation and updates to the calendar object. invitation and updates to the calendar object.
The keys in the property value are the available methods and MUST The keys in the property value are the available methods and MUST
only contain ASCII alphanumeric characters (A-Za-z0-9). The value only contain ASCII alphanumeric characters (A-Za-z0-9). The value
is a URI to use that method. Future methods may be defined in is a URI to use that method. Future methods may be defined in
future specifications; a calendar client MUST ignore any method it future specifications and registered with IANA; a calendar client
does not understand, but MUST preserve the method key and URI. MUST ignore any method it does not understand, but MUST preserve
This property MUST be omitted if no method is defined (rather than the method key and URI. This property MUST be omitted if no
an empty object). method is defined (rather than an empty object).
The following methods are defined: The following methods are defined:
* "imip": The participant accepts an iMIP [RFC6047] request at * "imip": The participant accepts an iMIP [RFC6047] request at
this email address. The value MUST be a "mailto:" URI. It MAY this email address. The value MUST be a "mailto:" URI. It MAY
be different from the value of the participant's "email" be different from the value of the participant's "email"
property. property.
* "other": The participant is identified by this URI but the * "other": The participant is identified by this URI but the
method how to submit the invitation or update is undefined. method how to submit the invitation or update is undefined.
o kind: "String" (optional) o kind: "String" (optional)
What kind of entity this participant is, if known. What kind of entity this participant is, if known.
This MUST be either one of the following values, registered in a This MUST be either one of the following values, an IANA-
future RFC, or a vendor-specific value. Any value the client or registered value, or a vendor-specific value. Any value the
server doesn't understand should be treated the same as if this client or server doesn't understand should be treated the same as
property is omitted. if this 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]" (mandatory) o roles: "String[Boolean]" (mandatory)
A set of roles that this participant fulfills. A set of roles that this participant fulfills.
skipping to change at page 32, line 31 skipping to change at page 33, line 16
* "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]" (mandatory) o roles: "String[Boolean]" (mandatory)
A set of roles that this participant fulfills. A set of roles that this participant 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, an IANA-
in a future RFC, or a vendor-specific value: registered value, or a vendor-specific value:
* "owner": The participant is an owner of the object. This * "owner": The participant is an owner of the object. This
signifies they have permission to make changes to it that signifies they have permission to make changes to it that
affect the other participants. Non-owner participants may only affect the other participants. Non-owner participants may only
change properties that just affect themself (for example change properties that just affect themself (for example
setting their own alerts). setting their own alerts).
* "attendee": The participant is an attendee of the calendar * "attendee": The participant is an attendee of the calendar
object. object.
skipping to change at page 33, line 13 skipping to change at page 33, line 47
attending. attending.
If the value does not correspond to any location id in the If the value does not correspond to any location id in the
"locations" property of the JSCalendar object, this MUST be "locations" property of the JSCalendar object, this MUST be
treated the same as if the participant's locationId were omitted. treated the same as if the participant's locationId were omitted.
o participationStatus: "String" (optional, default: "needs-action") o participationStatus: "String" (optional, default: "needs-action")
The participation status, if any, of this participant. The participation status, if any, of this participant.
The value MUST be either one of the following values, registered The value MUST be either one of the following values, an IANA-
in a future RFC, or a vendor-specific value: registered value, or a vendor-specific value:
* "needs-action": No status yet set by the participant. * "needs-action": No status yet set by the participant.
* "accepted": The invited participant will participate. * "accepted": The invited participant will participate.
* "declined": The invited participant will not participate. * "declined": The invited participant will not participate.
* "tentative": The invited participant may participate. * "tentative": The invited participant may participate.
o participationComment: "String" (optional) o participationComment: "String" (optional)
A note from the participant to explain their participation status. A note from the participant to explain their participation status.
o attendance: "String" (optional, default: "required") o attendance: "String" (optional, default: "required")
The required attendance of this participant. The required attendance of this participant.
The value MUST be either one of the following values, registered The value MUST be either one of the following values, an IANA-
in a future RFC, or a vendor-specific value. Any value the client registered value, or a vendor-specific value. Any value the
or server doesn't understand should be treated the same as client or server doesn't understand should be treated the same as
"required". "required".
* "none": Indicates a participant who is copied for information * "none": Indicates a participant who is copied for information
purposes only. purposes only.
* "optional": Indicates a participant whose attendance is * "optional": Indicates a participant whose attendance is
optional. optional.
* "required": Indicates a participant whose attendance is * "required": Indicates a participant whose attendance is
required. required.
skipping to change at page 35, line 30 skipping to change at page 36, line 17
4.5.2. alerts 4.5.2. alerts
Type: "Id[Alert]" (optional). Type: "Id[Alert]" (optional).
A map of alert ids to Alert objects, representing alerts/reminders to A map of alert ids to Alert objects, representing alerts/reminders to
display or send to the user for this calendar object. display or send to the user for this calendar object.
An Alert Object has the following properties: An Alert Object has the following properties:
o @type: "String" (mandatory)
Specifies the type of this object. This MUST be "Alert".
o trigger: "OffsetTrigger|AbsoluteTrigger|UnknownTrigger" o trigger: "OffsetTrigger|AbsoluteTrigger|UnknownTrigger"
Defines when to trigger the alert. New types may be defined in Defines when to trigger the alert. New types may be defined in
future RFCs. future RFCs.
An *OffsetTrigger* object has the following properties: An *OffsetTrigger* object has the following properties:
* type: "String" (mandatory) * @type: "String" (mandatory)
The value of this property MUST be "offset". Specifies the type of this object. This MUST be
"OffsetTrigger".
* offset: "SignedDuration" (mandatory). * offset: "SignedDuration" (mandatory).
Defines the offset at which to trigger the alert relative to Defines the offset at which to trigger the alert relative to
the time property defined in the "relativeTo" property of the the time property defined in the "relativeTo" property of the
alert. If the calendar object does not define a time zone, the alert. If the calendar object does not define a time zone, the
user's default time zone SHOULD be used when determining the user's default time zone SHOULD be used when determining the
offset, if known. Otherwise, the time zone to use is offset, if known. Otherwise, the time zone to use is
implementation specific. implementation specific.
skipping to change at page 36, line 15 skipping to change at page 37, line 7
to. The value MUST be one of: to. The value MUST be one of:
+ "start": triggers the alert relative to the start of the + "start": triggers the alert relative to the start of the
calendar object calendar object
+ "end": triggers the alert relative to the end/due time of + "end": triggers the alert relative to the end/due time of
the calendar object the calendar object
An *AbsoluteTrigger* object has the following properties: An *AbsoluteTrigger* object has the following properties:
* type: "String" (mandatory) * @type: "String" (mandatory)
The value of this property MUST be "absolute". Specifies the type of this object. This MUST be
"AbsoluteTrigger".
* when: "UTCDateTime" (mandatory). * when: "UTCDateTime" (mandatory).
Defines a specific UTC date-time when the alert is triggered. Defines a specific UTC date-time when the alert is triggered.
An *UnknownTrigger* object is an object that contains a *type* An *UnknownTrigger* object is an object that contains a *@type*
property whose value is not recognized (i.e., not "offset" or property whose value is not recognized (i.e., not "OffsetTrigger"
"absolute"), plus zero or more other properties. This is for or "AbsoluteTrigger"), plus zero or more other properties. This
compatibility with client extensions and future RFCs. is for compatibility with client extensions and future RFCs.
Implementations SHOULD NOT trigger for trigger types they do not Implementations SHOULD NOT trigger for trigger types they do not
understand, but MUST preserve them. understand, but MUST preserve them.
o acknowledged: "UTCDateTime" (optional) o acknowledged: "UTCDateTime" (optional)
This records when an alert was last acknowledged. This is set This records when an alert was last acknowledged. This is set
when the user has dismissed the alert; other clients that sync when the user has dismissed the alert; other clients that sync
this property SHOULD automatically dismiss or suppress duplicate this property SHOULD automatically dismiss or suppress duplicate
alerts (alerts with the same alert id that triggered on or before alerts (alerts with the same alert id that triggered on or before
this date-time). this date-time).
For a recurring calendar object, the "acknowledged" property of For a recurring calendar object, the "acknowledged" property of
the parent object MUST be updated, unless the alert is already the parent object MUST be updated, unless the alert is already
overridden in the "recurrenceOverrides" property. overridden in the "recurrenceOverrides" property.
Certain kinds of alert action may not provide feedback as to when Certain kinds of alert action may not provide feedback as to when
the user sees them, for example email based alerts. For those the user sees them, for example email based alerts. For those
kinds of alerts, this property SHOULD be set immediately when the kinds of alerts, this property SHOULD be set immediately when the
alert is triggered and the action successfully carried out. alert is triggered and the action successfully carried out.
o relatedTo: "String[Relation]" (optional)
Relates this alert to other alerts in the same JSCalendar object.
If the user wishes to snooze an alert, the application SHOULD
create an alert to trigger after snoozing. All snooze alerts
SHOULD set a relation to the identifier of the original alert.
The Relation object SHOULD set the "parent" relation type, but MAY
be empty.
o action: "String" (optional, default: "display") o action: "String" (optional, default: "display")
Describes how to alert the user. Describes how to alert the user.
The value MUST be at most one of the following values, registered The value MUST be at most one of the following values, an IANA-
in a future RFC, or a vendor-specific value: registered value, or a vendor-specific value:
* "display": The alert should be displayed as appropriate for the * "display": The alert should be displayed as appropriate for the
current device and user context. current device and user context.
* "email": The alert should trigger an email sent out to the * "email": The alert should trigger an email sent out to the
user, notifying about the alert. This action is typically only user, notifying about the alert. This action is typically only
appropriate for server implementations. appropriate for server implementations.
4.6. Multilingual Properties 4.6. Multilingual Properties
skipping to change at page 38, line 39 skipping to change at page 39, line 39
reference a time zone using this identifier (i.e. orphaned time reference a time zone using this identifier (i.e. orphaned time
zones are not allowed). zones are not allowed).
An identifier need only be unique to this JSCalendar object. An identifier need only be unique to this JSCalendar object.
A TimeZone object maps a VTIMEZONE component from iCalendar [RFC5545] A TimeZone object maps a VTIMEZONE component from iCalendar [RFC5545]
and the semantics are as defined there. A valid time zone MUST and the semantics are as defined there. A valid time zone MUST
define at least one transition rule in the "standard" or "daylight" define at least one transition rule in the "standard" or "daylight"
property. Its properties are: property. Its properties are:
o @type: "String" (mandatory)
Specifies the type of this object. This MUST be "TimeZone".
o tzId: "String" (mandatory). o tzId: "String" (mandatory).
The TZID property from iCalendar. The TZID property from iCalendar.
o lastModified: "UTCDateTime" (optional) o lastModified: "UTCDateTime" (optional)
The LAST-MODIFIED property from iCalendar. The LAST-MODIFIED property from iCalendar.
o url: "String" (optional) o url: "String" (optional)
The TZURL property from iCalendar. The TZURL property from iCalendar.
o validUntil: "UTCDateTime" (optional) o validUntil: "UTCDateTime" (optional)
The TZUNTIL property from iCalendar specified in [RFC7808]. The TZUNTIL property from iCalendar specified in [RFC7808].
o aliases: "String[Boolean]" (optional) o aliases: "String[Boolean]" (optional)
Maps the TZID-ALIAS-OF properties from iCalendar specified in Maps the TZID-ALIAS-OF properties from iCalendar specified in
[RFC7808] to a JSON set of aliases. The set is represented as an [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 object, with the keys being the aliases. The value for each key
in the set MUST be true. in the set MUST be true.
o standard: "TimeZoneRule[]" (optional) o standard: "TimeZoneRule[]" (optional)
skipping to change at page 39, line 27 skipping to change at page 40, line 31
o daylight: "TimeZoneRule[]" (optional). o daylight: "TimeZoneRule[]" (optional).
The DAYLIGHT sub-components from iCalendar. The order MUST be The DAYLIGHT sub-components from iCalendar. The order MUST be
preserved during conversion. preserved during conversion.
A TimeZoneRule object maps a STANDARD or DAYLIGHT sub-component from A TimeZoneRule object maps a STANDARD or DAYLIGHT sub-component from
iCalendar, with the restriction that at most one recurrence rule is iCalendar, with the restriction that at most one recurrence rule is
allowed per rule. It has the following properties: allowed per rule. It has the following properties:
o @type: "String" (mandatory)
Specifies the type of this object. This MUST be "TimeZoneRule".
o start: "LocalDateTime" (mandatory) o start: "LocalDateTime" (mandatory)
The DTSTART property from iCalendar. The DTSTART property from iCalendar.
o offsetTo: "String" (mandatory) o offsetTo: "String" (mandatory)
The TZOFFSETTO property from iCalendar. The TZOFFSETTO property from iCalendar.
o offsetFrom: "String" (mandatory) o offsetFrom: "String" (mandatory)
skipping to change at page 41, line 10 skipping to change at page 42, line 15
A JSEvent MAY involve start and end locations that are in different A JSEvent MAY involve start and end locations that are in different
time zones (e.g. a trans-continental flight). This can be expressed time zones (e.g. a trans-continental flight). This can be expressed
using the "relativeTo" and "timeZone" properties of the JSEvent's using the "relativeTo" and "timeZone" properties of the JSEvent's
Location objects (see Section 4.2.5). Location objects (see Section 4.2.5).
5.1.3. status 5.1.3. 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 the following values, an IANA-registered value, or a vendor-
specific value:
o "confirmed": Indicates the event is definitely happening. o "confirmed": Indicates the event is definitely happening.
o "cancelled": Indicates the event has been cancelled. o "cancelled": Indicates the event has been cancelled.
o "tentative": Indicates the event may happen. o "tentative": Indicates the event may happen.
5.2. JSTask Properties 5.2. JSTask Properties
In addition to the common JSCalendar object properties (Section 4) a In addition to the common JSCalendar object properties (Section 4) a
skipping to change at page 42, line 24 skipping to change at page 43, line 32
(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
value but "accepted". value but "accepted".
A ParticipantProgress object has the following properties: A ParticipantProgress object has the following properties:
o @type: "String" (mandatory)
Specifies the type of this object. This MUST be
"ParticipantProgress".
o status: "String" (mandatory) o status: "String" (mandatory)
Describes the completion status of the participant's progress. Describes the completion status of the participant's progress.
The value MUST be at most one of the following values, registered The value MUST be at most one of the following values, an IANA-
in a future RFC, or a vendor-specific value: registered value, or a vendor-specific value:
* "completed": The participant completed this task. * "completed": The participant completed this task.
* "in-process": The participant has started this task. * "in-process": The participant has started this task.
* "failed": The participant failed to complete this task. * "failed": The participant failed to complete this task.
o timestamp: "UTCDateTime" (mandatory) o timestamp: "UTCDateTime" (mandatory)
Represents the last time the participant progress was updated. Represents the last time the participant progress was updated.
5.2.6. status 5.2.6. status
Type: "String" (optional). Type: "String" (optional).
Defines the overall status of this task. If omitted, the default Defines the overall status of this task. If omitted, the default
status (Section 4.4) of a JSTask is defined as follows (in order of status (Section 4.4) of a JSTask is defined as follows (in order of
evaluation): evaluation):
skipping to change at page 43, line 13 skipping to change at page 44, line 25
progresses is "completed". progresses is "completed".
o "failed": if at least one "status" property value of the o "failed": if at least one "status" property value of the
participant progresses is "failed". participant progresses is "failed".
o "in-process": if at least one "status" property value of the o "in-process": if at least one "status" property value of the
participant progresses is "in-process". participant progresses is "in-process".
o "needs-action": If none of the other criteria match. o "needs-action": If none of the other criteria match.
If set, it MUST be one of: If set, it MUST be one of the following values, an IANA-registered
value, or a vendor-specific value:
o "needs-action": Indicates the task needs action. o "needs-action": Indicates the task needs action.
o "completed": Indicates the task is completed. o "completed": Indicates the task is completed.
o "in-process": Indicates the task is in process. o "in-process": Indicates the task is in process.
o "cancelled": Indicates the task is cancelled. o "cancelled": Indicates the task is cancelled.
o "pending": Indicates the task has been created and accepted for o "pending": Indicates the task has been created and accepted for
skipping to change at page 43, line 35 skipping to change at page 44, line 48
o "failed": Indicates the task failed. o "failed": Indicates the task failed.
5.3. JSGroup Properties 5.3. JSGroup Properties
JSGroup supports the following common JSCalendar properties JSGroup supports the following common JSCalendar properties
(Section 4): (Section 4):
o @type o @type
o uid o categories
o color
o created o created
o updated o description
o categories o descriptionContentType
o keywords o keywords
o links
o prodId
o title o title
o description o updated
o color o uid
o links
In addition, the following JSGroup-specific properties are supported: In addition, the following JSGroup-specific properties are supported:
5.3.1. entries 5.3.1. entries
Type: "String[JSTask|JSEvent]" (mandatory). Type: "String[JSTask|JSEvent]" (mandatory).
A collection of group members. This is represented as a map of the A collection of group members. This is represented as a map of the
"uid" property value to the JSCalendar object member having that uid. "uid" property value to the JSCalendar object member having that uid.
Implementations MUST ignore entries of unknown type. Implementations MUST ignore entries of unknown type.
skipping to change at page 44, line 29 skipping to change at page 45, line 47
from. The value MUST be a URI. from. The value MUST be a URI.
6. Examples 6. Examples
The following examples illustrate several aspects of the JSCalendar The following examples illustrate several aspects of the JSCalendar
data model and format. The examples may omit mandatory or additional data model and format. The examples may omit mandatory or additional
properties, which is indicated by a placeholder property with key properties, which is indicated by a placeholder property with key
"...". While most of the examples use calendar event objects, they "...". While most of the examples use calendar event objects, they
are also illustrative for tasks. are also illustrative for tasks.
6.1. Simple Event 6.1. Simple event
This example illustrates a simple one-time event. It specifies a This example illustrates a simple one-time event. It specifies a
one-time event that begins on January 15, 2018 at 1pm New York local one-time event that begins on January 15, 2018 at 1pm New York local
time and ends at 2pm. time and ends after 1 hour.
{ {
"@type": "jsevent", "@type": "jsevent",
"uid": "2a358cee-6489-4f14-a57f-c104db4dc2f1", "uid": "2a358cee-6489-4f14-a57f-c104db4dc2f1",
"updated": "2018-01-01T12:00:00Z", "updated": "2018-01-15T18:00:00Z",
"title": "Some event", "title": "Some event",
"start": "2018-01-15T13:00:00", "start": "2018-01-15T13:00:00",
"timeZone": "America/New_York", "timeZone": "America/New_York",
"duration": "PT1H" "duration": "PT1H"
} }
6.2. Simple Task 6.2. Simple task
This example illustrates a simple task for a plain to-do item. This example illustrates a simple task for a plain to-do item.
{ {
"@type": "jstask", "@type": "jstask",
"uid": "2a358cee-6489-4f14-a57f-c104db4dc2f2", "uid": "2a358cee-6489-4f14-a57f-c104db4dc2f2",
"updated": "2018-01-19T18:00:00Z", "updated": "2018-01-15T18:00:00Z",
"title": "Do something" "title": "Do something"
} }
6.3. Simple Group 6.3. Simple group
This example illustrates a simple calendar object group that contains This example illustrates a simple calendar object group that contains
an event and a task. an event and a task.
{ {
"@type": "jsgroup", "@type": "jsgroup",
"uid": "2a358cee-6489-4f14-a57f-c104db4dc343", "uid": "2a358cee-6489-4f14-a57f-c104db4dc343",
"updated": "2018-01-15T18:00:00Z", "updated": "2018-01-15T18:00:00Z",
"title": "A simple group", "name": "A simple group",
"entries": [ "entries": [
{ {
"@type": "jsevent", "@type": "jsevent",
"uid": "2a358cee-6489-4f14-a57f-c104db4dc2f1", "uid": "2a358cee-6489-4f14-a57f-c104db4dc2f1",
"updated": "2018-01-15T18:00:00Z", "updated": "2018-01-15T18:00:00Z",
"title": "Some event", "title": "Some event",
"start": "2018-01-15T13:00:00", "start": "2018-01-15T13:00:00",
"timeZone": "America/New_York", "timeZone": "America/New_York",
"duration": "PT1H" "duration": "PT1H"
}, },
{ {
"@type": "jstask", "@type": "jstask",
"uid": "2a358cee-6489-4f14-a57f-c104db4dc2f2", "uid": "2a358cee-6489-4f14-a57f-c104db4dc2f2",
"updated": "2018-01-15T18:00:00Z", "updated": "2018-01-15T18:00:00Z",
"title": "Do something" "title": "Do something"
} }
] ]
} }
6.4. All-day Event 6.4. All-day event
This example illustrates an event for an international holiday. It This example illustrates an event for an international holiday. It
specifies an all-day event on April 1 that occurs every year since specifies an all-day event on April 1 that occurs every year since
the year 1900. the year 1900.
{ {
"...": "", "...": "",
"title": "April Fool's Day", "title": "April Fool's Day",
"showWithoutTime": true, "showWithoutTime": true,
"start": "1900-04-01T00:00:00", "start": "1900-04-01T00:00:00",
"duration": "P1D", "duration": "P1D",
"recurrenceRule": { "recurrenceRule": {
"@type": "RecurrenceRule",
"frequency": "yearly" "frequency": "yearly"
} }
} }
6.5. Task with a Due Date 6.5. Task with a due date
This example illustrates a task with a due date. It is a reminder to This example illustrates a task with a due date. It is a reminder to
buy groceries before 6pm Vienna local time on January 19, 2018. The buy groceries before 6pm Vienna local time on January 19, 2018. The
calendar user expects to need 1 hour for shopping. calendar user expects to need 1 hour for shopping.
{ {
"...": "", "...": "",
"title": "Buy groceries", "title": "Buy groceries",
"due": "2018-01-19T18:00:00", "due": "2018-01-19T18:00:00",
"timeZone": "Europe/Vienna", "timeZone": "Europe/Vienna",
"estimatedDuration": "PT1H" "estimatedDuration": "PT1H"
} }
6.6. Event with End Time Zone 6.6. Event with end time-zone
This example illustrates the use of end time-zones by use of an This example illustrates the use of end time-zones by use of an
international flight. The flight starts on April 1, 2018 at 9am in international flight. The flight starts on April 1, 2018 at 9am in
Berlin local time. The duration of the flight is scheduled at 10 Berlin local time. The duration of the flight is scheduled at 10
hours 30 minutes. The time at the flights destination is in the same hours 30 minutes. The time at the flights destination is in the same
time-zone as Tokyo. Calendar clients could use the end time-zone to time-zone as Tokyo. Calendar clients could use the end time-zone to
display the arrival time in Tokyo local time and highlight the time- display the arrival time in Tokyo local time and highlight the time-
zone difference of the flight. The location names can serve as input zone difference of the flight. The location names can serve as input
for navigation systems. for navigation systems.
{ {
"...": "", "...": "",
"title": "Flight XY51 to Tokyo", "title": "Flight XY51 to Tokyo",
"start": "2018-04-01T09:00:00", "start": "2018-04-01T09:00:00",
"timeZone": "Europe/Berlin", "timeZone": "Europe/Berlin",
"duration": "PT10H30M", "duration": "PT10H30M",
"locations": { "locations": {
"2a358cee-6489-4f14-a57f-c104db4dc2f1": { "2a358cee-6489-4f14-a57f-c104db4dc2f1": {
"@type": "Location",
"rel": "start", "rel": "start",
"name": "Frankfurt Airport (FRA)" "name": "Frankfurt Airport (FRA)"
}, },
"c2c7ac67-dc13-411e-a7d4-0780fb61fb08": { "c2c7ac67-dc13-411e-a7d4-0780fb61fb08": {
"@type": "Location",
"rel": "end", "rel": "end",
"name": "Narita International Airport (NRT)", "name": "Narita International Airport (NRT)",
"timeZone": "Asia/Tokyo" "timeZone": "Asia/Tokyo"
} }
} }
} }
6.7. Floating-time Event (with Recurrence) 6.7. Floating-time event (with recurrence)
This example illustrates the use of floating-time. Since January 1, This example illustrates the use of floating-time. Since January 1,
2018, a calendar user blocks 30 minutes every day to practice Yoga at 2018, a calendar user blocks 30 minutes every day to practice Yoga at
7am local time, in whatever time-zone the user is located on that 7am local time, in whatever time-zone the user is located on that
date. date.
{ {
"...": "", "...": "",
"title": "Yoga", "title": "Yoga",
"start": "2018-01-01T07:00:00", "start": "2018-01-01T07:00:00",
"duration": "PT30M", "duration": "PT30M",
"recurrenceRule": { "recurrenceRule": {
"@type": "RecurrenceRule",
"frequency": "daily" "frequency": "daily"
} }
} }
6.8. Event with Multiple Locations and Localization 6.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. The event title and descriptions are localized. online. The event title and descriptions are localized.
{ {
"...": "", "...": "",
"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": {
"c0503d30-8c50-4372-87b5-7657e8e0fedd": { "c0503d30-8c50-4372-87b5-7657e8e0fedd": {
"@type": "Location",
"name": "The Music Bowl", "name": "The Music Bowl",
"description": "Music Bowl, Central Park, New York", "description": "Music Bowl, Central Park, New York",
"coordinates": "geo:40.7829,73.9654" "coordinates": "geo:40.7829,73.9654"
} }
}, },
"virtualLocations": { "virtualLocations": {
"6f3696c6-1e07-47d0-9ce1-f50014b0041a": { "6f3696c6-1e07-47d0-9ce1-f50014b0041a": {
"@type": "VirtualLocation",
"name": "Free live Stream from Music Bowl", "name": "Free live Stream from Music Bowl",
"uri": "https://stream.example.com/the_band_2018" "uri": "https://stream.example.com/the_band_2018"
} }
}, },
"localizations": { "localizations": {
"de": { "de": {
"title": "Live von der Music Bowl: The Band!", "title": "Live von der Music Bowl: The Band!",
"description": "Schau dir das groesste Musikereignis an!", "description": "Schau dir das groesste Musikereignis an!",
"virtualLocations/6f3696c6-1e07-47d0-9ce1-f50014b0041a/name": "virtualLocations/6f3696c6-1e07-47d0-9ce1-f50014b0041a/name":
"Gratis Live-Stream aus der Music Bowl" "Gratis Live-Stream aus der Music Bowl"
} }
} }
} }
6.9. Recurring Event with Overrides 6.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 at 9am London time and occurs every week until June 25, 2018. Each
(inclusive). Each lecture lasts for one hour and thirty minutes and lecture lasts for one hour and 30 minutes and is located at the
is located at the Mathematics department. This event has exceptional Mathematics department. This event has exceptional occurrences: at
occurrences: at the last occurrence of the course is an exam, which the last occurrence of the course is an exam, which lasts for 2 hours
lasts for 2 hours and starts at 10am. Also, the location of the exam and starts at 10am. Also, the location of the exam differs from the
differs from the usual location. On April 2 no course is held. On usual location. On April 2 no course is held. On January 5 at 2pm
January 5 at 2pm is an optional introduction course, that occurs is an optional introduction course, that occurs before the first
before the first regular lecture. 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", "@type": "Location",
"description": "Math Lab I, Department of Mathematics\n1 University Drive" "title": "Math lab room 1",
} "description": "Math Lab I, Department of Mathematics"
}, }
"recurrenceRule": { },
"frequency": "weekly", "recurrenceRule": {
"until": "2018-06-25T09:00:00" "@type": "RecurrenceRule",
}, "frequency": "weekly",
"recurrenceOverrides": { "until": "2018-06-25T09:00:00"
"2018-01-05T14:00:00": { },
"title": "Introduction to Calculus I (optional)" "recurrenceOverrides": {
}, "2018-01-05T14:00:00": {
"2018-04-02T09:00:00": { "title": "Introduction to Calculus I (optional)"
"excluded": true },
}, "2018-04-02T09:00:00": {
"2018-06-25T09:00:00": { "excluded": "true"
"title": "Calculus I Exam", },
"start": "2018-06-25T10:00:00", "2018-06-25T09:00:00": {
"duration": "PT2H", "title": "Calculus I Exam",
"locations": { "start": "2018-06-25T10:00:00",
"2a358cee-6489-4f14-a57f-c104db4dc2f1": { "duration": "PT2H",
"title": "Big Auditorium", "locations": {
"description": "Big Auditorium, Other Road" "2a358cee-6489-4f14-a57f-c104db4dc2f1": {
} "@type": "Location",
} "title": "Big Auditorium",
} "description": "Big Auditorium, Other Road"
} }
} }
}
}
}
6.10. Recurring Event with Participants 6.10. Recurring event with participants
This example illustrates scheduled events. A team meeting occurs This example illustrates scheduled events. A team meeting occurs
every week since January 8, 2018 at 9am Johannesburg time. The event every week since January 8, 2018 at 9am Johannesburg time. The event
owner also chairs the event. Participants meet in a virtual meeting owner also chairs the event. Participants meet in a virtual meeting
room. An attendee has accepted the invitation, but on March 8, 2018 room. An attendee has accepted the invitation, but on March 8, 2018
he is unavailable and declined participation for this occurrence, he is unavailable and declined participation for this occurrence.
leaving a short explanation for the organizer.
{ {
"...": "", "...": "",
"title": "FooBar team meeting", "title": "FooBar team meeting",
"start": "2018-01-08T09:00:00", "start": "2018-01-08T09:00:00",
"timeZone": "Africa/Johannesburg", "timeZone": "Africa/Johannesburg",
"duration": "PT1H", "duration": "PT1H",
"virtualLocations": { "virtualLocations": {
"2a358cee-6489-4f14-a57f-c104db4dc2f1": { "2a358cee-6489-4f14-a57f-c104db4dc2f1": {
"name": "ChatMe meeting room", "@type": "VirtualLocation",
"uri": "https://chatme.example.com?id=1234567" "name": "ChatMe meeting room",
} "uri": "https://chatme.example.com?id=1234567"
}, }
"recurrenceRule": { },
"frequency": "weekly" "recurrenceRule": {
}, "@type": "RecurrenceRule",
"replyTo": { "frequency": "weekly"
"imip": "mailto:6489-4f14-a57f-c1@schedule.example.com" },
}, "replyTo": {
"participants": { "imip": "mailto:6489-4f14-a57f-c1@schedule.example.com"
"dG9tQGZvb2Jhci5leGFtcGxlLmNvbQ": { },
"name": "Tom Tool", "participants": {
"email": "tom@foobar.example.com", "dG9tQGZvb2Jhci5xlLmNvbQ": {
"sendTo": { "@type": "Participant",
"imip": "mailto:41f3-8b10-516a4d0f42bc@calendar.example.com" "name": "Tom Tool",
}, "email": "tom@foobar.example.com",
"participationStatus": "accepted", "sendTo": {
"roles": { "imip": "mailto:6489-4f14-a57f-c1@calendar.example.com"
"attendee": true },
} "participationStatus": "accepted",
}, "roles": {
"em9lQGZvb2Jhci5leGFtcGxlLmNvbQ": { "attendee": true
"name": "Zoe Zelda", }
"email": "zoe@foobar.example.com", },
"sendTo": { "em9lQGZvb2GFtcGxlLmNvbQ": {
"imip": "mailto:zoe@foobar.example.com" "@type": "Participant",
}, "name": "Zoe Zelda",
"participationStatus": "accepted", "email": "zoe@foobar.example.com",
"roles": { "sendTo": {
"owner": true, "imip": "mailto:zoe@foobar.example.com"
"attendee": true, },
"chair": true "participationStatus": "accepted",
} "roles": {
}, "owner": true,
"...": "" "attendee": true,
}, "chair": true
"recurrenceOverrides": { }
"2018-03-08T09:00:00": { },
"participants/dG9tQGZvb2Jhci5leGFtcGxlLmNvbQ/participationStatus": "...": ""
"declined",
"participants/dG9tQGZvb2Jhci5leGFtcGxlLmNvbQ/participationComment":
"Sorry, kid's recital this week, can't make it." },
} "recurrenceOverrides": {
} "2018-03-08T09:00:00": {
} "participants/dG9tQGZvb2Jhci5xlLmNvbQ/participationStatus":
"declined"
}
}
}
7. Security Considerations 7. Security Considerations
Calendaring and scheduling information is very privacy-sensitive. Calendaring and scheduling information is very privacy-sensitive.
The transmission of such information must be careful to protect it The transmission of such information must be careful to protect it
from possible threats, such as eavesdropping, replay, message from possible threats, such as eavesdropping, replay, message
insertion, deletion, modification, and man-in-the-middle attacks. insertion, deletion, modification, and man-in-the-middle attacks.
This document just defines the data format; such considerations are This document just defines the data format; such considerations are
primarily the concern of the API or method of storage and primarily the concern of the API or method of storage and
transmission of such files. transmission of such files.
skipping to change at page 52, line 21 skipping to change at page 54, line 23
untrusted data causing excessive memory allocation. untrusted data causing excessive memory allocation.
7.3. URI Values 7.3. URI Values
Several JSCalendar properties contain URIs as values, and processing Several JSCalendar properties contain URIs as values, and processing
these properties requires extra care. Section 7 of [RFC3986] these properties requires extra care. Section 7 of [RFC3986]
discusses security risk related to URIs. discusses security risk related to URIs.
8. IANA Considerations 8. IANA Considerations
8.1. Media Type Registration
This document defines a MIME media type for use with JSCalendar data This document defines a MIME media type for use with JSCalendar data
formatted in JSON. formatted in JSON.
Type name: application Type name: application
Subtype name: jscalendar+json Subtype name: jscalendar+json
Required parameters: type Required parameters: type
The "type" parameter conveys the type of the JSCalendar data in The "type" parameter conveys the type of the JSCalendar data in
skipping to change at page 53, line 28 skipping to change at page 55, line 32
calext@ietf.org calext@ietf.org
Intended usage: COMMON Intended usage: COMMON
Restrictions on usage: N/A Restrictions on usage: N/A
Author: See the "Author's Address" section of this document. Author: See the "Author's Address" section of this document.
Change controller: IETF Change controller: IETF
8.2. Creation of "JSCalendar Properties" Registry
The IANA will create the "JSCalendar Properties" registry to allow
interoperability of extensions to JSCalendar objects.
This registry follows the expert review process unless the "intended
use" field is "common", in which case registration follows the
specification required process. Preliminary community review for
this registry is optional but strongly encouraged.
A registration can have an intended use of "common", "reserved", or
"obsolete". The IANA will list common-use registrations prominently
and separately from those with other intended use values.
A "reserved" registration reserves a property name without assigning
semantics to avoid name collisions with future extensions or protocol
use.
An "obsolete" registration denotes a property that is no longer
expected to be added by up-to-date systems. A new property has
probably been defined covering the obsolete property's semantics.
The JSCalendar property registration procedure is not a formal
standards process but rather an administrative procedure intended to
allow community comment and sanity checking without excessive time
delay.
8.2.1. Preliminary Community Review
Notice of a potential new registration SHOULD be sent to the Calext
mailing list <calsify@ietf.org> for review. This mailing list is
appropriate to solicit community feedback on a proposed new property.
Properties registrations must be marked with their intended use:
"common", "reserved" or "obsolete".
The intent of the public posting to this list is to solicit comments
and feedback on the choice of the property name, the unambiguity of
the specification document, and a review of any interoperability or
security considerations. The submitter may submit a revised
registration proposal or abandon the registration completely at any
time.
8.2.2. Submit Request to IANA
Registration requests can be sent to <iana@iana.org>.
8.2.3. Designated Expert Review
The primary concern of the designated expert (DE) is preventing name
collisions and encouraging the submitter to document security and
privacy considerations; a published specification is not required.
For a common-use registration, the DE is expected to confirm that
suitable documentation, as described in Section 4.6 of [RFC8126], is
available. The DE should also verify that the property name does not
conflict with work that is active or already published within the
IETF.
Before a period of 30 days has passed, the DE will either approve or
deny the registration request and publish a notice of the decision to
the Calext WG mailing list or its successor, as well as inform IANA.
A denial notice must be justified by an explanation, and, in the
cases where it is possible, concrete suggestions on how the request
can be modified so as to become acceptable should be provided.
If the DE does not respond within 30 days, the registrant may request
the IESG take action to process the request in a timely manner.
8.2.4. Change Procedures
Once a JSCalendar property has been published by the IANA, the change
controller may request a change to its definition. The same
procedure that would be appropriate for the original registration
request is used to process a change request.
JSCalendar property registrations may not be deleted; properties that
are no longer believed appropriate for use can be declared obsolete
by a change to their "intended use" field; such properties will be
clearly marked in the lists published by the IANA.
Significant changes to a JSCalendar property's definition should be
requested only when there are serious omissions or errors in the
published specification, as such changes may cause interoperability
issues. When review is required, a change request may be denied if
it renders entities that were valid under the previous definition
invalid under the new definition.
The owner of a JSCalendar property may pass responsibility to another
person or agency by informing the IANA; this can be done without
discussion or review.
The IESG may reassign responsibility for a JSCalendar property. The
most common case of this will be to enable changes to be made to a
registration where the author of the registration has died, moved out
of contact, or is otherwise unable to make changes that are important
to the community.
8.2.5. JMAP Properties Registry Template
o Property Name: The name of the property. The property name MUST
NOT already be registered for any of the objects listed in
Context. Objects not listed in Context MAY already have
registered a different property with the same name.
o Property Type: The type of this property, using type signatures as
specified in Section 1.3. The property type MUST be registed in
the Type Registry.
o Property Context: A comma-separated list of JSCalendar object
types this property is allowed on.
o RFC Reference: The RFC and section where the property is specified
(omitted for "reserved" property names).
o Intended Use: Common, reserved, or obsolete.
o Change Controller: ("IETF" for Standards Track / BCP RFCs).
8.2.6. Initial Contents for the JSCalendar Properties Registry
The following table lists the initial entries of the JSCalendar
Properties registry. All properties are for common-use. All RFC
section references are for this document. The change controller for
all these properties is "IETF".
+--------------+----------------------------+--------------+--------+
| Property | Property Type | Property | RFC Re |
| Name | | Context | ferenc |
| | | | e |
+--------------+----------------------------+--------------+--------+
| @type | String | JSEvent, | Sectio |
| | | JSTask, | n |
| | | JSGroup, Abs | 4.1.1, |
| | | oluteTrigger | Sectio |
| | | , Alert, | n |
| | | Link, | 4.5.2, |
| | | Location, Of | Sectio |
| | | fsetTrigger, | n |
| | | Participant, | 4.2.7, |
| | | ParticipantP | Sectio |
| | | rogress, Rec | n |
| | | urrenceRule, | 4.2.5, |
| | | Relation, | Sectio |
| | | TimeZone, Vi | n |
| | | rtualLocatio | 4.4.5, |
| | | n | Sectio |
| | | | n |
| | | | 5.2.5, |
| | | | Sectio |
| | | | n |
| | | | 4.3.2, |
| | | | Sectio |
| | | | n |
| | | | 4.1.3, |
| | | | Sectio |
| | | | n |
| | | | 4.7.2, |
| | | | Sectio |
| | | | n |
| | | | 4.2.6 |
| | | | |
| acknowledged | UTCDateTime | Alert | Sectio |
| | | | n |
| | | | 4.5.2 |
| | | | |
| action | String | Alert | Sectio |
| | | | n |
| | | | 4.5.2 |
| | | | |
| alerts | Id[Alert] | JSEvent, | Sectio |
| | | JSTask | n |
| | | | 4.5.2 |
| | | | |
| attendance | String | Participant | Sectio |
| | | | n |
| | | | 4.4.5 |
| | | | |
| categories | String[Boolean] | JSEvent, | Sectio |
| | | JSTask, | n |
| | | JSGroup | 4.2.10 |
| | | | |
| cid | String | Link | Sectio |
| | | | n |
| | | | 4.2.7 |
| | | | |
| color | String | JSEvent, | Sectio |
| | | JSTask, | n |
| | | JSGroup | 4.2.11 |
| | | | |
| contentType | String | Link | Sectio |
| | | | n |
| | | | 4.2.7 |
| | | | |
| coordinates | String | Location | Sectio |
| | | | n |
| | | | 4.2.5 |
| | | | |
| created | UTCDateTime | JSEvent, | Sectio |
| | | JSTask, | n |
| | | JSGroup | 4.1.5 |
| | | | |
| delegatedFro | String[Boolean] | Participant | Sectio |
| m | | | n |
| | | | 4.4.5 |
| | | | |
| delegatedTo | String[Boolean] | Participant | Sectio |
| | | | n |
| | | | 4.4.5 |
| | | | |
| description | String | JSEvent, | Sectio |
| | | JSTask, | n |
| | | Location, Vi | 4.2.2, |
| | | rtualLocatio | Sectio |
| | | n | n |
| | | | 4.2.5, |
| | | | Sectio |
| | | | n |
| | | | 4.2.6 |
| | | | |
| descriptionC | String | JSEvent, | Sectio |
| ontentType | | JSTask | n |
| | | | 4.2.3 |
| | | | |
| display | String | Link | Sectio |
| | | | n |
| | | | 4.2.7 |
| | | | |
| due | LocalDateTime | JSTask | Sectio |
| | | | n |
| | | | 5.2.1 |
| | | | |
| duration | Duration | JSEvent | Sectio |
| | | | n |
| | | | 5.1.2 |
| | | | |
| email | String | Participant | Sectio |
| | | | n |
| | | | 4.4.5 |
| | | | |
| entries | String[JSTask|JSEvent] | JSGroup | Sectio |
| | | | n |
| | | | 5.3.1 |
| | | | |
| estimatedDur | Duration | JSTask | Sectio |
| ation | | | n |
| | | | 5.2.3 |
| | | | |
| excluded | Boolean | JSEvent, | Sectio |
| | | JSTask | n |
| | | | 4.3.4 |
| | | | |
| expectReply | Boolean | Participant | Sectio |
| | | | n |
| | | | 4.4.5 |
| | | | |
| freeBusyStat | String | JSEvent, | Sectio |
| us | | JSTask | n |
| | | | 4.4.2 |
| | | | |
| href | String | Link | Sectio |
| | | | n |
| | | | 4.2.7 |
| | | | |
| invitedBy | String | Participant | Sectio |
| | | | n |
| | | | 4.4.5 |
| | | | |
| keywords | String[Boolean] | JSEvent, | Sectio |
| | | JSTask, | n |
| | | JSGroup | 4.2.9 |
| | | | |
| kind | String | Participant | Sectio |
| | | | n |
| | | | 4.4.5 |
| | | | |
| linkIds | Id[Boolean] | Location, | Sectio |
| | | Participant | n |
| | | | 4.2.5, |
| | | | Sectio |
| | | | n |
| | | | 4.4.5 |
| | | | |
| localization | String[PatchObject] | JSEvent, | Sectio |
| s | | JSTask | n |
| | | | 4.6.1 |
| | | | |
| locationId | String | Participant | Sectio |
| | | | n |
| | | | 4.4.5 |
| | | | |
| locations | Id[Location] | JSEvent, | Sectio |
| | | JSTask | n |
| | | | 4.2.5 |
| | | | |
| memberOf | String[Boolean] | Participant | Sectio |
| | | | n |
| | | | 4.4.5 |
| | | | |
| method | String | JSEvent, | Sectio |
| | | JSTask | n |
| | | | 4.1.8 |
| | | | |
| name | String | Location, | Sectio |
| | | Participant | n |
| | | | 4.2.5, |
| | | | Sectio |
| | | | n |
| | | | 4.4.5 |
| | | | |
| offset | SignedDuration | OffsetTrigge | Sectio |
| | | r | n |
| | | | 4.5.2 |
| | | | |
| participants | Id[Participant] | JSEvent, | Sectio |
| | | JSTask | n |
| | | | 4.4.5 |
| | | | |
| participatio | String | Participant | Sectio |
| nComment | | | n |
| | | | 4.4.5 |
| | | | |
| participatio | String | Participant | Sectio |
| nStatus | | | n |
| | | | 4.4.5 |
| | | | |
| priority | Int | JSEvent, | Sectio |
| | | JSTask | n |
| | | | 4.4.1 |
| | | | |
| privacy | String | JSEvent, | Sectio |
| | | JSTask | n |
| | | | 4.4.3 |
| | | | |
| prodId | String | JSEvent, | Sectio |
| | | JSTask, | n |
| | | JSGroup | 4.1.4 |
| | | | |
| recurrenceId | LocalDateTime | JSEvent, | Sectio |
| | | JSTask | n |
| | | | 4.3.1 |
| | | | |
| recurrenceOv | LocalDateTime[PatchObject] | JSEvent, | Sectio |
| errides | | JSTask | n |
| | | | 4.3.3 |
| | | | |
| recurrenceRu | RecurrenceRule | JSEvent, | Sectio |
| le | | JSTask | n |
| | | | 4.3.2 |
| | | | |
| rel | String | Link | Sectio |
| | | | n |
| | | | 4.2.7 |
| | | | |
| relatedTo | String[Relation] | JSEvent, | Sectio |
| | | JSTask, | n |
| | | Alert | 4.1.3, |
| | | | Sectio |
| | | | n |
| | | | 4.5.2 |
| | | | |
| relation | String[Boolean] | Relation | Sectio |
| | | | n |
| | | | 1.4.10 |
| | | | |
| relativeTo | String | OffsetTrigge | Sectio |
| | | r, Location | n |
| | | | 4.5.2, |
| | | | Sectio |
| | | | n |
| | | | 4.2.5 |
| | | | |
| replyTo | String[String] | JSEvent, | Sectio |
| | | JSTask | n |
| | | | 4.4.4 |
| | | | |
| roles | String[Boolean] | Participant | Sectio |
| | | | n |
| | | | 4.4.5 |
| | | | |
| scheduleSequ | UnsignedInt | Participant | Sectio |
| ence | | | n |
| | | | 4.4.5 |
| | | | |
| scheduleUpda | UTCDateTime | Participant | Sectio |
| ted | | | n |
| | | | 4.4.5 |
| | | | |
| sendTo | String[String] | Participant | Sectio |
| | | | n |
| | | | 4.4.5 |
| | | | |
| sequence | UnsignedInt | JSEvent, | Sectio |
| | | JSTask | n |
| | | | 4.1.7 |
| | | | |
| showWithoutT | Boolean | JSEvent, | Sectio |
| ime | | JSTask | n |
| | | | 4.2.4 |
| | | | |
| size | UnsignedInt | Link | Sectio |
| | | | n |
| | | | 4.2.7 |
| | | | |
| start | LocalDateTime | JSEvent, | Sectio |
| | | JSTask | n |
| | | | 5.1.1, |
| | | | Sectio |
| | | | n |
| | | | 5.2.2 |
| | | | |
| status | String | ParticipantP | Sectio |
| | | rogress | n |
| | | | 5.2.5 |
| | | | |
| statusUpdate | UTCDateTime | JSTask | Sectio |
| dAt | | | n |
| | | | 5.2.4 |
| | | | |
| source | String | JSGroup | Sectio |
| | | | n |
| | | | 5.3.2 |
| | | | |
| status | String | JSEvent, | Sectio |
| | | JSTask | n |
| | | | 5.1.3, |
| | | | Sectio |
| | | | n |
| | | | 5.2.6 |
| | | | |
| timestamp | UTCDateTime | ParticipantP | Sectio |
| | | rogress | n |
| | | | 5.2.5 |
| | | | |
| timeZone | String|null | JSEvent, | Sectio |
| | | JSTask, | n |
| | | Location | 4.7.1, |
| | | | Sectio |
| | | | n |
| | | | 4.2.5 |
| | | | |
| timeZones | String[TimeZone] | JSEvent, | Sectio |
| | | JSTask | n |
| | | | 4.7.2 |
| | | | |
| title | String | JSEvent, | Sectio |
| | | JSTask, | n |
| | | JSGroup, | 4.2.1 |
| | | Link | |
| | | | |
| trigger | OffsetTrigger|AbsoluteTrig | Alert | Sectio |
| | ger|UnknownTrigger | | n |
| | | | 4.5.2 |
| | | | |
| uid | String | JSEvent, | Sectio |
| | | JSTask, | n |
| | | JSGroup | 4.1.2 |
| | | | |
| updated | UTCDateTime | JSEvent, | Sectio |
| | | JSTask, | n |
| | | JSGroup | 4.1.6 |
| | | | |
| useDefaultAl | Boolean | JSEvent, | Sectio |
| erts | | JSTask | n |
| | | | 4.5.1 |
| | | | |
| virtualLocat | Id[VirtualLocation] | JSEvent, | Sectio |
| ions | | JSTask | n |
| | | | 4.2.6 |
| | | | |
| when | UTCDateTime | AbsoluteTrig | Sectio |
| | | ger | n |
| | | | 4.5.2 |
+--------------+----------------------------+--------------+--------+
Table 1
8.3. Creation of "JSCalendar Types" Registry
The IANA will create the "JSCalendar Types" registry to avoid name
collisions and provide a complete reference for all data types used
for JSCalendar property values. The registration process is the same
as for the JSCalendar Properties registry, as defined in Section 8.2.
8.3.1. JMAP Types Registry Template
o Type Name: The name of the type.
o RFC Reference: The RFC and section where the Type is specified
(may be omitted for "reserved" type names).
o Intended Use: Common, reserved, or obsolete.
o Change Controller: ("IETF" for Standards Track / BCP RFCs).
8.3.2. Initial Contents for the JSCalendar Properties Registry
The following table lists the initial entries of the JSCalendar Types
registry. All properties are for common-use. All RFC section
references are for this document. The change controller for all
these properties is "IETF".
+---------------------+----------------+
| Type Name | RFC Reference |
+---------------------+----------------+
| Alert | Section 4.5.2 |
| | |
| Boolean | Section 1.3 |
| | |
| Duration | Section 1.4.5 |
| | |
| Id | Section 1.4.7 |
| | |
| Int | Section 1.4.1 |
| | |
| LocalDateTime | Section 1.4.4 |
| | |
| Link | Section 4.2.7 |
| | |
| Location | Section 4.2.5 |
| | |
| Number | Section 1.3 |
| | |
| Participant | Section 4.4.5 |
| | |
| ParticipantProgress | Section 5.2.5 |
| | |
| PatchObject | Section 1.4.8 |
| | |
| RecurrenceRule | Section 4.3.2 |
| | |
| Relation | Section 1.4.10 |
| | |
| SignedDuration | Section 1.4.6 |
| | |
| String | Section 1.3 |
| | |
| TimeZone | Section 4.7.2 |
| | |
| TimeZoneRule | Section 4.7.2 |
| | |
| UnsignedInt | Section 1.4.2 |
| | |
| UTCDateTime | Section 1.4.3 |
| | |
| VirtualLocation | Section 4.2.6 |
+---------------------+----------------+
Table 2
8.4. Creation of "JSCalendar Enum Values" Registry
The IANA will create the "JSCalendar Enum Values" registry to allow
interoperable extension of semantics for properties with enumerable
values. Each such property will have a subregistry of allowed
values. The registration process for creating a new subregistry is
the same as for the JSCalendar Properties registry. The registration
process for a new enum value is the same but is only subject to
expert review; a specification is not required for a new allowed
value in an existing enum property where a simple description will
suffice.
8.4.1. JMAP Enum Subregistry Creation Template
This template is for adding a new subregistry to the JMAP Enum
registry.
o Property Name: The name(s) of the property or properties where
these values may be used. This MUST be registered in the
JSCalendar Properties registry.
o Property Context: The allowed object types where the property or
properties may appear, as registered in the JSCalendar Properties
registry. This disambiguates where there may be two distinct
properties with the same name in different contexts.
o Change Controller: ("IETF" for Standards Track / BCP RFCs).
o Values: The list of defined values for this enum, using the
template defined in Section 8.4.2.
8.4.2. JMAP Enum Subregistry Creation Template
This template is for adding a new enum value to a subregistry in the
JMAP Enum registry. When registering a new value for an existing
enum, the property name and context MUST be submitted with the
registration to identify the appropriate subregistry.
o Enum Value: The verbatim value of the enum.
o Description: A brief description or RFC and section reference for
the semantics of this value.
8.4.3. Initial Contents for the JSCalendar Enum Registry
All RFC section references are for this document.
------------------------------------------------------------
Property Name: action
Property Context: Alert
Change Controller: IETF
+------------+---------------+
| Enum Value | Description |
+------------+---------------+
| display | Section 4.5.2 |
| | |
| email | Section 4.5.2 |
+------------+---------------+
Table 3
------------------------------------------------------------
Property Name: attendance
Property Context: Participant
Change Controller: IETF
+------------+---------------+
| Enum Value | Description |
+------------+---------------+
| none | Section 4.4.5 |
| | |
| optional | Section 4.4.5 |
| | |
| required | Section 4.4.5 |
+------------+---------------+
Table 4
------------------------------------------------------------
Property Name: display
Property Context: Link
Change Controller: IETF
+------------+---------------+
| Enum Value | Description |
+------------+---------------+
| badge | Section 4.2.7 |
| | |
| graphic | Section 4.2.7 |
| | |
| fullsize | Section 4.2.7 |
| | |
| thumbnail | Section 4.2.7 |
+------------+---------------+
Table 5
------------------------------------------------------------
Property Name: freeBusyStatus
Property Context: JSEvent, JSTask
Change Controller: IETF
+------------+---------------+
| Enum Value | Description |
+------------+---------------+
| free | Section 4.4.2 |
| | |
| busy | Section 4.4.2 |
+------------+---------------+
Table 6
------------------------------------------------------------
Property Name: kind
Property Context: Participant
Change Controller: IETF
+------------+---------------+
| Enum Value | Description |
+------------+---------------+
| individual | Section 4.4.5 |
| | |
| group | Section 4.4.5 |
| | |
| resource | Section 4.4.5 |
| | |
| location | Section 4.4.5 |
+------------+---------------+
Table 7
------------------------------------------------------------
Property Name: participationStatus
Property Context: Participant
Change Controller: IETF
+--------------+---------------+
| Enum Value | Description |
+--------------+---------------+
| needs-action | Section 4.4.5 |
| | |
| accepted | Section 4.4.5 |
| | |
| declined | Section 4.4.5 |
| | |
| tenative | Section 4.4.5 |
+--------------+---------------+
Table 8
------------------------------------------------------------
Property Name: privacy
Property Context: JSEvent, JSTask
Change Controller: IETF
+------------+---------------+
| Enum Value | Description |
+------------+---------------+
| public | Section 4.4.3 |
| | |
| private | Section 4.4.3 |
| | |
| secret | Section 4.4.3 |
+------------+---------------+
Table 9
------------------------------------------------------------
Property Name: progress
Property Context: ParticipantProgress
Change Controller: IETF
+------------+---------------+
| Enum Value | Description |
+------------+---------------+
| completed | Section 5.2.5 |
| | |
| in-process | Section 5.2.5 |
| | |
| failed | Section 5.2.5 |
+------------+---------------+
Table 10
------------------------------------------------------------
Property Name: relation
Property Context: Relation
Change Controller: IETF
+------------+----------------+
| Enum Value | Description |
+------------+----------------+
| first | Section 1.4.10 |
| | |
| next | Section 1.4.10 |
| | |
| child | Section 1.4.10 |
| | |
| parent | Section 1.4.10 |
+------------+----------------+
Table 11
------------------------------------------------------------
Property Name: relativeTo
Property Context: OffsetTrigger, Location
Change Controller: IETF
+------------+---------------+
| Enum Value | Description |
+------------+---------------+
| start | Section 4.5.2 |
| | |
| end | Section 4.5.2 |
+------------+---------------+
Table 12
------------------------------------------------------------
Property Name: roles
Property Context: Participant
Change Controller: IETF
+------------+---------------+
| Enum Value | Description |
+------------+---------------+
| owner | Section 4.4.5 |
| | |
| attendee | Section 4.4.5 |
| | |
| chair | Section 4.4.5 |
+------------+---------------+
Table 13
------------------------------------------------------------
Property Name: status
Property Context: JSEvent
Change Controller: IETF
+------------+---------------+
| Enum Value | Description |
+------------+---------------+
| confirmed | Section 5.1.3 |
| | |
| cancelled | Section 5.1.3 |
| | |
| tentative | Section 5.1.3 |
+------------+---------------+
Table 14
------------------------------------------------------------
Property Name: status
Property Context: JSTask
Change Controller: IETF
+------------+---------------+
| Enum Value | Description |
+------------+---------------+
| completed | Section 5.2.6 |
| | |
| failed | Section 5.2.6 |
| | |
| in-process | Section 5.2.6 |
| | |
| cancelled | Section 5.2.6 |
| | |
| pending | Section 5.2.6 |
| | |
| failed | Section 5.2.6 |
+------------+---------------+
Table 15
9. Acknowledgments 9. Acknowledgments
The authors would like to thank the members of CalConnect for their The authors would like to thank the members of CalConnect for their
valuable contributions. This specification originated from the work valuable contributions. This specification originated from the work
of the API technical committee of CalConnect, the Calendaring and of the API technical committee of CalConnect, the Calendaring and
Scheduling Consortium. Scheduling Consortium.
10. References 10. References
10.1. Normative References 10.1. Normative References
skipping to change at page 55, line 32 skipping to change at page 76, line 27
<https://www.rfc-editor.org/info/rfc7529>. <https://www.rfc-editor.org/info/rfc7529>.
[RFC7808] Douglass, M. and C. Daboo, "Time Zone Data Distribution [RFC7808] Douglass, M. and C. Daboo, "Time Zone Data Distribution
Service", RFC 7808, DOI 10.17487/RFC7808, March 2016, Service", RFC 7808, DOI 10.17487/RFC7808, March 2016,
<https://www.rfc-editor.org/info/rfc7808>. <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>.
[RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for
Writing an IANA Considerations Section in RFCs", BCP 26,
RFC 8126, DOI 10.17487/RFC8126, June 2017,
<https://www.rfc-editor.org/info/rfc8126>.
[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,
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>.
10.2. Informative References 10.2. Informative References
 End of changes. 91 change blocks. 
293 lines changed or deleted 1247 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/