draft-ietf-calext-jscalendar-05.txt   draft-ietf-calext-jscalendar-06.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: January 3, 2019 July 2, 2018 Expires: March 3, 2019 August 30, 2018
JSCalendar: A JSON representation of calendar data JSCalendar: A JSON representation of calendar data
draft-ietf-calext-jscalendar-05 draft-ietf-calext-jscalendar-06
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 January 3, 2019. This Internet-Draft will expire on March 3, 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 52 skipping to change at page 2, line 52
4.2.8. keywords . . . . . . . . . . . . . . . . . . . . . . 15 4.2.8. keywords . . . . . . . . . . . . . . . . . . . . . . 15
4.2.9. categories . . . . . . . . . . . . . . . . . . . . . 15 4.2.9. categories . . . . . . . . . . . . . . . . . . . . . 15
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 . . . . . . . . . . . . . . . . . . . . . . . 22 4.4.3. privacy . . . . . . . . . . . . . . . . . . . . . . . 23
4.4.4. replyTo . . . . . . . . . . . . . . . . . . . . . . . 23 4.4.4. replyTo . . . . . . . . . . . . . . . . . . . . . . . 24
4.4.5. participants . . . . . . . . . . . . . . . . . . . . 24 4.4.5. participants . . . . . . . . . . . . . . . . . . . . 25
4.5. Alerts properties . . . . . . . . . . . . . . . . . . . . 27 4.5. Alerts properties . . . . . . . . . . . . . . . . . . . . 27
4.5.1. useDefaultAlerts . . . . . . . . . . . . . . . . . . 27 4.5.1. useDefaultAlerts . . . . . . . . . . . . . . . . . . 27
4.5.2. alerts . . . . . . . . . . . . . . . . . . . . . . . 27 4.5.2. alerts . . . . . . . . . . . . . . . . . . . . . . . 27
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 . . . . . . . . . . . . . . . . . . . . . . . . 30
5.1.2. timeZone . . . . . . . . . . . . . . . . . . . . . . 30 5.1.2. timeZone . . . . . . . . . . . . . . . . . . . . . . 30
5.1.3. duration . . . . . . . . . . . . . . . . . . . . . . 30 5.1.3. duration . . . . . . . . . . . . . . . . . . . . . . 30
5.1.4. isAllDay . . . . . . . . . . . . . . . . . . . . . . 31 5.1.4. isAllDay . . . . . . . . . . . . . . . . . . . . . . 31
5.1.5. status . . . . . . . . . . . . . . . . . . . . . . . 31 5.1.5. status . . . . . . . . . . . . . . . . . . . . . . . 31
5.2. JSTask properties . . . . . . . . . . . . . . . . . . . . 31 5.2. JSTask properties . . . . . . . . . . . . . . . . . . . . 31
5.2.1. due . . . . . . . . . . . . . . . . . . . . . . . . . 31 5.2.1. due . . . . . . . . . . . . . . . . . . . . . . . . . 31
5.2.2. start . . . . . . . . . . . . . . . . . . . . . . . . 31 5.2.2. start . . . . . . . . . . . . . . . . . . . . . . . . 32
5.2.3. timeZone . . . . . . . . . . . . . . . . . . . . . . 32 5.2.3. timeZone . . . . . . . . . . . . . . . . . . . . . . 32
5.2.4. estimatedDuration . . . . . . . . . . . . . . . . . . 32 5.2.4. estimatedDuration . . . . . . . . . . . . . . . . . . 32
5.2.5. completed . . . . . . . . . . . . . . . . . . . . . . 32 5.2.5. statusUpdatedAt . . . . . . . . . . . . . . . . . . . 32
5.2.6. isAllDay . . . . . . . . . . . . . . . . . . . . . . 32 5.2.6. isAllDay . . . . . . . . . . . . . . . . . . . . . . 32
5.2.7. progress . . . . . . . . . . . . . . . . . . . . . . 33 5.2.7. progress . . . . . . . . . . . . . . . . . . . . . . 33
5.2.8. status . . . . . . . . . . . . . . . . . . . . . . . 33 5.2.8. status . . . . . . . . . . . . . . . . . . . . . . . 33
5.3. JSGroup properties . . . . . . . . . . . . . . . . . . . 34 5.3. JSGroup properties . . . . . . . . . . . . . . . . . . . 34
5.3.1. entries . . . . . . . . . . . . . . . . . . . . . . . 35 5.3.1. entries . . . . . . . . . . . . . . . . . . . . . . . 34
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 . . . . . . . . . . . . . . . . . . . . . . . . . 35
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
skipping to change at page 12, line 22 skipping to change at page 12, line 22
4.1.8. method 4.1.8. method
Type: "String" (optional) Type: "String" (optional)
The iTIP ([RFC5546]) method, in lower-case. Used for scheduling. The iTIP ([RFC5546]) method, in lower-case. Used for scheduling.
4.2. What and where properties 4.2. What and where properties
4.2.1. title 4.2.1. title
Type: "String" (optional, default:"""") Type: "String" (optional, default:"")
A short summary of the object. A short summary of the object.
4.2.2. description 4.2.2. description
Type: "String" (optional, default:"""") Type: "String" (optional, default:"")
A longer-form text description of the object. The content is A longer-form text description of the object. The content is
formatted according to the *descriptionContentType* property. formatted according to the *descriptionContentType* property.
4.2.3. descriptionContentType 4.2.3. descriptionContentType
Type: "String" (optional, default:"text/plain" Type: "String" (optional, default:"text/plain")
Describes the media type ([RFC6838]) of the contents of the Describes the media type ([RFC6838]) of the contents of the
"description" property. Media types MUST be sub-types of type "description" property. Media types MUST be sub-types of type
"text", and SHOULD be "text/plain" or "text/html" ([MIME]). They MAY "text", and SHOULD be "text/plain" or "text/html" ([MIME]). They MAY
define parameters and the "charset" parameter MUST be "utf-8", if define parameters and the "charset" parameter MUST be "utf-8", if
specified. Descriptions of type "text/html" MAY contain "cid" URLs specified. Descriptions of type "text/html" MAY contain "cid" URLs
([RFC2392]) to reference links in the calendar object by use of the ([RFC2392]) to reference links in the calendar object by use of the
*cid* property of the *Link* object. *cid* property of the *Link* object.
4.2.4. locations 4.2.4. locations
skipping to change at page 13, line 8 skipping to change at page 13, line 8
Type: "String[Location]" (optional) Type: "String[Location]" (optional)
A map of location ids to Location objects, representing locations A map of location ids to Location objects, representing locations
associated with the object. A location id may be any valid [RFC6901] associated with the object. A location id may be any valid [RFC6901]
JSON pointer and need only be unique to this object; a UUID is a JSON pointer and need only be unique to this object; a UUID is a
practical choice. practical choice.
A *Location* object has the following properties. It must define at A *Location* object has the following properties. It must define at
least one other property than *rel*. least one other property than *rel*.
o *name*: "String" (optional, default:"""") The human-readable name o *name*: "String" (optional, default:"") The human-readable name of
of the location. the location.
o *description*: "String" (optional) Human-readable, plain-text o *description*: "String" (optional) Human-readable, plain-text
instructions for accessing this location. This may be an address, instructions for accessing this location. This may be an address,
set of directions, door access code, etc. set of directions, door access code, etc.
o *rel*: "String" (optional) The relation type of this location to o *rel*: "String" (optional) The relation type of this location to
the JSCalendar object. the JSCalendar object.
This MUST be either one of the following values, registered in a This MUST be either one of the following values, registered in a
future RFC, or a vendor-specific value. Any value the client or future RFC, or a vendor-specific value. Any value the client or
skipping to change at page 14, line 5 skipping to change at page 14, line 5
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
the object. A virtual location id may be any valid [RFC6901] JSON the object. A virtual location id may be any valid [RFC6901] JSON
pointer and need only be unique to this object; a UUID is a practical pointer and need only be unique to this object; a UUID is a practical
choice. choice.
A *VirtualLocation* object has the following properties. A *VirtualLocation* object has the following properties.
o *name*: "String" (optional, default:"""") The human-readable name o *name*: "String" (optional, default:"") The human-readable name of
of the virtual location. the virtual location.
o *description*: "String" (optional) Human-readable plain-text o *description*: "String" (optional) Human-readable plain-text
instructions for accessing this location. This may be an address, instructions for accessing this location. This may be an address,
set of directions, door access code, etc. set of directions, door access code, etc.
o *uri*: "String" A URI that represents how to connect to this o *uri*: "String" A URI that represents how to connect to this
virtual location. virtual location.
This may be a telephone number (represented as This may be a telephone number (represented as
"tel:+1-555-555-555") for a teleconference, a web address for "tel:+1-555-555-555") for a teleconference, a web address for
skipping to change at page 20, line 44 skipping to change at page 20, line 44
start date-time. start date-time.
* If frequency is "weekly" and no byDay property: Add a byDay * If frequency is "weekly" and no byDay property: Add a byDay
property with the sole value being the day-of-the-week of the property with the sole value being the day-of-the-week of the
start date-time. start date-time.
* If frequency is "monthly" and no byDay property and no * If frequency is "monthly" and no byDay property and no
byMonthDay property: Add a byMonthDay property with the sole byMonthDay property: Add a byMonthDay property with the sole
value being the day-of-the-month of the start date-time. value being the day-of-the-month of the start date-time.
* If frequency is "yearly" and no byDay, byYearDay or byWeekNo * If frequency is "yearly" and no byYearDay property:
properties:
+ if there is no byMonthDate property: Add a byMonthDay + if there are no byMonth or byWeekNo properties, and either
property with the sole value being the day-of-the-month of there is a byMonthDay property or there is no byDay
the start date-time. property: Add a byMonth property with the sole value being
the month of the start date-time.
+ if there is no byMonth property: Add a byMonth property + if there is no byMonthDay, byWeekNo or byDay properties:
with the sole value being the month of the start date-time. Add a byMonthDay property with the sole value being the
day-of-the-month of the start date-time.
+ if there is a byWeekNo property and no byMonthDay or byDay
properties: Add a byDay property with the sole value being
the day-of-the-week of the start date-time.
4.3.2. recurrenceOverrides 4.3.2. recurrenceOverrides
Type: "LocalDate[PatchObject]" (optional) Type: "LocalDate[PatchObject]" (optional)
A map of the recurrence-ids (the date-time of the start of the A map of the recurrence-ids (the date-time of the start of the
occurrence) to an object of patches to apply to the generated occurrence) to an object of patches to apply to the generated
occurrence object. occurrence object.
If the recurrence-id does not match an expanded start date from a If the recurrence-id does not match an expanded start date from a
skipping to change at page 32, line 20 skipping to change at page 32, line 26
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.
If the *start* and *due* properties are set, the estimated duration 5.2.5. statusUpdatedAt
SHOULD be less than or equal to the time interval between these
properties.
5.2.5. completed
Type: "UTCDate" (optional), e.g. "2016-06-13T12:00:00Z" Type: "UTCDate" (optional), e.g. "2016-06-13T12:00:00Z"
Specifies the date/time the task was completed. Specifies the date/time the task status properties was last updated.
If the task is recurring and has future instances, a client may want If the task is recurring and has future instances, a client may want
to denote a specific task recurrence as completed but leave other to keep track of the last status update timestamp of a specific task
instances as uncompleted. One way to achieve this is by overriding recurrence, but leave other instances unchanged. One way to achieve
the completed property in the task *recurrenceOverrides*. However, this is by overriding the statusUpdatedAt property in the task
this could produce a long list of completion times for regularly *recurrenceOverrides*. However, this could produce a long list of
recurring tasks. An alternative approach is to split the JSTask into timestamps for regularly recurring tasks. An alternative approach is
a current, single instance of JSTask with this instance completion to split the JSTask into a current, single instance of JSTask with
time and a future recurring instance. Also see the definition of the this instance status update time and a future recurring instance.
*relatedTo* on splitting. Also see the definition of the *relatedTo* on splitting.
5.2.6. isAllDay 5.2.6. isAllDay
Type: "Boolean" (optional, default:"false") Type: "Boolean" (optional, default:"false")
Specifies if the task is an all day task. Specifies if the task is an all day task.
If *isAllDay* is true, then the *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.
skipping to change at page 33, line 37 skipping to change at page 33, line 37
* "failed": The participant failed to complete their progress. * "failed": The participant failed to complete their progress.
o *timestamp*: "UTCDate" Describes the last time when the o *timestamp*: "UTCDate" Describes the last time when the
participant progress got updated. participant progress got updated.
5.2.8. status 5.2.8. status
Type: "String" Type: "String"
If omitted, the default scheduling status (Section 4.4) of a JSTask Defines the overall status of this task. If omitted, the default
is defined as follows (in order of evaluation): status (Section 4.4) of a JSTask is defined as follows (in order of
evaluation):
o "needs-action": if the task has no participants, or if at least
one participant of the task has *rsvpResponse* set to "needs-
action" (either explicitly or by default).
o "completed": if all the *ParticipantProgress* status of the task o "completed": if all the *ParticipantProgress* status of the task
participants is "completed". participants is "completed".
o "failed": if at least one *ParticipantProgress* status of the task o "failed": if at least one *ParticipantProgress* status of the task
participants is "failed". participants is "failed".
o "in-process": if at least one *ParticipantProgress* status of the o "in-process": if at least one *ParticipantProgress* status of the
task participants is "in-process". task participants is "in-process".
o "pending": If none of the other criteria match. o "needs-action": If none of the other criteria match.
If set, it MUST be one of: If set, it MUST be one of:
o "needs-action": Indicates the task needs action. o "needs-action": Indicates the task needs action.
o "completed": Indicates the task is completed. If this value is o "completed": Indicates the task is completed.
set, then the timestamp in the *completed* property MUST be set.
o "in-process": Indicates the task is in process. o "in-process": Indicates the task is in process.
o "cancelled": Indicates the task is cancelled. o "cancelled": Indicates the task is cancelled.
o "pending": Indicates the task has been created, but not yet o "pending": Indicates the task has been created and accepted for
started. processing, but not yet started.
o "failed": Indicates the task failed. o "failed": Indicates the task failed.
5.3. JSGroup properties 5.3. JSGroup properties
JSGroup supports the following JSCalendar properties (Section 4): JSGroup supports the following JSCalendar properties (Section 4):
o @type o @type
o uid o uid
skipping to change at page 37, line 35 skipping to change at page 37, line 35
| | 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]. |
| | | | | |
| completed | Maps to the COMPLETED iCalendar property. | | statusUpdatedAt | Maps to the COMPLETED iCalendar property. The |
| | JSTask status property MUST have value |
| | "completed". |
| | | | | |
| progress | Corresponds to the PARTSTAT and COMPLETED | | progress | Corresponds to the PARTSTAT and COMPLETED |
| | properties in iCalendar, including the | | | properties in iCalendar, including the |
| | definitions in the RFC draft | | | definitions in the RFC draft |
| | [draft-apthorp-ical-tasks]. | | | [draft-apthorp-ical-tasks]. |
| | | | | |
| status | Corresponds to the STATUS property in | | status | Corresponds to the STATUS property in |
| | iCalendar, including the definitions in the | | | iCalendar, including the definitions in the |
| | RFC draft [draft-apthorp-ical-tasks]. | | | RFC draft [draft-apthorp-ical-tasks]. |
+-------------------+-----------------------------------------------+ +-------------------+-----------------------------------------------+
skipping to change at page 39, line 30 skipping to change at page 39, line 30
| | properties. When converting from | | | properties. When converting from |
| | iCalendar, one language must be picked | | | iCalendar, one language must be picked |
| | as the main locale for the object, and | | | as the main locale for the object, and |
| | all properties in other languages moved | | | all properties in other languages moved |
| | to the localizations JSEvent property. | | | to the localizations JSEvent property. |
| | | | | |
| localizations | Implementation-specific. | | localizations | Implementation-specific. |
| | | | | |
| locations | See Section 6.5. | | locations | See Section 6.5. |
| | | | | |
| method | Corresponds to the METHOD property in | | method | Corresponds to the METHOD property of |
| | iCalendar. | | | the embedding VCALENDAR in iCalendar. |
| | | | | |
| participants | See Section 6.5. | | participants | See Section 6.5. |
| | | | | |
| priority | Corresponds to the PRIORITY property in | | priority | Corresponds to the PRIORITY property in |
| | iCalendar. | | | iCalendar. |
| | | | | |
| privacy | Corresponds to the CLASS property in | | privacy | Corresponds to the CLASS property in |
| | iCalendar. | | | iCalendar. |
| | | | | |
| prodId | Corresponds to the PRODID property in | | prodId | Corresponds to the PRODID property in |
 End of changes. 24 change blocks. 
51 lines changed or deleted 50 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/