draft-ietf-calext-jscalendar-10.txt   draft-ietf-calext-jscalendar-11.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: May 26, 2019 November 22, 2018 Expires: June 13, 2019 December 10, 2018
JSCalendar: A JSON representation of calendar data JSCalendar: A JSON representation of calendar data
draft-ietf-calext-jscalendar-10 draft-ietf-calext-jscalendar-11
Abstract Abstract
This specification defines a data model and JSON representation of This specification defines a data model and JSON representation of
calendar data that can be used for storage and data exchange in a calendar data that can be used for storage and data exchange in a
calendaring and scheduling environment. It aims to be an alternative calendaring and scheduling environment. It aims to be an alternative
to the widely deployed iCalendar data format and to be unambiguous, to the widely deployed iCalendar data format and to be unambiguous,
extendable and simple to process. extendable and simple to process. In contrast to the JSON-based jCal
format, it is not a direct mapping from iCalendar and expands
semantics where appropriate.
Status of This Memo Status of This Memo
This Internet-Draft is submitted in full conformance with the This Internet-Draft is submitted in full conformance with the
provisions of BCP 78 and BCP 79. provisions of BCP 78 and BCP 79.
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 May 26, 2019. This Internet-Draft will expire on June 13, 2019.
Copyright Notice Copyright Notice
Copyright (c) 2018 IETF Trust and the persons identified as the Copyright (c) 2018 IETF Trust and the persons identified as the
document authors. All rights reserved. document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents Provisions Relating to IETF Documents
(https://trustee.ietf.org/license-info) in effect on the date of (https://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents publication of this document. Please review these documents
carefully, as they describe your rights and restrictions with respect carefully, as they describe your rights and restrictions with respect
to this document. Code Components extracted from this document must to this document. Code Components extracted from this document must
include Simplified BSD License text as described in Section 4.e of include Simplified BSD License text as described in Section 4.e of
the Trust Legal Provisions and are provided without warranty as the Trust Legal Provisions and are provided without warranty as
described in the Simplified BSD License. described in the Simplified BSD License.
Table of Contents Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4
1.1. Relation to the iCalendar format . . . . . . . . . . . . 4 1.1. Relation to the iCalendar format . . . . . . . . . . . . 4
1.2. Notational Conventions . . . . . . . . . . . . . . . . . 5 1.2. Relation to the jCal format . . . . . . . . . . . . . . . 5
1.3. Notational Conventions . . . . . . . . . . . . . . . . . 5
2. JSCalendar objects . . . . . . . . . . . . . . . . . . . . . 5 2. JSCalendar objects . . . . . . . . . . . . . . . . . . . . . 5
2.1. JSEvent . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.1. JSEvent . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.2. JSTask . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.2. JSTask . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.3. JSGroup . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.3. JSGroup . . . . . . . . . . . . . . . . . . . . . . . . . 6
3. Structure of JSCalendar objects . . . . . . . . . . . . . . . 6 3. Structure of JSCalendar objects . . . . . . . . . . . . . . . 6
3.1. Type signatures . . . . . . . . . . . . . . . . . . . . . 6 3.1. Type signatures . . . . . . . . . . . . . . . . . . . . . 7
3.2. Data Types . . . . . . . . . . . . . . . . . . . . . . . 7 3.2. Data Types . . . . . . . . . . . . . . . . . . . . . . . 7
3.2.1. UTCDate . . . . . . . . . . . . . . . . . . . . . . . 7 3.2.1. UTCDate . . . . . . . . . . . . . . . . . . . . . . . 7
3.2.2. LocalDate . . . . . . . . . . . . . . . . . . . . . . 7 3.2.2. LocalDate . . . . . . . . . . . . . . . . . . . . . . 7
3.2.3. Duration . . . . . . . . . . . . . . . . . . . . . . 7 3.2.3. Duration . . . . . . . . . . . . . . . . . . . . . . 8
3.2.4. PatchObject . . . . . . . . . . . . . . . . . . . . . 8 3.2.4. PatchObject . . . . . . . . . . . . . . . . . . . . . 8
3.2.5. Identifiers . . . . . . . . . . . . . . . . . . . . . 8 3.2.5. Identifiers . . . . . . . . . . . . . . . . . . . . . 9
3.2.6. Normalization and equivalence . . . . . . . . . . . . 9 3.2.6. Normalization and equivalence . . . . . . . . . . . . 9
3.3. Custom property extensions and values . . . . . . . . . . 9 3.3. Custom property extensions and values . . . . . . . . . . 9
4. Common JSCalendar properties . . . . . . . . . . . . . . . . 9 4. Common JSCalendar properties . . . . . . . . . . . . . . . . 10
4.1. Metadata properties . . . . . . . . . . . . . . . . . . . 10 4.1. Metadata properties . . . . . . . . . . . . . . . . . . . 10
4.1.1. @type . . . . . . . . . . . . . . . . . . . . . . . . 10 4.1.1. @type . . . . . . . . . . . . . . . . . . . . . . . . 10
4.1.2. uid . . . . . . . . . . . . . . . . . . . . . . . . . 10 4.1.2. uid . . . . . . . . . . . . . . . . . . . . . . . . . 10
4.1.3. relatedTo . . . . . . . . . . . . . . . . . . . . . . 10 4.1.3. relatedTo . . . . . . . . . . . . . . . . . . . . . . 11
4.1.4. prodId . . . . . . . . . . . . . . . . . . . . . . . 11 4.1.4. prodId . . . . . . . . . . . . . . . . . . . . . . . 11
4.1.5. created . . . . . . . . . . . . . . . . . . . . . . . 12 4.1.5. created . . . . . . . . . . . . . . . . . . . . . . . 12
4.1.6. updated . . . . . . . . . . . . . . . . . . . . . . . 12 4.1.6. updated . . . . . . . . . . . . . . . . . . . . . . . 12
4.1.7. sequence . . . . . . . . . . . . . . . . . . . . . . 12 4.1.7. sequence . . . . . . . . . . . . . . . . . . . . . . 12
4.1.8. method . . . . . . . . . . . . . . . . . . . . . . . 12 4.1.8. method . . . . . . . . . . . . . . . . . . . . . . . 12
4.2. What and where properties . . . . . . . . . . . . . . . . 12 4.2. What and where properties . . . . . . . . . . . . . . . . 12
4.2.1. title . . . . . . . . . . . . . . . . . . . . . . . . 12 4.2.1. title . . . . . . . . . . . . . . . . . . . . . . . . 12
4.2.2. description . . . . . . . . . . . . . . . . . . . . . 12 4.2.2. description . . . . . . . . . . . . . . . . . . . . . 12
4.2.3. descriptionContentType . . . . . . . . . . . . . . . 12 4.2.3. descriptionContentType . . . . . . . . . . . . . . . 13
4.2.4. locations . . . . . . . . . . . . . . . . . . . . . . 13 4.2.4. locations . . . . . . . . . . . . . . . . . . . . . . 13
4.2.5. virtualLocations . . . . . . . . . . . . . . . . . . 14 4.2.5. virtualLocations . . . . . . . . . . . . . . . . . . 14
4.2.6. links . . . . . . . . . . . . . . . . . . . . . . . . 14 4.2.6. links . . . . . . . . . . . . . . . . . . . . . . . . 14
4.2.7. locale . . . . . . . . . . . . . . . . . . . . . . . 15 4.2.7. locale . . . . . . . . . . . . . . . . . . . . . . . 16
4.2.8. keywords . . . . . . . . . . . . . . . . . . . . . . 16 4.2.8. keywords . . . . . . . . . . . . . . . . . . . . . . 16
4.2.9. categories . . . . . . . . . . . . . . . . . . . . . 16 4.2.9. categories . . . . . . . . . . . . . . . . . . . . . 16
4.2.10. color . . . . . . . . . . . . . . . . . . . . . . . . 16 4.2.10. color . . . . . . . . . . . . . . . . . . . . . . . . 16
4.3. Recurrence properties . . . . . . . . . . . . . . . . . . 16 4.3. Recurrence properties . . . . . . . . . . . . . . . . . . 16
4.3.1. recurrenceRule . . . . . . . . . . . . . . . . . . . 16 4.3.1. recurrenceRule . . . . . . . . . . . . . . . . . . . 16
4.3.2. recurrenceOverrides . . . . . . . . . . . . . . . . . 22 4.3.2. recurrenceOverrides . . . . . . . . . . . . . . . . . 22
4.3.3. excluded . . . . . . . . . . . . . . . . . . . . . . 23 4.3.3. excluded . . . . . . . . . . . . . . . . . . . . . . 23
4.4. Sharing and scheduling properties . . . . . . . . . . . . 23 4.4. Sharing and scheduling properties . . . . . . . . . . . . 23
4.4.1. priority . . . . . . . . . . . . . . . . . . . . . . 23 4.4.1. priority . . . . . . . . . . . . . . . . . . . . . . 23
4.4.2. freeBusyStatus . . . . . . . . . . . . . . . . . . . 24 4.4.2. freeBusyStatus . . . . . . . . . . . . . . . . . . . 24
4.4.3. privacy . . . . . . . . . . . . . . . . . . . . . . . 24 4.4.3. privacy . . . . . . . . . . . . . . . . . . . . . . . 24
4.4.4. replyTo . . . . . . . . . . . . . . . . . . . . . . . 25 4.4.4. replyTo . . . . . . . . . . . . . . . . . . . . . . . 25
4.4.5. participants . . . . . . . . . . . . . . . . . . . . 25 4.4.5. participants . . . . . . . . . . . . . . . . . . . . 26
4.5. Alerts properties . . . . . . . . . . . . . . . . . . . . 29 4.5. Alerts properties . . . . . . . . . . . . . . . . . . . . 29
4.5.1. useDefaultAlerts . . . . . . . . . . . . . . . . . . 29 4.5.1. useDefaultAlerts . . . . . . . . . . . . . . . . . . 29
4.5.2. alerts . . . . . . . . . . . . . . . . . . . . . . . 29 4.5.2. alerts . . . . . . . . . . . . . . . . . . . . . . . 29
4.6. Multilingual properties . . . . . . . . . . . . . . . . . 30 4.6. Multilingual properties . . . . . . . . . . . . . . . . . 31
4.6.1. localizations . . . . . . . . . . . . . . . . . . . . 30 4.6.1. localizations . . . . . . . . . . . . . . . . . . . . 31
5. Type-specific JSCalendar properties . . . . . . . . . . . . . 31 5. Type-specific JSCalendar properties . . . . . . . . . . . . . 32
5.1. JSEvent properties . . . . . . . . . . . . . . . . . . . 32 5.1. JSEvent properties . . . . . . . . . . . . . . . . . . . 32
5.1.1. start . . . . . . . . . . . . . . . . . . . . . . . . 32 5.1.1. start . . . . . . . . . . . . . . . . . . . . . . . . 32
5.1.2. timeZone . . . . . . . . . . . . . . . . . . . . . . 32 5.1.2. timeZone . . . . . . . . . . . . . . . . . . . . . . 32
5.1.3. duration . . . . . . . . . . . . . . . . . . . . . . 32 5.1.3. duration . . . . . . . . . . . . . . . . . . . . . . 32
5.1.4. isAllDay . . . . . . . . . . . . . . . . . . . . . . 32 5.1.4. isAllDay . . . . . . . . . . . . . . . . . . . . . . 33
5.1.5. status . . . . . . . . . . . . . . . . . . . . . . . 33 5.1.5. status . . . . . . . . . . . . . . . . . . . . . . . 33
5.2. JSTask properties . . . . . . . . . . . . . . . . . . . . 33 5.2. JSTask properties . . . . . . . . . . . . . . . . . . . . 33
5.2.1. due . . . . . . . . . . . . . . . . . . . . . . . . . 33 5.2.1. due . . . . . . . . . . . . . . . . . . . . . . . . . 33
5.2.2. start . . . . . . . . . . . . . . . . . . . . . . . . 33 5.2.2. start . . . . . . . . . . . . . . . . . . . . . . . . 34
5.2.3. timeZone . . . . . . . . . . . . . . . . . . . . . . 33 5.2.3. timeZone . . . . . . . . . . . . . . . . . . . . . . 34
5.2.4. estimatedDuration . . . . . . . . . . . . . . . . . . 34 5.2.4. estimatedDuration . . . . . . . . . . . . . . . . . . 34
5.2.5. statusUpdatedAt . . . . . . . . . . . . . . . . . . . 34 5.2.5. statusUpdatedAt . . . . . . . . . . . . . . . . . . . 34
5.2.6. isAllDay . . . . . . . . . . . . . . . . . . . . . . 34 5.2.6. isAllDay . . . . . . . . . . . . . . . . . . . . . . 34
5.2.7. progress . . . . . . . . . . . . . . . . . . . . . . 34 5.2.7. progress . . . . . . . . . . . . . . . . . . . . . . 35
5.2.8. status . . . . . . . . . . . . . . . . . . . . . . . 35 5.2.8. status . . . . . . . . . . . . . . . . . . . . . . . 35
5.3. JSGroup properties . . . . . . . . . . . . . . . . . . . 36 5.3. JSGroup properties . . . . . . . . . . . . . . . . . . . 36
5.3.1. entries . . . . . . . . . . . . . . . . . . . . . . . 36 5.3.1. entries . . . . . . . . . . . . . . . . . . . . . . . 36
5.3.2. source . . . . . . . . . . . . . . . . . . . . . . . 36 5.3.2. source . . . . . . . . . . . . . . . . . . . . . . . 37
6. Conversion from and to iCalendar . . . . . . . . . . . . . . 36 6. Conversion from and to iCalendar . . . . . . . . . . . . . . 37
6.1. JSEvent . . . . . . . . . . . . . . . . . . . . . . . . . 37 6.1. JSEvent . . . . . . . . . . . . . . . . . . . . . . . . . 37
6.2. JSTask . . . . . . . . . . . . . . . . . . . . . . . . . 37 6.2. JSTask . . . . . . . . . . . . . . . . . . . . . . . . . 38
6.3. JSGroup . . . . . . . . . . . . . . . . . . . . . . . . . 39 6.3. JSGroup . . . . . . . . . . . . . . . . . . . . . . . . . 40
6.4. Common properties . . . . . . . . . . . . . . . . . . . . 39 6.4. Common properties . . . . . . . . . . . . . . . . . . . . 40
6.5. Locations and participants . . . . . . . . . . . . . . . 41 6.5. Locations and participants . . . . . . . . . . . . . . . 42
6.6. Unknown properties . . . . . . . . . . . . . . . . . . . 44 6.6. Unknown properties . . . . . . . . . . . . . . . . . . . 45
7. JSCalendar object examples . . . . . . . . . . . . . . . . . 44 7. JSCalendar object examples . . . . . . . . . . . . . . . . . 45
7.1. Simple event . . . . . . . . . . . . . . . . . . . . . . 44 7.1. Simple event . . . . . . . . . . . . . . . . . . . . . . 45
7.2. Simple task . . . . . . . . . . . . . . . . . . . . . . . 45 7.2. Simple task . . . . . . . . . . . . . . . . . . . . . . . 46
7.3. Simple group . . . . . . . . . . . . . . . . . . . . . . 45 7.3. Simple group . . . . . . . . . . . . . . . . . . . . . . 46
7.4. All-day event . . . . . . . . . . . . . . . . . . . . . . 45 7.4. All-day event . . . . . . . . . . . . . . . . . . . . . . 46
7.5. Task with a due date . . . . . . . . . . . . . . . . . . 46 7.5. Task with a due date . . . . . . . . . . . . . . . . . . 47
7.6. Event with end time-zone . . . . . . . . . . . . . . . . 46 7.6. Event with end time-zone . . . . . . . . . . . . . . . . 47
7.7. Floating-time event (with recurrence) . . . . . . . . . . 47 7.7. Floating-time event (with recurrence) . . . . . . . . . . 48
7.8. Event with multiple locations and localization . . . . . 47 7.8. Event with multiple locations and localization . . . . . 48
7.9. Recurring event with overrides . . . . . . . . . . . . . 48 7.9. Recurring event with overrides . . . . . . . . . . . . . 49
7.10. Recurring event with participants . . . . . . . . . . . . 49 7.10. Recurring event with participants . . . . . . . . . . . . 50
8. Security Considerations . . . . . . . . . . . . . . . . . . . 51
9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 51 8. Security Considerations . . . . . . . . . . . . . . . . . . . 52
10. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 51 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 52
11. References . . . . . . . . . . . . . . . . . . . . . . . . . 51 10. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 53
11.1. Normative References . . . . . . . . . . . . . . . . . . 51 11. References . . . . . . . . . . . . . . . . . . . . . . . . . 53
11.2. Informative References . . . . . . . . . . . . . . . . . 53 11.1. Normative References . . . . . . . . . . . . . . . . . . 53
11.3. URIs . . . . . . . . . . . . . . . . . . . . . . . . . . 54 11.2. Informative References . . . . . . . . . . . . . . . . . 55
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 54 11.3. URIs . . . . . . . . . . . . . . . . . . . . . . . . . . 56
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 56
1. Introduction 1. Introduction
This document defines a data model for calendar event and task This document defines a data model for calendar event and task
objects, or groups of such objects, in electronic calendar objects, or groups of such objects, in electronic calendar
applications and systems. It aims to be unambiguous, extendable and applications and systems. It aims to be unambiguous, extendable and
simple to process. simple to process.
The key design considerations for this data model are as follows: The key design considerations for this data model are as follows:
skipping to change at page 5, line 12 skipping to change at page 5, line 16
time and dates, which confuses new users. Other sources for errors time and dates, which confuses new users. Other sources for errors
are the requirement for custom time zone definitions within a single are the requirement for custom time zone definitions within a single
calendar component, as well as the iCalendar format itself; the calendar component, as well as the iCalendar format itself; the
latter causing interoperability issues due to misuse of CR LF latter causing interoperability issues due to misuse of CR LF
terminated strings, line continuations and subtle differences between terminated strings, line continuations and subtle differences between
iCalendar parsers. Lastly, up until recently the iCalendar format iCalendar parsers. Lastly, up until recently the iCalendar format
did not have a way to express a concise difference between two did not have a way to express a concise difference between two
calendar components, which results in verbose exchanges during calendar components, which results in verbose exchanges during
scheduling. scheduling.
Some of these issues were addressed by the jCal [RFC7265] format, 1.2. Relation to the jCal format
which is a direct mapping between iCalendar and JSON. However, it
did not attempt to extend or update iCalendar semantics.
1.2. Notational Conventions The JSON format for iCalendar data, jCal [RFC7265], is a direct
mapping between iCalendar and JSON. It does not attempt to extend or
update iCalendar semantics, and consequently does not address the
issues outlined in Section 1.1.
Since the standardization of jCal, the majority of implementations
and service providers either kept using iCalendar, or came up with
their own proprietary JSON representation, which often are
incompatible with each other. JSCalendar is intended to meet this
demand for JSON formatted calendar data, and to provide a standard
representation as an alternative to new proprietary formats.
1.3. Notational Conventions
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in [RFC2119]. document are to be interpreted as described in [RFC2119].
The underlying format used for this specification is JSON. The underlying format used for this specification is JSON.
Consequently, the terms "object" and "array" as well as the four Consequently, the terms "object" and "array" as well as the four
primitive types (strings, numbers, booleans, and null) are to be primitive types (strings, numbers, booleans, and null) are to be
interpreted as described in Section 1 of [RFC8259]. interpreted as described in Section 1 of [RFC8259].
skipping to change at page 5, line 41 skipping to change at page 6, line 7
are formatted like *this* and are referred to in other sections like are formatted like *this* and are referred to in other sections like
_this_. Verbatim text is formatted like "this". _this_. Verbatim text is formatted like "this".
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/calendar+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,
typically a meeting, appointment, reminder or anniversary. Multiple typically a meeting, appointment, reminder or anniversary. Multiple
participants may partake in the event at multiple locations. participants may partake in the event at multiple locations.
The @type (Section 4.1.1) property value MUST be "jsevent". The @type (Section 4.1.1) property value MUST be "jsevent".
2.2. JSTask 2.2. JSTask
MIME type: "application/calendar+json;type=jstask" MIME type: "application/jscalendar+json;type=jstask"
A JSTask represents an action-item, assignment, to-do or work item . A JSTask represents an action-item, assignment, to-do or work item .
The @type (Section 4.1.1) property value MUST be "jstask". The @type (Section 4.1.1) property value MUST be "jstask".
A JSTask may start and be due at certain points in time, may take A JSTask may start and be due at certain points in time, may take
some estimated time to complete and may recur; none of which is some estimated time to complete and may recur; none of which is
required. This notably differs from JSEvent (Section 2.1) which is required. This notably differs from JSEvent (Section 2.1) which is
required to start at a certain point in time and typically takes some required to start at a certain point in time and typically takes some
non-zero duration to complete. non-zero duration to complete.
2.3. JSGroup 2.3. JSGroup
MIME type: "application/calendar+json;type=jsgroup" MIME type: "application/jscalendar+json;type=jsgroup"
A JSGroup is a collection of JSEvent (Section 2.1) and JSTask A JSGroup is a collection of JSEvent (Section 2.1) and JSTask
(Section 2.2) objects. Typically, objects are grouped by topic (e.g. (Section 2.2) objects. Typically, objects are grouped by topic (e.g.
by keywords) or calendar membership. by keywords) or calendar membership.
The @type (Section 4.1.1) property value MUST be "jsgroup". The @type (Section 4.1.1) property value MUST be "jsgroup".
3. Structure of JSCalendar objects 3. Structure of JSCalendar objects
A JSCalendar object is a JSON object, which MUST be valid I-JSON (a A JSCalendar object is a JSON object, which MUST be valid I-JSON (a
skipping to change at page 15, line 12 skipping to change at page 15, line 22
meaning beyond that. Specifically, it MAY be different from the meaning beyond that. Specifically, it MAY be different from the
link identifier in the enclosing _links_ property. link identifier in the enclosing _links_ property.
o *type*: "String" (optional) The content-type [RFC6838] of the o *type*: "String" (optional) The content-type [RFC6838] of the
resource, if known. resource, if known.
o *size*: "Number" (optional) The size, in bytes, of the resource o *size*: "Number" (optional) The size, in bytes, of the resource
when fully decoded (i.e. the number of bytes in the file the user when fully decoded (i.e. the number of bytes in the file the user
would download), if known. would download), if known.
o *rel*: "String" (optional, default:"enclosure") Identifies the o *rel*: "String" (optional) Identifies the relation of the linked
relation of the linked resource to the object. If set, the value resource to the object. If set, the value MUST be a registered
MUST be a registered relation type (see [RFC8288] and IANA Link relation type (see [RFC8288] and IANA Link Relations [1]).
Relations [1]).
Links with a rel of "enclosure" SHOULD be considered by the client Links with a rel of "enclosure" SHOULD be considered by the client
as attachments for download. as attachments for download.
Links with a rel of "describedby" SHOULD be considered by the Links with a rel of "describedby" SHOULD be considered by the
client to be an alternate representation of the description. client to be an alternate representation of the description.
Links with a rel of "icon" SHOULD be considered by the client to Links with a rel of "icon" SHOULD be considered by the client to
be an image that it MAY use when presenting the calendar data to a be an image that it MAY use when presenting the calendar data to a
user. The _display_ property MAY be set to indicate the purpose user. The _display_ property MAY be set to indicate the purpose
skipping to change at page 48, line 31 skipping to change at page 49, line 31
"6f3696c6-1e07-47d0-9ce1-f50014b0041a": { "6f3696c6-1e07-47d0-9ce1-f50014b0041a": {
"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"
} }
} }
} }
7.9. Recurring event with overrides 7.9. Recurring event with overrides
This example illustrates the use of recurrence overrides. A math This example illustrates the use of recurrence overrides. A math
course at a University is held for the first time on January 8, 2018 course at a University is held for the first time on January 8, 2018
at 9am London time and occurs every week until June 25, 2018. Each at 9am London time and occurs every week until June 25, 2018. Each
lecture lasts for one hour and 30 minutes and is located at the lecture lasts for one hour and 30 minutes and is located at the
skipping to change at page 50, line 47 skipping to change at page 51, line 47
"participationStatus": "accepted", "participationStatus": "accepted",
"roles": { "roles": {
"owner": true, "owner": true,
"attendee": true, "attendee": true,
"chair": true "chair": true
} }
}, },
"...": "" "...": ""
}, },
"recurrenceOverrides": { "recurrenceOverrides": {
"2018-03-08T09:00:00": { "2018-03-08T09:00:00": {
"participants/dG9tQGZvb2Jhci5leGFtcGxlLmNvbQ/participationStatus": "participants/dG9tQGZvb2Jhci5leGFtcGxlLmNvbQ/participationStatus":
"declined" "declined"
} }
} }
} }
8. Security Considerations 8. Security Considerations
The use of JSON as a format does have its own inherent security risks The use of JSON as a format does have its own inherent security risks
as discussed in Section 12 of [RFC8259]. Even though JSON is as discussed in Section 12 of [RFC8259]. Even though JSON is
skipping to change at page 51, line 24 skipping to change at page 52, line 24
With this in mind, a parser for JSON data aware of the security With this in mind, a parser for JSON data aware of the security
implications should be used for the format described in this implications should be used for the format described in this
document. For example, the use of JavaScript's "eval()" function is document. For example, the use of JavaScript's "eval()" function is
considered an unacceptable security risk, as described in Section 12 considered an unacceptable security risk, as described in Section 12
of[RFC8259]. A native parser with full awareness of the JSON format of[RFC8259]. A native parser with full awareness of the JSON format
should be preferred. should be preferred.
9. IANA Considerations 9. IANA Considerations
This document amends the "application/calendar" MIME media type This document defines a MIME media type for use with JSCalendar data
defined in [RFC7265]. formatted in JSON.
New optional parameter: "type" with value being one of "jsevent", Type name: application
"jstask", "jsgroup". The parameter MUST NOT occur more than once.
Subtype name: jscalendar+json
Required parameters: type
The "type" parameter conveys the type of the JSCalendar data in
the body part, with the value being one of "jsevent", "jstask", or
"jsgroup". The parameter MUST NOT occur more than once. It MUST
match the value of the "@type" property of the JSON-formatted
JSCalendar object in the body.
Optional parameters: none
Encoding considerations: Same as encoding considerations of
application/json as specified in RFC8529, Section 11 [RFC8259].
Security considerations: See Section 8 of this document.
Interoperability considerations: This media type provides an
alternative to iCalendar, jCal and proprietary JSON-based
calendaring data formats.
Published specification: This specification.
Applications that use this media type: Applications that currently
make use of the text/calendar and application/calendar+json media
types can use this as an alternative. Similarily, applications
that use the application/json media type to transfer calendaring
data can use this to further specify the content.
Fragment identifier considerations: N/A
Additional information:
Magic number(s): N/A
File extensions(s): N/A
Macintosh file type code(s): N/A
Person & email address to contact for further
information:
calext@ietf.org
Intended usage: COMMON
Restrictions on usage: N/A
Author: See the "Author's Address" section of this document.
Change controller: IETF
10. Acknowledgments 10. 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.
11. References 11. References
 End of changes. 31 change blocks. 
65 lines changed or deleted 129 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/