| 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/ | ||||