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/