rfc8984v3.txt | rfc8984.txt | |||
---|---|---|---|---|
Internet Engineering Task Force (IETF) N. Jenkins | Internet Engineering Task Force (IETF) N. Jenkins | |||
Request for Comments: 8984 R. Stepanek | Request for Comments: 8984 R. Stepanek | |||
Category: Standards Track Fastmail | Category: Standards Track Fastmail | |||
ISSN: 2070-1721 June 2021 | ISSN: 2070-1721 July 2021 | |||
JSCalendar: A JSON Representation of Calendar Data | JSCalendar: A JSON Representation of Calendar Data | |||
Abstract | Abstract | |||
This specification defines a data model and JSON representation of | This specification defines a data model and JSON representation of | |||
calendar data that can be used for storage and data exchange in a | calendar data that can be used for storage and data exchange in a | |||
calendaring and scheduling environment. It aims to be an alternative | calendaring and scheduling environment. It aims to be an alternative | |||
and, over time, successor to the widely deployed iCalendar data | and, over time, successor to the widely deployed iCalendar data | |||
format. It also aims to be unambiguous, extendable, and simple to | format. It also aims to be unambiguous, extendable, and simple to | |||
skipping to change at line 741 ¶ | skipping to change at line 741 ¶ | |||
value differs by object type and is defined in Sections 2.1, 2.2, and | value differs by object type and is defined in Sections 2.1, 2.2, and | |||
2.3. | 2.3. | |||
4.1.2. uid | 4.1.2. uid | |||
Type: "String" (mandatory) | Type: "String" (mandatory) | |||
This is a globally unique identifier used to associate objects | This is a globally unique identifier used to associate objects | |||
representing the same event, task, group, or other object across | representing the same event, task, group, or other object across | |||
different systems, calendars, and views. For recurring events and | different systems, calendars, and views. For recurring events and | |||
tasks, the UID is associated with the master object and so is the | tasks, the UID is associated with the base object and therefore is | |||
same for all occurrences; the combination of the UID with a | the same for all occurrences; the combination of the UID with a | |||
"recurrenceId" identifies a particular instance. | "recurrenceId" identifies a particular instance. | |||
The generator of the identifier MUST guarantee that the identifier is | The generator of the identifier MUST guarantee that the identifier is | |||
unique. [RFC4122] describes a range of established algorithms to | unique. [RFC4122] describes a range of established algorithms to | |||
generate universally unique identifiers (UUIDs). UUID version 4, | generate universally unique identifiers (UUIDs). UUID version 4, | |||
described in Section 4.4 of [RFC4122], is RECOMMENDED. | described in Section 4.4 of [RFC4122], is RECOMMENDED. | |||
For compatibility with UIDs [RFC5545], implementations MUST be able | For compatibility with UIDs [RFC5545], implementations MUST be able | |||
to receive and persist values of at least 255 octets for this | to receive and persist values of at least 255 octets for this | |||
property, but they MUST NOT truncate values in the middle of a UTF-8 | property, but they MUST NOT truncate values in the middle of a UTF-8 | |||
skipping to change at line 1041 ¶ | skipping to change at line 1041 ¶ | |||
This is a color clients MAY use when displaying this calendar object. | This is a color clients MAY use when displaying this calendar object. | |||
The value is a color name taken from the set of names defined in | The value is a color name taken from the set of names defined in | |||
Section 4.3 of CSS Color Module Level 3 [COLORS] or an RGB value in | Section 4.3 of CSS Color Module Level 3 [COLORS] or an RGB value in | |||
hexadecimal notation, as defined in Section 4.2.1 of CSS Color Module | hexadecimal notation, as defined in Section 4.2.1 of CSS Color Module | |||
Level 3. | Level 3. | |||
4.3. Recurrence Properties | 4.3. Recurrence Properties | |||
Some events and tasks occur at regular or irregular intervals. | Some events and tasks occur at regular or irregular intervals. | |||
Rather than having to copy the data for every occurrence, there can | Rather than having to copy the data for every occurrence, there can | |||
be a master event with rules to generate recurrences and/or overrides | be a base event with rules to generate recurrences and/or overrides | |||
that add extra dates or exceptions to the rules. | that add extra dates or exceptions to the rules. | |||
The recurrence set is the complete set of instances for an object. | The recurrence set is the complete set of instances for an object. | |||
It is generated by considering the following properties in order, all | It is generated by considering the following properties in order, all | |||
of which are optional: | of which are optional: | |||
1. The "recurrenceRules" property (Section 4.3.3) generates a set of | 1. The "recurrenceRules" property (Section 4.3.3) generates a set of | |||
extra date-times on which the object occurs. | extra date-times on which the object occurs. | |||
2. The "excludedRecurrenceRules" property (Section 4.3.4) generates | 2. The "excludedRecurrenceRules" property (Section 4.3.4) generates | |||
skipping to change at line 1069 ¶ | skipping to change at line 1069 ¶ | |||
4.3.1. recurrenceId | 4.3.1. recurrenceId | |||
Type: "LocalDateTime" (optional) | Type: "LocalDateTime" (optional) | |||
If present, this JSCalendar object represents one occurrence of a | If present, this JSCalendar object represents one occurrence of a | |||
recurring JSCalendar object. If present, the "recurrenceRules" and | recurring JSCalendar object. If present, the "recurrenceRules" and | |||
"recurrenceOverrides" properties MUST NOT be present. | "recurrenceOverrides" properties MUST NOT be present. | |||
The value is a date-time either produced by the "recurrenceRules" of | The value is a date-time either produced by the "recurrenceRules" of | |||
the master event or added as a key to the "recurrenceOverrides" | the base event or added as a key to the "recurrenceOverrides" | |||
property of the master event. | property of the base event. | |||
4.3.2. recurrenceIdTimeZone | 4.3.2. recurrenceIdTimeZone | |||
Type: "TimeZoneId|null" (optional, default: null) | Type: "TimeZoneId|null" (optional, default: null) | |||
Identifies the time zone of the main JSCalendar object, of which this | Identifies the time zone of the main JSCalendar object, of which this | |||
JSCalendar object is a recurrence instance. This property MUST be | JSCalendar object is a recurrence instance. This property MUST be | |||
set if the "recurrenceId" property is set. It MUST NOT be set if the | set if the "recurrenceId" property is set. It MUST NOT be set if the | |||
"recurrenceId" property is not set. | "recurrenceId" property is not set. | |||
skipping to change at line 1708 ¶ | skipping to change at line 1708 ¶ | |||
A Participant object has the following properties: | A Participant object has the following properties: | |||
@type: "String" (mandatory) | @type: "String" (mandatory) | |||
This specifies the type of this object. This MUST be | This specifies the type of this object. This MUST be | |||
"Participant". | "Participant". | |||
name: "String" (optional) | name: "String" (optional) | |||
This is the display name of the participant (e.g., "Joe Bloggs"). | This is the display name of the participant (e.g., "Joe Bloggs"). | |||
email: "String" (optional) | email: "String" (optional) | |||
This is the email address of the participant to contact the | This is the email address to use to contact the participant or, | |||
participant or, for example, match with an address book entry. If | for example, match with an address book entry. If set, the value | |||
set, the value MUST be a valid "addr-spec" value as defined in | MUST be a valid "addr-spec" value as defined in Section 3.4.1 of | |||
Section 3.4.1 of [RFC5322]. | [RFC5322]. | |||
description: "String" (optional) | description: "String" (optional) | |||
This is a plain-text description of this participant. For | This is a plain-text description of this participant. For | |||
example, this may include more information about their role in the | example, this may include more information about their role in the | |||
event or how best to contact them. | event or how best to contact them. | |||
sendTo: "String[String]" (optional) | sendTo: "String[String]" (optional) | |||
This represents methods by which the participant may receive the | This represents methods by which the participant may receive the | |||
invitation and updates to the calendar object. | invitation and updates to the calendar object. | |||
skipping to change at line 2050 ¶ | skipping to change at line 2050 ¶ | |||
acknowledged: "UTCDateTime" (optional) | acknowledged: "UTCDateTime" (optional) | |||
This records when an alert was last acknowledged. This is set | This records when an alert was last acknowledged. This is set | |||
when the user has dismissed the alert; other clients that sync | when the user has dismissed the alert; other clients that sync | |||
this property SHOULD automatically dismiss or suppress duplicate | this property SHOULD automatically dismiss or suppress duplicate | |||
alerts (alerts with the same alert id that triggered on or before | alerts (alerts with the same alert id that triggered on or before | |||
this date-time). | this date-time). | |||
For a recurring calendar object, setting the "acknowledged" | For a recurring calendar object, setting the "acknowledged" | |||
property MUST NOT add a new override to the "recurrenceOverrides" | property MUST NOT add a new override to the "recurrenceOverrides" | |||
property. If the alert is not already overridden, the | property. If the alert is not already overridden, the | |||
"acknowledged" property MUST be set on the alert in the master | "acknowledged" property MUST be set on the alert in the base | |||
event/task. | event/task. | |||
Certain kinds of alert action may not provide feedback as to when | Certain kinds of alert action may not provide feedback as to when | |||
the user sees them, for example, email-based alerts. For those | the user sees them, for example, email-based alerts. For those | |||
kinds of alerts, this property MUST be set immediately when the | kinds of alerts, this property MUST be set immediately when the | |||
alert is triggered and the action is successfully carried out. | alert is triggered and the action is successfully carried out. | |||
relatedTo: "String[Relation]" (optional) | relatedTo: "String[Relation]" (optional) | |||
This relates this alert to other alerts in the same JSCalendar | This relates this alert to other alerts in the same JSCalendar | |||
object. If the user wishes to snooze an alert, the application | object. If the user wishes to snooze an alert, the application | |||
skipping to change at line 2149 ¶ | skipping to change at line 2149 ¶ | |||
of [RFC5545]. | of [RFC5545]. | |||
* At least one other property in the same JSCalendar object MUST | * At least one other property in the same JSCalendar object MUST | |||
reference a time zone using this identifier (i.e., orphaned time | reference a time zone using this identifier (i.e., orphaned time | |||
zones are not allowed). | zones are not allowed). | |||
An identifier need only be unique to this JSCalendar object. It MAY | An identifier need only be unique to this JSCalendar object. It MAY | |||
differ from the "tzId" property value of the TimeZone object it maps | differ from the "tzId" property value of the TimeZone object it maps | |||
to. | to. | |||
A JSCalendar object may be part in a hierarchy of other JSCalendar | A JSCalendar object may be part of a hierarchy of other JSCalendar | |||
objects (say, an Event is an entry in a Group). In this case, the | objects (say, an Event is an entry in a Group). In this case, the | |||
set of time zones is the sum of the time zone definitions of this | set of time zones is the sum of the time zone definitions of this | |||
object and its parent objects. If multiple time zones with the same | object and its parent objects. If multiple time zones with the same | |||
identifier exist, then the definition closest to the calendar object | identifier exist, then the definition closest to the calendar object | |||
in relation to its parents MUST be used. (In context of Event, a | in relation to its parents MUST be used. (In context of Event, a | |||
time zone definition in its "timeZones" property has precedence over | time zone definition in its "timeZones" property has precedence over | |||
a definition of the same id in the Group). Time zone definitions in | a definition of the same id in the Group). Time zone definitions in | |||
any children of the calendar object MUST be ignored. | any children of the calendar object MUST be ignored. | |||
A TimeZone object maps a VTIMEZONE component from iCalendar, and the | A TimeZone object maps a VTIMEZONE component from iCalendar, and the | |||
skipping to change at line 2938 ¶ | skipping to change at line 2938 ¶ | |||
A "reserved" registration reserves a property name without assigning | A "reserved" registration reserves a property name without assigning | |||
semantics to avoid name collisions with future extensions or protocol | semantics to avoid name collisions with future extensions or protocol | |||
use. | use. | |||
An "obsolete" registration denotes a property that is no longer | An "obsolete" registration denotes a property that is no longer | |||
expected to be added by up-to-date systems. A new property has | expected to be added by up-to-date systems. A new property has | |||
probably been defined covering the obsolete property's semantics. | probably been defined covering the obsolete property's semantics. | |||
The JSCalendar property registration procedure is not a formal | The JSCalendar property registration procedure is not a formal | |||
standards process but rather an administrative procedure intended to | standards process but rather an administrative procedure intended to | |||
allow community comment and sanity checking without excessive time | allow community comment and check it is coherent without excessive | |||
delay. It is designed to encourage vendors to document and register | time delay. It is designed to encourage vendors to document and | |||
new properties they add for use cases not covered by the original | register new properties they add for use cases not covered by the | |||
specification, leading to increased interoperability. | original specification, leading to increased interoperability. | |||
8.2.1. Preliminary Community Review | 8.2.1. Preliminary Community Review | |||
Notice of a potential new registration SHOULD be sent to the Calext | Notice of a potential new registration SHOULD be sent to the Calext | |||
mailing list <calsify@ietf.org> for review. This mailing list is | mailing list <calsify@ietf.org> for review. This mailing list is | |||
appropriate to solicit community feedback on a proposed new property. | appropriate to solicit community feedback on a proposed new property. | |||
Property registrations must be marked with their intended use: | Property registrations must be marked with their intended use: | |||
"common", "reserved", or "obsolete". | "common", "reserved", or "obsolete". | |||
End of changes. 8 change blocks. | ||||
16 lines changed or deleted | 16 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |