draft-ietf-calext-jscalendar-07.txt   draft-ietf-calext-jscalendar-08.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: March 24, 2019 September 20, 2018 Expires: April 11, 2019 October 8, 2018
JSCalendar: A JSON representation of calendar data JSCalendar: A JSON representation of calendar data
draft-ietf-calext-jscalendar-07 draft-ietf-calext-jscalendar-08
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 March 24, 2019. This Internet-Draft will expire on April 11, 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 31 skipping to change at page 2, line 31
3.2.5. Identifiers . . . . . . . . . . . . . . . . . . . . . 8 3.2.5. Identifiers . . . . . . . . . . . . . . . . . . . . . 8
3.2.6. Normalization and equivalence . . . . . . . . . . . . 8 3.2.6. Normalization and equivalence . . . . . . . . . . . . 8
3.3. Custom property extensions and values . . . . . . . . . . 9 3.3. Custom property extensions and values . . . . . . . . . . 9
4. Common JSCalendar properties . . . . . . . . . . . . . . . . 9 4. Common JSCalendar properties . . . . . . . . . . . . . . . . 9
4.1. Metadata properties . . . . . . . . . . . . . . . . . . . 9 4.1. Metadata properties . . . . . . . . . . . . . . . . . . . 9
4.1.1. @type . . . . . . . . . . . . . . . . . . . . . . . . 9 4.1.1. @type . . . . . . . . . . . . . . . . . . . . . . . . 9
4.1.2. uid . . . . . . . . . . . . . . . . . . . . . . . . . 10 4.1.2. uid . . . . . . . . . . . . . . . . . . . . . . . . . 10
4.1.3. relatedTo . . . . . . . . . . . . . . . . . . . . . . 10 4.1.3. relatedTo . . . . . . . . . . . . . . . . . . . . . . 10
4.1.4. prodId . . . . . . . . . . . . . . . . . . . . . . . 11 4.1.4. prodId . . . . . . . . . . . . . . . . . . . . . . . 11
4.1.5. created . . . . . . . . . . . . . . . . . . . . . . . 11 4.1.5. created . . . . . . . . . . . . . . . . . . . . . . . 11
4.1.6. updated . . . . . . . . . . . . . . . . . . . . . . . 11 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 . . . . . . . . . . . . . . . . . . . . . . 12 4.2.4. locations . . . . . . . . . . . . . . . . . . . . . . 13
4.2.5. virtualLocations . . . . . . . . . . . . . . . . . . 13 4.2.5. virtualLocations . . . . . . . . . . . . . . . . . . 13
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 . . . . . . . . . . . . . . . . . . . . . . 15
4.2.9. categories . . . . . . . . . . . . . . . . . . . . . 15 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 . . . . . . . . . . . . . . . . . . . . 25 4.4.5. participants . . . . . . . . . . . . . . . . . . . . 24
4.5. Alerts properties . . . . . . . . . . . . . . . . . . . . 27 4.5. Alerts properties . . . . . . . . . . . . . . . . . . . . 27
4.5.1. useDefaultAlerts . . . . . . . . . . . . . . . . . . 27 4.5.1. useDefaultAlerts . . . . . . . . . . . . . . . . . . 27
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 . . . . . . . . . . . . . . . . . . . . . . . . 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 . . . . . . . . . . . . . . . . . . . . 32
5.2.1. due . . . . . . . . . . . . . . . . . . . . . . . . . 31 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 . . . . . . . . . . . . . . . . . . 32
5.2.5. statusUpdatedAt . . . . . . . . . . . . . . . . . . . 32 5.2.5. statusUpdatedAt . . . . . . . . . . . . . . . . . . . 32
5.2.6. isAllDay . . . . . . . . . . . . . . . . . . . . . . 32 5.2.6. isAllDay . . . . . . . . . . . . . . . . . . . . . . 33
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 . . . . . . . . . . . . . . . . . . . . . . . 34 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 . . . . . . . . . . . . . . . . . . . . . . . . . 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 10, line 40 skipping to change at page 10, line 40
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[]" Describes how the linked object is related o *relation*: "String[Boolean]" Describes how the linked object is
to this object. related to this object as a set of relation types.
Strings in the array MUST be one of the following values, defined Keys in the set MUST be one of the following values, defined in a
in a future specification or a vendor-specific value. There MUST future specification or a vendor-specific value:
NOT be duplicate strings in the array.
* "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.
* "child": The linked object is a subpart of this object. * "child": The linked object is a subpart of this object.
* "parent": This object is part of the overall linked object. * "parent": This object is part of the overall linked object.
The value for each key in the set MUST be "true".
If an object is split to make a "this and future" change to a If an object is split to make a "this and future" change to a
recurrence, the original object MUST be truncated to end at the recurrence, the original object MUST be truncated to end at the
previous occurrence before this split, and a new object created to previous occurrence before this split, and a new object created to
represent all the objects after the split. A "relation=["next"]" represent all the objects after the split. A "next" relation MUST be
relatedTo property MUST be set on the original object with the uid of set on the original object's relatedTo property for the UID of the
the new object. A "relation=["first"]" relatedTo property with the new object. A "first" relation for the UID of the first object in
UID of the first object in the series MUST be set on the new object. the series MUST be set on the new object. Clients can then follow
Clients can then follow these UIDs to get the complete set of objects these UIDs to get the complete set of objects if the user wishes to
if the user wishes to modify them all at once. modify them all at once.
4.1.4. prodId 4.1.4. prodId
Type: "String" (optional) Type: "String" (optional)
The identifier for the product that created the JSCalendar object. The identifier for the product that created the JSCalendar object.
The vendor of the implementation SHOULD ensure that this is a The vendor of the implementation SHOULD ensure that this is a
globally unique identifier, using some technique such as an FPI globally unique identifier, using some technique such as an FPI
value, as defined in [ISO.9070.1991]. It MUST only use characters of value, as defined in [ISO.9070.1991]. It MUST only use characters of
skipping to change at page 13, line 29 skipping to change at page 13, line 37
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.
If omitted, the *timeZone* from the JSCalendar object MUST be
presumed when a time-zone is needed in relation to 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[]" (optional) A list of ids for links to
alternate representations of this location. alternate representations of this location.
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
skipping to change at page 19, line 49 skipping to change at page 19, line 52
* *byHour*: the date-time has the given hour value. * *byHour*: the date-time has the given hour value.
* *byMinute*: the date-time has the given minute value. * *byMinute*: the date-time has the given minute value.
* *bySecond*: the date-time has the given second value. * *bySecond*: the date-time has the given second value.
3. If a bySetPosition property is included, this is now applied to 3. If a bySetPosition property is included, this is now applied to
the ordered list of remaining dates (this property specifies the the ordered list of remaining dates (this property specifies the
indexes of date-times to keep; all others should be eliminated. indexes of date-times to keep; all others should be eliminated.
Negative numbers are indexes from the end of the list, with -1 Negative numbers are indexes from the end of the list, with -1
being the list item). being the last item).
4. Any date-times before the start date of the event are eliminated 4. Any date-times before the start date of the event are eliminated
(see below for why this might be needed). (see below for why this might be needed).
5. If further dates are required (we have not reached the until 5. If further dates are required (we have not reached the until
date, or count limit) skip the next (interval - 1) sets of date, or count limit) skip the next (interval - 1) sets of
candidates, then continue from step 1. candidates, then continue from step 1.
When determining the set of occurrence dates for an event or task, When determining the set of occurrence dates for an event or task,
the following extra rules must be applied: the following extra rules must be applied:
skipping to change at page 24, line 16 skipping to change at page 24, line 16
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. The value is a URI to use
that method. Future methods may be defined in future specifications; that method. Future methods may be defined in future specifications;
a calendar client MUST ignore any method it does not understand. a calendar client MUST ignore any method it does not understand, but
MUST preserve the method key and URI.
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 "other": The user may submit the RSVP using this URI. The URI o "other": The organizer is identified by this URI but the method
MUST be a valid URI Template ([RFC6570]) in level 2 format. The how to submit the RSVP is undefined.
template MAY contain variables that MUST be expanded from the
JSCalendar object as defined in table Table 1. Calendar clients
SHOULD be prepared to handle authentication requests from the
respective URI and for the participant email, but this
specification does not mandate any specific mechanism.
+---------------+---------------------------------------------------+
| Variable | Expand to |
+---------------+---------------------------------------------------+
| participantId | The participant id of the replying *Participant* |
| | object. |
| | |
| uid | The *uid* property value of the JSCalendar |
| | object. |
| | |
| sequence | The *sequence* property value of the JSCalendar |
| | object. |
| | |
| recurrenceId | The recurrence-id when replying for a single |
| | occurrence of a recurring JSCalendar object. The |
| | LocalDate-typed value is the recurrence-id of a |
| | non-overridden recurrence, or the key of a |
| | recurrenceOverride of this JSCalendar object. |
+---------------+---------------------------------------------------+
Table 1: replyTo URI Template variables
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 be a participation in the calendar object. A participant id MUST unique
valid [RFC3986] URI and MUST be unique to this calendar object; a to this calendar object; a UUID or the base-64 encoded email address
"mailto:" URI with the email address of the participant is a good of the participant is a good choice.
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" The display name of the participant (e.g. "Joe
Bloggs"). 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
participant may receive the invitation and updates to the calendar
object.
The keys in the property value are the available methods. The
value is a URI to use that method. Future methods may be defined
in future specifications; a calendar client MUST ignore any method
it does not understand, but MUST preserve the method key and URI.
The following methods are defined:
* "imip": The participant accepts an iMIP [RFC6047] request at
this email address. The value MUST be a "mailto:" URI. It MAY
be different from the value of the participant's *email*
property.
* "other": The participant is identified by this URI but the
method how to submit the invitation or update is undefined.
o *kind*: "String" (optional) What kind of entity this participant o *kind*: "String" (optional) What kind of entity this participant
is, if known. is, if known.
This MUST be either one of the following values, registered in a This MUST be either one of the following values, registered in a
future RFC, or a vendor-specific value. Any value the client or future RFC, or a vendor-specific value. Any value the client or
server doesn't understand should be treated the same as if this server doesn't understand should be treated the same as if this
property is omitted. property is omitted.
* "individual": a single person * "individual": a single person
* "group": a collection of people invited as a whole * "group": a collection of people invited as a whole
* "resource": a non-human resource, e.g. a projector * "resource": a non-human resource, e.g. a projector
* "location": a physical location involved in the calendar object * "location": a physical location involved in the calendar object
that needs to be scheduled, e.g. a conference room. that needs to be scheduled, e.g. a conference room.
o *roles*: "String[]" A list of roles that this participant o *roles*: "String[Boolean]" A set of roles that this participant
fulfills. fulfills.
At least one value MUST be specified for the participant. This At least one role MUST be specified for the participant. The keys
MUST be either one of the following values, registered in a future in the set MUST be either one of the following values, registered
RFC, or a vendor-specific value. Any value the client or server in a future RFC, or a vendor-specific value:
doesn't understand should be preserved but ignored.
* "owner": The participant is an owner of the object. * "owner": The participant is an owner of the object.
* "attendee": The participant is an attendee of the calendar * "attendee": The participant is an attendee of the calendar
object. object.
* "chair": The participant is in charge of the calendar object * "chair": The participant is in charge of the calendar object
when it occurs. when it occurs.
The value for each key in the set MUST be "true". Roles that are
unknown to the implementation MUST be preserved and MAY be
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 *rsvpResponse*: "String"(optional, default:"needs-action") The o *participationStatus*: "String"(optional, default:"needs-action")
RSVP response, 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 *participation*: "String"(optional, default:"required") The o *attendance*: "String"(optional, default:"required") The required
required participation 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".
* "non-participant": Indicates a participant who is copied for * "none": Indicates a participant who is copied for information
information purposes only. purposes only.
* "optional": Indicates a participant whose participation is * "optional": Indicates a participant whose attendance is
optional. optional.
* "required": Indicates a participant whose participation is * "required": Indicates a participant whose attendance is
required. required.
o *rsvpWanted*: "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
skipping to change at page 27, line 20 skipping to change at page 27, line 15
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[]" (optional) A list of participant ids of o *delegatedTo*: "String[Boolean]|null" (optional) A set of
participants that this participant has delegated their participant ids that this participant has delegated their
participation to. This MUST be omitted if none (rather than an participation to. Each key in the set MUST be the identifier of a
empty array). 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[]" (optional) A list of participant ids o *delegatedFrom*: "String[Boolean]|null" (optional) A set of
that this participant is acting as a delegate for. This MUST be participant ids that this participant is acting as a delegate for.
omitted if none (rather than an empty array). 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[]" (optional) A list of group participants o *memberOf*: "String[Boolean]|null" (optional) A set of group
that were invited to this calendar object, which caused this participants that were invited to this calendar object, which
participant to be invited due to their membership of the group(s). caused this participant to be invited due to their membership of
This MUST be omitted if none (rather than an empty array). 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".
This MUST be omitted if none (rather than an empty set).
o *linkIds*: "String[]" (optional) Links to more information about o *linkIds*: "String[Boolean]|null" (optional) A set of links to
this participant, for example in vCard format. more information about this participant, for example in vCard
format. The keys in the set MUST be the identifier of a Link
object in the calendar object's *links* property. The value for
each key in the set MUST be "true". This MUST be omitted if none
(rather than an 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 30, line 48 skipping to change at page 30, line 48
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: "P0D") Type: "Duration", e.g. "P2DT3H" (optional, default: "PT0S")
The zero or positive duration of the event in absolute time (i.e. in The zero or positive duration of the event in the event's start time-
UTC time; ignoring DST shifts). To get the end date in the event zone. The same rules as for the iCalendar DURATION value type
time-zone, convert start into UTC, then add the duration, then ([RFC5545]) apply: The duration of a week or a day depends on its
convert the result into the appropriate time-zone. position in the calendar. In the case of discontinuities in the time
scale, such as the change from standard time to daylight time and
back, the computation of the exact duration requires the subtraction
or addition of the change of duration of the discontinuity. Leap
seconds MUST NOT be considered when computing an exact duration.
When computing an exact duration, the greatest order time components
MUST be added first, that is, the number of days MUST be added first,
followed by the number of hours, number of minutes, and number of
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 be end in a different time-zone (e.g. a plane flight
crossing time-zones). In this case, the JSEvent MUST specify the end crossing time-zones). In this case, the JSEvent MUST specify the end
time-zone in a *location* property value that defines its *rel* to be time-zone in a *location* property value that defines its *rel* to be
"end" and the end time-zone in its *timeZone* property. "end" and the end time-zone in its *timeZone* property.
5.1.4. isAllDay 5.1.4. isAllDay
Type: "Boolean" (optional, default:"false") Type: "Boolean" (optional, default:"false")
skipping to change at page 33, line 13 skipping to change at page 33, line 25
*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
set if the *rsvpResponse* of this participant is any other value set if the *participationStatus* of this participant is any other
but "accepted". value but "accepted".
A *ParticipantProgress* object has the following properties: A *ParticipantProgress* object has the following properties:
o *status*: "String" Describes the completion status of the o *status*: "String" Describes the completion status of the
participant's progress. participant's progress.
The value MUST be at most one of the following values, registered The value MUST be at most one of the following values, registered
in a future RFC, or a vendor-specific value: in a future RFC, or a vendor-specific value:
* "completed": The participant completed their task. * "completed": The participant completed their task.
skipping to change at page 35, line 50 skipping to change at page 36, line 28
| 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 2: Translation between JSEvent and iCalendar Table 1: Translation between JSEvent and iCalendar
6.2. JSTask 6.2. JSTask
The iCalendar counterpart to *JSTask* is the VTODO component type The iCalendar counterpart to *JSTask* is the VTODO component type
[RFC5545]. A VTODO component that is a direct child of a VCALENDAR [RFC5545]. A VTODO component that is a direct child of a VCALENDAR
component is equivalent to a standalone JSTask. A VTODO component component is equivalent to a standalone JSTask. A VTODO component
*within* a master VTODO maps to the entries of the JSTask *within* a master VTODO maps to the entries of the JSTask
*recurrenceOverrides* property. *recurrenceOverrides* property.
+-------------------+-----------------------------------------------+ +-------------------+-----------------------------------------------+
skipping to change at page 37, line 49 skipping to change at page 37, line 49
| 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]. |
+-------------------+-----------------------------------------------+ +-------------------+-----------------------------------------------+
Table 3: Translation between JSTask and iCalendar Table 2: Translation between JSTask and iCalendar
6.3. JSGroup 6.3. JSGroup
A JSGroup converts to a iCalendar VCALENDAR containing VEVENT or A JSGroup converts to a iCalendar VCALENDAR containing VEVENT or
VTODO components. VTODO components.
+----------+--------------------------------------------------------+ +----------+--------------------------------------------------------+
| Property | iCalendar counterpart | | Property | iCalendar counterpart |
+----------+--------------------------------------------------------+ +----------+--------------------------------------------------------+
| entries | The VEVENT and VTODO components within a top-level | | entries | The VEVENT and VTODO components within a top-level |
| | VCALENDAR component. | | | VCALENDAR component. |
| | | | | |
| source | Corresponds to the SOURCE property in iCalendar. | | source | Corresponds to the SOURCE property in iCalendar. |
+----------+--------------------------------------------------------+ +----------+--------------------------------------------------------+
Table 4: Translation between JSGroup and iCalendar Table 3: Translation between JSGroup and iCalendar
6.4. Common properties 6.4. Common properties
+------------------------+------------------------------------------+ +------------------------+------------------------------------------+
| Property | iCalendar counterpart | | Property | iCalendar counterpart |
+------------------------+------------------------------------------+ +------------------------+------------------------------------------+
| alerts | An *Alert* corresponds to the VALARM | | alerts | An *Alert* corresponds to the VALARM |
| | component in iCalendar, where the | | | component in iCalendar, where the |
| | *action* is determined by the iCalendar | | | *action* is determined by the iCalendar |
| | ACTION property value (e.g., both | | | ACTION property value (e.g., both |
skipping to change at page 40, line 9 skipping to change at page 40, line 9
| | instances with a recurrence-id. | | | instances with a recurrence-id. |
| | | | | |
| recurrenceRule | Corresponds to the RRULE property in | | recurrenceRule | Corresponds to the RRULE property in |
| | iCalendar. See the property definition | | | iCalendar. See the property definition |
| | at section Section 4.3.1 how to map a | | | at section Section 4.3.1 how to map a |
| | RRULE value. | | | RRULE value. |
| | | | | |
| relatedTo | Corresponds to the RELATED-TO property | | relatedTo | Corresponds to the RELATED-TO property |
| | in iCalendar. | | | in iCalendar. |
| | | | | |
| replyTo | An iCalendar ORGANIZER with one of the | | replyTo | An iCalendar ORGANIZER with a mailto: |
| | mapped URIs as value. If URIs are | | | URI mapped to the "imip" method, or any |
| | defined for both the "imip" and "other" | | | other URI mapped to the "other" method. |
| | type, it is recommended to map the | | | Mapping multiple methods is |
| | "imip" value to the calendar address | | | implementation-specific. |
| | value of the ORGANIZER. |
| | | | | |
| sequence | Corresponds to the SEQUENCE property in | | sequence | Corresponds to the SEQUENCE property in |
| | iCalendar. | | | iCalendar. |
| | | | | |
| status | Corresponds to the STATUS property in | | status | Corresponds to the STATUS property in |
| | iCalendar (converted to lower-case). | | | iCalendar (converted to lower-case). |
| | | | | |
| title | Corresponds to the SUMMARY property in | | title | Corresponds to the SUMMARY property in |
| | iCalendar. | | | iCalendar. |
| | | | | |
| uid | Corresponds to the UID property in | | uid | Corresponds to the UID property in |
| | iCalendar. | | | iCalendar. |
| | | | | |
| updated | Corresponds to the DTSTAMP and LAST- | | updated | Corresponds to the DTSTAMP and LAST- |
| | MODIFIED properties in iCalendar. (These | | | MODIFIED properties in iCalendar. (These |
| | are only different in the iTIP case, and | | | are only different in the iTIP case, and |
| | the difference is not actually useful.) | | | the difference is not actually useful.) |
+------------------------+------------------------------------------+ +------------------------+------------------------------------------+
Table 5: Translation between JSCalendar and iCalendar Table 4: Translation between JSCalendar and iCalendar
6.5. Locations and participants 6.5. Locations and participants
Both JSCalendar participants and locations have counterparts in Both JSCalendar participants and locations have counterparts in
iCalendar but provide richer representation. iCalendar but provide richer representation.
The following table outlines translation of JSCalendar participants. The following table outlines translation of JSCalendar participants.
Where iCalendar has distinct properties for ORGANIZER and ATTENDEE, Where iCalendar has distinct properties for ORGANIZER and ATTENDEE,
these are merged in JSCalendar into the Participant object type. these are merged in JSCalendar into the Participant object type.
+---------------+---------------------------------------------------+ +---------------------+---------------------------------------------+
| Property | iCalendar counterpart | | Property | iCalendar counterpart |
+---------------+---------------------------------------------------+ +---------------------+---------------------------------------------+
| delegatedFrom | the DELEGATED-FROM parameter | | delegatedFrom | the DELEGATED-FROM parameter |
| | | | | |
| delegatedTo | the DELEGATED-TO parameter | | delegatedTo | the DELEGATED-TO parameter |
| | | | | |
| email | the value of the ORGANIZER or ATTENDEE property | | expectReply | the RSVP parameter |
| | | | | |
| kind | the CUTYPE parameter | | email | The value of the EMAIL parameter of the |
| | | | | ORGANIZER or ATTENDEE property, if defined. |
| linkIds | Implementation-specific. | | | Otherwise the property value, if it is a |
| | | | | mailto: URI. |
| locationId | Implementation-specific. When mapping from | | | |
| | iCalendar to JSCalendar this may be the | | sendTo | An iCalendar ATTENDEE with a mailto: URI |
| | JSCalendar identifier of a CONFERENCE property | | | mapped to the "imip" method, or any other |
| | that has the MODERATOR feature defined in its | | | URI mapped to the "other" method. Mapping |
| | FEATURE parameter values. If multiple such | | | multiple methods is implementation- |
| | CONFERENCE properties are defined in iCalendar, | | | specific. |
| | then the one with the most interactive features | | | |
| | is chosen. | | kind | the CUTYPE parameter |
| | | | | |
| memberOf | the MEMBER parameter | | linkIds | Implementation-specific. |
| | | | | |
| name | the CN parameter | | locationId | Implementation-specific. When mapping from |
| | | | | iCalendar to JSCalendar this may be the |
| participation | Maps to the standard iCalendar ROLE parameter | | | JSCalendar identifier of a CONFERENCE |
| | values REQ-PARTICIPANT, OPT-PARTICIPANT and NON- | | | property that has the MODERATOR feature |
| | PARTICIPANT. | | | defined in its FEATURE parameter values. If |
| | | | | multiple such CONFERENCE properties are |
| roles | The "chair" role maps to the standard iCalendar | | | defined in iCalendar, then the one with the |
| | ROLE parameter value "chair", with an implicit | | | most interactive features is chosen. |
| | participant of value "required". The mapping of | | | |
| | non-required chairs and other roles is | | memberOf | the MEMBER parameter |
| | implementation-specific, but using "x-name" | | | |
| | parameter values is recommended. | | name | the CN parameter |
| | | | | |
| rsvpResponse | the PARTSTAT parameter | | attendance | Maps to the standard iCalendar ROLE |
| | | | | parameter values REQ-PARTICIPANT, OPT- |
| the | scheduleSequence | | | PARTICIPANT and NON-PARTICIPANT. |
| DELEGATED-TO | | | | |
| parameter | | | roles | The "chair" role maps to the standard |
| | | | | iCalendar ROLE parameter value "chair", |
| the SEQUENCE | scheduleUpdated | | | with an implicit participant of value |
| property of | | | | "required". The mapping of non-required |
| the | | | | chairs and other roles is implementation- |
| participant's | | | | specific, but using "x-name" parameter |
| latest iMIP | | | | values is recommended. |
| message | | | | |
| | | | participationStatus | the PARTSTAT parameter |
| the DTSTAMP | | | |
| property of | | scheduleSequence | the SEQUENCE property of the participant's |
| the | | | latest iMIP message |
| participant's | | | |
| latest iMIP | | scheduleUpdated | the DTSTAMP property of the participant's |
| message | | | latest iMIP message |
+---------------+---------------------------------------------------+ +---------------------+---------------------------------------------+
Table 6: Translation of Participant between JSCalendar and iCalendar Table 5: Translation of Participant between JSCalendar and iCalendar
The iCalendar counterpart for JSCalendar Location objects is the The iCalendar counterpart for JSCalendar Location objects is the
iCalendar [RFC5545] LOCATION property, or implementation-specific. iCalendar [RFC5545] LOCATION property, or implementation-specific.
+-------------+-----------------------------------------------------+ +-------------+-----------------------------------------------------+
| Property | iCalendar counterpart | | Property | iCalendar counterpart |
+-------------+-----------------------------------------------------+ +-------------+-----------------------------------------------------+
| name | Corresponds to the LOCATION property value. | | name | Corresponds to the LOCATION property value. |
| | | | | |
| description | Implementation-specific. | | description | Implementation-specific. |
skipping to change at page 42, line 31 skipping to change at page 42, line 30
| timeZone | Implementation-specific. | | timeZone | Implementation-specific. |
| | | | | |
| coordinates | Implementation-specific. Consider using a GEO | | coordinates | Implementation-specific. Consider using a GEO |
| | iCalendar property, along with one LOCATION. | | | iCalendar property, along with one LOCATION. |
| | | | | |
| uri | Corresponds to the LOCATION ALTREP parameter. | | uri | Corresponds to the LOCATION ALTREP parameter. |
| | | | | |
| linkIds | Implementation-specific. | | linkIds | Implementation-specific. |
+-------------+-----------------------------------------------------+ +-------------+-----------------------------------------------------+
Table 7: Translation of Location between JSCalendar and iCalendar Table 6: Translation of Location between JSCalendar and iCalendar
The iCalendar counterpart for JSCalendar VirtualLocation objects is The iCalendar counterpart for JSCalendar VirtualLocation objects is
the iCalendar [RFC7986] CONFERENCE property, or implementation- the iCalendar [RFC7986] CONFERENCE property, or implementation-
specific. specific.
+--------------+--------------------------------------------------+ +--------------+--------------------------------------------------+
| Property | iCalendar counterpart | | Property | iCalendar counterpart |
+--------------+--------------------------------------------------+ +--------------+--------------------------------------------------+
| name | Corresponds to the CONFERENCE LABEL parameter. | | name | Corresponds to the CONFERENCE LABEL parameter. |
| | | | | |
| description | Implementation-specific. | | description | Implementation-specific. |
| | | | | |
| uri | Corresponds to the CONFERENCE property value. | | uri | Corresponds to the CONFERENCE property value. |
+--------------+--------------------------------------------------+ +--------------+--------------------------------------------------+
Table 8: Translation of VirtualLocation between JSCalendar and Table 7: Translation of VirtualLocation between JSCalendar and
iCalendar iCalendar
6.6. Unknown properties 6.6. Unknown properties
Both JSCalendar and iCalendar calendar objects may contain properties Both JSCalendar and iCalendar calendar objects may contain properties
that are not expressible in the other format. This specification that are not expressible in the other format. This specification
does not mandate how to preserve these properties. Instead, it does not mandate how to preserve these properties. Instead, it
leaves negotiation on how to treat unknown properties to client and leaves negotiation on how to treat unknown properties to client and
server implementations and their protocol used to exchange calendar server implementations and their protocol used to exchange calendar
objects. objects.
skipping to change at page 49, line 29 skipping to change at page 49, line 29
"recurrenceRule": { "recurrenceRule": {
"frequency": "weekly" "frequency": "weekly"
}, },
"replyTo": { "replyTo": {
"imip": "zoe@foobar.example.com" "imip": "zoe@foobar.example.com"
}, },
"participants": { "participants": {
"tom@foobar.example.com": { "tom@foobar.example.com": {
"name": "Tom Tool", "name": "Tom Tool",
"email": "tom@foobar.example.com", "email": "tom@foobar.example.com",
"rsvpResponse": "accepted", "participationStatus": "accepted",
"roles": [ "roles": [
"attendee" "attendee"
] ]
}, },
"zoe@foobar.example.com": { "zoe@foobar.example.com": {
"name": "Zoe Zelda", "name": "Zoe Zelda",
"email": "zoe@foobar.example.com", "email": "zoe@foobar.example.com",
"rsvpResponse": "accepted", "participationStatus": "accepted",
"roles": [ "roles": [
"owner", "owner",
"chair" "chair"
] ]
}, },
"...": "" "...": ""
}, },
"recurrenceOverrides": { "recurrenceOverrides": {
"2018-03-08T09:00:00": { "2018-03-08T09:00:00": {
"participants/tom@foobar.example.com/rsvpResponse": "declined" "participants/tom@foobar.example.com/participationStatus":
"declined"
} }
} }
} }
8. Security Considerations 8. Security Considerations
The use of JSON as a format does have its own inherent security risks The use of JSON as a format does have its own inherent security risks
as discussed in Section 12 of [RFC8259]. Even though JSON is as discussed in Section 12 of [RFC8259]. Even though JSON is
considered a safe subset of JavaScript, it should be kept in mind considered a safe subset of JavaScript, it should be kept in mind
that a flaw in the parser processing JSON could still impose a that a flaw in the parser processing JSON could still impose a
skipping to change at page 51, line 48 skipping to change at page 51, line 48
[RFC5870] Mayrhofer, A. and C. Spanring, "A Uniform Resource [RFC5870] Mayrhofer, A. and C. Spanring, "A Uniform Resource
Identifier for Geographic Locations ('geo' URI)", Identifier for Geographic Locations ('geo' URI)",
RFC 5870, DOI 10.17487/RFC5870, June 2010, RFC 5870, DOI 10.17487/RFC5870, June 2010,
<https://www.rfc-editor.org/info/rfc5870>. <https://www.rfc-editor.org/info/rfc5870>.
[RFC6047] Melnikov, A., Ed., "iCalendar Message-Based [RFC6047] Melnikov, A., Ed., "iCalendar Message-Based
Interoperability Protocol (iMIP)", RFC 6047, Interoperability Protocol (iMIP)", RFC 6047,
DOI 10.17487/RFC6047, December 2010, DOI 10.17487/RFC6047, December 2010,
<https://www.rfc-editor.org/info/rfc6047>. <https://www.rfc-editor.org/info/rfc6047>.
[RFC6570] Gregorio, J., Fielding, R., Hadley, M., Nottingham, M.,
and D. Orchard, "URI Template", RFC 6570,
DOI 10.17487/RFC6570, March 2012,
<https://www.rfc-editor.org/info/rfc6570>.
[RFC6838] Freed, N., Klensin, J., and T. Hansen, "Media Type [RFC6838] Freed, N., Klensin, J., and T. Hansen, "Media Type
Specifications and Registration Procedures", BCP 13, Specifications and Registration Procedures", BCP 13,
RFC 6838, DOI 10.17487/RFC6838, January 2013, RFC 6838, DOI 10.17487/RFC6838, January 2013,
<https://www.rfc-editor.org/info/rfc6838>. <https://www.rfc-editor.org/info/rfc6838>.
[RFC6901] Bryan, P., Ed., Zyp, K., and M. Nottingham, Ed., [RFC6901] Bryan, P., Ed., Zyp, K., and M. Nottingham, Ed.,
"JavaScript Object Notation (JSON) Pointer", RFC 6901, "JavaScript Object Notation (JSON) Pointer", RFC 6901,
DOI 10.17487/RFC6901, April 2013, DOI 10.17487/RFC6901, April 2013,
<https://www.rfc-editor.org/info/rfc6901>. <https://www.rfc-editor.org/info/rfc6901>.
 End of changes. 50 change blocks. 
172 lines changed or deleted 178 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/