draft-ietf-calext-jscalendar-13.txt | draft-ietf-calext-jscalendar-14.txt | |||
---|---|---|---|---|
Calendaring extensions N. Jenkins | Calendaring extensions N. Jenkins | |||
Internet-Draft R. Stepanek | Internet-Draft R. Stepanek | |||
Intended status: Standards Track FastMail | Intended status: Standards Track FastMail | |||
Expires: November 3, 2019 May 2, 2019 | Expires: December 8, 2019 June 6, 2019 | |||
JSCalendar: A JSON representation of calendar data | JSCalendar: A JSON representation of calendar data | |||
draft-ietf-calext-jscalendar-13 | draft-ietf-calext-jscalendar-14 | |||
Abstract | Abstract | |||
This specification defines a data model and JSON representation of | This specification defines a data model and JSON representation of | |||
calendar data that can be used for storage and data exchange in a | calendar data that can be used for storage and data exchange in a | |||
calendaring and scheduling environment. It aims to be an alternative | calendaring and scheduling environment. It aims to be an alternative | |||
to the widely deployed iCalendar data format and to be unambiguous, | to the widely deployed iCalendar data format and to be unambiguous, | |||
extendable and simple to process. In contrast to the JSON-based jCal | extendable and simple to process. In contrast to the JSON-based jCal | |||
format, it is not a direct mapping from iCalendar and expands | format, it is not a direct mapping from iCalendar and expands | |||
semantics where appropriate. | semantics where appropriate. | |||
skipping to change at page 1, line 36 ¶ | skipping to change at page 1, line 36 ¶ | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
Drafts is at https://datatracker.ietf.org/drafts/current/. | Drafts is at https://datatracker.ietf.org/drafts/current/. | |||
Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
This Internet-Draft will expire on November 3, 2019. | This Internet-Draft will expire on December 8, 2019. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2019 IETF Trust and the persons identified as the | Copyright (c) 2019 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
(https://trustee.ietf.org/license-info) in effect on the date of | (https://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | publication of this document. Please review these documents | |||
skipping to change at page 2, line 35 ¶ | skipping to change at page 2, line 35 ¶ | |||
3.2.6. Time Zones . . . . . . . . . . . . . . . . . . . . . 9 | 3.2.6. Time Zones . . . . . . . . . . . . . . . . . . . . . 9 | |||
3.2.7. Normalization and equivalence . . . . . . . . . . . . 9 | 3.2.7. Normalization and equivalence . . . . . . . . . . . . 9 | |||
3.3. Custom property extensions and values . . . . . . . . . . 10 | 3.3. Custom property extensions and values . . . . . . . . . . 10 | |||
4. Common JSCalendar properties . . . . . . . . . . . . . . . . 10 | 4. Common JSCalendar properties . . . . . . . . . . . . . . . . 10 | |||
4.1. Metadata properties . . . . . . . . . . . . . . . . . . . 10 | 4.1. Metadata properties . . . . . . . . . . . . . . . . . . . 10 | |||
4.1.1. @type . . . . . . . . . . . . . . . . . . . . . . . . 10 | 4.1.1. @type . . . . . . . . . . . . . . . . . . . . . . . . 10 | |||
4.1.2. uid . . . . . . . . . . . . . . . . . . . . . . . . . 11 | 4.1.2. uid . . . . . . . . . . . . . . . . . . . . . . . . . 11 | |||
4.1.3. relatedTo . . . . . . . . . . . . . . . . . . . . . . 11 | 4.1.3. relatedTo . . . . . . . . . . . . . . . . . . . . . . 11 | |||
4.1.4. prodId . . . . . . . . . . . . . . . . . . . . . . . 12 | 4.1.4. prodId . . . . . . . . . . . . . . . . . . . . . . . 12 | |||
4.1.5. created . . . . . . . . . . . . . . . . . . . . . . . 12 | 4.1.5. created . . . . . . . . . . . . . . . . . . . . . . . 12 | |||
4.1.6. updated . . . . . . . . . . . . . . . . . . . . . . . 13 | 4.1.6. updated . . . . . . . . . . . . . . . . . . . . . . . 12 | |||
4.1.7. sequence . . . . . . . . . . . . . . . . . . . . . . 13 | 4.1.7. sequence . . . . . . . . . . . . . . . . . . . . . . 13 | |||
4.1.8. method . . . . . . . . . . . . . . . . . . . . . . . 13 | 4.1.8. method . . . . . . . . . . . . . . . . . . . . . . . 13 | |||
4.2. What and where properties . . . . . . . . . . . . . . . . 13 | 4.2. What and where properties . . . . . . . . . . . . . . . . 13 | |||
4.2.1. title . . . . . . . . . . . . . . . . . . . . . . . . 13 | 4.2.1. title . . . . . . . . . . . . . . . . . . . . . . . . 13 | |||
4.2.2. description . . . . . . . . . . . . . . . . . . . . . 13 | 4.2.2. description . . . . . . . . . . . . . . . . . . . . . 13 | |||
4.2.3. descriptionContentType . . . . . . . . . . . . . . . 13 | 4.2.3. descriptionContentType . . . . . . . . . . . . . . . 13 | |||
4.2.4. locations . . . . . . . . . . . . . . . . . . . . . . 14 | 4.2.4. locations . . . . . . . . . . . . . . . . . . . . . . 13 | |||
4.2.5. virtualLocations . . . . . . . . . . . . . . . . . . 15 | 4.2.5. virtualLocations . . . . . . . . . . . . . . . . . . 14 | |||
4.2.6. links . . . . . . . . . . . . . . . . . . . . . . . . 15 | 4.2.6. links . . . . . . . . . . . . . . . . . . . . . . . . 15 | |||
4.2.7. locale . . . . . . . . . . . . . . . . . . . . . . . 16 | 4.2.7. locale . . . . . . . . . . . . . . . . . . . . . . . 16 | |||
4.2.8. keywords . . . . . . . . . . . . . . . . . . . . . . 16 | 4.2.8. keywords . . . . . . . . . . . . . . . . . . . . . . 16 | |||
4.2.9. categories . . . . . . . . . . . . . . . . . . . . . 17 | 4.2.9. categories . . . . . . . . . . . . . . . . . . . . . 16 | |||
4.2.10. color . . . . . . . . . . . . . . . . . . . . . . . . 17 | 4.2.10. color . . . . . . . . . . . . . . . . . . . . . . . . 17 | |||
4.3. Recurrence properties . . . . . . . . . . . . . . . . . . 17 | 4.3. Recurrence properties . . . . . . . . . . . . . . . . . . 17 | |||
4.3.1. recurrenceRule . . . . . . . . . . . . . . . . . . . 17 | 4.3.1. recurrenceRule . . . . . . . . . . . . . . . . . . . 17 | |||
4.3.2. recurrenceOverrides . . . . . . . . . . . . . . . . . 23 | 4.3.2. recurrenceOverrides . . . . . . . . . . . . . . . . . 23 | |||
4.3.3. excluded . . . . . . . . . . . . . . . . . . . . . . 24 | 4.3.3. excluded . . . . . . . . . . . . . . . . . . . . . . 24 | |||
4.4. Sharing and scheduling properties . . . . . . . . . . . . 24 | 4.4. Sharing and scheduling properties . . . . . . . . . . . . 24 | |||
4.4.1. priority . . . . . . . . . . . . . . . . . . . . . . 24 | 4.4.1. priority . . . . . . . . . . . . . . . . . . . . . . 24 | |||
4.4.2. freeBusyStatus . . . . . . . . . . . . . . . . . . . 25 | 4.4.2. freeBusyStatus . . . . . . . . . . . . . . . . . . . 25 | |||
4.4.3. privacy . . . . . . . . . . . . . . . . . . . . . . . 25 | 4.4.3. privacy . . . . . . . . . . . . . . . . . . . . . . . 25 | |||
4.4.4. replyTo . . . . . . . . . . . . . . . . . . . . . . . 26 | 4.4.4. replyTo . . . . . . . . . . . . . . . . . . . . . . . 26 | |||
4.4.5. participants . . . . . . . . . . . . . . . . . . . . 26 | 4.4.5. participants . . . . . . . . . . . . . . . . . . . . 27 | |||
4.5. Alerts properties . . . . . . . . . . . . . . . . . . . . 30 | 4.5. Alerts properties . . . . . . . . . . . . . . . . . . . . 30 | |||
4.5.1. useDefaultAlerts . . . . . . . . . . . . . . . . . . 30 | 4.5.1. useDefaultAlerts . . . . . . . . . . . . . . . . . . 30 | |||
4.5.2. alerts . . . . . . . . . . . . . . . . . . . . . . . 30 | 4.5.2. alerts . . . . . . . . . . . . . . . . . . . . . . . 30 | |||
4.6. Multilingual properties . . . . . . . . . . . . . . . . . 32 | 4.6. Multilingual properties . . . . . . . . . . . . . . . . . 32 | |||
4.6.1. localizations . . . . . . . . . . . . . . . . . . . . 32 | 4.6.1. localizations . . . . . . . . . . . . . . . . . . . . 32 | |||
4.7. Time zone properties . . . . . . . . . . . . . . . . . . 33 | 4.7. Time zone properties . . . . . . . . . . . . . . . . . . 33 | |||
4.7.1. timeZones . . . . . . . . . . . . . . . . . . . . . . 33 | 4.7.1. timeZones . . . . . . . . . . . . . . . . . . . . . . 33 | |||
5. Type-specific JSCalendar properties . . . . . . . . . . . . . 34 | 5. Type-specific JSCalendar properties . . . . . . . . . . . . . 35 | |||
5.1. JSEvent properties . . . . . . . . . . . . . . . . . . . 34 | 5.1. JSEvent properties . . . . . . . . . . . . . . . . . . . 35 | |||
5.1.1. start . . . . . . . . . . . . . . . . . . . . . . . . 35 | 5.1.1. start . . . . . . . . . . . . . . . . . . . . . . . . 35 | |||
5.1.2. timeZone . . . . . . . . . . . . . . . . . . . . . . 35 | 5.1.2. timeZone . . . . . . . . . . . . . . . . . . . . . . 35 | |||
5.1.3. duration . . . . . . . . . . . . . . . . . . . . . . 35 | 5.1.3. duration . . . . . . . . . . . . . . . . . . . . . . 35 | |||
5.1.4. isAllDay . . . . . . . . . . . . . . . . . . . . . . 35 | 5.1.4. isAllDay . . . . . . . . . . . . . . . . . . . . . . 36 | |||
5.1.5. status . . . . . . . . . . . . . . . . . . . . . . . 36 | 5.1.5. status . . . . . . . . . . . . . . . . . . . . . . . 36 | |||
5.2. JSTask properties . . . . . . . . . . . . . . . . . . . . 36 | 5.2. JSTask properties . . . . . . . . . . . . . . . . . . . . 36 | |||
5.2.1. due . . . . . . . . . . . . . . . . . . . . . . . . . 36 | 5.2.1. due . . . . . . . . . . . . . . . . . . . . . . . . . 36 | |||
5.2.2. start . . . . . . . . . . . . . . . . . . . . . . . . 36 | 5.2.2. start . . . . . . . . . . . . . . . . . . . . . . . . 36 | |||
5.2.3. timeZone . . . . . . . . . . . . . . . . . . . . . . 36 | 5.2.3. timeZone . . . . . . . . . . . . . . . . . . . . . . 37 | |||
5.2.4. estimatedDuration . . . . . . . . . . . . . . . . . . 37 | 5.2.4. estimatedDuration . . . . . . . . . . . . . . . . . . 37 | |||
5.2.5. statusUpdatedAt . . . . . . . . . . . . . . . . . . . 37 | 5.2.5. statusUpdatedAt . . . . . . . . . . . . . . . . . . . 37 | |||
5.2.6. isAllDay . . . . . . . . . . . . . . . . . . . . . . 37 | 5.2.6. isAllDay . . . . . . . . . . . . . . . . . . . . . . 37 | |||
5.2.7. progress . . . . . . . . . . . . . . . . . . . . . . 37 | 5.2.7. progress . . . . . . . . . . . . . . . . . . . . . . 38 | |||
5.2.8. status . . . . . . . . . . . . . . . . . . . . . . . 38 | 5.2.8. status . . . . . . . . . . . . . . . . . . . . . . . 38 | |||
5.3. JSGroup properties . . . . . . . . . . . . . . . . . . . 39 | 5.3. JSGroup properties . . . . . . . . . . . . . . . . . . . 39 | |||
5.3.1. entries . . . . . . . . . . . . . . . . . . . . . . . 39 | 5.3.1. entries . . . . . . . . . . . . . . . . . . . . . . . 39 | |||
5.3.2. source . . . . . . . . . . . . . . . . . . . . . . . 39 | 5.3.2. source . . . . . . . . . . . . . . . . . . . . . . . 40 | |||
6. JSCalendar object examples . . . . . . . . . . . . . . . . . 40 | 6. JSCalendar object examples . . . . . . . . . . . . . . . . . 40 | |||
6.1. Simple event . . . . . . . . . . . . . . . . . . . . . . 40 | 6.1. Simple event . . . . . . . . . . . . . . . . . . . . . . 40 | |||
6.2. Simple task . . . . . . . . . . . . . . . . . . . . . . . 40 | 6.2. Simple task . . . . . . . . . . . . . . . . . . . . . . . 40 | |||
6.3. Simple group . . . . . . . . . . . . . . . . . . . . . . 40 | 6.3. Simple group . . . . . . . . . . . . . . . . . . . . . . 40 | |||
6.4. All-day event . . . . . . . . . . . . . . . . . . . . . . 41 | 6.4. All-day event . . . . . . . . . . . . . . . . . . . . . . 41 | |||
6.5. Task with a due date . . . . . . . . . . . . . . . . . . 41 | 6.5. Task with a due date . . . . . . . . . . . . . . . . . . 41 | |||
6.6. Event with end time-zone . . . . . . . . . . . . . . . . 42 | 6.6. Event with end time-zone . . . . . . . . . . . . . . . . 42 | |||
6.7. Floating-time event (with recurrence) . . . . . . . . . . 42 | 6.7. Floating-time event (with recurrence) . . . . . . . . . . 42 | |||
6.8. Event with multiple locations and localization . . . . . 43 | 6.8. Event with multiple locations and localization . . . . . 43 | |||
6.9. Recurring event with overrides . . . . . . . . . . . . . 44 | 6.9. Recurring event with overrides . . . . . . . . . . . . . 44 | |||
skipping to change at page 4, line 26 ¶ | skipping to change at page 4, line 26 ¶ | |||
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 | o The attributes of the calendar entry represented must be described | |||
as a simple key-value pair, reducing complexity of its | as a simple key-value pair, reducing complexity of its | |||
representation. | representation. | |||
o The data model should avoid all ambiguities and make it difficult | o The data model should avoid all ambiguities and make it difficult | |||
to make mistakes during implementation. | to make mistakes during implementation. | |||
o Most of the initial set of attributes should be taken from the | o Most of the initial set of attributes should be taken from the | |||
iCalendar data format ([RFC5545], also see Section 1.1), but the | iCalendar data format ([RFC5545] and [RFC7986], also see | |||
specification should add new attributes or value types, or not | Section 1.1), but the specification should add new attributes or | |||
support existing ones, where appropriate. Conversion between the | value types, or not support existing ones, where appropriate. | |||
data formats need not fully preserve semantic meaning. | Conversion between the data formats need not fully preserve | |||
semantic meaning. | ||||
o Extensions, such as new properties and components, MUST NOT lead | o Extensions, such as new properties and components, MUST NOT lead | |||
to requiring an update to this document. | to requiring an update 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 I-JSON format | |||
[RFC7493], which is a strict subset of the JavaScript Object Notation | [RFC7493], which is a strict subset of the JavaScript Object Notation | |||
(JSON) Data Interchange Format [RFC8259]. Using JSON is mostly a | (JSON) Data Interchange Format [RFC8259]. Using JSON is mostly a | |||
pragmatic choice: its widespread use makes JSCalendar easier to | pragmatic choice: its widespread use makes JSCalendar easier to | |||
adopt, and the ready availability of production-ready JSON | adopt, and the ready availability of production-ready JSON | |||
implementations eliminates a whole category of parser-related | implementations eliminates a whole category of parser-related | |||
skipping to change at page 5, line 40 ¶ | skipping to change at page 5, line 41 ¶ | |||
document are to be interpreted as described in [RFC2119]. | document are to be interpreted as described in [RFC2119]. | |||
The underlying format used for this specification is JSON. | The underlying format used for this specification is JSON. | |||
Consequently, the terms "object" and "array" as well as the four | Consequently, the terms "object" and "array" as well as the four | |||
primitive types (strings, numbers, booleans, and null) are to be | primitive types (strings, numbers, booleans, and null) are to be | |||
interpreted as described in Section 1 of [RFC8259]. | interpreted as described in Section 1 of [RFC8259]. | |||
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, three periods "..." | |||
are used to indicate a portion of the document that has been removed | are used to indicate a portion of the document that has been removed | |||
for compactness. In this document, property and object definitions | for compactness. | |||
are formatted like *this* and are referred to in other sections like | ||||
_this_. Verbatim text is formatted like "this". | ||||
2. JSCalendar objects | 2. JSCalendar objects | |||
This section describes the calendar object types specified by | This section describes the calendar object types specified by | |||
JSCalendar. | JSCalendar. | |||
2.1. JSEvent | 2.1. JSEvent | |||
MIME type: "application/jscalendar+json;type=jsevent" | MIME type: "application/jscalendar+json;type=jsevent" | |||
skipping to change at page 6, line 46 ¶ | skipping to change at page 6, line 46 ¶ | |||
The @type (Section 4.1.1) property value MUST be "jsgroup". | The @type (Section 4.1.1) property value MUST be "jsgroup". | |||
3. Structure of JSCalendar objects | 3. Structure of JSCalendar objects | |||
A JSCalendar object is a JSON object, which MUST be valid I-JSON (a | A JSCalendar object is a JSON object, which MUST be valid I-JSON (a | |||
stricter subset of JSON), as specified in [RFC8259]. Property names | stricter subset of JSON), as specified in [RFC8259]. Property names | |||
and values are case-sensitive. | and 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. Unless otherwise specified, all properties are | following sections. Properties are specified as being either | |||
mandatory. Optional properties may have a default value, if | mandatory or optional. Optional properties may have a default value, | |||
explicitly specified in the property definition. | if explicitly specified in the property definition. | |||
3.1. Type signatures | 3.1. Type signatures | |||
Types signatures are given for all JSON objects in this document. | Types signatures are given for all JSON objects in this document. | |||
The following conventions are used: | The following conventions are used: | |||
o "Boolean|String": The value is either a JSON "Boolean" value, or a | o "Boolean|String": The value is either a JSON "Boolean" value, or a | |||
JSON "String" value. | JSON "String" value. | |||
o "Foo": Any name that is not a native JSON type means an object for | o "Foo": Any name that is not a native JSON type means an object for | |||
skipping to change at page 7, line 49 ¶ | skipping to change at page 7, line 49 ¶ | |||
In common notation, it should be of the form "YYYY-MM-DDTHH:MM:SSZ". | In common notation, it should be of the form "YYYY-MM-DDTHH:MM:SSZ". | |||
3.2.2. LocalDate | 3.2.2. LocalDate | |||
This is a date-time string _with no time zone/offset information_. | This is a date-time string _with no time zone/offset information_. | |||
It is otherwise in the same format as UTCDate: "YYYY-MM-DDTHH:MM:SS". | It is otherwise in the same format as UTCDate: "YYYY-MM-DDTHH:MM:SS". | |||
The time zone to associate the LocalDate with comes from an | The time zone to associate the LocalDate with comes from an | |||
associated property, or if no time zone is associated it defines | associated property, or if no time zone is associated it defines | |||
_floating time_. Floating date-times are not tied to any specific | _floating time_. Floating date-times are not tied to any specific | |||
time zone. Instead, they occur in every time zone at the same _wall- | time zone. Instead, they occur in every time zone at the same wall- | |||
clock_ time (as opposed to the same instant point in time). | clock time (as opposed to the same instant point in time). | |||
3.2.3. Duration | 3.2.3. Duration | |||
A *Duration* is represented by a subset of ISO8601 duration format, | A Duration object is represented by a subset of ISO8601 duration | |||
as specified by the following ABNF: | format, as specified by the following ABNF: | |||
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" | |||
duration = "P" (dur-day [dur-time] / dur-time / dur-week) | duration = "P" (dur-day [dur-time] / dur-time / dur-week) | |||
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. | unless the fraction is non-zero. | |||
A *SignedDuration* is represented as a duration, optionally preceeded | A SignedDuration object is represented as a duration, optionally | |||
by a sign character. It typically is used to express the offset of a | preceeded by a sign character. It typically is used to express the | |||
point in time relative to an associated time. It is specified by the | offset of a point in time relative to an associated time. It is | |||
following ABNF: | specified by the following ABNF: | |||
signed-duration = (["+"] / "-") duration | signed-duration = (["+"] / "-") duration | |||
A negative sign indicates a point in time at or _before_ the | A negative sign indicates a point in time at or before the associated | |||
associated time, a positive or no sign a time at or _after_ the | time, a positive or no sign a time at or after the associated time. | |||
associated time. | ||||
3.2.4. PatchObject | 3.2.4. PatchObject | |||
A *PatchObject* is of type "String[*|null]", and represents an | A PatchObject is of type "String[*|null]", and represents an | |||
unordered set of patches on a JSON object. The keys are a path in a | unordered set of patches on a JSON object. The keys are a path in a | |||
subset of [RFC6901] JSON pointer format, with an implicit leading "/" | subset of [RFC6901] JSON pointer format, with an implicit leading "/" | |||
(i.e. prefix each key with "/" before applying the JSON pointer | (i.e. prefix each key with "/" before applying the JSON pointer | |||
evaluation algorithm). | 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. it MUST NOT | 1. The pointer MUST NOT reference inside an array (i.e. it MUST NOT | |||
insert/delete from an array; the array MUST be replaced in its | insert/delete from an array; the array MUST be replaced in its | |||
skipping to change at page 9, line 35 ¶ | skipping to change at page 9, line 35 ¶ | |||
values, MUST be at least 1 character and maximum 256 characters in | values, MUST be at least 1 character and maximum 256 characters in | |||
size, and MUST only contain characters from the "URL and Filename | size, and MUST only contain characters from the "URL and Filename | |||
safe" Base 64 Alphabet, as defined in section 5 of [RFC4648]. This | safe" Base 64 Alphabet, as defined in section 5 of [RFC4648]. This | |||
is the ASCII alphanumeric characters (A-Za-z0-9), hyphen (-), and | is the ASCII alphanumeric characters (A-Za-z0-9), hyphen (-), and | |||
underscore (_). Note that [RFC7493] requires string values be | underscore (_). Note that [RFC7493] requires string values be | |||
encoded in UTF-8, so the maximum size of an identifier according to | encoded in UTF-8, so the maximum size of an identifier according to | |||
this definition is 256 octets. | this definition is 256 octets. | |||
. Identifiers in object maps need not be universally unique, e.g. two | . Identifiers in object maps need not be universally unique, e.g. two | |||
calendar objects MAY use the same identifiers in their respective | calendar objects MAY use the same identifiers in their respective | |||
_links_ properties. | "links" properties. | |||
Nevertheless, a UUID typically is a good choice. | Nevertheless, a UUID typically is a good choice. | |||
3.2.6. Time Zones | 3.2.6. Time Zones | |||
By default, time zones in JSCalendar are identified by their name in | By default, time zones in JSCalendar are identified by their name in | |||
the IANA Time Zone Database [1], and the zone rules of the respective | the IANA Time Zone Database [1], and the zone rules of the respective | |||
zone record apply. | zone record apply. | |||
Implementations MAY embed the definition of custom time zones in the | Implementations MAY embed the definition of custom time zones in the | |||
_timeZones_ property (see Section 4.7.1). | "timeZones" property (see Section 4.7.1). | |||
3.2.7. Normalization and equivalence | 3.2.7. Normalization and equivalence | |||
JSCalendar aims to provide unambiguous definitions for value types | JSCalendar aims to provide unambiguous definitions for value types | |||
and properties, but does not define a general normalization or | and properties, but does not define a general normalization or | |||
equivalence method for JSCalendar objects and types. This is because | equivalence method for JSCalendar objects and types. This is because | |||
the notion of equivalence might range from byte-level equivalence to | the notion of equivalence might range from byte-level equivalence to | |||
semantic equivalence, depending on the respective use case (for | semantic equivalence, depending on the respective use case (for | |||
example, the CalDAV protocol [RFC4791] requires octet equivalence of | example, the CalDAV protocol [RFC4791] requires octet equivalence of | |||
the encoded calendar object to determine ETag equivalence). | the encoded calendar object to determine ETag equivalence). | |||
skipping to change at page 10, line 49 ¶ | skipping to change at page 10, line 49 ¶ | |||
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" | Type: String (mandatory). | |||
Specifies the type which this object represents. This MUST be one of | Specifies the type which this object represents. This MUST be one of | |||
the following values, registered in a future RFC, or a vendor- | the following values, registered in a future RFC, or a vendor- | |||
specific value: | specific value: | |||
o "jsevent": a JSCalendar event (Section 2.1). | o "jsevent": a JSCalendar event (Section 2.1). | |||
o "jstask": a JSCalendar task (Section 2.2). | o "jstask": a JSCalendar task (Section 2.2). | |||
o "jsgroup": a JSCalendar group (Section 2.3). | o "jsgroup": a JSCalendar group (Section 2.3). | |||
A valid JSCalendar object MUST include this property. | ||||
4.1.2. uid | 4.1.2. uid | |||
Type: "String" | Type: String (mandatory). | |||
A globally unique identifier, used to associate the object as the | A globally unique identifier, used to associate the object as the | |||
same across different systems, calendars and views. The value of | same across different systems, calendars and views. The value of | |||
this property MUST be unique across _all_ JSCalendar objects, even if | this property MUST be unique across all JSCalendar objects, even if | |||
they are of different type. [RFC4122] describes a range of | they are of different type. [RFC4122] describes a range of | |||
established algorithms to generate universally unique identifiers | established algorithms to generate universally unique identifiers | |||
(UUID), and the random or pseudo-random version is recommended. | (UUID), and the random or pseudo-random version is recommended. | |||
For compatibility with [RFC5545] UIDs, implementations MUST be able | For compatibility with [RFC5545] UIDs, 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. | |||
A valid JSCalendar object MUST include this property. | ||||
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 | Relates the object to other JSCalendar objects. This is represented | |||
as a map of the UIDs of the related objects to information about the | as a map of the UIDs of the related objects to information about the | |||
relation. | relation. | |||
A *Relation* object has the following properties: | A Relation object has the following properties: | |||
o *relation*: "String[Boolean]" (optional) Describes how the linked | o relation: String[Boolean] (optional). Describes how the linked | |||
object is related to this object as a set of relation types. If | object is related to this object as a set of relation types. If | |||
not null, the set MUST NOT be empty. | not null, the set MUST NOT be empty. | |||
Keys in the set MUST be one of the following values, defined in a | Keys in the set MUST be one of the following values, defined in a | |||
future specification or a vendor-specific value: | future specification or a vendor-specific value: | |||
* "first": The linked object is the first in the series this | * "first": The linked object is the first in the series this | |||
object is part of. | object is part of. | |||
* "next": The linked object is the next in the series this object | * "next": The linked object is the next in the series this object | |||
skipping to change at page 12, line 29 ¶ | skipping to change at page 12, line 23 ¶ | |||
previous occurrence before this split, and a new object created to | previous occurrence before this split, and a new object created to | |||
represent all the objects after the split. A "next" relation MUST be | represent all the objects after the split. A "next" relation MUST be | |||
set on the original object's relatedTo property for the UID of the | set on the original object's relatedTo property for the UID of the | |||
new object. A "first" relation for the UID of the first object in | 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 follow | 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 wishes to | these UIDs to get the complete set of objects if the user wishes to | |||
modify them all at once. | 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 created the JSCalendar object. | The identifier for the product that created the JSCalendar object. | |||
The vendor of the implementation SHOULD ensure that this is a | The vendor of the implementation SHOULD ensure that this is a | |||
globally unique identifier, using some technique such as an FPI | globally unique identifier, using some technique such as an FPI | |||
value, as defined in [ISO.9070.1991]. It MUST only use characters of | value, as defined in [ISO.9070.1991]. It MUST only use characters of | |||
an iCalendar TEXT data value (see section 3.3.11 in [RFC5545]). | an iCalendar TEXT data value (see section 3.3.11 in [RFC5545]). | |||
This property SHOULD NOT be used to alter the interpretation of an | This property SHOULD NOT be used to alter the interpretation of an | |||
JSCalendar object beyond the semantics specified in this document. | JSCalendar object beyond the semantics specified in this document. | |||
For example, it is not to be used to further the understanding of | For example, it is not to be used to further the understanding of | |||
non-standard properties. | non-standard properties. | |||
4.1.5. created | 4.1.5. created | |||
Type: "UTCDate" (optional) | Type: UTCDate (optional). | |||
The date and time this object was initially created. | The date and time this object was initially created. | |||
4.1.6. updated | 4.1.6. updated | |||
Type: "UTCDate" | Type: UTCDate (mandatory). | |||
The date and time the data in this object was last modified. | The date and time the data in this object was last modified. | |||
4.1.7. sequence | 4.1.7. sequence | |||
Type: "Number" (optional, default:"0") | Type: Number (optional, default: "0"). | |||
Initially zero, this MUST be a non-negative integer that is | Initially zero, this MUST be a non-negative integer that is | |||
monotonically incremented each time a change is made to the object. | monotonically incremented each time a change is made to the object. | |||
4.1.8. method | 4.1.8. method | |||
Type: "String" (optional) | Type: String (optional). | |||
The iTIP ([RFC5546]) method, in lower-case. Used for scheduling. | The iTIP ([RFC5546]) method, in lower-case. Used for scheduling. | |||
4.2. What and where properties | 4.2. What and where properties | |||
4.2.1. title | 4.2.1. title | |||
Type: "String" (optional, default:"") | Type: String (optional, default: empty String). | |||
A short summary of the object. | A short summary of the object. | |||
4.2.2. description | 4.2.2. description | |||
Type: "String" (optional, default:"") | Type: String (optional, default: empty String). | |||
A longer-form text description of the object. The content 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 | 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 sub-types of type | |||
"text", and SHOULD be "text/plain" or "text/html" ([MIME]). They MAY | "text", and SHOULD be "text/plain" or "text/html" ([MIME]). They MAY | |||
define parameters and the "charset" parameter MUST be "utf-8", if | define parameters and the "charset" parameter value MUST be "utf-8", | |||
specified. Descriptions of type "text/html" MAY contain "cid" URLs | if specified. Descriptions of type "text/html" MAY contain "cid" | |||
([RFC2392]) to reference links in the calendar object by use of the | URLs ([RFC2392]) to reference links in the calendar object by use of | |||
_cid_ property of the _Link_ object. | the "cid" property of the Link object. | |||
4.2.4. locations | 4.2.4. locations | |||
Type: "String[Location]" (optional) | Type: String[Location] (optional). | |||
A map of location identifiers to Location objects, representing | A map of location identifiers to Location objects, representing | |||
locations associated with the object. | locations associated with the object. | |||
A *Location* object has the following properties. It must define at | A Location object has the following properties. It must define at | |||
least one other property than _relativeTo_. | least one other property than the "relativeTo" property. | |||
o *name*: "String" (optional, default:"") The human-readable name of | o name: String (optional, default: empty String). The human- | |||
the location. | readable name of the location. | |||
o *description*: "String" (optional) Human-readable, plain-text | o description: String (optional). Human-readable, plain-text | |||
instructions for accessing this location. This may be an address, | instructions for accessing this location. This may be an address, | |||
set of directions, door access code, etc. | set of directions, door access code, etc. | |||
o *relativeTo*: "String" (optional) The relation type of this | o relativeTo: String (optional). The relation type of this location | |||
location to the JSCalendar object. | to the JSCalendar object. | |||
This MUST be either one of the following values, registered in a | This MUST be either one of the following values, registered in a | |||
future RFC, or a vendor-specific value. Any value the client or | future RFC, or a vendor-specific value. Any value the client or | |||
server doesn't understand should be treated the same as if this | server doesn't understand should be treated the same as if this | |||
property is omitted. | property is omitted. | |||
* "start": The JSCalendar object starts at this location. | * "start": The JSCalendar object starts at this location. | |||
* "end": The JSCalendar object ends at this location. | * "end": The JSCalendar object ends at this location. | |||
o *timeZone*: "String" (optional) A time zone for this location. | o timeZone: String (optional). A time zone for this location. Also | |||
Also see Section 3.2.6. | see Section 3.2.6. | |||
o *coordinates*: "String" (optional) An [RFC5870] "geo:" URI for the | o coordinates: String (optional). An [RFC5870] "geo:" URI for the | |||
location. | location. | |||
o *linkIds*: "String[Boolean]" (optional) A set of link ids for | o linkIds: String[Boolean] (optional). A set of link ids for links | |||
links to alternate representations of this location. Each key in | to alternate representations of this location. Each key in the | |||
the set MUST be the identifier of a Link object defined in the | set MUST be the identifier of a Link object defined in the "links" | |||
_links_ property of this calendar object. The value for each key | property of this calendar object. The value for each key in the | |||
in the set MUST be "true". This MUST be omitted if none (rather | set MUST be "true". This MUST be omitted if none (rather than an | |||
than an empty set). | empty set). | |||
For example, an alternative representation could be in vCard | For example, an alternative representation could be in vCard | |||
format. | format. | |||
4.2.5. virtualLocations | 4.2.5. virtualLocations | |||
Type: "String[VirtualLocation]" (optional) | Type: String[VirtualLocation] (optional). | |||
A map of identifiers to VirtualLocation objects, representing virtual | A map of identifiers to VirtualLocation objects, representing virtual | |||
locations, such as video conferences or chat rooms, associated with | locations, such as video conferences or chat rooms, associated with | |||
the object. | the object. | |||
A *VirtualLocation* object has the following properties. | A VirtualLocation object has the following properties. | |||
o *name*: "String" (optional, default:"") The human-readable name of | o name: String (optional, default: empty String). The human- | |||
the virtual location. | readable name of the virtual location. | |||
o *description*: "String" (optional) Human-readable plain-text | o description: String (optional). Human-readable plain-text | |||
instructions for accessing this location. This may be an address, | instructions for accessing this location. This may be an address, | |||
set of directions, door access code, etc. | set of directions, door access code, etc. | |||
o *uri*: "String" A URI that represents how to connect to this | o uri: String (mandatory). A URI that represents how to connect to | |||
virtual location. | this virtual location. | |||
This may be a telephone number (represented as | This may be a telephone number (represented as | |||
"tel:+1-555-555-555") for a teleconference, a web address for | "tel:+1-555-555-555") for a teleconference, a web address for | |||
online chat, or any custom URI. | online chat, or any custom URI. | |||
4.2.6. links | 4.2.6. links | |||
Type: "String[Link]" (optional) | Type: String[Link] (optional). | |||
A map of link identifiers to Link objects, representing external | A map of link identifiers to Link objects, representing external | |||
resources associated with the object. | resources associated with the object. | |||
A *Link* object has the following properties: | A Link object has the following properties: | |||
o *href*: "String" A URI from which the resource may be fetched. | o href: String (mandatory). A URI from which the resource may be | |||
fetched. | ||||
This MAY be a "data:" URL, but it is recommended that the file be | This MAY be a "data:" URL, but it is recommended that the file be | |||
hosted on a server to avoid embedding arbitrarily large data in | hosted on a server to avoid embedding arbitrarily large data in | |||
JSCalendar object instances. | JSCalendar object instances. | |||
o *cid* "String" (optional) This MUST be a valid "content-id" value | o cid: String (optional). This MUST be a valid "content-id" value | |||
according to the definition of section 2 in [RFC2392]. The | according to the definition of section 2 in [RFC2392]. The | |||
identifier MUST be unique within this JSCalendar object Link | identifier MUST be unique within this JSCalendar object Link | |||
objects but has no meaning beyond that. Specifically, it MAY be | objects but has no meaning beyond that. Specifically, it MAY be | |||
different from the link identifier in the enclosing _links_ | different from the link identifier in the enclosing "links" | |||
property. | property. | |||
o *type*: "String" (optional) The content-type [RFC6838] of the | o type: String (optional). The content-type [RFC6838] of the | |||
resource, if known. | resource, if known. | |||
o *size*: "Number" (optional) The size, in bytes, of the resource | o size: Number (optional). The size, in bytes, of the resource when | |||
when fully decoded (i.e. the number of bytes in the file the user | fully decoded (i.e. the number of bytes in the file the user would | |||
would download), if known. | download), if known. | |||
o *rel*: "String" (optional) Identifies the relation of the linked | o rel: String (optional). Identifies the relation of the linked | |||
resource to the object. If set, the value MUST be a registered | resource to the object. If set, the value MUST be a registered | |||
relation type (see [RFC8288] and IANA Link Relations [2]). | relation type (see [RFC8288] and IANA Link Relations [2]). | |||
Links with a rel of "enclosure" SHOULD be considered by the client | Links with a rel of "enclosure" SHOULD be considered by the client | |||
as attachments for download. | as attachments for download. | |||
Links with a rel of "describedby" SHOULD be considered by the | Links with a rel of "describedby" SHOULD be considered by the | |||
client to be an alternate representation of the description. | client to be an alternate representation of the description. | |||
Links with a rel of "icon" SHOULD be considered by the client to | Links with a rel of "icon" SHOULD be considered by the client to | |||
be an image that it MAY use when presenting the calendar data to a | be an image that it MAY use when presenting the calendar data to a | |||
user. The _display_ property MAY be set to indicate the purpose | user. The "display" property MAY be set to indicate the purpose | |||
of this image. | of this image. | |||
o *display*: "String" (optional) Describes the intended purpose of a | o display: String (optional). Describes the intended purpose of a | |||
link to an image. If set, the _rel_ property MUST be set to | link to an image. If set, the "rel" property MUST be set to | |||
"icon". The value MUST be either one of the following values, | "icon". The value MUST be either one of the following values, | |||
registered in a future RFC, or a vendor-specific value: | registered in a future RFC, or a vendor-specific value: | |||
* "badge": an image inline with the title of the object | * "badge": an image inline with the title of the object | |||
* "graphic": a full image replacement for the object itself | * "graphic": a full image replacement for the object itself | |||
* "fullsize": an image that is used to enhance the object | * "fullsize": an image that is used to enhance the object | |||
* "thumbnail": a smaller variant of "fullsize " to be used when | * "thumbnail": a smaller variant of "fullsize " to be used when | |||
space for the image is constrained | space for the image is constrained | |||
o *title*: "String" (optional) A human-readable plain-text | o title: String (optional). A human-readable plain-text description | |||
description of the resource. | of the resource. | |||
4.2.7. locale | 4.2.7. locale | |||
Type: "String" (optional) | Type: String (optional). | |||
The [RFC5646] language tag that best describes the locale used for | The [RFC5646] language tag that best describes the locale used for | |||
the calendar object, if known. | the calendar object, if known. | |||
4.2.8. keywords | 4.2.8. keywords | |||
Type: "String[Boolean]" (optional) | Type: String[Boolean] (optional). | |||
A set of keywords or tags that relate to the object. The set is | A set of keywords or tags that relate to the object. The set is | |||
represented as a map, with the keys being the keywords. The value | 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.9. categories | 4.2.9. categories | |||
Type: "String[Boolean]" (optional) | Type: String[Boolean] (optional). | |||
A set of categories that relate to the calendar object. The set is | A set of categories that relate to the calendar object. The set is | |||
represented as a map, with the keys being the categories specified as | represented as a map, with the keys being the categories specified as | |||
URIs. The value for each key in the map MUST be "true". | 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 typically are 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.10. color | 4.2.10. color | |||
Type: "String" (optional) | Type: String (optional). | |||
Specifies a color clients MAY use when displaying this calendar | Specifies a color clients MAY use when displaying this calendar | |||
object. The value is a case-insensitive color name taken from the | object. The value is a case-insensitive color name taken from the | |||
CSS3 set of names, defined in Section 4.3 of W3C.REC- | CSS3 set of names, defined in Section 4.3 of W3C.REC- | |||
css3-color-20110607 [3] or a CSS3 RGB color hex value. | css3-color-20110607 [3] or a CSS3 RGB color hex value. | |||
4.3. Recurrence properties | 4.3. Recurrence properties | |||
4.3.1. recurrenceRule | 4.3.1. recurrenceRule | |||
Type: "Recurrence" (optional) | Type: Recurrence (optional). | |||
Defines a recurrence rule (repeating pattern) for recurring calendar | Defines a recurrence rule (repeating pattern) for recurring calendar | |||
objects. | objects. | |||
A *Recurrence* object is a JSON object mapping of a RECUR value type | A Recurrence object is a JSON object mapping of a RECUR value type in | |||
in iCalendar, see [RFC5545] and[RFC7529]. A JSEvent recurs by | iCalendar, see [RFC5545] and[RFC7529]. A JSEvent recurs by applying | |||
applying the recurrence rule (and _recurrenceOverrides_) to the | the recurrence rule to the start date-time. A JSTask recurs by | |||
_start_ date/time. A JSTask recurs by applying the recurrence rule | applying the recurrence rule to the start date-time, if defined, | |||
(and _recurrenceOverrides_) to its _start_ date/time, if defined. If | otherwise it recurs by the due date-time, if defined. If the task | |||
the task does not define a start date-time, it recurs by its _due_ | neither defines a start or due date-time, its "recurrenceRule" | |||
date-time. If it neither defines a start or due date-time, it MUST | property value MUST be "null". | |||
NOT define a _recurrenceRule_. | ||||
A Recurrence object has the following properties: | A Recurrence object has the following properties: | |||
o *frequency*: "String" This MUST be one of the following values: | o frequency: String (mandatory). This MUST be one of the following | |||
values: | ||||
* "yearly" | * "yearly" | |||
* "monthly" | * "monthly" | |||
* "weekly" | * "weekly" | |||
* "daily" | * "daily" | |||
* "hourly" | * "hourly" | |||
* "minutely" | * "minutely" | |||
* "secondly" | * "secondly" | |||
To convert from iCalendar, simply lower-case the FREQ part. | To convert from iCalendar, simply lower-case the FREQ part. | |||
o *interval*: "Number" (optional, default:"1") The INTERVAL part | o interval: Number (optional, default: "1"). The INTERVAL part from | |||
from iCalendar. If included, it MUST be an integer "x >= 1". | iCalendar. If included, it MUST be an integer "x >= 1". | |||
o *rscale*: "String" (optional, default:""gregorian"") The RSCALE | o rscale: String (optional, default: ""gregorian""). The RSCALE | |||
part from iCalendar RSCALE [RFC7529], converted to lower-case. | part from iCalendar RSCALE [RFC7529], converted to lower-case. | |||
o *skip*: "String" (optional, default:""omit"") The SKIP part from | o skip: String (optional, default: ""omit""). The SKIP part from | |||
iCalendar RSCALE [RFC7529], converted to lower-case. | iCalendar RSCALE [RFC7529], converted to lower-case. | |||
o *firstDayOfWeek*: "String" (optional, default:""mo"") The WKST | o firstDayOfWeek: String (optional, default: ""mo""). The WKST part | |||
part from iCalendar, represented as a lower-case abbreviated two- | from iCalendar, represented as a lower-case abbreviated two-letter | |||
letter English day of the week. If included, it MUST be one of | English day of the week. If included, it MUST be one of the | |||
the following values: ""mo"|"tu"|"we"|"th"|"fr"|"sa"|"su"". | following values: ""mo"|"tu"|"we"|"th"|"fr"|"sa"|"su"". | |||
o *byDay*: "NDay[]" (optional) An *NDay* object has the following | o byDay: NDay[] (optional). An *NDay* object has the following | |||
properties: | properties: | |||
* *day*: "String" The day-of-the-week part of the BYDAY value in | * day: String. The day-of-the-week part of the BYDAY value in | |||
iCalendar, lower-cased. MUST be one of the following values: | iCalendar, lower-cased. MUST be one of the following values: | |||
""mo"|"tu"|"we"|"th"|"fr"|"sa"|"su"". | ""mo"|"tu"|"we"|"th"|"fr"|"sa"|"su"". | |||
* *nthOfPeriod*: "Number" (optional) The ordinal part of the | * nthOfPeriod: Number (optional). The ordinal part of the BYDAY | |||
BYDAY value in iCalendar (e.g. ""+1"" or ""-3""). If present, | value in iCalendar (e.g. ""+1"" or ""-3""). If present, rather | |||
rather than representing every occurrence of the weekday | than representing every occurrence of the weekday defined in | |||
defined in the _day_ property of this _NDay_, it represents | the "day" property, it represents only a specific instance | |||
only a specific instance within the recurrence period. The | within the recurrence period. The value can be positive or | |||
value can be positive or negative, but MUST NOT be zero. A | negative, but MUST NOT be zero. A negative integer means nth- | |||
negative integer means nth-last of period. | last of period. | |||
o *byMonthDay*: "Number[]" (optional) The BYMONTHDAY part from | o byMonthDay: Number[] (optional). The BYMONTHDAY part from | |||
iCalendar. The array MUST have at least one entry if included. | iCalendar. The array MUST have at least one entry if included. | |||
o *byMonth*: "String[]" (optional) The BYMONTH part from iCalendar. | o byMonth: String[] (optional). The BYMONTH part from iCalendar. | |||
Each entry is a string representation of a number, starting from | Each entry is a string representation of a number, starting from | |||
"1" for the first month in the calendar (e.g. ""1" " means | "1" for the first month in the calendar (e.g. ""1" " means | |||
""January"" with Gregorian calendar), with an optional ""L"" | ""January"" with Gregorian calendar), with an optional ""L"" | |||
suffix (see [RFC7529]) for leap months (this MUST be upper-case, | suffix (see [RFC7529]) for leap months (this MUST be upper-case, | |||
e.g. ""3L""). The array MUST have at least one entry if included. | e.g. ""3L""). The array MUST have at least one entry if included. | |||
o *byYearDay*: "Number[]" (optional) The BYYEARDAY part from | o byYearDay: Number[] (optional). The BYYEARDAY part from | |||
iCalendar. The array MUST have at least one entry if included. | ||||
o *byWeekNo*: "Number[]" (optional) The BYWEEKNO part from | ||||
iCalendar. The array MUST have at least one entry if included. | iCalendar. The array MUST have at least one entry if included. | |||
o *byHour*: "Number[]" (optional) The BYHOUR part from iCalendar. | o byWeekNo: Number[] (optional). The BYWEEKNO part from iCalendar. | |||
The array MUST have at least one entry if included. | The array MUST have at least one entry if included. | |||
o *byMinute*: "Number[]" (optional) The BYMINUTE part from | o byHour: Number[] (optional). The BYHOUR part from iCalendar. The | |||
iCalendar. The array MUST have at least one entry if included. | array MUST have at least one entry if included. | |||
o *bySecond*: "Number[]" (optional) The BYSECOND part from | o byMinute: Number[] (optional). The BYMINUTE part from iCalendar. | |||
iCalendar. The array MUST have at least one entry if included. | The array MUST have at least one entry if included. | |||
o *bySetPosition*: "Number[]" (optional) The BYSETPOS part from | o bySecond: Number[] (optional). The BYSECOND part from iCalendar. | |||
The array MUST have at least one entry if included. | ||||
o bySetPosition: Number[] (optional). The BYSETPOS part from | ||||
iCalendar. The array MUST have at least one entry if included. | iCalendar. The array MUST have at least one entry if included. | |||
o *count*: "Number" (optional) The COUNT part from iCalendar. This | o count: Number (optional). The COUNT part from iCalendar. This | |||
MUST NOT be included if an _until_ property is specified. | MUST NOT be included if an "until" property is specified. | |||
o *until*: "LocalDate" (optional) The UNTIL part from iCalendar. | o until: LocalDate (optional). The UNTIL part from iCalendar. This | |||
This MUST NOT be included if a _count_ property is specified. | MUST NOT be included if a "count" property is specified. Note: if | |||
Note: if not specified otherwise for a specific JSCalendar object, | not specified otherwise for a specific JSCalendar object, this | |||
this date is presumed to be in the time zone specified in | date is presumed to be in the time zone specified in "timeZone". | |||
_timeZone_. As in iCalendar, the until value bounds the | As in iCalendar, the until value bounds the recurrence rule | |||
recurrence rule inclusively. To allow for using the same bound | inclusively. To allow for using the same bound regardless of the | |||
regardless of the value of the _isAllDay_ property, the _until_ | value of the "isAllDay" property, the "until" property date-time | |||
date time MAY include non-zero time components even for all-day | MAY include non-zero time components even for all-day calendar | |||
calendar objects. | objects. | |||
A recurrence rule specifies a set of set of date-times for recurring | A recurrence rule specifies a set of 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, wherever "year", "month" or "day of month" is used, this is | |||
within the calendar system given by the "rscale" property, which | 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: | 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 1st day of a year | |||
(inclusive) to midnight the 1st day of the following year | (inclusive) to midnight the 1st 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 and | |||
there is a byMonth property, generate candidates for the leap | there is a byMonth property, generate candidates for the leap | |||
months even if they don't occur in this year. | 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 1st day of a | |||
month (inclusive) to midnight on the 1st of the following | month (inclusive) to midnight on the 1st 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, or | |||
Monday if omitted), to midnight 7 days later (exclusive). | Monday if omitted), to midnight 7 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": the second itself, only. | |||
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, it is eliminated. Each | the rule does not match the date-time, it is eliminated. Each | |||
byX property is an array; the date-time matches the property if | byX property is an array; the date-time matches the property if | |||
it matches any of the values in the array. The properties have | it matches any of the values in the array. The properties have | |||
the following semantics: | 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 in | |||
ISO.8601.2004, with a week defined as a seven day period, | 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. | * byYearDay: the date-time is on the nth day of year. Negative | |||
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 | * byDay: the date-time is on the given day of the week. If the | |||
the day is prefixed by a number, it is the nth occurrence of | day is prefixed by a number, it is the nth occurrence of that | |||
that day of the week within the month (if frequency is | day of the week within the month (if frequency is monthly) or | |||
monthly) or year (if frequency is yearly). Negative numbers | year (if frequency is yearly). Negative numbers means nth | |||
means 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. 31st | |||
Februrary in the gregorian calendar). In this case, the | Februrary in the gregorian calendar). In this case, the | |||
properties MUST be considered in the order above and: | properties 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 | |||
skipping to change at page 23, line 30 ¶ | skipping to change at page 23, line 26 ¶ | |||
+ if there is no byMonthDay, byWeekNo or byDay properties: | + if there is no byMonthDay, byWeekNo or byDay properties: | |||
Add a byMonthDay property with the sole value being the | Add a byMonthDay property with the sole value being the | |||
day-of-the-month of the start date-time. | day-of-the-month of the start date-time. | |||
+ if there is a byWeekNo property and no byMonthDay or byDay | + if there is a byWeekNo property and no byMonthDay or byDay | |||
properties: Add a byDay property with the sole value being | properties: Add a byDay property with the sole value being | |||
the day-of-the-week of the start date-time. | the day-of-the-week of the start date-time. | |||
4.3.2. recurrenceOverrides | 4.3.2. recurrenceOverrides | |||
Type: "LocalDate[PatchObject]" (optional) | Type: LocalDate[PatchObject] (optional). | |||
A map of the recurrence-ids (the date-time of the start of the | A map of the recurrence-ids (the date-time of the start of the | |||
occurrence) to an object of patches to apply to the generated | occurrence) to an object of patches to apply to the generated | |||
occurrence object. | occurrence object. | |||
If the recurrence-id does not match an expanded start date from a | If the recurrence-id does not match an expanded start date from a | |||
recurrence rule, it is to be treated as an additional occurrence | recurrence rule, it is to be treated as an additional occurrence | |||
(like an RDATE from iCalendar). The patch object may often be empty | (like an RDATE from iCalendar). The patch object may often be empty | |||
in this case. | in this case. | |||
If the patch object defines the _excluded_ property to be "true", | If the patch object defines the "excluded" property value to be | |||
then the recurring calendar object does not occur at the recurrence- | "true", then the recurring calendar object does not occur at the | |||
id date-time (like an EXDATE from iCalendar). Such a patch object | recurrence-id date-time (like an EXDATE from iCalendar). Such a | |||
MUST NOT patch any other property. | 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 the | object except the start (or due) date-time, which is shifted to the | |||
new start time of the LocalDate key. However, individual properties | new start time of the LocalDate key. However, individual properties | |||
of the occurrence can be modified by a patch, or multiple patches. | of the occurrence can be modified by a patch, or multiple patches. | |||
It is valid to patch the start property value, and this patch takes | It is valid to patch the start property value, and this patch takes | |||
precedence over the LocalDate key. Both the LocalDate key as well as | precedence over the LocalDate key. Both the LocalDate key as well as | |||
the patched start date-time may occur before the original JSCalendar | the patched start date-time may occur before the original JSCalendar | |||
object's start or due date. | object's start or due date. | |||
skipping to change at page 24, line 30 ¶ | skipping to change at page 24, line 25 ¶ | |||
o isAllDay | o isAllDay | |||
o recurrenceRule | o recurrenceRule | |||
o recurrenceOverrides | o recurrenceOverrides | |||
o replyTo | o replyTo | |||
4.3.3. excluded | 4.3.3. excluded | |||
Type: "Boolean" (optional, default:"false") | Type: Boolean (optional, default: "false"). | |||
Defines if this object is an overridden, excluded instance of a | Defines if this object is an overridden, excluded instance of a | |||
recurring JSCalendar object (also see Section 4.3.2). If this | recurring JSCalendar object (also see Section 4.3.2). If this | |||
property value is "true", this calendar object instance MUST be | property value is "true", this calendar object instance MUST be | |||
removed from the occurrence expansion. | removed from the occurrence expansion. The absence of this property | |||
or its default value "false" indicates that this instance MUST be | ||||
added to the occurrence expansion. | ||||
4.4. Sharing and scheduling properties | 4.4. Sharing and scheduling properties | |||
4.4.1. priority | 4.4.1. priority | |||
Type: "Number" (optional, default:"0") | Type: Number (optional, default: "0"). | |||
Specifies a priority for the calendar object. This may be used as | Specifies a priority for the calendar object. This may be used as | |||
part of scheduling systems to help resolve conflicts for a time | 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. A value of 1 is the highest | of 0 specifies an undefined priority. A value of 1 is the highest | |||
priority. A value of 2 is the second highest priority. Subsequent | priority. A value of 2 is the second highest priority. Subsequent | |||
numbers specify a decreasing ordinal priority. A value of 9 is the | numbers specify a decreasing ordinal priority. A value of 9 is the | |||
lowest priority. Other integer values are reserved for future use. | lowest priority. 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 property should be treated when calculating free- | Specifies how this property should be treated when calculating free- | |||
busy state. The value MUST be one of: | busy state. The value MUST be one of: | |||
o ""free"": The object should be ignored when calculating whether | o ""free"": The object should be ignored when calculating whether | |||
the user is busy. | the user is busy. | |||
o ""busy"": The object should be included when calculating whether | o ""busy"": The object should be included when calculating whether | |||
the user is busy. | the 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 | restrictions indicated by this property are up to the | |||
implementations. | implementations. | |||
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 when the object is shared as | participants; it is only interpreted when the object is shared as | |||
skipping to change at page 25, line 44 ¶ | skipping to change at page 25, line 44 ¶ | |||
future RFC, or a vendor-specific value. Vendor specific values MUST | future RFC, or a vendor-specific value. Vendor specific values MUST | |||
be prefixed with a domain name controlled by the vendor, e.g. | be prefixed with a domain name controlled by the vendor, e.g. | |||
"example.com/topsecret". Any value the client or server doesn't | "example.com/topsecret". Any value the client or server doesn't | |||
understand should be preserved but treated as equivalent to | understand should be preserved but treated as equivalent to | |||
"private". | "private". | |||
o "public": The full details of the object are visible to those whom | o "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 | o "private": The details of the object are hidden; only the basic | |||
time and metadata is shared. Implementations MUST ensure the | time and metadata is shared. The following properties MAY be | |||
following properties are stripped when the object is accessed by a | shared, any other properties MUST NOT be shared: | |||
sharee: | ||||
* title | * @type | |||
* description | * uid | |||
* locations | * created | |||
* links | * updated | |||
* locale | * sequence | |||
* localizations | * freeBusyStatus | |||
* participants | * privacy | |||
* replyTo | * start | |||
In addition, any patches in "recurrenceOverrides" whose key is | * isAllDay | |||
prefixed with one of the above properties MUST be stripped. | ||||
* timeZone | ||||
* timeZones | ||||
* duration | ||||
* estimatedDuration | ||||
* due | ||||
* recurrenceOverrides. Only patches whose keys are prefixed with | ||||
one of the above properties are allowed to be shared. | ||||
o "secret": The object is hidden completely (as though it did not | o "secret": The object is hidden completely (as though it did not | |||
exist) when the calendar is shared. | exist) when the object 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 RSVP | Represents methods by which participants may submit their RSVP | |||
response to the organizer of the calendar object. The keys in the | response to the organizer of the calendar object. The keys in the | |||
property value are the available methods and MUST only contain ASCII | property value are the available methods and MUST only contain ASCII | |||
alphanumeric characters (A-Za-z0-9). The value is a URI to use that | alphanumeric characters (A-Za-z0-9). The value is a URI to use that | |||
method. Future methods may be defined in future specifications; a | method. Future methods may be defined in future specifications; 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 omitted | MUST preserve the method key and URI. This property MUST be omitted | |||
if no method is defined (rather than an empty object). If this | if no method is defined (rather than an empty object). If this | |||
property is set, the _participants_ property of this calendar object | property is set, the "participants" property of this calendar object | |||
MUST contain at least one participant. | MUST contain at least one participant. | |||
The following methods are defined: | The following methods are defined: | |||
o "imip": The organizer accepts an iMIP [RFC6047] response at this | o "imip": The organizer accepts an iMIP [RFC6047] response at this | |||
email address. The value MUST be a "mailto:" URI. | email address. The value MUST be a "mailto:" URI. | |||
o "web": Opening this URI in a web browser will provide the user | o "web": Opening this URI in a web browser will provide the user | |||
with a page where they can submit a reply to the organizer. | with a page where they can submit a reply to the organizer. | |||
o "other": The organizer is identified by this URI but the method | o "other": The organizer is identified by this URI but the method | |||
how to submit the RSVP is undefined. | how to submit the RSVP is undefined. | |||
4.4.5. participants | 4.4.5. participants | |||
Type: "String[Participant]" (optional) | Type: String[Participant] (optional). | |||
A map of participant identifiers to participants, describing their | A map of participant identifiers to participants, describing their | |||
participation in the calendar object. | participation in the calendar object. | |||
If this property is set, then the _replyTo_ property of this calendar | If this property is set, then the "replyTo" property of this calendar | |||
object MUST define at least one reply method. | object MUST define at least one reply method. | |||
A *Participant* object has the following properties: | A Participant object has the following properties: | |||
o *name*: "String" (optional) The display name of the participant | o name: String (optional). The display name of the participant | |||
(e.g. "Joe Bloggs"). | (e.g. "Joe Bloggs"). | |||
o *email*: "String" (optional) The email address for the | o email: String (optional). The email address for the participant. | |||
participant. | ||||
o *sendTo*: "String[String]" Represents methods by which the | o sendTo: String[String]. Represents methods by which the | |||
participant may receive the invitation and updates to the calendar | participant may receive the invitation and updates to the calendar | |||
object. | 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 to use that method. Future methods may be defined in | is a URI to use that method. Future methods may be defined in | |||
future specifications; a calendar client MUST ignore any method it | future specifications; a calendar client MUST ignore any method it | |||
does not understand, but MUST preserve the method key and URI. | does not understand, but MUST preserve the method key and URI. | |||
This property MUST be omitted if no method is defined (rather than | This property MUST be omitted if no method is defined (rather than | |||
an empty object). | an 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 email address. The value MUST be a "mailto:" URI. It MAY | this email address. The value MUST be a "mailto:" URI. It MAY | |||
be different from the value of the participant's _email_ | be 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 how to submit the invitation or update is undefined. | method how to submit the invitation or update is undefined. | |||
o *kind*: "String" (optional) What kind of entity this participant | o kind: String (optional). What kind of entity this participant is, | |||
is, if known. | if known. | |||
This MUST be either one of the following values, registered in a | This MUST be either one of the following values, registered in a | |||
future RFC, or a vendor-specific value. Any value the client or | future RFC, or a vendor-specific value. Any value the client or | |||
server doesn't understand should be treated the same as if this | server doesn't understand should be treated the same as if this | |||
property is omitted. | property is omitted. | |||
* "individual": a single person | * "individual": a single person | |||
* "group": a collection of people invited as a whole | * "group": a collection of people invited as a whole | |||
skipping to change at page 28, line 4 ¶ | skipping to change at page 28, line 15 ¶ | |||
This MUST be either one of the following values, registered in a | This MUST be either one of the following values, registered in a | |||
future RFC, or a vendor-specific value. Any value the client or | future RFC, or a vendor-specific value. Any value the client or | |||
server doesn't understand should be treated the same as if this | server doesn't understand should be treated the same as if this | |||
property is omitted. | property is omitted. | |||
* "individual": a single person | * "individual": a single person | |||
* "group": a collection of people invited as a whole | * "group": a collection of people invited as a whole | |||
* "resource": a non-human resource, e.g. a projector | * "resource": a non-human resource, e.g. a projector | |||
* "location": a physical location involved in the calendar object | * "location": a physical location involved in the calendar object | |||
that needs to be scheduled, e.g. a conference room. | that needs to be scheduled, e.g. a conference room. | |||
o *roles*: "String[Boolean]" A set of roles that this participant | o roles: String[Boolean]. A set of roles that this participant | |||
fulfills. | 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 either one of the following values, registered | in the set MUST be either one of the following values, registered | |||
in a future RFC, or a vendor-specific value: | in a future RFC, or a vendor-specific value: | |||
* "owner": The participant is an owner of the object. | * "owner": The participant is an owner of the object. | |||
* "attendee": The participant is an attendee of the calendar | * "attendee": The participant is an attendee of the calendar | |||
object. | object. | |||
* "chair": The participant is in charge of the calendar object | * "chair": The participant is in charge of the calendar object | |||
when it occurs. | when it occurs. | |||
The value for each key in the set MUST be "true". Roles that are | The value for each key in the set MUST be "true". Roles that are | |||
unknown to the implementation MUST be preserved and MAY be | unknown to the implementation MUST be preserved and MAY be | |||
ignored. | ignored. | |||
o *locationId*: "String" (optional) The location at which this | o locationId: String (optional). The location at which this | |||
participant is expected to be attending. | participant is expected to be 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 instance, this MUST be treated the | "locations" property of the instance, this MUST be treated the | |||
same as if the participant's locationId were omitted. | same as if the participant's locationId were omitted. | |||
o *participationStatus*: "String" (optional, default:"needs-action") | o participationStatus: String (optional, default: "needs-action"). | |||
The participation status, if any, of this participant. | The participation status, if any, of this participant. | |||
The value MUST be either one of the following values, registered | The value MUST be either one of the following values, registered | |||
in a future RFC, or a vendor-specific value: | in a future RFC, or a vendor-specific value: | |||
* "needs-action": No status yet set by the participant. | * "needs-action": No status yet 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. | |||
o *attendance*: "String" (optional, default:"required") The required | o attendance: String (optional, default: "required"). The required | |||
attendance of this participant. | attendance of this participant. | |||
The value MUST be either one of the following values, registered | The value MUST be either one of the following values, registered | |||
in a future RFC, or a vendor-specific value. Any value the client | in a future RFC, or a vendor-specific value. Any value the client | |||
or server doesn't understand should be treated the same as | or server doesn't understand should be treated the same as | |||
"required". | "required". | |||
* "none": Indicates a participant who is copied for information | * "none": Indicates a participant who is copied for information | |||
purposes only. | purposes only. | |||
* "optional": Indicates a participant whose attendance is | * "optional": Indicates a participant whose attendance is | |||
optional. | optional. | |||
* "required": Indicates a participant whose attendance is | * "required": Indicates a participant whose attendance is | |||
required. | required. | |||
o *expectReply*: "Boolean" (optional, default:"false") If true, the | o expectReply: Boolean (optional, default: "false"). If true, the | |||
organizer is expecting the participant to notify them of their | organizer is expecting the participant to notify them of their | |||
status. | status. | |||
o *scheduleSequence*: "Number" (optional, default:"0") The sequence | o scheduleSequence: Number (optional, default: "0"). The sequence | |||
number of the last response from the participant. If defined, | number of the last response from the participant. If defined, | |||
this MUST be a non-negative integer. | this MUST be a non-negative 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 RSVP following significant changes to the calendar object, and | new RSVP following significant changes to the calendar object, and | |||
to determine if future responses are responding to a current or | to determine if future responses are responding to a current or | |||
older view of the data. | older view of the data. | |||
o *scheduleUpdated*: "UTCDate" (optional) The _updated_ property of | o scheduleUpdated: UTCDate (optional). The "updated" property of | |||
the last iMIP response from the participant. | the last iMIP response from the participant. | |||
This can be compared to the _updated_ timestamp in future iMIP | This can be compared to the "updated" property timestamp in future | |||
responses to determine if the response is older or newer than the | iMIP responses to determine if the response is older or newer than | |||
current data. | the current data. | |||
o *invitedBy*: "String" (optional) The participant id of the | o invitedBy: String (optional). The participant id of the | |||
participant who invited this one, if known. | participant who invited this one, if known. | |||
o *delegatedTo*: "String[Boolean]" (optional) A set of participant | o delegatedTo: String[Boolean] (optional). A set of participant ids | |||
ids that this participant has delegated their participation to. | that this participant has delegated their participation to. Each | |||
Each key in the set MUST be the identifier of a participant. The | key in the set MUST be the identifier of a participant. The value | |||
value for each key in the set MUST be "true". This MUST be | for each key in the set MUST be "true". This MUST be omitted if | |||
omitted if none (rather than an empty set). | none (rather than an empty set). | |||
o *delegatedFrom*: "String[Boolean]" (optional) A set of participant | o delegatedFrom: String[Boolean] (optional). A set of participant | |||
ids that this participant is acting as a delegate for. Each key | ids that this participant is acting as a delegate for. Each key | |||
in the set MUST be the identifier of a participant. The value for | in the set MUST be the identifier of a participant. The value for | |||
each key in the set MUST be "true". This MUST be omitted if none | each key in the set MUST be "true". This MUST be omitted if none | |||
(rather than an empty set). | (rather than an empty set). | |||
o *memberOf*: "String[Boolean]" (optional) A set of group | o memberOf: String[Boolean] (optional). A set of group participants | |||
participants that were invited to this calendar object, which | that were invited to this calendar object, which caused this | |||
caused this participant to be invited due to their membership of | participant to be invited due to their membership of the group(s). | |||
the group(s). Each key in the set MUST be the identifier of a | Each key in the set MUST be the identifier of a participant. The | |||
participant. The value for each key in the set MUST be "true". | value for each key in the set MUST be "true". This MUST be | |||
This MUST be omitted if none (rather than an empty set). | omitted if none (rather than an empty set). | |||
o *linkIds*: "String[Boolean]" (optional) A set of links to more | o linkIds: String[Boolean] (optional). A set of links to more | |||
information about this participant, for example in vCard format. | information about this participant, for example in vCard format. | |||
The keys in the set MUST be the identifier of a Link object in the | The keys in the set MUST be the identifier of a Link object in the | |||
calendar object's _links_ property. The value for each key in the | calendar object's "links" property. The value for each key in the | |||
set MUST be "true". This MUST be omitted if none (rather than an | set MUST be "true". This MUST be omitted if none (rather than an | |||
empty set). | empty set). | |||
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 in this specification. If an implementation cannot determine | defined in this specification. If an implementation cannot determine | |||
the user's default alerts, or none are set, it MUST process the | the user's default alerts, or none are set, it MUST process the | |||
alerts property as if useDefaultAlerts is set to "false". | alerts property as if useDefaultAlerts is set to "false". | |||
4.5.2. alerts | 4.5.2. alerts | |||
Type: "String[Alert]" (optional) | Type: String[Alert] (optional). | |||
A map of alert identifiers to Alert objects, representing alerts/ | A map of alert identifiers to Alert objects, representing alerts/ | |||
reminders to display or send the user for this calendar object. | reminders to display or send the user for this calendar object. | |||
An *Alert* Object has the following properties: | An Alert Object has the following properties: | |||
o *trigger*: "OffsetTrigger|UnknownTrigger" Defines when to trigger | o trigger: OffsetTrigger|UnknownTrigger. Defines when to trigger | |||
the alert. | the alert. | |||
An *OffsetTrigger* object has the following properties: | An *OffsetTrigger* object has the following properties: | |||
* *type*: "String" The value of this property MUST be "offset". | * type: String (mandatory). The value of this property MUST be | |||
"offset". | ||||
* *offset*: "SignedDuration" Defines to trigger the alert | * offset: SignedDuration (mandatory). Defines to trigger the | |||
relative to the time property defined in the _relativeTo_ | alert relative to the time property defined in the "relativeTo" | |||
property. If the calendar object does not define a time zone, | property. If the calendar object does not define a time zone, | |||
the user's default time zone SHOULD be used when determining | the user's default time zone SHOULD be used when determining | |||
the offset, if known. Otherwise, the time zone to use is | the offset, if known. Otherwise, the time zone to use is | |||
implementation specific. | implementation specific. | |||
* *relativeTo*: "String" (optional, default:"start") Specifies | * relativeTo: String (optional, default: "start"). Specifies the | |||
the time property which the alert _offset_ is relative to. The | time property which the alert offset is relative to. The value | |||
value MUST be one of: | MUST be one of: | |||
+ "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 calendar object | the calendar object | |||
An *UnknownTrigger* object is an object that contains a *type* | An *UnknownTrigger* object is an object that contains a *type* | |||
property whose value is not "offset", plus zero or more other | property whose value is not "offset", plus zero or more other | |||
properties. This is for compatibility with client extensions and | properties. This is for compatibility with client extensions and | |||
future RFCs. Implementations SHOULD NOT trigger for trigger types | future RFCs. Implementations SHOULD NOT trigger for trigger types | |||
they do not understand, but MUST preserve them. | they do not understand, but MUST preserve them. | |||
o *acknowledged*: "UTCDate" (optional) | o acknowledged: UTCDate (optional). | |||
When the user has permanently dismissed the alert the client MUST | When the user has permanently dismissed the alert the client MUST | |||
set this to the current time in UTC. Other clients which sync | set this to the current time in UTC. Other clients which sync | |||
this property can then automatically dismiss or suppress duplicate | this property can then 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, the _acknowledged_ property of | For a recurring calendar object, the "acknowledged" property of | |||
the parent object MUST be updated, unless the alert is already | the parent object MUST be updated, unless the alert is already | |||
overridden in _recurrenceOverrides_. | overridden in the "recurrenceOverrides" property. | |||
o *snoozed*: "UTCDate" (optional) | o snoozed: UTCDate (optional). | |||
If the user temporarily dismisses the alert, this is the UTC date- | If the user temporarily dismisses the alert, this is the UTC date- | |||
time after which it should trigger again. Setting this property | time after which it should trigger again. Setting this property | |||
on an instance of a recurring calendar object MUST update the | on an instance of a recurring calendar object MUST update the | |||
alarm on the master object, unless the respective instance already | alarm on the top-level object, unless the respective instance | |||
is defined in "recurrenceOverrides". It MUST NOT generate an | already is defined in "recurrenceOverrides". It MUST NOT generate | |||
override for the sole use of snoozing an alarm. | an override for the sole use of snoozing an alarm. | |||
o *action*: "String" (optional, default:"display") Describes how to | o action: String (optional, default: "display"). Describes how to | |||
alert the user. | alert the user. | |||
The value MUST be at most one of the following values, registered | The value MUST be at most one of the following values, registered | |||
in a future RFC, or a vendor-specific value: | in a future RFC, or a vendor-specific value: | |||
* "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, notifying about the alert. This action is typically only | user, notifying about 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 [RFC5646] language tags to patch objects, which localize the | A map of [RFC5646] language tags to patch objects, which localize the | |||
calendar object into the locale of the respective language tag. | calendar object into the locale of the respective language tag. | |||
See the description of PatchObject (Section 3.2.4) for the structure | See the description of PatchObject (Section 3.2.4) for the structure | |||
of the PatchObject. The patches are applied to the top-level object. | of the PatchObject. The patches are applied to the top-level object. | |||
In addition to all the restrictions on patches specified there, the | In addition to all the restrictions on patches specified there, the | |||
pointer also MUST NOT start with one of the following prefixes; any | pointer also MUST NOT start with one of the following prefixes; any | |||
patch with a such a key MUST be ignored: | patch with a such a key MUST be ignored: | |||
skipping to change at page 33, line 17 ¶ | skipping to change at page 33, line 27 ¶ | |||
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. timeZones | 4.7.1. timeZones | |||
Type: "String[TimeZone]" (optional) | Type: String[TimeZone] (optional). | |||
Maps identifiers of custom time zones to their time zone definition. | Maps identifiers of custom time zones to their time zone definition. | |||
The following restrictions apply for each key in the map: | The following restrictions apply for each key in the map: | |||
o It MUST start with the "/" character (ASCII decimal 47; also see | o It MUST start with the "/" character (ASCII decimal 47; also see | |||
sections 3.2.19 of [RFC5545] and 3.6. of [RFC7808] for discussion | sections 3.2.19 of [RFC5545] and 3.6. of [RFC7808] for discussion | |||
of the forward slash character in time zone identifiers). | of the forward slash character in time zone identifiers). | |||
o It MUST be a valid _paramtext_ value as specified in section 3.1. | o It MUST be a valid "paramtext" value as specified in section 3.1. | |||
of [RFC5545]. | of [RFC5545]. | |||
o At least one other property in the same JSCalendar object MUST | o At least one other property in the same JSCalendar object MUST | |||
reference a time zone using this identifier (i.e. orphaned time | reference a time zone using this identifier (i.e. orphaned time | |||
zones are not allowed). | zones are not allowed). | |||
An identifier need only be unique to this JSCalendar object. | An identifier need only be unique to this JSCalendar object. | |||
A *TimeZone* object maps a VTIMEZONE component from iCalendar | A TimeZone object maps a VTIMEZONE component from iCalendar | |||
([RFC5545]). A valid time zone MUST define at least one transition | ([RFC5545]). A valid time zone MUST define at least one transition | |||
rule in the _standard_ or _daylight_ property. Its properties are: | rule in the "standard" or "daylight" property. Its properties are: | |||
o *tzId*: "String" The TZID property from iCalendar. | o tzId: String (mandatory). The TZID property from iCalendar. | |||
o *lastModified*: "UTCDate" (optional) The LAST-MODIFIED property | o lastModified: UTCDate (optional). The LAST-MODIFIED property from | |||
from iCalendar. | iCalendar. | |||
o *url*: "String" (optional) The TZURL property from iCalendar. | o url: String (optional). The TZURL property from iCalendar. | |||
o *validUntil*: "UTCDate" (optional) The TZUNTIL property from | o validUntil: UTCDate (optional). The TZUNTIL property from | |||
iCalendar specified in [RFC7808]. | iCalendar specified in [RFC7808]. | |||
o *aliases*: "String[Boolean]" Maps the TZID-ALIAS-OF properties | o aliases: String[Boolean] (optional). Maps the TZID-ALIAS-OF | |||
from iCalendar specified in [RFC7808] to a JSON set of aliases. | properties from iCalendar specified in [RFC7808] to a JSON set of | |||
aliases. The set is represented as an object, with the keys being | ||||
The set is represented as an object, with the keys being the | the aliases. The value for each key in the set MUST be "true". | |||
aliases. The value for each key in the set MUST be "true". | ||||
o *standard*: "TimeZoneRule[]" (optional) The STANDARD sub- | o standard: TimeZoneRule[] (optional). The STANDARD sub-components | |||
components from iCalendar. The order MUST be preserved during | from iCalendar. The order MUST be preserved during conversion. | |||
conversion. | ||||
o *daylight*: "TimeZoneRule[]" (optional) The DAYLIGHT sub- | o daylight: TimeZoneRule[] (optional). The DAYLIGHT sub-components | |||
components from iCalendar. The order MUST be preserved during | from iCalendar. The order MUST be preserved during conversion. | |||
conversion. | ||||
A *TimeZoneRule* object maps a STANDARD or DAYLIGHT sub-component | A TimeZoneRule object maps a STANDARD or DAYLIGHT sub-component from | |||
from iCalendar, with the restriction that _at most one_ recurrence | iCalendar, with the restriction that at most one recurrence rule is | |||
rule is allowed per rule. It has the following properties: | allowed per rule. It has the following properties: | |||
o *start*: "LocalDate" The DTSTART property from iCalendar. | o start: LocalDate (mandatory). The DTSTART property from | |||
iCalendar. | ||||
o *offsetTo*: "String" The TZOFFSETTO property from iCalendar. | o offsetTo: String (mandatory). The TZOFFSETTO property from | |||
iCalendar. | ||||
o *offsetFrom*: "String" The TZOFFSETFROM property from iCalendar. | o offsetFrom: String (mandatory). The TZOFFSETFROM property from | |||
iCalendar. | ||||
o *recurrenceRule*: "RecurrenceRule" (optional) The RRULE property | o recurrenceRule: RecurrenceRule (optional). The RRULE property | |||
mapped as specified in Section 4.3.1. During recurrence rule | mapped as specified in Section 4.3.1. During recurrence rule | |||
evaluation, the _until_ property value MUST be interpreted as a | evaluation, the "until" property value MUST be interpreted as a | |||
local time in the UTC time zone. | local time in the UTC time zone. | |||
o *recurrenceDates*: "LocalDate[Boolean]" (optional) Maps the RDATE | o recurrenceDates: LocalDate[Boolean] (optional). Maps the RDATE | |||
properties from iCalendar to a JSON set. The set is represented | properties from iCalendar to a JSON set. The set is represented | |||
as an object, with the keys being the recurrence dates. The value | as an object, with the keys being the recurrence dates. The value | |||
for each key in the set MUST be "true". | for each key in the set MUST be "true". | |||
o *names*: "String[Boolean]" (optional) Maps the TZNAME properties | o names: String[Boolean] (optional). Maps the TZNAME properties | |||
from iCalendar to a JSON set. The set is represented as an | from iCalendar to a JSON set. The set is represented as an | |||
object, with the keys being the names. The value for each key in | object, with the keys being the names. The value for each key in | |||
the set MUST be "true". | the set MUST be "true". | |||
o *comments*: "String[]" (optional) Maps the COMMENT properties from | o comments: String[] (optional). Maps the COMMENT properties from | |||
iCalendar. The order MUST be preserved during conversion. | iCalendar. The order MUST be preserved during conversion. | |||
5. Type-specific JSCalendar properties | 5. Type-specific JSCalendar properties | |||
5.1. JSEvent properties | 5.1. JSEvent properties | |||
In addition to the common JSCalendar object properties (Section 4) a | In addition to the common JSCalendar object properties (Section 4) a | |||
JSEvent has the following properties: | JSEvent has the following properties: | |||
5.1.1. start | 5.1.1. start | |||
Type: "LocalDate" e.g. "2015-09-02T00:00:00" | Type: LocalDate (mandatory). | |||
The date/time the event would start in the event's time zone. | The date/time the event would start in the event's time zone. | |||
A valid JSEvent MUST include this property. | ||||
5.1.2. timeZone | 5.1.2. timeZone | |||
Type: "String|null" (optional, default:"null") | Type: String|null (optional, default: "null"). | |||
Identifies the time zone the event is scheduled in, or "null" for | Identifies the time zone the event is scheduled in, or "null" for | |||
floating time. If omitted, this MUST be presumed to be "null" (i.e. | floating time. If omitted, this MUST be presumed to be "null" (i.e. | |||
floating time). Also see Section 3.2.6. | floating time). Also see Section 3.2.6. | |||
5.1.3. duration | 5.1.3. duration | |||
Type: "Duration", e.g. "P2DT3H" (optional, default: "PT0S") | Type: Duration (optional, default: "PT0S"). | |||
The zero or positive duration of the event in the event's start time | The zero or positive duration of the event in the event's start time | |||
zone. The same rules as for the iCalendar DURATION value type | zone. The same rules as for the iCalendar DURATION value type | |||
([RFC5545]) apply: The duration of a week or a day in hours/minutes/ | ([RFC5545]) apply: The duration of a week or a day in hours/minutes/ | |||
seconds may vary if it overlaps a period of discontinuity in the | seconds may vary if it overlaps a period of discontinuity in the | |||
event's time zone, for example a change from standard time to | event's time zone, for example a change from standard time to | |||
daylight-savings time. Leap seconds MUST NOT be considered when | daylight-savings time. Leap seconds MUST NOT be considered when | |||
computing an exact duration. When computing an exact duration, the | computing an exact duration. When computing an exact duration, the | |||
greatest order time components MUST be added first, that is, the | greatest order time components MUST be added first, that is, the | |||
number of days MUST be added first, followed by the number of hours, | number of days MUST be added first, followed by the number of hours, | |||
number of minutes, and number of seconds. Fractional seconds MUST be | number of minutes, and number of seconds. Fractional seconds MUST be | |||
added last. | added last. | |||
A JSEvent MAY involve start and end locations that are in different | A JSEvent 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 trans-continental flight). This can be expressed | |||
using the _relativeTo_ and _timeZone_ properties of the JSEvent's | using the "relativeTo" and "timeZone" properties of the JSEvent's | |||
_location_ objects. | "location" objects. | |||
5.1.4. isAllDay | 5.1.4. isAllDay | |||
Type: "Boolean" (optional, default:"false") | Type: Boolean (optional, default: "false"). | |||
Specifies if the event is an all day event, such as a birthday or | Specifies if the event is an all day event, such as a birthday or | |||
public holiday. | public holiday. | |||
If _isAllDay_ is true, then the following restrictions apply: | If the "isAllDay" property value is true, then the following | |||
restrictions apply: | ||||
o the _start_ property MUST have a time component of "T00:00:00". | o the "start" property MUST have a time component of "T00:00:00". | |||
o the _timeZone_ property MUST be "null" | o the "timeZone" property MUST be "null" | |||
o the _duration_ property MUST NOT include non-zero time components | o the "duration" property MUST NOT include non-zero time components | |||
(hours, minutes, or seconds) | (hours, minutes, or seconds) | |||
o the _freeBusyStatus_ property MUST NOT be "busy" | o the "freeBusyStatus" property MUST NOT be "busy" | |||
5.1.5. status | 5.1.5. 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 | The scheduling status (Section 4.4) of a JSEvent. If set, it MUST be | |||
one of: | one of: | |||
o "confirmed": Indicates the event is definite. | o "confirmed": Indicates the event is definite. | |||
o "cancelled": Indicates the event is cancelled. | o "cancelled": Indicates the event is cancelled. | |||
o "tentative": Indicates the event is tentative. | o "tentative": Indicates the event is tentative. | |||
5.2. JSTask properties | 5.2. JSTask 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: | JSTask has the following properties: | |||
5.2.1. due | 5.2.1. due | |||
Type: "LocalDate" (optional) e.g. "2015-09-02T00:00:00" | Type: LocalDate (optional). | |||
The date/time the task is due in the task's time zone. | The date/time the task is due in the task's time zone. | |||
5.2.2. start | 5.2.2. start | |||
Type: "LocalDate" (optional) e.g. "2015-09-02T00:00:00" | Type: LocalDate (optional). | |||
The date/time the task should start in the task's time zone. | The date/time the task should start in the task's time zone. | |||
5.2.3. timeZone | 5.2.3. timeZone | |||
Type: "String|null" (optional, default:"null") | Type: String|null (optional, default: "null"). | |||
Identifies the time zone the task is scheduled in, or "null" for | Identifies the time zone the task is scheduled in, or "null" for | |||
floating time. If omitted, this MUST be presumed to be "null" (i.e. | floating time. If omitted, this MUST be presumed to be "null" (i.e. | |||
floating time). Also see Section 3.2.6. | floating time). Also see Section 3.2.6. | |||
5.2.4. estimatedDuration | 5.2.4. estimatedDuration | |||
Type: "Duration" (optional), e.g. "P2DT3H" | Type: Duration (optional). | |||
Specifies the estimated positive duration of time the task takes to | Specifies the estimated positive duration of time the task takes to | |||
complete. | complete. | |||
5.2.5. statusUpdatedAt | 5.2.5. statusUpdatedAt | |||
Type: "UTCDate" (optional), e.g. "2016-06-13T12:00:00Z" | Type: UTCDate (optional). | |||
Specifies the date/time the task status properties was last updated. | Specifies the date/time the task status properties 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 status update timestamp of a specific task | to keep track of the last status update timestamp of a specific task | |||
recurrence, but leave other instances unchanged. One way to achieve | recurrence, but leave other instances unchanged. One way to achieve | |||
this is by overriding the statusUpdatedAt property in the task | this is by overriding the statusUpdatedAt property in the task | |||
_recurrenceOverrides_. However, this could produce a long list of | "recurrenceOverrides" property. However, this could produce a long | |||
timestamps for regularly recurring tasks. An alternative approach is | list of timestamps for regularly recurring tasks. An alternative | |||
to split the JSTask into a current, single instance of JSTask with | approach is to split the JSTask into a current, single instance of | |||
this instance status update time and a future recurring instance. | JSTask with this instance status update time and a future recurring | |||
Also see the definition of the _relatedTo_ on splitting. | instance. Also see Section 4.1.3 on splitting. | |||
5.2.6. isAllDay | 5.2.6. isAllDay | |||
Type: "Boolean" (optional, default:"false") | Type: Boolean (optional, default: "false"). | |||
Specifies if the task is an all day task. | Specifies if the task is an all day task. | |||
If _isAllDay_ is true, then the following restrictions apply: | If the "isAllDay" property value is true, then the following | |||
restrictions apply: | ||||
o the _start_ and _due_ properties MUST have a time component of | o the "start" and "due" properties MUST have a time component of | |||
"T00:00:00", or not be set | "T00:00:00", or not be set | |||
o the _timeZone_ property MUST be "null" | o the "timeZone" property MUST be "null" | |||
o the _freeBusyStatus_ property MUST NOT be "busy" | o the "freeBusyStatus" property MUST NOT be "busy" | |||
5.2.7. progress | 5.2.7. progress | |||
In addition to the common properties of a _Participant_ object | In addition to the common properties of a Participant object | |||
(Section 4.4.5), a Participant within a JSTask supports the following | (Section 4.4.5), a Participant within a JSTask supports the following | |||
property: | property: | |||
o *progress*: "ParticipantProgress" (optional) The progress of the | o progress: ParticipantProgress (optional). The progress of the | |||
participant for this task, if known. This property MUST NOT be | participant for this task, if known. This property MUST NOT be | |||
set if the _participationStatus_ of this participant is any other | set if the "participationStatus" of this participant is any other | |||
value but "accepted". | value but "accepted". | |||
A *ParticipantProgress* object has the following properties: | A ParticipantProgress object has the following properties: | |||
o *status*: "String" Describes the completion status of the | o status: String (mandatory). Describes the completion status of | |||
participant's progress. | the participant's progress. | |||
The value MUST be at most one of the following values, registered | The value MUST be at most one of the following values, registered | |||
in a future RFC, or a vendor-specific value: | in a future RFC, or a vendor-specific value: | |||
* "completed": The participant completed their task. | * "completed": The participant completed their task. | |||
* "in-process": The participant has started this task. | * "in-process": The participant has started this task. | |||
* "failed": The participant failed to complete their task. | * "failed": The participant failed to complete their task. | |||
o *timestamp*: "UTCDate" Describes the last time when the | o timestamp: UTCDate (mandatory). Describes the last time when the | |||
participant progress got updated. | participant progress got updated. | |||
5.2.8. status | 5.2.8. status | |||
Type: "String" | Type: String (optional). | |||
Defines the overall status of this task. If omitted, the default | Defines the overall status of this task. If omitted, the default | |||
status (Section 4.4) of a JSTask is defined as follows (in order of | status (Section 4.4) of a JSTask is defined as follows (in order of | |||
evaluation): | evaluation): | |||
o "completed": if all the _ParticipantProgress_ status of the task | o "completed": if the "status" property value of all participant | |||
participants is "completed". | progresses is "completed". | |||
o "failed": if at least one _ParticipantProgress_ status of the task | o "failed": if at least one "status" property value of the | |||
participants is "failed". | participant progresses is "failed". | |||
o "in-process": if at least one _ParticipantProgress_ status of the | o "in-process": if at least one "status" property value of the | |||
task participants is "in-process". | participant progresses is "in-process". | |||
o "needs-action": If none of the other criteria match. | o "needs-action": If none of the other criteria match. | |||
If set, it MUST be one of: | If set, it MUST be one of: | |||
o "needs-action": Indicates the task needs action. | o "needs-action": Indicates the task needs action. | |||
o "completed": Indicates the task is completed. | o "completed": Indicates the task is completed. | |||
o "in-process": Indicates the task is in process. | o "in-process": Indicates the task is in process. | |||
skipping to change at page 39, line 38 ¶ | skipping to change at page 39, line 48 ¶ | |||
o description | o description | |||
o color | o color | |||
o links | o links | |||
as well as the following JSGroup-specific properties: | as well as the following JSGroup-specific properties: | |||
5.3.1. entries | 5.3.1. entries | |||
Type: "String[JSTask|JSEvent]" | Type: String[JSTask|JSEvent] (mandatory). | |||
A collection of group members. This is represented as a map of the | A collection of group members. This is represented as a map of the | |||
_uid_ property value to the JSCalendar object member having that uid. | "uid" property value to the JSCalendar object member having that uid. | |||
Implementations MUST ignore entries of unknown type. | Implementations MUST ignore entries of unknown type. | |||
5.3.2. source | 5.3.2. source | |||
Type: "String" (optional) | Type: String (optional). | |||
The source from which updated versions of this group may be retrieved | The source from which updated versions of this group may be retrieved | |||
from. The value MUST be a URI. | from. The value MUST be a URI. | |||
6. JSCalendar object examples | 6. JSCalendar object 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 | |||
skipping to change at page 50, line 48 ¶ | skipping to change at page 50, line 48 ¶ | |||
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>. | |||
10.2. Informative References | 10.2. Informative References | |||
[draft-apthorp-ical-tasks] | ||||
"Task Extensions to iCalendar", | ||||
<https://tools.ietf.org/html/draft-apthorp-ical-tasks>. | ||||
[draft-ietf-calext-ical-relations] | ||||
"Support for iCalendar Relationships", | ||||
<https://tools.ietf.org/html/ | ||||
draft-ietf-calext-ical-relations>. | ||||
[MIME] "IANA Media Types", <https://www.iana.org/assignments/ | [MIME] "IANA Media Types", <https://www.iana.org/assignments/ | |||
media-types/media-types.xhtml>. | media-types/media-types.xhtml>. | |||
10.3. URIs | 10.3. URIs | |||
[1] https://www.iana.org/time-zones | [1] https://www.iana.org/time-zones | |||
[2] https://www.iana.org/assignments/link-relations/link- | [2] https://www.iana.org/assignments/link-relations/link- | |||
relations.xhtml | relations.xhtml | |||
End of changes. 220 change blocks. | ||||
345 lines changed or deleted | 346 lines changed or added | |||
This html diff was produced by rfcdiff 1.47. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |