draft-ietf-calext-jscalendar-26.txt   draft-ietf-calext-jscalendar-27.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: September 9, 2020 March 8, 2020 Expires: December 17, 2020 June 15, 2020
JSCalendar: A JSON representation of calendar data JSCalendar: A JSON representation of calendar data
draft-ietf-calext-jscalendar-26 draft-ietf-calext-jscalendar-27
Abstract Abstract
This specification defines a data model and JSON representation of This specification defines a data model and JSON representation of
calendar data that can be used for storage and data exchange in a calendar data that can be used for storage and data exchange in a
calendaring and scheduling environment. It aims to be an alternative calendaring and scheduling environment. It aims to be an alternative
and, over time, successor to the widely deployed iCalendar data and, over time, successor to the widely deployed iCalendar data
format, and to be unambiguous, extendable, and simple to process. In format, and to be unambiguous, extendable, and simple to process. In
contrast to the jCal format, which is also JSON-based, JSCalendar is contrast to the jCal format, which is also JSON-based, JSCalendar is
not a direct mapping from iCalendar, but defines the data model not a direct mapping from iCalendar, but defines the data model
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 September 9, 2020. This Internet-Draft will expire on December 17, 2020.
Copyright Notice Copyright Notice
Copyright (c) 2020 IETF Trust and the persons identified as the Copyright (c) 2020 IETF Trust and the persons identified as the
document authors. All rights reserved. document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents Provisions Relating to IETF Documents
(https://trustee.ietf.org/license-info) in effect on the date of (https://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents publication of this document. Please review these documents
skipping to change at page 2, line 19 skipping to change at page 2, line 19
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 . . . . . . . . . . . . . . . . . 6 1.2. Notational Conventions . . . . . . . . . . . . . . . . . 6
1.3. Type Signatures . . . . . . . . . . . . . . . . . . . . . 6 1.3. Type Signatures . . . . . . . . . . . . . . . . . . . . . 6
1.4. Data Types . . . . . . . . . . . . . . . . . . . . . . . 7 1.4. Data Types . . . . . . . . . . . . . . . . . . . . . . . 7
1.4.1. Int . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.4.1. Int . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.4.2. UnsignedInt . . . . . . . . . . . . . . . . . . . . . 7 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 . . . . . . . . . . . . . . . . . . . . . . 8
1.4.6. SignedDuration . . . . . . . . . . . . . . . . . . . 8 1.4.6. SignedDuration . . . . . . . . . . . . . . . . . . . 8
1.4.7. Id . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.4.7. Id . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.4.8. PatchObject . . . . . . . . . . . . . . . . . . . . . 9 1.4.8. PatchObject . . . . . . . . . . . . . . . . . . . . . 9
1.4.9. Time Zones . . . . . . . . . . . . . . . . . . . . . 9 1.4.9. Time Zones . . . . . . . . . . . . . . . . . . . . . 9
1.4.10. Relation . . . . . . . . . . . . . . . . . . . . . . 10 1.4.10. Relation . . . . . . . . . . . . . . . . . . . . . . 10
2. JSCalendar Objects . . . . . . . . . . . . . . . . . . . . . 10 2. JSCalendar Objects . . . . . . . . . . . . . . . . . . . . . 10
2.1. JSEvent . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.1. JSEvent . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.2. JSTask . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.2. JSTask . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.3. JSGroup . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.3. JSGroup . . . . . . . . . . . . . . . . . . . . . . . . . 11
3. Structure of JSCalendar Objects . . . . . . . . . . . . . . . 11 3. Structure of JSCalendar Objects . . . . . . . . . . . . . . . 11
skipping to change at page 3, line 19 skipping to change at page 3, line 19
4.3.3. recurrenceOverrides . . . . . . . . . . . . . . . . . 28 4.3.3. recurrenceOverrides . . . . . . . . . . . . . . . . . 28
4.3.4. excluded . . . . . . . . . . . . . . . . . . . . . . 30 4.3.4. excluded . . . . . . . . . . . . . . . . . . . . . . 30
4.4. Sharing and Scheduling Properties . . . . . . . . . . . . 30 4.4. Sharing and Scheduling Properties . . . . . . . . . . . . 30
4.4.1. priority . . . . . . . . . . . . . . . . . . . . . . 30 4.4.1. priority . . . . . . . . . . . . . . . . . . . . . . 30
4.4.2. freeBusyStatus . . . . . . . . . . . . . . . . . . . 30 4.4.2. freeBusyStatus . . . . . . . . . . . . . . . . . . . 30
4.4.3. privacy . . . . . . . . . . . . . . . . . . . . . . . 30 4.4.3. privacy . . . . . . . . . . . . . . . . . . . . . . . 30
4.4.4. replyTo . . . . . . . . . . . . . . . . . . . . . . . 32 4.4.4. replyTo . . . . . . . . . . . . . . . . . . . . . . . 32
4.4.5. participants . . . . . . . . . . . . . . . . . . . . 32 4.4.5. participants . . . . . . . . . . . . . . . . . . . . 32
4.5. Alerts Properties . . . . . . . . . . . . . . . . . . . . 37 4.5. Alerts Properties . . . . . . . . . . . . . . . . . . . . 37
4.5.1. useDefaultAlerts . . . . . . . . . . . . . . . . . . 37 4.5.1. useDefaultAlerts . . . . . . . . . . . . . . . . . . 37
4.5.2. alerts . . . . . . . . . . . . . . . . . . . . . . . 37 4.5.2. alerts . . . . . . . . . . . . . . . . . . . . . . . 38
4.6. Multilingual Properties . . . . . . . . . . . . . . . . . 39 4.6. Multilingual Properties . . . . . . . . . . . . . . . . . 40
4.6.1. localizations . . . . . . . . . . . . . . . . . . . . 39 4.6.1. localizations . . . . . . . . . . . . . . . . . . . . 40
4.7. Time Zone Properties . . . . . . . . . . . . . . . . . . 40 4.7. Time Zone Properties . . . . . . . . . . . . . . . . . . 40
4.7.1. timeZone . . . . . . . . . . . . . . . . . . . . . . 40 4.7.1. timeZone . . . . . . . . . . . . . . . . . . . . . . 41
4.7.2. timeZones . . . . . . . . . . . . . . . . . . . . . . 40 4.7.2. timeZones . . . . . . . . . . . . . . . . . . . . . . 41
5. Type-specific JSCalendar Properties . . . . . . . . . . . . . 43 5. Type-specific JSCalendar Properties . . . . . . . . . . . . . 43
5.1. JSEvent Properties . . . . . . . . . . . . . . . . . . . 43 5.1. JSEvent Properties . . . . . . . . . . . . . . . . . . . 43
5.1.1. start . . . . . . . . . . . . . . . . . . . . . . . . 43 5.1.1. start . . . . . . . . . . . . . . . . . . . . . . . . 43
5.1.2. duration . . . . . . . . . . . . . . . . . . . . . . 43 5.1.2. duration . . . . . . . . . . . . . . . . . . . . . . 43
5.1.3. status . . . . . . . . . . . . . . . . . . . . . . . 43 5.1.3. status . . . . . . . . . . . . . . . . . . . . . . . 44
5.2. JSTask Properties . . . . . . . . . . . . . . . . . . . . 44 5.2. JSTask Properties . . . . . . . . . . . . . . . . . . . . 44
5.2.1. due . . . . . . . . . . . . . . . . . . . . . . . . . 44 5.2.1. due . . . . . . . . . . . . . . . . . . . . . . . . . 44
5.2.2. start . . . . . . . . . . . . . . . . . . . . . . . . 44 5.2.2. start . . . . . . . . . . . . . . . . . . . . . . . . 44
5.2.3. estimatedDuration . . . . . . . . . . . . . . . . . . 44 5.2.3. estimatedDuration . . . . . . . . . . . . . . . . . . 45
5.2.4. progress . . . . . . . . . . . . . . . . . . . . . . 44 5.2.4. progress . . . . . . . . . . . . . . . . . . . . . . 45
5.2.5. progressUpdated . . . . . . . . . . . . . . . . . . . 45 5.2.5. progressUpdated . . . . . . . . . . . . . . . . . . . 45
5.3. JSGroup Properties . . . . . . . . . . . . . . . . . . . 45 5.3. JSGroup Properties . . . . . . . . . . . . . . . . . . . 46
5.3.1. entries . . . . . . . . . . . . . . . . . . . . . . . 46 5.3.1. entries . . . . . . . . . . . . . . . . . . . . . . . 47
5.3.2. source . . . . . . . . . . . . . . . . . . . . . . . 46 5.3.2. source . . . . . . . . . . . . . . . . . . . . . . . 47
6. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . 46 6. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . 47
6.1. Simple event . . . . . . . . . . . . . . . . . . . . . . 46 6.1. Simple event . . . . . . . . . . . . . . . . . . . . . . 47
6.2. Simple task . . . . . . . . . . . . . . . . . . . . . . . 47 6.2. Simple task . . . . . . . . . . . . . . . . . . . . . . . 47
6.3. Simple group . . . . . . . . . . . . . . . . . . . . . . 47 6.3. Simple group . . . . . . . . . . . . . . . . . . . . . . 48
6.4. All-day event . . . . . . . . . . . . . . . . . . . . . . 48 6.4. All-day event . . . . . . . . . . . . . . . . . . . . . . 48
6.5. Task with a due date . . . . . . . . . . . . . . . . . . 48 6.5. Task with a due date . . . . . . . . . . . . . . . . . . 49
6.6. Event with end time-zone . . . . . . . . . . . . . . . . 49 6.6. Event with end time-zone . . . . . . . . . . . . . . . . 49
6.7. Floating-time event (with recurrence) . . . . . . . . . . 49 6.7. Floating-time event (with recurrence) . . . . . . . . . . 50
6.8. Event with multiple locations and localization . . . . . 50 6.8. Event with multiple locations and localization . . . . . 50
6.9. Recurring event with overrides . . . . . . . . . . . . . 51 6.9. Recurring event with overrides . . . . . . . . . . . . . 51
6.10. Recurring event with participants . . . . . . . . . . . . 52 6.10. Recurring event with participants . . . . . . . . . . . . 52
7. Security Considerations . . . . . . . . . . . . . . . . . . . 54 7. Security Considerations . . . . . . . . . . . . . . . . . . . 54
7.1. Expanding Recurrences . . . . . . . . . . . . . . . . . . 54 7.1. Expanding Recurrences . . . . . . . . . . . . . . . . . . 54
7.2. JSON Parsing . . . . . . . . . . . . . . . . . . . . . . 54 7.2. JSON Parsing . . . . . . . . . . . . . . . . . . . . . . 54
7.3. URI Values . . . . . . . . . . . . . . . . . . . . . . . 55 7.3. URI Values . . . . . . . . . . . . . . . . . . . . . . . 55
8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 55 7.4. Spam . . . . . . . . . . . . . . . . . . . . . . . . . . 55
8.1. Media Type Registration . . . . . . . . . . . . . . . . . 55 7.5. Duplication . . . . . . . . . . . . . . . . . . . . . . . 56
8.2. Creation of "JSCalendar Properties" Registry . . . . . . 56 7.6. Time Zones . . . . . . . . . . . . . . . . . . . . . . . 56
8.2.1. Preliminary Community Review . . . . . . . . . . . . 57 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 56
8.2.2. Submit Request to IANA . . . . . . . . . . . . . . . 57 8.1. Media Type Registration . . . . . . . . . . . . . . . . . 56
8.2.3. Designated Expert Review . . . . . . . . . . . . . . 57 8.2. Creation of "JSCalendar Properties" Registry . . . . . . 57
8.2.4. Change Procedures . . . . . . . . . . . . . . . . . . 58 8.2.1. Preliminary Community Review . . . . . . . . . . . . 58
8.2.5. JMAP Properties Registry Template . . . . . . . . . . 58 8.2.2. Submit Request to IANA . . . . . . . . . . . . . . . 58
8.2.3. Designated Expert Review . . . . . . . . . . . . . . 58
8.2.4. Change Procedures . . . . . . . . . . . . . . . . . . 59
8.2.5. JSCalendar Properties Registry Template . . . . . . . 59
8.2.6. Initial Contents for the JSCalendar Properties 8.2.6. Initial Contents for the JSCalendar Properties
Registry . . . . . . . . . . . . . . . . . . . . . . 59 Registry . . . . . . . . . . . . . . . . . . . . . . 60
8.3. Creation of "JSCalendar Types" Registry . . . . . . . . . 66 8.3. Creation of "JSCalendar Types" Registry . . . . . . . . . 67
8.3.1. JMAP Types Registry Template . . . . . . . . . . . . 66 8.3.1. JSCalendar Types Registry Template . . . . . . . . . 67
8.3.2. Initial Contents for the JSCalendar Types Registry . 66 8.3.2. Initial Contents for the JSCalendar Types Registry . 67
8.4. Creation of "JSCalendar Enum Values" Registry . . . . . . 68 8.4. Creation of "JSCalendar Enum Values" Registry . . . . . . 69
8.4.1. JMAP Enum Property Template . . . . . . . . . . . . . 68 8.4.1. JSCalendar Enum Property Template . . . . . . . . . . 69
8.4.2. JMAP Enum Value Template . . . . . . . . . . . . . . 68 8.4.2. JSCalendar Enum Value Template . . . . . . . . . . . 69
8.4.3. Initial Contents for the JSCalendar Enum Registry . . 68 8.4.3. Initial Contents for the JSCalendar Enum Registry . . 69
9. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 73 9. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 75
10. References . . . . . . . . . . . . . . . . . . . . . . . . . 73 10. References . . . . . . . . . . . . . . . . . . . . . . . . . 75
10.1. Normative References . . . . . . . . . . . . . . . . . . 73 10.1. Normative References . . . . . . . . . . . . . . . . . . 75
10.2. Informative References . . . . . . . . . . . . . . . . . 75 10.2. Informative References . . . . . . . . . . . . . . . . . 77
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 76 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 78
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. The format aims to be unambiguous, applications and systems. The format aims to be unambiguous,
extendable and simple to process. extendable and 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 11, line 44 skipping to change at page 11, line 44
following sections. Properties are specified as being either following sections. Properties are specified as being either
mandatory or optional. Optional properties may have a default value, mandatory or optional. Optional properties may have a default value,
if explicitly specified in the property definition. if explicitly specified in the property definition.
3.1. Normalization and Equivalence 3.1. Normalization and Equivalence
JSCalendar aims to provide unambiguous definitions for value types JSCalendar aims to provide unambiguous definitions for value types
and properties, but does not define a general normalization or and properties, but does not define a general normalization or
equivalence method for JSCalendar objects and types. This is because equivalence method for JSCalendar objects and types. This is because
the notion of equivalence might range from byte-level equivalence to the notion of equivalence might range from byte-level equivalence to
semantic equivalence, depending on the respective use case (for semantic equivalence, depending on the respective use case.
example, the CalDAV protocol [RFC4791] requires octet equivalence of
the encoded calendar object to determine ETag equivalence).
Normalization of JSCalendar objects is hindered because of the Normalization of JSCalendar objects is hindered because of the
following reasons: following reasons:
o Custom JSCalendar properties may contain arbitrary JSON values, o Custom JSCalendar properties may contain arbitrary JSON values,
including arrays. However, equivalence of arrays might or might including arrays. However, equivalence of arrays might or might
not depend on the order of elements, depending on the respective not depend on the order of elements, depending on the respective
property definition. property definition.
o Several JSCalendar property values are defined as URIs and media o Several JSCalendar property values are defined as URIs and media
skipping to change at page 18, line 47 skipping to change at page 18, line 47
Note that this is an informational estimate, and implementations Note that this is an informational estimate, and implementations
must be prepared to handle the actual size being quite different must be prepared to handle the actual size being quite different
when the resource is fetched. when the resource is fetched.
o rel: "String" (optional) o rel: "String" (optional)
Identifies the relation of the linked resource to the object. If Identifies the relation of the linked resource to the object. If
set, the value MUST be a relation type from the IANA registry set, the value MUST be a relation type from the IANA registry
[LINKRELS], as established in [RFC8288]. [LINKRELS], as established in [RFC8288].
Links with a rel of "enclosure" SHOULD be considered by the client Links with a rel of "enclosure" MUST be considered by the client
as attachments for download. as attachments for download.
Links with a rel of "describedby" SHOULD be considered by the Links with a rel of "describedby" MUST be considered by the client
client to be an alternative representation of the description. to be an alternative representation of the description.
Links with a rel of "icon" SHOULD be considered by the client to Links with a rel of "icon" MUST be considered by the client to be
be an image that it may use when presenting the calendar data to a 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 one of "rel" property MUST be set to "icon". The value MUST be one of
the following values, a value registered in the IANA JSCalendar the following values, a value registered in the IANA JSCalendar
Enum Registry, or a vendor-specific value: Enum Registry, or a vendor-specific value:
skipping to change at page 33, line 17 skipping to change at page 33, line 17
Specifies the type of this object. This MUST be "Participant". 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 description: "String" (optional).
A plain text description of this participant. For example, this
may include more information about their role in the event or how
best to contact them.
o sendTo: "String[String]" (optional) o sendTo: "String[String]" (optional)
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 for the method specified in the key. Future methods may is a URI for the method specified in the key. Future methods may
be defined in future specifications and registered with IANA; a be defined in future specifications and registered with IANA; a
calendar client MUST ignore any method it does not understand, but calendar client MUST ignore any method it does not understand, but
skipping to change at page 34, line 34 skipping to change at page 34, line 42
* "attendee": The participant is expected to attend. * "attendee": The participant is expected to attend.
* "optional": The participant is invited but not required. * "optional": The participant is invited but not required.
* "informational": The participant is copied for informational * "informational": The participant is copied for informational
reasons, and is not expected to attend. reasons, and is not expected to attend.
* "chair": The participant is in charge of the event/task when it * "chair": The participant is in charge of the event/task when it
occurs. occurs.
* "contact": The participant is someone that may be contacted for
information about the event.
The value for each key in the set MUST be true. It is expected The value for each key in the set MUST be true. It is expected
that no more than one of the roles "attendee", "optional", or that no more than one of the roles "attendee", "optional", or
"informational" be present; if more than one are given, "optional" "informational" be present; if more than one are given, "optional"
takes precedence over "informational", and "attendee" takes takes precedence over "informational", and "attendee" takes
precedence over both. Roles that are unknown to the precedence over both. Roles that are unknown to the
implementation MUST be preserved. implementation MUST be preserved.
o locationId: "String" (optional) o locationId: "String" (optional)
The location at which this participant is expected to be The location at which this participant is expected to be
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 language: "String" (optional) o language: "String" (optional)
The language tag as defined in [RFC5646] that best describes the The language tag as defined in [RFC5646] that best describes the
participant's preferred language, if known. participant's preferred language, if known.
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 one of the following values, a value registered The value MUST be one of the following values, a value registered
in the IANA JSCalendar Enum Registry, or a vendor-specific value: in the IANA JSCalendar Enum Registry, or a vendor-specific value:
skipping to change at page 37, line 13 skipping to change at page 37, line 22
specified as an empty set). specified as an empty set).
o linkIds: "String[Boolean]" (optional) o linkIds: "String[Boolean]" (optional)
A set of links to more information about this participant, for A set of links to more information about this participant, for
example in vCard format. The keys in the set MUST be the id of a example in vCard format. The keys in the set MUST be the id of a
Link object in the calendar object's "links" property. The value Link object in the calendar object's "links" property. The value
for each key in the set MUST be true. If there are no links, this for each key in the set MUST be true. If there are no links, this
MUST be omitted (rather than specified as an empty set). MUST be omitted (rather than specified as an empty set).
o progress: "String" (optional). This is only allowed if the o progress: "String" (optional; only allowed for participants of a
Participant is part of a JSTask. It represents the progress of JSTask). Represents the progress of the participant for this
the participant for this task, if known. This property MUST NOT task. It MUST NOT be set if the "participationStatus" of this
be set if the "participationStatus" of this participant is any participant is any value other than "accepted". See Section 5.2.4
value other than "accepted". See Section 5.2.4 for allowed values for allowed values and semantics.
and semantics.
o progressUpdated: "UTCDateTime" (optional). Specifies the date- o progressUpdated: "UTCDateTime" (optional; only allowed for
time the progress property was last set on this participant. This participants of a JSTask). Specifies the date-time the progress
is only allowed if the Participant is part of a JSTask. property was last set on this participant. See Section 5.2.5 for
allowed values and semantics.
o percentComplete: "Number" (optional; only allowed for participants
of a JSTask). Represents the percent completion of the
participant for this task. The property value MUST be a positive
integer between 0 and 100.
4.5. Alerts Properties 4.5. Alerts Properties
4.5.1. useDefaultAlerts 4.5.1. useDefaultAlerts
Type: "Boolean" (optional, default: false). Type: "Boolean" (optional, default: false).
If true, use the user's default alerts and ignore the value of the If true, use the user's default alerts and ignore the value of the
"alerts" property. Fetching user defaults is dependent on the API "alerts" property. Fetching user defaults is dependent on the API
from which this JSCalendar object is being fetched, and is not from which this JSCalendar object is being fetched, and is not
skipping to change at page 41, line 12 skipping to change at page 41, line 32
Sections 3.2.19 of [RFC5545] and 3.6. of [RFC7808] for discussion Sections 3.2.19 of [RFC5545] and 3.6. of [RFC7808] for discussion
of the forward slash character in time zone identifiers). of the forward slash character in time zone identifiers).
o It MUST be a valid "paramtext" value as specified in Section 3.1. o It MUST be a valid "paramtext" value as specified in Section 3.1.
of [RFC5545]. of [RFC5545].
o At least one other property in the same JSCalendar object MUST o At least one other property in the same JSCalendar object MUST
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
JSCalendar object may be part in a hierarchy of other JSCalendar
objects (say, a JSEvent is an entry in a JSGroup). In this case, the
set of time zones is the sum of the time zone definitions of this
object and its parent objects. If multiple time zones with the same
identifier exist, then the definition closest to the calendar object
in relation to its parents MUST be used. (In context of JSEvent, a
time zone definition in its timeZones property has precedence over a
definition of the same id in the JSGroup). Time zone definitions in
any children of the calendar object MUST be ignored.
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) o @type: "String" (mandatory)
Specifies the type of this object. This MUST be "TimeZone". Specifies the type of this object. This MUST be "TimeZone".
skipping to change at page 46, line 4 skipping to change at page 46, line 31
o categories o categories
o color o color
o created o created
o description o description
o descriptionContentType o descriptionContentType
o keywords o keywords
o links o links
o locale o locale
o prodId o prodId
o timeZones
o title o title
o updated o updated
o uid o uid
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: "(JSTask|JSEvent)[]" (mandatory).
A collection of group members. This is represented as a map of the A collection of group members. Implementations MUST ignore entries
"uid" property value to the JSCalendar object member having that uid. of unknown type.
Implementations MUST ignore entries of unknown type.
5.3.2. source 5.3.2. source
Type: "String" (optional). Type: "String" (optional).
The source from which updated versions of this group may be retrieved The source from which updated versions of this group may be retrieved
from. The value MUST be a URI. from. The value MUST be a URI.
6. Examples 6. Examples
skipping to change at page 48, line 10 skipping to change at page 48, line 15
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",
"name": "A simple group", "name": "A simple group",
"entries": { "entries": [{
"2a358cee-6489-4f14-a57f-c104db4dc2f1": { "@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" },
}, "2a358cee-6489-4f14-a57f-c104db4dc2f2": {
"2a358cee-6489-4f14-a57f-c104db4dc2f2": { "@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.
{ {
"...": "", "...": "",
skipping to change at page 54, line 17 skipping to change at page 54, line 17
"2018-03-08T09:00:00": { "2018-03-08T09:00:00": {
"participants/dG9tQGZvb2Jhci5xlLmNvbQ/participationStatus": "participants/dG9tQGZvb2Jhci5xlLmNvbQ/participationStatus":
"declined" "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 done carefully to Its transmission must be done carefully to protect it from possible
protect it from possible threats, such as eavesdropping, replay, threats, such as eavesdropping, replay, message insertion, deletion,
message insertion, deletion, modification, and man-in-the-middle modification, and man-in-the-middle attacks.
attacks. This document just defines the data format; such
considerations are primarily the concern of the API or method of The data being stored and transmitted may be used in systems with
storage and transmission of such files. real world consequences. For example, a home automation system may
turn an alarm on and off. Or a coworking space may charge money to
the organiser of an event that books one of their meeting rooms.
Such systems must be careful to authenticate all data they receive to
prevent them from being subverted.
This document just defines the data format; such considerations are
primarily the concern of the API or method of storage and
transmission of such files.
7.1. Expanding Recurrences 7.1. Expanding Recurrences
A recurrence rule may produce infinite occurrences of an event. A recurrence rule may produce infinite occurrences of an event.
Implementations MUST handle expansions carefully to prevent Implementations MUST handle expansions carefully to prevent
accidental or deliberate resource exhaustion. accidental or deliberate resource exhaustion.
Conversely, a recurrence rule may be specified that does not expand Conversely, a recurrence rule may be specified that does not expand
to anything. It is not always possible to tell this through static to anything. It is not always possible to tell this through static
analysis of the rule, so implementations MUST be careful to avoid analysis of the rule, so implementations MUST be careful to avoid
skipping to change at page 55, line 19 skipping to change at page 55, line 27
elements. Since JSON does not use explicit string lengths, the risk elements. Since JSON does not use explicit string lengths, the risk
of denial of service due to resource exhaustion is small, but of denial of service due to resource exhaustion is small, but
implementations may still wish to place limits on the size of implementations may still wish to place limits on the size of
allocations they are willing to make in any given context, to avoid allocations they are willing to make in any given context, to avoid
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 risks related to URIs.
A maliciously constructed JSCalendar object may contain a very large A maliciously constructed JSCalendar object may contain a very large
number of URIs. In the case of published calendars with a large number of URIs. In the case of published calendars with a large
number of subscribers, such objects could be widely distributed. number of subscribers, such objects could be widely distributed.
Implementations should be careful to limit the automatic fetching of Implementations should be careful to limit the automatic fetching of
linked resources to reduce the risk of this being an amplification linked resources to reduce the risk of this being an amplification
vector for a denial-of-service attack. vector for a denial-of-service attack.
7.4. Spam
Calendar systems may receive JSCalendar files from untrusted sources,
in particular as attachments to emails. This can be a vector for an
attacker to inject spam into a user's calendar. This may confuse,
annoy, and mislead users, or overwhelm their calendar with bogus
events, preventing them from seeing legitimate ones.
Heuristic, statistical or machine-learning-based filters can be
effective in filtering out spam. Authentication mechanisms such as
DKIM [RFC6376] can help establish the source of messages and
associate the data with existing relationships (such as an address
book contact). Misclassifications are always possible however, and
providing a feedback mechanism for users to quickly correct this is
advised.
7.5. Duplication
It is important for calendar systems to maintain the UID of an event
when updating it to avoid unexpected duplication of events. When the
UID changes, consumers of the data may not remove the previous
version of the event if it has a different UID. This can lead to a
confusing situation for the user, with many variations of the event
and no indication of which one is correct. Care must be taken by
consumers of the data to remove old events where possible to avoid an
accidental denial-of-service attack due to the volume of data.
7.6. Time Zones
Events recur in a particular time zone. When this differs from the
user's current time zone, it may unexpectedly cause an occurrence to
shift in time for that user due to a daylight savings change in the
event's time zone. A maliciously crafted event could attempt to
confuse users with such an event to ensure a meeting is missed.
8. IANA Considerations 8. IANA Considerations
8.1. Media Type Registration 8.1. Media Type Registration
This document defines a media type for use with JSCalendar data This document defines a 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
skipping to change at page 58, line 39 skipping to change at page 59, line 31
requested only when there are serious omissions or errors in the requested only when there are serious omissions or errors in the
published specification, as such changes may cause interoperability published specification, as such changes may cause interoperability
issues. When review is required, a change request may be denied if issues. When review is required, a change request may be denied if
it renders entities that were valid under the previous definition it renders entities that were valid under the previous definition
invalid under the new definition. invalid under the new definition.
The owner of a JSCalendar property may pass responsibility to another The owner of a JSCalendar property may pass responsibility to another
person or agency by informing the IANA; this can be done without person or agency by informing the IANA; this can be done without
discussion or review. discussion or review.
8.2.5. JMAP Properties Registry Template 8.2.5. JSCalendar Properties Registry Template
o Property Name: The name of the property. The property name MUST o Property Name: The name of the property. The property name MUST
NOT already be registered for any of the object types listed in NOT already be registered for any of the object types listed in
the "Property Context" field of this registration. Other object the "Property Context" field of this registration. Other object
types MAY already have registered a different property with the types MAY already have registered a different property with the
same name. same name.
o Property Type: The type of this property, using type signatures as o Property Type: The type of this property, using type signatures as
specified in Section 1.3. The property type MUST be registed in specified in Section 1.3. The property type MUST be registed in
the Type Registry. the Type Registry.
skipping to change at page 61, line 20 skipping to change at page 62, line 11
| | | | | | | | | |
| delegatedFrom | String[Boolean] | Participan | Section | | delegatedFrom | String[Boolean] | Participan | Section |
| | | t | 4.4.5 | | | | t | 4.4.5 |
| | | | | | | | | |
| delegatedTo | String[Boolean] | Participan | Section | | delegatedTo | String[Boolean] | Participan | Section |
| | | t | 4.4.5 | | | | t | 4.4.5 |
| | | | | | | | | |
| description | String | JSEvent, | Section | | description | String | JSEvent, | Section |
| | | JSTask, | 4.2.2, | | | | JSTask, | 4.2.2, |
| | | Location, | Section | | | | Location, | Section |
| | | VirtualLoc | 4.2.5, | | | | Participan | 4.2.5, |
| | | ation | Section | | | | t, Virtual | Section |
| | | Location | 4.4.5, |
| | | | Section |
| | | | 4.2.6 | | | | | 4.2.6 |
| | | | | | | | | |
| descriptionCo | String | JSEvent, | Section | | descriptionCo | String | JSEvent, | Section |
| ntentType | | JSTask | 4.2.3 | | ntentType | | JSTask | 4.2.3 |
| | | | | | | | | |
| display | String | Link | Section | | display | String | Link | Section |
| | | | 4.2.7 | | | | | 4.2.7 |
| | | | | | | | | |
| due | LocalDateTime | JSTask | Section | | due | LocalDateTime | JSTask | Section |
| | | | 5.2.1 | | | | | 5.2.1 |
| | | | | | | | | |
| duration | Duration | JSEvent | Section | | duration | Duration | JSEvent | Section |
| | | | 5.1.2 | | | | | 5.1.2 |
| | | | | | | | | |
| email | String | Participan | Section | | email | String | Participan | Section |
| | | t | 4.4.5 | | | | t | 4.4.5 |
| | | | | | | | | |
| entries | String[JSTask|JSEvent] | JSGroup | Section | | entries | (JSTask|JSEvent)[] | JSGroup | Section |
| | | | 5.3.1 | | | | | 5.3.1 |
| | | | | | | | | |
| estimatedDura | Duration | JSTask | Section | | estimatedDura | Duration | JSTask | Section |
| tion | | | 5.2.3 | | tion | | | 5.2.3 |
| | | | | | | | | |
| excluded | Boolean | JSEvent, | Section | | excluded | Boolean | JSEvent, | Section |
| | | JSTask | 4.3.4 | | | | JSTask | 4.3.4 |
| | | | | | | | | |
| expectReply | Boolean | Participan | Section | | expectReply | Boolean | Participan | Section |
| | | t | 4.4.5 | | | | t | 4.4.5 |
skipping to change at page 66, line 23 skipping to change at page 67, line 16
Table 1 Table 1
8.3. Creation of "JSCalendar Types" Registry 8.3. Creation of "JSCalendar Types" Registry
The IANA will create the "JSCalendar Types" registry to avoid name The IANA will create the "JSCalendar Types" registry to avoid name
collisions and provide a complete reference for all data types used collisions and provide a complete reference for all data types used
for JSCalendar property values. The registration process is the same for JSCalendar property values. The registration process is the same
as for the JSCalendar Properties registry, as defined in Section 8.2. as for the JSCalendar Properties registry, as defined in Section 8.2.
8.3.1. JMAP Types Registry Template 8.3.1. JSCalendar Types Registry Template
o Type Name: The name of the type. o Type Name: The name of the type.
o Reference or Description: A brief description or RFC number and o Reference or Description: A brief description or RFC number and
section reference where the Type is specified (may be omitted for section reference where the Type is specified (may be omitted for
"reserved" type names). "reserved" type names).
o Intended Use: Common, reserved, or obsolete. o Intended Use: Common, reserved, or obsolete.
o Change Controller: ("IETF" for IETF-stream RFCs). o Change Controller: ("IETF" for IETF-stream RFCs).
skipping to change at page 68, line 14 skipping to change at page 69, line 14
8.4. Creation of "JSCalendar Enum Values" Registry 8.4. Creation of "JSCalendar Enum Values" Registry
The IANA will create the "JSCalendar Enum Values" registry to allow The IANA will create the "JSCalendar Enum Values" registry to allow
interoperable extension of semantics for properties with enumerable interoperable extension of semantics for properties with enumerable
values. Each such property will have a subregistry of allowed values. Each such property will have a subregistry of allowed
values. The registration process for a new enum value or adding a values. The registration process for a new enum value or adding a
new enumerable property is the same as for the JSCalendar Properties new enumerable property is the same as for the JSCalendar Properties
registry, as defined in Section 8.2. registry, as defined in Section 8.2.
8.4.1. JMAP Enum Property Template 8.4.1. JSCalendar Enum Property Template
This template is for adding a subregistry for a new enumerable This template is for adding a subregistry for a new enumerable
property to the JMAP Enum registry. property to the JSCalendar Enum registry.
o Registry Name: This MUST be of the form "Enum Values for o Registry Name: This MUST be of the form "Enum Values for
{property-name} (Context: {context})" where: {property-name} (Context: {context})" where:
{property-name} is the name(s) of the property or properties where {property-name} is the name(s) of the property or properties where
these values may be used. This MUST be registered in the these values may be used. This MUST be registered in the
JSCalendar Properties registry. JSCalendar Properties registry.
{context} is the list of allowed object types where the property {context} is the list of allowed object types where the property
or properties may appear, as registered in the JSCalendar or properties may appear, as registered in the JSCalendar
Properties registry. This disambiguates where there may be two Properties registry. This disambiguates where there may be two
distinct properties with the same name in different contexts. distinct properties with the same name in different contexts.
o Change Controller: ("IETF" for properties defined in IETF-stream o Change Controller: ("IETF" for properties defined in IETF-stream
RFCs). RFCs).
o Initial Contents: The initial list of defined values for this o Initial Contents: The initial list of defined values for this
enum, using the template defined in Section 8.4.2. enum, using the template defined in Section 8.4.2.
8.4.2. JMAP Enum Value Template 8.4.2. JSCalendar Enum Value Template
This template is for adding a new enum value to a subregistry in the This template is for adding a new enum value to a subregistry in the
JMAP Enum registry. JSCalendar Enum registry.
o Enum Value: The verbatim value of the enum. o Enum Value: The verbatim value of the enum.
o Reference or Description: A brief description or RFC number and o Reference or Description: A brief description or RFC number and
section reference for the semantics of this value. section reference for the semantics of this value.
8.4.3. Initial Contents for the JSCalendar Enum Registry 8.4.3. Initial Contents for the JSCalendar Enum Registry
For each subregistry created in this section, all RFC section For each subregistry created in this section, all RFC section
references are for this document and the change controller is IETF. references are for this document and the change controller is IETF.
skipping to change at page 72, line 48 skipping to change at page 74, line 16
+---------------+--------------------------+ +---------------+--------------------------+
| owner | Section 4.4.5 | | owner | Section 4.4.5 |
| | | | | |
| attendee | Section 4.4.5 | | attendee | Section 4.4.5 |
| | | | | |
| optional | Section 4.4.5 | | optional | Section 4.4.5 |
| | | | | |
| informational | Section 4.4.5 | | informational | Section 4.4.5 |
| | | | | |
| chair | Section 4.4.5 | | chair | Section 4.4.5 |
| | |
| contact | Section 4.4.5 |
+---------------+--------------------------+ +---------------+--------------------------+
Table 12 Table 12
------------------------------------------------------------ ------------------------------------------------------------
Enum Values for scheduleAgent (Context: Participant) Enum Values for scheduleAgent (Context: Participant)
+------------+--------------------------+ +------------+--------------------------+
| Enum Value | Reference or Description | | Enum Value | Reference or Description |
skipping to change at page 76, line 15 skipping to change at page 77, line 42
[RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform
Resource Identifier (URI): Generic Syntax", STD 66, Resource Identifier (URI): Generic Syntax", STD 66,
RFC 3986, DOI 10.17487/RFC3986, January 2005, RFC 3986, DOI 10.17487/RFC3986, January 2005,
<https://www.rfc-editor.org/info/rfc3986>. <https://www.rfc-editor.org/info/rfc3986>.
[RFC4122] Leach, P., Mealling, M., and R. Salz, "A Universally [RFC4122] Leach, P., Mealling, M., and R. Salz, "A Universally
Unique IDentifier (UUID) URN Namespace", RFC 4122, Unique IDentifier (UUID) URN Namespace", RFC 4122,
DOI 10.17487/RFC4122, July 2005, DOI 10.17487/RFC4122, July 2005,
<https://www.rfc-editor.org/info/rfc4122>. <https://www.rfc-editor.org/info/rfc4122>.
[RFC4791] Daboo, C., Desruisseaux, B., and L. Dusseault,
"Calendaring Extensions to WebDAV (CalDAV)", RFC 4791,
DOI 10.17487/RFC4791, March 2007,
<https://www.rfc-editor.org/info/rfc4791>.
[RFC5546] Daboo, C., Ed., "iCalendar Transport-Independent [RFC5546] Daboo, C., Ed., "iCalendar Transport-Independent
Interoperability Protocol (iTIP)", RFC 5546, Interoperability Protocol (iTIP)", RFC 5546,
DOI 10.17487/RFC5546, December 2009, DOI 10.17487/RFC5546, December 2009,
<https://www.rfc-editor.org/info/rfc5546>. <https://www.rfc-editor.org/info/rfc5546>.
[RFC6047] Melnikov, A., Ed., "iCalendar Message-Based [RFC6047] Melnikov, A., Ed., "iCalendar Message-Based
Interoperability Protocol (iMIP)", RFC 6047, Interoperability Protocol (iMIP)", RFC 6047,
DOI 10.17487/RFC6047, December 2010, DOI 10.17487/RFC6047, December 2010,
<https://www.rfc-editor.org/info/rfc6047>. <https://www.rfc-editor.org/info/rfc6047>.
[RFC6376] Crocker, D., Ed., Hansen, T., Ed., and M. Kucherawy, Ed.,
"DomainKeys Identified Mail (DKIM) Signatures", STD 76,
RFC 6376, DOI 10.17487/RFC6376, September 2011,
<https://www.rfc-editor.org/info/rfc6376>.
[RFC7265] Kewisch, P., Daboo, C., and M. Douglass, "jCal: The JSON [RFC7265] Kewisch, P., Daboo, C., and M. Douglass, "jCal: The JSON
Format for iCalendar", RFC 7265, DOI 10.17487/RFC7265, May Format for iCalendar", RFC 7265, DOI 10.17487/RFC7265, May
2014, <https://www.rfc-editor.org/info/rfc7265>. 2014, <https://www.rfc-editor.org/info/rfc7265>.
[RFC7529] Daboo, C. and G. Yakushev, "Non-Gregorian Recurrence Rules [RFC7529] Daboo, C. and G. Yakushev, "Non-Gregorian Recurrence Rules
in the Internet Calendaring and Scheduling Core Object in the Internet Calendaring and Scheduling Core Object
Specification (iCalendar)", RFC 7529, Specification (iCalendar)", RFC 7529,
DOI 10.17487/RFC7529, May 2015, DOI 10.17487/RFC7529, May 2015,
<https://www.rfc-editor.org/info/rfc7529>. <https://www.rfc-editor.org/info/rfc7529>.
 End of changes. 44 change blocks. 
102 lines changed or deleted 173 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/