draft-ietf-calext-jscalendar-02.txt   draft-ietf-calext-jscalendar-03.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 6, 2018 March 5, 2018 Expires: November 10, 2018 May 9, 2018
JSCalendar: A JSON representation of calendar data JSCalendar: A JSON representation of calendar data
draft-ietf-calext-jscalendar-02 draft-ietf-calext-jscalendar-03
Abstract Abstract
This specification defines a data model and JSON representation of This specification defines a data model and JSON representation of
calendar data that can be used for storage and data exchange in a calendar data that can be used for storage and data exchange in a
calendaring and scheduling environment. It aims to be an alternative calendaring and scheduling environment. It aims to be an alternative
to the widely deployed iCalendar data format and to be unambiguous, to the widely deployed iCalendar data format and to be unambiguous,
extendable and simple to process. extendable and simple to process.
Status of This Memo Status of This Memo
skipping to change at page 1, line 34 skipping to change at page 1, line 34
Internet-Drafts are working documents of the Internet Engineering Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet- working documents as Internet-Drafts. The list of current Internet-
Drafts is at https://datatracker.ietf.org/drafts/current/. Drafts is at https://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress." material or to cite them other than as "work in progress."
This Internet-Draft will expire on September 6, 2018. This Internet-Draft will expire on November 10, 2018.
Copyright Notice Copyright Notice
Copyright (c) 2018 IETF Trust and the persons identified as the Copyright (c) 2018 IETF Trust and the persons identified as the
document authors. All rights reserved. document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents Provisions Relating to IETF Documents
(https://trustee.ietf.org/license-info) in effect on the date of (https://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents publication of this document. Please review these documents
skipping to change at page 2, line 17 skipping to change at page 2, line 17
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4
1.1. Relation to the iCalendar format . . . . . . . . . . . . 4 1.1. Relation to the iCalendar format . . . . . . . . . . . . 4
1.2. Notational Conventions . . . . . . . . . . . . . . . . . 5 1.2. Notational Conventions . . . . . . . . . . . . . . . . . 5
2. JSCalendar objects . . . . . . . . . . . . . . . . . . . . . 5 2. JSCalendar objects . . . . . . . . . . . . . . . . . . . . . 5
2.1. JSEvent . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.1. JSEvent . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.2. JSTask . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.2. JSTask . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.3. JSGroup . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.3. JSGroup . . . . . . . . . . . . . . . . . . . . . . . . . 6
3. Structure of JSCalendar objects . . . . . . . . . . . . . . . 6 3. Structure of JSCalendar objects . . . . . . . . . . . . . . . 6
3.1. Type signatures . . . . . . . . . . . . . . . . . . . . . 6 3.1. Type signatures . . . . . . . . . . . . . . . . . . . . . 6
3.2. Data Types . . . . . . . . . . . . . . . . . . . . . . . 6 3.2. Data Types . . . . . . . . . . . . . . . . . . . . . . . 6
3.2.1. UTCDate . . . . . . . . . . . . . . . . . . . . . . . 7 3.2.1. UTCDate . . . . . . . . . . . . . . . . . . . . . . . 6
3.2.2. LocalDate . . . . . . . . . . . . . . . . . . . . . . 7 3.2.2. LocalDate . . . . . . . . . . . . . . . . . . . . . . 7
3.2.3. Duration . . . . . . . . . . . . . . . . . . . . . . 7 3.2.3. Duration . . . . . . . . . . . . . . . . . . . . . . 7
3.2.4. PatchObject . . . . . . . . . . . . . . . . . . . . . 7 3.2.4. PatchObject . . . . . . . . . . . . . . . . . . . . . 7
3.2.5. Normalisation and equivalence . . . . . . . . . . . . 8 3.2.5. Identifiers . . . . . . . . . . . . . . . . . . . . . 8
3.2.6. Normalisation and equivalence . . . . . . . . . . . . 8
3.3. Custom property extensions and values . . . . . . . . . . 9 3.3. Custom property extensions and values . . . . . . . . . . 9
4. Common JSCalendar properties . . . . . . . . . . . . . . . . 9 4. Common JSCalendar properties . . . . . . . . . . . . . . . . 9
4.1. Metadata properties . . . . . . . . . . . . . . . . . . . 9 4.1. Metadata properties . . . . . . . . . . . . . . . . . . . 9
4.1.1. @type . . . . . . . . . . . . . . . . . . . . . . . . 9 4.1.1. @type . . . . . . . . . . . . . . . . . . . . . . . . 9
4.1.2. uid . . . . . . . . . . . . . . . . . . . . . . . . . 10 4.1.2. uid . . . . . . . . . . . . . . . . . . . . . . . . . 10
4.1.3. relatedTo . . . . . . . . . . . . . . . . . . . . . . 10 4.1.3. relatedTo . . . . . . . . . . . . . . . . . . . . . . 10
4.1.4. prodId . . . . . . . . . . . . . . . . . . . . . . . 11 4.1.4. prodId . . . . . . . . . . . . . . . . . . . . . . . 11
4.1.5. created . . . . . . . . . . . . . . . . . . . . . . . 11 4.1.5. created . . . . . . . . . . . . . . . . . . . . . . . 11
4.1.6. updated . . . . . . . . . . . . . . . . . . . . . . . 11 4.1.6. updated . . . . . . . . . . . . . . . . . . . . . . . 11
4.1.7. sequence . . . . . . . . . . . . . . . . . . . . . . 11 4.1.7. sequence . . . . . . . . . . . . . . . . . . . . . . 11
4.1.8. method . . . . . . . . . . . . . . . . . . . . . . . 11 4.1.8. method . . . . . . . . . . . . . . . . . . . . . . . 11
4.2. What and where properties . . . . . . . . . . . . . . . . 11 4.2. What and where properties . . . . . . . . . . . . . . . . 12
4.2.1. title . . . . . . . . . . . . . . . . . . . . . . . . 12 4.2.1. title . . . . . . . . . . . . . . . . . . . . . . . . 12
4.2.2. description . . . . . . . . . . . . . . . . . . . . . 12 4.2.2. description . . . . . . . . . . . . . . . . . . . . . 12
4.2.3. htmlDescription . . . . . . . . . . . . . . . . . . . 12 4.2.3. htmlDescription . . . . . . . . . . . . . . . . . . . 12
4.2.4. locations . . . . . . . . . . . . . . . . . . . . . . 12 4.2.4. locations . . . . . . . . . . . . . . . . . . . . . . 12
4.2.5. links . . . . . . . . . . . . . . . . . . . . . . . . 14 4.2.5. links . . . . . . . . . . . . . . . . . . . . . . . . 14
4.2.6. locale . . . . . . . . . . . . . . . . . . . . . . . 15 4.2.6. locale . . . . . . . . . . . . . . . . . . . . . . . 15
4.2.7. keywords . . . . . . . . . . . . . . . . . . . . . . 15 4.2.7. keywords . . . . . . . . . . . . . . . . . . . . . . 16
4.2.8. categories . . . . . . . . . . . . . . . . . . . . . 16 4.2.8. categories . . . . . . . . . . . . . . . . . . . . . 16
4.2.9. color . . . . . . . . . . . . . . . . . . . . . . . . 16 4.2.9. color . . . . . . . . . . . . . . . . . . . . . . . . 16
4.3. Recurrence properties . . . . . . . . . . . . . . . . . . 16 4.3. Recurrence properties . . . . . . . . . . . . . . . . . . 16
4.3.1. recurrenceRule . . . . . . . . . . . . . . . . . . . 16 4.3.1. recurrenceRule . . . . . . . . . . . . . . . . . . . 16
4.3.2. recurrenceOverrides . . . . . . . . . . . . . . . . . 18 4.3.2. recurrenceOverrides . . . . . . . . . . . . . . . . . 18
4.4. Sharing and scheduling properties . . . . . . . . . . . . 19 4.4. Sharing and scheduling properties . . . . . . . . . . . . 19
4.4.1. priority . . . . . . . . . . . . . . . . . . . . . . 19 4.4.1. priority . . . . . . . . . . . . . . . . . . . . . . 19
4.4.2. freeBusyStatus . . . . . . . . . . . . . . . . . . . 19 4.4.2. freeBusyStatus . . . . . . . . . . . . . . . . . . . 19
4.4.3. privacy . . . . . . . . . . . . . . . . . . . . . . . 20 4.4.3. privacy . . . . . . . . . . . . . . . . . . . . . . . 20
4.4.4. replyTo . . . . . . . . . . . . . . . . . . . . . . . 21 4.4.4. replyTo . . . . . . . . . . . . . . . . . . . . . . . 21
skipping to change at page 2, line 52 skipping to change at page 3, line 4
4.2.9. color . . . . . . . . . . . . . . . . . . . . . . . . 16 4.2.9. color . . . . . . . . . . . . . . . . . . . . . . . . 16
4.3. Recurrence properties . . . . . . . . . . . . . . . . . . 16 4.3. Recurrence properties . . . . . . . . . . . . . . . . . . 16
4.3.1. recurrenceRule . . . . . . . . . . . . . . . . . . . 16 4.3.1. recurrenceRule . . . . . . . . . . . . . . . . . . . 16
4.3.2. recurrenceOverrides . . . . . . . . . . . . . . . . . 18 4.3.2. recurrenceOverrides . . . . . . . . . . . . . . . . . 18
4.4. Sharing and scheduling properties . . . . . . . . . . . . 19 4.4. Sharing and scheduling properties . . . . . . . . . . . . 19
4.4.1. priority . . . . . . . . . . . . . . . . . . . . . . 19 4.4.1. priority . . . . . . . . . . . . . . . . . . . . . . 19
4.4.2. freeBusyStatus . . . . . . . . . . . . . . . . . . . 19 4.4.2. freeBusyStatus . . . . . . . . . . . . . . . . . . . 19
4.4.3. privacy . . . . . . . . . . . . . . . . . . . . . . . 20 4.4.3. privacy . . . . . . . . . . . . . . . . . . . . . . . 20
4.4.4. replyTo . . . . . . . . . . . . . . . . . . . . . . . 21 4.4.4. replyTo . . . . . . . . . . . . . . . . . . . . . . . 21
4.4.5. participants . . . . . . . . . . . . . . . . . . . . 22 4.4.5. participants . . . . . . . . . . . . . . . . . . . . 22
4.5. Alerts properties . . . . . . . . . . . . . . . . . . . . 25 4.5. Alerts properties . . . . . . . . . . . . . . . . . . . . 25
4.5.1. useDefaultAlerts . . . . . . . . . . . . . . . . . . 25 4.5.1. useDefaultAlerts . . . . . . . . . . . . . . . . . . 25
4.5.2. alerts . . . . . . . . . . . . . . . . . . . . . . . 25 4.5.2. alerts . . . . . . . . . . . . . . . . . . . . . . . 25
4.6. Multilingual properties . . . . . . . . . . . . . . . . . 28 5. Type-specific JSCalendar properties . . . . . . . . . . . . . 28
4.6.1. localizations . . . . . . . . . . . . . . . . . . . . 28 5.1. JSEvent properties . . . . . . . . . . . . . . . . . . . 28
5. Type-specific JSCalendar properties . . . . . . . . . . . . . 29 5.1.1. start . . . . . . . . . . . . . . . . . . . . . . . . 28
5.1. JSEvent properties . . . . . . . . . . . . . . . . . . . 29 5.1.2. timeZone . . . . . . . . . . . . . . . . . . . . . . 28
5.1.1. start . . . . . . . . . . . . . . . . . . . . . . . . 29 5.1.3. duration . . . . . . . . . . . . . . . . . . . . . . 28
5.1.2. timeZone . . . . . . . . . . . . . . . . . . . . . . 29
5.1.3. duration . . . . . . . . . . . . . . . . . . . . . . 29
5.1.4. isAllDay . . . . . . . . . . . . . . . . . . . . . . 29 5.1.4. isAllDay . . . . . . . . . . . . . . . . . . . . . . 29
5.1.5. status . . . . . . . . . . . . . . . . . . . . . . . 30 5.1.5. status . . . . . . . . . . . . . . . . . . . . . . . 29
5.2. JSTask properties . . . . . . . . . . . . . . . . . . . . 30 5.2. JSTask properties . . . . . . . . . . . . . . . . . . . . 29
5.2.1. due . . . . . . . . . . . . . . . . . . . . . . . . . 30 5.2.1. due . . . . . . . . . . . . . . . . . . . . . . . . . 29
5.2.2. start . . . . . . . . . . . . . . . . . . . . . . . . 30 5.2.2. start . . . . . . . . . . . . . . . . . . . . . . . . 29
5.2.3. timeZone . . . . . . . . . . . . . . . . . . . . . . 30 5.2.3. timeZone . . . . . . . . . . . . . . . . . . . . . . 30
5.2.4. estimatedDuration . . . . . . . . . . . . . . . . . . 31 5.2.4. estimatedDuration . . . . . . . . . . . . . . . . . . 30
5.2.5. completed . . . . . . . . . . . . . . . . . . . . . . 31 5.2.5. completed . . . . . . . . . . . . . . . . . . . . . . 30
5.2.6. isAllDay . . . . . . . . . . . . . . . . . . . . . . 31 5.2.6. isAllDay . . . . . . . . . . . . . . . . . . . . . . 30
5.2.7. progress . . . . . . . . . . . . . . . . . . . . . . 31 5.2.7. progress . . . . . . . . . . . . . . . . . . . . . . 31
5.2.8. status . . . . . . . . . . . . . . . . . . . . . . . 32 5.2.8. status . . . . . . . . . . . . . . . . . . . . . . . 31
5.3. JSGroup properties . . . . . . . . . . . . . . . . . . . 33 5.3. JSGroup properties . . . . . . . . . . . . . . . . . . . 32
5.3.1. entries . . . . . . . . . . . . . . . . . . . . . . . 33 5.3.1. entries . . . . . . . . . . . . . . . . . . . . . . . 33
5.3.2. source . . . . . . . . . . . . . . . . . . . . . . . 34 5.3.2. source . . . . . . . . . . . . . . . . . . . . . . . 33
6. Conversion from and to iCalendar . . . . . . . . . . . . . . 34 6. Conversion from and to iCalendar . . . . . . . . . . . . . . 33
6.1. JSEvent . . . . . . . . . . . . . . . . . . . . . . . . . 34 6.1. JSEvent . . . . . . . . . . . . . . . . . . . . . . . . . 33
6.2. JSTask . . . . . . . . . . . . . . . . . . . . . . . . . 35 6.2. JSTask . . . . . . . . . . . . . . . . . . . . . . . . . 34
6.3. JSGroup . . . . . . . . . . . . . . . . . . . . . . . . . 37 6.3. JSGroup . . . . . . . . . . . . . . . . . . . . . . . . . 36
6.4. Common properties . . . . . . . . . . . . . . . . . . . . 37 6.4. Common properties . . . . . . . . . . . . . . . . . . . . 36
6.5. Locations and participants . . . . . . . . . . . . . . . 39 6.5. Locations and participants . . . . . . . . . . . . . . . 38
6.6. Unknown properties . . . . . . . . . . . . . . . . . . . 41 6.6. Unknown properties . . . . . . . . . . . . . . . . . . . 41
7. JSCalendar object examples . . . . . . . . . . . . . . . . . 41 7. JSCalendar object examples . . . . . . . . . . . . . . . . . 42
7.1. Simple event . . . . . . . . . . . . . . . . . . . . . . 41 7.1. Simple event . . . . . . . . . . . . . . . . . . . . . . 42
7.2. Simple task . . . . . . . . . . . . . . . . . . . . . . . 42 7.2. Simple task . . . . . . . . . . . . . . . . . . . . . . . 42
7.3. Simple group . . . . . . . . . . . . . . . . . . . . . . 42 7.3. Simple group . . . . . . . . . . . . . . . . . . . . . . 42
7.4. All-day event . . . . . . . . . . . . . . . . . . . . . . 43 7.4. All-day event . . . . . . . . . . . . . . . . . . . . . . 43
7.5. Task with a due date . . . . . . . . . . . . . . . . . . 43 7.5. Task with a due date . . . . . . . . . . . . . . . . . . 43
7.6. Event with end time-zone . . . . . . . . . . . . . . . . 44 7.6. Event with end time-zone . . . . . . . . . . . . . . . . 44
7.7. Floating-time event (with recurrence) . . . . . . . . . . 44 7.7. Floating-time event (with recurrence) . . . . . . . . . . 44
7.8. Event with multiple locations and localization . . . . . 45 7.8. Event with multiple locations . . . . . . . . . . . . . . 45
7.9. Recurring event with overrides . . . . . . . . . . . . . 46 7.9. Recurring event with overrides . . . . . . . . . . . . . 45
7.10. Recurring event with participants . . . . . . . . . . . . 47 7.10. Recurring event with participants . . . . . . . . . . . . 46
8. Security Considerations . . . . . . . . . . . . . . . . . . . 48 8. Security Considerations . . . . . . . . . . . . . . . . . . . 48
9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 48 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 48
10. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 48 10. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 48
11. References . . . . . . . . . . . . . . . . . . . . . . . . . 48 11. References . . . . . . . . . . . . . . . . . . . . . . . . . 48
11.1. Normative References . . . . . . . . . . . . . . . . . . 48 11.1. Normative References . . . . . . . . . . . . . . . . . . 48
11.2. Informative References . . . . . . . . . . . . . . . . . 51 11.2. Informative References . . . . . . . . . . . . . . . . . 50
11.3. URIs . . . . . . . . . . . . . . . . . . . . . . . . . . 51 11.3. URIs . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 51 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 51
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 8, line 33 skipping to change at page 8, line 28
o "null": Remove the property from the patched object. If not o "null": Remove the property from the patched object. If not
present in the parent, this a no-op. present in the parent, this a no-op.
o Anything else: The value to replace the inherited property on the o Anything else: The value to replace the inherited property on the
patch object with (if present) or add to the property (if not patch object with (if present) or add to the property (if not
present). present).
Implementations MUST reject a PatchObject if any of its patches are Implementations MUST reject a PatchObject if any of its patches are
invalid. invalid.
3.2.5. Normalisation and equivalence 3.2.5. Identifiers
If not noted otherwise, properties that define identifiers MUST be
string values, MUST be at least 1 character in length and maximum 256
octets in size, and MUST only contain characters from the "URL and
Filename safe" Base 64 Alphabet, as defined in section 5 of
[RFC4648]. This is the ASCII alphanumeric characters (A-Za-z0-9),
hyphen (-), and underscore (_).
3.2.6. Normalisation 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 normalisation or and properties, but does not define a general normalisation or
equivalence method for JSCalendar objects and types. This is because equivalence method for JSCalendar objects and types. This is because
the notion of equivalence might range from byte-level equivalence to the notion of equivalence might range from byte-level equivalence to
semantic equivalence, depending on the respective use case (for semantic equivalence, depending on the respective use case (for
example, the CalDAV protocol [RFC4791] requires octet equivalence of example, the CalDAV protocol [RFC4791] requires octet equivalence of
the encoded calendar object to determine ETag equivalence). the encoded calendar object to determine ETag equivalence).
Normalisation of JSCalendar objects is hindered because of the Normalisation of JSCalendar objects is hindered because of the
skipping to change at page 10, line 17 skipping to change at page 10, line 17
Type: "String" Type: "String"
A globally unique identifier, used to associate the object as the A globally unique identifier, used to associate the object as the
same across different systems, calendars and views. The value of same across different systems, calendars and views. The value of
this property MUST be unique across _all_ JSCalendar objects, even if this property MUST be unique across _all_ JSCalendar objects, even if
they are of different type. [RFC4122] describes a range of they are of different type. [RFC4122] describes a range of
established algorithms to generate universally unique identifiers established algorithms to generate universally unique identifiers
(UUID), and the random or pseudo-random version is recommended to (UUID), and the random or pseudo-random version is recommended to
use. use.
For compatibility with [RFC5545] UIDs, implementations MUST be able
to receive and persist values of at least 255 octets for this
property, but they MUST NOT truncate values in the middle of a UTF-8
multi-octet sequence.
A valid JSCalendar object MUST include this property. A valid JSCalendar object MUST include this property.
4.1.3. relatedTo 4.1.3. relatedTo
Type: "String[Relation]|null" Type: "String[Relation]|null"
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.
skipping to change at page 11, line 16 skipping to change at page 11, line 19
if the user wishes to modify them all at once. if the user wishes to modify them all at once.
4.1.4. prodId 4.1.4. prodId
Type: "String|null" Type: "String|null"
The identifier for the product that created the JSCalendar object. The identifier for the product that created the JSCalendar object.
The vendor of the implementation SHOULD ensure that this is a The vendor of the implementation SHOULD ensure that this is a
globally unique identifier, using some technique such as an FPI globally unique identifier, using some technique such as an FPI
value, as defined in [ISO.9070.1991]. value, as defined in [ISO.9070.1991]. It MUST only use characters of
an iCalendar TEXT data value (see section 3.3.11 in [RFC5545]).
This property SHOULD NOT be used to alter the interpretation of an This property SHOULD NOT be used to alter the interpretation of an
JSCalendar object beyond the semantics specified in this document. JSCalendar object beyond the semantics specified in this document.
For example, it is not to be used to further the understanding of For example, it is not to be used to further the understanding of
non-standard properties. non-standard properties.
4.1.5. created 4.1.5. created
Type: "UTCDate|null" Type: "UTCDate|null"
skipping to change at page 12, line 19 skipping to change at page 12, line 22
4.2.2. description 4.2.2. description
Type: "String" (Defaults to the empty string if omitted) Type: "String" (Defaults to the empty string if omitted)
A longer form description of the object. This is plain text, but a A longer form description of the object. This is plain text, but a
client SHOULD attempt to hyperlink URLs when displaying it. client SHOULD attempt to hyperlink URLs when displaying it.
4.2.3. htmlDescription 4.2.3. htmlDescription
Type: "String" (Defaults to the empty string if omitted) Type: "String|null" (Defaults to null if omitted)
A longer form rich-text description of the object. This is HTML text A longer form rich-text description of the object. This is HTML text
[1] and allows to reference resources in the *links* property by use [1] and allows to reference resources in the *links* property by use
of CID URLs (see [RFC2392]). To convert a CID URL to the *cid* of CID URLs (see [RFC2392]). To convert a CID URL to the *cid*
property value of a *Link* object, implementations MUST follow the property value of a *Link* object, implementations MUST follow the
conversion described in section 2 of [RFC2392]. Implementations MAY conversion described in section 2 of [RFC2392]. Implementations MAY
choose not to follow untrusted external CID URLs referenced in the choose not to follow untrusted external CID URLs referenced in the
*links* property, in which case they MUST treat the *htmlDescription* *links* property, in which case they MUST treat the *htmlDescription*
property as if omitted. Implementations MUST preserve the value of property as if omitted. Implementations MUST preserve the value of
this property, even if it contains untrusted links. this property, even if it contains untrusted links.
4.2.4. locations 4.2.4. locations
Type: "String[Location]|null" Type: "String[Location]|null"
A map of location ids to Location objects, representing locations A map of location ids to Location objects, representing locations
associated with the object. A location id may be any string and need associated with the object. A location id may be any valid [RFC6901]
only be unique to this object, although a UUID is a practical choice. JSON pointer and need only be unique to this object; a UUID is a
practical choice.
A *Location* object has the following properties. All properties are A *Location* object has the following properties. All properties are
optional, but every Location object MUST have at least one property: optional, but every Location object MUST have at least one property:
o *name*: "String" The human-readable name of the location. o *name*: "String" (Defaults to the empty string if omitted) The
human-readable name of the location.
o *description*: "String" Human-readable instructions for accessing o *description*: "String|null" Human-readable instructions for
this location. This may be an address, set of directions, door accessing this location. This may be an address, set of
access code, etc. directions, door access code, etc.
o *rel*: "String" The relation type of this location to the o *rel*: "String" (Defaults to "unknown" if omitted) The relation
JSCalendar object. 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, registered in a
future RFC, or a vendor-specific value. Any value the client or future RFC, or a vendor-specific value. Any value the client or
server doesn't understand should be treated the same as "unknown". server doesn't understand should be treated the same as "unknown".
* "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.
* "virtual": This is not a physical location (e.g. this location * "virtual": This is not a physical location (e.g. this location
skipping to change at page 13, line 33 skipping to change at page 13, line 36
values, registered in a future RFC, or a vendor-specific value. values, registered in a future RFC, or a vendor-specific value.
Any value the client or server doesn't understand should be Any value the client or server doesn't understand should be
ignored, but preserved. ignored, but preserved.
The features supported by locations with rel-type "virtual" are: The features supported by locations with rel-type "virtual" are:
* "audio": audio conferencing * "audio": audio conferencing
* "chat": chat or instant messaging * "chat": chat or instant messaging
* "feed": blog or atom feed
* "moderator": provides moderator-specific features
* "phone": phone conferencing
* "screen": screen sharing * "screen": screen sharing
* "video": video conferencing * "video": video conferencing
* any vendor-prefixed custom value * any vendor-prefixed custom value
o *timeZone*: "String|null" (Defaults to "null" if omitted) A time- o *timeZone*: "String|null" (Defaults to "null" if omitted) A time-
zone for this location. zone for this location.
If "null", the *timeZone* from the JSCalendar object MUST be If "null", the *timeZone* from the JSCalendar object MUST be
presumed when a time-zone is needed in relation to this location. presumed when a time-zone is needed in relation to this location.
o *coordinates*: "String" An [RFC5870] "geo:" URI for the location. o *coordinates*: "String|null" An [RFC5870] "geo:" URI for the
location.
o *uri*: "String" A URI that represents how to connect to this o *uri*: "String|null" A URI that represents how to connect to this
location. location.
This may be a telephone number (represented as This may be a telephone number (represented as
"tel:+1-555-555-555") for a teleconference, a web address for "tel:+1-555-555-555") for a teleconference, a web address for
online chat, or any custom URI. online chat, or any custom URI.
o *linkIds*: "String[]|null" A list of ids for links to alternate o *linkIds*: "String[]|null" A list of ids for links to alternate
representations of this location. representations of this location.
For example, an alternative representation could be in vCard For example, an alternative representation could be in vCard
format. If a given value does not correspond to any link id in format.
the links property of the instance, this MUST be ignored.
4.2.5. links 4.2.5. links
Type: "String[Link]|null" Type: "String[Link]|null"
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. A link id may be any string and need associated with the object. A link id may be any valid [RFC6901]
only be unique to this object, although the href or a UUID are JSON pointer and need only be unique to this object; the href or a
practical choices. UUID are practical choices.
A *Link* object has the following properties: A *Link* object has the following properties:
o *href*: "String" A URI from which the resource may be fetched. o *href*: "String" A URI from which the resource may be fetched.
This MAY be a "data:" URL, but it is recommended that the file be This MAY be a "data:" URL, but it is recommended that the file be
hosted on a server to avoid embedding arbitrary large data in hosted on a server to avoid embedding arbitrary large data in
JSCalendar object instances. JSCalendar object instances.
o *cid* "String|null" The id used within the *htmlDescription* o *cid* "String|null" The id used within the *htmlDescription*
property to reference this link. property to reference this link.
If not null, this MUST be a valid Content-ID MIME header value If not null, this MUST be a valid Content-ID MIME header value
(see [RFC2392]). The identifier MUST be unique within this without CFWS and angle brackets (see [RFC2392]). The identifier
JSCalendar object but has no meaning beyond that. Specifically, MUST be unique within this JSCalendar object but has no meaning
it MAY be different from the *Link* object identifier in the beyond that. Specifically, it MAY be different from the *Link*
enclosing *links* property. object identifier in the enclosing *links* property.
o *type*: "String|null"(optional, defaults to "null") The content- o *type*: "String|null"(optional, defaults to "null") The content-
type [RFC6838] of the resource, if known. type [RFC6838] of the resource, if known.
o *size*: "Number|null"(optional, defaults to "null") The size, in o *size*: "Number|null"(optional, defaults to "null") The size, in
bytes, of the resource when fully decoded (i.e. the number of bytes, of the resource when fully decoded (i.e. the number of
bytes in the file the user would download), if known. bytes in the file the user would download), if known.
o *rel*: "String"(optional, defaults to "related") Identifies the o *rel*: "String"(optional, defaults to "related") Identifies the
relation of the linked resource to the object. The value MUST be relation of the linked resource to the object. The value MUST be
skipping to change at page 20, line 46 skipping to change at page 21, line 4
* description * description
* htmlDescription * htmlDescription
* locations * locations
* links * links
* locale * locale
* localizations
* participants * participants
* replyTo * replyTo
In addition, any patches in "recurrenceOverrides" whose key is In addition, any patches in "recurrenceOverrides" whose key is
prefixed with one of the above properties MUST be stripped. prefixed with one of the above properties MUST be stripped.
o "secret": The object is hidden completely (as though it did not o "secret": The object is hidden completely (as though it did not
exist) when the calendar is shared. exist) when the calendar is shared.
4.4.4. replyTo 4.4.4. replyTo
Type: "String[String]|null" Type: "String[String]|null"
skipping to change at page 22, line 31 skipping to change at page 22, line 31
+--------------+----------------------------------------------------+ +--------------+----------------------------------------------------+
Table 1: replyTo URI Template variables Table 1: replyTo URI Template variables
4.4.5. participants 4.4.5. participants
Type: "String[Participant]|null" Type: "String[Participant]|null"
A map of participant ids to participants, describing their A map of participant ids to participants, describing their
participation in the calendar object. A participant id may be any participation in the calendar object. A participant id may be any
string and need only be unique to this calendar object; the email valid [RFC6901] JSON pointer and need only be unique to this calendar
address of the participant is a good choice. object; the email address of the participant is a good choice.
A *Participant* object has the following properties. Properties are A *Participant* object has the following properties. Properties are
mandatory unless marked otherwise: mandatory unless marked otherwise:
o *name*: "String" The display name of the participant (e.g. "Joe o *name*: "String" The display name of the participant (e.g. "Joe
Bloggs"). Bloggs").
o *email*: "String" The email address for the participant. o *email*: "String" The email address for the participant.
o *kind*: "String"(optional, defaults to "unknown") What kind of o *kind*: "String"(optional, defaults to "unknown") What kind of
skipping to change at page 25, line 13 skipping to change at page 25, line 13
array). array).
o *memberOf*: "String[]|null"(optional, defaults to "null") A list o *memberOf*: "String[]|null"(optional, defaults to "null") A list
of group participants that were invited to this calendar object, of group participants that were invited to this calendar object,
which caused this participant to be invited due to their which caused this participant to be invited due to their
membership of the group(s). This MUST be omitted if none (rather membership of the group(s). This MUST be omitted if none (rather
than an empty array). than an empty array).
o *linkIds*: "String[]|null"(optional, defaults to "null") Links to o *linkIds*: "String[]|null"(optional, defaults to "null") Links to
more information about this participant, for example in vCard more information about this participant, for example in vCard
format. If a given value does not correspond to any link id in format.
the links property of the instance, this id MUST be ignored. This
MUST be omitted if none (rather than an empty array).
4.5. Alerts properties 4.5. Alerts properties
4.5.1. useDefaultAlerts 4.5.1. useDefaultAlerts
Type: "Boolean" (defaults to "false" if omitted) Type: "Boolean" (defaults to "false" if omitted)
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
defined in this specification. If an implementation cannot determine defined in this specification. If an implementation cannot determine
the user's default alerts, or none are set, it MUST process the the user's default alerts, or none are set, it MUST process the
alerts property as if useDefaultAlerts is set to "false". alerts property as if useDefaultAlerts is set to "false".
4.5.2. alerts 4.5.2. alerts
Type: "String[Alert]|null" Type: "String[Alert]|null"
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 the user for this calendar object. An alert id may display or send the user for this calendar object. An alert id may
be any string and need only be unique to this calendar object, be any valid [RFC6901] JSON pointer and need only be unique to this
although a globally unique id is a practical choice (also see calendar object; a globally unique id is a practical choice (also see
Section 4.1.2)). Section 4.1.2)).
An *Alert* Object has the following properties: An *Alert* Object has the following properties:
o *relativeTo*: "String" (optional, defaults to "before-start") o *relativeTo*: "String" (optional, defaults to "before-start")
Specifies where the offset is relative to for the alarm to Specifies where the offset is relative to for the alarm to
trigger. The value MUST be one of: trigger. The value MUST be one of:
* "before-start" * "before-start"
skipping to change at page 26, line 51 skipping to change at page 26, line 51
a time in the future. When that time is reached, the alert a time in the future. When that time is reached, the alert
SHOULD be reshown unless acknowledged is now after the original SHOULD be reshown unless acknowledged is now after the original
trigger time. trigger time.
Setting this property on an instance of a recurring calendar Setting this property on an instance of a recurring calendar
object MUST update the alarm on the master object, unless the object MUST update the alarm on the master object, unless the
respective instance already is defined in respective instance already is defined in
"recurrenceOverrides". It MUST NOT generate an override for "recurrenceOverrides". It MUST NOT generate an override for
the sole use of snoozing an alarm. the sole use of snoozing an alarm.
* *mediaLinkIds*: "String[]|null " (optional) * *mediaLinks*: "String[Link]|null " (optional)
A list of link identifiers in the JSCalendar object *links* A map of link identifiers to links (see Section 4.2.5) that
property. Clients SHOULD play one or more of the link contents contain media to display with this alert. Clients SHOULD play
that are supported by the client implementation and are one or more of the link contents that are supported by the
appropriate for the given device and user context. client implementation and are appropriate for the given device
and user context.
An *EmailAction* means an email SHOULD be sent as specified in the An *EmailAction* means an email SHOULD be sent as specified in the
object at the specified time. It has the following properties: object at the specified time. It has the following properties:
* *type*: "String" The value MUST be "email". * *type*: "String" The value MUST be "email".
* *to*: "Emailer[]" An array of name/email objects to send the * *to*: "Emailer[]" An array of name/email objects to send the
alert to. alert to.
An *Emailer* object has the following properties: An *Emailer* object has the following properties:
skipping to change at page 27, line 45 skipping to change at page 27, line 46
* *htmlBody*: "String" (optional) The HTML body to use for the * *htmlBody*: "String" (optional) The HTML body to use for the
email, with rich-media content processed as for the email, with rich-media content processed as for the
*htmlDescription* property of the JSCalendar object (see *htmlDescription* property of the JSCalendar object (see
Section 4.2.3), e.g. all CID URLs MUST be embedded in the Section 4.2.3), e.g. all CID URLs MUST be embedded in the
generated alert email HTML body, or the *htmlBody* property generated alert email HTML body, or the *htmlBody* property
ignored completely. If the textBody property of this alert ignored completely. If the textBody property of this alert
action is not set, the server SHOULD generate a plain-text action is not set, the server SHOULD generate a plain-text
version from the HTML body and include it in a "multipart/ version from the HTML body and include it in a "multipart/
alternative" MIME message. alternative" MIME message.
* *attachments*: "String[]|null" (optional) A list of link * *attachments*: "String[Link]|null" (optional) A map of link
identifiers in the JSCalendar object links property. Included identifiers to links (see Section 4.2.5). Included attachments
attachments SHOULD be embedded in the MIME message with the SHOULD be embedded in the MIME message with the "Content-
"Content-Disposition" header value set to "attachment" (see Disposition" header value set to "attachment" (see [RFC2183]).
[RFC2183]). Implementations MAY refuse to include one or more Implementations MAY refuse to include one or more attachments
attachments when building an alert email, in which case they when building an alert email, in which case they MUST ignore
MUST ignore the contents of the *attachments* property (e.g. the contents of the *attachments* property (e.g. they MUST NOT
they MUST NOT include a subset of attachments). include a subset of attachments).
An *UnknownAction* object is an object that contains a *type * An *UnknownAction* object is an object that contains a *type *
property whose value is not "email" or "string", plus zero or more property whose value is not "email" or "string", plus zero or more
other properties. This is for compatibility with client other properties. This is for compatibility with client
extensions and future RFCs. The client or server SHOULD NOT extensions and future RFCs. The client or server SHOULD NOT
trigger any type of alert for action types they do not understand, trigger any type of alert for action types they do not understand,
but MUST preserve them. but MUST preserve them.
4.6. Multilingual properties
4.6.1. localizations
Type: "String[PatchObject]|null"
A map of [RFC5646] language tags to patch objects, which localise the
calendar object into the locale of the respective language tag.
See the description of PatchObject (Section 3.2.4) for the structure
of the PatchObject. The patches are applied to the top-level object
and MUST only patch the following properties:
o title
o description
o htmlDescription
o keywords
o Location name
o Location description
o Link title
o EmailAction alert subject
o EmailAction alert textBody
o EmailAction alert htmlBody
o any Link properties entry except the "display" field
o any UnknownAction alert property except the "type" field
o any unknown or vendor-specific property (if not defined otherwise
in a future RFC or vendor-specific extension).
5. Type-specific JSCalendar properties 5. Type-specific JSCalendar properties
5.1. JSEvent properties 5.1. JSEvent properties
In addition to the common JSCalendar object properties (Section 4) a In addition to the common JSCalendar object properties (Section 4) a
JSEvent has the following properties: JSEvent has the following properties:
5.1.1. start 5.1.1. start
Type: "LocalDate" e.g. "2015-09-02T00:00:00" Type: "LocalDate" e.g. "2015-09-02T00:00:00"
skipping to change at page 37, line 29 skipping to change at page 36, line 29
Table 4: Translation between JSGroup and iCalendar Table 4: Translation between JSGroup and iCalendar
6.4. Common properties 6.4. Common properties
+---------------------+---------------------------------------------+ +---------------------+---------------------------------------------+
| Property | iCalendar counterpart | | Property | iCalendar counterpart |
+---------------------+---------------------------------------------+ +---------------------+---------------------------------------------+
| alerts | An *Alert* corresponds to the VALARM | | alerts | An *Alert* corresponds to the VALARM |
| | component in iCalendar, where the *action* | | | component in iCalendar, where the *action* |
| | is determined by the iCalendar ACTION | | | is determined by the iCalendar ACTION |
| | property value (e.g., a "DISPLAY" property | | | property value (e.g., both "DISPLAY" and |
| | indicates that the JSCalendar Alert action | | | "AUDIO" actions map to a JSCalendar |
| | is a *DisplayAction* and similarly an | | | *DisplayAction* alert, and similarly for an |
| | iCalendar "EMAIL" value for *EmailAction* | | | iCalendar "EMAIL"). The *relativeTo* and |
| | action). The *relativeTo* and *offset* | | | *offset* properties corresponds to the |
| | properties corresponds to the iCalendar | | | iCalendar TRIGGER property. The |
| | TRIGGER property. *NON-STANDARD*: The | | | *attachments* property of an *EmailAction* |
| | iCalendar properties for JSCalendar Alert | | | alert map to iCalendar ATTACH properties. |
| | actions are non-standard, see | | | For mapping *mediaLinks*, the iCalendar |
| | [draft-daboo-valarm-extensions]. | | | currently forbids to define ATTACH |
| | properties on VALARMs with DISPLAY action. |
| | Mapping this property is implementation- |
| | specific, but using "X-ATTACH" with the |
| | same semantics as ATTACH is a sane choice. |
| | | | | |
| categories | Corresponds to the STRUCTURED-CATEGORY | | categories | Corresponds to the STRUCTURED-CATEGORY |
| | property in iCalendar, see. *NON- | | | property in iCalendar, see. *NON- |
| | STANDARD*: this property is currently non- | | | STANDARD*: this property is currently non- |
| | standard, see | | | standard, see |
| | [draft-ietf-calext-ical-relations]. | | | [draft-ietf-calext-ical-relations]. |
| | | | | |
| color | Corresponds to the COLOR property in | | color | Corresponds to the COLOR property in |
| | iCalendar, as specified in [RFC7986]. | | | iCalendar, as specified in [RFC7986]. |
| | | | | |
| created | Corresponds to the CREATED property in | | created | Corresponds to the CREATED property in |
| | iCalendar. | | | iCalendar. |
| | | | | |
| description | Corresponds to the DESCRIPTION property in | | description | Corresponds to the DESCRIPTION property in |
| | iCalendar. | | | iCalendar. |
| | | | | |
| htmlDescription | There is no direct equivalent in iCalendar. | | htmlDescription | Corresponds to the ALTREP parameter of the |
| | If the *description* is empty, | | | DESCRIPTION property (e.g. by setting |
| | implementations SHOUD store a plain text | | | ALTREP to a "data:text/html" URL containing |
| | version of *htmlDescription* in iCalendar | | | the HTML text). Alternatively, use the |
| | DESCRIPTION. | | | STYLED-DESCRIPTION property. *NON- |
| | STANDARD*: the STYLED-DESCRIPTION property |
| | currently is non-standard, see |
| | [draft-ietf-calext-eventpub-extensions]. |
| | | | | |
| freeBusyStatus | Corresponds to the TRANSP property in | | freeBusyStatus | Corresponds to the TRANSP property in |
| | iCalendar. | | | iCalendar. |
| | | | | |
| keywords | Corresponds to the CATEGORIES property in | | keywords | Corresponds to the CATEGORIES property in |
| | iCalendar, as specified in [RFC7986]. | | | iCalendar, as specified in [RFC7986]. |
| | | | | |
| links | Corresponds to the ATTACH ([RFC5545]) and | | links | Corresponds to the ATTACH ([RFC5545]) or |
| | IMAGE iCalendar properties ([RFC7986]). | | | IMAGE ([RFC7986]) properties with a URI |
| | value type set to the link "href". |
| | ([RFC7986]). The *type* property |
| | corresponds to the FMTTYPE parameter, the |
| | *size* property to the SIZE parameter. |
| | Mapping all other properties is |
| | implementation-specific. |
| | | | | |
| locale | Corresponds to the LANGUAGE parameter in | | locale | Corresponds to the LANGUAGE parameter in |
| | iCalendar, which is added to individual | | | iCalendar, which is added to individual |
| | properties. When converting from | | | properties. When converting from |
| | iCalendar, one language must be picked as | | | iCalendar, one language must be picked as |
| | the main locale for the object, and all | | | the main locale. |
| | properties in other languages moved to the |
| | localizations JSEvent property. |
| | |
| localizations | Corresponds to the LANGUAGE parameter in |
| | iCalendar, which is added to individual |
| | properties. When converting from |
| | iCalendar, one language must be picked as |
| | the main locale for the object, and all |
| | properties in other languages moved to the |
| | localizations JSEvent property. |
| | | | | |
| locations | See Section 6.5. | | locations | See Section 6.5. |
| | | | | |
| method | Corresponds to the METHOD property in | | method | Corresponds to the METHOD property in |
| | iCalendar. | | | iCalendar. |
| | | | | |
| participants | See Section 6.5. | | participants | See Section 6.5. |
| | | | | |
| priority | Corresponds to the PRIORITY property in | | priority | Corresponds to the PRIORITY property in |
| | iCalendar. | | | iCalendar. |
skipping to change at page 39, line 18 skipping to change at page 38, line 21
| | with a recurrence-id. | | | with a recurrence-id. |
| | | | | |
| recurrenceRule | Corresponds to the RRULE property in | | recurrenceRule | Corresponds to the RRULE property in |
| | iCalendar. See the property definition at | | | iCalendar. See the property definition at |
| | section Section 4.3.1 how to map a RRULE | | | section Section 4.3.1 how to map a RRULE |
| | value. | | | value. |
| | | | | |
| relatedTo | Corresponds to the RELATED-TO property in | | relatedTo | Corresponds to the RELATED-TO property in |
| | iCalendar. | | | iCalendar. |
| | | | | |
| replyTo | A *replyTo* property of type "imip" | | replyTo | An iCalendar ORGANIZER with one of the |
| | corresponds to the email address of the | | | mapped URIs as value. If URIs are defined |
| | ORGANIZER property in iCalendar. There is | | | for both the "imip" and "web" type, it is |
| | no iCalendar representation for the "web" | | | recommended to map the "imip" value to the |
| | type. | | | calendar address value of the ORGANIZER. |
| | | | | |
| sequence | Corresponds to the SEQUENCE property in | | sequence | Corresponds to the SEQUENCE property in |
| | iCalendar. | | | iCalendar. |
| | | | | |
| status | Corresponds to the STATUS property in | | status | Corresponds to the STATUS property in |
| | iCalendar (converted to lower-case). | | | iCalendar (converted to lower-case). |
| | | | | |
| title | Corresponds to the SUMMARY property in | | title | Corresponds to the SUMMARY property in |
| | iCalendar. | | | iCalendar. |
| | | | | |
skipping to change at page 40, line 5 skipping to change at page 39, line 9
6.5. Locations and participants 6.5. Locations and participants
Both JSCalendar participants and locations have counterparts in Both JSCalendar participants and locations have counterparts in
iCalendar but provide richer representation. iCalendar but provide richer representation.
The following table outlines translation of JSCalendar participants. The following table outlines translation of JSCalendar participants.
Where iCalendar has distinct properties for ORGANIZER and ATTENDEE, Where iCalendar has distinct properties for ORGANIZER and ATTENDEE,
these are merged in JSCalendar into the Participant object type. these are merged in JSCalendar into the Participant object type.
+------------------+------------------------------------------------+ +--------------------------------------------------+----------------+
| Property | iCalendar counterpart | | Property | iCalendar |
+------------------+------------------------------------------------+ | | counterpart |
| name | the CN parameter | +--------------------------------------------------+----------------+
| | | | delegatedFrom | the DELEGATED- |
| kind | the CUTYPE parameter | | | FROM parameter |
| | | | | |
| rsvpResponse | the PARTSTAT parameter | | delegatedTo | email |
| | | | | |
| role | the ORGANIZER and ATTENDEE properties. Owners | | the value of the ORGANIZER or ATTENDEE property | kind |
| | map to the iCalendar ORGANIZER property, where | | | |
| | mapping multiple owners to iCalendar is | | the CUTYPE parameter | linkIds |
| | implementation-specific but MUST be consistent | | | |
| | across mappings of the same object. | | Implementation-specific. | locationId |
| | | | | |
| participation | the ROLE parameter | | Implementation-specific. When mapping from | memberOf |
| | | | iCalendar to JSCalendar this may be the | |
| locationId | the JSCalendar identifier of a mapped | | JSCalendar identifier of a CONFERENCE property | |
| | CONFERENCE property that has the MODERATOR | | that has the MODERATOR feature defined in its | |
| | feature defined in its FEATURE parameter | | FEATURE parameter values. If multiple such | |
| | values. If multiple such CONFERENCE properties | | CONFERENCE properties are defined in iCalendar, | |
| | are defined in iCalendar, then the one with | | then the one with the most interactive features | |
| | the most interactive features is chosen (VIDEO | | is chosen. | |
| | over AUDIO over CHAT over anything else). | | | |
| | | | the MEMBER parameter | name |
| rsvpWanted | the RSVP parameter | | | |
| | | | the CN parameter | participation |
| delegatedTo | the DELEGATED-TO parameter | | | |
| | | | Maps to the standard iCalendar ROLE parameter | roles |
| delegatedFrom | the DELEGATED-FROM parameter | | values REQ-PARTICIPANT, OPT-PARTICIPANT and NON- | |
| | | | PARTICIPANT. | |
| memberOf | the MEMBER parameter | | | |
| | | | The "chair" role maps to the standard iCalendar | rsvpResponse |
| scheduleSequence | the SEQUENCE property of the participant's | | ROLE parameter value "chair", with an implicit | |
| | latest iMIP message | | participant of value "required". The mapping of | |
| | | | non-required chairs and other roles is | |
| scheduleUpdated | the DTSTAMP property of the participant's | | implementation-specific, but using "x-name" | |
| | latest iMIP message | | parameter values is recommended. | |
+------------------+------------------------------------------------+ | | |
| the PARTSTAT parameter | the DELEGATED- |
| | TO parameter |
| | |
| scheduleSequence | the SEQUENCE |
| | property of |
| | the |
| | participant's |
| | latest iMIP |
| | message |
| | |
| scheduleUpdated | the DTSTAMP |
| | property of |
| | the |
| | participant's |
| | latest iMIP |
| | message |
+--------------------------------------------------+----------------+
Table 6: Translation of Participant between JSCalendar and iCalendar Table 6: Translation of Participant between JSCalendar and iCalendar
For JSCalendar locations, the iCalendar counterparts are the For JSCalendar locations, the iCalendar counterparts are the
[RFC5545] LOCATION and the extended iCalendar [RFC7986] CONFERENCE [RFC5545] LOCATION and the extended iCalendar [RFC7986] CONFERENCE
properties. properties. Generally, use a LOCATION property if only the name
property is set, CONFERENCE otherwise. For backwards compatibility
with client implementations that do not support the CONFERENCE
property, it is recommended to set use at least one LOCATION
property, if the JSCalendar object contains locations.
An iCalendar LOCATION property becomes a JSCalendar Location with +-------------+-----------------------------------------------------+
just a description property. CONFERENCE property values in iCalendar | Property | iCalendar counterpart |
map to locations with *rel* type "virtual". The location *feature* +-------------+-----------------------------------------------------+
property value corresponds to the extended iCalendar FEATURE property | name | For LOCATION: corresponds to the property value. |
parameter values defined in [RFC7986]. Both iCalendar PHONE and | | For CONFERENCE: corresponds to the LABEL parameter. |
AUDIO features map to the "audio" feature and the FEED parameter | | |
value is omitted. See the mapping for *locationId* in Table 6 on how | description | Implementation-specific. |
to map CONFERENCE properties that contain the MODERATOR feature. | | |
| rel | For CONFERENCE: implicitly "virtual". |
| | Implementation-specific for LOCATION. |
| | |
| features | For CONFERENCE: corresponds to the FEATURE |
| | parameter. Implementation-specific for LOCATION. |
| | |
| timeZone | Implementation-specific. |
| | |
| coordinates | Implementation-specific. Consider using a GEO |
| | iCalendar property, along with one LOCATION or |
| | CONFERENCE. |
| | |
| uri | For LOCATION: corresponds to the ALTREP parameter. |
| | For CONFERENCE: corresponds to the property value. |
| | |
| linkIds | Implementation-specific. |
+-------------+-----------------------------------------------------+
Table 7: Translation of Location between JSCalendar and iCalendar
6.6. Unknown properties 6.6. Unknown properties
Both JSCalendar and iCalendar calendar objects may contain properties Both JSCalendar and iCalendar calendar objects may contain properties
that are not expressible in the other format. This specification that are not expressible in the other format. This specification
does not mandate how to preserve these properties. Instead, it does not mandate how to preserve these properties. Instead, it
leaves negotiation on how to treat unknown properties to client and leaves negotiation on how to treat unknown properties to client and
server implementations and their protocol used to exchange calendar server implementations and their protocol used to exchange calendar
objects. objects.
skipping to change at page 45, line 5 skipping to change at page 45, line 5
{ {
"...": "", "...": "",
"title": "Yoga", "title": "Yoga",
"start": "2018-01-01T07:00:00", "start": "2018-01-01T07:00:00",
"duration": "PT30M", "duration": "PT30M",
"recurrenceRule": { "recurrenceRule": {
"frequency": "daily" "frequency": "daily"
} }
} }
7.8. Event with multiple locations and localization 7.8. Event with multiple locations
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. (Note: the online.
localization of the event description contains an UTF-8 encoded
German Umlaut. This character may have been replaced with ASCII
characters in the plain-text rendering of this RFC document)
{ {
"...": "", "...": "",
"title": "Live from Music Bowl: The Band", "title": "Live from Music Bowl: The Band",
"description": "Go see the biggest music event ever!", "description": "Go see the biggest music event ever!",
"locale": "en", "locale": "en",
"start": "2018-07-04T17:00:00", "start": "2018-07-04T17:00:00",
"timeZone": "America/New_York", "timeZone": "America/New_York",
"duration": "PT3H", "duration": "PT3H",
"locations": { "locations": {
skipping to change at page 45, line 38 skipping to change at page 45, line 35
"6f3696c6-1e07-47d0-9ce1-f50014b0041a": { "6f3696c6-1e07-47d0-9ce1-f50014b0041a": {
"name": "Free live Stream from Music Bowl", "name": "Free live Stream from Music Bowl",
"rel": "virtual", "rel": "virtual",
"features": [ "features": [
"video", "video",
"audio", "audio",
"chat" "chat"
], ],
"uri": "https://stream.example.com/the_band_2018" "uri": "https://stream.example.com/the_band_2018"
} }
},
"localizations": {
"de": {
"title": "Live von der Music Bowl: The Band!",
"description": "Schau dir das groesste Musikereignis an!",
"locations/6f3696c6-1e07-47d0-9ce1-f50014b0041a/name":
"Gratis Live-Stream aus der Music Bowl"
}
} }
} }
7.9. Recurring event with overrides 7.9. Recurring event with overrides
This example illustrates the use of recurrence overrides. A math This example illustrates the use of recurrence overrides. A math
course at a University is held for the first time on January 8, 2018 course at a University is held for the first time on January 8, 2018
at 9am London time and occurs every week until June 25, 2018. Each at 9am London time and occurs every week until June 25, 2018. Each
lecture lasts for one hour and 30 minutes and is located at the lecture lasts for one hour and 30 minutes and is located at the
Mathematics department. This event has exceptional occurrences: at Mathematics department. This event has exceptional occurrences: at
skipping to change at page 49, line 34 skipping to change at page 49, line 19
[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>.
[RFC4648] Josefsson, S., "The Base16, Base32, and Base64 Data
Encodings", RFC 4648, DOI 10.17487/RFC4648, October 2006,
<https://www.rfc-editor.org/info/rfc4648>.
[RFC4791] Daboo, C., Desruisseaux, B., and L. Dusseault, [RFC4791] Daboo, C., Desruisseaux, B., and L. Dusseault,
"Calendaring Extensions to WebDAV (CalDAV)", RFC 4791, "Calendaring Extensions to WebDAV (CalDAV)", RFC 4791,
DOI 10.17487/RFC4791, March 2007, DOI 10.17487/RFC4791, March 2007,
<https://www.rfc-editor.org/info/rfc4791>. <https://www.rfc-editor.org/info/rfc4791>.
[RFC5545] Desruisseaux, B., Ed., "Internet Calendaring and [RFC5545] Desruisseaux, B., Ed., "Internet Calendaring and
Scheduling Core Object Specification (iCalendar)", Scheduling Core Object Specification (iCalendar)",
RFC 5545, DOI 10.17487/RFC5545, September 2009, RFC 5545, DOI 10.17487/RFC5545, September 2009,
<https://www.rfc-editor.org/info/rfc5545>. <https://www.rfc-editor.org/info/rfc5545>.
skipping to change at page 51, line 20 skipping to change at page 51, line 10
[draft-apthorp-ical-tasks] [draft-apthorp-ical-tasks]
"Task Extensions to iCalendar", "Task Extensions to iCalendar",
<https://tools.ietf.org/html/draft-apthorp-ical-tasks>. <https://tools.ietf.org/html/draft-apthorp-ical-tasks>.
[draft-daboo-valarm-extensions] [draft-daboo-valarm-extensions]
"VALARM Extensions for iCalendar", "VALARM Extensions for iCalendar",
<https://tools.ietf.org/html/ <https://tools.ietf.org/html/
draft-daboo-valarm-extensions>. draft-daboo-valarm-extensions>.
[draft-ietf-calext-eventpub-extensions]
"Event Publishing Extensions to iCalendar",
<https://tools.ietf.org/html/
draft-ietf-calext-eventpub-extensions>.
[draft-ietf-calext-ical-relations] [draft-ietf-calext-ical-relations]
"Support for iCalendar Relationships", "Support for iCalendar Relationships",
<https://tools.ietf.org/html/ <https://tools.ietf.org/html/
draft-ietf-calext-ical-relations>. draft-ietf-calext-ical-relations>.
11.3. URIs 11.3. URIs
[1] https://www.w3.org/TR/html/ [1] https://www.w3.org/TR/html/
[2] https://www.iana.org/assignments/link-relations/link- [2] https://www.iana.org/assignments/link-relations/link-
 End of changes. 52 change blocks. 
215 lines changed or deleted 236 lines changed or added

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