rfc8984.original | rfc8984.txt | |||
---|---|---|---|---|
Calendaring extensions N. Jenkins | Internet Engineering Task Force (IETF) N. Jenkins | |||
Internet-Draft R. Stepanek | Request for Comments: 8984 R. Stepanek | |||
Intended status: Standards Track Fastmail | Category: Standards Track Fastmail | |||
Expires: April 19, 2021 October 16, 2020 | ISSN: 2070-1721 July 2021 | |||
JSCalendar: A JSON representation of calendar data | JSCalendar: A JSON Representation of Calendar Data | |||
draft-ietf-calext-jscalendar-32 | ||||
Abstract | Abstract | |||
This specification defines a data model and JSON representation of | This specification defines a data model and JSON representation of | |||
calendar data that can be used for storage and data exchange in a | calendar data that can be used for storage and data exchange in a | |||
calendaring and scheduling environment. It aims to be an alternative | calendaring and scheduling environment. It aims to be an alternative | |||
and, over time, successor to the widely deployed iCalendar data | and, over time, successor to the widely deployed iCalendar data | |||
format, and to be unambiguous, extendable, and simple to process. In | format. It also aims to be unambiguous, extendable, and simple to | |||
contrast to the jCal format, which is also JSON-based, JSCalendar is | process. In contrast to the jCal format, which is also based on | |||
not a direct mapping from iCalendar, but defines the data model | JSON, JSCalendar is not a direct mapping from iCalendar but defines | |||
independently and expands semantics where appropriate. | the data model independently and expands semantics where appropriate. | |||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This is an Internet Standards Track document. | |||
provisions of BCP 78 and BCP 79. | ||||
Internet-Drafts are working documents of the Internet Engineering | ||||
Task Force (IETF). Note that other groups may also distribute | ||||
working documents as Internet-Drafts. The list of current Internet- | ||||
Drafts is at https://datatracker.ietf.org/drafts/current/. | ||||
Internet-Drafts are draft documents valid for a maximum of six months | This document is a product of the Internet Engineering Task Force | |||
and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Further information on | |||
Internet Standards is available in Section 2 of RFC 7841. | ||||
This Internet-Draft will expire on April 19, 2021. | Information about the current status of this document, any errata, | |||
and how to provide feedback on it may be obtained at | ||||
https://www.rfc-editor.org/info/rfc8984. | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2020 IETF Trust and the persons identified as the | Copyright (c) 2021 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 | |||
1.1. Motivation and Relation to iCalendar and jCal . . . . . . 5 | 1.1. Motivation and Relation to iCalendar and jCal | |||
1.2. Notational Conventions . . . . . . . . . . . . . . . . . 6 | 1.2. Notational Conventions | |||
1.3. Type Signatures . . . . . . . . . . . . . . . . . . . . . 6 | 1.3. Type Signatures | |||
1.4. Data Types . . . . . . . . . . . . . . . . . . . . . . . 7 | 1.4. Data Types | |||
1.4.1. Id . . . . . . . . . . . . . . . . . . . . . . . . . 7 | 1.4.1. Id | |||
1.4.2. Int . . . . . . . . . . . . . . . . . . . . . . . . . 7 | 1.4.2. Int | |||
1.4.3. UnsignedInt . . . . . . . . . . . . . . . . . . . . . 8 | 1.4.3. UnsignedInt | |||
1.4.4. UTCDateTime . . . . . . . . . . . . . . . . . . . . . 8 | 1.4.4. UTCDateTime | |||
1.4.5. LocalDateTime . . . . . . . . . . . . . . . . . . . . 8 | 1.4.5. LocalDateTime | |||
1.4.6. Duration . . . . . . . . . . . . . . . . . . . . . . 9 | 1.4.6. Duration | |||
1.4.7. SignedDuration . . . . . . . . . . . . . . . . . . . 10 | 1.4.7. SignedDuration | |||
1.4.8. TimeZoneId . . . . . . . . . . . . . . . . . . . . . 10 | 1.4.8. TimeZoneId | |||
1.4.9. PatchObject . . . . . . . . . . . . . . . . . . . . . 11 | 1.4.9. PatchObject | |||
1.4.10. Relation . . . . . . . . . . . . . . . . . . . . . . 12 | 1.4.10. Relation | |||
1.4.11. Link . . . . . . . . . . . . . . . . . . . . . . . . 12 | 1.4.11. Link | |||
2. JSCalendar Objects . . . . . . . . . . . . . . . . . . . . . 14 | 2. JSCalendar Objects | |||
2.1. JSEvent . . . . . . . . . . . . . . . . . . . . . . . . . 14 | 2.1. Event | |||
2.2. JSTask . . . . . . . . . . . . . . . . . . . . . . . . . 14 | 2.2. Task | |||
2.3. JSGroup . . . . . . . . . . . . . . . . . . . . . . . . . 14 | 2.3. Group | |||
3. Structure of JSCalendar Objects . . . . . . . . . . . . . . . 15 | 3. Structure of JSCalendar Objects | |||
3.1. Object Type . . . . . . . . . . . . . . . . . . . . . . . 15 | 3.1. Object Type | |||
3.2. Normalization and Equivalence . . . . . . . . . . . . . . 15 | 3.2. Normalization and Equivalence | |||
3.3. Vendor-specific Property Extensions, Values and Types . . 15 | 3.3. Vendor-Specific Property Extensions, Values, and Types | |||
4. Common JSCalendar Properties . . . . . . . . . . . . . . . . 16 | 4. Common JSCalendar Properties | |||
4.1. Metadata Properties . . . . . . . . . . . . . . . . . . . 16 | 4.1. Metadata Properties | |||
4.1.1. @type . . . . . . . . . . . . . . . . . . . . . . . . 16 | 4.1.1. @type | |||
4.1.2. uid . . . . . . . . . . . . . . . . . . . . . . . . . 16 | 4.1.2. uid | |||
4.1.3. relatedTo . . . . . . . . . . . . . . . . . . . . . . 17 | 4.1.3. relatedTo | |||
4.1.4. prodId . . . . . . . . . . . . . . . . . . . . . . . 17 | 4.1.4. prodId | |||
4.1.5. created . . . . . . . . . . . . . . . . . . . . . . . 17 | 4.1.5. created | |||
4.1.6. updated . . . . . . . . . . . . . . . . . . . . . . . 18 | 4.1.6. updated | |||
4.1.7. sequence . . . . . . . . . . . . . . . . . . . . . . 18 | 4.1.7. sequence | |||
4.1.8. method . . . . . . . . . . . . . . . . . . . . . . . 18 | 4.1.8. method | |||
4.2. What and Where Properties . . . . . . . . . . . . . . . . 18 | 4.2. What and Where Properties | |||
4.2.1. title . . . . . . . . . . . . . . . . . . . . . . . . 18 | 4.2.1. title | |||
4.2.2. description . . . . . . . . . . . . . . . . . . . . . 18 | 4.2.2. description | |||
4.2.3. descriptionContentType . . . . . . . . . . . . . . . 18 | 4.2.3. descriptionContentType | |||
4.2.4. showWithoutTime . . . . . . . . . . . . . . . . . . . 19 | 4.2.4. showWithoutTime | |||
4.2.5. locations . . . . . . . . . . . . . . . . . . . . . . 19 | 4.2.5. locations | |||
4.2.6. virtualLocations . . . . . . . . . . . . . . . . . . 20 | 4.2.6. virtualLocations | |||
4.2.7. links . . . . . . . . . . . . . . . . . . . . . . . . 21 | 4.2.7. links | |||
4.2.8. locale . . . . . . . . . . . . . . . . . . . . . . . 21 | 4.2.8. locale | |||
4.2.9. keywords . . . . . . . . . . . . . . . . . . . . . . 22 | 4.2.9. keywords | |||
4.2.10. categories . . . . . . . . . . . . . . . . . . . . . 22 | 4.2.10. categories | |||
4.2.11. color . . . . . . . . . . . . . . . . . . . . . . . . 22 | 4.2.11. color | |||
4.3. Recurrence Properties . . . . . . . . . . . . . . . . . . 22 | 4.3. Recurrence Properties | |||
4.3.1. recurrenceId . . . . . . . . . . . . . . . . . . . . 23 | 4.3.1. recurrenceId | |||
4.3.2. recurrenceRules . . . . . . . . . . . . . . . . . . . 23 | 4.3.2. recurrenceIdTimeZone | |||
4.3.3. excludedRecurrenceRules . . . . . . . . . . . . . . . 31 | 4.3.3. recurrenceRules | |||
4.3.4. recurrenceOverrides . . . . . . . . . . . . . . . . . 32 | 4.3.4. excludedRecurrenceRules | |||
4.3.5. excluded . . . . . . . . . . . . . . . . . . . . . . 33 | 4.3.5. recurrenceOverrides | |||
4.4. Sharing and Scheduling Properties . . . . . . . . . . . . 33 | 4.3.6. excluded | |||
4.4.1. priority . . . . . . . . . . . . . . . . . . . . . . 33 | 4.4. Sharing and Scheduling Properties | |||
4.4.2. freeBusyStatus . . . . . . . . . . . . . . . . . . . 33 | 4.4.1. priority | |||
4.4.3. privacy . . . . . . . . . . . . . . . . . . . . . . . 34 | 4.4.2. freeBusyStatus | |||
4.4.4. replyTo . . . . . . . . . . . . . . . . . . . . . . . 35 | 4.4.3. privacy | |||
4.4.5. participants . . . . . . . . . . . . . . . . . . . . 35 | 4.4.4. replyTo | |||
4.5. Alerts Properties . . . . . . . . . . . . . . . . . . . . 41 | 4.4.5. sentBy | |||
4.5.1. useDefaultAlerts . . . . . . . . . . . . . . . . . . 41 | 4.4.6. participants | |||
4.5.2. alerts . . . . . . . . . . . . . . . . . . . . . . . 41 | 4.4.7. requestStatus | |||
4.6. Multilingual Properties . . . . . . . . . . . . . . . . . 43 | 4.5. Alerts Properties | |||
4.6.1. localizations . . . . . . . . . . . . . . . . . . . . 43 | 4.5.1. useDefaultAlerts | |||
4.7. Time Zone Properties . . . . . . . . . . . . . . . . . . 44 | 4.5.2. alerts | |||
4.7.1. timeZone . . . . . . . . . . . . . . . . . . . . . . 44 | 4.6. Multilingual Properties | |||
4.7.2. timeZones . . . . . . . . . . . . . . . . . . . . . . 44 | 4.6.1. localizations | |||
5. Type-specific JSCalendar Properties . . . . . . . . . . . . . 47 | 4.7. Time Zone Properties | |||
5.1. JSEvent Properties . . . . . . . . . . . . . . . . . . . 47 | 4.7.1. timeZone | |||
5.1.1. start . . . . . . . . . . . . . . . . . . . . . . . . 47 | 4.7.2. timeZones | |||
5.1.2. duration . . . . . . . . . . . . . . . . . . . . . . 47 | 5. Type-Specific JSCalendar Properties | |||
5.1.3. status . . . . . . . . . . . . . . . . . . . . . . . 47 | 5.1. Event Properties | |||
5.2. JSTask Properties . . . . . . . . . . . . . . . . . . . . 48 | 5.1.1. start | |||
5.2.1. due . . . . . . . . . . . . . . . . . . . . . . . . . 48 | 5.1.2. duration | |||
5.2.2. start . . . . . . . . . . . . . . . . . . . . . . . . 48 | 5.1.3. status | |||
5.2.3. estimatedDuration . . . . . . . . . . . . . . . . . . 48 | 5.2. Task Properties | |||
5.2.4. percentComplete . . . . . . . . . . . . . . . . . . . 48 | 5.2.1. due | |||
5.2.5. progress . . . . . . . . . . . . . . . . . . . . . . 48 | 5.2.2. start | |||
5.2.6. progressUpdated . . . . . . . . . . . . . . . . . . . 49 | 5.2.3. estimatedDuration | |||
5.3. JSGroup Properties . . . . . . . . . . . . . . . . . . . 49 | 5.2.4. percentComplete | |||
5.3.1. entries . . . . . . . . . . . . . . . . . . . . . . . 50 | 5.2.5. progress | |||
5.3.2. source . . . . . . . . . . . . . . . . . . . . . . . 50 | 5.2.6. progressUpdated | |||
6. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . 50 | 5.3. Group Properties | |||
6.1. Simple event . . . . . . . . . . . . . . . . . . . . . . 51 | 5.3.1. entries | |||
6.2. Simple task . . . . . . . . . . . . . . . . . . . . . . . 51 | 5.3.2. source | |||
6.3. Simple group . . . . . . . . . . . . . . . . . . . . . . 51 | 6. Examples | |||
6.4. All-day event . . . . . . . . . . . . . . . . . . . . . . 52 | 6.1. Simple Event | |||
6.5. Task with a due date . . . . . . . . . . . . . . . . . . 52 | 6.2. Simple Task | |||
6.6. Event with end time zone . . . . . . . . . . . . . . . . 53 | 6.3. Simple Group | |||
6.7. Floating-time event (with recurrence) . . . . . . . . . . 53 | 6.4. All-Day Event | |||
6.8. Event with multiple locations and localization . . . . . 54 | 6.5. Task with a Due Date | |||
6.9. Recurring event with overrides . . . . . . . . . . . . . 55 | 6.6. Event with End Time Zone | |||
6.10. Recurring event with participants . . . . . . . . . . . . 56 | 6.7. Floating-Time Event (with Recurrence) | |||
7. Security Considerations . . . . . . . . . . . . . . . . . . . 58 | 6.8. Event with Multiple Locations and Localization | |||
7.1. Expanding Recurrences . . . . . . . . . . . . . . . . . . 58 | 6.9. Recurring Event with Overrides | |||
7.2. JSON Parsing . . . . . . . . . . . . . . . . . . . . . . 59 | 6.10. Recurring Event with Participants | |||
7.3. URI Values . . . . . . . . . . . . . . . . . . . . . . . 59 | 7. Security Considerations | |||
7.4. Spam . . . . . . . . . . . . . . . . . . . . . . . . . . 60 | 7.1. Expanding Recurrences | |||
7.5. Duplication . . . . . . . . . . . . . . . . . . . . . . . 60 | 7.2. JSON Parsing | |||
7.6. Time Zones . . . . . . . . . . . . . . . . . . . . . . . 60 | 7.3. URI Values | |||
8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 61 | 7.4. Spam | |||
8.1. Media Type Registration . . . . . . . . . . . . . . . . . 61 | 7.5. Duplication | |||
8.2. Creation of "JSCalendar Properties" Registry . . . . . . 62 | 7.6. Time Zones | |||
8.2.1. Preliminary Community Review . . . . . . . . . . . . 63 | 8. IANA Considerations | |||
8.2.2. Submit Request to IANA . . . . . . . . . . . . . . . 63 | 8.1. Media Type Registration | |||
8.2.3. Designated Expert Review . . . . . . . . . . . . . . 63 | 8.2. Creation of the "JSCalendar Properties" Registry | |||
8.2.4. Change Procedures . . . . . . . . . . . . . . . . . . 63 | 8.2.1. Preliminary Community Review | |||
8.2.5. JSCalendar Properties Registry Template . . . . . . . 64 | 8.2.2. Submit Request to IANA | |||
8.2.6. Initial Contents for the JSCalendar Properties | 8.2.3. Designated Expert Review | |||
Registry . . . . . . . . . . . . . . . . . . . . . . 64 | 8.2.4. Change Procedures | |||
8.3. Creation of "JSCalendar Types" Registry . . . . . . . . . 73 | 8.2.5. "JSCalendar Properties" Registry Template | |||
8.3.1. JSCalendar Types Registry Template . . . . . . . . . 73 | 8.2.6. Initial Contents for the "JSCalendar Properties" | |||
8.3.2. Initial Contents for the JSCalendar Types Registry . 73 | Registry | |||
8.4. Creation of "JSCalendar Enum Values" Registry . . . . . . 74 | 8.3. Creation of the "JSCalendar Types" Registry | |||
8.4.1. JSCalendar Enum Property Template . . . . . . . . . . 74 | 8.3.1. "JSCalendar Types" Registry Template | |||
8.4.2. JSCalendar Enum Value Template . . . . . . . . . . . 75 | 8.3.2. Initial Contents for the "JSCalendar Types" Registry | |||
8.4.3. Initial Contents for the JSCalendar Enum Values | 8.4. Creation of the "JSCalendar Enum Values" Registry | |||
registry . . . . . . . . . . . . . . . . . . . . . . 75 | 8.4.1. "JSCalendar Enum Values" Registry Property Template | |||
9. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 81 | 8.4.2. "JSCalendar Enum Values" Registry Value Template | |||
10. References . . . . . . . . . . . . . . . . . . . . . . . . . 81 | 8.4.3. Initial Contents for the "JSCalendar Enum Values" | |||
10.1. Normative References . . . . . . . . . . . . . . . . . . 82 | Registry | |||
10.2. Informative References . . . . . . . . . . . . . . . . . 84 | 9. References | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 85 | 9.1. Normative References | |||
9.2. Informative References | ||||
Acknowledgments | ||||
Authors' Addresses | ||||
1. Introduction | 1. Introduction | |||
This document defines a data model for calendar event and task | This document defines a data model for calendar event and task | |||
objects, or groups of such objects, in electronic calendar | objects, or groups of such objects, in electronic calendar | |||
applications and systems. The format aims to be unambiguous, | applications and systems. The format aims to be unambiguous, | |||
extendable and simple to process. | extendable, and simple to process. | |||
The key design considerations for this data model are as follows: | The key design considerations for this data model are as follows: | |||
o The attributes of the calendar entry represented must be described | * The attributes of the calendar entry represented must be described | |||
as simple key-value pairs. Simple events are simple to represent; | as simple key-value pairs. Simple events are simple to represent; | |||
complex events can be modelled accurately. | complex events can be modeled accurately. | |||
o Wherever possible, there should be only one way to express the | * Wherever possible, there should be only one way to express the | |||
desired semantics, reducing complexity. | desired semantics, reducing complexity. | |||
o The data model should avoid ambiguities, which often lead to | * The data model should avoid ambiguities, which often lead to | |||
interoperability issues between implementations. | interoperability issues between implementations. | |||
o The data model should be generally compatible with the iCalendar | * The data model should be generally compatible with the iCalendar | |||
data format [RFC5545] [RFC7986] and extensions, but the | data format [RFC5545] [RFC7986] and extensions, but the | |||
specification should add new attributes where the iCalendar format | specification should add new attributes where the iCalendar format | |||
currently lacks expressivity, and drop seldom-used, obsolete, or | currently lacks expressivity, and drop seldom-used, obsolete, or | |||
redundant properties. This means translation with no loss of | redundant properties. This means translation with no loss of | |||
semantics should be easy with most common iCalendar files. | semantics should be easy with most common iCalendar files. | |||
o Extensions, such as new properties and components, should not | * Extensions, such as new properties and components, should not | |||
require updates to this document. | require updates to this document. | |||
The representation of this data model is defined in the I-JSON format | The representation of this data model is defined in the Internet JSON | |||
[RFC7493], which is a strict subset of the JavaScript Object Notation | (I-JSON) format [RFC7493], which is a strict subset of the JSON data | |||
(JSON) Data Interchange Format [RFC8259]. Using JSON is mostly a | interchange format [RFC8259]. Using JSON is mostly a pragmatic | |||
pragmatic choice: its widespread use makes JSCalendar easier to | choice: its widespread use makes JSCalendar easier to adopt and the | |||
adopt, and the ready availability of production-ready JSON | ready availability of production-ready JSON implementations | |||
implementations eliminates a whole category of parser-related | eliminates a whole category of parser-related interoperability | |||
interoperability issues, which iCalendar has often suffered from. | issues, which iCalendar has often suffered from. | |||
1.1. Motivation and Relation to iCalendar and jCal | 1.1. Motivation and Relation to iCalendar and jCal | |||
The iCalendar data format [RFC5545], a widely deployed interchange | The iCalendar data format [RFC5545], a widely deployed interchange | |||
format for calendaring and scheduling data, has served calendaring | format for calendaring and scheduling data, has served calendaring | |||
vendors for a long while, but contains some ambiguities and pitfalls | vendors for a long time but contains some ambiguities and pitfalls | |||
that can not be overcome without backward-incompatible changes. | that cannot be overcome without backward-incompatible changes. | |||
Sources of implementation errors include the following: | Sources of implementation errors include the following: | |||
o iCalendar defines various formats for local times, UTC time, and | * iCalendar defines various formats for local times, UTC, and dates. | |||
dates. | ||||
o iCalendar requires custom time zone definitions within a single | * iCalendar requires custom time zone definitions within a single | |||
calendar component. | calendar component. | |||
o iCalendar's definition of recurrence rules is ambiguous and has | * iCalendar's definition of recurrence rules is ambiguous and has | |||
resulted in differing understandings even between experienced | resulted in differing interpretations, even between experienced | |||
calendar developers. | calendar developers. | |||
o The iCalendar format itself causes interoperability issues due to | * The iCalendar format itself causes interoperability issues due to | |||
misuse of CRLF-terminated strings, line continuations, and subtle | misuse of CRLF-terminated strings, line continuations, and subtle | |||
differences among iCalendar parsers. | differences among iCalendar parsers. | |||
In recent years, many new products and services have appeared that | In recent years, many new products and services have appeared that | |||
wish to use a JSON representation of calendar data within their APIs. | wish to use a JSON representation of calendar data within their APIs. | |||
The JSON format for iCalendar data, jCal [RFC7265], is a direct | The JSON format for iCalendar data, jCal [RFC7265], is a direct | |||
mapping between iCalendar and JSON. In its effort to represent full | mapping between iCalendar and JSON. In its effort to represent full | |||
iCalendar semantics, it inherits all the same pitfalls and uses a | iCalendar semantics, it inherits all the same pitfalls and uses a | |||
complicated JSON structure. | complicated JSON structure. | |||
As a consequence, since the standardization of jCal, the majority of | As a consequence, since the standardization of jCal, the majority of | |||
implementations and service providers either kept using iCalendar, or | implementations and service providers either kept using iCalendar or | |||
came up with their own proprietary JSON representations, which are | came up with their own proprietary JSON representations, which are | |||
incompatible with each other and often suffer from common pitfalls, | incompatible with each other and often suffer from common pitfalls, | |||
such as storing event start times in UTC (which become incorrect if | such as storing event start times in UTC (which become incorrect if | |||
the timezone's rules change in the future). JSCalendar meets the | the time zone's rules change in the future). JSCalendar meets the | |||
demand for JSON-formatted calendar data that is free of such known | demand for JSON-formatted calendar data that is free of such known | |||
problems and provides a standard representation as an alternative to | problems and provides a standard representation as an alternative to | |||
the proprietary formats. | the proprietary formats. | |||
1.2. Notational Conventions | 1.2. 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", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
"OPTIONAL" in this document are to be interpreted as described in BCP | "OPTIONAL" in this document are to be interpreted as described in | |||
14 [RFC2119] [RFC8174] when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
capitals, as shown here. | capitals, as shown here. | |||
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]. | |||
Some examples in this document contain "partial" JSON documents used | Some examples in this document contain "partial" JSON documents used | |||
for illustrative purposes. In these examples, three periods "..." | for illustrative purposes. In these examples, an ellipsis "..." is | |||
are used to indicate a portion of the document that has been removed | used to indicate a portion of the document that has been removed for | |||
for compactness. | compactness. | |||
1.3. Type Signatures | 1.3. Type Signatures | |||
Type signatures are given for all JSON values in this document. The | Type signatures are given for all JSON values in this document. The | |||
following conventions are used: | following conventions are used: | |||
o "*" - The type is undefined (the value could be any type, although | "*": The type is undefined (the value could be any type, although | |||
permitted values may be constrained by the context of this value). | permitted values may be constrained by the context of this value). | |||
o "String" - The JSON string type. | "String": This is the JSON string type. | |||
o "Number" - The JSON number type. | "Number": This is the JSON number type. | |||
o "Boolean" - The JSON boolean type. | "Boolean": This is the JSON boolean type. | |||
o "A[B]" - A JSON object where the keys are all of type "A", and the | "A[B]": The keys are all of type "A" and the values are all of type | |||
values are all of type "B". | "B" for a JSON object. | |||
o "A[]" - An array of values of type "A". | "A[]": There is an array of values of type "A" | |||
o "A|B" - The value is either of type "A" or of type "B". | "A|B": The value is either of type "A" or of type "B". | |||
Other types may also be given, with their representations defined | Other types may also be given; their representations are defined | |||
elsewhere in this document. | elsewhere in this document. | |||
1.4. Data Types | 1.4. Data Types | |||
In addition to the standard JSON data types, the following data types | In addition to the standard JSON data types, the following data types | |||
are used in this specification: | are used in this specification: | |||
1.4.1. Id | 1.4.1. Id | |||
Where "Id" is given as a data type, it means a "String" of at least 1 | Where "Id" is given as a data type, it means a "String" of at least 1 | |||
and a maximum of 255 octets in size, and it MUST only contain | and a maximum of 255 octets in size, and it MUST only contain | |||
characters from the "URL and Filename Safe" base64url alphabet, as | characters from the "URL and Filename Safe" base64url alphabet, as | |||
defined in Section 5 of [RFC4648], excluding the pad character ("="). | defined in Section 5 of [RFC4648], excluding the pad character ("="). | |||
This means the allowed characters are the ASCII alphanumeric | This means the allowed characters are the ASCII alphanumeric | |||
characters ("A-Za-z0-9"), hyphen ("-"), and underscore ("_"). | characters ("A-Za-z0-9"), hyphen ("-"), and underscore ("_"). | |||
In many places in JSCalendar a JSON map is used where the map keys | In many places in JSCalendar, a JSON map is used where the map keys | |||
are of type Id and the map values are all the same type of object. | are of type Id and the map values are all the same type of object. | |||
This construction represents an unordered set of objects, with the | This construction represents an unordered set of objects, with the | |||
added advantage that each entry has a name (the corresponding map | added advantage that each entry has a name (the corresponding map | |||
key). This allows for more concise patching of objects, and, when | key). This allows for more concise patching of objects, and, when | |||
applicable, for the objects in question to be referenced from other | applicable, for the objects in question to be referenced from other | |||
objects within the JSCalendar object. | objects within the JSCalendar object. | |||
Unless otherwise specified for a particular property, there are no | Unless otherwise specified for a particular property, there are no | |||
uniqueness constraints on an Id value (other than, of course, the | uniqueness constraints on an Id value (other than, of course, the | |||
requirement that you cannot have two values with the same key within | requirement that you cannot have two values with the same key within | |||
a single JSON map). For example, two JSEvent objects might use the | a single JSON map). For example, two Event objects might use the | |||
same Ids in their respective "links" properties. Or within the same | same Ids in their respective "links" properties or, within the same | |||
JSEvent object the same Id could appear in the "participants" and | Event object, the same Id could appear in the "participants" and | |||
"alerts" properties. These situations do not imply any semantic | "alerts" properties. These situations do not imply any semantic | |||
connections among the objects. | connections among the objects. | |||
Nevertheless, a UUID [RFC4122] is typically a good choice. | ||||
1.4.2. Int | 1.4.2. Int | |||
Where "Int" is given as a data type, it means an integer in the range | Where "Int" is given as a data type, it means an integer in the range | |||
-2^53+1 <= value <= 2^53-1, the safe range for integers stored in a | -2^53+1 <= value <= 2^53-1, the safe range for integers stored in a | |||
floating-point double, represented as a JSON "Number". | floating-point double, represented as a JSON "Number". | |||
1.4.3. UnsignedInt | 1.4.3. UnsignedInt | |||
Where "UnsignedInt" is given as a data type, it means an integer in | Where "UnsignedInt" is given as a data type, it means an integer in | |||
the range 0 <= value <= 2^53-1, represented as a JSON "Number". | the range 0 <= value <= 2^53-1, represented as a JSON "Number". | |||
1.4.4. UTCDateTime | 1.4.4. UTCDateTime | |||
This is a string in [RFC3339] "date-time" format, with the further | This is a string in the "date-time" [RFC3339] format, with the | |||
restrictions that any letters MUST be in uppercase, and the time | further restrictions that any letters MUST be in uppercase, and the | |||
offset MUST be the character "Z". Fractional second values MUST NOT | time offset MUST be the character "Z". Fractional second values MUST | |||
be included unless non-zero and MUST NOT have trailing zeros, to | NOT be included unless non-zero and MUST NOT have trailing zeros, to | |||
ensure there is only a single representation for each date-time. | ensure there is only a single representation for each date-time. | |||
For example "2010-10-10T10:10:10.003Z" is conformant, but | For example, "2010-10-10T10:10:10.003Z" is conformant, but | |||
"2010-10-10T10:10:10.000Z" is invalid and is correctly encoded as | "2010-10-10T10:10:10.000Z" is invalid and is correctly encoded as | |||
"2010-10-10T10:10:10Z". | "2010-10-10T10:10:10Z". | |||
1.4.5. LocalDateTime | 1.4.5. LocalDateTime | |||
This is a date-time string with no time zone/offset information. It | This is a date-time string with no time zone/offset information. It | |||
is otherwise in the same format as UTCDateTime, including fractional | is otherwise in the same format as UTCDateTime, including fractional | |||
seconds. For example "2006-01-02T15:04:05" and | seconds. For example, "2006-01-02T15:04:05" and | |||
"2006-01-02T15:04:05.003" are both valid. The time zone to associate | "2006-01-02T15:04:05.003" are both valid. The time zone to associate | |||
with the LocalDateTime comes from the "timeZone" property of the | with the LocalDateTime comes from the "timeZone" property of the | |||
JSCalendar object (see Section 4.7.1). If no time zone is specified, | JSCalendar object (see Section 4.7.1). If no time zone is specified, | |||
the LocalDateTime is "floating". Floating date-times are not tied to | the LocalDateTime is "floating". Floating date-times are not tied to | |||
any specific time zone. Instead, they occur in each time zone at the | any specific time zone. Instead, they occur in each time zone at the | |||
given wall-clock time (as opposed to the same instant point in time). | given wall-clock time (as opposed to the same instant point in time). | |||
A time zone may have a period of discontinuity, for example a change | A time zone may have a period of discontinuity, for example, a change | |||
from standard time to daylight-savings time. When converting local | from standard time to daylight savings time. When converting local | |||
date-times that fall in the discontinuity to UTC, the offset before | date-times that fall in the discontinuity to UTC, the offset before | |||
the transition MUST be used. | the transition MUST be used. | |||
For example, in the America/Los_Angeles time zone, the date-time | For example, in the America/Los_Angeles time zone, the date-time | |||
2020-11-01T01:30:00 occurs twice: before the DST transition with a | 2020-11-01T01:30:00 occurs twice: before the daylight savings time | |||
UTC offset of -07:00, and again after the transition with an offset | (DST) transition with a UTC offset of -07:00 and again after the | |||
of -08:00. When converting to UTC, we therefore use the offset | transition with an offset of -08:00. When converting to UTC, we | |||
before the transition (-07:00) and so it becomes | therefore use the offset before the transition (-07:00), so it | |||
2020-11-01T08:30:00Z. | becomes 2020-11-01T08:30:00Z. | |||
Similarly, in the Australia/Melbourne time zone, the date-time | Similarly, in the Australia/Melbourne time zone, the date-time | |||
2020-10-04T02:30:00 does not exist: the clocks are moved forward one | 2020-10-04T02:30:00 does not exist; the clocks are moved forward one | |||
hour for DST on that day at 02:00. However, such a value may appear | hour for DST on that day at 02:00. However, such a value may appear | |||
during calculations (see duration semantics in Section 1.4.6), or due | during calculations (see duration semantics in Section 1.4.6) or due | |||
to a change in time zone rules (so it was valid when the event was | to a change in time zone rules (so it was valid when the event was | |||
first created). Again, it is interpreted as though the offset before | first created). Again, it is interpreted as though the offset before | |||
the transition is in effect (+10:00), therefore when converted to UTC | the transition is in effect (+10:00); therefore, when converted to | |||
we get 2020-10-03T16:30:00Z. | UTC, we get 2020-10-03T16:30:00Z. | |||
1.4.6. Duration | 1.4.6. Duration | |||
Where Duration is given as a type, it means a length of time | Where Duration is given as a type, it means a length of time | |||
represented by a subset of ISO8601 duration format, as specified by | represented by a subset of the ISO 8601 duration format, as specified | |||
the following ABNF [RFC5234]: | by the following ABNF [RFC5234]: | |||
dur-secfrac = "." 1*DIGIT | dur-secfrac = "." 1*DIGIT | |||
dur-second = 1*DIGIT [dur-secfrac] "S" | dur-second = 1*DIGIT [dur-secfrac] "S" | |||
dur-minute = 1*DIGIT "M" [dur-second] | dur-minute = 1*DIGIT "M" [dur-second] | |||
dur-hour = 1*DIGIT "H" [dur-minute] | dur-hour = 1*DIGIT "H" [dur-minute] | |||
dur-time = "T" (dur-hour / dur-minute / dur-second) | dur-time = "T" (dur-hour / dur-minute / dur-second) | |||
dur-day = 1*DIGIT "D" | dur-day = 1*DIGIT "D" | |||
dur-week = 1*DIGIT "W" | dur-week = 1*DIGIT "W" | |||
dur-cal = (dur-week [dur-day] / dur-day) | dur-cal = (dur-week [dur-day] / dur-day) | |||
duration = "P" (dur-cal [dur-time] / dur-time) | duration = "P" (dur-cal [dur-time] / dur-time) | |||
In addition, the duration MUST NOT include fractional second values | In addition, the duration MUST NOT include fractional second values | |||
unless the fraction is non-zero. Fractional second values MUST NOT | unless the fraction is non-zero. Fractional second values MUST NOT | |||
have trailing zeros, to ensure there is only a single representation | have trailing zeros to ensure there is only a single representation | |||
for each duration. | for each duration. | |||
A duration specifies an abstract number of weeks, days, hours, | A duration specifies an abstract number of weeks, days, hours, | |||
minutes, and/or seconds. A duration specified using weeks or days | minutes, and/or seconds. A duration specified using weeks or days | |||
does not always correspond to an exact multiple of 24 hours. The | does not always correspond to an exact multiple of 24 hours. The | |||
number of hours/minutes/seconds may vary if it overlaps a period of | number of hours/minutes/seconds may vary if it overlaps a period of | |||
discontinuity in the event's time zone, for example a change from | discontinuity in the event's time zone, for example, a change from | |||
standard time to daylight-savings time. Leap seconds MUST NOT be | standard time to daylight savings time. Leap seconds MUST NOT be | |||
considered when adding or subtracting a duration to/from a | considered when adding or subtracting a duration to/from a | |||
LocalDateTime. | LocalDateTime. | |||
To add a duration to a LocalDateTime: | To add a duration to a LocalDateTime: | |||
1. Add any week or day components of the duration to the date. A | 1. Add any week or day components of the duration to the date. A | |||
week is always the same as 7 days. | week is always the same as seven days. | |||
2. If a time zone applies to the LocalDateTime, convert it to a | 2. If a time zone applies to the LocalDateTime, convert it to a | |||
UTCDateTime following the semantics in Section 1.4.5. | UTCDateTime following the semantics in Section 1.4.5. | |||
3. Add any hour, minute or second components of the duration (in | 3. Add any hour, minute, or second components of the duration (in | |||
absolute time). | absolute time). | |||
4. Convert the resulting UTCDateTime back to a LocalDateTime in the | 4. Convert the resulting UTCDateTime back to a LocalDateTime in the | |||
time zone that applies. | time zone that applies. | |||
To subtract a duration from a LocalDateTime, the steps apply in | To subtract a duration from a LocalDateTime, the steps apply in | |||
reverse: | reverse: | |||
1. If a time zone applies to the LocalDateTime, convert it to UTC | 1. If a time zone applies to the LocalDateTime, convert it to UTC | |||
following the semantics in Section 1.4.5. | following the semantics in Section 1.4.5. | |||
2. Subtract any hour, minute or second components of the duration | 2. Subtract any hour, minute, or second components of the duration | |||
(in absolute time). | (in absolute time). | |||
3. Convert the resulting UTCDateTime back to LocalDateTime in the | 3. Convert the resulting UTCDateTime back to LocalDateTime in the | |||
time zone that applies. | time zone that applies. | |||
4. Subtract any week or day components of the duration from the | 4. Subtract any week or day components of the duration from the | |||
date. | date. | |||
5. If the resulting time does not exist on the date due to a | 5. If the resulting time does not exist on the date due to a | |||
discontinuity in the time zone, use the semantics in | discontinuity in the time zone, use the semantics in | |||
skipping to change at page 10, line 36 ¶ | skipping to change at line 458 ¶ | |||
Section 3.3.6). | Section 3.3.6). | |||
1.4.7. SignedDuration | 1.4.7. SignedDuration | |||
A SignedDuration represents a length of time that may be positive or | A SignedDuration represents a length of time that may be positive or | |||
negative and is typically used to express the offset of a point in | negative and is typically used to express the offset of a point in | |||
time relative to an associated time. It is represented as a | time relative to an associated time. It is represented as a | |||
Duration, optionally preceded by a sign character. It is specified | Duration, optionally preceded by a sign character. It is specified | |||
by the following ABNF: | by the following ABNF: | |||
signed-duration = ["+" / "-"] duration | signed-duration = ["+" / "-"] duration | |||
A negative sign indicates a point in time at or before the associated | A negative sign indicates a point in time at or before the associated | |||
time, a positive or no sign a time at or after the associated time. | time; a positive or no sign indicates a time at or after the | |||
associated time. | ||||
1.4.8. TimeZoneId | 1.4.8. TimeZoneId | |||
Where "TimeZoneId" is given as a data type, it means a "String" that | Where "TimeZoneId" is given as a data type, it means a "String" that | |||
is either a time zone name in the IANA Time Zone Database [TZDB] or a | is either a time zone name in the IANA Time Zone Database [TZDB] or a | |||
custom time zone identifier defined in the "timeZones" property (see | custom time zone identifier defined in the "timeZones" property (see | |||
Section 4.7.2). | Section 4.7.2). | |||
Where an IANA time zone is specified, the zone rules of the | Where an IANA time zone is specified, the zone rules of the | |||
respective zone records apply. Custom time zones are interpreted as | respective zone records apply. Custom time zones are interpreted as | |||
described in Section 4.7.2. | described in Section 4.7.2. | |||
1.4.9. PatchObject | 1.4.9. PatchObject | |||
A PatchObject is of type "String[*]", and represents an unordered set | A PatchObject is of type "String[*]" and represents an unordered set | |||
of patches on a JSON object. Each key is a path represented in a | of patches on a JSON object. Each key is a path represented in a | |||
subset of JSON pointer format [RFC6901]. The paths have an implicit | subset of the JSON Pointer format [RFC6901]. The paths have an | |||
leading "/", so each key is prefixed with "/" before applying the | implicit leading "/", so each key is prefixed with "/" before | |||
JSON pointer evaluation algorithm. | applying the JSON Pointer evaluation algorithm. | |||
A patch within a PatchObject is only valid if all of the following | A patch within a PatchObject is only valid if all of the following | |||
conditions apply: | conditions apply: | |||
1. The pointer MUST NOT reference inside an array (i.e., you MUST | 1. The pointer MUST NOT reference inside an array (i.e., you MUST | |||
NOT insert/delete from an array; the array MUST be replaced in | NOT insert/delete from an array; the array MUST be replaced in | |||
its entirety instead). | its entirety instead). | |||
2. All parts prior to the last (i.e., the value after the final | 2. All parts prior to the last (i.e., the value after the final | |||
slash) MUST already exist on the object being patched. | slash) MUST already exist on the object being patched. | |||
3. There MUST NOT be two patches in the PatchObject where the | 3. There MUST NOT be two patches in the PatchObject where the | |||
pointer of one is the prefix of the pointer of the other, e.g., | pointer of one is the prefix of the pointer of the other, e.g., | |||
"alerts/1/offset" and "alerts". | "alerts/1/offset" and "alerts". | |||
4. The value for the patch MUST be valid for the property being set | 4. The value for the patch MUST be valid for the property being set | |||
(of the correct type and obeying any other applicable | (of the correct type and obeying any other applicable | |||
restrictions), or if null the property MUST be optional. | restrictions), or, if null, the property MUST be optional. | |||
The value associated with each pointer determines how to apply that | The value associated with each pointer determines how to apply that | |||
patch: | patch: | |||
o If null, remove the property from the patched object. If the key | * If null, remove the property from the patched object. If the key | |||
is not present in the parent, this a no-op. | is not present in the parent, this a no-op. | |||
o Anything else: The value to set for this property (this may be a | * If non-null, set the value given as the value for this property | |||
replacement or addition to the object being patched). | (this may be a replacement or addition to the object being | |||
patched). | ||||
A PatchObject does not define its own "@type" property (see | A PatchObject does not define its own "@type" property (see | |||
Section 4.1.1). A "@type" property in a patch MUST be handled as any | Section 4.1.1). An "@type" property in a patch MUST be handled as | |||
other patched property value. | any other patched property value. | |||
Implementations MUST reject in its entirety a PatchObject if any of | Implementations MUST reject a PatchObject in its entirety if any of | |||
its patches is invalid. Implementations MUST NOT apply partial | its patches are invalid. Implementations MUST NOT apply partial | |||
patches. | patches. | |||
The PatchObject format is used to significantly reduce file size and | The PatchObject format is used to significantly reduce file size and | |||
duplicated content when specifying variations to a common object, | duplicated content when specifying variations to a common object, | |||
such as with recurring events or when translating the data into | such as with recurring events or when translating the data into | |||
multiple languages. It can also better preserve semantic intent if | multiple languages. It can also better preserve semantic intent if | |||
only the properties that should differ between the two objects are | only the properties that should differ between the two objects are | |||
patched. For example, if one person is not going to a particular | patched. For example, if one person is not going to a particular | |||
instance of a regularly scheduled event, in iCalendar you would have | instance of a regularly scheduled event, in iCalendar, you would have | |||
to duplicate the entire event in the override. In JSCalendar this is | to duplicate the entire event in the override. In JSCalendar, this | |||
a small patch to show the difference. As only this property is | is a small patch to show the difference. As only this property is | |||
patched, if the location of the event is changed, the occurrence will | patched, if the location of the event is changed, the occurrence will | |||
automatically still inherit this. | automatically still inherit this. | |||
1.4.10. Relation | 1.4.10. Relation | |||
A Relation object defines the relation to other objects, using a | A Relation object defines the relation to other objects, using a | |||
possibly empty set of relation types. The object that defines this | possibly empty set of relation types. The object that defines this | |||
relation is the linking object, while the other object is the linked | relation is the linking object, while the other object is the linked | |||
object. A Relation object has the following properties: | object. A Relation object has the following properties: | |||
o @type: "String" (mandatory) | @type: "String" (mandatory) | |||
This specifies the type of this object. This MUST be "Relation". | ||||
Specifies the type of this object. This MUST be "Relation". | ||||
o relation: "String[Boolean]" (optional, default: empty Object) | ||||
Describes how the linked object is related to the linking object. | relation: "String[Boolean]" (optional, default: empty Object) | |||
The relation is defined as a set of relation types. If empty, the | This describes how the linked object is related to the linking | |||
relationship between the two objects is unspecified. | object. The relation is defined as a set of relation types. If | |||
empty, the relationship between the two objects is unspecified. | ||||
Keys in the set MUST be one of the following values, or specified | Keys in the set MUST be one of the following values, specified in | |||
in the property definition where the Relation object is used, or a | the property definition where the Relation object is used, a value | |||
value registered in the IANA JSCalendar Enum Values registry, or a | registered in the IANA "JSCalendar Enum Values" registry, or a | |||
vendor-specific value (see Section 3.3): | vendor-specific value (see Section 3.3): | |||
* "first": The linked object is the first in a series the linking | "first": The linked object is the first in a series the linking | |||
object is part of. | object is part of. | |||
* "next": The linked object is the next in a series the linking | "next": The linked object is next in a series the linking object | |||
object is part of. | is part of. | |||
* "child": The linked object is a subpart of the linking object. | "child": The linked object is a subpart of the linking object. | |||
* "parent": The linking object is a subpart of the linked object. | "parent": The linking object is a subpart of the linked object. | |||
The value for each key in the map MUST be true. | The value for each key in the map MUST be true. | |||
1.4.11. Link | 1.4.11. Link | |||
A Link object represents an external resource associated with the | A Link object represents an external resource associated with the | |||
linking object. It has the following properties: | linking object. It has the following properties: | |||
o @type: "String" (mandatory) | @type: "String" (mandatory) | |||
Specifies the type of this object. This MUST be "Link". | This specifies the type of this object. This MUST be "Link". | |||
o href: "String" (mandatory) | ||||
A URI [RFC3986] from which the resource may be fetched. | href: "String" (mandatory) | |||
This is a URI [RFC3986] from which the resource may be fetched. | ||||
This MAY be a "data:" URL [RFC2397], but it is recommended that | This MAY be a "data:" URL [RFC2397], but it is recommended that | |||
the file be hosted on a server to avoid embedding arbitrarily | the file be hosted on a server to avoid embedding arbitrarily | |||
large data in JSCalendar object instances. | large data in JSCalendar object instances. | |||
o cid: "String" (optional) | cid: "String" (optional) | |||
This MUST be a valid "content-id" value according to the | This MUST be a valid "content-id" value according to the | |||
definition of Section 2 in [RFC2392]. The value MUST be unique | definition of Section 2 of [RFC2392]. The value MUST be unique | |||
within this Link object but has no meaning beyond that. It MAY be | within this Link object but has no meaning beyond that. It MAY be | |||
different from the link id for this Link object. | different from the link id for this Link object. | |||
o contentType: "String" (optional) | contentType: "String" (optional) | |||
This is the media type [RFC6838] of the resource, if known. | ||||
The media type [RFC6838] of the resource, if known. | ||||
o size: "UnsignedInt" (optional) | ||||
The size, in octets, of the resource when fully decoded (i.e., the | ||||
number of octets in the file the user would download), if known. | ||||
Note that this is an informational estimate, and implementations | ||||
must be prepared to handle the actual size being quite different | ||||
when the resource is fetched. | ||||
o rel: "String" (optional) | ||||
Identifies the relation of the linked resource to the object. If | size: "UnsignedInt" (optional) | |||
set, the value MUST be a relation type from the IANA registry | This is the size, in octets, of the resource when fully decoded | |||
[LINKRELS], as established in [RFC8288]. | (i.e., the number of octets in the file the user would download), | |||
if known. Note that this is an informational estimate, and | ||||
implementations must be prepared to handle the actual size being | ||||
quite different when the resource is fetched. | ||||
o display: "String" (optional) | rel: "String" (optional) | |||
This identifies the relation of the linked resource to the object. | ||||
If set, the value MUST be a relation type from the IANA "Link | ||||
Relations" registry [LINKRELS], as established in [RFC8288]. | ||||
Describes the intended purpose of a link to an image. If set, the | display: "String" (optional) | |||
"rel" property MUST be set to "icon". The value MUST be one of | This describes the intended purpose of a link to an image. If | |||
the following values, another value registered in the IANA | set, the "rel" property MUST be set to "icon". The value MUST be | |||
JSCalendar Enum Values registry, or a vendor-specific value (see | one of the following values, another value registered in the IANA | |||
"JSCalendar Enum Values" registry, or a vendor-specific value (see | ||||
Section 3.3): | Section 3.3): | |||
* "badge": an image meant to be displayed alongside the title of | "badge": an image meant to be displayed alongside the title of | |||
the object. | the object | |||
* "graphic": a full image replacement for the object itself. | ||||
* "fullsize": an image that is used to enhance the object. | "graphic": a full image replacement for the object itself | |||
* "thumbnail": a smaller variant of "fullsize" to be used when | "fullsize": an image that is used to enhance the object | |||
space for the image is constrained. | ||||
o title: "String" (optional) | "thumbnail": a smaller variant of "fullsize" to be used when | |||
space for the image is constrained | ||||
A human-readable plain-text description of the resource. | title: "String" (optional) | |||
This is a human-readable, plain-text description of the resource. | ||||
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. Event | |||
Media type: "application/jscalendar+json;type=jsevent" | Media type: "application/jscalendar+json;type=event" | |||
A JSEvent represents a scheduled amount of time on a calendar, | An Event represents a scheduled amount of time on a calendar, | |||
typically a meeting, appointment, reminder or anniversary. It is | typically a meeting, appointment, reminder, or anniversary. It is | |||
required to start at a certain point in time and typically has a non- | required to start at a certain point in time and typically has a non- | |||
zero duration. Multiple participants may partake in the event at | zero duration. Multiple participants may partake in the event at | |||
multiple locations. | multiple locations. | |||
The @type (Section 4.1.1) property value MUST be "jsevent". | The @type (Section 4.1.1) property value MUST be "Event". | |||
2.2. JSTask | 2.2. Task | |||
Media type: "application/jscalendar+json;type=jstask" | Media type: "application/jscalendar+json;type=task" | |||
A JSTask represents an action-item, assignment, to-do or work item. | A Task represents an action item, assignment, to-do item, or work | |||
It may start and be due at certain points in time, may take some | item. It may start and be due at certain points in time, take some | |||
estimated time to complete, and may recur, none of which is required. | estimated time to complete, and recur, none of which is required. | |||
The @type (Section 4.1.1) property value MUST be "jstask". | The @type (Section 4.1.1) property value MUST be "Task". | |||
2.3. JSGroup | 2.3. Group | |||
Media type: "application/jscalendar+json;type=jsgroup" | Media type: "application/jscalendar+json;type=group" | |||
A JSGroup is a collection of JSEvent (Section 2.1) and/or JSTask | A Group is a collection of Event (Section 2.1) and/or Task | |||
(Section 2.2) objects. Typically, objects are grouped by topic | (Section 2.2) objects. Typically, objects are grouped by topic | |||
(e.g., by keywords) or calendar membership. | (e.g., 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 "Group". | |||
3. Structure of JSCalendar Objects | 3. Structure of JSCalendar Objects | |||
A JSCalendar object is a JSON object [RFC8259], which MUST be valid | A JSCalendar object is a JSON object [RFC8259], which MUST be valid | |||
I-JSON (a stricter subset of JSON) [RFC7493]. Property names and | I-JSON (a stricter subset of JSON) [RFC7493]. Property names and | |||
values are case-sensitive. | values are case sensitive. | |||
The object has a collection of properties, as specified in the | The object has a collection of properties, as specified in the | |||
following sections. Properties are specified as being either | following sections. Properties are specified as being either | |||
mandatory or optional. Optional properties may have a default value, | mandatory or optional. Optional properties may have a default value | |||
if explicitly specified in the property definition. | if explicitly specified in the property definition. | |||
3.1. Object Type | 3.1. Object Type | |||
JSCalendar objects MUST name their type in the "@type" property, if | JSCalendar objects MUST name their type in the "@type" property if | |||
not explicitly specified otherwise for the respective object type. A | not explicitly specified otherwise for the respective object type. A | |||
notable exception to this rule is the PatchObject (Section 1.4.9). | notable exception to this rule is the PatchObject (Section 1.4.9). | |||
3.2. Normalization and Equivalence | 3.2. Normalization and Equivalence | |||
JSCalendar aims to provide unambiguous definitions for value types | JSCalendar aims to provide unambiguous definitions for value types | |||
and properties, but does not define a general normalization or | and properties but does not define a general normalization or | |||
equivalence method for JSCalendar objects and types. This is because | equivalence method for JSCalendar objects and types. This is because | |||
the notion of equivalence might range from byte-level equivalence to | the notion of equivalence might range from byte-level equivalence to | |||
semantic equivalence, depending on the respective use case. | semantic equivalence, depending on the respective use case. | |||
Normalization of JSCalendar objects is hindered because of the | Normalization of JSCalendar objects is hindered because of the | |||
following reasons: | following reasons: | |||
o Custom JSCalendar properties may contain arbitrary JSON values, | * Custom JSCalendar properties may contain arbitrary JSON values, | |||
including arrays. However, equivalence of arrays might or might | including arrays. However, equivalence of arrays might or might | |||
not depend on the order of elements, depending on the respective | not depend on the order of elements, depending on the respective | |||
property definition. | property definition. | |||
o Several JSCalendar property values are defined as URIs and media | * Several JSCalendar property values are defined as URIs and media | |||
types, but normalization of these types is inherently protocol- | types, but normalization of these types is inherently protocol and | |||
and scheme-specific, depending on the use-case of the equivalence | scheme specific, depending on the use case of the equivalence | |||
definition (see Section 6 of [RFC3986]). | definition (see Section 6 of [RFC3986]). | |||
Considering this, the definition of equivalence and normalization is | Considering this, the definition of equivalence and normalization is | |||
left to client and server implementations and to be negotiated by a | left to client and server implementations and to be negotiated by a | |||
calendar exchange protocol or defined elsewhere. | calendar exchange protocol or defined elsewhere. | |||
3.3. Vendor-specific Property Extensions, Values and Types | 3.3. Vendor-Specific Property Extensions, Values, and Types | |||
Vendors MAY add additional properties to the calendar object to | Vendors MAY add additional properties to the calendar object to | |||
support their custom features. To avoid conflict, the names of these | support their custom features. To avoid conflict, the names of these | |||
properties MUST be prefixed by a domain name controlled by the vendor | properties MUST be prefixed by a domain name controlled by the vendor | |||
followed by a colon, e.g., "example.com:customprop". If the value is | followed by a colon, e.g., "example.com:customprop". If the value is | |||
a new JSCalendar object, it either MUST include a "@type" property or | a new JSCalendar object, it either MUST include an "@type" property, | |||
it MUST explicitly be specified to not require a type designator. | or it MUST explicitly be specified to not require a type designator. | |||
The type name MUST be prefixed with a domain name controlled by the | The type name MUST be prefixed with a domain name controlled by the | |||
vendor. | vendor. | |||
Some JSCalendar properties allow vendor-specific value extensions. | Some JSCalendar properties allow vendor-specific value extensions. | |||
Such vendor-specific values MUST be prefixed by a domain name | Such vendor-specific values MUST be prefixed by a domain name | |||
controlled by the vendor followed by a colon, e.g., | controlled by the vendor followed by a colon, e.g., | |||
"example.com:customrel". | "example.com:customrel". | |||
Vendors are strongly encouraged to register any new property values | Vendors are strongly encouraged to register any new property values | |||
or extensions that are useful to other systems as well, rather than | or extensions that are useful to other systems as well, rather than | |||
skipping to change at page 16, line 29 ¶ | skipping to change at line 728 ¶ | |||
This section describes the properties that are common to the various | This section describes the properties that are common to the various | |||
JSCalendar object types. Specific JSCalendar object types may only | JSCalendar object types. Specific JSCalendar object types may only | |||
support a subset of these properties. The object type definitions in | support a subset of these properties. The object type definitions in | |||
Section 5 describe the set of supported properties per type. | Section 5 describe the set of supported properties per type. | |||
4.1. Metadata Properties | 4.1. Metadata Properties | |||
4.1.1. @type | 4.1.1. @type | |||
Type: "String" (mandatory). | Type: "String" (mandatory) | |||
Specifies the type which this object represents. This MUST be one of | ||||
the following values: | ||||
o "jsevent": a JSCalendar event (Section 2.1). | ||||
o "jstask": a JSCalendar task (Section 2.2). | ||||
o "jsgroup": a JSCalendar group (Section 2.3). | This specifies the type that this object represents. The allowed | |||
value differs by object type and is defined in Sections 2.1, 2.2, and | ||||
2.3. | ||||
4.1.2. uid | 4.1.2. uid | |||
Type: "String" (mandatory). | Type: "String" (mandatory) | |||
A globally unique identifier, used to associate the object as the | This is a globally unique identifier used to associate objects | |||
same across different systems, calendars and views. The value of | representing the same event, task, group, or other object across | |||
this property MUST be unique across all JSCalendar objects, even if | different systems, calendars, and views. For recurring events and | |||
they are of different type. [RFC4122] describes a range of | tasks, the UID is associated with the base object and therefore is | |||
established algorithms to generate universally unique identifiers | the same for all occurrences; the combination of the UID with a | |||
(UUID). UUID version 4, described in Section 4.4 of [RFC4122], is | "recurrenceId" identifies a particular instance. | |||
RECOMMENDED. | ||||
For compatibility with [RFC5545] UIDs, implementations MUST be able | The generator of the identifier MUST guarantee that the identifier is | |||
unique. [RFC4122] describes a range of established algorithms to | ||||
generate universally unique identifiers (UUIDs). UUID version 4, | ||||
described in Section 4.4 of [RFC4122], is RECOMMENDED. | ||||
For compatibility with UIDs [RFC5545], implementations MUST be able | ||||
to receive and persist values of at least 255 octets for this | 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 | property, but they MUST NOT truncate values in the middle of a UTF-8 | |||
multi-octet sequence. | multi-octet sequence. | |||
4.1.3. relatedTo | 4.1.3. relatedTo | |||
Type: "String[Relation]" (optional). | Type: "String[Relation]" (optional) | |||
Relates the object to other JSCalendar objects. This is represented | This relates the object to other JSCalendar objects. This is | |||
as a map of the UIDs of the related objects to information about the | represented as a map of the UIDs of the related objects to | |||
relation. | information about the relation. | |||
If an object is split to make a "this and future" change to a | If an object is split to make a "this and future" change to a | |||
recurrence, the original object MUST be truncated to end at the | recurrence, the original object MUST be truncated to end at the | |||
previous occurrence before this split, and a new object created to | previous occurrence before this split, and a new object is created to | |||
represent all the occurrences after the split. A "next" relation | represent all the occurrences after the split. A "next" relation | |||
MUST be set on the original object's relatedTo property for the UID | MUST be set on the original object's "relatedTo" property for the UID | |||
of the new object. A "first" relation for the UID of the first | of the new object. A "first" relation for the UID of the first | |||
object in the series MUST be set on the new object. Clients can then | object in the series MUST be set on the new object. Clients can then | |||
follow these UIDs to get the complete set of objects if the user | follow these UIDs to get the complete set of objects if the user | |||
wishes to modify them all at once. | wishes to modify them all at once. | |||
4.1.4. prodId | 4.1.4. prodId | |||
Type: "String" (optional). | Type: "String" (optional) | |||
The identifier for the product that last updated the JSCalendar | This is the identifier for the product that last updated the | |||
object. This should be set whenever the data in the object is | JSCalendar object. This should be set whenever the data in the | |||
modified (i.e., whenever the "updated" property is set). | object is modified (i.e., whenever the "updated" property is set). | |||
The vendor of the implementation MUST ensure that this is a globally | The vendor of the implementation MUST ensure that this is a globally | |||
unique identifier, using some technique such as an FPI value, as | unique identifier, using some technique such as a Formal Public | |||
defined in [ISO.9070.1991]. | Identifier (FPI) value, as defined in [ISO.9070.1991]. | |||
This property SHOULD NOT be used to alter the interpretation of a | This property SHOULD NOT be used to alter the interpretation of a | |||
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, a practice that is known to cause long-term | nonstandard properties, a practice that is known to cause long-term | |||
interoperability problems. | interoperability problems. | |||
4.1.5. created | 4.1.5. created | |||
Type: "UTCDateTime" (optional). | Type: "UTCDateTime" (optional) | |||
The date and time this object was initially created. | This is the date and time this object was initially created. | |||
4.1.6. updated | 4.1.6. updated | |||
Type: "UTCDateTime" (mandatory). | Type: "UTCDateTime" (mandatory) | |||
The date and time the data in this object was last modified (or its | This is the date and time the data in this object was last modified | |||
creation date/time if not modified since). | (or its creation date/time if not modified since). | |||
4.1.7. sequence | 4.1.7. sequence | |||
Type: "UnsignedInt" (optional, default: 0). | Type: "UnsignedInt" (optional, default: 0) | |||
Initially zero, this MUST be incremented by one every time a change | Initially zero, this MUST be incremented by one every time a change | |||
is made to the object, except if the change only modifies the | is made to the object, except if the change only modifies the | |||
"participants" property (see Section 4.4.5). | "participants" property (see Section 4.4.6). | |||
This is used as part of iTIP [RFC5546] to know which version of the | This is used as part of the iCalendar Transport-independent | |||
object a scheduling message relates to. | Interoperability Protocol (iTIP) [RFC5546] to know which version of | |||
the object a scheduling message relates to. | ||||
4.1.8. method | 4.1.8. method | |||
Type: "String" (optional). | Type: "String" (optional) | |||
The iTIP [RFC5546] method, in lowercase. This MUST only be present | This is the iTIP [RFC5546] method, in lowercase. This MUST only be | |||
if the JSCalendar object represents an iTIP scheduling message. | present if the JSCalendar object represents an iTIP scheduling | |||
message. | ||||
4.2. What and Where Properties | 4.2. What and Where Properties | |||
4.2.1. title | 4.2.1. title | |||
Type: "String" (optional, default: empty String). | Type: "String" (optional, default: empty String) | |||
A short summary of the object. | This is a short summary of the object. | |||
4.2.2. description | 4.2.2. description | |||
Type: "String" (optional, default: empty String). | Type: "String" (optional, default: empty String) | |||
A longer-form text description of the object. The content is | This is a longer-form text description of the object. The content is | |||
formatted according to the "descriptionContentType" property. | formatted according to the "descriptionContentType" property. | |||
4.2.3. descriptionContentType | 4.2.3. descriptionContentType | |||
Type: "String" (optional, default: "text/plain"). | Type: "String" (optional, default: "text/plain") | |||
Describes the media type [RFC6838] of the contents of the | This describes the media type [RFC6838] of the contents of the | |||
"description" property. Media types MUST be sub-types of type | "description" property. Media types MUST be subtypes of type "text" | |||
"text", and SHOULD be "text/plain" or "text/html" [MEDIATYPES]. They | and SHOULD be "text/plain" or "text/html" [MEDIATYPES]. They MAY | |||
MAY include parameters and the "charset" parameter value MUST be | include parameters, and the "charset" parameter value MUST be "utf- | |||
"utf-8", if specified. Descriptions of type "text/html" MAY contain | 8", if specified. Descriptions of type "text/html" MAY contain "cid" | |||
"cid" URLs [RFC2392] to reference links in the calendar object by use | URLs [RFC2392] to reference links in the calendar object by use of | |||
of the "cid" property of the Link object. | the "cid" property of the Link object. | |||
4.2.4. showWithoutTime | 4.2.4. showWithoutTime | |||
Type: "Boolean" (optional, default: false). | Type: "Boolean" (optional, default: false) | |||
Indicates that the time is not important to display to the user when | This indicates that the time is not important to display to the user | |||
rendering this calendar object. An example of this is an event that | when rendering this calendar object. An example of this is an event | |||
conceptually occurs all day or across multiple days, such as "New | that conceptually occurs all day or across multiple days, such as | |||
Year's Day" or "Italy Vacation". While the time component is | "New Year's Day" or "Italy Vacation". While the time component is | |||
important for free-busy calculations and checking for scheduling | important for free-busy calculations and checking for scheduling | |||
clashes, calendars may choose to omit displaying it and/or display | clashes, calendars may choose to omit displaying it and/or display | |||
the object separately to other objects to enhance the user's view of | the object separately to other objects to enhance the user's view of | |||
their schedule. | their schedule. | |||
Such events are also commonly known as "all-day" events. | Such events are also commonly known as "all-day" events. | |||
4.2.5. locations | 4.2.5. locations | |||
Type: "Id[Location]" (optional). | Type: "Id[Location]" (optional) | |||
A map of location ids to Location objects, representing locations | This is a map of location ids to Location objects, representing | |||
associated with the object. | locations associated with the object. | |||
A Location object has the following properties. It MUST have at | A Location object has the following properties. It MUST have at | |||
least one property other than the "relativeTo" property. | least one property other than the "relativeTo" property. | |||
o @type: "String" (mandatory) | @type: "String" (mandatory) | |||
This specifies the type of this object. This MUST be "Location". | ||||
Specifies the type of this object. This MUST be "Location". | ||||
o name: "String" (optional) | ||||
The human-readable name of the location. | ||||
o description: "String" (optional) | ||||
Human-readable, plain-text instructions for accessing this | ||||
location. This may be an address, set of directions, door access | ||||
code, etc. | ||||
o locationTypes: "String[Boolean]" (optional) | name: "String" (optional) | |||
This is the human-readable name of the location. | ||||
A set of one or more location types that describe this location. | description: "String" (optional) | |||
All types MUST be from the Location Types Registry [LOCATIONTYPES] | This is the human-readable, plain-text instructions for accessing | |||
as defined in [RFC4589]. The set is represented as a map, with | this location. This may be an address, set of directions, door | |||
the keys being the location types. The value for each key in the | access code, etc. | |||
map MUST be true. | ||||
o relativeTo: "String" (optional) | locationTypes: "String[Boolean]" (optional) | |||
This is a set of one or more location types that describe this | ||||
location. All types MUST be from the "Location Types Registry" | ||||
[LOCATIONTYPES], as defined in [RFC4589]. The set is represented | ||||
as a map, with the keys being the location types. The value for | ||||
each key in the map MUST be true. | ||||
Specifies the relation between this location and the time of the | relativeTo: "String" (optional) | |||
JSCalendar object. This is primarily to allow events representing | This specifies the relation between this location and the time of | |||
travel to specify the location of departure (at the start of the | the JSCalendar object. This is primarily to allow events | |||
event) and location of arrival (at the end); this is particularly | representing travel to specify the location of departure (at the | |||
important if these locations are in different time zones, as a | start of the event) and location of arrival (at the end); this is | |||
client may wish to highlight this information for the user. | particularly important if these locations are in different time | |||
zones, as a client may wish to highlight this information for the | ||||
user. | ||||
This MUST be one of the following values, another value registered | This MUST be one of the following values, another value registered | |||
in the IANA JSCalendar Enum Values registry, or a vendor-specific | in the IANA "JSCalendar Enum Values" registry, or a vendor- | |||
value (see Section 3.3). Any value the client or server doesn't | specific value (see Section 3.3). Any value the client or server | |||
understand should be treated the same as if this property is | doesn't understand should be treated the same as if this property | |||
omitted. | is omitted. | |||
* "start": The event/task described by this JSCalendar object | "start": The event/task described by this JSCalendar object | |||
occurs at this location at the time the event/task starts. | occurs at this location at the time the event/task starts. | |||
* "end": The event/task described by this JSCalendar object | "end": The event/task described by this JSCalendar object occurs | |||
occurs at this location at the time the event/task ends. | at this location at the time the event/task ends. | |||
o timeZone: "TimeZoneId" (optional) | ||||
A time zone for this location. | ||||
o coordinates: "String" (optional) | ||||
A "geo:" URI [RFC5870] for the location. | timeZone: "TimeZoneId" (optional) | |||
This is a time zone for this location. | ||||
o links: "Id[Link]" (optional) | coordinates: "String" (optional) | |||
This is a "geo:" URI [RFC5870] for the location. | ||||
A map of link ids to Link objects, representing external resources | links: "Id[Link]" (optional) | |||
associated with this location, for example a vCard or image. If | This is a map of link ids to Link objects, representing external | |||
there are no links, this MUST be omitted (rather than specified as | resources associated with this location, for example, a vCard or | |||
an empty set). | image. If there are no links, this MUST be omitted (rather than | |||
specified as an empty set). | ||||
4.2.6. virtualLocations | 4.2.6. virtualLocations | |||
Type: "Id[VirtualLocation]" (optional). | Type: "Id[VirtualLocation]" (optional) | |||
A map of virtual location ids to VirtualLocation objects, | This is a map of virtual location ids to VirtualLocation objects, | |||
representing virtual locations, such as video conferences or chat | representing virtual locations, such as video conferences or chat | |||
rooms, associated with the object. | rooms, associated with the object. | |||
A VirtualLocation object has the following properties. | A VirtualLocation object has the following properties. | |||
o @type: "String" (mandatory) | @type: "String" (mandatory) | |||
This specifies the type of this object. This MUST be | ||||
Specifies the type of this object. This MUST be | ||||
"VirtualLocation". | "VirtualLocation". | |||
o name: "String" (optional, default: empty String) | name: "String" (optional, default: empty String) | |||
This is the human-readable name of the virtual location. | ||||
The human-readable name of the virtual location. | ||||
o description: "String" (optional) | ||||
Human-readable plain-text instructions for accessing this virtual | ||||
location. This may be a conference access code, etc. | ||||
o uri: "String" (mandatory) | description: "String" (optional) | |||
These are human-readable plain-text instructions for accessing | ||||
this virtual location. This may be a conference access code, etc. | ||||
A URI [RFC3986] that represents how to connect to this virtual | uri: "String" (mandatory) | |||
location. | This is a URI [RFC3986] that represents how to connect to this | |||
virtual location. | ||||
This may be a telephone number (represented using the "tel:" | This may be a telephone number (represented using the "tel:" | |||
scheme, e.g., "tel:+1-555-555-5555") for a teleconference, a web | scheme, e.g., "tel:+1-555-555-5555") for a teleconference, a web | |||
address for online chat, or any custom URI. | address for online chat, or any custom URI. | |||
features: "String[Boolean]" (optional) | ||||
A set of features supported by this virtual location. The set is | ||||
represented as a map, with the keys being the feature. The value | ||||
for each key in the map MUST be true. | ||||
The feature MUST be one of the following values, another value | ||||
registered in the IANA "JSCalendar Enum Values" registry, or a | ||||
vendor-specific value (see Section 3.3). Any value the client or | ||||
server doesn't understand should be treated the same as if this | ||||
feature is omitted. | ||||
audio: Audio conferencing | ||||
chat: Chat or instant messaging | ||||
feed: Blog or atom feed | ||||
moderator: Provides moderator-specific features | ||||
phone: Phone conferencing | ||||
screen: Screen sharing | ||||
video: Video conferencing | ||||
4.2.7. links | 4.2.7. links | |||
Type: "Id[Link]" (optional). | Type: "Id[Link]" (optional) | |||
A map of link ids to Link objects, representing external resources | This is a map of link ids to Link objects, representing external | |||
associated with the object. | resources associated with the object. | |||
Links with a rel of "enclosure" MUST be considered by the client as | Links with a rel of "enclosure" MUST be considered by the client to | |||
attachments for download. | be attachments for download. | |||
Links with a rel of "describedby" MUST be considered by the client to | Links with a rel of "describedby" MUST be considered by the client to | |||
be an alternative representation of the description. | be alternative representations of the description. | |||
Links with a rel of "icon" MUST be considered by the client to be an | Links with a rel of "icon" MUST be considered by the client to be | |||
image that it may use when presenting the calendar data to a user. | images that it may use when presenting the calendar data to a user. | |||
The "display" property may be set to indicate the purpose of this | The "display" property may be set to indicate the purpose of this | |||
image. | image. | |||
4.2.8. locale | 4.2.8. locale | |||
Type: "String" (optional). | Type: "String" (optional) | |||
The language tag as defined in [RFC5646] that best describes the | This is the language tag, as defined in [BCP47], that best describes | |||
locale used for the text in the calendar object, if known. | the locale used for the text in the calendar object, if known. | |||
4.2.9. keywords | 4.2.9. keywords | |||
Type: "String[Boolean]" (optional). | Type: "String[Boolean]" (optional) | |||
A set of keywords or tags that relate to the object. The set is | This is a set of keywords or tags that relate to the object. The set | |||
represented as a map, with the keys being the keywords. The value | is represented as a map, with the keys being the keywords. The value | |||
for each key in the map MUST be true. | for each key in the map MUST be true. | |||
4.2.10. categories | 4.2.10. categories | |||
Type: "String[Boolean]" (optional). | Type: "String[Boolean]" (optional) | |||
A set of categories that relate to the calendar object. The set is | This is a set of categories that relate to the calendar object. The | |||
represented as a map, with the keys being the categories specified as | set is represented as a map, with the keys being the categories | |||
URIs. The value for each key in the map MUST be true. | specified as URIs. The value for each key in the map MUST be true. | |||
In contrast to keywords, categories typically are structured. For | In contrast to keywords, categories are typically structured. For | |||
example, a vendor owning the domain "example.com" might define the | example, a vendor owning the domain "example.com" might define the | |||
categories "http://example.com/categories/sports/american-football" | categories "http://example.com/categories/sports/american-football" | |||
and "http://example.com/categories/music/r-b". | and "http://example.com/categories/music/r-b". | |||
4.2.11. color | 4.2.11. color | |||
Type: "String" (optional). | Type: "String" (optional) | |||
A color clients MAY use when displaying this calendar object. The | This is a color clients MAY use when displaying this calendar object. | |||
value is a color name taken from the set of names defined in | The value is a color name taken from the set of names defined in | |||
Section 4.3 of CSS Color Module Level 3 [COLORS], or an RGB value in | Section 4.3 of CSS Color Module Level 3 [COLORS] or an RGB value in | |||
hexadecimal notation, as defined in Section 4.2.1 of CSS Color Module | hexadecimal notation, as defined in Section 4.2.1 of CSS Color Module | |||
Level 3. | Level 3. | |||
4.3. Recurrence Properties | 4.3. Recurrence Properties | |||
Some events and tasks occur at regular or irregular intervals. | Some events and tasks occur at regular or irregular intervals. | |||
Rather than having to copy the data for every occurrence there can be | Rather than having to copy the data for every occurrence, there can | |||
a master event with rules to generate recurrences, and/or overrides | be a base event with rules to generate recurrences and/or overrides | |||
that add extra dates or exceptions to the rules. | that add extra dates or exceptions to the rules. | |||
The recurrence set is the complete set of instances for an object. | The recurrence set is the complete set of instances for an object. | |||
It is generated by considering the following properties in order, all | It is generated by considering the following properties in order, all | |||
of which are optional: | of which are optional: | |||
1. The recurrenceRules property (Section 4.3.2) generates a set of | 1. The "recurrenceRules" property (Section 4.3.3) generates a set of | |||
extra date-times on which the object occurs. | extra date-times on which the object occurs. | |||
2. The excludedRecurrenceRules property (Section 4.3.3) generates a | 2. The "excludedRecurrenceRules" property (Section 4.3.4) generates | |||
set of date-times that are to be removed from the previously | a set of date-times that are to be removed from the previously | |||
generated set of date-times on which the object occurs. | generated set of date-times on which the object occurs. | |||
3. The recurrenceOverrides property (Section 4.3.4) defines date- | 3. The "recurrenceOverrides" property (Section 4.3.5) defines date- | |||
times which are added or excluded to form the final set. (This | times that are added or excluded to form the final set. (This | |||
property may also contain changes to the object to apply to | property may also contain changes to the object to apply to | |||
particular instances.) | particular instances.) | |||
4.3.1. recurrenceId | 4.3.1. recurrenceId | |||
Type: "LocalDateTime" (optional). | Type: "LocalDateTime" (optional) | |||
If present, this JSCalendar object represents one occurrence of a | If present, this JSCalendar object represents one occurrence of a | |||
recurring JSCalendar object. If present the "recurrenceRules" and | recurring JSCalendar object. If present, the "recurrenceRules" and | |||
"recurrenceOverrides" properties MUST NOT be present. | "recurrenceOverrides" properties MUST NOT be present. | |||
The value is a date-time either produced by the "recurrenceRules" of | The value is a date-time either produced by the "recurrenceRules" of | |||
the master event, or added as a key to the "recurrenceOverrides" | the base event or added as a key to the "recurrenceOverrides" | |||
property of the master event. | property of the base event. | |||
4.3.2. recurrenceRules | 4.3.2. recurrenceIdTimeZone | |||
Type: "RecurrenceRule[]" (optional). | Type: "TimeZoneId|null" (optional, default: null) | |||
Defines a set of recurrence rules (repeating patterns) for recurring | Identifies the time zone of the main JSCalendar object, of which this | |||
calendar objects. | JSCalendar object is a recurrence instance. This property MUST be | |||
set if the "recurrenceId" property is set. It MUST NOT be set if the | ||||
"recurrenceId" property is not set. | ||||
A JSEvent recurs by applying the recurrence rules to the "start" | 4.3.3. recurrenceRules | |||
date-time. | ||||
A JSTask recurs by applying the recurrence rules to the "start" date- | Type: "RecurrenceRule[]" (optional) | |||
time, if defined, otherwise it recurs by the "due" date-time, if | ||||
This defines a set of recurrence rules (repeating patterns) for | ||||
recurring calendar objects. | ||||
An Event recurs by applying the recurrence rules to the "start" date- | ||||
time. | ||||
A Task recurs by applying the recurrence rules to the "start" date- | ||||
time, if defined; otherwise, it recurs by the "due" date-time, if | ||||
defined. If the task defines neither a "start" nor "due" date-time, | defined. If the task defines neither a "start" nor "due" date-time, | |||
it MUST NOT define a "recurrenceRules" property. | it MUST NOT define a "recurrenceRules" property. | |||
If multiple recurrence rules are given, each rule is to be applied | If multiple recurrence rules are given, each rule is to be applied, | |||
and then the union of the results used, ignoring any duplicates. | and then the union of the results are used, ignoring any duplicates. | |||
A RecurrenceRule object is a JSON object mapping of a RECUR value | A RecurrenceRule object is a JSON object mapping of a RECUR value | |||
type in iCalendar [RFC5545] [RFC7529] and has the same semantics. It | type in iCalendar [RFC5545] [RFC7529] and has the same semantics. It | |||
has the following properties: | has the following properties: | |||
o @type: "String" (mandatory) | @type: "String" (mandatory) | |||
This specifies the type of this object. This MUST be | ||||
Specifies the type of this object. This MUST be "RecurrenceRule". | "RecurrenceRule". | |||
o frequency: "String" (mandatory) | ||||
The time span covered by each iteration of this recurrence rule | frequency: "String" (mandatory) | |||
(see Section 4.3.2.1 for full semantics). This MUST be one of the | This is the time span covered by each iteration of this recurrence | |||
following values: | rule (see Section 4.3.3.1 for full semantics). This MUST be one | |||
of the following values: | ||||
* "yearly" | * "yearly" | |||
* "monthly" | * "monthly" | |||
* "weekly" | * "weekly" | |||
* "daily" | * "daily" | |||
* "hourly" | * "hourly" | |||
* "minutely" | * "minutely" | |||
* "secondly" | * "secondly" | |||
This is the FREQ part from iCalendar, converted to lowercase. | This is the FREQ part from iCalendar, converted to lowercase. | |||
o interval: "UnsignedInt" (optional, default: 1) | interval: "UnsignedInt" (optional, default: 1) | |||
This is the interval of iteration periods at which the recurrence | ||||
The interval of iteration periods at which the recurrence repeats. | repeats. If included, it MUST be an integer >= 1. | |||
If included, it MUST be an integer >= 1. | ||||
This is the INTERVAL part from iCalendar. | This is the INTERVAL part from iCalendar. | |||
o rscale: "String" (optional, default: "gregorian") | rscale: "String" (optional, default: "gregorian") | |||
This is the calendar system in which this recurrence rule | ||||
The calendar system in which this recurrence rule operates, in | operates, in lowercase. This MUST be either a CLDR-registered | |||
lowercase. This MUST be either a CLDR-registered calendar system | calendar system name [CLDR] or a vendor-specific value (see | |||
name [CLDR], or a vendor-specific value (see Section 3.3). | Section 3.3). | |||
This is the RSCALE part from iCalendar RSCALE [RFC7529], converted | This is the RSCALE part from iCalendar RSCALE [RFC7529], converted | |||
to lowercase. | to lowercase. | |||
o skip: "String" (optional, default: "omit") | skip: "String" (optional, default: "omit") | |||
This is the behavior to use when the expansion of the recurrence | ||||
The behaviour to use when the expansion of the recurrence produces | produces invalid dates. This property only has an effect if the | |||
invalid dates. This property only has an effect if the frequency | frequency is "yearly" or "monthly". It MUST be one of the | |||
is "yearly" or "monthly". It MUST be one of the following values: | following values: | |||
* "omit" | * "omit" | |||
* "backward" | * "backward" | |||
* "forward" | * "forward" | |||
This is the SKIP part from iCalendar RSCALE [RFC7529], converted | This is the SKIP part from iCalendar RSCALE [RFC7529], converted | |||
to lowercase. | to lowercase. | |||
o firstDayOfWeek: "String" (optional, default: "mo") | firstDayOfWeek: "String" (optional, default: "mo") | |||
The day on which the week is considered to start, represented as a | This is the day on which the week is considered to start, | |||
lowercase abbreviated two-letter English day of the week. If | represented as a lowercase, abbreviated, and two-letter English | |||
included, it MUST be one of the following values: | day of the week. If included, it MUST be one of the following | |||
values: | ||||
* "mo" | * "mo" | |||
* "tu" | * "tu" | |||
* "we" | * "we" | |||
* "th" | * "th" | |||
* "fr" | * "fr" | |||
* "sa" | * "sa" | |||
* "su" | * "su" | |||
This is the WKST part from iCalendar. | This is the WKST part from iCalendar. | |||
o byDay: "NDay[]" (optional) | byDay: "NDay[]" (optional) | |||
These are days of the week on which to repeat. An "NDay" object | ||||
Days of the week on which to repeat. An "NDay" object has the | has the following properties: | |||
following properties: | ||||
* @type: "String" (mandatory) | ||||
Specifies the type of this object. This MUST be "NDay". | ||||
* day: "String" (mandatory) | @type: "String" (mandatory) | |||
This specifies the type of this object. This MUST be "NDay". | ||||
A day of the week on which to repeat; the allowed values are | day: "String" (mandatory) | |||
the same as for the "firstDayOfWeek" RecurrenceRule property. | This is a day of the week on which to repeat; the allowed | |||
values are the same as for the "firstDayOfWeek" recurrenceRule | ||||
property. | ||||
This is the day-of-the-week of the BYDAY part in iCalendar, | This is the day of the week of the BYDAY part in iCalendar, | |||
converted to lowercase. | converted to lowercase. | |||
* nthOfPeriod: "Int" (optional) | nthOfPeriod: "Int" (optional) | |||
If present, rather than representing every occurrence of the | If present, rather than representing every occurrence of the | |||
weekday defined in the "day" property, it represents only a | weekday defined in the "day" property, it represents only a | |||
specific instance within the recurrence period. The value can | specific instance within the recurrence period. The value can | |||
be positive or negative, but MUST NOT be zero. A negative | be positive or negative but MUST NOT be zero. A negative | |||
integer means nth-last of period. | integer means the nth-last occurrence within that period (i.e., | |||
-1 is the last occurrence, -2 the one before that, etc.). | ||||
This is the ordinal part of the BYDAY value in iCalendar (e.g., | This is the ordinal part of the BYDAY value in iCalendar (e.g., | |||
1 or -3). | 1 or -3). | |||
o byMonthDay: "Int[]" (optional) | byMonthDay: "Int[]" (optional) | |||
These are the days of the month on which to repeat. Valid values | ||||
Days of the month on which to repeat. Valid values are between 1 | are between 1 and the maximum number of days any month may have in | |||
and the maximum number of days any month may have in the calendar | the calendar given by the "rscale" property and the negative | |||
given by the "rscale" property, and the negative values of these | values of these numbers. For example, in the Gregorian calendar, | |||
numbers. For example, in the Gregorian calendar valid values are | valid values are 1 to 31 and -31 to -1. Negative values offset | |||
1 to 31 and -31 to -1. Negative values offset from the end of the | from the end of the month. The array MUST have at least one entry | |||
month. The array MUST have at least one entry if included. | if included. | |||
This is the BYMONTHDAY part in iCalendar. | This is the BYMONTHDAY part in iCalendar. | |||
o byMonth: "String[]" (optional) | byMonth: "String[]" (optional) | |||
These are the months in which to repeat. Each entry is a string | ||||
The months in which to repeat. Each entry is a string | ||||
representation of a number, starting from "1" for the first month | representation of a number, starting from "1" for the first month | |||
in the calendar (e.g., "1" means January with the Gregorian | in the calendar (e.g., "1" means January with the Gregorian | |||
calendar), with an optional "L" suffix (see [RFC7529]) for leap | calendar), with an optional "L" suffix (see [RFC7529]) for leap | |||
months (this MUST be uppercase, e.g., "3L"). The array MUST have | months (this MUST be uppercase, e.g., "3L"). The array MUST have | |||
at least one entry if included. | at least one entry if included. | |||
This is the BYMONTH part from iCalendar. | This is the BYMONTH part from iCalendar. | |||
o byYearDay: "Int[]" (optional) | byYearDay: "Int[]" (optional) | |||
These are the days of the year on which to repeat. Valid values | ||||
The days of the year on which to repeat. Valid values are between | are between 1 and the maximum number of days any year may have in | |||
1 and the maximum number of days any year may have in the calendar | the calendar given by the "rscale" property and the negative | |||
given by the "rscale" property, and the negative values of these | values of these numbers. For example, in the Gregorian calendar, | |||
numbers. For example, in the Gregorian calendar valid values are | valid values are 1 to 366 and -366 to -1. Negative values offset | |||
1 to 366 and -366 to -1. Negative values offset from the end of | from the end of the year. The array MUST have at least one entry | |||
the year. The array MUST have at least one entry if included. | if included. | |||
This is the BYYEARDAY part from iCalendar. | This is the BYYEARDAY part from iCalendar. | |||
o byWeekNo: "Int[]" (optional) | byWeekNo: "Int[]" (optional) | |||
These are the weeks of the year in which to repeat. Valid values | ||||
Weeks of the year in which to repeat. Valid values are between 1 | are between 1 and the maximum number of weeks any year may have in | |||
and the maximum number of weeks any year may have in the calendar | the calendar given by the "rscale" property and the negative | |||
given by the "rscale" property, and the negative values of these | values of these numbers. For example, in the Gregorian calendar, | |||
numbers. For example, in the Gregorian calendar valid values are | valid values are 1 to 53 and -53 to -1. The array MUST have at | |||
1 to 53 and -53 to -1. The array MUST have at least one entry if | least one entry if included. | |||
included. | ||||
This is the BYWEEKNO part from iCalendar. | This is the BYWEEKNO part from iCalendar. | |||
o byHour: "UnsignedInt[]" (optional) | byHour: "UnsignedInt[]" (optional) | |||
The hours of the day in which to repeat. Valid values are 0 to | These are the hours of the day in which to repeat. Valid values | |||
23. The array MUST have at least one entry if included. This is | are 0 to 23. The array MUST have at least one entry if included. | |||
the BYHOUR part from iCalendar. | This is the BYHOUR part from iCalendar. | |||
o byMinute: "UnsignedInt[]" (optional) | ||||
The minutes of the hour in which to repeat. Valid values are 0 to | byMinute: "UnsignedInt[]" (optional) | |||
59. The array MUST have at least one entry if included. | These are the minutes of the hour in which to repeat. Valid | |||
values are 0 to 59. The array MUST have at least one entry if | ||||
included. | ||||
This is the BYMINUTE part from iCalendar. | This is the BYMINUTE part from iCalendar. | |||
o bySecond: "UnsignedInt[]" (optional) | bySecond: "UnsignedInt[]" (optional) | |||
These are the seconds of the minute in which to repeat. Valid | ||||
The seconds of the minute in which to repeat. Valid values are 0 | values are 0 to 60. The array MUST have at least one entry if | |||
to 60. The array MUST have at least one entry if included. | included. | |||
This is the BYSECOND part from iCalendar. | This is the BYSECOND part from iCalendar. | |||
o bySetPosition: "Int[]" (optional) | bySetPosition: "Int[]" (optional) | |||
These are the occurrences within the recurrence interval to | ||||
The occurrences within the recurrence interval to include in the | include in the final results. Negative values offset from the end | |||
final results. Negative values offset from the end of the list of | of the list of occurrences. The array MUST have at least one | |||
occurrences. The array MUST have at least one entry if included. | entry if included. This is the BYSETPOS part from iCalendar. | |||
This is the BYSETPOS part from iCalendar. | ||||
o count: "UnsignedInt" (optional) | ||||
The number of occurrences at which to range-bound the recurrence. | count: "UnsignedInt" (optional) | |||
This MUST NOT be included if an "until" property is specified. | These are the number of occurrences at which to range-bound the | |||
recurrence. This MUST NOT be included if an "until" property is | ||||
specified. | ||||
This is the COUNT part from iCalendar. | This is the COUNT part from iCalendar. | |||
o until: "LocalDateTime" (optional) | until: "LocalDateTime" (optional) | |||
These are the date-time at which to finish recurring. The last | ||||
The date-time at which to finish recurring. The last occurrence | occurrence is on or before this date-time. This MUST NOT be | |||
is on or before this date-time. This MUST NOT be included if a | included if a "count" property is specified. Note that if not | |||
"count" property is specified. Note: if not specified otherwise | specified otherwise for a specific JSCalendar object, this date is | |||
for a specific JSCalendar object, this date is to be interpreted | to be interpreted in the time zone specified in the JSCalendar | |||
in the time zone specified in the JSCalendar object's "timeZone" | object's "timeZone" property. | |||
property. | ||||
This is the UNTIL part from iCalendar. | This is the UNTIL part from iCalendar. | |||
4.3.2.1. Interpreting recurrence rules | 4.3.3.1. Interpreting Recurrence Rules | |||
A recurrence rule specifies a set of date-times for recurring | A recurrence rule specifies a set of date-times for recurring | |||
calendar objects. A recurrence rule has the following semantics. | calendar objects. A recurrence rule has the following semantics. | |||
Note, wherever "year", "month" or "day of month" is used, this is | Note that wherever "year", "month", or "day of month" is used, this | |||
within the calendar system given by the "rscale" property, which | is within the calendar system given by the "rscale" property, which | |||
defaults to "gregorian" if omitted. | defaults to "gregorian" if omitted. | |||
1. A set of candidates is generated. This is every second within a | 1. A set of candidates is generated. This is every second within a | |||
period defined by the frequency property value: | period defined by the "frequency" property value: | |||
* "yearly": every second from midnight on the 1st day of a year | "yearly": every second from midnight on the first day of a year | |||
(inclusive) to midnight the 1st day of the following year | (inclusive) to midnight the first day of the following year | |||
(exclusive). | (exclusive). | |||
If skip is not "omit", the calendar system has leap months and | If skip is not "omit", the calendar system has leap months, | |||
there is a byMonth property, generate candidates for the leap | and there is a "byMonth" property, generate candidates for the | |||
months even if they don't occur in this year. | leap months, even if they don't occur in this year. | |||
If skip is not "omit" and there is a byMonthDay property, | If skip is not "omit" and there is a "byMonthDay" property, | |||
presume each month has the maximum number of days any month | presume each month has the maximum number of days any month | |||
may have in this calendar system when generating candidates, | may have in this calendar system when generating candidates, | |||
even if it's more than this month actually has. | even if it's more than this month actually has. | |||
* "monthly": every second from midnight on the 1st day of a | "monthly": every second from midnight on the first day of a | |||
month (inclusive) to midnight on the 1st of the following | month (inclusive) to midnight on the first of the following | |||
month (exclusive). | month (exclusive). | |||
If skip is not "omit" and there is a byMonthDay property, | If skip is not "omit" and there is a "byMonthDay" property, | |||
presume the month has the maximum number of days any month may | presume the month has the maximum number of days any month may | |||
have in this calendar system when generating candidates, even | have in this calendar system when generating candidates, even | |||
if it's more than this month actually has. | if it's more than this month actually has. | |||
* "weekly": every second from midnight (inclusive) on the first | "weekly": every second from midnight (inclusive) on the first | |||
day of the week (as defined by the firstDayOfWeek property, or | day of the week (as defined by the "firstDayOfWeek" property | |||
Monday if omitted), to midnight 7 days later (exclusive). | or Monday if omitted) to midnight seven days later | |||
(exclusive). | ||||
* "daily": every second from midnight at the start of the day | "daily": every second from midnight at the start of the day | |||
(inclusive) to midnight at the end of the day (exclusive). | (inclusive) to midnight at the end of the day (exclusive). | |||
* "hourly": every second from the beginning of the hour | "hourly": every second from the beginning of the hour | |||
(inclusive) to the beginning of the next hour (exclusive). | (inclusive) to the beginning of the next hour (exclusive). | |||
* "minutely": every second from the beginning of the minute | "minutely": every second from the beginning of the minute | |||
(inclusive) to the beginning of the next minute (exclusive). | (inclusive) to the beginning of the next minute (exclusive). | |||
* "secondly": the second itself, only. | "secondly": only the second itself. | |||
2. Each date-time candidate is compared against all of the byX | 2. Each date-time candidate is compared against all of the byX | |||
properties of the rule except bySetPosition. If any property in | properties of the rule except bySetPosition. If any property in | |||
the rule does not match the date-time, the date-time is | the rule does not match the date-time, the date-time is | |||
eliminated. Each byX property is an array; the date-time matches | eliminated. Each byX property is an array; the date-time matches | |||
the property if it matches any of the values in the array. The | the property if it matches any of the values in the array. The | |||
properties have the following semantics: | properties have the following semantics: | |||
* byMonth: the date-time is in the given month. | byMonth: The date-time is in the given month. | |||
* byWeekNo: the date-time is in the nth week of the year. | byWeekNo: The date-time is in the nth week of the year. | |||
Negative numbers mean the nth last week of the year. This | Negative numbers mean the nth last week of the year. This | |||
corresponds to weeks according to week numbering as defined in | corresponds to weeks according to week numbering, as defined | |||
ISO.8601.2004, with a week defined as a seven day period, | in ISO.8601.2004, with a week defined as a seven-day period, | |||
starting on the firstDayOfWeek property value or Monday if | starting on the "firstDayOfWeek" property value or Monday if | |||
omitted. Week number one of the calendar year is the first | omitted. Week number one of the calendar year is the first | |||
week that contains at least four days in that calendar year. | week that contains at least four days in that calendar year. | |||
If the date-time is not valid (this may happen when generating | If the date-time is not valid (this may happen when generating | |||
candidates with a skip property in effect), it is always | candidates with a "skip" property in effect), it is always | |||
eliminated by this property. | eliminated by this property. | |||
* byYearDay: the date-time is on the nth day of year. Negative | byYearDay: The date-time is on the nth day of year. Negative | |||
numbers mean the nth last day of the year. | numbers mean the nth last day of the year. | |||
If the date-time is not valid (this may happen when generating | If the date-time is not valid (this may happen when generating | |||
candidates with a skip property in effect), it is always | candidates with a "skip" property in effect), it is always | |||
eliminated by this property. | eliminated by this property. | |||
* byMonthDay: the date-time is on the given day of the month. | byMonthDay: The date-time is on the given day of the month. | |||
Negative numbers mean the nth last day of the month. | Negative numbers mean the nth last day of the month. | |||
* byDay: the date-time is on the given day of the week. If the | byDay: The date-time is on the given day of the week. If the | |||
day is prefixed by a number, it is the nth occurrence of that | day is prefixed by a number, it is the nth occurrence of that | |||
day of the week within the month (if frequency is monthly) or | day of the week within the month (if frequency is monthly) or | |||
year (if frequency is yearly). Negative numbers means nth | year (if frequency is yearly). Negative numbers mean the nth | |||
last occurrence within that period. | last occurrence within that period. | |||
* byHour: the date-time has the given hour value. | byHour: The date-time has the given hour value. | |||
* byMinute: the date-time has the given minute value. | byMinute: The date-time has the given minute value. | |||
* bySecond: the date-time has the given second value. | bySecond: The date-time has the given second value. | |||
If a skip property is defined and is not "omit", there may be | If a "skip" property is defined and is not "omit", there may be | |||
candidates that do not correspond to valid dates (e.g., 31st | candidates that do not correspond to valid dates (e.g., February | |||
February in the Gregorian calendar). In this case, the | 31st in the Gregorian calendar). In this case, the properties | |||
properties MUST be considered in the order above and: | MUST be considered in the order above, and: | |||
1. After applying the byMonth filter, if the candidate's month | 1. After applying the byMonth filter, if the candidate's month | |||
is invalid for the given year, increment it (if skip is | is invalid for the given year, increment it (if skip is | |||
"forward") or decrement it (if skip is "backward") until a | "forward") or decrement it (if skip is "backward") until a | |||
valid month is found, incrementing/decrementing the year as | valid month is found, incrementing/decrementing the year as | |||
well if passing through the beginning/end of the year. This | well if passing through the beginning/end of the year. This | |||
only applies to calendar systems with leap months. | only applies to calendar systems with leap months. | |||
2. After applying the byMonthDay filter, if the day of the month | 2. After applying the byMonthDay filter, if the day of the month | |||
is invalid for the given month and year, change the date to | is invalid for the given month and year, change the date to | |||
the first day of the next month (if skip is "forward") or the | the first day of the next month (if skip is "forward") or the | |||
last day of the current month (if skip is "backward"). | last day of the current month (if skip is "backward"). | |||
3. If any valid date produced after applying the skip is already | 3. If any valid date produced after applying the skip is already | |||
a candidate, eliminate the duplicate. (For example after | a candidate, eliminate the duplicate. (For example, after | |||
adjusting, 30th February and 31st February would both become | adjusting, February 30th and February 31st would both become | |||
the same "real" date, so one is eliminated as a duplicate.) | the same "real" date, so one is eliminated as a duplicate.) | |||
3. If a bySetPosition property is included, this is now applied to | 3. If a "bySetPosition" property is included, this is now applied to | |||
the ordered list of remaining dates. This property specifies the | the ordered list of remaining dates. This property specifies the | |||
indexes of date-times to keep; all others should be eliminated. | indexes of date-times to keep; all others should be eliminated. | |||
Negative numbers are indexes from the end of the list, with -1 | Negative numbers are indexed from the end of the list, with -1 | |||
being the last item. | being the last item, -2 the second from last, etc. | |||
4. Any date-times before the start date of the event are eliminated | 4. Any date-times before the start date of the event are eliminated | |||
(see below for why this might be needed). | (see below for why this might be needed). | |||
5. If a skip property is included and is not "omit", eliminate any | 5. If a "skip" property is included and is not "omit", eliminate any | |||
date-times that have already been produced by previous iterations | date-times that have already been produced by previous iterations | |||
of the algorithm. (This is not possible if skip is "omit".) | of the algorithm. (This is not possible if skip is "omit".) | |||
6. If further dates are required (we have not reached the until | 6. If further dates are required (we have not reached the until date | |||
date, or count limit) skip the next (interval - 1) sets of | or count limit), skip the next (interval - 1) sets of candidates, | |||
candidates, then continue from step 1. | then continue from step 1. | |||
When determining the set of occurrence dates for an event or task, | When determining the set of occurrence dates for an event or task, | |||
the following extra rules must be applied: | the following extra rules must be applied: | |||
1. The initial date-time to which the rule is applied (the "start" | 1. The initial date-time to which the rule is applied (the "start" | |||
date-time for events; the "start" or "due" date-time for tasks) | date-time for events or the "start" or "due" date-time for tasks) | |||
is always the first occurrence in the expansion (and is counted | is always the first occurrence in the expansion (and is counted | |||
if the recurrence is limited by a "count" property), even if it | if the recurrence is limited by a "count" property), even if it | |||
would normally not match the rule. | would normally not match the rule. | |||
2. The first set of candidates to consider is that which would | 2. The first set of candidates to consider is that which would | |||
contain the initial date-time. This means the first set may | contain the initial date-time. This means the first set may | |||
include candidates before the initial date-time; such candidates | include candidates before the initial date-time; such candidates | |||
are eliminated from the results in step (4) as outlined before. | are eliminated from the results in step 4 of the list above. | |||
3. The following properties MUST be implicitly added to the rule | 3. The following properties MUST be implicitly added to the rule | |||
under the given conditions: | under the given conditions: | |||
* If frequency is not "secondly" and no bySecond property: Add a | * If frequency is not "secondly" and there is no "bySecond" | |||
bySecond property with the sole value being the seconds value | property, add a "bySecond" property with the sole value being | |||
of the initial date-time. | the seconds value of the initial date-time. | |||
* If frequency is not "secondly" or "minutely", and no byMinute | * If frequency is not "secondly" or "minutely" and there is no | |||
property: Add a byMinute property with the sole value being | "byMinute" property, add a "byMinute" property with the sole | |||
the minutes value of the initial date-time. | value being the minutes value of the initial date-time. | |||
* If frequency is not "secondly", "minutely" or "hourly" and no | * If frequency is not "secondly", "minutely", or "hourly" and | |||
byHour property: Add a byHour property with the sole value | there is no "byHour" property, add a "byHour" property with | |||
being the hours value of the initial date-time. | the sole value being the hours value of the initial date-time. | |||
* If frequency is "weekly" and no byDay property: Add a byDay | * If frequency is "weekly" and there is no "byDay" property, add | |||
property with the sole value being the day-of-the-week of the | a "byDay" property with the sole value being the day of the | |||
initial date-time. | week of the initial date-time. | |||
* If frequency is "monthly" and no byDay property and no | * If frequency is "monthly" and there is no "byDay" property and | |||
byMonthDay property: Add a byMonthDay property with the sole | no "byMonthDay" property, add a "byMonthDay" property with the | |||
value being the day-of-the-month of the initial date-time. | sole value being the day of the month of the initial date- | |||
time. | ||||
* If frequency is "yearly" and no byYearDay property: | * If frequency is "yearly" and there is no "byYearDay" property: | |||
+ If there are no byMonth or byWeekNo properties, and either | - If there are no "byMonth" or "byWeekNo" properties, and | |||
there is a byMonthDay property or there is no byDay | either there is a "byMonthDay" property or there is no | |||
property: Add a byMonth property with the sole value being | "byDay" property, add a "byMonth" property with the sole | |||
the month of the initial date-time. | value being the month of the initial date-time. | |||
+ If there is no byMonthDay, byWeekNo or byDay properties: | - If there are no "byMonthDay", "byWeekNo", or "byDay" | |||
Add a byMonthDay property with the sole value being the | properties, add a "byMonthDay" property with the sole value | |||
day-of-the-month of the initial date-time. | being the day of the month of the initial date-time. | |||
+ If there is a byWeekNo property and no byMonthDay or byDay | - If there is a "byWeekNo" property and no "byMonthDay" or | |||
properties: Add a byDay property with the sole value being | "byDay" properties, add a "byDay" property with the sole | |||
the day-of-the-week of the initial date-time. | value being the day of the week of the initial date-time. | |||
4.3.3. excludedRecurrenceRules | 4.3.4. excludedRecurrenceRules | |||
Type: "RecurrenceRule[]" (optional). | Type: "RecurrenceRule[]" (optional) | |||
Defines a set of recurrence rules (repeating patterns) for date-times | This defines a set of recurrence rules (repeating patterns) for date- | |||
on which the object will not occur. The rules are interpreted the | times on which the object will not occur. The rules are interpreted | |||
same as for the "recurrenceRules" property (see Section 4.3.2), with | the same as for the "recurrenceRules" property (see Section 4.3.3), | |||
the exception that the initial date-time to which the rule is applied | with the exception that the initial date-time to which the rule is | |||
(the "start" date-time for events; the "start" or "due" date-time for | applied (the "start" date-time for events or the "start" or "due" | |||
tasks) is only considered part of the expansion if it matches the | date-time for tasks) is only considered part of the expansion if it | |||
rule. The resulting set of date-times are then removed from those | matches the rule. The resulting set of date-times is then removed | |||
generated by the recurrenceRules property, as described in | from those generated by the "recurrenceRules" property, as described | |||
Section 4.3. | in Section 4.3. | |||
4.3.4. recurrenceOverrides | 4.3.5. recurrenceOverrides | |||
Type: "LocalDateTime[PatchObject]" (optional). | Type: "LocalDateTime[PatchObject]" (optional) | |||
A map of the recurrence ids (the date-time produced by the recurrence | Maps recurrence ids (the date-time produced by the recurrence rule) | |||
rule) to an object of patches to apply to the generated occurrence | to the overridden properties of the recurrence instance. | |||
object. | ||||
If the recurrence id does not match a date-time from the recurrence | If the recurrence id does not match a date-time from the recurrence | |||
rule (or no rule is specified), it is to be treated as an additional | rule (or no rule is specified), it is to be treated as an additional | |||
occurrence (like an RDATE from iCalendar). The patch object may | occurrence (like an RDATE from iCalendar). The patch object may | |||
often be empty in this case. | often be empty in this case. | |||
If the patch object defines the "excluded" property of an occurrence | If the patch object defines the "excluded" property of an occurrence | |||
to be true, this occurrence is omitted from the final set of | to be true, this occurrence is omitted from the final set of | |||
recurrences for the calendar object (like an EXDATE from iCalendar). | recurrences for the calendar object (like an EXDATE from iCalendar). | |||
Such a patch object MUST NOT patch any other property. | Such a patch object MUST NOT patch any other property. | |||
By default, an occurrence inherits all properties from the main | By default, an occurrence inherits all properties from the main | |||
object except the start (or due) date-time, which is shifted to match | object except the start (or due) date-time, which is shifted to match | |||
the recurrence id LocalDateTime. However, individual properties of | the recurrence id LocalDateTime. However, individual properties of | |||
the occurrence can be modified by a patch, or multiple patches. It | the occurrence can be modified by a patch or multiple patches. It is | |||
is valid to patch the "start" property value, and this patch takes | valid to patch the "start" property value, and this patch takes | |||
precedence over the value generated from the recurrence id. Both the | precedence over the value generated from the recurrence id. Both the | |||
recurrence id as well as the patched "start" date-time may occur | recurrence id as well as the patched "start" date-time may occur | |||
before the original JSCalendar object's "start" or "due" date. | before the original JSCalendar object's "start" or "due" date. | |||
A pointer in the PatchObject MUST be ignored if it starts with one of | A pointer in the PatchObject MUST be ignored if it starts with one of | |||
the following prefixes: | the following prefixes: | |||
o @type | * @type | |||
o excludedRecurrenceRules | * excludedRecurrenceRules | |||
o method | * method | |||
o privacy | * privacy | |||
o prodId | * prodId | |||
o recurrenceId | * recurrenceId | |||
o recurrenceOverrides | * recurrenceIdTimeZone | |||
o recurrenceRules | * recurrenceOverrides | |||
o relatedTo | * recurrenceRules | |||
o replyTo | ||||
o uid | * relatedTo | |||
4.3.5. excluded | * replyTo | |||
Type: "Boolean" (optional, default: false). | * sentBy | |||
Defines if this object is an overridden, excluded instance of a | * timeZones | |||
recurring JSCalendar object (see Section 4.3.4). If this property | ||||
* uid | ||||
4.3.6. excluded | ||||
Type: "Boolean" (optional, default: false) | ||||
This defines if this object is an overridden, excluded instance of a | ||||
recurring JSCalendar object (see Section 4.3.5). If this property | ||||
value is true, this calendar object instance MUST be removed from the | value is true, this calendar object instance MUST be removed from the | |||
occurrence expansion. The absence of this property, or the presence | occurrence expansion. The absence of this property, or the presence | |||
of its default value false, indicates that this instance MUST be | of its default value as false, indicates that this instance MUST be | |||
included in the occurrence expansion. | included in the occurrence expansion. | |||
4.4. Sharing and Scheduling Properties | 4.4. Sharing and Scheduling Properties | |||
4.4.1. priority | 4.4.1. priority | |||
Type: "Int" (optional, default: 0). | Type: "Int" (optional, default: 0) | |||
Specifies a priority for the calendar object. This may be used as | This specifies a priority for the calendar object. This may be used | |||
part of scheduling systems to help resolve conflicts for a time | as part of scheduling systems to help resolve conflicts for a time | |||
period. | period. | |||
The priority is specified as an integer in the range 0 to 9. A value | The priority is specified as an integer in the range 0 to 9. A value | |||
of 0 specifies an undefined priority, for which the treatment will | of 0 specifies an undefined priority, for which the treatment will | |||
vary by situation. A value of 1 is the highest priority. A value of | vary by situation. A value of 1 is the highest priority. A value of | |||
2 is the second highest priority. Subsequent numbers specify a | 2 is the second highest priority. Subsequent numbers specify a | |||
decreasing ordinal priority. A value of 9 is the lowest priority. | decreasing ordinal priority. A value of 9 is the lowest priority. | |||
Other integer values are reserved for future use. | Other integer values are reserved for future use. | |||
4.4.2. freeBusyStatus | 4.4.2. freeBusyStatus | |||
Type: "String" (optional, default: "busy"). | Type: "String" (optional, default: "busy") | |||
Specifies how this calendar object should be treated when calculating | This specifies how this calendar object should be treated when | |||
free-busy state. This MUST be one of the following values, another | calculating free-busy state. This MUST be one of the following | |||
value registered in the IANA JSCalendar Enum Values registry, or a | values, another value registered in the IANA "JSCalendar Enum Values" | |||
vendor-specific value (see Section 3.3): | registry, or a vendor-specific value (see Section 3.3): | |||
o "free": The object should be ignored when calculating whether the | "free": The object should be ignored when calculating whether the | |||
user is busy. | user is busy. | |||
o "busy": The object should be included when calculating whether the | "busy": The object should be included when calculating whether the | |||
user is busy. | user is busy. | |||
4.4.3. privacy | 4.4.3. privacy | |||
Type: "String" (optional, default: "public"). | Type: "String" (optional, default: "public") | |||
Calendar objects are normally collected together and may be shared | Calendar objects are normally collected together and may be shared | |||
with other users. The privacy property allows the object owner to | with other users. The privacy property allows the object owner to | |||
indicate that it should not be shared, or should only have the time | indicate that it should not be shared or should only have the time | |||
information shared but the details withheld. Enforcement of the | information shared but the details withheld. Enforcement of the | |||
restrictions indicated by this property are up to the API via which | restrictions indicated by this property is up to the API via which | |||
this object is accessed. | this object is accessed. | |||
This property MUST NOT affect the information sent to scheduled | This property MUST NOT affect the information sent to scheduled | |||
participants; it is only interpreted by protocols that share the | participants; it is only interpreted by protocols that share the | |||
calendar objects belonging to one user with other users. | calendar objects belonging to one user with other users. | |||
The value MUST be one of the following values, another value | The value MUST be one of the following values, another value | |||
registered in the IANA JSCalendar Enum Values registry, or a vendor- | registered in the IANA "JSCalendar Enum Values" registry, or a | |||
specific value (see Section 3.3). Any value the client or server | vendor-specific value (see Section 3.3). Any value the client or | |||
doesn't understand should be preserved but treated as equivalent to | server doesn't understand should be preserved but treated as | |||
"private". | equivalent to "private". | |||
o "public": The full details of the object are visible to those whom | "public": The full details of the object are visible to those whom | |||
the object's calendar is shared with. | the object's calendar is shared with. | |||
o "private": The details of the object are hidden; only the basic | "private": The details of the object are hidden; only the basic time | |||
time and metadata is shared. The following properties MAY be | and metadata are shared. The following properties MAY be shared; | |||
shared, any other properties MUST NOT be shared: | any other properties MUST NOT be shared: | |||
* @type | * @type | |||
* created | * created | |||
* due | * due | |||
* duration | * duration | |||
* estimatedDuration | * estimatedDuration | |||
* freeBusyStatus | * freeBusyStatus | |||
* privacy | * privacy | |||
* recurrenceOverrides. Only patches which apply to another | * recurrenceOverrides (Only patches that apply to another | |||
permissible property are allowed to be shared. | permissible property are allowed to be shared.) | |||
* sequence | * sequence | |||
* showWithoutTime | * showWithoutTime | |||
* start | * start | |||
* timeZone | * timeZone | |||
* timeZones | * timeZones | |||
* uid | * uid | |||
* updated | * updated | |||
skipping to change at page 35, line 14 ¶ | skipping to change at line 1647 ¶ | |||
* start | * start | |||
* timeZone | * timeZone | |||
* timeZones | * timeZones | |||
* uid | * uid | |||
* updated | * updated | |||
o "secret": The object is hidden completely (as though it did not | "secret": The object is hidden completely (as though it did not | |||
exist) when the calendar this object is in is shared. | exist) when the calendar this object is in is shared. | |||
4.4.4. replyTo | 4.4.4. replyTo | |||
Type: "String[String]" (optional). | Type: "String[String]" (optional) | |||
Represents methods by which participants may submit their response to | This represents methods by which participants may submit their | |||
the organizer of the calendar object. The keys in the property value | response to the organizer of the calendar object. The keys in the | |||
are the available methods and MUST only contain ASCII alphanumeric | property value are the available methods and MUST only contain ASCII | |||
characters (A-Za-z0-9). The value is a URI for the method specified | alphanumeric characters (A-Za-z0-9). The value is a URI for the | |||
in the key. Future methods may be defined in future specifications | method specified in the key. Future methods may be defined in future | |||
and registered with IANA; a calendar client MUST ignore any method it | specifications and registered with IANA; a calendar client MUST | |||
does not understand, but MUST preserve the method key and URI. This | ignore any method it does not understand but MUST preserve the method | |||
property MUST be omitted if no method is defined (rather than being | key and URI. This property MUST be omitted if no method is defined | |||
specified as an empty object). | (rather than being specified as an empty object). | |||
The following methods are defined: | The following methods are defined: | |||
o "imip": The organizer accepts an iMIP [RFC6047] response at this | "imip": The organizer accepts an iCalendar Message-Based | |||
email address. The value MUST be a "mailto:" URI. | Interoperability Protocol (iMIP) [RFC6047] response at this email | |||
address. The value MUST be a "mailto:" URI. | ||||
o "web": Opening this URI in a web browser will provide the user | "web": Opening this URI in a web browser will provide the user with | |||
with a page where they can submit a reply to the organizer. The | a page where they can submit a reply to the organizer. The value | |||
value MUST be a URL using the "https:" scheme. | MUST be a URL using the "https:" scheme. | |||
o "other": The organizer is identified by this URI but the method | "other": The organizer is identified by this URI, but the method for | |||
for submitting the response is undefined. | submitting the response is undefined. | |||
4.4.5. participants | 4.4.5. sentBy | |||
Type: "Id[Participant]" (optional). | Type: "String" (optional) | |||
A map of participant ids to participants, describing their | This is the email address in the "From" header of the email in which | |||
this calendar object was received. This is only relevant if the | ||||
calendar object is received via iMIP or as an attachment to a | ||||
message. If set, the value MUST be a valid "addr-spec" value as | ||||
defined in Section 3.4.1 of [RFC5322]. | ||||
4.4.6. participants | ||||
Type: "Id[Participant]" (optional) | ||||
This is a map of participant ids to participants, describing their | ||||
participation in the calendar object. | participation in the calendar object. | |||
If this property is set and any participant has a sendTo property, | If this property is set and any participant has a "sendTo" property, | |||
then the "replyTo" property of this calendar object MUST define at | then the "replyTo" property of this calendar object MUST define at | |||
least one reply method. | least one reply method. | |||
A Participant object has the following properties: | A Participant object has the following properties: | |||
o @type: "String" (mandatory) | @type: "String" (mandatory) | |||
This specifies the type of this object. This MUST be | ||||
Specifies the type of this object. This MUST be "Participant". | "Participant". | |||
o name: "String" (optional) | ||||
The display name of the participant (e.g., "Joe Bloggs"). | ||||
o email: "String" (optional) | ||||
The email address for the participant. | ||||
o description: "String" (optional). | name: "String" (optional) | |||
This is the display name of the participant (e.g., "Joe Bloggs"). | ||||
A plain text description of this participant. For example, this | email: "String" (optional) | |||
may include more information about their role in the event or how | This is the email address to use to contact the participant or, | |||
best to contact them. | for example, match with an address book entry. If set, the value | |||
MUST be a valid "addr-spec" value as defined in Section 3.4.1 of | ||||
[RFC5322]. | ||||
o sendTo: "String[String]" (optional) | description: "String" (optional) | |||
This is a plain-text description of this participant. For | ||||
example, this may include more information about their role in the | ||||
event or how best to contact them. | ||||
Represents methods by which the participant may receive the | sendTo: "String[String]" (optional) | |||
This represents methods by which the participant may receive the | ||||
invitation and updates to the calendar object. | invitation and updates to the calendar object. | |||
The keys in the property value are the available methods and MUST | The keys in the property value are the available methods and MUST | |||
only contain ASCII alphanumeric characters (A-Za-z0-9). The value | only contain ASCII alphanumeric characters (A-Za-z0-9). The value | |||
is a URI for the method specified in the key. Future methods may | is a URI for the method specified in the key. Future methods may | |||
be defined in future specifications and registered with IANA; a | be defined in future specifications and registered with IANA; a | |||
calendar client MUST ignore any method it does not understand, but | calendar client MUST ignore any method it does not understand but | |||
MUST preserve the method key and URI. This property MUST be | MUST preserve the method key and URI. This property MUST be | |||
omitted if no method is defined (rather than being specified as an | omitted if no method is defined (rather than being specified as an | |||
empty object). | empty object). | |||
The following methods are defined: | The following methods are defined: | |||
* "imip": The participant accepts an iMIP [RFC6047] request at | "imip": The participant accepts an iMIP [RFC6047] request at this | |||
this email address. The value MUST be a "mailto:" URI. It MAY | email address. The value MUST be a "mailto:" URI. It MAY be | |||
be different from the value of the participant's "email" | different from the value of the participant's "email" property. | |||
property. | ||||
* "other": The participant is identified by this URI but the | "other": The participant is identified by this URI, but the | |||
method for submitting the invitation is undefined. | method for submitting the invitation is undefined. | |||
o kind: "String" (optional) | kind: "String" (optional) | |||
This is what kind of entity this participant is, if known. | ||||
What kind of entity this participant is, if known. | ||||
This MUST be one of the following values, another value registered | This MUST be one of the following values, another value registered | |||
in the IANA JSCalendar Enum Values registry, or a vendor-specific | in the IANA "JSCalendar Enum Values" registry, or a vendor- | |||
value (see Section 3.3). Any value the client or server doesn't | specific value (see Section 3.3). Any value the client or server | |||
understand should be treated the same as if this property is | doesn't understand should be treated the same as if this property | |||
omitted. | is omitted. | |||
* "individual": a single person | ||||
* "group": a collection of people invited as a whole | "individual": a single person | |||
* "location": a physical location that needs to be scheduled, | "group": a collection of people invited as a whole | |||
e.g., a conference room | ||||
* "resource": a non-human resource other than a location, such as | "location": a physical location that needs to be scheduled, e.g., | |||
a projector | a conference room | |||
o roles: "String[Boolean]" (mandatory) | "resource": a non-human resource other than a location, such as a | |||
projector | ||||
A set of roles that this participant fulfills. | roles: "String[Boolean]" (mandatory) | |||
This is a set of roles that this participant fulfills. | ||||
At least one role MUST be specified for the participant. The keys | At least one role MUST be specified for the participant. The keys | |||
in the set MUST be one of the following values, another value | in the set MUST be one of the following values, another value | |||
registered in the IANA JSCalendar Enum Values registry, or a | registered in the IANA "JSCalendar Enum Values" registry, or a | |||
vendor-specific value (see Section 3.3): | vendor-specific value (see Section 3.3): | |||
* "owner": The participant is an owner of the object. This | "owner": The participant is an owner of the object. This | |||
signifies they have permission to make changes to it that | signifies they have permission to make changes to it that | |||
affect the other participants. Non-owner participants may only | affect the other participants. Nonowner participants may only | |||
change properties that just affect themselves (for example | change properties that affect only themselves (for example, | |||
setting their own alerts or changing their rsvp status). | setting their own alerts or changing their RSVP status). | |||
* "attendee": The participant is expected to be present at the | "attendee": The participant is expected to be present at the | |||
event. | event. | |||
* "optional": The participant's involvement with the event is | "optional": The participant's involvement with the event is | |||
optional. This is expected to be primarily combined with the | optional. This is expected to be primarily combined with the | |||
"attendee" role. | "attendee" role. | |||
* "informational": The participant is copied for informational | "informational": The participant is copied for informational | |||
reasons, and is not expected to attend. | reasons and is not expected to attend. | |||
* "chair": The participant is in charge of the event/task when it | "chair": The participant is in charge of the event/task when it | |||
occurs. | occurs. | |||
* "contact": The participant is someone that may be contacted for | "contact": The participant is someone that may be contacted for | |||
information about the event. | information about the event. | |||
The value for each key in the map MUST be true. It is expected | The value for each key in the map MUST be true. It is expected | |||
that no more than one of the roles "attendee" and "informational" | that no more than one of the roles "attendee" and "informational" | |||
be present; if more than one are given, "attendee" takes | be present; if more than one are given, "attendee" takes | |||
precedence over "informational". Roles that are unknown to the | precedence over "informational". Roles that are unknown to the | |||
implementation MUST be preserved. | implementation MUST be preserved. | |||
o locationId: "String" (optional) | locationId: "Id" (optional) | |||
This is the location at which this participant is expected to be | ||||
The location at which this participant is expected to be | ||||
attending. | attending. | |||
If the value does not correspond to any location id in the | If the value does not correspond to any location id in the | |||
"locations" property of the JSCalendar object, this MUST be | "locations" property of the JSCalendar object, this MUST be | |||
treated the same as if the participant's locationId were omitted. | treated the same as if the participant's locationId were omitted. | |||
o language: "String" (optional) | language: "String" (optional) | |||
This is the language tag, as defined in [BCP47], that best | ||||
The language tag as defined in [RFC5646] that best describes the | describes the participant's preferred language, if known. | |||
participant's preferred language, if known. | ||||
o participationStatus: "String" (optional, default: "needs-action") | ||||
The participation status, if any, of this participant. | participationStatus: "String" (optional, default: "needs-action") | |||
This is the participation status, if any, of this participant. | ||||
The value MUST be one of the following values, another value | The value MUST be one of the following values, another value | |||
registered in the IANA JSCalendar Enum Values registry, or a | registered in the IANA "JSCalendar Enum Values" registry, or a | |||
vendor-specific value (see Section 3.3): | vendor-specific value (see Section 3.3): | |||
* "needs-action": No status yet set by the participant. | "needs-action": No status has yet been set by the participant. | |||
* "accepted": The invited participant will participate. | "accepted": The invited participant will participate. | |||
* "declined": The invited participant will not participate. | "declined": The invited participant will not participate. | |||
* "tentative": The invited participant may participate. | "tentative": The invited participant may participate. | |||
* "delegated": The invited participant has delegated their | "delegated": The invited participant has delegated their | |||
attendance to another participant, as specified in the | attendance to another participant, as specified in the | |||
delegatedTo property. | "delegatedTo" property. | |||
o participationComment: "String" (optional) | ||||
A note from the participant to explain their participation status. | participationComment: "String" (optional) | |||
This is a note from the participant to explain their participation | ||||
status. | ||||
o expectReply: "Boolean" (optional, default: false) | expectReply: "Boolean" (optional, default: false) | |||
If true, the organizer is expecting the participant to notify them | If true, the organizer is expecting the participant to notify them | |||
of their participation status. | of their participation status. | |||
o scheduleAgent: "String" (optional, default: "server") | scheduleAgent: "String" (optional, default: "server") | |||
This is who is responsible for sending scheduling messages with | ||||
Who is responsible for sending scheduling messages with this | this calendar object to the participant. | |||
calendar object to the participant. | ||||
The value MUST be one of the following values, another value | The value MUST be one of the following values, another value | |||
registered in the IANA JSCalendar Enum Values registry, or a | registered in the IANA "JSCalendar Enum Values" registry, or a | |||
vendor-specific value (see Section 3.3): | vendor-specific value (see Section 3.3): | |||
* "server": The calendar server will send the scheduling | "server": The calendar server will send the scheduling messages. | |||
messages. | ||||
* "client": The calendar client will send the scheduling | "client": The calendar client will send the scheduling messages. | |||
messages. | ||||
* "none": No scheduling messages are to be sent to this | "none": No scheduling messages are to be sent to this | |||
participant. | participant. | |||
o scheduleForceSend: "Boolean" (optional, default: false) | scheduleForceSend: "Boolean" (optional, default: false) | |||
A client may set the property on a participant to true to request | A client may set the property on a participant to true to request | |||
that the server send a scheduling message to the participant when | that the server send a scheduling message to the participant when | |||
it would not normally do so (e.g. if no significant change is made | it would not normally do so (e.g., if no significant change is | |||
the object or the scheduleAgent is set to client). The property | made the object or the scheduleAgent is set to client). The | |||
MUST NOT be stored in the JSCalendar object on the server or | property MUST NOT be stored in the JSCalendar object on the server | |||
appear in a scheduling message. | or appear in a scheduling message. | |||
o scheduleSequence: "UnsignedInt" (optional, default: 0) | ||||
The sequence number of the last response from the participant. If | scheduleSequence: "UnsignedInt" (optional, default: 0) | |||
defined, this MUST be a non-negative integer. | This is the sequence number of the last response from the | |||
participant. If defined, this MUST be a nonnegative integer. | ||||
This can be used to determine whether the participant has sent a | This can be used to determine whether the participant has sent a | |||
new response following significant changes to the calendar object, | new response following significant changes to the calendar object | |||
and to determine if future responses are responding to a current | and to determine if future responses are responding to a current | |||
or older view of the data. | or older view of the data. | |||
o scheduleStatus: "String[]" (optional) | scheduleStatus: "String[]" (optional) | |||
This is a list of status codes, returned from the processing of | ||||
A list of status codes, as defined in Section 3.8.8.3 of | the most recent scheduling message sent to this participant. The | |||
[RFC5545], returned from the processing of the most recent | status codes MUST be valid "statcode" values as defined in the | |||
scheduling message sent to this participant. | ABNF in Section 3.8.8.3 of [RFC5545]. | |||
Servers MUST only add or change this property when they send a | Servers MUST only add or change this property when they send a | |||
scheduling message to the participant. Clients SHOULD NOT change | scheduling message to the participant. Clients SHOULD NOT change | |||
or remove this property if it was provided by the server. Clients | or remove this property if it was provided by the server. Clients | |||
MAY add, change, or remove the property for participants where the | MAY add, change, or remove the property for participants where the | |||
client is handling the scheduling. | client is handling the scheduling. | |||
This property MUST NOT be included in scheduling messages. | This property MUST NOT be included in scheduling messages. | |||
o scheduleUpdated: "UTCDateTime" (optional) | scheduleUpdated: "UTCDateTime" (optional) | |||
This is the timestamp for the most recent response from this | ||||
The timestamp for the most recent response from this participant. | participant. | |||
This is the "updated" property of the last response when using | This is the "updated" property of the last response when using | |||
iTIP. It can be compared to the "updated" property in future | iTIP. It can be compared to the "updated" property in future | |||
responses to detect and discard older responses delivered out of | responses to detect and discard older responses delivered out of | |||
order. | order. | |||
o invitedBy: "String" (optional) | sentBy: "String" (optional) | |||
This is the email address in the "From" header of the email that | ||||
The participant id of the participant who invited this one, if | last updated this participant via iMIP. This SHOULD only be set | |||
known. | if the email address is different to that in the mailto URI of | |||
this participant's "imip" method in the "sendTo" property (i.e., | ||||
the response was received from a different address to that which | ||||
the invitation was sent to). If set, the value MUST be a valid | ||||
"addr-spec" value as defined in Section 3.4.1 of [RFC5322]. | ||||
o delegatedTo: "String[Boolean]" (optional) | invitedBy: "Id" (optional) | |||
This is the id of the participant who added this participant to | ||||
the event/task, if known. | ||||
A set of participant ids that this participant has delegated their | delegatedTo: "Id[Boolean]" (optional) | |||
participation to. Each key in the set MUST be the id of a | This is set of participant ids that this participant has delegated | |||
their participation to. Each key in the set MUST be the id of a | ||||
participant. The value for each key in the map MUST be true. If | participant. The value for each key in the map MUST be true. If | |||
there are no delegates, this MUST be omitted (rather than | there are no delegates, this MUST be omitted (rather than | |||
specified as an empty set). | specified as an empty set). | |||
o delegatedFrom: "String[Boolean]" (optional) | delegatedFrom: "Id[Boolean]" (optional) | |||
This is a set of participant ids that this participant is acting | ||||
A set of participant ids that this participant is acting as a | as a delegate for. Each key in the set MUST be the id of a | |||
delegate for. Each key in the set MUST be the id of a | ||||
participant. The value for each key in the map MUST be true. If | participant. The value for each key in the map MUST be true. If | |||
there are no delegators, this MUST be omitted (rather than | there are no delegators, this MUST be omitted (rather than | |||
specified as an empty set). | specified as an empty set). | |||
o memberOf: "String[Boolean]" (optional) | memberOf: "Id[Boolean]" (optional) | |||
This is a set of group participants that were invited to this | ||||
calendar object, which caused this participant to be invited due | ||||
to their membership in the group(s). Each key in the set MUST be | ||||
the id of a participant. The value for each key in the map MUST | ||||
be true. If there are no groups, this MUST be omitted (rather | ||||
than specified as an empty set). | ||||
A set of group participants that were invited to this calendar | links: "Id[Link]" (optional) | |||
object, which caused this participant to be invited due to their | This is a map of link ids to Link objects, representing external | |||
membership in the group(s). Each key in the set MUST be the id of | resources associated with this participant, for example, a vCard | |||
a participant. The value for each key in the map MUST be true. | or image. If there are no links, this MUST be omitted (rather | |||
If there are no groups, this MUST be omitted (rather than | than specified as an empty set). | |||
specified as an empty set). | ||||
o links: "Id[Link]" (optional) | progress: "String" (optional; only allowed for participants of a | |||
A map of link ids to Link objects, representing external resources | Task) | |||
associated with this participant, for example a vCard or image. | This represents the progress of the participant for this task. It | |||
If there are no links, this MUST be omitted (rather than specified | MUST NOT be set if the "participationStatus" of this participant | |||
as an empty set). | is any value other than "accepted". See Section 5.2.5 for allowed | |||
values and semantics. | ||||
o progress: "String" (optional; only allowed for participants of a | progressUpdated: "UTCDateTime" (optional; only allowed for | |||
JSTask). Represents the progress of the participant for this | participants of a Task) | |||
task. It MUST NOT be set if the "participationStatus" of this | This specifies the date-time the "progress" property was last set | |||
participant is any value other than "accepted". See Section 5.2.5 | on this participant. See Section 5.2.6 for allowed values and | |||
for allowed values and semantics. | semantics. | |||
o progressUpdated: "UTCDateTime" (optional; only allowed for | percentComplete: "UnsignedInt" (optional; only allowed for | |||
participants of a JSTask). Specifies the date-time the progress | participants of a Task) | |||
property was last set on this participant. See Section 5.2.6 for | This represents the percent completion of the participant for this | |||
allowed values and semantics. | task. The property value MUST be a positive integer between 0 and | |||
100. | ||||
o percentComplete: "UnsignedInt" (optional; only allowed for | 4.4.7. requestStatus | |||
participants of a JSTask). Represents the percent completion of | ||||
the participant for this task. The property value MUST be a | Type: "String" (optional) | |||
positive integer between 0 and 100. | ||||
A request status as returned from processing the most recent | ||||
scheduling request for this JSCalendar object. The allowed values | ||||
are defined by the ABNF definitions of "statcode", "statdesc" and | ||||
"extdata" in Section 3.8.8.3 of [RFC5545] and the following ABNF | ||||
[RFC5234]: | ||||
reqstatus = statcode ";" statdesc [";" extdata] | ||||
Servers MUST only add or change this property when they performe a | ||||
scheduling action. Clients SHOULD NOT change or remove this property | ||||
if it was provided by the server. Clients MAY add, change, or remove | ||||
the property when the client is handling the scheduling. | ||||
This property MUST only be included in scheduling messages according | ||||
to the rules defined for the REQUEST-STATUS iCalendar property in | ||||
[RFC5546]. | ||||
4.5. Alerts Properties | 4.5. Alerts Properties | |||
4.5.1. useDefaultAlerts | 4.5.1. useDefaultAlerts | |||
Type: "Boolean" (optional, default: false). | Type: "Boolean" (optional, default: false) | |||
If true, use the user's default alerts and ignore the value of the | If true, use the user's default alerts and ignore the value of the | |||
"alerts" property. Fetching user defaults is dependent on the API | "alerts" property. Fetching user defaults is dependent on the API | |||
from which this JSCalendar object is being fetched, and is not | from which this JSCalendar object is being fetched and is not defined | |||
defined in this specification. If an implementation cannot determine | in this specification. If an implementation cannot determine the | |||
the user's default alerts, or none are set, it MUST process the | user's default alerts, or none are set, it MUST process the "alerts" | |||
alerts property as if "useDefaultAlerts" is set to false. | property as if "useDefaultAlerts" is set to false. | |||
4.5.2. alerts | 4.5.2. alerts | |||
Type: "Id[Alert]" (optional). | Type: "Id[Alert]" (optional) | |||
A map of alert ids to Alert objects, representing alerts/reminders to | ||||
display or send to the user for this calendar object. | ||||
An Alert Object has the following properties: | ||||
o @type: "String" (mandatory) | This is a map of alert ids to Alert objects, representing alerts/ | |||
reminders to display or send to the user for this calendar object. | ||||
Specifies the type of this object. This MUST be "Alert". | An Alert object has the following properties: | |||
o trigger: "OffsetTrigger|AbsoluteTrigger|UnknownTrigger" | @type: "String" (mandatory) | |||
(mandatory) | This specifies the type of this object. This MUST be "Alert". | |||
Defines when to trigger the alert. New types may be defined in | trigger: "OffsetTrigger|AbsoluteTrigger|UnknownTrigger" | |||
future documents. | (mandatory) | |||
This defines when to trigger the alert. New types may be defined | ||||
in future documents. | ||||
An "OffsetTrigger" object has the following properties: | An "OffsetTrigger" object has the following properties: | |||
* @type: "String" (mandatory) | @type: "String" (mandatory) | |||
This specifies the type of this object. This MUST be | ||||
Specifies the type of this object. This MUST be | ||||
"OffsetTrigger". | "OffsetTrigger". | |||
* offset: "SignedDuration" (mandatory). | offset: "SignedDuration" (mandatory) | |||
This defines the offset at which to trigger the alert relative | ||||
Defines the offset at which to trigger the alert relative to | to the time property defined in the "relativeTo" property of | |||
the time property defined in the "relativeTo" property of the | the alert. Negative durations signify alerts before the time | |||
alert. Negative durations signify alerts before the time | property; positive durations signify alerts after the time | |||
property, positive durations signify alerts after. | property. | |||
* relativeTo: "String" (optional, default: "start") | ||||
Specifies the time property that the alert offset is relative | relativeTo: "String" (optional, default: "start") | |||
to. The value MUST be one of: | This specifies the time property that the alert offset is | |||
relative to. The value MUST be one of the following: | ||||
+ "start": triggers the alert relative to the start of the | "start": triggers the alert relative to the start of the | |||
calendar object | calendar object | |||
+ "end": triggers the alert relative to the end/due time of | "end": triggers the alert relative to the end/due time of the | |||
the calendar object | calendar object | |||
An "AbsoluteTrigger" object has the following properties: | An "AbsoluteTrigger" object has the following properties: | |||
* @type: "String" (mandatory) | @type: "String" (mandatory) | |||
This specifies the type of this object. This MUST be | ||||
Specifies the type of this object. This MUST be | ||||
"AbsoluteTrigger". | "AbsoluteTrigger". | |||
* when: "UTCDateTime" (mandatory). | when: "UTCDateTime" (mandatory) | |||
This defines a specific UTC date-time when the alert is | ||||
Defines a specific UTC date-time when the alert is triggered. | triggered. | |||
An "UnknownTrigger" object is an object that contains a "@type" | An "UnknownTrigger" object is an object that contains an "@type" | |||
property whose value is not recognized (i.e., not "OffsetTrigger" | property whose value is not recognized (i.e., not "OffsetTrigger" | |||
or "AbsoluteTrigger"), plus zero or more other properties. This | or "AbsoluteTrigger") plus zero or more other properties. This is | |||
is for compatibility with client extensions and future | for compatibility with client extensions and future | |||
specifications. Implementations SHOULD NOT trigger for trigger | specifications. Implementations SHOULD NOT trigger for trigger | |||
types they do not understand, but MUST preserve them. | types they do not understand but MUST preserve them. | |||
o acknowledged: "UTCDateTime" (optional) | ||||
acknowledged: "UTCDateTime" (optional) | ||||
This records when an alert was last acknowledged. This is set | This records when an alert was last acknowledged. This is set | |||
when the user has dismissed the alert; other clients that sync | when the user has dismissed the alert; other clients that sync | |||
this property SHOULD automatically dismiss or suppress duplicate | this property SHOULD automatically dismiss or suppress duplicate | |||
alerts (alerts with the same alert id that triggered on or before | alerts (alerts with the same alert id that triggered on or before | |||
this date-time). | this date-time). | |||
For a recurring calendar object, setting the "acknowledged" | For a recurring calendar object, setting the "acknowledged" | |||
property MUST NOT add a new override to the "recurrenceOverrides" | property MUST NOT add a new override to the "recurrenceOverrides" | |||
property. If the alert is not already overridden, the | property. If the alert is not already overridden, the | |||
acknowledged property MUST be set on the alert in the master | "acknowledged" property MUST be set on the alert in the base | |||
event/task. | event/task. | |||
Certain kinds of alert action may not provide feedback as to when | Certain kinds of alert action may not provide feedback as to when | |||
the user sees them, for example email based alerts. For those | the user sees them, for example, email-based alerts. For those | |||
kinds of alerts, this property MUST be set immediately when the | kinds of alerts, this property MUST be set immediately when the | |||
alert is triggered and the action successfully carried out. | alert is triggered and the action is successfully carried out. | |||
o relatedTo: "String[Relation]" (optional) | ||||
Relates this alert to other alerts in the same JSCalendar object. | ||||
If the user wishes to snooze an alert, the application MUST create | ||||
an alert to trigger after snoozing. This new snooze alert MUST | ||||
set a parent relation to the identifier of the original alert. | ||||
o action: "String" (optional, default: "display") | relatedTo: "String[Relation]" (optional) | |||
This relates this alert to other alerts in the same JSCalendar | ||||
object. If the user wishes to snooze an alert, the application | ||||
MUST create an alert to trigger after snoozing. This new snooze | ||||
alert MUST set a parent relation to the identifier of the original | ||||
alert. | ||||
Describes how to alert the user. | action: "String" (optional, default: "display") | |||
This describes how to alert the user. | ||||
The value MUST be at most one of the following values, a value | The value MUST be at most one of the following values, a value | |||
registered in the IANA JSCalendar Enum Values registry, or a | registered in the IANA "JSCalendar Enum Values" registry, or a | |||
vendor-specific value (see Section 3.3): | vendor-specific value (see Section 3.3): | |||
* "display": The alert should be displayed as appropriate for the | "display": The alert should be displayed as appropriate for the | |||
current device and user context. | current device and user context. | |||
* "email": The alert should trigger an email sent out to the | "email": The alert should trigger an email sent out to the user, | |||
user, notifying about the alert. This action is typically only | notifying them of the alert. This action is typically only | |||
appropriate for server implementations. | appropriate for server implementations. | |||
4.6. Multilingual Properties | 4.6. Multilingual Properties | |||
4.6.1. localizations | 4.6.1. localizations | |||
Type: "String[PatchObject]" (optional). | Type: "String[PatchObject]" (optional) | |||
A map of language tags [RFC5646] to patch objects, which localize the | A map where each key is a language tag [BCP47], and the corresponding | |||
calendar object into the locale of the respective language tag. | value is a set of patches to apply to the calendar object in order to | |||
localize it into that locale. | ||||
See the description of PatchObject (Section 1.4.9) for the structure | See the description of PatchObject (Section 1.4.9) for the structure | |||
of the PatchObject. The patches are applied to the top-level | of the PatchObject. The patches are applied to the top-level | |||
calendar object. In addition, the "locale" property of the patched | calendar object. In addition, the "locale" property of the patched | |||
object is set to the language tag. All pointers for patches MUST end | object is set to the language tag. All pointers for patches MUST end | |||
with one of the following suffixes; any patch that does not follow | with one of the following suffixes; any patch that does not follow | |||
this MUST be ignored unless otherwise specified in a future RFC: | this MUST be ignored unless otherwise specified in a future RFC: | |||
o title | * title | |||
o description | * description | |||
o name | * name | |||
A patch MUST NOT have the prefix "recurrenceOverrides"; any | A patch MUST NOT have the prefix "recurrenceOverrides"; any | |||
localization of the override MUST be a patch to the localizations | localization of the override MUST be a patch to the "localizations" | |||
property inside the override instead. For example, a patch to | property inside the override instead. For example, a patch to | |||
"locations/abcd1234/title" is permissible, but a patch to "uid" or | "locations/abcd1234/title" is permissible, but a patch to "uid" or | |||
"recurrenceOverrides/2020-01-05T14:00:00/title" is not. | "recurrenceOverrides/2020-01-05T14:00:00/title" is not. | |||
Note that this specification does not define how to maintain validity | Note that this specification does not define how to maintain validity | |||
of localized content. For example, a client application changing a | of localized content. For example, a client application changing a | |||
JSCalendar object's title property might also need to update any | JSCalendar object's "title" property might also need to update any | |||
localizations of this property. Client implementations SHOULD | localizations of this property. Client implementations SHOULD | |||
provide the means to manage localizations, but how to achieve this is | provide the means to manage localizations, but how to achieve this is | |||
specific to the application's workflow and requirements. | specific to the application's workflow and requirements. | |||
4.7. Time Zone Properties | 4.7. Time Zone Properties | |||
4.7.1. timeZone | 4.7.1. timeZone | |||
Type: "TimeZoneId|null" (optional, default: null). | Type: "TimeZoneId|null" (optional, default: null) | |||
Identifies the time zone the object is scheduled in, or null for | This identifies the time zone the object is scheduled in or is null | |||
floating time. This is either a name from the IANA Time Zone | for floating time. This is either a name from the IANA Time Zone | |||
Database [TZDB] or the TimeZoneId of a custom time zone from the | Database [TZDB] or the TimeZoneId of a custom time zone from the | |||
"timeZones" property (Section 4.7.2). If omitted, this MUST be | "timeZones" property (Section 4.7.2). If omitted, this MUST be | |||
presumed to be null (i.e., floating time). | presumed to be null (i.e., floating time). | |||
4.7.2. timeZones | 4.7.2. timeZones | |||
Type: "TimeZoneId[TimeZone]" (optional). | Type: "TimeZoneId[TimeZone]" (optional) | |||
Maps identifiers of custom time zones to their time zone definitions. | This maps identifiers of custom time zones to their time zone | |||
The following restrictions apply for each key in the map: | definitions. The following restrictions apply for each key in the | |||
map: | ||||
o To avoid conflict with names in the IANA Time Zone Database | * To avoid conflict with names in the IANA Time Zone Database | |||
[TZDB], it MUST start with the "/" character. | [TZDB], it MUST start with the "/" character. | |||
o It MUST be a valid "paramtext" value as specified in Section 3.1. | * It MUST be a valid "paramtext" value, as specified in Section 3.1 | |||
of [RFC5545]. | of [RFC5545]. | |||
o At least one other property in the same JSCalendar object MUST | * At least one other property in the same JSCalendar object MUST | |||
reference a time zone using this identifier (i.e., orphaned time | reference a time zone using this identifier (i.e., orphaned time | |||
zones are not allowed). | zones are not allowed). | |||
An identifier need only be unique to this JSCalendar object. A | An identifier need only be unique to this JSCalendar object. It MAY | |||
JSCalendar object may be part in a hierarchy of other JSCalendar | differ from the "tzId" property value of the TimeZone object it maps | |||
objects (say, a JSEvent is an entry in a JSGroup). In this case, the | to. | |||
A JSCalendar object may be part of a hierarchy of other JSCalendar | ||||
objects (say, an Event is an entry in a Group). In this case, the | ||||
set of time zones is the sum of the time zone definitions of this | set of time zones is the sum of the time zone definitions of this | |||
object and its parent objects. If multiple time zones with the same | object and its parent objects. If multiple time zones with the same | |||
identifier exist, then the definition closest to the calendar object | identifier exist, then the definition closest to the calendar object | |||
in relation to its parents MUST be used. (In context of JSEvent, a | in relation to its parents MUST be used. (In context of Event, a | |||
time zone definition in its timeZones property has precedence over a | time zone definition in its "timeZones" property has precedence over | |||
definition of the same id in the JSGroup). Time zone definitions in | a definition of the same id in the Group). Time zone definitions in | |||
any children of the calendar object MUST be ignored. | any children of the calendar object MUST be ignored. | |||
A TimeZone object maps a VTIMEZONE component from iCalendar [RFC5545] | A TimeZone object maps a VTIMEZONE component from iCalendar, and the | |||
and the semantics are as defined there. A valid time zone MUST | semantics are as defined in [RFC5545]. A valid time zone MUST define | |||
define at least one transition rule in the "standard" or "daylight" | at least one transition rule in the "standard" or "daylight" | |||
property. Its properties are: | property. Its properties are: | |||
o @type: "String" (mandatory) | @type: "String" (mandatory) | |||
This specifies the type of this object. This MUST be "TimeZone". | ||||
Specifies the type of this object. This MUST be "TimeZone". | ||||
o tzId: "String" (mandatory). | ||||
The TZID property from iCalendar. | ||||
o updated: "UTCDateTime" (optional) | ||||
The LAST-MODIFIED property from iCalendar. | ||||
o url: "String" (optional) | ||||
The TZURL property from iCalendar. | ||||
o validUntil: "UTCDateTime" (optional) | tzId: "String" (mandatory) | |||
This is the TZID property from iCalendar. Note that this implies | ||||
that the value MUST be a valid "paramtext" value as specified in | ||||
Section 3.1. of [RFC5545]. | ||||
The TZUNTIL property from iCalendar specified in [RFC7808]. | updated: "UTCDateTime" (optional) | |||
This is the LAST-MODIFIED property from iCalendar. | ||||
o aliases: "String[Boolean]" (optional) | url: "String" (optional) | |||
Maps the TZID-ALIAS-OF properties from iCalendar specified in | This is the TZURL property from iCalendar. | |||
[RFC7808] to a JSON set of aliases. The set is represented as an | ||||
object, with the keys being the aliases. The value for each key | ||||
in the map MUST be true. | ||||
o standard: "TimeZoneRule[]" (optional) | validUntil: "UTCDateTime" (optional) | |||
This is the TZUNTIL property from iCalendar, specified in | ||||
[RFC7808]. | ||||
The STANDARD sub-components from iCalendar. The order MUST be | aliases: "String[Boolean]" (optional) | |||
preserved during conversion. | This maps the TZID-ALIAS-OF properties from iCalendar, specified | |||
in [RFC7808], to a JSON set of aliases. The set is represented as | ||||
an object, with the keys being the aliases. The value for each | ||||
key in the map MUST be true. | ||||
o daylight: "TimeZoneRule[]" (optional). | standard: "TimeZoneRule[]" (optional) | |||
This the STANDARD sub-components from iCalendar. The order MUST | ||||
be preserved during conversion. | ||||
The DAYLIGHT sub-components from iCalendar. The order MUST be | daylight: "TimeZoneRule[]" (optional) | |||
preserved during conversion. | This the DAYLIGHT sub-components from iCalendar. The order MUST | |||
be preserved during conversion. | ||||
A TimeZoneRule object maps a STANDARD or DAYLIGHT sub-component from | A TimeZoneRule object maps a STANDARD or DAYLIGHT sub-component from | |||
iCalendar, with the restriction that at most one recurrence rule is | iCalendar, with the restriction that, at most, one recurrence rule is | |||
allowed per rule. It has the following properties: | allowed per rule. It has the following properties: | |||
o @type: "String" (mandatory) | @type: "String" (mandatory) | |||
This specifies the type of this object. This MUST be | ||||
Specifies the type of this object. This MUST be "TimeZoneRule". | "TimeZoneRule". | |||
o start: "LocalDateTime" (mandatory) | ||||
The DTSTART property from iCalendar. | ||||
o offsetFrom: "String" (mandatory) | ||||
The TZOFFSETFROM property from iCalendar. | ||||
o offsetTo: "String" (mandatory) | ||||
The TZOFFSETTO property from iCalendar. | start: "LocalDateTime" (mandatory) | |||
This is the DTSTART property from iCalendar. | ||||
o recurrenceRules: "RecurrenceRule[]" (optional) | offsetFrom: "String" (mandatory) | |||
This is the TZOFFSETFROM property from iCalendar. | ||||
The RRULE property mapped as specified in Section 4.3.2. During | offsetTo: "String" (mandatory) | |||
recurrence rule evaluation, the "until" property value MUST be | This is the TZOFFSETTO property from iCalendar. | |||
interpreted as a local time in the UTC time zone. | ||||
o recurrenceOverrides: "LocalDateTime[PatchObject]" (optional) | recurrenceRules: "RecurrenceRule[]" (optional) | |||
This is the RRULE property mapped, as specified in Section 4.3.3. | ||||
During recurrence rule evaluation, the "until" property value MUST | ||||
be interpreted as a local time in the UTC time zone. | ||||
Maps the RDATE properties from iCalendar. The set is represented | recurrenceOverrides: "LocalDateTime[PatchObject]" (optional) | |||
as an object, with the keys being the recurrence dates. The patch | This maps the RDATE properties from iCalendar. The set is | |||
object MUST be the empty JSON object ({}). | represented as an object, with the keys being the recurrence | |||
dates. The patch object MUST be the empty JSON object ({}). | ||||
o names: "String[Boolean]" (optional) | names: "String[Boolean]" optional) | |||
Maps the TZNAME properties from iCalendar to a JSON set. The set | This maps the TZNAME properties from iCalendar to a JSON set. The | |||
is represented as an object, with the keys being the names, | set is represented as an object, with the keys being the names, | |||
excluding any "tznparam" component from iCalendar. The value for | excluding any "tznparam" component from iCalendar. The value for | |||
each key in the map MUST be true. | each key in the map MUST be true. | |||
o comments: "String[]" (optional). Maps the COMMENT properties from | comments: "String[]" (optional) | |||
iCalendar. The order MUST be preserved during conversion. | This maps the COMMENT properties from iCalendar. The order MUST | |||
be preserved during conversion. | ||||
5. Type-specific JSCalendar Properties | 5. Type-Specific JSCalendar Properties | |||
5.1. JSEvent Properties | 5.1. Event Properties | |||
In addition to the common JSCalendar object properties (Section 4) a | In addition to the common JSCalendar object properties (Section 4), | |||
JSEvent has the following properties: | an Event has the following properties: | |||
5.1.1. start | 5.1.1. start | |||
Type: "LocalDateTime" (mandatory). | Type: "LocalDateTime" (mandatory) | |||
The date/time the event starts in the event's time zone (as specified | This is the date/time the event starts in the event's time zone (as | |||
in the "timeZone" property, see Section 4.7.1). | specified in the "timeZone" property, see Section 4.7.1). | |||
5.1.2. duration | 5.1.2. duration | |||
Type: "Duration" (optional, default: "PT0S"). | Type: "Duration" (optional, default: "PT0S") | |||
The zero or positive duration of the event in the event's start time | This is the zero or positive duration of the event in the event's | |||
zone. The end time of an event can be found by adding the duration | start time zone. The end time of an event can be found by adding the | |||
to the event's start time. | duration to the event's start time. | |||
A JSEvent MAY involve start and end locations that are in different | An Event MAY involve start and end locations that are in different | |||
time zones (e.g., a trans-continental flight). This can be expressed | time zones (e.g., a transcontinental flight). This can be expressed | |||
using the "relativeTo" and "timeZone" properties of the JSEvent's | using the "relativeTo" and "timeZone" properties of the Event's | |||
Location objects (see Section 4.2.5). | Location objects (see Section 4.2.5). | |||
5.1.3. status | 5.1.3. status | |||
Type: "String" (optional, default: "confirmed"). | Type: "String" (optional, default: "confirmed") | |||
The scheduling status (Section 4.4) of a JSEvent. If set, it MUST be | This is the scheduling status (Section 4.4) of an Event. If set, it | |||
one of the following values, another value registered in the IANA | MUST be one of the following values, another value registered in the | |||
JSCalendar Enum Values registry, or a vendor-specific value (see | IANA "JSCalendar Enum Values" registry, or a vendor-specific value | |||
Section 3.3): | (see Section 3.3): | |||
o "confirmed": Indicates the event is definitely happening. | "confirmed": indicates the event is definitely happening | |||
o "cancelled": Indicates the event has been cancelled. | "cancelled": indicates the event has been cancelled | |||
o "tentative": Indicates the event may happen. | "tentative": indicates the event may happen | |||
5.2. JSTask Properties | 5.2. Task Properties | |||
In addition to the common JSCalendar object properties (Section 4) a | In addition to the common JSCalendar object properties (Section 4), a | |||
JSTask has the following properties: | Task has the following properties: | |||
5.2.1. due | 5.2.1. due | |||
Type: "LocalDateTime" (optional). | Type: "LocalDateTime" (optional) | |||
The date/time the task is due in the task's time zone. | This is the date/time the task is due in the task's time zone. | |||
5.2.2. start | 5.2.2. start | |||
Type: "LocalDateTime" (optional). | Type: "LocalDateTime" (optional) | |||
The date/time the task should start in the task's time zone. | This the date/time the task should start in the task's time zone. | |||
5.2.3. estimatedDuration | 5.2.3. estimatedDuration | |||
Type: "Duration" (optional). | Type: "Duration" (optional) | |||
Specifies the estimated positive duration of time the task takes to | This specifies the estimated positive duration of time the task takes | |||
complete. | to complete. | |||
5.2.4. percentComplete | 5.2.4. percentComplete | |||
Type: "UnsignedInt" (optional). | Type: "UnsignedInt" (optional) | |||
Represents the percent completion of the task overall. The property | This represents the percent completion of the task overall. The | |||
value MUST be a positive integer between 0 and 100. | property value MUST be a positive integer between 0 and 100. | |||
5.2.5. progress | 5.2.5. progress | |||
Type: "String" (optional). | Type: "String" (optional) | |||
Defines the progress of this task. If omitted, the default progress | This defines the progress of this task. If omitted, the default | |||
(Section 4.4) of a JSTask is defined as follows (in order of | progress (Section 4.4) of a Task is defined as follows (in order of | |||
evaluation): | evaluation): | |||
o "completed": if the "progress" property value of all participants | "completed": if the "progress" property value of all participants is | |||
is "completed". | "completed" | |||
o "failed": if at least one "progress" property value of a | "failed": if at least one "progress" property value of a participant | |||
participant is "failed". | is "failed" | |||
o "in-process": if at least one "progress" property value of a | "in-process": if at least one "progress" property value of a | |||
participant is "in-process". | participant is "in-process" | |||
o "needs-action": If none of the other criteria match. | "needs-action": if none of the other criteria match | |||
If set, it MUST be one of the following values, another value | If set, it MUST be one of the following values, another value | |||
registered in the IANA JSCalendar Enum Values registry, or a vendor- | registered in the IANA "JSCalendar Enum Values" registry, or a | |||
specific value (see Section 3.3): | vendor-specific value (see Section 3.3): | |||
o "needs-action": Indicates the task needs action. | "needs-action": indicates the task needs action | |||
o "in-process": Indicates the task is in process. | "in-process": indicates the task is in process | |||
o "completed": Indicates the task is completed. | "completed": indicates the task is completed | |||
o "failed": Indicates the task failed. | "failed": indicates the task failed | |||
o "cancelled": Indicates the task was cancelled. | "cancelled": indicates the task was cancelled | |||
5.2.6. progressUpdated | 5.2.6. progressUpdated | |||
Type: "UTCDateTime" (optional). | Type: "UTCDateTime" (optional) | |||
Specifies the date/time the "progress" property of either the task | This specifies the date/time the "progress" property of either the | |||
overall (Section 5.2.5) or a specific participant (Section 4.4.5) was | task overall (Section 5.2.5) or a specific participant | |||
last updated. | (Section 4.4.6) was last updated. | |||
If the task is recurring and has future instances, a client may want | If the task is recurring and has future instances, a client may want | |||
to keep track of the last progress update timestamp of a specific | to keep track of the last progress update timestamp of a specific | |||
task recurrence, but leave other instances unchanged. One way to | task recurrence but leave other instances unchanged. One way to | |||
achieve this is by overriding the progressUpdated property in the | achieve this is by overriding the "progressUpdated" property in the | |||
task "recurrenceOverrides" property. However, this could produce a | task "recurrenceOverrides" property. However, this could produce a | |||
long list of timestamps for regularly recurring tasks. An | long list of timestamps for regularly recurring tasks. An | |||
alternative approach is to split the JSTask into a current, single | alternative approach is to split the Task into a current, single | |||
instance of JSTask with this instance progress update time and a | instance of Task with this instance progress update time and a future | |||
future recurring instance. See also Section 4.1.3 on splitting. | recurring instance. See also Section 4.1.3 on splitting. | |||
5.3. JSGroup Properties | 5.3. Group Properties | |||
JSGroup supports the following common JSCalendar properties | Group supports the following common JSCalendar properties | |||
(Section 4): | (Section 4): | |||
o @type | * @type | |||
o uid | * uid | |||
o prodId | * prodId | |||
o created | ||||
o updated | * created | |||
o title | * updated | |||
o description | * title | |||
o descriptionContentType | * description | |||
o links | * descriptionContentType | |||
o locale | * links | |||
o keywords | * locale | |||
o categories | * keywords | |||
o color | * categories | |||
o timeZones | * color | |||
In addition, the following JSGroup-specific properties are supported: | * timeZones | |||
In addition, the following Group-specific properties are supported: | ||||
5.3.1. entries | 5.3.1. entries | |||
Type: "(JSTask|JSEvent)[]" (mandatory). | Type: "(Task|Event)[]" (mandatory) | |||
A collection of group members. Implementations MUST ignore entries | This is a collection of group members. Implementations MUST ignore | |||
of unknown type. | entries of unknown type. | |||
5.3.2. source | 5.3.2. source | |||
Type: "String" (optional). | Type: "String" (optional) | |||
The source from which updated versions of this group may be retrieved | This is the source from which updated versions of this group may be | |||
from. The value MUST be a URI. | retrieved. The value MUST be a URI. | |||
6. Examples | 6. Examples | |||
The following examples illustrate several aspects of the JSCalendar | The following examples illustrate several aspects of the JSCalendar | |||
data model and format. The examples may omit mandatory or additional | data model and format. The examples may omit mandatory or additional | |||
properties, which is indicated by a placeholder property with key | properties, which is indicated by a placeholder property with key | |||
"...". While most of the examples use calendar event objects, they | "...". While most of the examples use calendar event objects, they | |||
are also illustrative for tasks. | are also illustrative for tasks. | |||
6.1. Simple event | 6.1. Simple Event | |||
This example illustrates a simple one-time event. It specifies a | This example illustrates a simple one-time event. It specifies a | |||
one-time event that begins on January 15, 2020 at 1pm New York local | one-time event that begins on January 15, 2020 at 1 pm New York local | |||
time and ends after 1 hour. | time and ends after 1 hour. | |||
{ | { | |||
"@type": "jsevent", | "@type": "Event", | |||
"uid": "a8df6573-0474-496d-8496-033ad45d7fea", | "uid": "a8df6573-0474-496d-8496-033ad45d7fea", | |||
"updated": "2020-01-02T18:23:04Z", | "updated": "2020-01-02T18:23:04Z", | |||
"title": "Some event", | "title": "Some event", | |||
"start": "2020-01-15T13:00:00", | "start": "2020-01-15T13:00:00", | |||
"timeZone": "America/New_York", | "timeZone": "America/New_York", | |||
"duration": "PT1H" | "duration": "PT1H" | |||
} | } | |||
6.2. Simple task | 6.2. Simple Task | |||
This example illustrates a simple task for a plain to-do item. | This example illustrates a simple task for a plain to-do item. | |||
{ | { | |||
"@type": "jstask", | "@type": "Task", | |||
"uid": "2a358cee-6489-4f14-a57f-c104db4dc2f2", | "uid": "2a358cee-6489-4f14-a57f-c104db4dc2f2", | |||
"updated": "2020-01-09T14:32:01Z", | "updated": "2020-01-09T14:32:01Z", | |||
"title": "Do something" | "title": "Do something" | |||
} | } | |||
6.3. Simple group | 6.3. Simple Group | |||
This example illustrates a simple calendar object group that contains | This example illustrates a simple calendar object group that contains | |||
an event and a task. | an event and a task. | |||
{ | { | |||
"@type": "jsgroup", | "@type": "Group", | |||
"uid": "bf0ac22b-4989-4caf-9ebd-54301b4ee51a", | "uid": "bf0ac22b-4989-4caf-9ebd-54301b4ee51a", | |||
"updated": "2020-01-15T18:00:00Z", | "updated": "2020-01-15T18:00:00Z", | |||
"name": "A simple group", | "name": "A simple group", | |||
"entries": [{ | "entries": [{ | |||
"@type": "jsevent", | "@type": "Event", | |||
"uid": "a8df6573-0474-496d-8496-033ad45d7fea", | "uid": "a8df6573-0474-496d-8496-033ad45d7fea", | |||
"updated": "2020-01-02T18:23:04Z", | "updated": "2020-01-02T18:23:04Z", | |||
"title": "Some event", | "title": "Some event", | |||
"start": "2020-01-15T13:00:00", | "start": "2020-01-15T13:00:00", | |||
"timeZone": "America/New_York", | "timeZone": "America/New_York", | |||
"duration": "PT1H" | "duration": "PT1H" | |||
}, | }, | |||
{ | { | |||
"@type": "jstask", | "@type": "Task", | |||
"uid": "2a358cee-6489-4f14-a57f-c104db4dc2f2", | "uid": "2a358cee-6489-4f14-a57f-c104db4dc2f2", | |||
"updated": "2020-01-09T14:32:01Z", | "updated": "2020-01-09T14:32:01Z", | |||
"title": "Do something" | "title": "Do something" | |||
}] | }] | |||
} | } | |||
6.4. All-day event | 6.4. All-Day Event | |||
This example illustrates an event for an international holiday. It | This example illustrates an event for an international holiday. It | |||
specifies an all-day event on April 1 that occurs every year since | specifies an all-day event on April 1 that occurs every year since | |||
the year 1900. | the year 1900. | |||
{ | { | |||
"...": "", | "...": "", | |||
"title": "April Fool's Day", | "title": "April Fool's Day", | |||
"showWithoutTime": true, | "showWithoutTime": true, | |||
"start": "1900-04-01T00:00:00", | "start": "1900-04-01T00:00:00", | |||
"duration": "P1D", | "duration": "P1D", | |||
"recurrenceRules": [{ | "recurrenceRules": [{ | |||
"@type": "RecurrenceRule", | "@type": "RecurrenceRule", | |||
"frequency": "yearly" | "frequency": "yearly" | |||
}] | }] | |||
} | } | |||
6.5. Task with a due date | 6.5. Task with a Due Date | |||
This example illustrates a task with a due date. It is a reminder to | This example illustrates a task with a due date. It is a reminder to | |||
buy groceries before 6pm Vienna local time on January 19, 2020. The | buy groceries before 6 pm Vienna local time on January 19, 2020. The | |||
calendar user expects to need 1 hour for shopping. | calendar user expects to need 1 hour for shopping. | |||
{ | { | |||
"...": "", | "...": "", | |||
"title": "Buy groceries", | "title": "Buy groceries", | |||
"due": "2020-01-19T18:00:00", | "due": "2020-01-19T18:00:00", | |||
"timeZone": "Europe/Vienna", | "timeZone": "Europe/Vienna", | |||
"estimatedDuration": "PT1H" | "estimatedDuration": "PT1H" | |||
} | } | |||
6.6. Event with end time zone | 6.6. Event with End Time Zone | |||
This example illustrates the use of end time zones by use of an | This example illustrates the use of end time zones by use of an | |||
international flight. The flight starts on April 1, 2020 at 9am in | international flight. The flight starts on April 1, 2020 at 9 am in | |||
Berlin local time. The duration of the flight is scheduled at 10 | Berlin local time. The duration of the flight is scheduled at 10 | |||
hours 30 minutes. The time at the flight's destination is in the | hours 30 minutes. The time at the flight's destination is in the | |||
same time zone as Tokyo. Calendar clients could use the end time | same time zone as Tokyo. Calendar clients could use the end time | |||
zone to display the arrival time in Tokyo local time and highlight | zone to display the arrival time in Tokyo local time and highlight | |||
the time zone difference of the flight. The location names can serve | the time zone difference of the flight. The location names can serve | |||
as input for navigation systems. | as input for navigation systems. | |||
{ | { | |||
"...": "", | "...": "", | |||
"title": "Flight XY51 to Tokyo", | "title": "Flight XY51 to Tokyo", | |||
"start": "2020-04-01T09:00:00", | "start": "2020-04-01T09:00:00", | |||
"timeZone": "Europe/Berlin", | "timeZone": "Europe/Berlin", | |||
"duration": "PT10H30M", | "duration": "PT10H30M", | |||
"locations": { | "locations": { | |||
"418d0b9b-b656-4b3c-909f-5b149ca779c9": { | "1": { | |||
"@type": "Location", | "@type": "Location", | |||
"rel": "start", | "rel": "start", | |||
"name": "Frankfurt Airport (FRA)" | "name": "Frankfurt Airport (FRA)" | |||
}, | }, | |||
"c2c7ac67-dc13-411e-a7d4-0780fb61fb08": { | "2": { | |||
"@type": "Location", | "@type": "Location", | |||
"rel": "end", | "rel": "end", | |||
"name": "Narita International Airport (NRT)", | "name": "Narita International Airport (NRT)", | |||
"timeZone": "Asia/Tokyo" | "timeZone": "Asia/Tokyo" | |||
} | } | |||
} | } | |||
} | } | |||
6.7. Floating-time event (with recurrence) | 6.7. Floating-Time Event (with Recurrence) | |||
This example illustrates the use of floating time. Since January 1, | This example illustrates the use of floating time. Since January 1, | |||
2020, a calendar user blocks 30 minutes every day to practice Yoga at | 2020, a calendar user blocks 30 minutes every day to practice yoga at | |||
7am local time, in whatever time zone the user is located on that | 7 am local time in whatever time zone the user is located on that | |||
date. | date. | |||
{ | { | |||
"...": "", | "...": "", | |||
"title": "Yoga", | "title": "Yoga", | |||
"start": "2020-01-01T07:00:00", | "start": "2020-01-01T07:00:00", | |||
"duration": "PT30M", | "duration": "PT30M", | |||
"recurrenceRules": [{ | "recurrenceRules": [{ | |||
"@type": "RecurrenceRule", | "@type": "RecurrenceRule", | |||
"frequency": "daily" | "frequency": "daily" | |||
}] | }] | |||
} | } | |||
6.8. Event with multiple locations and localization | 6.8. Event with Multiple Locations and Localization | |||
This example illustrates an event that happens at both a physical and | This example illustrates an event that happens at both a physical and | |||
a virtual location. Fans can see a live concert on premises or | a virtual location. Fans can see a live concert on premises or | |||
online. The event title and descriptions are localized. | online. The event title and descriptions are localized. | |||
{ | { | |||
"...": "", | "...": "", | |||
"title": "Live from Music Bowl: The Band", | "title": "Live from Music Bowl: The Band", | |||
"description": "Go see the biggest music event ever!", | "description": "Go see the biggest music event ever!", | |||
"locale": "en", | "locale": "en", | |||
"start": "2020-07-04T17:00:00", | "start": "2020-07-04T17:00:00", | |||
"timeZone": "America/New_York", | "timeZone": "America/New_York", | |||
"duration": "PT3H", | "duration": "PT3H", | |||
"locations": { | "locations": { | |||
"c0503d30-8c50-4372-87b5-7657e8e0fedd": { | "c0503d30-8c50-4372-87b5-7657e8e0fedd": { | |||
"@type": "Location", | "@type": "Location", | |||
"name": "The Music Bowl", | "name": "The Music Bowl", | |||
"description": "Music Bowl, Central Park, New York", | "description": "Music Bowl, Central Park, New York", | |||
"coordinates": "geo:40.7829,-73.9654" | "coordinates": "geo:40.7829,-73.9654" | |||
} | } | |||
}, | }, | |||
"virtualLocations": { | "virtualLocations": { | |||
"1": { | "vloc1": { | |||
"@type": "VirtualLocation", | "@type": "VirtualLocation", | |||
"name": "Free live Stream from Music Bowl", | "name": "Free live Stream from Music Bowl", | |||
"uri": "https://stream.example.com/the_band_2020" | "uri": "https://stream.example.com/the_band_2020" | |||
} | } | |||
}, | }, | |||
"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 größte Musikereignis an!", | |||
"virtualLocations/1/name": "Gratis Live-Stream aus der Music Bowl" | "virtualLocations/vloc1/name": | |||
} | "Gratis Live-Stream aus der Music Bowl" | |||
} | } | |||
} | } | |||
6.9. Recurring event with overrides | } | |||
6.9. Recurring Event with Overrides | ||||
This example illustrates the use of recurrence overrides. A math | This example illustrates the use of recurrence overrides. A math | |||
course at a University is held for the first time on January 8, 2020 | course at a university is held for the first time on January 8, 2020 | |||
at 9am London time and occurs every week until June 24, 2020. Each | at 9 am London time and occurs every week until June 24, 2020. 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 | |||
the last occurrence of the course is an exam, which lasts for 2 hours | the last occurrence of the course is an exam, which lasts for 2 hours | |||
and starts at 10am. Also, the location of the exam differs from the | and starts at 10 am. Also, the location of the exam differs from the | |||
usual location. On April 1 no course is held. On January 7 at 2pm | usual location. On April 1, no course is held. On January 7 at 2 | |||
is an optional introduction course, that occurs before the first | pm, there is an optional introduction course, which occurs before the | |||
regular lecture. | first regular lecture. | |||
{ | { | |||
"...": "", | "...": "", | |||
"title": "Calculus I", | "title": "Calculus I", | |||
"start": "2020-01-08T09:00:00", | "start": "2020-01-08T09:00:00", | |||
"timeZone": "Europe/London", | "timeZone": "Europe/London", | |||
"duration": "PT1H30M", | "duration": "PT1H30M", | |||
"locations": { | "locations": { | |||
"0dfb8ace-aad1-4734-b3b4-a2fe3d6ae1c5": { | "mlab": { | |||
"@type": "Location", | "@type": "Location", | |||
"title": "Math lab room 1", | "title": "Math lab room 1", | |||
"description": "Math Lab I, Department of Mathematics" | "description": "Math Lab I, Department of Mathematics" | |||
} | } | |||
}, | }, | |||
"recurrenceRules": [{ | "recurrenceRules": [{ | |||
"@type": "RecurrenceRule", | "@type": "RecurrenceRule", | |||
"frequency": "weekly", | "frequency": "weekly", | |||
"until": "2020-06-24T09:00:00" | "until": "2020-06-24T09:00:00" | |||
}], | }], | |||
skipping to change at page 56, line 35 ¶ | skipping to change at line 2632 ¶ | |||
"title": "Introduction to Calculus I (optional)" | "title": "Introduction to Calculus I (optional)" | |||
}, | }, | |||
"2020-04-01T09:00:00": { | "2020-04-01T09:00:00": { | |||
"excluded": true | "excluded": true | |||
}, | }, | |||
"2020-06-25T09:00:00": { | "2020-06-25T09:00:00": { | |||
"title": "Calculus I Exam", | "title": "Calculus I Exam", | |||
"start": "2020-06-25T10:00:00", | "start": "2020-06-25T10:00:00", | |||
"duration": "PT2H", | "duration": "PT2H", | |||
"locations": { | "locations": { | |||
"84d639ca-37ac-4a86-81e5-9bbba8eb4053": { | "auditorium": { | |||
"@type": "Location", | "@type": "Location", | |||
"title": "Big Auditorium", | "title": "Big Auditorium", | |||
"description": "Big Auditorium, Other Road" | "description": "Big Auditorium, Other Road" | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
6.10. Recurring event with participants | 6.10. Recurring Event with Participants | |||
This example illustrates scheduled events. A team meeting occurs | This example illustrates scheduled events. A team meeting occurs | |||
every week since January 8, 2020 at 9am Johannesburg time. The event | every week since January 8, 2020 at 9 am Johannesburg time. The | |||
owner also chairs the event. Participants meet in a virtual meeting | event owner also chairs the event. Participants meet in a virtual | |||
room. An attendee has accepted the invitation, but on March 4, 2020 | meeting room. An attendee has accepted the invitation, but, on March | |||
he is unavailable and declined participation for this occurrence. | 4, 2020, he is unavailable and declined participation for this | |||
occurrence. | ||||
{ | { | |||
"...": "", | "...": "", | |||
"title": "FooBar team meeting", | "title": "FooBar team meeting", | |||
"start": "2020-01-08T09:00:00", | "start": "2020-01-08T09:00:00", | |||
"timeZone": "Africa/Johannesburg", | "timeZone": "Africa/Johannesburg", | |||
"duration": "PT1H", | "duration": "PT1H", | |||
"virtualLocations": { | "virtualLocations": { | |||
"3f41b47b-a5eb-494f-90eb-19d279486d84": { | "0": { | |||
"@type": "VirtualLocation", | "@type": "VirtualLocation", | |||
"name": "ChatMe meeting room", | "name": "ChatMe meeting room", | |||
"uri": "https://chatme.example.com?id=1234567&pw=a8a24627b63d396e" | "uri": "https://chatme.example.com?id=1234567&pw=a8a24627b63d" | |||
} | } | |||
}, | }, | |||
"recurrenceRules": [{ | "recurrenceRules": [{ | |||
"@type": "RecurrenceRule", | "@type": "RecurrenceRule", | |||
"frequency": "weekly" | "frequency": "weekly" | |||
}], | }], | |||
"replyTo": { | "replyTo": { | |||
"imip": "mailto:f245f875-7f63-4a5e-a2c8@schedule.example.com" | "imip": "mailto:f245f875-7f63-4a5e-a2c8@schedule.example.com" | |||
}, | }, | |||
"participants": { | "participants": { | |||
"dG9tQGZvb2Jhci5xlLmNvbQ": { | "dG9tQGZvb2Jhci5xlLmNvbQ": { | |||
"@type": "Participant", | "@type": "Participant", | |||
"name": "Tom Tool", | "name": "Tom Tool", | |||
"email": "tom@foobar.example.com", | "email": "tom@foobar.example.com", | |||
"sendTo": { | "sendTo": { | |||
"imip": "mailto:tom@calendar.example.com" | "imip": "mailto:tom@calendar.example.com" | |||
}, | }, | |||
"participationStatus": "accepted", | "participationStatus": "accepted", | |||
"roles": { | "roles": { | |||
"attendee": true | "attendee": true | |||
} | } | |||
}, | }, | |||
"em9lQGZvb2GFtcGxlLmNvbQ": { | "em9lQGZvb2GFtcGxlLmNvbQ": { | |||
"@type": "Participant", | "@type": "Participant", | |||
"name": "Zoe Zelda", | "name": "Zoe Zelda", | |||
"email": "zoe@foobar.example.com", | "email": "zoe@foobar.example.com", | |||
"sendTo": { | "sendTo": { | |||
"imip": "mailto:zoe@foobar.example.com" | "imip": "mailto:zoe@foobar.example.com" | |||
}, | }, | |||
"participationStatus": "accepted", | "participationStatus": "accepted", | |||
"roles": { | "roles": { | |||
"owner": true, | "owner": true, | |||
"attendee": true, | "attendee": true, | |||
"chair": true | "chair": true | |||
} | } | |||
} | } | |||
}, | }, | |||
"recurrenceOverrides": { | "recurrenceOverrides": { | |||
"2020-03-04T09:00:00": { | "2020-03-04T09:00:00": { | |||
"participants/dG9tQGZvb2Jhci5xlLmNvbQ/participationStatus": | "participants/dG9tQGZvb2Jhci5xlLmNvbQ/participationStatus": | |||
"declined" | "declined" | |||
} | } | |||
} | } | |||
} | } | |||
7. Security Considerations | 7. Security Considerations | |||
Calendaring and scheduling information is very privacy-sensitive. It | Calendaring and scheduling information is very privacy sensitive. It | |||
can reveal the social network of a user; location information of this | can reveal the social network of a user, location information of this | |||
user and those in their social network; identity and credentials | user and those in their social network, identity and credentials | |||
information; and the patterns of behavior of the user in both the | information, and patterns of behavior of the user in both the | |||
physical and cyber realm. Additionally, calendar events and tasks | physical and cyber realm. Additionally, calendar events and tasks | |||
can could influence the physical location of a user or their cyber | can influence the physical location of a user or their cyber behavior | |||
behavior within a known time window. Its transmission and storage | within a known time window. Its transmission and storage must be | |||
must be done carefully to protect it from possible threats, such as | done carefully to protect it from possible threats, such as | |||
eavesdropping, replay, message insertion, deletion, modification, and | eavesdropping, replay, message insertion, deletion, modification, and | |||
on-path attacks. | on-path attacks. | |||
The data being stored and transmitted may be used in systems with | The data being stored and transmitted may be used in systems with | |||
real world consequences. For example, a home automation system may | real-world consequences. For example, a home automation system may | |||
turn an alarm on and off. Or a coworking space may charge money to | turn an alarm on and off or a coworking space may charge money to the | |||
the organiser of an event that books one of their meeting rooms. | organizer of an event that books one of their meeting rooms. Such | |||
Such systems must be careful to authenticate all data they receive to | systems must be careful to authenticate all data they receive to | |||
prevent them from being subverted, and ensure the change comes from | prevent them from being subverted and ensure the change comes from an | |||
an authorized entity. | authorized entity. | |||
This document just defines the data format; such considerations are | This document only defines the data format; such considerations are | |||
primarily the concern of the API or method of storage and | primarily the concern of the API or method of storage and | |||
transmission of such files. | transmission of such files. | |||
7.1. Expanding Recurrences | 7.1. Expanding Recurrences | |||
A recurrence rule may produce infinite occurrences of an event. | A recurrence rule may produce infinite occurrences of an event. | |||
Implementations MUST handle expansions carefully to prevent | Implementations MUST handle expansions carefully to prevent | |||
accidental or deliberate resource exhaustion. | accidental or deliberate resource exhaustion. | |||
Conversely, a recurrence rule may be specified that does not expand | Conversely, a recurrence rule may be specified that does not expand | |||
to anything. It is not always possible to tell this through static | to anything. It is not always possible to tell this through static | |||
analysis of the rule, so implementations MUST be careful to avoid | analysis of the rule, so implementations MUST be careful to avoid | |||
getting stuck in infinite loops, or otherwise exhausting resources | getting stuck in infinite loops or otherwise exhausting resources | |||
while searching for the next occurrence. | while searching for the next occurrence. | |||
Events recur in the event's time zone. If the user is in a different | Events recur in the event's time zone. If the user is in a different | |||
time zone, daylight saving transitions may cause an event that | time zone, daylight saving transitions may cause an event that | |||
normally occurs at, for example, 9am to suddenly shift an hour | normally occurs at, for example, 9 am to suddenly shift an hour | |||
earlier. This may be used in an attempt to cause a participant to | earlier. This may be used in an attempt to cause a participant to | |||
miss an important meeting. User agents must be careful to translate | miss an important meeting. User agents must be careful to translate | |||
date-times correctly between time zones and may wish to call out | date-times correctly between time zones and may wish to call out | |||
unexpected changes in the time of a recurring event. | unexpected changes in the time of a recurring event. | |||
7.2. JSON Parsing | 7.2. JSON Parsing | |||
The Security Considerations of [RFC8259] apply to the use of JSON as | The security considerations of [RFC8259] apply to the use of JSON as | |||
the data interchange format. | the data interchange format. | |||
As for any serialization format, parsers need to thoroughly check the | As for any serialization format, parsers need to thoroughly check the | |||
syntax of the supplied data. JSON uses opening and closing tags for | syntax of the supplied data. JSON uses opening and closing tags for | |||
several types and structures, and it is possible that the end of the | several types and structures, and it is possible that the end of the | |||
supplied data will be reached when scanning for a matching closing | supplied data will be reached when scanning for a matching closing | |||
tag; this is an error condition, and implementations need to stop | tag; this is an error condition, and implementations need to stop | |||
scanning at the end of the supplied data. | scanning at the end of the supplied data. | |||
JSON also uses a string encoding with some escape sequences to encode | JSON also uses a string encoding with some escape sequences to encode | |||
skipping to change at page 59, line 44 ¶ | skipping to change at line 2787 ¶ | |||
allocations they are willing to make in any given context, to avoid | allocations they are willing to make in any given context, to avoid | |||
untrusted data causing excessive memory allocation. | untrusted data causing excessive memory allocation. | |||
7.3. URI Values | 7.3. URI Values | |||
Several JSCalendar properties contain URIs as values, and processing | Several JSCalendar properties contain URIs as values, and processing | |||
these properties requires extra care. Section 7 of [RFC3986] | these properties requires extra care. Section 7 of [RFC3986] | |||
discusses security risks related to URIs. | discusses security risks related to URIs. | |||
Fetching remote resources carries inherent risks. Connections must | Fetching remote resources carries inherent risks. Connections must | |||
only be allowed on well known ports, using allowed protocols | only be allowed on well-known ports, using allowed protocols | |||
(generally just HTTP/HTTPS on their default ports). The URL must be | (generally, just HTTP/HTTPS on their default ports). The URL must be | |||
resolved externally and not allowed to access internal resources. | resolved externally and not allowed to access internal resources. | |||
Connecting to an external source reveals IP (and therefore generally | Connecting to an external source reveals IP (and therefore often | |||
location) information. | location) information. | |||
A maliciously constructed JSCalendar object may contain a very large | A maliciously constructed JSCalendar object may contain a very large | |||
number of URIs. In the case of published calendars with a large | number of URIs. In the case of published calendars with a large | |||
number of subscribers, such objects could be widely distributed. | number of subscribers, such objects could be widely distributed. | |||
Implementations should be careful to limit the automatic fetching of | Implementations should be careful to limit the automatic fetching of | |||
linked resources to reduce the risk of this being an amplification | linked resources to reduce the risk of this being an amplification | |||
vector for a denial-of-service attack. | vector for a denial-of-service attack. | |||
7.4. Spam | 7.4. Spam | |||
Calendar systems may receive JSCalendar files from untrusted sources, | Calendar systems may receive JSCalendar files from untrusted sources, | |||
in particular as attachments to emails. This can be a vector for an | in particular, as attachments to emails. This can be a vector for an | |||
attacker to inject spam into a user's calendar. This may confuse, | attacker to inject spam into a user's calendar. This may confuse, | |||
annoy, and mislead users, or overwhelm their calendar with bogus | annoy, and mislead users or overwhelm their calendar with bogus | |||
events, preventing them from seeing legitimate ones. | events, preventing them from seeing legitimate ones. | |||
Heuristic, statistical or machine-learning-based filters can be | Heuristic, statistical, or machine-learning-based filters can be | |||
effective in filtering out spam. Authentication mechanisms such as | effective in filtering out spam. Authentication mechanisms, such as | |||
DKIM [RFC6376] can help establish the source of messages and | DomainKeys Identified Mail (DKIM) [RFC6376], can help establish the | |||
associate the data with existing relationships (such as an address | source of messages and associate the data with existing relationships | |||
book contact). Misclassifications are always possible, however, and | (such as an address book contact). However, misclassifications are | |||
providing a mechanism for users to quickly correct this is advised. | always possible and providing a mechanism for users to quickly | |||
correct this is advised. | ||||
Confusable unicode characters may be used to trick a user into | Confusable unicode characters may be used to trick a user into | |||
trusting a JSCalendar file that appears to come from a known contact | trusting a JSCalendar file that appears to come from a known contact | |||
but is actually from a similar-looking source controlled by an | but is actually from a similar-looking source controlled by an | |||
attacker. | attacker. | |||
7.5. Duplication | 7.5. Duplication | |||
It is important for calendar systems to maintain the UID of an event | It is important for calendar systems to maintain the UID of an event | |||
when updating it to avoid unexpected duplication of events. | when updating it to avoid an unexpected duplication of events. | |||
Consumers of the data may not remove the previous version of the | Consumers of the data may not remove the previous version of the | |||
event if it has a different UID. This can lead to a confusing | event if it has a different UID. This can lead to a confusing | |||
situation for the user, with many variations of the event and no | situation for the user, with many variations of the event and no | |||
indication of which one is correct. Care must be taken by consumers | indication of which one is correct. Care must be taken by consumers | |||
of the data to remove old events where possible to avoid an | of the data to remove old events where possible to avoid an | |||
accidental denial-of-service attack due to the volume of data. | accidental denial-of-service attack due to the volume of data. | |||
7.6. Time Zones | 7.6. Time Zones | |||
Events recur in a particular time zone. When this differs from the | Events recur in a particular time zone. When this differs from the | |||
skipping to change at page 61, line 19 ¶ | skipping to change at line 2854 ¶ | |||
This document defines a media type for use with JSCalendar data | This document defines a media type for use with JSCalendar data | |||
formatted in JSON. | formatted in JSON. | |||
Type name: application | Type name: application | |||
Subtype name: jscalendar+json | Subtype name: jscalendar+json | |||
Required parameters: type | Required parameters: type | |||
The "type" parameter conveys the type of the JSCalendar data in | The "type" parameter conveys the type of the JSCalendar data in | |||
the body part, with the value being one of "jsevent", "jstask", or | the body part. The allowed parameter values correspond to the | |||
"jsgroup". The parameter MUST NOT occur more than once. It MUST | "@type" property of the JSON-formatted JSCalendar object in the | |||
match the value of the "@type" property of the JSON-formatted | body: | |||
JSCalendar object in the body. | ||||
"event": The "@type" property value MUST be "Event". | ||||
"task": The "@type" property value MUST be "Task". | ||||
"group": The "@type" property value MUST be "Group". | ||||
No other parameter values are allowed. The parameter MUST NOT | ||||
occur more than once. | ||||
Optional parameters: none | Optional parameters: none | |||
Encoding considerations: Same as encoding considerations of | Encoding considerations: This is the same as the encoding | |||
application/json as specified in RFC8529, Section 11 [RFC8259]. | considerations of application/json, as specified in Section 11 of | |||
[RFC8259]. | ||||
Security considerations: See Section 7 of this document. | Security considerations: See Section 7 of this document. | |||
Interoperability considerations: While JSCalendar is designed to | Interoperability considerations: While JSCalendar is designed to | |||
avoid ambiguities as much as possible, when converting objects | avoid ambiguities as much as possible, when converting objects | |||
from other calendar formats to/from JSCalendar it is possible that | from other calendar formats to/from JSCalendar, it is possible | |||
differing representations for the same logical data might arise, | that differing representations for the same logical data or | |||
or ambiguities in interpretation. The semantic equivalence of two | ambiguities in interpretation might arise. The semantic | |||
JSCalendar objects may be determined differently by different | equivalence of two JSCalendar objects may be determined | |||
applications, for example where URL values differ in case between | differently by different applications, for example, where URL | |||
the two objects. | values differ in case between the two objects. | |||
Published specification: This specification. | Published specification: RFC 8984 | |||
Applications that use this media type: Applications that currently | Applications that use this media type: Applications that currently | |||
make use of the text/calendar and application/calendar+json media | make use of the text/calendar and application/calendar+json media | |||
types can use this as an alternative. Similarly, applications | types can use this as an alternative. Similarly, applications | |||
that use the application/json media type to transfer calendaring | that use the application/json media type to transfer calendaring | |||
data can use this to further specify the content. | data can use this to further specify the content. | |||
Fragment identifier considerations: A JSON Pointer fragment | Fragment identifier considerations: A JSON Pointer fragment | |||
identifier may be used, as defined in [RFC6901], Section 6. | identifier may be used, as defined in [RFC6901], Section 6. | |||
Additional information: | Additional information: Magic number(s): N/A | |||
Magic number(s): N/A | ||||
File extensions(s): N/A | File extensions(s): N/A | |||
Macintosh file type code(s): N/A | Macintosh file type code(s): N/A | |||
Person & email address to contact for further information: | Person & email address to contact for further information: calsify@i | |||
calsify@ietf.org | etf.org | |||
Intended usage: COMMON | Intended usage: COMMON | |||
Restrictions on usage: N/A | Restrictions on usage: N/A | |||
Author: See the "Author's Address" section of this document. | Author: See the "Author's Address" section of this document. | |||
Change controller: IETF | Change controller: IETF | |||
8.2. Creation of "JSCalendar Properties" Registry | 8.2. Creation of the "JSCalendar Properties" Registry | |||
The IANA will create the "JSCalendar Properties" registry to allow | IANA has created the "JSCalendar Properties" registry to allow | |||
interoperability of extensions to JSCalendar objects. | interoperability of extensions to JSCalendar objects. | |||
This registry follows the Expert Review process ([RFC8126], | This registry follows the Expert Review process ([RFC8126], | |||
Section 4.5). If the "intended use" field is "common", sufficient | Section 4.5). If the "Intended Usage" field is "common", sufficient | |||
documentation is required to enable interoperability. Preliminary | documentation is required to enable interoperability. Preliminary | |||
community review for this registry is optional but strongly | community review for this registry is optional but strongly | |||
encouraged. | encouraged. | |||
A registration can have an intended use of "common", "reserved", or | A registration can have an intended usage of "common", "reserved", or | |||
"obsolete". The IANA will list common-use registrations prominently | "obsolete". IANA will list registrations with a common usage | |||
and separately from those with other intended use values. | designation prominently and separately from those with other intended | |||
usage values. | ||||
A "reserved" registration reserves a property name without assigning | A "reserved" registration reserves a property name without assigning | |||
semantics to avoid name collisions with future extensions or protocol | semantics to avoid name collisions with future extensions or protocol | |||
use. | use. | |||
An "obsolete" registration denotes a property that is no longer | An "obsolete" registration denotes a property that is no longer | |||
expected to be added by up-to-date systems. A new property has | expected to be added by up-to-date systems. A new property has | |||
probably been defined covering the obsolete property's semantics. | probably been defined covering the obsolete property's semantics. | |||
The JSCalendar property registration procedure is not a formal | The JSCalendar property registration procedure is not a formal | |||
standards process but rather an administrative procedure intended to | standards process but rather an administrative procedure intended to | |||
allow community comment and sanity checking without excessive time | allow community comment and check it is coherent without excessive | |||
delay. It is designed to encourage vendors to document and register | time delay. It is designed to encourage vendors to document and | |||
new properties they add for use cases not covered by the original | register new properties they add for use cases not covered by the | |||
specification, leading to increased interoperability. | original specification, leading to increased interoperability. | |||
8.2.1. Preliminary Community Review | 8.2.1. Preliminary Community Review | |||
Notice of a potential new registration SHOULD be sent to the Calext | Notice of a potential new registration SHOULD be sent to the Calext | |||
mailing list <calsify@ietf.org> for review. This mailing list is | mailing list <calsify@ietf.org> for review. This mailing list is | |||
appropriate to solicit community feedback on a proposed new property. | appropriate to solicit community feedback on a proposed new property. | |||
Properties registrations must be marked with their intended use: | Property registrations must be marked with their intended use: | |||
"common", "reserved" or "obsolete". | "common", "reserved", or "obsolete". | |||
The intent of the public posting to this list is to solicit comments | The intent of the public posting to this list is to solicit comments | |||
and feedback on the choice of the property name, the unambiguity of | and feedback on the choice of the property name, the unambiguity of | |||
the specification document, and a review of any interoperability or | the specification document, and a review of any interoperability or | |||
security considerations. The submitter may submit a revised | security considerations. The submitter may submit a revised | |||
registration proposal or abandon the registration completely at any | registration proposal or abandon the registration completely at any | |||
time. | time. | |||
8.2.2. Submit Request to IANA | 8.2.2. Submit Request to IANA | |||
skipping to change at page 63, line 34 ¶ | skipping to change at line 2972 ¶ | |||
8.2.3. Designated Expert Review | 8.2.3. Designated Expert Review | |||
The primary concern of the designated expert (DE) is preventing name | The primary concern of the designated expert (DE) is preventing name | |||
collisions and encouraging the submitter to document security and | collisions and encouraging the submitter to document security and | |||
privacy considerations. For a common-use registration, the DE is | privacy considerations. For a common-use registration, the DE is | |||
expected to confirm that suitable documentation, as described in | expected to confirm that suitable documentation, as described in | |||
Section 4.6 of [RFC8126], is available to ensure interoperability. | Section 4.6 of [RFC8126], is available to ensure interoperability. | |||
That documentation will usually be in an RFC, but simple definitions | That documentation will usually be in an RFC, but simple definitions | |||
are likely to use a web/wiki page, and if a sentence or two is deemed | are likely to use a web/wiki page, and if a sentence or two is deemed | |||
sufficient it could be described in the registry itself. The DE | sufficient, it could be described in the registry itself. The DE | |||
should also verify that the property name does not conflict with work | should also verify that the property name does not conflict with work | |||
that is active or already published within the IETF. A published | that is active or already published within the IETF. A published | |||
specification is not required for reserved or obsolete registrations. | specification is not required for reserved or obsolete registrations. | |||
The DE will either approve or deny the registration request and | The DE will either approve or deny the registration request and | |||
publish a notice of the decision to the Calext WG mailing list or its | publish a notice of the decision to the Calext WG mailing list or its | |||
successor, as well as inform IANA. A denial notice must be justified | successor, as well as inform IANA. A denial notice must be justified | |||
by an explanation, and, in the cases where it is possible, concrete | by an explanation, and, in the cases where it is possible, concrete | |||
suggestions on how the request can be modified so as to become | suggestions on how the request can be modified so as to become | |||
acceptable should be provided. | acceptable should be provided. | |||
8.2.4. Change Procedures | 8.2.4. Change Procedures | |||
Once a JSCalendar property has been published by the IANA, the change | Once a JSCalendar property has been published by IANA, the change | |||
controller may request a change to its definition. The same | controller may request a change to its definition. The same | |||
procedure that would be appropriate for the original registration | procedure that would be appropriate for the original registration | |||
request is used to process a change request. | request is used to process a change request. | |||
JSCalendar property registrations may not be deleted; properties that | JSCalendar property registrations may not be deleted; properties that | |||
are no longer believed appropriate for use can be declared obsolete | are no longer believed appropriate for use can be declared obsolete | |||
by a change to their "intended use" field; such properties will be | by a change to their "intended usage" field; such properties will be | |||
clearly marked in the lists published by the IANA. | clearly marked in the IANA registry. | |||
Significant changes to a JSCalendar property's definition should be | Significant changes to a JSCalendar property's definition should be | |||
requested only when there are serious omissions or errors in the | requested only when there are serious omissions or errors in the | |||
published specification, as such changes may cause interoperability | published specification, as such changes may cause interoperability | |||
issues. When review is required, a change request may be denied if | issues. When review is required, a change request may be denied if | |||
it renders entities that were valid under the previous definition | it renders entities that were valid under the previous definition | |||
invalid under the new definition. | invalid under the new definition. | |||
The owner of a JSCalendar property may pass responsibility to another | The owner of a JSCalendar property may pass responsibility to another | |||
person or agency by informing the IANA; this can be done without | person or agency by informing IANA; this can be done without | |||
discussion or review. | discussion or review. | |||
8.2.5. JSCalendar Properties Registry Template | 8.2.5. "JSCalendar Properties" Registry Template | |||
o Property Name: The name of the property. The property name MUST | Property Name: This is the name of the property. The property name | |||
NOT already be registered for any of the object types listed in | MUST NOT already be registered for any of the object types listed | |||
the "Property Context" field of this registration. Other object | in the "Property Context" field of this registration. Other | |||
types MAY already have registered a different property with the | object types MAY already have registered a different property with | |||
same name, however the same name SHOULD only be used when the | the same name; however, the same name SHOULD only be used when the | |||
semantics are analogous. | semantics are analogous. | |||
o Property Type: The type of this property, using type signatures as | Property Type: This is the type of this property, using type | |||
specified in Section 1.3. The property type MUST be registed in | signatures, as specified in Section 1.3. The property type MUST | |||
the Type Registry. | be registered in the "JSCalendar Types" registry. | |||
o Property Context: A comma-separated list of JSCalendar object | Property Context: This is a comma-separated list of JSCalendar | |||
types this property is allowed on. | object types this property is allowed on. | |||
o Reference or Description: A brief description or RFC number and | Reference or Description: This is a brief description or RFC number | |||
section reference where the property is specified (omitted for | and section reference where the property is specified (omitted for | |||
"reserved" property names). | "reserved" property names). | |||
o Intended Use: Common, reserved, or obsolete. | Intended Usage: This may be "common", "reserved", or "obsolete". | |||
o Change Controller: Who may request a change to this entry's | Change Controller: This is who may request a change to this entry's | |||
definition ("IETF" for IETF-stream RFCs). | definition ("IETF" for RFCs from the IETF stream). | |||
8.2.6. Initial Contents for the JSCalendar Properties Registry | 8.2.6. Initial Contents for the "JSCalendar Properties" Registry | |||
The following table lists the initial entries of the JSCalendar | The following table lists the initial entries of the "JSCalendar | |||
Properties registry. All properties are for common-use. All RFC | Properties" registry. All properties are for common use. All RFC | |||
section references are for this document. The change controller for | section references are for this document. The change controller for | |||
all these properties is "IETF". | all these properties is "IETF". | |||
+---------------+----------------------------+------------+---------+ | +====================+=================+================+===========+ | |||
| Property Name | Property Type | Property | Referen | | |Property Name |Property Type |Property Context|Reference | | |||
| | | Context | ce or D | | | | | |or | | |||
| | | | escript | | | | | |Description| | |||
| | | | ion | | +====================+=================+================+===========+ | |||
+---------------+----------------------------+------------+---------+ | |@type |String |Event, Task, |Section | | |||
| @type | String | JSEvent, | Section | | | | |Group, |4.1.1, | | |||
| | | JSTask, | 4.1.1, | | | | |AbsoluteTrigger,|Section | | |||
| | | JSGroup, A | Section | | | | |Alert, Link, |4.5.2, | | |||
| | | bsoluteTri | 4.5.2, | | | | |Location, NDay, |Section | | |||
| | | gger, | Section | | | | |OffsetTrigger, |1.4.11, | | |||
| | | Alert, | 1.4.11 | | | | |Participant, |Section | | |||
| | | Link, | , Secti | | | | |RecurrenceRule, |4.2.5, | | |||
| | | Location, | on 4.2. | | | | |Relation, |Section | | |||
| | | NDay, Offs | 5, Sect | | | | |TimeZone, |4.4.6, | | |||
| | | etTrigger, | ion 4.4 | | | | |TimeZoneRule, |Section | | |||
| | | Participan | .5, Sec | | | | |VirtualLocation |4.3.3, | | |||
| | | t, Recurre | tion 4. | | | | | |Section | | |||
| | | nceRule, | 3.2, Se | | | | | |1.4.10, | | |||
| | | Relation, | ction 4 | | | | | |Section | | |||
| | | TimeZone, | .1.3, S | | | | | |4.7.2, | | |||
| | | TimeZoneRu | ection | | | | | |Section | | |||
| | | le, Virtua | 4.7.2, | | | | | |4.2.6 | | |||
| | | lLocation | Section | | +--------------------+-----------------+----------------+-----------+ | |||
| | | | 4.7.2, | | |acknowledged |UTCDateTime |Alert |Section | | |||
| | | | Section | | | | | |4.5.2 | | |||
| | | | 4.2.6 | | +--------------------+-----------------+----------------+-----------+ | |||
| | | | | | |action |String |Alert |Section | | |||
| acknowledged | UTCDateTime | Alert | Section | | | | | |4.5.2 | | |||
| | | | 4.5.2 | | +--------------------+-----------------+----------------+-----------+ | |||
| | | | | | |alerts |Id[Alert] |Event, Task |Section | | |||
| action | String | Alert | Section | | | | | |4.5.2 | | |||
| | | | 4.5.2 | | +--------------------+-----------------+----------------+-----------+ | |||
| | | | | | |aliases |String[Boolean] |TimeZone |Section | | |||
| alerts | Id[Alert] | JSEvent, | Section | | | | | |4.7.2 | | |||
| | | JSTask | 4.5.2 | | +--------------------+-----------------+----------------+-----------+ | |||
| | | | | | |byDay |NDay[] |RecurrenceRule |Section | | |||
| aliases | String[Boolean] | TimeZone | Section | | | | | |4.3.3 | | |||
| | | | 4.7.2 | | +--------------------+-----------------+----------------+-----------+ | |||
| | | | | | |byHour |UnsignedInt[] |RecurrenceRule |Section | | |||
| byDay | NDay[] | Recurrence | Section | | | | | |4.3.3 | | |||
| | | Rule | 4.3.2 | | +--------------------+-----------------+----------------+-----------+ | |||
| | | | | | |byMinute |UnsignedInt[] |RecurrenceRule |Section | | |||
| byHour | UnsignedInt[] | Recurrence | Section | | | | | |4.3.3 | | |||
| | | Rule | 4.3.2 | | +--------------------+-----------------+----------------+-----------+ | |||
| | | | | | |byMonth |String[] |RecurrenceRule |Section | | |||
| byMinute | UnsignedInt[] | Recurrence | Section | | | | | |4.3.3 | | |||
| | | Rule | 4.3.2 | | +--------------------+-----------------+----------------+-----------+ | |||
| | | | | | |byMonthDay |Int[] |RecurrenceRule |Section | | |||
| byMonth | String[] | Recurrence | Section | | | | | |4.3.3 | | |||
| | | Rule | 4.3.2 | | +--------------------+-----------------+----------------+-----------+ | |||
| | | | | | |bySecond |UnsignedInt[] |RecurrenceRule |Section | | |||
| byMonthDay | Int[] | Recurrence | Section | | | | | |4.3.3 | | |||
| | | Rule | 4.3.2 | | +--------------------+-----------------+----------------+-----------+ | |||
| | | | | | |bySetPosition |Int[] |RecurrenceRule |Section | | |||
| bySecond | UnsignedInt[] | Recurrence | Section | | | | | |4.3.3 | | |||
| | | Rule | 4.3.2 | | +--------------------+-----------------+----------------+-----------+ | |||
| | | | | | |byWeekNo |Int[] |RecurrenceRule |Section | | |||
| bySetPosition | Int[] | Recurrence | Section | | | | | |4.3.3 | | |||
| | | Rule | 4.3.2 | | +--------------------+-----------------+----------------+-----------+ | |||
| | | | | | |byYearDay |Int[] |RecurrenceRule |Section | | |||
| byWeekNo | Int[] | Recurrence | Section | | | | | |4.3.3 | | |||
| | | Rule | 4.3.2 | | +--------------------+-----------------+----------------+-----------+ | |||
| | | | | | |categories |String[Boolean] |Event, Task, |Section | | |||
| byYearDay | Int[] | Recurrence | Section | | | | |Group |4.2.10 | | |||
| | | Rule | 4.3.2 | | +--------------------+-----------------+----------------+-----------+ | |||
| | | | | | |cid |String |Link |Section | | |||
| categories | String[Boolean] | JSEvent, | Section | | | | | |1.4.11 | | |||
| | | JSTask, | 4.2.10 | | +--------------------+-----------------+----------------+-----------+ | |||
| | | JSGroup | | | |color |String |Event, Task, |Section | | |||
| | | | | | | | |Group |4.2.11 | | |||
| cid | String | Link | Section | | +--------------------+-----------------+----------------+-----------+ | |||
| | | | 1.4.11 | | |comments |String[] |TimeZoneRule |Section | | |||
| | | | | | | | | |4.7.2 | | |||
| color | String | JSEvent, | Section | | +--------------------+-----------------+----------------+-----------+ | |||
| | | JSTask, | 4.2.11 | | |contentType |String |Link |Section | | |||
| | | JSGroup | | | | | | |1.4.11 | | |||
| | | | | | +--------------------+-----------------+----------------+-----------+ | |||
| comments | String[] | TimeZoneRu | Section | | |coordinates |String |Location |Section | | |||
| | | le | 4.7.2 | | | | | |4.2.5 | | |||
| | | | | | +--------------------+-----------------+----------------+-----------+ | |||
| contentType | String | Link | Section | | |count |UnsignedInt |RecurrenceRule |Section | | |||
| | | | 1.4.11 | | | | | |4.3.3 | | |||
| | | | | | +--------------------+-----------------+----------------+-----------+ | |||
| coordinates | String | Location | Section | | |created |UTCDateTime |Event, Task, |Section | | |||
| | | | 4.2.5 | | | | |Group |4.1.5 | | |||
| | | | | | +--------------------+-----------------+----------------+-----------+ | |||
| count | UnsignedInt | Recurrence | Section | | |day |String |NDay |Section | | |||
| | | Rule | 4.3.2 | | | | | |4.3.3 | | |||
| | | | | | +--------------------+-----------------+----------------+-----------+ | |||
| created | UTCDateTime | JSEvent, | Section | | |daylight |TimeZoneRule[] |TimeZone |Section | | |||
| | | JSTask, | 4.1.5 | | | | | |4.7.2 | | |||
| | | JSGroup | | | +--------------------+-----------------+----------------+-----------+ | |||
| | | | | | |delegatedFrom |Id[Boolean] |Participant |Section | | |||
| day | String | NDay | Section | | | | | |4.4.6 | | |||
| | | | 4.3.2 | | +--------------------+-----------------+----------------+-----------+ | |||
| | | | | | |delegatedTo |Id[Boolean] |Participant |Section | | |||
| daylight | TimeZoneRule | TimeZone | Section | | | | | |4.4.6 | | |||
| | | | 4.7.2 | | +--------------------+-----------------+----------------+-----------+ | |||
| | | | | | |description |String |Event, Task, |Section | | |||
| delegatedFrom | String[Boolean] | Participan | Section | | | | |Location, |4.2.2, | | |||
| | | t | 4.4.5 | | | | |Participant, |Section | | |||
| | | | | | | | |VirtualLocation |4.2.5, | | |||
| delegatedTo | String[Boolean] | Participan | Section | | | | | |Section | | |||
| | | t | 4.4.5 | | | | | |4.4.6, | | |||
| | | | | | | | | |Section | | |||
| description | String | JSEvent, | Section | | | | | |4.2.6 | | |||
| | | JSTask, | 4.2.2, | | +--------------------+-----------------+----------------+-----------+ | |||
| | | Location, | Section | | |description |String |Event, Task |Section | | |||
| | | Participan | 4.2.5, | | |ContentType | | |4.2.3 | | |||
| | | t, Virtual | Section | | +--------------------+-----------------+----------------+-----------+ | |||
| | | Location | 4.4.5, | | |display |String |Link |Section | | |||
| | | | Section | | | | | |1.4.11 | | |||
| | | | 4.2.6 | | +--------------------+-----------------+----------------+-----------+ | |||
| | | | | | |due |LocalDateTime |Task |Section | | |||
| descriptionCo | String | JSEvent, | Section | | | | | |5.2.1 | | |||
| ntentType | | JSTask | 4.2.3 | | +--------------------+-----------------+----------------+-----------+ | |||
| | | | | | |duration |Duration |Event |Section | | |||
| display | String | Link | Section | | | | | |5.1.2 | | |||
| | | | 1.4.11 | | +--------------------+-----------------+----------------+-----------+ | |||
| | | | | | |email |String |Participant |Section | | |||
| due | LocalDateTime | JSTask | Section | | | | | |4.4.6 | | |||
| | | | 5.2.1 | | +--------------------+-----------------+----------------+-----------+ | |||
| | | | | | |entries |(Task|Event)[] |Group |Section | | |||
| duration | Duration | JSEvent | Section | | | | | |5.3.1 | | |||
| | | | 5.1.2 | | +--------------------+-----------------+----------------+-----------+ | |||
| | | | | | |estimatedDuration |Duration |Task |Section | | |||
| email | String | Participan | Section | | | | | |5.2.3 | | |||
| | | t | 4.4.5 | | +--------------------+-----------------+----------------+-----------+ | |||
| | | | | | |excluded |Boolean |Event, Task |Section | | |||
| entries | (JSTask|JSEvent)[] | JSGroup | Section | | | | | |4.3.6 | | |||
| | | | 5.3.1 | | +--------------------+-----------------+----------------+-----------+ | |||
| | | | | | |excluded |RecurrenceRule[] |Event, Task |Section | | |||
| estimatedDura | Duration | JSTask | Section | | |RecurrenceRules | | |4.3.4 | | |||
| tion | | | 5.2.3 | | +--------------------+-----------------+----------------+-----------+ | |||
| | | | | | |expectReply |Boolean |Participant |Section | | |||
| excluded | Boolean | JSEvent, | Section | | | | | |4.4.6 | | |||
| | | JSTask | 4.3.5 | | +--------------------+-----------------+----------------+-----------+ | |||
| | | | | | |features |String[Boolean] |VirtualLocation |Section | | |||
| excludedRecur | RecurrenceRule[] | JSEvent, | Section | | | | | |4.2.6 | | |||
| renceRules | | JSTask | 4.3.3 | | +--------------------+-----------------+----------------+-----------+ | |||
| | | | | | |firstDayOfWeek |String |RecurrenceRule |Section | | |||
| expectReply | Boolean | Participan | Section | | | | | |4.3.3 | | |||
| | | t | 4.4.5 | | +--------------------+-----------------+----------------+-----------+ | |||
| | | | | | |freeBusyStatus |String |Event, Task |Section | | |||
| firstDayOfWee | String | Recurrence | Section | | | | | |4.4.2 | | |||
| k | | Rule | 4.3.2 | | +--------------------+-----------------+----------------+-----------+ | |||
| | | | | | |frequency |String |RecurrenceRule |Section | | |||
| freeBusyStatu | String | JSEvent, | Section | | | | | |4.3.3 | | |||
| s | | JSTask | 4.4.2 | | +--------------------+-----------------+----------------+-----------+ | |||
| | | | | | |href |String |Link |Section | | |||
| frequency | String | Recurrence | Section | | | | | |1.4.11 | | |||
| | | Rule | 4.3.2 | | +--------------------+-----------------+----------------+-----------+ | |||
| | | | | | |interval |UnsignedInt |RecurrenceRule |Section | | |||
| href | String | Link | Section | | | | | |4.3.3 | | |||
| | | | 1.4.11 | | +--------------------+-----------------+----------------+-----------+ | |||
| | | | | | |invitedBy |Id |Participant |Section | | |||
| interval | UnsignedInt | Recurrence | Section | | | | | |4.4.6 | | |||
| | | Rule | 4.3.2 | | +--------------------+-----------------+----------------+-----------+ | |||
| | | | | | |keywords |String[Boolean] |Event, Task, |Section | | |||
| invitedBy | String | Participan | Section | | | | |Group |4.2.9 | | |||
| | | t | 4.4.5 | | +--------------------+-----------------+----------------+-----------+ | |||
| | | | | | |kind |String |Participant |Section | | |||
| keywords | String[Boolean] | JSEvent, | Section | | | | | |4.4.6 | | |||
| | | JSTask, | 4.2.9 | | +--------------------+-----------------+----------------+-----------+ | |||
| | | JSGroup | | | |language |String |Participant |Section | | |||
| | | | | | | | | |4.4.6 | | |||
| kind | String | Participan | Section | | +--------------------+-----------------+----------------+-----------+ | |||
| | | t | 4.4.5 | | |links |Id[Link] |Group, Event, |Section | | |||
| | | | | | | | |Task, Location, |4.2.7, | | |||
| language | String | Participan | Section | | | | |Participant |Section | | |||
| | | t | 4.4.5 | | | | | |4.2.5, | | |||
| | | | | | | | | |Section | | |||
| links | Id[Link] | JSGroup, | Section | | | | | |4.4.6 | | |||
| | | JSEvent, | 4.2.7, | | +--------------------+-----------------+----------------+-----------+ | |||
| | | JSTask, | Section | | |locale |String |Group, Event, |Section | | |||
| | | Location, | 4.2.5, | | | | |Task |4.2.8 | | |||
| | | Participan | Section | | +--------------------+-----------------+----------------+-----------+ | |||
| | | t | 4.4.5 | | |localizations |String |Event, Task |Section | | |||
| | | | | | | |[PatchObject] | |4.6.1 | | |||
| locale | String | JSGroup, | Section | | +--------------------+-----------------+----------------+-----------+ | |||
| | | JSEvent, | 4.2.8 | | |locationId |Id |Participant |Section | | |||
| | | JSTask | | | | | | |4.4.6 | | |||
| | | | | | +--------------------+-----------------+----------------+-----------+ | |||
| localizations | String[PatchObject] | JSEvent, | Section | | |locations |Id[Location] |Event, Task |Section | | |||
| | | JSTask | 4.6.1 | | | | | |4.2.5 | | |||
| | | | | | +--------------------+-----------------+----------------+-----------+ | |||
| locationId | String | Participan | Section | | |locationTypes |String[Boolean] |Location |Section | | |||
| | | t | 4.4.5 | | | | | |4.2.5 | | |||
| | | | | | +--------------------+-----------------+----------------+-----------+ | |||
| locations | Id[Location] | JSEvent, | Section | | |memberOf |Id[Boolean] |Participant |Section | | |||
| | | JSTask | 4.2.5 | | | | | |4.4.6 | | |||
| | | | | | +--------------------+-----------------+----------------+-----------+ | |||
| locationTypes | String[Boolean] | Location | Section | | |method |String |Event, Task |Section | | |||
| | | | 4.2.5 | | | | | |4.1.8 | | |||
| | | | | | +--------------------+-----------------+----------------+-----------+ | |||
| memberOf | String[Boolean] | Participan | Section | | |name |String |Location, |Section | | |||
| | | t | 4.4.5 | | | | |VirtualLocation,|4.2.5, | | |||
| | | | | | | | |Participant |Section | | |||
| method | String | JSEvent, | Section | | | | | |4.2.6, | | |||
| | | JSTask | 4.1.8 | | | | | |Section | | |||
| | | | | | | | | |4.4.6 | | |||
| name | String | Location, | Section | | +--------------------+-----------------+----------------+-----------+ | |||
| | | VirtualLoc | 4.2.5, | | |names |String[Boolean] |TimeZoneRule |Section | | |||
| | | ation, Par | Section | | | | | |4.7.2 | | |||
| | | ticipant | 4.2.6, | | +--------------------+-----------------+----------------+-----------+ | |||
| | | | Section | | |nthOfPeriod |Int |NDay |Section | | |||
| | | | 4.4.5 | | | | | |4.3.3 | | |||
| | | | | | +--------------------+-----------------+----------------+-----------+ | |||
| names | String[Boolean] | TimeZoneRu | Section | | |offset |SignedDuration |OffsetTrigger |Section | | |||
| | | le | 4.7.2 | | | | | |4.5.2 | | |||
| | | | | | +--------------------+-----------------+----------------+-----------+ | |||
| nthOfPeriod | Int | NDay | Section | | |offsetFrom |UTCDateTime |TimeZoneRule |Section | | |||
| | | | 4.3.2 | | | | | |4.7.2 | | |||
| | | | | | +--------------------+-----------------+----------------+-----------+ | |||
| offset | SignedDuration | OffsetTrig | Section | | |offsetTo |UTCDateTime |TimeZoneRule |Section | | |||
| | | ger | 4.5.2 | | | | | |4.7.2 | | |||
| | | | | | +--------------------+-----------------+----------------+-----------+ | |||
| offsetFrom | UTCDateTime | TimeZoneRu | Section | | |participants |Id[Participant] |Event, Task |Section | | |||
| | | le | 4.7.2 | | | | | |4.4.6 | | |||
| | | | | | +--------------------+-----------------+----------------+-----------+ | |||
| offsetTo | UTCDateTime | TimeZoneRu | Section | | |participationComment|String |Participant |Section | | |||
| | | le | 4.7.2 | | | | | |4.4.6 | | |||
| | | | | | +--------------------+-----------------+----------------+-----------+ | |||
| participants | Id[Participant] | JSEvent, | Section | | |participationStatus |String |Participant |Section | | |||
| | | JSTask | 4.4.5 | | | | | |4.4.6 | | |||
| | | | | | +--------------------+-----------------+----------------+-----------+ | |||
| participation | String | Participan | Section | | |percentComplete |UnsignedInt |Task, |Section | | |||
| Comment | | t | 4.4.5 | | | | |Participant |5.2.4 | | |||
| | | | | | +--------------------+-----------------+----------------+-----------+ | |||
| participation | String | Participan | Section | | |priority |Int |Event, Task |Section | | |||
| Status | | t | 4.4.5 | | | | | |4.4.1 | | |||
| | | | | | +--------------------+-----------------+----------------+-----------+ | |||
| percentComple | UnsignedInt | JSTask, Pa | Section | | |privacy |String |Event, Task |Section | | |||
| te | | rticipant | 5.2.4 | | | | | |4.4.3 | | |||
| | | | | | +--------------------+-----------------+----------------+-----------+ | |||
| priority | Int | JSEvent, | Section | | |prodId |String |Event, Task, |Section | | |||
| | | JSTask | 4.4.1 | | | | |Group |4.1.4 | | |||
| | | | | | +--------------------+-----------------+----------------+-----------+ | |||
| privacy | String | JSEvent, | Section | | |progress |String |Task, |Section | | |||
| | | JSTask | 4.4.3 | | | | |Participant |5.2.5 | | |||
| | | | | | +--------------------+-----------------+----------------+-----------+ | |||
| prodId | String | JSEvent, | Section | | |progressUpdated |UTCDateTime |Task, |Section | | |||
| | | JSTask, | 4.1.4 | | | | |Participant |5.2.6 | | |||
| | | JSGroup | | | +--------------------+-----------------+----------------+-----------+ | |||
| | | | | | |recurrenceId |LocalDateTime |Event, Task |Section | | |||
| progress | String | JSTask, Pa | Section | | | | | |4.3.1 | | |||
| | | rticipant | 5.2.5 | | +--------------------+-----------------+----------------+-----------+ | |||
| | | | | | |recurrenceIdTimeZone|TimeZoneId|null |Event, Task |Section | | |||
| progressUpdat | UTCDateTime | JSTask, Pa | Section | | | | | |4.3.2 | | |||
| ed | | rticipant | 5.2.6 | | +--------------------+-----------------+----------------+-----------+ | |||
| | | | | | |recurrenceOverrides |LocalDateTime |Event, Task, |Section | | |||
| recurrenceId | LocalDateTime | JSEvent, | Section | | | |[PatchObject] |TimeZoneRule |4.3.5, | | |||
| | | JSTask | 4.3.1 | | | | | |Section | | |||
| | | | | | | | | |4.7.2 | | |||
| recurrenceOve | LocalDateTime[PatchObject] | JSEvent, | Section | | +--------------------+-----------------+----------------+-----------+ | |||
| rrides | | JSTask, Ti | 4.3.4, | | |recurrenceRules |RecurrenceRule[] |Event, Task, |Section | | |||
| | | meZoneRule | Section | | | | |TimeZoneRule |4.3.3, | | |||
| | | | 4.7.2 | | | | | |Section | | |||
| | | | | | | | | |4.7.2 | | |||
| recurrenceRul | RecurrenceRule[] | JSEvent, | Section | | +--------------------+-----------------+----------------+-----------+ | |||
| es | | JSTask, Ti | 4.3.2, | | |rel |String |Link |Section | | |||
| | | meZoneRule | Section | | | | | |1.4.11 | | |||
| | | | 4.7.2 | | +--------------------+-----------------+----------------+-----------+ | |||
| | | | | | |relatedTo |String[Relation] |Event, Task, |Section | | |||
| rel | String | Link | Section | | | | |Alert |4.1.3, | | |||
| | | | 1.4.11 | | | | | |Section | | |||
| | | | | | | | | |4.5.2 | | |||
| relatedTo | String[Relation] | JSEvent, | Section | | +--------------------+-----------------+----------------+-----------+ | |||
| | | JSTask, | 4.1.3, | | |relation |String[Boolean] |Relation |Section | | |||
| | | Alert | Section | | | | | |1.4.10 | | |||
| | | | 4.5.2 | | +--------------------+-----------------+----------------+-----------+ | |||
| | | | | | |relativeTo |String |OffsetTrigger, |Section | | |||
| relation | String[Boolean] | Relation | Section | | | | |Location |4.5.2, | | |||
| | | | 1.4.10 | | | | | |Section | | |||
| | | | | | | | | |4.2.5 | | |||
| relativeTo | String | OffsetTrig | Section | | +--------------------+-----------------+----------------+-----------+ | |||
| | | ger, | 4.5.2, | | |replyTo |String[String] |Event, Task |Section | | |||
| | | Location | Section | | | | | |4.4.4 | | |||
| | | | 4.2.5 | | +--------------------+-----------------+----------------+-----------+ | |||
| | | | | | |requestStatus |String |Event, Task |Section | | |||
| replyTo | String[String] | JSEvent, | Section | | | | | |4.4.7 | | |||
| | | JSTask | 4.4.4 | | +--------------------+-----------------+----------------+-----------+ | |||
| | | | | | |roles |String[Boolean] |Participant |Section | | |||
| roles | String[Boolean] | Participan | Section | | | | | |4.4.6 | | |||
| | | t | 4.4.5 | | +--------------------+-----------------+----------------+-----------+ | |||
| | | | | | |rscale |String |RecurrenceRule |Section | | |||
| rscale | String | Recurrence | Section | | | | | |4.3.3 | | |||
| | | Rule | 4.3.2 | | +--------------------+-----------------+----------------+-----------+ | |||
| | | | | | |sentBy |String |Event, Task, |Section | | |||
| standard | TimeZoneRule | TimeZone | Section | | | | |Participant |4.4.5, | | |||
| | | | 4.7.2 | | | | | |Section | | |||
| | | | | | | | | |4.4.6 | | |||
| start | LocalDateTime | TimeZoneRu | Section | | +--------------------+-----------------+----------------+-----------+ | |||
| | | le | 4.7.2 | | |standard |TimeZoneRule[] |TimeZone |Section | | |||
| | | | | | | | | |4.7.2 | | |||
| scheduleAgent | String | Participan | Section | | +--------------------+-----------------+----------------+-----------+ | |||
| | | t | 4.4.5 | | |start |LocalDateTime |TimeZoneRule |Section | | |||
| | | | | | | | | |4.7.2 | | |||
| scheduleForce | Boolean | Participan | Section | | +--------------------+-----------------+----------------+-----------+ | |||
| Send | | t | 4.4.5 | | |scheduleAgent |String |Participant |Section | | |||
| | | | | | | | | |4.4.6 | | |||
| scheduleSeque | UnsignedInt | Participan | Section | | +--------------------+-----------------+----------------+-----------+ | |||
| nce | | t | 4.4.5 | | |scheduleForceSend |Boolean |Participant |Section | | |||
| | | | | | | | | |4.4.6 | | |||
| scheduleStatu | String[] | Participan | Section | | +--------------------+-----------------+----------------+-----------+ | |||
| s | | t | 4.4.5 | | |scheduleSequence |UnsignedInt |Participant |Section | | |||
| | | | | | | | | |4.4.6 | | |||
| scheduleUpdat | UTCDateTime | Participan | Section | | +--------------------+-----------------+----------------+-----------+ | |||
| ed | | t | 4.4.5 | | |scheduleStatus |String[] |Participant |Section | | |||
| | | | | | | | | |4.4.6 | | |||
| sendTo | String[String] | Participan | Section | | +--------------------+-----------------+----------------+-----------+ | |||
| | | t | 4.4.5 | | |scheduleUpdated |UTCDateTime |Participant |Section | | |||
| | | | | | | | | |4.4.6 | | |||
| sequence | UnsignedInt | JSEvent, | Section | | +--------------------+-----------------+----------------+-----------+ | |||
| | | JSTask | 4.1.7 | | |sendTo |String[String] |Participant |Section | | |||
| | | | | | | | | |4.4.6 | | |||
| showWithoutTi | Boolean | JSEvent, | Section | | +--------------------+-----------------+----------------+-----------+ | |||
| me | | JSTask | 4.2.4 | | |sequence |UnsignedInt |Event, Task |Section | | |||
| | | | | | | | | |4.1.7 | | |||
| size | UnsignedInt | Link | Section | | +--------------------+-----------------+----------------+-----------+ | |||
| | | | 1.4.11 | | |showWithoutTime |Boolean |Event, Task |Section | | |||
| | | | | | | | | |4.2.4 | | |||
| skip | String | Recurrence | Section | | +--------------------+-----------------+----------------+-----------+ | |||
| | | Rule | 4.3.2 | | |size |UnsignedInt |Link |Section | | |||
| | | | | | | | | |1.4.11 | | |||
| source | String | JSGroup | Section | | +--------------------+-----------------+----------------+-----------+ | |||
| | | | 5.3.2 | | |skip |String |RecurrenceRule |Section | | |||
| | | | | | | | | |4.3.3 | | |||
| start | LocalDateTime | JSEvent, | Section | | +--------------------+-----------------+----------------+-----------+ | |||
| | | JSTask | 5.1.1, | | |source |String |Group |Section | | |||
| | | | Section | | | | | |5.3.2 | | |||
| | | | 5.2.2 | | +--------------------+-----------------+----------------+-----------+ | |||
| | | | | | |start |LocalDateTime |Event, Task |Section | | |||
| status | String | JSEvent | Section | | | | | |5.1.1, | | |||
| | | | 5.1.3 | | | | | |Section | | |||
| | | | | | | | | |5.2.2 | | |||
| timeZone | TimeZoneId|null | JSEvent, | Section | | +--------------------+-----------------+----------------+-----------+ | |||
| | | JSTask, | 4.7.1, | | |status |String |Event |Section | | |||
| | | Location | Section | | | | | |5.1.3 | | |||
| | | | 4.2.5 | | +--------------------+-----------------+----------------+-----------+ | |||
| | | | | | |timeZone |TimeZoneId|null |Event, Task, |Section | | |||
| timeZones | TimeZoneId[TimeZone] | JSEvent, | Section | | | | |Location |4.7.1, | | |||
| | | JSTask | 4.7.2 | | | | | |Section | | |||
| | | | | | | | | |4.2.5 | | |||
| title | String | JSEvent, | Section | | +--------------------+-----------------+----------------+-----------+ | |||
| | | JSTask, | 4.2.1 | | |timeZones |TimeZoneId |Event, Task |Section | | |||
| | | JSGroup, | | | | |[TimeZone] | |4.7.2 | | |||
| | | Link | | | +--------------------+-----------------+----------------+-----------+ | |||
| | | | | | |title |String |Event, Task, |Section | | |||
| trigger | OffsetTrigger|AbsoluteTrig | Alert | Section | | | | |Group, Link |4.2.1 | | |||
| | ger|UnknownTrigger | | 4.5.2 | | +--------------------+-----------------+----------------+-----------+ | |||
| | | | | | |trigger |OffsetTrigger| |Alert |Section | | |||
| tzId | String | TimeZone | Section | | | |AbsoluteTrigger| | |4.5.2 | | |||
| | | | 4.7.2 | | | |UnknownTrigger | | | | |||
| | | | | | +--------------------+-----------------+----------------+-----------+ | |||
| uid | String | JSEvent, | Section | | |tzId |String |TimeZone |Section | | |||
| | | JSTask, | 4.1.2 | | | | | |4.7.2 | | |||
| | | JSGroup | | | +--------------------+-----------------+----------------+-----------+ | |||
| | | | | | |uid |String |Event, Task, |Section | | |||
| until | LocalDateTime | Recurrence | Section | | | | |Group |4.1.2 | | |||
| | | Rule | 4.3.2 | | +--------------------+-----------------+----------------+-----------+ | |||
| | | | | | |until |LocalDateTime |RecurrenceRule |Section | | |||
| updated | UTCDateTime | JSEvent, | Section | | | | | |4.3.3 | | |||
| | | JSTask, | 4.1.6 | | +--------------------+-----------------+----------------+-----------+ | |||
| | | JSGroup | | | |updated |UTCDateTime |Event, Task, |Section | | |||
| | | | | | | | |Group |4.1.6 | | |||
| uri | String | VirtualLoc | Section | | +--------------------+-----------------+----------------+-----------+ | |||
| | | ation | 4.2.6 | | |uri |String |VirtualLocation |Section | | |||
| | | | | | | | | |4.2.6 | | |||
| url | String | TimeZone | Section | | +--------------------+-----------------+----------------+-----------+ | |||
| | | | 4.7.2 | | |url |String |TimeZone |Section | | |||
| | | | | | | | | |4.7.2 | | |||
| useDefaultAle | Boolean | JSEvent, | Section | | +--------------------+-----------------+----------------+-----------+ | |||
| rts | | JSTask | 4.5.1 | | |useDefaultAlerts |Boolean |Event, Task |Section | | |||
| | | | | | | | | |4.5.1 | | |||
| validUntil | UTCDateTime | TimeZone | Section | | +--------------------+-----------------+----------------+-----------+ | |||
| | | | 4.7.2 | | |validUntil |UTCDateTime |TimeZone |Section | | |||
| | | | | | | | | |4.7.2 | | |||
| virtualLocati | Id[VirtualLocation] | JSEvent, | Section | | +--------------------+-----------------+----------------+-----------+ | |||
| ons | | JSTask | 4.2.6 | | |virtualLocations |Id |Event, Task |Section | | |||
| | | | | | | |[VirtualLocation]| |4.2.6 | | |||
| when | UTCDateTime | AbsoluteTr | Section | | +--------------------+-----------------+----------------+-----------+ | |||
| | | igger | 4.5.2 | | |when |UTCDateTime |AbsoluteTrigger |Section | | |||
+---------------+----------------------------+------------+---------+ | | | | |4.5.2 | | |||
+--------------------+-----------------+----------------+-----------+ | ||||
Table 1 | Table 1: Initial Contents of the "JSCalendar Properties" Registry | |||
8.3. Creation of "JSCalendar Types" Registry | 8.3. Creation of the "JSCalendar Types" Registry | |||
The IANA will create the "JSCalendar Types" registry to avoid name | IANA has created the "JSCalendar Types" registry to avoid name | |||
collisions and provide a complete reference for all data types used | collisions and provide a complete reference for all data types used | |||
for JSCalendar property values. The registration process is the same | for JSCalendar property values. The registration process is the same | |||
as for the JSCalendar Properties registry, as defined in Section 8.2. | as for the "JSCalendar Properties" registry, as defined in | |||
Section 8.2. | ||||
8.3.1. JSCalendar Types Registry Template | 8.3.1. "JSCalendar Types" Registry Template | |||
o Type Name: The name of the type. | Type Name: the name of the type | |||
o Reference or Description: A brief description or RFC number and | Reference or Description: a brief description or RFC number and | |||
section reference where the Type is specified (may be omitted for | section reference where the Type is specified (may be omitted for | |||
"reserved" type names). | "reserved" type names) | |||
o Intended Use: Common, reserved, or obsolete. | Intended Use: common, reserved, or obsolete | |||
o Change Controller: Who may request a change to this entry's | Change Controller: who may request a change to this entry's | |||
definition ("IETF" for IETF-stream RFCs). | definition ("IETF" for RFCs from the IETF stream) | |||
8.3.2. Initial Contents for the JSCalendar Types Registry | 8.3.2. Initial Contents for the "JSCalendar Types" Registry | |||
The following table lists the initial entries of the JSCalendar Types | The following table lists the initial entries of the JSCalendar Types | |||
registry. All properties are for common-use. All RFC section | registry. All properties are for common use. All RFC section | |||
references are for this document. The change controller for all | references are for this document. The change controller for all | |||
these properties is "IETF". | these properties is "IETF". | |||
+-----------------+--------------------------+ | +=================+==========================+ | |||
| Type Name | Reference or Description | | | Type Name | Reference or Description | | |||
+-----------------+--------------------------+ | +=================+==========================+ | |||
| Alert | Section 4.5.2 | | | Alert | Section 4.5.2 | | |||
| | | | +-----------------+--------------------------+ | |||
| Boolean | Section 1.3 | | | Boolean | Section 1.3 | | |||
| | | | +-----------------+--------------------------+ | |||
| Duration | Section 1.4.6 | | | Duration | Section 1.4.6 | | |||
| | | | +-----------------+--------------------------+ | |||
| Id | Section 1.4.1 | | | Id | Section 1.4.1 | | |||
| | | | +-----------------+--------------------------+ | |||
| Int | Section 1.4.2 | | | Int | Section 1.4.2 | | |||
| | | | +-----------------+--------------------------+ | |||
| LocalDateTime | Section 1.4.5 | | | LocalDateTime | Section 1.4.5 | | |||
| | | | +-----------------+--------------------------+ | |||
| Link | Section 1.4.11 | | | Link | Section 1.4.11 | | |||
| | | | +-----------------+--------------------------+ | |||
| Location | Section 4.2.5 | | | Location | Section 4.2.5 | | |||
| | | | +-----------------+--------------------------+ | |||
| NDay | Section 4.3.2 | | | NDay | Section 4.3.3 | | |||
| | | | +-----------------+--------------------------+ | |||
| Number | Section 1.3 | | | Number | Section 1.3 | | |||
| | | | +-----------------+--------------------------+ | |||
| Participant | Section 4.4.5 | | | Participant | Section 4.4.6 | | |||
| | | | +-----------------+--------------------------+ | |||
| PatchObject | Section 1.4.9 | | | PatchObject | Section 1.4.9 | | |||
| | | | +-----------------+--------------------------+ | |||
| RecurrenceRule | Section 4.3.2 | | | RecurrenceRule | Section 4.3.3 | | |||
| | | | +-----------------+--------------------------+ | |||
| Relation | Section 1.4.10 | | | Relation | Section 1.4.10 | | |||
| | | | +-----------------+--------------------------+ | |||
| SignedDuration | Section 1.4.7 | | | SignedDuration | Section 1.4.7 | | |||
| | | | +-----------------+--------------------------+ | |||
| String | Section 1.3 | | | String | Section 1.3 | | |||
| | | | +-----------------+--------------------------+ | |||
| TimeZone | Section 4.7.2 | | | TimeZone | Section 4.7.2 | | |||
| | | | +-----------------+--------------------------+ | |||
| TimeZoneId | Section 1.4.8 | | | TimeZoneId | Section 1.4.8 | | |||
| | | | +-----------------+--------------------------+ | |||
| TimeZoneRule | Section 4.7.2 | | | TimeZoneRule | Section 4.7.2 | | |||
| | | | +-----------------+--------------------------+ | |||
| UnsignedInt | Section 1.4.3 | | | UnsignedInt | Section 1.4.3 | | |||
| | | | +-----------------+--------------------------+ | |||
| UTCDateTime | Section 1.4.4 | | | UTCDateTime | Section 1.4.4 | | |||
| | | | +-----------------+--------------------------+ | |||
| VirtualLocation | Section 4.2.6 | | | VirtualLocation | Section 4.2.6 | | |||
+-----------------+--------------------------+ | +-----------------+--------------------------+ | |||
Table 2 | Table 2: Initial Contents of the | |||
"JSCalendar Types" Registry | ||||
8.4. Creation of "JSCalendar Enum Values" Registry | 8.4. Creation of the "JSCalendar Enum Values" Registry | |||
The IANA will create the "JSCalendar Enum Values" registry to allow | IANA has created the "JSCalendar Enum Values" registry to allow | |||
interoperable extension of semantics for properties with enumerable | interoperable extension of semantics for properties with enumerable | |||
values. Each such property will have a subregistry of allowed | values. Each such property will have a subregistry of allowed | |||
values. The registration process for a new enum value or adding a | values. The registration process for a new enum value or adding a | |||
new enumerable property is the same as for the JSCalendar Properties | new enumerable property is the same as for the "JSCalendar | |||
registry, as defined in Section 8.2. | Properties" registry, as defined in Section 8.2. | |||
8.4.1. JSCalendar Enum Property Template | 8.4.1. "JSCalendar Enum Values" Registry Property Template | |||
This template is for adding a subregistry for a new enumerable | This template is for adding a subregistry for a new enumerable | |||
property to the JSCalendar Enum registry. | property to the "JSCalendar Enum" registry. | |||
o Property Name: the name(s) of the property or properties where | Property Name: These are the name(s) of the property or properties | |||
these values may be used. This MUST be registered in the | where these values may be used. This MUST be registered in the | |||
JSCalendar Properties registry. | "JSCalendar Properties" registry. | |||
o Context: the list of allowed object types where the property or | Context: This is the list of allowed object types where the property | |||
properties may appear, as registered in the JSCalendar Properties | or properties may appear, as registered in the "JSCalendar | |||
registry. This disambiguates where there may be two distinct | Properties" registry. This disambiguates where there may be two | |||
properties with the same name in different contexts. | distinct properties with the same name in different contexts. | |||
o Change Controller: ("IETF" for properties defined in IETF-stream | Change Controller: ("IETF" for properties defined in RFCs from the | |||
RFCs). | IETF stream). | |||
o Initial Contents: The initial list of defined values for this | Initial Contents: This is the initial list of defined values for | |||
enum, using the template defined in Section 8.4.2. A subregistry | this enum, using the template defined in Section 8.4.2. A | |||
will be created with these values for this property name/context | subregistry will be created with these values for this property | |||
tuple. | name/context tuple. | |||
8.4.2. JSCalendar Enum Value Template | 8.4.2. "JSCalendar Enum Values" Registry Value Template | |||
This template is for adding a new enum value to a subregistry in the | This template is for adding a new enum value to a subregistry in the | |||
JSCalendar Enum registry. | JSCalendar Enum registry. | |||
o Enum Value: The verbatim value of the enum. | Enum Value: the verbatim value of the enum | |||
o Reference or Description: A brief description or RFC number and | Reference or Description: a brief description or RFC number and | |||
section reference for the semantics of this value. | section reference for the semantics of this value | |||
8.4.3. Initial Contents for the JSCalendar Enum Values registry | 8.4.3. Initial Contents for the "JSCalendar Enum Values" Registry | |||
For each subregistry created in this section, all RFC section | For each subregistry created in this section, all RFC section | |||
references are for this document. | references are for this document. | |||
------------------------------------------------------------ | Property Name: action | |||
Context: Alert | ||||
Property Name: action | Change Controller: IETF | |||
Context: Alert | ||||
Change Controller: IETF | ||||
Initial Contents: | Initial Contents: | |||
+============+==========================+ | ||||
| Enum Value | Reference or Description | | ||||
+============+==========================+ | ||||
| display | Section 4.5.2 | | ||||
+------------+--------------------------+ | ||||
| email | Section 4.5.2 | | ||||
+------------+--------------------------+ | ||||
+------------+--------------------------+ | Table 3: JSCalendar Enum Values for | |||
| Enum Value | Reference or Description | | action (Context: Alert) | |||
+------------+--------------------------+ | ||||
| display | Section 4.5.2 | | ||||
| | | | ||||
| email | Section 4.5.2 | | ||||
+------------+--------------------------+ | ||||
Table 3 | ||||
------------------------------------------------------------ | ||||
Property Name: display | ||||
Context: Link | ||||
Change Controller: IETF | ||||
Property Name: display | ||||
Context: Link | ||||
Change Controller: IETF | ||||
Initial Contents: | Initial Contents: | |||
+============+==========================+ | ||||
| Enum Value | Reference or Description | | ||||
+============+==========================+ | ||||
| badge | Section 1.4.11 | | ||||
+------------+--------------------------+ | ||||
| graphic | Section 1.4.11 | | ||||
+------------+--------------------------+ | ||||
| fullsize | Section 1.4.11 | | ||||
+------------+--------------------------+ | ||||
| thumbnail | Section 1.4.11 | | ||||
+------------+--------------------------+ | ||||
+------------+--------------------------+ | Table 4: JSCalendar Enum Values for | |||
| Enum Value | Reference or Description | | display (Context: Link) | |||
+------------+--------------------------+ | ||||
| badge | Section 1.4.11 | | ||||
| | | | ||||
| graphic | Section 1.4.11 | | ||||
| | | | ||||
| fullsize | Section 1.4.11 | | ||||
| | | | ||||
| thumbnail | Section 1.4.11 | | ||||
+------------+--------------------------+ | ||||
Table 4 | ||||
------------------------------------------------------------ | ||||
Property Name: freeBusyStatus | ||||
Context: JSEvent, JSTask | ||||
Change Controller: IETF | ||||
Property Name: features | ||||
Context: VirtualLocation | ||||
Change Controller: IETF | ||||
Initial Contents: | Initial Contents: | |||
+============+==========================+ | ||||
| Enum Value | Reference or Description | | ||||
+============+==========================+ | ||||
| audio | Section 4.2.6 | | ||||
+------------+--------------------------+ | ||||
| chat | Section 4.2.6 | | ||||
+------------+--------------------------+ | ||||
| feed | Section 4.2.6 | | ||||
+------------+--------------------------+ | ||||
| moderator | Section 4.2.6 | | ||||
+------------+--------------------------+ | ||||
| phone | Section 4.2.6 | | ||||
+------------+--------------------------+ | ||||
| screen | Section 4.2.6 | | ||||
+------------+--------------------------+ | ||||
| video | Section 4.2.6 | | ||||
+------------+--------------------------+ | ||||
+------------+--------------------------+ | Table 5: JSCalendar Enum Values for | |||
| Enum Value | Reference or Description | | features (Context: VirtualLocation) | |||
+------------+--------------------------+ | ||||
| free | Section 4.4.2 | | ||||
| | | | ||||
| busy | Section 4.4.2 | | ||||
+------------+--------------------------+ | ||||
Table 5 | ||||
------------------------------------------------------------ | ||||
Property Name: kind | ||||
Context: Participant | ||||
Change Controller: IETF | ||||
Property Name: freeBusyStatus | ||||
Context: Event, Task | ||||
Change Controller: IETF | ||||
Initial Contents: | Initial Contents: | |||
+============+==========================+ | ||||
| Enum Value | Reference or Description | | ||||
+============+==========================+ | ||||
| free | Section 4.4.2 | | ||||
+------------+--------------------------+ | ||||
| busy | Section 4.4.2 | | ||||
+------------+--------------------------+ | ||||
+------------+--------------------------+ | Table 6: JSCalendar Enum Values for | |||
| Enum Value | Reference or Description | | freeBusyStatus (Context: Event, Task) | |||
+------------+--------------------------+ | ||||
| individual | Section 4.4.5 | | ||||
| | | | ||||
| group | Section 4.4.5 | | ||||
| | | | ||||
| resource | Section 4.4.5 | | ||||
| | | | ||||
| location | Section 4.4.5 | | ||||
+------------+--------------------------+ | ||||
Table 6 | ||||
------------------------------------------------------------ | ||||
Property Name: participationStatus | ||||
Context: Participant | ||||
Change Controller: IETF | ||||
Property Name: kind | ||||
Context: Participant | ||||
Change Controller: IETF | ||||
Initial Contents: | Initial Contents: | |||
+============+==========================+ | ||||
| Enum Value | Reference or Description | | ||||
+============+==========================+ | ||||
| individual | Section 4.4.6 | | ||||
+------------+--------------------------+ | ||||
| group | Section 4.4.6 | | ||||
+------------+--------------------------+ | ||||
| resource | Section 4.4.6 | | ||||
+------------+--------------------------+ | ||||
| location | Section 4.4.6 | | ||||
+------------+--------------------------+ | ||||
+--------------+--------------------------+ | Table 7: JSCalendar Enum Values for | |||
| Enum Value | Reference or Description | | kind (Context: Participant) | |||
+--------------+--------------------------+ | ||||
| needs-action | Section 4.4.5 | | ||||
| | | | ||||
| accepted | Section 4.4.5 | | ||||
| | | | ||||
| declined | Section 4.4.5 | | ||||
| | | | ||||
| tenative | Section 4.4.5 | | ||||
| | | | ||||
| delegated | Section 4.4.5 | | ||||
+--------------+--------------------------+ | ||||
Table 7 | ||||
------------------------------------------------------------ | ||||
Property Name: privacy | ||||
Context: JSEvent, JSTask | ||||
Change Controller: IETF | ||||
Property Name: participationStatus | ||||
Context: Participant | ||||
Change Controller: IETF | ||||
Initial Contents: | Initial Contents: | |||
+==============+==========================+ | ||||
| Enum Value | Reference or Description | | ||||
+==============+==========================+ | ||||
| needs-action | Section 4.4.6 | | ||||
+--------------+--------------------------+ | ||||
| accepted | Section 4.4.6 | | ||||
+--------------+--------------------------+ | ||||
| declined | Section 4.4.6 | | ||||
+--------------+--------------------------+ | ||||
| tentative | Section 4.4.6 | | ||||
+--------------+--------------------------+ | ||||
| delegated | Section 4.4.6 | | ||||
+--------------+--------------------------+ | ||||
+------------+--------------------------+ | Table 8: JSCalendar Enum Values for | |||
| Enum Value | Reference or Description | | participationStatus (Context: | |||
+------------+--------------------------+ | Participant) | |||
| public | Section 4.4.3 | | ||||
| | | | ||||
| private | Section 4.4.3 | | ||||
| | | | ||||
| secret | Section 4.4.3 | | ||||
+------------+--------------------------+ | ||||
Table 8 | ||||
------------------------------------------------------------ | ||||
Property Name: progress | ||||
Context: JSTask, Participant | ||||
Change Controller: IETF | ||||
Property Name: privacy | ||||
Context: Event, Task | ||||
Change Controller: IETF | ||||
Initial Contents: | Initial Contents: | |||
+============+==========================+ | ||||
| Enum Value | Reference or Description | | ||||
+============+==========================+ | ||||
| public | Section 4.4.3 | | ||||
+------------+--------------------------+ | ||||
| private | Section 4.4.3 | | ||||
+------------+--------------------------+ | ||||
| secret | Section 4.4.3 | | ||||
+------------+--------------------------+ | ||||
+--------------+--------------------------+ | Table 9: JSCalendar Enum Values for | |||
| Enum Value | Reference or Description | | privacy (Context: Event, Task) | |||
+--------------+--------------------------+ | ||||
| needs-action | Section 5.2.5 | | ||||
| | | | ||||
| in-process | Section 5.2.5 | | ||||
| | | | ||||
| completed | Section 5.2.5 | | ||||
| | | | ||||
| failed | Section 5.2.5 | | ||||
| | | | ||||
| cancelled | Section 5.2.5 | | ||||
+--------------+--------------------------+ | ||||
Table 9 | ||||
------------------------------------------------------------ | ||||
Property Name: relation | ||||
Context: Relation | ||||
Change Controller: IETF | ||||
Property Name: progress | ||||
Context: Task, Participant | ||||
Change Controller: IETF | ||||
Initial Contents: | Initial Contents: | |||
+==============+==========================+ | ||||
| Enum Value | Reference or Description | | ||||
+==============+==========================+ | ||||
| needs-action | Section 5.2.5 | | ||||
+--------------+--------------------------+ | ||||
| in-process | Section 5.2.5 | | ||||
+--------------+--------------------------+ | ||||
| completed | Section 5.2.5 | | ||||
+--------------+--------------------------+ | ||||
| failed | Section 5.2.5 | | ||||
+--------------+--------------------------+ | ||||
| cancelled | Section 5.2.5 | | ||||
+--------------+--------------------------+ | ||||
+------------+--------------------------+ | Table 10: JSCalendar Enum Values for | |||
| Enum Value | Reference or Description | | progress (Context: Task, Participant) | |||
+------------+--------------------------+ | ||||
| first | Section 1.4.10 | | ||||
| | | | ||||
| next | Section 1.4.10 | | ||||
| | | | ||||
| child | Section 1.4.10 | | ||||
| | | | ||||
| parent | Section 1.4.10 | | ||||
+------------+--------------------------+ | ||||
Table 10 | ||||
------------------------------------------------------------ | ||||
Property Name: relativeTo | ||||
Context: OffsetTrigger, Location | ||||
Change Controller: IETF | Property Name: relation | |||
Context: Relation | ||||
Change Controller: IETF | ||||
Initial Contents: | Initial Contents: | |||
+============+==========================+ | ||||
| Enum Value | Reference or Description | | ||||
+============+==========================+ | ||||
| first | Section 1.4.10 | | ||||
+------------+--------------------------+ | ||||
| next | Section 1.4.10 | | ||||
+------------+--------------------------+ | ||||
| child | Section 1.4.10 | | ||||
+------------+--------------------------+ | ||||
| parent | Section 1.4.10 | | ||||
+------------+--------------------------+ | ||||
+------------+--------------------------+ | Table 11: JSCalendar Enum Values for | |||
| Enum Value | Reference or Description | | relation (Context: Relation) | |||
+------------+--------------------------+ | ||||
| start | Section 4.5.2 | | ||||
| | | | ||||
| end | Section 4.5.2 | | ||||
+------------+--------------------------+ | ||||
Table 11 | ||||
------------------------------------------------------------ | ||||
Property Name: roles | ||||
Context: Participant | ||||
Change Controller: IETF | ||||
Property Name: relativeTo | ||||
Context: OffsetTrigger, Location | ||||
Change Controller: IETF | ||||
Initial Contents: | Initial Contents: | |||
+============+==========================+ | ||||
| Enum Value | Reference or Description | | ||||
+============+==========================+ | ||||
| start | Section 4.5.2 | | ||||
+------------+--------------------------+ | ||||
| end | Section 4.5.2 | | ||||
+------------+--------------------------+ | ||||
+---------------+--------------------------+ | Table 12: JSCalendar Enum Values for | |||
| Enum Value | Reference or Description | | relativeTo (Context: OffsetTrigger, | |||
+---------------+--------------------------+ | Location) | |||
| owner | Section 4.4.5 | | ||||
| | | | ||||
| attendee | Section 4.4.5 | | ||||
| | | | ||||
| optional | Section 4.4.5 | | ||||
| | | | ||||
| informational | Section 4.4.5 | | ||||
| | | | ||||
| chair | Section 4.4.5 | | ||||
| | | | ||||
| contact | Section 4.4.5 | | ||||
+---------------+--------------------------+ | ||||
Table 12 | ||||
------------------------------------------------------------ | ||||
Property Name: scheduleAgent | ||||
Context: Participant | ||||
Change Controller: IETF | Property Name: roles | |||
Context: Participant | ||||
Change Controller: IETF | ||||
Initial Contents: | Initial Contents: | |||
+===============+==========================+ | ||||
| Enum Value | Reference or Description | | ||||
+===============+==========================+ | ||||
| owner | Section 4.4.6 | | ||||
+---------------+--------------------------+ | ||||
| attendee | Section 4.4.6 | | ||||
+---------------+--------------------------+ | ||||
| optional | Section 4.4.6 | | ||||
+---------------+--------------------------+ | ||||
| informational | Section 4.4.6 | | ||||
+---------------+--------------------------+ | ||||
| chair | Section 4.4.6 | | ||||
+---------------+--------------------------+ | ||||
| contact | Section 4.4.6 | | ||||
+---------------+--------------------------+ | ||||
+------------+--------------------------+ | Table 13: JSCalendar Enum Values for | |||
| Enum Value | Reference or Description | | roles (Context: Participant) | |||
+------------+--------------------------+ | ||||
| server | Section 4.4.5 | | ||||
| | | | ||||
| client | Section 4.4.5 | | ||||
| | | | ||||
| none | Section 4.4.5 | | ||||
+------------+--------------------------+ | ||||
Table 13 | ||||
------------------------------------------------------------ | ||||
Property Name: status | ||||
Context: JSEvent | Property Name: scheduleAgent | |||
Context: Participant | ||||
Change Controller: IETF | ||||
Initial Contents: | ||||
+============+==========================+ | ||||
| Enum Value | Reference or Description | | ||||
+============+==========================+ | ||||
| server | Section 4.4.6 | | ||||
+------------+--------------------------+ | ||||
| client | Section 4.4.6 | | ||||
+------------+--------------------------+ | ||||
| none | Section 4.4.6 | | ||||
+------------+--------------------------+ | ||||
Change Controller: IETF | Table 14: JSCalendar Enum Values for | |||
scheduleAgent (Context: Participant) | ||||
Property Name: status | ||||
Context: Event | ||||
Change Controller: IETF | ||||
Initial Contents: | Initial Contents: | |||
+============+==========================+ | ||||
| Enum Value | Reference or Description | | ||||
+============+==========================+ | ||||
| confirmed | Section 5.1.3 | | ||||
+------------+--------------------------+ | ||||
| cancelled | Section 5.1.3 | | ||||
+------------+--------------------------+ | ||||
| tentative | Section 5.1.3 | | ||||
+------------+--------------------------+ | ||||
+------------+--------------------------+ | Table 15: JSCalendar Enum Values for | |||
| Enum Value | Reference or Description | | status (Context: Event) | |||
+------------+--------------------------+ | ||||
| confirmed | Section 5.1.3 | | ||||
| | | | ||||
| cancelled | Section 5.1.3 | | ||||
| | | | ||||
| tentative | Section 5.1.3 | | ||||
+------------+--------------------------+ | ||||
Table 14 | 9. References | |||
9. Acknowledgments | 9.1. Normative References | |||
The authors would like to thank the members of CalConnect for their | [BCP47] Phillips, A., Ed. and M. Davis, Ed., "Tags for Identifying | |||
valuable contributions. This specification originated from the work | Languages", BCP 47, RFC 5646, September 2009. | |||
of the API technical committee of CalConnect, the Calendaring and | ||||
Scheduling Consortium. | ||||
10. References | <https://www.rfc-editor.org/info/bcp47> | |||
10.1. Normative References | ||||
[CLDR] "Unicode Common Locale Data Repository", | [CLDR] "Unicode Common Locale Data Repository", | |||
<http://cldr.unicode.org/>. | <http://cldr.unicode.org/>. | |||
[COLORS] "CSS Color Module", <https://www.w3.org/TR/css-color-3/>. | [COLORS] Çelik, T., Lilley, C., and L. Baron, "CSS Color Module | |||
Level 3", W3C Recommendation, June 2018, | ||||
<https://www.w3.org/TR/css-color-3/>. | ||||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
<https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
[RFC2392] Levinson, E., "Content-ID and Message-ID Uniform Resource | [RFC2392] Levinson, E., "Content-ID and Message-ID Uniform Resource | |||
Locators", RFC 2392, DOI 10.17487/RFC2392, August 1998, | Locators", RFC 2392, DOI 10.17487/RFC2392, August 1998, | |||
<https://www.rfc-editor.org/info/rfc2392>. | <https://www.rfc-editor.org/info/rfc2392>. | |||
skipping to change at page 83, line 5 ¶ | skipping to change at line 3854 ¶ | |||
[RFC4648] Josefsson, S., "The Base16, Base32, and Base64 Data | [RFC4648] Josefsson, S., "The Base16, Base32, and Base64 Data | |||
Encodings", RFC 4648, DOI 10.17487/RFC4648, October 2006, | Encodings", RFC 4648, DOI 10.17487/RFC4648, October 2006, | |||
<https://www.rfc-editor.org/info/rfc4648>. | <https://www.rfc-editor.org/info/rfc4648>. | |||
[RFC5234] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax | [RFC5234] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax | |||
Specifications: ABNF", STD 68, RFC 5234, | Specifications: ABNF", STD 68, RFC 5234, | |||
DOI 10.17487/RFC5234, January 2008, | DOI 10.17487/RFC5234, January 2008, | |||
<https://www.rfc-editor.org/info/rfc5234>. | <https://www.rfc-editor.org/info/rfc5234>. | |||
[RFC5322] Resnick, P., Ed., "Internet Message Format", RFC 5322, | ||||
DOI 10.17487/RFC5322, October 2008, | ||||
<https://www.rfc-editor.org/info/rfc5322>. | ||||
[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>. | |||
[RFC5546] Daboo, C., Ed., "iCalendar Transport-Independent | [RFC5546] Daboo, C., Ed., "iCalendar Transport-Independent | |||
Interoperability Protocol (iTIP)", RFC 5546, | Interoperability Protocol (iTIP)", RFC 5546, | |||
DOI 10.17487/RFC5546, December 2009, | DOI 10.17487/RFC5546, December 2009, | |||
<https://www.rfc-editor.org/info/rfc5546>. | <https://www.rfc-editor.org/info/rfc5546>. | |||
[RFC5646] Phillips, A., Ed. and M. Davis, Ed., "Tags for Identifying | ||||
Languages", BCP 47, RFC 5646, DOI 10.17487/RFC5646, | ||||
September 2009, <https://www.rfc-editor.org/info/rfc5646>. | ||||
[RFC5870] Mayrhofer, A. and C. Spanring, "A Uniform Resource | [RFC5870] Mayrhofer, A. and C. Spanring, "A Uniform Resource | |||
Identifier for Geographic Locations ('geo' URI)", | Identifier for Geographic Locations ('geo' URI)", | |||
RFC 5870, DOI 10.17487/RFC5870, June 2010, | RFC 5870, DOI 10.17487/RFC5870, June 2010, | |||
<https://www.rfc-editor.org/info/rfc5870>. | <https://www.rfc-editor.org/info/rfc5870>. | |||
[RFC6047] Melnikov, A., Ed., "iCalendar Message-Based | [RFC6047] Melnikov, A., Ed., "iCalendar Message-Based | |||
Interoperability Protocol (iMIP)", RFC 6047, | Interoperability Protocol (iMIP)", RFC 6047, | |||
DOI 10.17487/RFC6047, December 2010, | DOI 10.17487/RFC6047, December 2010, | |||
<https://www.rfc-editor.org/info/rfc6047>. | <https://www.rfc-editor.org/info/rfc6047>. | |||
skipping to change at page 84, line 23 ¶ | skipping to change at line 3920 ¶ | |||
[RFC8259] Bray, T., Ed., "The JavaScript Object Notation (JSON) Data | [RFC8259] Bray, T., Ed., "The JavaScript Object Notation (JSON) Data | |||
Interchange Format", STD 90, RFC 8259, | Interchange Format", STD 90, RFC 8259, | |||
DOI 10.17487/RFC8259, December 2017, | DOI 10.17487/RFC8259, December 2017, | |||
<https://www.rfc-editor.org/info/rfc8259>. | <https://www.rfc-editor.org/info/rfc8259>. | |||
[RFC8288] Nottingham, M., "Web Linking", RFC 8288, | [RFC8288] Nottingham, M., "Web Linking", RFC 8288, | |||
DOI 10.17487/RFC8288, October 2017, | DOI 10.17487/RFC8288, October 2017, | |||
<https://www.rfc-editor.org/info/rfc8288>. | <https://www.rfc-editor.org/info/rfc8288>. | |||
[TZDB] "IANA Time Zone Database", | [TZDB] IANA, "Time Zone Database", | |||
<https://www.iana.org/time-zones>. | <https://www.iana.org/time-zones>. | |||
10.2. Informative References | 9.2. Informative References | |||
[LINKRELS] | [ISO.9070.1991] | |||
"IANA Link Relation Types", | ISO/IEC, "Information technology -- SGML support | |||
<https://www.iana.org/assignments/link-relations/link- | facilities -- Registration procedures for public text | |||
relations.xhtml>. | owner identifiers", ISO/IEC 9070:1991, Edition 2, April | |||
1991, <https://www.iso.org/standard/16645.html>. | ||||
[LINKRELS] IANA, "Link Relations: Link Relation Types", | ||||
<https://www.iana.org/assignments/link-relations>. | ||||
[LOCATIONTYPES] | [LOCATIONTYPES] | |||
"IANA Location Types Registry", | IANA, "Location Types Registry", | |||
<https://www.iana.org/assignments/location-type-registry/ | <https://www.iana.org/assignments/location-type-registry>. | |||
location-type-registry.xhtml>. | ||||
[MEDIATYPES] | [MEDIATYPES] | |||
"IANA Media Types", <https://www.iana.org/assignments/ | IANA, "Media Types", | |||
media-types/media-types.xhtml>. | <https://www.iana.org/assignments/media-types>. | |||
[RFC6376] Crocker, D., Ed., Hansen, T., Ed., and M. Kucherawy, Ed., | [RFC6376] Crocker, D., Ed., Hansen, T., Ed., and M. Kucherawy, Ed., | |||
"DomainKeys Identified Mail (DKIM) Signatures", STD 76, | "DomainKeys Identified Mail (DKIM) Signatures", STD 76, | |||
RFC 6376, DOI 10.17487/RFC6376, September 2011, | RFC 6376, DOI 10.17487/RFC6376, September 2011, | |||
<https://www.rfc-editor.org/info/rfc6376>. | <https://www.rfc-editor.org/info/rfc6376>. | |||
[RFC7265] Kewisch, P., Daboo, C., and M. Douglass, "jCal: The JSON | [RFC7265] Kewisch, P., Daboo, C., and M. Douglass, "jCal: The JSON | |||
Format for iCalendar", RFC 7265, DOI 10.17487/RFC7265, May | Format for iCalendar", RFC 7265, DOI 10.17487/RFC7265, May | |||
2014, <https://www.rfc-editor.org/info/rfc7265>. | 2014, <https://www.rfc-editor.org/info/rfc7265>. | |||
[RFC7986] Daboo, C., "New Properties for iCalendar", RFC 7986, | [RFC7986] Daboo, C., "New Properties for iCalendar", RFC 7986, | |||
DOI 10.17487/RFC7986, October 2016, | DOI 10.17487/RFC7986, October 2016, | |||
<https://www.rfc-editor.org/info/rfc7986>. | <https://www.rfc-editor.org/info/rfc7986>. | |||
Acknowledgments | ||||
The authors would like to thank the members of CalConnect for their | ||||
valuable contributions. This specification originated from the work | ||||
of the API technical committee of CalConnect: The Calendaring and | ||||
Scheduling Consortium. | ||||
Authors' Addresses | Authors' Addresses | |||
Neil Jenkins | Neil Jenkins | |||
Fastmail | Fastmail | |||
PO Box 234 | Collins St. West | |||
Collins St West | P.O. Box 234 | |||
Melbourne VIC 8007 | Melbourne VIC 8007 | |||
Australia | Australia | |||
Email: neilj@fastmailteam.com | Email: neilj@fastmailteam.com | |||
URI: https://www.fastmail.com | URI: https://www.fastmail.com | |||
Robert Stepanek | Robert Stepanek | |||
Fastmail | Fastmail | |||
PO Box 234 | Collins St. West | |||
Collins St West | P.O. Box 234 | |||
Melbourne VIC 8007 | Melbourne VIC 8007 | |||
Australia | Australia | |||
Email: rsto@fastmailteam.com | Email: rsto@fastmailteam.com | |||
URI: https://www.fastmail.com | URI: https://www.fastmail.com | |||
End of changes. 610 change blocks. | ||||
2035 lines changed or deleted | 2063 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |