draft-ietf-calext-jscalendar-08.txt | draft-ietf-calext-jscalendar-09.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: April 11, 2019 October 8, 2018 | Expires: May 9, 2019 November 5, 2018 | |||
JSCalendar: A JSON representation of calendar data | JSCalendar: A JSON representation of calendar data | |||
draft-ietf-calext-jscalendar-08 | draft-ietf-calext-jscalendar-09 | |||
Abstract | Abstract | |||
This specification defines a data model and JSON representation of | This specification defines a data model and JSON representation of | |||
calendar data that can be used for storage and data exchange in a | calendar data that can be used for storage and data exchange in a | |||
calendaring and scheduling environment. It aims to be an alternative | calendaring and scheduling environment. It aims to be an alternative | |||
to the widely deployed iCalendar data format and to be unambiguous, | to the widely deployed iCalendar data format and to be unambiguous, | |||
extendable and simple to process. | extendable and simple to process. | |||
Status of This Memo | Status of This Memo | |||
skipping to change at page 1, line 34 ¶ | skipping to change at page 1, line 34 ¶ | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
Drafts is at https://datatracker.ietf.org/drafts/current/. | Drafts is at https://datatracker.ietf.org/drafts/current/. | |||
Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
This Internet-Draft will expire on April 11, 2019. | This Internet-Draft will expire on May 9, 2019. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2018 IETF Trust and the persons identified as the | Copyright (c) 2018 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
(https://trustee.ietf.org/license-info) in effect on the date of | (https://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | publication of this document. Please review these documents | |||
skipping to change at page 2, line 39 ¶ | skipping to change at page 2, line 39 ¶ | |||
4.1.4. prodId . . . . . . . . . . . . . . . . . . . . . . . 11 | 4.1.4. prodId . . . . . . . . . . . . . . . . . . . . . . . 11 | |||
4.1.5. created . . . . . . . . . . . . . . . . . . . . . . . 11 | 4.1.5. created . . . . . . . . . . . . . . . . . . . . . . . 11 | |||
4.1.6. updated . . . . . . . . . . . . . . . . . . . . . . . 12 | 4.1.6. updated . . . . . . . . . . . . . . . . . . . . . . . 12 | |||
4.1.7. sequence . . . . . . . . . . . . . . . . . . . . . . 12 | 4.1.7. sequence . . . . . . . . . . . . . . . . . . . . . . 12 | |||
4.1.8. method . . . . . . . . . . . . . . . . . . . . . . . 12 | 4.1.8. method . . . . . . . . . . . . . . . . . . . . . . . 12 | |||
4.2. What and where properties . . . . . . . . . . . . . . . . 12 | 4.2. What and where properties . . . . . . . . . . . . . . . . 12 | |||
4.2.1. title . . . . . . . . . . . . . . . . . . . . . . . . 12 | 4.2.1. title . . . . . . . . . . . . . . . . . . . . . . . . 12 | |||
4.2.2. description . . . . . . . . . . . . . . . . . . . . . 12 | 4.2.2. description . . . . . . . . . . . . . . . . . . . . . 12 | |||
4.2.3. descriptionContentType . . . . . . . . . . . . . . . 12 | 4.2.3. descriptionContentType . . . . . . . . . . . . . . . 12 | |||
4.2.4. locations . . . . . . . . . . . . . . . . . . . . . . 13 | 4.2.4. locations . . . . . . . . . . . . . . . . . . . . . . 13 | |||
4.2.5. virtualLocations . . . . . . . . . . . . . . . . . . 13 | 4.2.5. virtualLocations . . . . . . . . . . . . . . . . . . 14 | |||
4.2.6. links . . . . . . . . . . . . . . . . . . . . . . . . 14 | 4.2.6. links . . . . . . . . . . . . . . . . . . . . . . . . 14 | |||
4.2.7. locale . . . . . . . . . . . . . . . . . . . . . . . 15 | 4.2.7. locale . . . . . . . . . . . . . . . . . . . . . . . 15 | |||
4.2.8. keywords . . . . . . . . . . . . . . . . . . . . . . 15 | 4.2.8. keywords . . . . . . . . . . . . . . . . . . . . . . 16 | |||
4.2.9. categories . . . . . . . . . . . . . . . . . . . . . 16 | 4.2.9. categories . . . . . . . . . . . . . . . . . . . . . 16 | |||
4.2.10. color . . . . . . . . . . . . . . . . . . . . . . . . 16 | 4.2.10. color . . . . . . . . . . . . . . . . . . . . . . . . 16 | |||
4.3. Recurrence properties . . . . . . . . . . . . . . . . . . 16 | 4.3. Recurrence properties . . . . . . . . . . . . . . . . . . 16 | |||
4.3.1. recurrenceRule . . . . . . . . . . . . . . . . . . . 16 | 4.3.1. recurrenceRule . . . . . . . . . . . . . . . . . . . 16 | |||
4.3.2. recurrenceOverrides . . . . . . . . . . . . . . . . . 21 | 4.3.2. recurrenceOverrides . . . . . . . . . . . . . . . . . 21 | |||
4.3.3. excluded . . . . . . . . . . . . . . . . . . . . . . 22 | 4.3.3. excluded . . . . . . . . . . . . . . . . . . . . . . 22 | |||
4.4. Sharing and scheduling properties . . . . . . . . . . . . 22 | 4.4. Sharing and scheduling properties . . . . . . . . . . . . 22 | |||
4.4.1. priority . . . . . . . . . . . . . . . . . . . . . . 22 | 4.4.1. priority . . . . . . . . . . . . . . . . . . . . . . 22 | |||
4.4.2. freeBusyStatus . . . . . . . . . . . . . . . . . . . 22 | 4.4.2. freeBusyStatus . . . . . . . . . . . . . . . . . . . 22 | |||
4.4.3. privacy . . . . . . . . . . . . . . . . . . . . . . . 23 | 4.4.3. privacy . . . . . . . . . . . . . . . . . . . . . . . 23 | |||
4.4.4. replyTo . . . . . . . . . . . . . . . . . . . . . . . 24 | 4.4.4. replyTo . . . . . . . . . . . . . . . . . . . . . . . 24 | |||
4.4.5. participants . . . . . . . . . . . . . . . . . . . . 24 | 4.4.5. participants . . . . . . . . . . . . . . . . . . . . 24 | |||
4.5. Alerts properties . . . . . . . . . . . . . . . . . . . . 27 | 4.5. Alerts properties . . . . . . . . . . . . . . . . . . . . 28 | |||
4.5.1. useDefaultAlerts . . . . . . . . . . . . . . . . . . 27 | 4.5.1. useDefaultAlerts . . . . . . . . . . . . . . . . . . 28 | |||
4.5.2. alerts . . . . . . . . . . . . . . . . . . . . . . . 28 | 4.5.2. alerts . . . . . . . . . . . . . . . . . . . . . . . 28 | |||
4.6. Multilingual properties . . . . . . . . . . . . . . . . . 29 | 4.6. Multilingual properties . . . . . . . . . . . . . . . . . 29 | |||
4.6.1. localizations . . . . . . . . . . . . . . . . . . . . 29 | 4.6.1. localizations . . . . . . . . . . . . . . . . . . . . 29 | |||
5. Type-specific JSCalendar properties . . . . . . . . . . . . . 30 | 5. Type-specific JSCalendar properties . . . . . . . . . . . . . 30 | |||
5.1. JSEvent properties . . . . . . . . . . . . . . . . . . . 30 | 5.1. JSEvent properties . . . . . . . . . . . . . . . . . . . 30 | |||
5.1.1. start . . . . . . . . . . . . . . . . . . . . . . . . 30 | 5.1.1. start . . . . . . . . . . . . . . . . . . . . . . . . 31 | |||
5.1.2. timeZone . . . . . . . . . . . . . . . . . . . . . . 30 | 5.1.2. timeZone . . . . . . . . . . . . . . . . . . . . . . 31 | |||
5.1.3. duration . . . . . . . . . . . . . . . . . . . . . . 30 | 5.1.3. duration . . . . . . . . . . . . . . . . . . . . . . 31 | |||
5.1.4. isAllDay . . . . . . . . . . . . . . . . . . . . . . 31 | 5.1.4. isAllDay . . . . . . . . . . . . . . . . . . . . . . 31 | |||
5.1.5. status . . . . . . . . . . . . . . . . . . . . . . . 31 | 5.1.5. status . . . . . . . . . . . . . . . . . . . . . . . 32 | |||
5.2. JSTask properties . . . . . . . . . . . . . . . . . . . . 32 | 5.2. JSTask properties . . . . . . . . . . . . . . . . . . . . 32 | |||
5.2.1. due . . . . . . . . . . . . . . . . . . . . . . . . . 32 | 5.2.1. due . . . . . . . . . . . . . . . . . . . . . . . . . 32 | |||
5.2.2. start . . . . . . . . . . . . . . . . . . . . . . . . 32 | 5.2.2. start . . . . . . . . . . . . . . . . . . . . . . . . 32 | |||
5.2.3. timeZone . . . . . . . . . . . . . . . . . . . . . . 32 | 5.2.3. timeZone . . . . . . . . . . . . . . . . . . . . . . 32 | |||
5.2.4. estimatedDuration . . . . . . . . . . . . . . . . . . 32 | 5.2.4. estimatedDuration . . . . . . . . . . . . . . . . . . 33 | |||
5.2.5. statusUpdatedAt . . . . . . . . . . . . . . . . . . . 32 | 5.2.5. statusUpdatedAt . . . . . . . . . . . . . . . . . . . 33 | |||
5.2.6. isAllDay . . . . . . . . . . . . . . . . . . . . . . 33 | 5.2.6. isAllDay . . . . . . . . . . . . . . . . . . . . . . 33 | |||
5.2.7. progress . . . . . . . . . . . . . . . . . . . . . . 33 | 5.2.7. progress . . . . . . . . . . . . . . . . . . . . . . 33 | |||
5.2.8. status . . . . . . . . . . . . . . . . . . . . . . . 33 | 5.2.8. status . . . . . . . . . . . . . . . . . . . . . . . 34 | |||
5.3. JSGroup properties . . . . . . . . . . . . . . . . . . . 34 | 5.3. JSGroup properties . . . . . . . . . . . . . . . . . . . 35 | |||
5.3.1. entries . . . . . . . . . . . . . . . . . . . . . . . 35 | 5.3.1. entries . . . . . . . . . . . . . . . . . . . . . . . 35 | |||
5.3.2. source . . . . . . . . . . . . . . . . . . . . . . . 35 | 5.3.2. source . . . . . . . . . . . . . . . . . . . . . . . 35 | |||
6. Conversion from and to iCalendar . . . . . . . . . . . . . . 35 | 6. Conversion from and to iCalendar . . . . . . . . . . . . . . 35 | |||
6.1. JSEvent . . . . . . . . . . . . . . . . . . . . . . . . . 35 | 6.1. JSEvent . . . . . . . . . . . . . . . . . . . . . . . . . 36 | |||
6.2. JSTask . . . . . . . . . . . . . . . . . . . . . . . . . 36 | 6.2. JSTask . . . . . . . . . . . . . . . . . . . . . . . . . 36 | |||
6.3. JSGroup . . . . . . . . . . . . . . . . . . . . . . . . . 38 | 6.3. JSGroup . . . . . . . . . . . . . . . . . . . . . . . . . 38 | |||
6.4. Common properties . . . . . . . . . . . . . . . . . . . . 38 | 6.4. Common properties . . . . . . . . . . . . . . . . . . . . 38 | |||
6.5. Locations and participants . . . . . . . . . . . . . . . 40 | 6.5. Locations and participants . . . . . . . . . . . . . . . 40 | |||
6.6. Unknown properties . . . . . . . . . . . . . . . . . . . 43 | 6.6. Unknown properties . . . . . . . . . . . . . . . . . . . 43 | |||
7. JSCalendar object examples . . . . . . . . . . . . . . . . . 43 | 7. JSCalendar object examples . . . . . . . . . . . . . . . . . 43 | |||
7.1. Simple event . . . . . . . . . . . . . . . . . . . . . . 43 | 7.1. Simple event . . . . . . . . . . . . . . . . . . . . . . 43 | |||
7.2. Simple task . . . . . . . . . . . . . . . . . . . . . . . 44 | 7.2. Simple task . . . . . . . . . . . . . . . . . . . . . . . 44 | |||
7.3. Simple group . . . . . . . . . . . . . . . . . . . . . . 44 | 7.3. Simple group . . . . . . . . . . . . . . . . . . . . . . 44 | |||
7.4. All-day event . . . . . . . . . . . . . . . . . . . . . . 44 | 7.4. All-day event . . . . . . . . . . . . . . . . . . . . . . 44 | |||
7.5. Task with a due date . . . . . . . . . . . . . . . . . . 45 | 7.5. Task with a due date . . . . . . . . . . . . . . . . . . 45 | |||
7.6. Event with end time-zone . . . . . . . . . . . . . . . . 45 | 7.6. Event with end time zone . . . . . . . . . . . . . . . . 45 | |||
7.7. Floating-time event (with recurrence) . . . . . . . . . . 46 | 7.7. Floating-time event (with recurrence) . . . . . . . . . . 46 | |||
7.8. Event with multiple locations and localization . . . . . 46 | 7.8. Event with multiple locations and localization . . . . . 46 | |||
7.9. Recurring event with overrides . . . . . . . . . . . . . 47 | 7.9. Recurring event with overrides . . . . . . . . . . . . . 47 | |||
7.10. Recurring event with participants . . . . . . . . . . . . 48 | 7.10. Recurring event with participants . . . . . . . . . . . . 48 | |||
8. Security Considerations . . . . . . . . . . . . . . . . . . . 50 | 8. Security Considerations . . . . . . . . . . . . . . . . . . . 50 | |||
9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 50 | 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 50 | |||
10. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 50 | 10. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 50 | |||
11. References . . . . . . . . . . . . . . . . . . . . . . . . . 50 | 11. References . . . . . . . . . . . . . . . . . . . . . . . . . 50 | |||
11.1. Normative References . . . . . . . . . . . . . . . . . . 50 | 11.1. Normative References . . . . . . . . . . . . . . . . . . 50 | |||
11.2. Informative References . . . . . . . . . . . . . . . . . 52 | 11.2. Informative References . . . . . . . . . . . . . . . . . 52 | |||
skipping to change at page 4, line 36 ¶ | skipping to change at page 4, line 36 ¶ | |||
iCalendar data format ([RFC5545], also see Section 1.1), but the | iCalendar data format ([RFC5545], also see Section 1.1), but the | |||
specification should add new attributes or value types, or not | specification should add new attributes or value types, or not | |||
support existing ones, where appropriate. Conversion between the | support existing ones, where appropriate. Conversion between the | |||
data formats need not fully preserve semantic meaning. | 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 mostly is a | (JSON) Data Interchange Format [RFC8259]. Using JSON is mostly a | |||
pragmatic choice: its widespread use should help to speed up | pragmatic choice: its widespread use makes JSCalendar easier to | |||
JSCalendar adoption and a wide range of production-ready JSON | adopt, and the ready availability of production-ready JSON | |||
implementations allows to decrease interoperability issues. | implementations eliminates a whole category of parser-related | |||
interoperability issues. | ||||
1.1. Relation to the iCalendar format | 1.1. Relation to the iCalendar format | |||
The iCalendar data format [RFC5545], a widely deployed interchange | The iCalendar data format [RFC5545], a widely deployed interchange | |||
format for calendaring and scheduling data, has served calendaring | format for calendaring and scheduling data, has served calendaring | |||
vendors for a long while, but contains some ambiguities and pitfalls | vendors for a long while, but contains some ambiguities and pitfalls | |||
that can not be overcome without backward-incompatible changes. | that can not be overcome without backward-incompatible changes. | |||
For example, iCalendar defines various formats for local times, UTC | For example, iCalendar defines various formats for local times, UTC | |||
time and dates, which confuses new users. Other sources for errors | time and dates, which confuses new users. Other sources for errors | |||
are the requirement for custom time-zone definitions within a single | are the requirement for custom time zone definitions within a single | |||
calendar component, as well as the iCalendar format itself; the | calendar component, as well as the iCalendar format itself; the | |||
latter causing interoperability issues due to misuse of CR LF | latter causing interoperability issues due to misuse of CR LF | |||
terminated strings, line continuations and subtle differences between | terminated strings, line continuations and subtle differences between | |||
iCalendar parsers. Lastly, up until recently the iCalendar format | iCalendar parsers. Lastly, up until recently the iCalendar format | |||
did not allow to express the difference between two calendar | did not have a way to express a concise difference between two | |||
components, which results in verbose exchanges during scheduling. | calendar components, which results in verbose exchanges during | |||
scheduling. | ||||
Some of these issues were addressed by the jCal [RFC7265] format, | Some of these issues were addressed by the jCal [RFC7265] format, | |||
which is a direct mapping between iCalendar and JSON. However, it | which is a direct mapping between iCalendar and JSON. However, it | |||
did not attempt to extend or update iCalendar semantics. | did not attempt to extend or update iCalendar semantics. | |||
1.2. Notational Conventions | 1.2. Notational Conventions | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | |||
document are to be interpreted as described in [RFC2119]. | document are to be interpreted as described in [RFC2119]. | |||
The underlying format used for this specification is JSON. | The underlying format used for this specification is JSON. | |||
Consequently, the terms "object" and "array" as well as the four | Consequently, the terms "object" and "array" as well as the four | |||
primitive types (strings, numbers, booleans, and null) are to be | primitive types (strings, numbers, booleans, and null) are to be | |||
interpreted as described in Section 1 of[RFC8259]. | interpreted as described in Section 1 of [RFC8259]. | |||
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. | for compactness. | |||
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. | |||
skipping to change at page 7, line 27 ¶ | skipping to change at page 7, line 27 ¶ | |||
each date-time. | each date-time. | |||
For example "2010-10-10T10:10:10.003Z" is OK, but | For example "2010-10-10T10:10:10.003Z" is OK, but | |||
"2010-10-10T10:10:10.000Z" is invalid and MUST be encoded as | "2010-10-10T10:10:10.000Z" is invalid and MUST be encoded as | |||
"2010-10-10T10:10:10Z". | "2010-10-10T10:10:10Z". | |||
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 timezone at the same _wall- | time zone. Instead, they occur in every timezone 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, as | A duration is represented by a subset of ISO8601 duration format, as | |||
specified by the following ABNF: | 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] | |||
skipping to change at page 10, line 25 ¶ | skipping to change at page 10, line 25 ¶ | |||
4.1.2. uid | 4.1.2. uid | |||
Type: "String" | Type: "String" | |||
A globally unique identifier, used to associate the object as the | A globally unique identifier, used to associate the object as the | |||
same across different systems, calendars and views. The value of | same across different systems, calendars and views. The value of | |||
this property MUST be unique across _all_ JSCalendar objects, even if | this property MUST be unique across _all_ JSCalendar objects, even if | |||
they are of different type. [RFC4122] describes a range of | they are of different type. [RFC4122] describes a range of | |||
established algorithms to generate universally unique identifiers | established algorithms to generate universally unique identifiers | |||
(UUID), and the random or pseudo-random version is recommended to | (UUID), and the random or pseudo-random version is recommended. | |||
use. | ||||
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. | 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]" Describes how the linked object is | o *relation*: "String[Boolean]" (optional) Describes how the linked | |||
related to this object as a set of relation types. | object is related to this object as a set of relation types. If | |||
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 | |||
is part of. | is part of. | |||
skipping to change at page 13, line 35 ¶ | skipping to change at page 13, line 35 ¶ | |||
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. | |||
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[]" (optional) A list of ids for links to | o *linkIds*: "String[Boolean]" (optional) A set of link ids for | |||
alternate representations of this location. | links to alternate representations of this location. Each key in | |||
the set MUST be the identifier of a Link object defined in the | ||||
*links* property of this calendar object. The value for each key | ||||
in the set MUST be "true". This MUST be omitted if none (rather | ||||
than an 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 ids to VirtualLocation objects, representing virtual | A map of ids 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 | |||
skipping to change at page 17, line 16 ¶ | skipping to change at page 17, line 25 ¶ | |||
* "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 from | o *interval*: "Number" (optional, default:"1") The INTERVAL part | |||
iCal. If included, it MUST be an integer "x >= 1". | from iCal. 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 part | o *firstDayOfWeek*: "String" (optional, default:""mo"") The WKST | |||
from iCalendar, represented as a lower-case abbreviated two-letter | part from iCalendar, represented as a lower-case abbreviated two- | |||
English day of the week. If included, it MUST be one of the | letter English day of the week. If included, it MUST be one of | |||
following values: ""mo"|"tu"|"we"|"th"|"fr"|"sa"|"su"". | the 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 value in iCalendar (e.g. ""+1"" or ""-3""). If present, | BYDAY value in iCalendar (e.g. ""+1"" or ""-3""). If present, | |||
skipping to change at page 18, line 7 ¶ | skipping to change at page 18, line 15 ¶ | |||
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. | iCalendar. The array MUST have at least one entry if included. | |||
o *byWeekNo*: "Number[]"(optional) The BYWEEKNO part from iCalendar. | o *byWeekNo*: "Number[]" (optional) The BYWEEKNO part from | |||
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 *byHour*: "Number[]" (optional) The BYHOUR 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 iCalendar. | o *byMinute*: "Number[]" (optional) The BYMINUTE part from | |||
The array MUST have at least one entry if included. | iCalendar. The array MUST have at least one entry if included. | |||
o *bySecond*: "Number[]"(optional) The BYSECOND part from iCalendar. | o *bySecond*: "Number[]" (optional) The BYSECOND part from | |||
The array MUST have at least one entry if included. | iCalendar. The array MUST have at least one entry if included. | |||
o *bySetPosition*: "Number[]"(optional) The BYSETPOS part from | 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 MUST NOT be included if a *count* property is specified. | This MUST NOT be included if a *count* property is specified. | |||
Note, as in iCalendar, this date is presumed to be in the time- | Note, as in iCalendar, this date is presumed to be in the time | |||
zone specified in *timeZone*. It is not a UTC time. | zone specified in *timeZone*. It is not a UTC time. | |||
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: | |||
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: | |||
* *yearly*: every second from midnight on the 1st January | * *yearly*: every second from midnight on the 1st January | |||
(inclusive) to midnight the following 1st January (exclusive) | (inclusive) to midnight the following 1st January (exclusive) | |||
skipping to change at page 22, line 19 ¶ | skipping to change at page 22, line 30 ¶ | |||
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 | |||
treated as if not existent. | removed from 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 24, line 14 ¶ | skipping to change at page 24, line 22 ¶ | |||
o "secret": The object is hidden completely (as though it did not | o "secret": The object is hidden completely (as though it did not | |||
exist) when the calendar is shared. | exist) when the calendar is shared. | |||
4.4.4. replyTo | 4.4.4. replyTo | |||
Type: "String[String]" (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. The value is a URI to use | property value are the available methods and MUST only contain ASCII | |||
that method. Future methods may be defined in future specifications; | alphanumeric characters (A-Za-z0-9). The value is a URI to use that | |||
a calendar client MUST ignore any method it does not understand, but | method. Future methods may be defined in future specifications; a | |||
MUST preserve the method key and URI. | calendar client MUST ignore any method it does not understand, but | |||
MUST preserve the method key and URI. This property MUST be omitted | ||||
if no method is defined (rather than an empty object). | ||||
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 | ||||
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 ids to participants, describing their | A map of participant ids to participants, describing their | |||
participation in the calendar object. A participant id MUST unique | participation in the calendar object. A participant id MUST be | |||
to this calendar object; a UUID or the base-64 encoded email address | unique to this calendar object; a UUID or the base-64 encoded email | |||
of the participant is a good choice. | address of the participant is a good choice. | |||
A *Participant* object has the following properties: | A *Participant* object has the following properties: | |||
o *name*: "String" The display name of the participant (e.g. "Joe | o *name*: "String" (optional) The display name of the participant | |||
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. The | The keys in the property value are the available methods and MUST | |||
value is a URI to use that method. Future methods may be defined | only contain ASCII alphanumeric characters (A-Za-z0-9). The value | |||
in future specifications; a calendar client MUST ignore any method | is a URI to use that method. Future methods may be defined in | |||
it does not understand, but MUST preserve the method key and URI. | future specifications; a calendar client MUST ignore any method it | |||
does not understand, but MUST preserve the method key and URI. | ||||
This property MUST be omitted if no method is defined (rather than | ||||
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. | |||
skipping to change at page 26, line 9 ¶ | skipping to change at page 26, line 28 ¶ | |||
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* timestamp in future iMIP | |||
responses to determine if the response is older or newer than the | responses to determine if the response is older or newer than the | |||
current data. | 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]|null" (optional) A set of | o *delegatedTo*: "String[Boolean]" (optional) A set of participant | |||
participant ids that this participant has delegated their | ids that this participant has delegated their participation to. | |||
participation to. Each key 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 (rather than an empty set). | ||||
o *delegatedFrom*: "String[Boolean]|null" (optional) A set of | ||||
participant ids that this participant is acting as a delegate for. | ||||
Each key in the set MUST be the identifier of a participant. The | Each key in the set MUST be the identifier of a participant. The | |||
value for each key in the set MUST be "true". This MUST be | value for each key in the set MUST be "true". This MUST be | |||
omitted if none (rather than an empty set). | omitted if none (rather than an empty set). | |||
o *memberOf*: "String[Boolean]|null" (optional) A set of group | o *delegatedFrom*: "String[Boolean]" (optional) A set of participant | |||
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 | ||||
each key in the set MUST be "true". This MUST be omitted if none | ||||
(rather than an empty set). | ||||
o *memberOf*: "String[Boolean]" (optional) A set of group | ||||
participants that were invited to this calendar object, which | participants that were invited to this calendar object, which | |||
caused this participant to be invited due to their membership of | caused this participant to be invited due to their membership of | |||
the group(s). Each key in the set MUST be the identifier of a | the group(s). Each key in the set MUST be the identifier of a | |||
participant. The value for each key in the set MUST be "true". | participant. The value for each key in the set MUST be "true". | |||
This MUST be omitted if none (rather than an empty set). | This MUST be omitted if none (rather than an empty set). | |||
o *linkIds*: "String[Boolean]|null" (optional) A set of links to | o *linkIds*: "String[Boolean]" (optional) A set of links to more | |||
more information about this participant, for example in vCard | information about this participant, for example in vCard format. | |||
format. The keys in the set MUST be the identifier of a Link | The keys in the set MUST be the identifier of a Link object in the | |||
object in the calendar object's *links* property. The value for | calendar object's *links* property. The value for each key in the | |||
each key in the set MUST be "true". This MUST be omitted if none | set MUST be "true". This MUST be omitted if none (rather than an | |||
(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 | |||
skipping to change at page 28, line 29 ¶ | skipping to change at page 28, line 49 ¶ | |||
* "before-start" | * "before-start" | |||
* "after-start" | * "after-start" | |||
* "before-end" | * "before-end" | |||
* "after-end" | * "after-end" | |||
o *offset*: "Duration" The offset from the start and end/due of the | o *offset*: "Duration" The offset from the start and end/due of the | |||
calendar object to fire the alert. If the calendar object does | calendar object to fire the alert. If the calendar object does | |||
not define a time-zone, the user's default time-zone SHOULD be | not define a time zone, the user's default time zone SHOULD be | |||
used when determining the offset, if known. Otherwise, the time- | used when determining the offset, if known. Otherwise, the time | |||
zone to use is implementation specific. | zone to use is implementation specific. | |||
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). | |||
skipping to change at page 30, line 34 ¶ | skipping to change at page 31, line 9 ¶ | |||
5.1. JSEvent properties | 5.1. JSEvent properties | |||
In addition to the common JSCalendar object properties (Section 4) a | In addition to the common JSCalendar object properties (Section 4) a | |||
JSEvent has the following properties: | JSEvent has the following properties: | |||
5.1.1. start | 5.1.1. start | |||
Type: "LocalDate" e.g. "2015-09-02T00:00:00" | Type: "LocalDate" e.g. "2015-09-02T00:00:00" | |||
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. | 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") | |||
The IANA Time Zone Database [3] name for the time-zone the event is | The IANA Time Zone Database [3] name for the time zone the event is | |||
scheduled in, or "null" for floating time. If omitted, this MUST be | scheduled in, or "null" for floating time. If omitted, this MUST be | |||
presumed to be "null" (i.e. floating time). | presumed to be "null" (i.e. floating time). | |||
5.1.3. duration | 5.1.3. duration | |||
Type: "Duration", e.g. "P2DT3H" (optional, default: "PT0S") | Type: "Duration", e.g. "P2DT3H" (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 depends on its | ([RFC5545]) apply: The duration of a week or a day in hours/minutes/ | |||
position in the calendar. In the case of discontinuities in the time | seconds may vary if it overlaps a period of discontinuity in the | |||
scale, such as the change from standard time to daylight time and | event's time zone, for example a change from standard time to | |||
back, the computation of the exact duration requires the subtraction | daylight-savings time. Leap seconds MUST NOT be considered when | |||
or addition of the change of duration of the discontinuity. Leap | computing an exact duration. When computing an exact duration, the | |||
seconds MUST NOT be considered when computing an exact duration. | greatest order time components MUST be added first, that is, the | |||
When computing an exact duration, the greatest order time components | number of days MUST be added first, followed by the number of hours, | |||
MUST be added first, that is, the number of days MUST be added first, | number of minutes, and number of seconds. Fractional seconds MUST be | |||
followed by the number of hours, number of minutes, and number of | added last. | |||
seconds. Fractional seconds MUST be added last. | ||||
A JSEvent MAY be end in a different time-zone (e.g. a plane flight | A JSEvent MAY involve start and end locations that are in different | |||
crossing time-zones). In this case, the JSEvent MUST specify the end | time zones (e.g. a trans-continental flight). This can be expressed | |||
time-zone in a *location* property value that defines its *rel* to be | using the *rel* and *timeZone* properties of the JSEvent's *location* | |||
"end" and the end time-zone in its *timeZone* property. | objects. | |||
5.1.4. isAllDay | 5.1.4. isAllDay | |||
Type: "Boolean" (optional, default:"false") | Type: "Boolean" (optional, default:"false") | |||
Specifies if the event an all day event, such as a birthday or public | Specifies if the event is an all day event, such as a birthday or | |||
holiday. | public holiday. | |||
If *isAllDay* is true, then the following restrictions apply: | If *isAllDay* 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 *duration* property MUST only include a day component. | o the *duration* property MUST NOT include non-zero time components | |||
(hours, minutes, or seconds). | ||||
Note that all-day events MAY be bound to a specific time-zone, as | Note that all-day events MAY be bound to a specific time zone, as | |||
defined by the *timeZone* property. | defined by the *timeZone* property. | |||
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. | |||
skipping to change at page 32, line 14 ¶ | skipping to change at page 32, line 33 ¶ | |||
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) e.g. "2015-09-02T00:00:00" | |||
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) e.g. "2015-09-02T00:00:00" | |||
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") | |||
The IANA Time Zone Database name for the time-zone the task is | The IANA Time Zone Database name for the time zone the task is | |||
scheduled in, or "null" for floating time. If omitted, this MUST be | scheduled in, or "null" for floating time. If omitted, this MUST be | |||
presumed to be "null" (i.e. floating time). | presumed to be "null" (i.e. floating time). | |||
5.2.4. estimatedDuration | 5.2.4. estimatedDuration | |||
Type: "Duration" (optional), e.g. "P2DT3H" | Type: "Duration" (optional), e.g. "P2DT3H" | |||
Specifies the estimated positive duration of time the task takes to | Specifies the estimated positive duration of time the task takes to | |||
complete. | complete. | |||
skipping to change at page 33, line 14 ¶ | skipping to change at page 33, line 37 ¶ | |||
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 *start* and *due* properties MUST | If *isAllDay* is true, then the *start* and *due* properties MUST | |||
have a time component of "T00:00:00". Note that the | have a time component of "T00:00:00". Note that the | |||
*estimatedDuration* property MAY contain a non-zero time duration. | *estimatedDuration* property MAY contain a non-zero time duration. | |||
All-day tasks MAY be bound to a specific time-zone, as defined by the | All-day tasks MAY be bound to a specific time zone, as defined by the | |||
*timeZone* property. | *timeZone* property. | |||
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 | |||
skipping to change at page 36, line 15 ¶ | skipping to change at page 36, line 23 ¶ | |||
+----------+--------------------------------------------------------+ | +----------+--------------------------------------------------------+ | |||
| Property | iCalendar counterpart | | | Property | iCalendar counterpart | | |||
+----------+--------------------------------------------------------+ | +----------+--------------------------------------------------------+ | |||
| isAllDay | True, if the type of the DTSTART property in iCalendar | | | isAllDay | True, if the type of the DTSTART property in iCalendar | | |||
| | is DATE. When translating from JSCalendar the | | | | is DATE. When translating from JSCalendar the | | |||
| | iCalendar DTSTART property is of DATE value type, if | | | | iCalendar DTSTART property is of DATE value type, if | | |||
| | the *isAllDay* property is set to true and the | | | | the *isAllDay* property is set to true and the | | |||
| | *timeZone* property is null. | | | | *timeZone* property is null. | | |||
| | | | | | | | |||
| start | Corresponds to the DTSTART property in iCalendar. Note | | | start | Corresponds to the DTSTART property in iCalendar. Note | | |||
| | that time-zone information is stored separately in | | | | that time zone information is stored separately in | | |||
| | JSEvent. | | | | JSEvent. | | |||
| | | | | | | | |||
| timeZone | Corresponds to the TZID part of the DTSTART property | | | timeZone | Corresponds to the TZID part of the DTSTART property | | |||
| | in iCalendar. If the event has a different end time- | | | | in iCalendar. If the event has a different end time | | |||
| | zone to start time-zone, this should be added as a | | | | zone to start time zone, this should be added as a | | |||
| | JSCalendar *location* with just a *timeZone* property | | | | JSCalendar *location* with just a *timeZone* property | | |||
| | and "rel="end"". | | | | and "rel="end"". | | |||
| | | | | | | | |||
| duration | Corresponds to the DURATION or DSTART+DTEND properties | | | duration | Corresponds to the DURATION or DSTART+DTEND properties | | |||
| | in iCalendar. | | | | in iCalendar. | | |||
+----------+--------------------------------------------------------+ | +----------+--------------------------------------------------------+ | |||
Table 1: Translation between JSEvent and iCalendar | Table 1: Translation between JSEvent and iCalendar | |||
6.2. JSTask | 6.2. JSTask | |||
skipping to change at page 37, line 19 ¶ | skipping to change at page 37, line 19 ¶ | |||
| | iCalendar is DATE. When translating from | | | | iCalendar is DATE. When translating from | | |||
| | JSCalendar the iCalendar DTSTART property is | | | | JSCalendar the iCalendar DTSTART property is | | |||
| | of DATE value type, if the *isAllDay* | | | | of DATE value type, if the *isAllDay* | | |||
| | property is set to true and the *timeZone* | | | | property is set to true and the *timeZone* | | |||
| | property is null. | | | | property is null. | | |||
| | | | | | | | |||
| due | Corresponds to the DUE and DTSTART+DURATION | | | due | Corresponds to the DUE and DTSTART+DURATION | | |||
| | properties in iCalendar. When mapping | | | | properties in iCalendar. When mapping | | |||
| | iCalendar VTODOs with DTSTART+DURATION, the | | | | iCalendar VTODOs with DTSTART+DURATION, the | | |||
| | due date is the result of adding DURATION to | | | | due date is the result of adding DURATION to | | |||
| | DTSTART in the DTSTART time-zone. | | | | DTSTART in the DTSTART time zone. | | |||
| | | | | | | | |||
| start | Corresponds to the DTSTART property in | | | start | Corresponds to the DTSTART property in | | |||
| | iCalendar. | | | | iCalendar. | | |||
| | | | | | | | |||
| timeZone | Corresponds to the TZID part of the | | | timeZone | Corresponds to the TZID part of the | | |||
| | DTSTART/DUE properties in iCalendar. If the | | | | DTSTART/DUE properties in iCalendar. If the | | |||
| | task has a different end time-zone to start | | | | task has a different end time zone to start | | |||
| | or due time-zone, this should be added as a | | | | or due time zone, this should be added as a | | |||
| | JSCalendar *location* with just a *timeZone* | | | | JSCalendar *location* with just a *timeZone* | | |||
| | property and "rel="end"". | | | | property and "rel="end"". | | |||
| | | | | | | | |||
| estimatedDuration | Corresponds to the ESTIMATED-DURATION | | | estimatedDuration | Corresponds to the ESTIMATED-DURATION | | |||
| | iCalendar property in the RFC draft | | | | iCalendar property in the RFC draft | | |||
| | [draft-apthorp-ical-tasks]. | | | | [draft-apthorp-ical-tasks]. | | |||
| | | | | | | | |||
| statusUpdatedAt | Maps to the COMPLETED iCalendar property. The | | | statusUpdatedAt | Maps to the COMPLETED iCalendar property. The | | |||
| | JSTask status property MUST have value | | | | JSTask status property MUST have value | | |||
| | "completed". | | | | "completed". | | |||
skipping to change at page 45, line 30 ¶ | skipping to change at page 45, line 30 ¶ | |||
calendar user expects to need 1 hour for shopping. | calendar user expects to need 1 hour for shopping. | |||
{ | { | |||
"...": "", | "...": "", | |||
"title": "Buy groceries", | "title": "Buy groceries", | |||
"due": "2018-01-19T18:00:00", | "due": "2018-01-19T18:00:00", | |||
"timeZone": "Europe/Vienna", | "timeZone": "Europe/Vienna", | |||
"estimatedDuration": "PT1H" | "estimatedDuration": "PT1H" | |||
} | } | |||
7.6. Event with end time-zone | 7.6. Event with end time zone | |||
This example illustrates the use of end time-zones by use of an | This example illustrates the use of end time zones by use of an | |||
international flight. The flight starts on April 1, 2018 at 9am in | international flight. The flight starts on April 1, 2018 at 9am in | |||
Berlin local time. The duration of the flight is scheduled at 10 | Berlin local time. The duration of the flight is scheduled at 10 | |||
hours 30 minutes. The time at the flights destination is in the same | hours 30 minutes. The time at the flights destination is in the same | |||
time-zone as Tokyo. Calendar clients could use the end time-zone to | time zone as Tokyo. Calendar clients could use the end time zone to | |||
display the arrival time in Tokyo local time and highlight the time- | display the arrival time in Tokyo local time and highlight the time | |||
zone difference of the flight. The location names can serve as input | zone difference of the flight. The location names can serve as input | |||
for navigation systems. | for navigation systems. | |||
{ | { | |||
"...": "", | "...": "", | |||
"title": "Flight XY51 to Tokyo", | "title": "Flight XY51 to Tokyo", | |||
"start": "2018-04-01T09:00:00", | "start": "2018-04-01T09:00:00", | |||
"timeZone": "Europe/Berlin", | "timeZone": "Europe/Berlin", | |||
"duration": "PT10H30M", | "duration": "PT10H30M", | |||
"locations": { | "locations": { | |||
skipping to change at page 46, line 28 ¶ | skipping to change at page 46, line 28 ¶ | |||
"name": "Narita International Airport (NRT)", | "name": "Narita International Airport (NRT)", | |||
"timeZone": "Asia/Tokyo" | "timeZone": "Asia/Tokyo" | |||
} | } | |||
} | } | |||
} | } | |||
7.7. Floating-time event (with recurrence) | 7.7. Floating-time event (with recurrence) | |||
This example illustrates the use of floating-time. Since January 1, | This example illustrates the use of floating-time. Since January 1, | |||
2018, a calendar user blocks 30 minutes every day to practice Yoga at | 2018, a calendar user blocks 30 minutes every day to practice Yoga at | |||
7am local time, in whatever time-zone the user is located on that | 7am local time, in whatever time zone the user is located on that | |||
date. | date. | |||
{ | { | |||
"...": "", | "...": "", | |||
"title": "Yoga", | "title": "Yoga", | |||
"start": "2018-01-01T07:00:00", | "start": "2018-01-01T07:00:00", | |||
"duration": "PT30M", | "duration": "PT30M", | |||
"recurrenceRule": { | "recurrenceRule": { | |||
"frequency": "daily" | "frequency": "daily" | |||
} | } | |||
skipping to change at page 53, line 12 ¶ | skipping to change at page 53, line 12 ¶ | |||
[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>. | |||
11.3. URIs | 11.3. URIs | |||
[1] https://www.iana.org/assignments/link-relations/link- | [1] https://www.iana.org/assignments/link-relations/link- | |||
relations.xhtml | relations.xhtml | |||
[2] https://www.w3.org/TR/2011/REC-css3-color-20110607/#svg-color | [2] https://www.w3.org/TR/2011/REC-css3-color-20110607/#svg-color | |||
[3] http://www.iana.org/time-zones | [3] http://www.iana.org/time zones | |||
Authors' Addresses | Authors' Addresses | |||
Neil Jenkins | Neil Jenkins | |||
FastMail | FastMail | |||
PO Box 234 | PO Box 234 | |||
Collins St West | Collins St West | |||
Melbourne VIC 8007 | Melbourne VIC 8007 | |||
Australia | Australia | |||
End of changes. 73 change blocks. | ||||
131 lines changed or deleted | 144 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/ |