diff options
Diffstat (limited to 'vendor/sabre/dav/docs/caldav-notifications.txt')
-rw-r--r-- | vendor/sabre/dav/docs/caldav-notifications.txt | 1568 |
1 files changed, 0 insertions, 1568 deletions
diff --git a/vendor/sabre/dav/docs/caldav-notifications.txt b/vendor/sabre/dav/docs/caldav-notifications.txt deleted file mode 100644 index 75c2e5e07..000000000 --- a/vendor/sabre/dav/docs/caldav-notifications.txt +++ /dev/null @@ -1,1568 +0,0 @@ - - - -Calendar Server Extension C. Daboo - Apple Inc. - March 19, 2012 - - - CalDAV: Calendar User Notifications - -Abstract - - This specification defines an extension to CalDAV that allows the - server to provide notifications to calendar users. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Daboo [Page 1] - - CalDAV User Notifications March 2012 - - -Table of Contents - - 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3 - 2. Open Issues . . . . . . . . . . . . . . . . . . . . . . . . . 3 - 3. Conventions Used in This Document . . . . . . . . . . . . . . 3 - 4. Notifications . . . . . . . . . . . . . . . . . . . . . . . . 3 - 4.1. Additional Principal Properties . . . . . . . . . . . . . 4 - 4.1.1. CS:notification-URL Property . . . . . . . . . . . . . 5 - 4.2. Properties on Notification Resources . . . . . . . . . . . 5 - 4.2.1. CS:notificationtype Property . . . . . . . . . . . . . 5 - 4.3. XML Element Definitions . . . . . . . . . . . . . . . . . 6 - 4.3.1. CS:notifications . . . . . . . . . . . . . . . . . . . 6 - 4.3.2. CS:notification . . . . . . . . . . . . . . . . . . . 6 - 4.3.3. CS:dtstamp . . . . . . . . . . . . . . . . . . . . . . 7 - 5. Notification Definitions . . . . . . . . . . . . . . . . . . . 7 - 5.1. System Status Notification . . . . . . . . . . . . . . . . 7 - 5.1.1. CS:systemstatus Element Definition . . . . . . . . . . 8 - 5.2. Quota Notification . . . . . . . . . . . . . . . . . . . . 8 - 5.2.1. CS:quotastatus Element Definition . . . . . . . . . . 9 - 5.3. Resource Changes Notification . . . . . . . . . . . . . . 10 - 5.3.1. CS:resource-change Element Definition . . . . . . . . 11 - 5.3.2. CS:calendar-changes Element Definition . . . . . . . . 15 - 5.3.2.1. Handling Recurrences in CS:calendar-changes . . . 17 - 5.3.3. CS:deleted-details Element Definition . . . . . . . . 18 - 5.3.4. CS:notify-changes Property . . . . . . . . . . . . . . 20 - 6. Security Considerations . . . . . . . . . . . . . . . . . . . 20 - 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 21 - 8. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 21 - 9. References . . . . . . . . . . . . . . . . . . . . . . . . . . 21 - 9.1. Normative References . . . . . . . . . . . . . . . . . . . 21 - 9.2. Informative References . . . . . . . . . . . . . . . . . . 21 - Appendix A. Examples . . . . . . . . . . . . . . . . . . . . . . 21 - A.1. Resource Created . . . . . . . . . . . . . . . . . . . . . 21 - A.2. Resource Updated - Property Change . . . . . . . . . . . . 22 - A.3. Resource Updated - Parameter Change . . . . . . . . . . . 23 - A.4. Resource Updated - Multiple Instances Change . . . . . . . 23 - A.5. Resource Updated - Multiple User Change . . . . . . . . . 24 - A.6. Resource Deleted . . . . . . . . . . . . . . . . . . . . . 25 - A.7. Collection Created . . . . . . . . . . . . . . . . . . . . 26 - A.8. Collection Updated . . . . . . . . . . . . . . . . . . . . 26 - A.9. Collection Deleted . . . . . . . . . . . . . . . . . . . . 27 - Author's Address . . . . . . . . . . . . . . . . . . . . . . . . . 27 - - - - - - - - - -Daboo [Page 2] - - CalDAV User Notifications March 2012 - - -1. Introduction - - CalDAV [RFC4791] provides a way for calendar users to store calendar - data and exchange this data via scheduling operations. Based on the - WebDAV [RFC4918] protocol, it also includes the ability to manage - access to calendar data via the WebDAV ACL [RFC3744] extension. - - It is often useful for servers to communicate arbitrary information - to calendar users, e.g., system status, message of the day, quota - warnings, changes to shared resources made by others etc. This - specification defines a generic "notification" mechanism that allows - a server to do that. Whilst primarily aimed at CalDAV [RFC4791], - this mechanism has been designed to be adaptable to WebDAV [RFC4918]. - - -2. Open Issues - - 1. Define specific child elements for system status notification, - e.g. "server-maintenance-period", "server-read-only-period", - "client-upgrade-required". - - -3. Conventions Used in This Document - - The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", - "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this - document are to be interpreted as described in [RFC2119]. - - When XML element types in the namespaces "DAV:" and - "urn:ietf:params:xml:ns:caldav" are referenced in this document - outside of the context of an XML fragment, the string "DAV:" and - "CALDAV:" will be prefixed to the element type names respectively. - - The namespace "http://calendarserver.org/ns/" is used for XML - elements defined in this specification. When XML element types in - that namespace are referenced in this document outside of the context - of an XML fragment, the string "CS:" will be prefixed to the element - type names. - - -4. Notifications - - When this feature is available, a CS:notification-URL (Section 4.1.1) - property appears on principal resources for those principals who are - able to receive notifications. That property specifies a single DAV: - href element whose content refers to a WebDAV collection resource. - Notification "messages" are deposited into this collection and can be - retrieved by clients and acted on accordingly. - - - -Daboo [Page 3] - - CalDAV User Notifications March 2012 - - - The notification collection referenced by the CS:notification-URL - (Section 4.1.1) property MUST have a DAV:resourcetype property with - DAV:collection and CS:notifications (Section 4.3.1) child elements. - - Notification "messages" are XML documents stored as resources in the - notification collection. Each XML document contains a CS: - notification (Section 4.3.2) element as its root. The root element - contains a CS:dtstamp element, and one additional element which - represents the type of notification being conveyed in the message. - That child element will typically contain additional content that - describes the notification. - - Each notification resource has a CS:notificationtype (Section 4.2.1) - property which contains as its single child element an empty element - that matches the child element of the notification resource XML - document root. Any attributes on the child element in the XML - document are also present in the property child element. - - Notifications are automatically generated by the server (perhaps in - response to a action) with an appropriate resource stored in the - notifications collection of the user to whom the notification is - targeted. Clients SHOULD monitor the notification collection looking - for new notification resources. When doing so, clients SHOULD look - at the CS:notificationtype (Section 4.2.1) property to ensure that - the notification is of a type that the client can handle. Once a - client has handled the notification in whatever way is appropriate it - SHOULD delete the notification resource. Clients SHOULD remove - notifications being displayed to a user when the notification - resource is removed from the notification collection, to enable the - user to dismiss a notification on one device and have it - automatically removed from others. Clients MUST ignore all - notifications for types they do not recognize. Servers MAY delete - notification resources on their own if they determine that the - notifications are no longer relevant or valid. Servers MAY coalesce - notifications as appropriate. - - Servers MUST prevent clients from adding resources in the - notification collection. - -4.1. Additional Principal Properties - - This section defines new properties for WebDAV principal resources as - defined in RFC3744 [RFC3744]. These properties are likely to be - protected but the server MAY allow them to be written by appropriate - users. - - - - - - -Daboo [Page 4] - - CalDAV User Notifications March 2012 - - -4.1.1. CS:notification-URL Property - - Name: notification-URL - - Namespace: http://calendarserver.org/ns/ - - Purpose: Identify the URL of the notification collection owned by - the associated principal resource. - - Protected: This property SHOULD be protected. - - PROPFIND behavior: This property SHOULD NOT be returned by a - PROPFIND allprop request (as defined in Section 14.2 of - [RFC4918]). - - COPY/MOVE behavior: This property value SHOULD be preserved in COPY - and MOVE operations. - - Description: This property is needed for a client to determine where - the notification collection of the current user is located so that - processing of notification messages can occur. If not present, - then the associated calendar user is not enabled for notification - messages on the server. - - Definition: - - <!ELEMENT notification-URL (DAV:href)> - -4.2. Properties on Notification Resources - - The following new WebDAV properties are defined for notification - resources. - -4.2.1. CS:notificationtype Property - - Name: notificationtype - - Namespace: http://calendarserver.org/ns/ - - Purpose: Identify the type of notification of the corresponding - resource. - - Protected: This property MUST be protected. - - PROPFIND behavior: This property SHOULD NOT be returned by a - PROPFIND allprop request (as defined in Section 14.2 of - [RFC4918]). - - - - -Daboo [Page 5] - - CalDAV User Notifications March 2012 - - - COPY/MOVE behavior: This property value MUST be preserved in COPY - and MOVE operations. - - Description: This property allows a client, via a PROPFIND Depth:1 - request, to quickly find notification messages that the client can - handle in a notification collection. The single child element is - the notification resource root element's child defining the - notification itself. This element MUST be empty, though any - attributes on the element in the notification resource MUST be - present in the property element. - - Definition: - - <!ELEMENT notificationtype ANY> - <!-- Child elements are empty but will have appropriate attributes. - Any valid notification message child element can appear.--> - -4.3. XML Element Definitions - -4.3.1. CS:notifications - - Name: notifications - - Namespace: http://calendarserver.org/ns/ - - Purpose: Indicates a notification collection. - - Description: This XML element is used in a DAV:resourcetype element - to indicate that the corresponding resource is a notification - collection. - - Definition: - - <!ELEMENT notifications EMPTY> - -4.3.2. CS:notification - - Name: notification - - Namespace: http://calendarserver.org/ns/ - - Purpose: Notification message root element. - - Description: The root element used in notification resources. - - - - - - - -Daboo [Page 6] - - CalDAV User Notifications March 2012 - - - Definition: - - <!ELEMENT notification (dtstamp, XXX) > - <!-- Any notification type element can appear after - CS:dtstamp --> - -4.3.3. CS:dtstamp - - Name: dtstamp - - Namespace: http://calendarserver.org/ns/ - - Purpose: Date-time stamp. - - Description: Contains the date-time stamp corresponding to the - creation of a notification message, using the format defined in - [RFC3339], or the "compact" format without "-" and ":" characters - between date and time elements, respectively. - - Definition: - - <!ELEMENT dtstamp (#PCDATA)> - <!-- Value is a date-time in UTZ as per [RFC3339] with - "compact" format allowed.--> - - -5. Notification Definitions - - This section defines a set of common notification types. - -5.1. System Status Notification - - The system status notification is used to convey a URI and/or textual - description to the user. The assumption is that the URI points to a - webpage where current system status is described in detail, with the - provided description being a summary of that. A "type" attribute on - the element is used to indicate the importance of the current status - notification, and has the values "low", "medium" and "high", - representing the increasing level of importance of the message - respectively. - - Servers might have knowledge of specific calendar user language - preferences, in which case it MAY localise the CS:description value - as appropriate based on the calendar user accessing the notification, - but if it does, it SHOULD include an xml:lang attribute on the CS: - description element to indicate what language is being used. - - - - - -Daboo [Page 7] - - CalDAV User Notifications March 2012 - - -5.1.1. CS:systemstatus Element Definition - - Name: systemstatus - - Namespace: http://calendarserver.org/ns/ - - Purpose: Indicates a system status notification. - - Description: This XML element is used in a CS:notification element - to describe a system status notification. - - Definition: - - <!ELEMENT systemstatus (DAV:href?, CS:description?)> - <!ATTLIST systemstatus type (low | medium | high) "low"> - - <!ELEMENT description CDATA> - - <!-- One of DAV:href of CS:description MUST be present --> - - Example: This is an example of the body of a notification resource - for an emergency system outage: - - <?xml version="1.0" encoding="UTF-8"?> - <CS:notification xmlns:D="DAV:" - xmlns:CS="http://calendarserver.org/ns/"> - <CS:dtstamp>2011-12-09T11:12:53-05:00</CS:dtstamp> - <CS:systemstatus type="high"> - <D:href>http://example.com/emergency_shutdown.html</D:href> - <CS:description xml:lang='en_US' - >Emergency shutdown now</CS:description> - </CS:systemstatus> - </CS:notification> - - Example: This is an example of the WebDAV property on the example - notification resource above: - - <?xml version="1.0" encoding="UTF-8"?> - <CS:notificationtype xmlns:D="DAV:" - xmlns:CS="http://calendarserver.org/ns/"> - <CS:systemstatus type="high" /> - </CS:notificationtype> - -5.2. Quota Notification - - The quota notification is used to convey information about the status - of one or more quotas for the user. The notification contains - elements for different types of quota being reported to the user. In - - - -Daboo [Page 8] - - CalDAV User Notifications March 2012 - - - some cases these may be warnings (e.g., a user getting to 80% of - their quota limit), or in other cases errors (e.g., a user exceeding - their quota). - -5.2.1. CS:quotastatus Element Definition - - Name: quotastatus - - Namespace: http://calendarserver.org/ns/ - - Purpose: Indicates a quota status notification. - - Description: This XML element is used in a CS:notification element - to describe a quota status notification. The CS:quota-percent- - used element contains an integer greater than or equal to zero. - If the value is greater than or equal to 100, then the user's - quota has been reached or exceeded. The DAV:href element contains - a URI for a webpage where the user can go to get further - information about their quota status or take corrective action. - - Definition: - - <!ELEMENT quota-status (quota+)> - - <!ELEMENT quota (quota-type, quota-percent-used?, - quota-count?, DAV:href?)> - <!ATTLIST quota type (warning | exceeded) "exceeded"> - - <!ELEMENT quota-type ANY> - <!-- Child elements are application specific --> - - <!ELEMENT quota-percent-used CDATA> - <!-- Integer value greater than or equal to zero --> - - <!ELEMENT quota-count CDATA> - <!-- Integer value greater than or equal to zero --> - - Example: This is an example of the body of a notification resource - for a quota warning: - - - - - - - - - - - - -Daboo [Page 9] - - CalDAV User Notifications March 2012 - - - <?xml version="1.0" encoding="UTF-8"?> - <CS:notification xmlns:D="DAV:" - xmlns:CS="http://calendarserver.org/ns/"> - <CS:dtstamp>2011-12-09T11:12:53-05:00</CS:dtstamp> - <CS:quota-status> - <CS:quota type="warning"> - <CS:quota-type><CS:attachments /></CS:quota-type> - <CS:quota-percent-used>80</CS:quota-percent-used> - <D:href>https://example.com/your-account.html</D:href> - </CS:quota> - </CS:quota-status> - </CS:notification> - - Example: This is an example of the body of a notification resource - for a quota that has been exceeded, and a count-based limit that - is shown as a warning: - - <?xml version="1.0" encoding="UTF-8"?> - <CS:notification xmlns:D="DAV:" - xmlns:CS="http://calendarserver.org/ns/"> - <CS:dtstamp>2011-12-09T11:12:53-05:00</CS:dtstamp> - <CS:quota-status> - <CS:quota type="exceeded"> - <CS:quota-type><CS:attachments /></CS:quota-type> - <CS:quota-percent-used>102</CS:quota-percent-used> - <D:href>https://example.com/fix-account.html</D:href> - </CS:quota> - <CS:quota type="warning"> - <CS:quota-type><CS:events /></CS:quota-type> - <CS:quota-percent-used>82</CS:quota-percent-used> - <CS:quota-count>4980</CS:quota-count> - <D:href>https://example.com/buy-more-space.html</D:href> - </CS:quota> - </CS:quota-status> - </CS:notification> - -5.3. Resource Changes Notification - - The resource change notification is used to inform the user of new, - updated or deleted resources caused by changes made by someone else - (note: servers MUST NOT generate notifications to users for changes - they themselves make, though the possibility of an automated process - acting on behalf of a user needs to be considered). This - notification can be used by clients to show changes that a user can - acknowledge in their own time. When the notification is present, it - can be displayed on all devices a user is accessing their data from. - When the user acknowledges and dismisses the notification on one - device, other devices SHOULD also remove the notification when they - - - -Daboo [Page 10] - - CalDAV User Notifications March 2012 - - - next synchronize the notification collection. - - A new WebDAV property CS:notify-changes (Section 5.3.4) is defined - for calendar collections. This allows users to enable or disable the - sending of resource change notifications for the calendar and its - child resources. Servers MUST allow users to set this property on a - per-user basis on any calendars accessible to them. Servers MUST - honor the chosen setting to enable or disable change notifications. - - Servers can send notifications for calendar object resources, and - ones for calendar collections. Servers SHOULD coalesce notifications - that refer to the same resource into a single notification resource, - containing multiple CS:created, CS:updated or CS:deleted elements all - with the same DAV:href child element value. Servers MAY coalesce - changes to multiple resources into a change notification for the - parent collection of those resources and use a CS:collection-changes - element to indicate the number of individual resources that changed. - -5.3.1. CS:resource-change Element Definition - - Name: resource-change - - Namespace: http://calendarserver.org/ns/ - - Purpose: Indicates that resources have been created, updated or - deleted. - - Description: This XML element is used in a CS:notification element - to describe a resource change notification. It can describe a - change directly to a calendar object resource or to a calendar - collection. - - When used for a calendar object resource change, it can contain - one of the CS:created, or CS:deleted elements, or multiple CS: - updated elements, which indicate a created, deleted or updated - resource, respectively. The DAV:href element within those - elements, contains the URI of the changed resource, optional - information about who changed the resource and when that change - was made (the CS:changed-by element), and information specific to - the nature of the change. Servers SHOULD coalesce resource change - notifications for the same resource into a single notification - resource where possible. The CS:updated element optionally - contains CS:content and/or DAV:prop elements to indicate a change - to the body of the resource or resource WebDAV properties, - respectively. The DAV:prop element MAY contain a list of property - elements to indicate which properties changed. The CS:updated - element can also contain zero or more CS:calendar-changes elements - to list details of the changes. If no CS:calendar-changes element - - - -Daboo [Page 11] - - CalDAV User Notifications March 2012 - - - is present, the specific details are not provided, and clients - will need to assume that some set of changes occurred, but the - server is unwilling to disclose the full details. The CS:deleted - element can also contain zero or more CS:deleted-details elements - to list details of the deleted resource. - - When used for a calendar collection change, it can contain a CS: - collection-changes element. The DAV:href element within that - element, contains the URI of the changed calendar collection. The - DAV:prop element indicates a change to WebDAV properties on the - calendar collection resource. The CS:child-created, CS:child- - updated, and CS:child-deleted elements each contain a positive - integer value indicating how many child resources were added, - updated or deleted in the collection, respectively. - - Definition: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Daboo [Page 12] - - CalDAV User Notifications March 2012 - - - <!ELEMENT resource-change (created | updated+ | deleted | - collection-changes)> - <!ELEMENT created (DAV:href, changed-by?, ANY)> - <!ELEMENT updated (DAV:href, changed-by?, content?, - DAV:prop?, calendar-changes*)> - <!ELEMENT content EMPTY> - <!ELEMENT deleted (DAV:href, changed-by?, deleted-details)> - - <!ELEMENT changed-by (common-name | (first-name, last-name), - dtstamp?, DAV:href)> - <!ELEMENT common-name CDATA> - <!ELEMENT first-name CDATA> - <!ELEMENT last-name CDATA> - <!-- CS:changed-by indicates who made the change that caused the - notification. CS:first-name and CS:last-name are the first - and last names of the corresponding user. or the - CS:common-name is the overall display name. CS:dtstamp is the - time in UTC when the change was made. The DAV:href element - is the principal URI or email address of the user who made - the change. --> - - <!ELEMENT collection-changes (DAV:href, changed-by*, DAV:prop?, - child-created?, child-updated?, - child-deleted?> - <!-- When coalescing changes from multiple users, the changed-by - element can appear more than once. --> - - <!ELEMENT child-created CDATA> - <!ELEMENT child-updated CDATA> - <!ELEMENT child-deleted CDATA> - <!-- Each of the three elements above MUST contain a positive, - non-zero integer value indicate the total number of changes - being reported for the collection. --> - - Example: This is an example of the body of a notification resource - for changes where one resource has been created: - - - - - - - - - - - - - - - -Daboo [Page 13] - - CalDAV User Notifications March 2012 - - - <?xml version="1.0" encoding="UTF-8"?> - <CS:notification xmlns:D="DAV:" - xmlns:CS="http://calendarserver.org/ns/"> - <CS:dtstamp>2011-12-09T11:51:14-05:00</CS:dtstamp> - <CS:resource-change> - <CS:created> - <D:href>http://example.com/cyrus/calendar/new.ics</D:href> - <CS:changed-by> - <CS:common-name>Cyrus Daboo</CS:common-name> - <D:href>/principals/cyrusdaboo</D:href> - </CS:changed-by> - </CS:created> - </CS:resource-change> - </CS:notification> - - Example: This is an example of the body of a notification resource - for changes where a resource has been updated twice. One of the - updated resources elements contains additional information - indicating which recurrence instances in the iCalendar data were - changed: - - <?xml version="1.0" encoding="UTF-8"?> - <CS:notification xmlns:D="DAV:" - xmlns:CS="http://calendarserver.org/ns/"> - <CS:dtstamp>2011-12-09T11:51:14-05:00</CS:dtstamp> - <CS:resource-change> - <CS:updated> - <D:href>http://example.com/cyrus/calendar/event.ics</D:href> - <CS:changed-by> - <CS:first-name>Oliver</CS:first-name> - <CS:last-name>Daboo</CS:last-name> - <D:href>mailto:oliver@example.com</D:href> - </CS:changed-by> - </CS:updated> - <CS:updated> - <D:href>http://example.com/cyrus/calendar/event.ics</D:href> - <CS:changed-by> - <CS:first-name>Eleanor</CS:first-name> - <CS:last-name>Daboo</CS:last-name> - <D:href>mailto:eleanor@example.com</D:href> - </CS:changed-by> - </CS:updated> - </CS:resource-change> - </CS:notification> - - - - - - - -Daboo [Page 14] - - CalDAV User Notifications March 2012 - - - Example: This is an example of the body of a notification resource - for changes where one resource has been deleted: - - <?xml version="1.0" encoding="UTF-8"?> - <CS:notification xmlns:D="DAV:" - xmlns:CS="http://calendarserver.org/ns/"> - <CS:dtstamp>2011-12-09T11:51:14-05:00</CS:dtstamp> - <CS:resource-change> - <CS:deleted> - <D:href>http://example.com/cyrus/calendar/old.ics</D:href> - <CS:changed-by> - <CS:first-name>Cyrus</CS:first-name> - <CS:last-name>Daboo</CS:last-name> - <D:href>/principals/cyrusdaboo</D:href> - </CS:changed-by> - </CS:deleted> - </CS:resource-change> - </CS:notification> - - Example: This example is the same as the previous three, except that - all the individual resource changes have been coalesced into a - single notification about changes to the parent calendar - collection: - - <?xml version="1.0" encoding="UTF-8"?> - <CS:notification xmlns:D="DAV:" - xmlns:CS="http://calendarserver.org/ns/"> - <CS:dtstamp>2011-12-09T11:51:14-05:00</CS:dtstamp> - <CS:resource-change> - <CS:collection-changes> - <D:href>http://example.com/cyrus/calendar/</D:href> - <CS:child-created>1</CS:child-created> - <CS:child-updated>2</CS:child-updated> - <CS:child-deleted>1</CS:child-deleted> - </CS:collection-changes> - </CS:resource-change> - </CS:notification> - -5.3.2. CS:calendar-changes Element Definition - - Name: calendar-changes - - Namespace: http://calendarserver.org/ns/ - - Purpose: Indicates which portions of an calendar object resource - have changed, or provides details of deleted calendar object - resources. - - - - -Daboo [Page 15] - - CalDAV User Notifications March 2012 - - - Description: This XML element is used in a CS:updated element to - describe how a calendar object resource changed, or in a CS: - deleted element to provide details of a deleted resource. It can - identify the master instance, or individual recurrence instances, - and for each indicate which iCalendar properties and parameters - changed during the update for which the notification was - generated. For details of handling recurrences please see - Section 5.3.2.1. - - Definition: - - <!ELEMENT calendar-changes (recurrence+) > - - <!ELEMENT recurrence - ((master | recurrenceid), added?, removed?, changes?)> - <!-- Which instances were affected by the change, - and details on the per-instance changes --> - - <!ELEMENT master EMPTY> - <!-- The "master" instance was affected --> - - <!ELEMENT recurrenceid CDATA> - <!-- RECURRENCE-ID value in iCalendar form (in UTC if a - non-floating DATE-TIME value) for the affected instance --> - - <!ELEMENT added EMPTY> - <!-- The component was added --> - - <!ELEMENT removed EMPTY> - <!-- The component was removed --> - - <!ELEMENT changes changed-property*> - <!-- Detailed changes in the iCalendar data --> - - <!ELEMENT changed-property changed-parameter*> - <!ATTLIST changed-property name PCDATA> - <!-- An iCalendar property changed --> - - <!ELEMENT changed-parameter EMPTY> - <!ATTLIST changed-parameter name PCDATA> - <!-- An iCalendar property parameter changed --> - - Example: This example indicates that a non-recurring component, or - the master component in a recurring component, was changed and - that the change was to the "SUMMARY" iCalendar property. - - - - - - -Daboo [Page 16] - - CalDAV User Notifications March 2012 - - - <CS:calendar-changes xmlns:CS="http://calendarserver.org/ns/"> - <CS:recurrence> - <CS:master/> - <CS:changes> - <CS:changed-property name="SUMMARY"/> - </CS:changes> - </CS:recurrence> - </CS:calendar-changes> - - Example: This example indicates that an instance of a recurring - component was changed and that the change was to the "DTSTART" - iCalendar property. - - <CS:calendar-changes xmlns:CS="http://calendarserver.org/ns/"> - <CS:recurrence> - <CS:recurrenceid>20111215T160000Z</CS:recurrenceid> - <CS:changes> - <CS:changed-property name="DTSTART"/> - </CS:changes> - </CS:recurrence> - </CS:calendar-changes> - -5.3.2.1. Handling Recurrences in CS:calendar-changes - - Changes to recurring components can be complex. This section - describes the possible set of changes that could occur, and what the - CS:calendar-changes element will contain as a result. - - Master exists, unchanged override added In this case, a CS: - recurrence element will be present, containing a CS:recurrence-id - element with a value equal to the RECURRENCE-ID property value (in - UTC) of the added component. A CS:added element will be present. - There will not be any CS:removed or CS:changes elements. - - Master exists, changed override added In this case, a CS:recurrence - element will be present, containing a CS:recurrence-id element - with a value equal to the RECURRENCE-ID property value (in UTC) of - the added component. Both CS:added and CS:changes elements will - be present. There will not be a CS:removed element. - - Master exists, override changed In this case, a CS:recurrence - element will be present, containing a CS:recurrence-id element - with a value equal to the RECURRENCE-ID property value (in UTC) of - the added component. A CS:changes element will be present. There - will not be any CS:added or CS:removed elements. - - - - - - -Daboo [Page 17] - - CalDAV User Notifications March 2012 - - - Master exists, override removed In this case, a CS:recurrence - element will be present, containing a CS:recurrence-id element - with a value equal to the RECURRENCE-ID property value (in UTC) of - the added component. A CS:removed element will be present. There - will not be a CS:added element. A CS:changes element will only be - present if the removed component differs from the "derived" master - instance. - - Master exists, override cancelled In this case, a CS:recurrence - element will be present, containing a CS:recurrence-id element - with a value equal to the RECURRENCE-ID property value (in UTC) of - the added component. A CS:removed element will be present. There - will not be any CS:added or CS:changes element. There will also - be a CS:master element present, with an appropriate CS:changes - element, likely covering a change to "RRULE" or addition of - "EXDATE" properties. - - Master does not exist, override added In this case, a CS:recurrence - element will be present, containing a CS:recurrence-id element - with a value equal to the RECURRENCE-ID property value (in UTC) of - the added component. A CS:added element will be present. There - will not be a CS:removed or CS:changes element. - - Master does not exist, override changed In this case, a CS: - recurrence element will be present, containing a CS:recurrence-id - element with a value equal to the RECURRENCE-ID property value (in - UTC) of the added component. A CS:changes element will be - present. There will not be any CS:added or CS:removed elements. - - Master does not exist, override removed In this case, a CS: - recurrence element will be present, containing a CS:recurrence-id - element with a value equal to the RECURRENCE-ID property value (in - UTC) of the added component. A CS:removed element will be - present. There will not be any CS:added or CS:changes element. - -5.3.3. CS:deleted-details Element Definition - - Name: deleted-details - - Namespace: http://calendarserver.org/ns/ - - Purpose: Provides summary information about a deleted resource or - collection. - - Description: This XML element is used in a CS:deleted element to - describe useful information about a deleted resource or - collection, so clients can provide a meaningful notification - message to users. This element has two variants: one for deletion - - - -Daboo [Page 18] - - CalDAV User Notifications March 2012 - - - of a calendar object resource, the other for deletion of a - calendar collection. - - Definition: - - <!ELEMENT deleted-details ((deleted-component, - deleted-summary, - deleted-next-instance?, - deleted-had-more-instances?) | - deleted-displayname)> - <!-- deleted-displayname is used for a collection delete, the other - elements used for a resource delete. --> - - <!ELEMENT deleted-component CDATA> - <!-- The main calendar component type of the deleted - resource, e.g., "VEVENT", "VTODO" --> - - <!ELEMENT deleted-summary CDATA> - <!-- Indicates the "SUMMARY" of the next future instance at the - time of deletion, or the previous instance if no future - instances existed at the time of deletion. --> - - <!ELEMENT deleted-next-instance CDATA> - <!ATTLIST deleted-next-instance tzid PCDATA> - <!-- If present, indicates when the next deleted instance would - have occurred. For a VEVENT that would be the DTSTART value, - for a VTODO that would be either DTSTART or DUE, if present. - In each case the value must match the value in the iCalendar - data, and any TZID iCalendar property parameter value must - be included in the tzid XML element attribute value. --> - - <!ELEMENT deleted-had-more-instances EMPTY> - <!-- If present indicates that there was more than one future - instances still to occur at the time of deletion. --> - - <!ELEMENT deleted-displayname CDATA> - <!-- The DAV:getdisplayname property for the collection that - was deleted. --> - - Example: This example indicates deletion of a non-recurring event - that was yet to occur at the time of deletion. - - <CS:deleted-details xmlns:CS="http://calendarserver.org/ns/"> - <CS:deleted-component>VEVENT</CS:deleted-component> - <CS:deleted-summary>Birthday Party</CS:deleted-summary> - <CS:deleted-next-instance tzid="America/New_York - >20120505T120000</CS:deleted-next-instance> - </CS:deleted-details> - - - -Daboo [Page 19] - - CalDAV User Notifications March 2012 - - - Example: This example indicates deletion of a calendar. - - <CS:deleted-details xmlns:CS="http://calendarserver.org/ns/"> - <CS:deleted-displayname>Holidays</CS:deleted-displayname> - </CS:deleted-details> - -5.3.4. CS:notify-changes Property - - Name: notify-changes - - Namespace: http://calendarserver.org/ns/ - - Purpose: Allows a user to specify whether resource change - notifications are generated by the server. - - Protected: This property MUST NOT be protected. - - PROPFIND behavior: This property SHOULD NOT be returned by a - PROPFIND allprop request (as defined in Section 14.2 of - [RFC4918]). - - COPY/MOVE behavior: This property value MUST be preserved in COPY - and MOVE operations. - - Description: This property allows a user to enable or disable the - server generation of resource change notifications for the - calendar collection, and all its child resources, on which the - property resides. If the property is not present on a calendar - collection, the client and server MUST assume that resource change - notifications are enabled. - - Definition: - - <!ELEMENT notify-changes (true|false)> - <!ELEMENT true EMPTY> - <!ELEMENT false EMPTY> - - <!-- true - notifications enabled, - false - notifications disabled --> - - -6. Security Considerations - - Some notification mechanisms might allow a user to trigger a - notification to be delivered to other users (e.g., an invitation to - share a calendar). In such cases servers MUST ensure that suitable - limits are placed on the number and frequency of such user generated - notifications. - - - -Daboo [Page 20] - - CalDAV User Notifications March 2012 - - - TBD: More? - - -7. IANA Considerations - - This document does not require any actions on the part of IANA. - - -8. Acknowledgments - - This specification is the result of discussions between the various - Apple calendar server and client teams. - - -9. References - -9.1. Normative References - - [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate - Requirement Levels", BCP 14, RFC 2119, March 1997. - - [RFC3339] Klyne, G., Ed. and C. Newman, "Date and Time on the - Internet: Timestamps", RFC 3339, July 2002. - - [RFC4918] Dusseault, L., "HTTP Extensions for Web Distributed - Authoring and Versioning (WebDAV)", RFC 4918, June 2007. - -9.2. Informative References - - [RFC3744] Clemm, G., Reschke, J., Sedlar, E., and J. Whitehead, "Web - Distributed Authoring and Versioning (WebDAV) - Access Control Protocol", RFC 3744, May 2004. - - [RFC4791] Daboo, C., Desruisseaux, B., and L. Dusseault, - "Calendaring Extensions to WebDAV (CalDAV)", RFC 4791, - March 2007. - - -Appendix A. Examples - - This section provides more detailed examples of resource change - notifications for illustrative purposes only. - -A.1. Resource Created - - This is an example of the body of a notification resource where one - resource has been created. - - - - -Daboo [Page 21] - - CalDAV User Notifications March 2012 - - - <?xml version="1.0" encoding="UTF-8"?> - <CS:notification xmlns:D="DAV:" - xmlns:CS="http://calendarserver.org/ns/"> - <CS:dtstamp>2011-12-09T11:51:14-05:00</CS:dtstamp> - <CS:resource-change> - <CS:created> - <D:href>http://example.com/cyrus/calendar/new.ics</D:href> - <CS:changed-by> - <CS:first-name>Cyrus</CS:first-name> - <CS:last-name>Daboo</CS:last-name> - <D:href>/principals/cyrusdaboo</D:href> - </CS:changed-by> - </CS:created> - </CS:resource-change> - </CS:notification> - -A.2. Resource Updated - Property Change - - This is an example of the body of a notification resource where one - non-recurring event has had its "DTSTART" and "SUMMARY" iCalendar - property values changed. - - <?xml version="1.0" encoding="UTF-8"?> - <CS:notification xmlns:D="DAV:" - xmlns:CS="http://calendarserver.org/ns/"> - <CS:dtstamp>2011-12-09T11:51:14-05:00</CS:dtstamp> - <CS:resource-change> - <CS:updated> - <D:href>http://example.com/cyrus/calendar/new.ics</D:href> - <CS:changed-by> - <CS:first-name>Cyrus</CS:first-name> - <CS:last-name>Daboo</CS:last-name> - <D:href>/principals/cyrusdaboo</D:href> - </CS:changed-by> - <CS:calendar-changes> - <CS:recurrence> - <CS:master/> - <CS:changes> - <CS:changed-property name="DTSTART"/> - <CS:changed-property name="SUMMARY"/> - </CS:changes> - </CS:recurrence> - </CS:calendar-changes> - </CS:updated> - </CS:resource-change> - </CS:notification> - - - - - -Daboo [Page 22] - - CalDAV User Notifications March 2012 - - -A.3. Resource Updated - Parameter Change - - This is an example of the body of a notification resource where one - non-recurring event has had the "PARTSTAT" iCalendar property - parameter on an "ATTENDEE" property changed, and a "TRANSP" property - added. - - <?xml version="1.0" encoding="UTF-8"?> - <CS:notification xmlns:D="DAV:" - xmlns:CS="http://calendarserver.org/ns/"> - <CS:dtstamp>2011-12-09T11:51:14-05:00</CS:dtstamp> - <CS:resource-change> - <CS:updated> - <D:href>http://example.com/cyrus/calendar/new.ics</D:href> - <CS:changed-by> - <CS:first-name>Cyrus</CS:first-name> - <CS:last-name>Daboo</CS:last-name> - <D:href>/principals/cyrusdaboo</D:href> - </CS:changed-by> - <CS:calendar-changes> - <CS:recurrence> - <CS:master/> - <CS:added> - <CS:changed-property name="TRANSP"/> - </CS:added> - <CS:changes> - <CS:changed-property name="ATTENDEE"> - <CS:changed-parameter name="PARTSTAT"/> - </CS:changed-property> - </CS:changes> - </CS:recurrence> - </CS:calendar-changes> - </CS:updated> - </CS:resource-change> - </CS:notification> - -A.4. Resource Updated - Multiple Instances Change - - This is an example of the body of a notification resource where two - instances of a recurring event have their "DTSTART" and "SUMMARY" - iCalendar property values changed. - - - - - - - - - - -Daboo [Page 23] - - CalDAV User Notifications March 2012 - - - <?xml version="1.0" encoding="UTF-8"?> - <CS:notification xmlns:D="DAV:" - xmlns:CS="http://calendarserver.org/ns/"> - <CS:dtstamp>2011-12-09T11:51:14-05:00</CS:dtstamp> - <CS:resource-change> - <CS:updated> - <D:href>http://example.com/cyrus/calendar/new.ics</D:href> - <CS:changed-by> - <CS:first-name>Cyrus</CS:first-name> - <CS:last-name>Daboo</CS:last-name> - <D:href>/principals/cyrusdaboo</D:href> - </CS:changed-by> - <CS:calendar-changes> - <CS:recurrence> - <CS:recurrenceid>20120209T170000Z</CS:recurrenceid> - <CS:changes> - <CS:changed-property name="DTSTART"/> - <CS:changed-property name="SUMMARY"/> - </CS:changes> - </CS:recurrence> - <CS:recurrence> - <CS:recurrenceid>20120210T170000Z</CS:recurrenceid> - <CS:changes> - <CS:changed-property name="DTSTART"/> - <CS:changed-property name="SUMMARY"/> - </CS:changes> - </CS:recurrence> - </CS:calendar-changes> - </CS:updated> - </CS:resource-change> - </CS:notification> - -A.5. Resource Updated - Multiple User Change - - This is an example of the body of a notification resource where two - instances of a recurring event have their "DTSTART" and "SUMMARY" - iCalendar property values changed. Each instance was changed by a - different user. - - - - - - - - - - - - - -Daboo [Page 24] - - CalDAV User Notifications March 2012 - - - <?xml version="1.0" encoding="UTF-8"?> - <CS:notification xmlns:D="DAV:" - xmlns:CS="http://calendarserver.org/ns/"> - <CS:dtstamp>2011-12-09T11:51:14-05:00</CS:dtstamp> - <CS:resource-change> - <CS:updated> - <D:href>http://example.com/cyrus/calendar/new.ics</D:href> - <CS:changed-by> - <CS:first-name>Cyrus</CS:first-name> - <CS:last-name>Daboo</CS:last-name> - <D:href>/principals/cyrusdaboo</D:href> - </CS:changed-by> - <CS:calendar-changes> - <CS:recurrence> - <CS:recurrenceid>20120209T170000Z</CS:recurrenceid> - <CS:changes> - <CS:changed-property name="DTSTART"/> - <CS:changed-property name="SUMMARY"/> - </CS:changes> - </CS:recurrence> - </CS:calendar-changes> - </CS:updated> - <CS:updated> - <D:href>http://example.com/cyrus/calendar/new.ics</D:href> - <CS:changed-by> - <CS:first-name>Eric</CS:first-name> - <CS:last-name>York</CS:last-name> - <D:href>/principals/ericyork</D:href> - </CS:changed-by> - <CS:calendar-changes> - <CS:recurrence> - <CS:recurrenceid>20120210T170000Z</CS:recurrenceid> - <CS:changes> - <CS:changed-property name="DTSTART"/> - <CS:changed-property name="SUMMARY"/> - </CS:changes> - </CS:recurrence> - </CS:calendar-changes> - </CS:updated> - </CS:resource-change> - </CS:notification> - -A.6. Resource Deleted - - This is an example of the body of a notification resource where one - resource has been deleted. The resource was a VEVENT whose next - occurrence was in the future on 20120210T170000Z. - - - - -Daboo [Page 25] - - CalDAV User Notifications March 2012 - - - <?xml version="1.0" encoding="UTF-8"?> - <CS:notification xmlns:D="DAV:" - xmlns:CS="http://calendarserver.org/ns/"> - <CS:dtstamp>2011-12-09T11:51:14-05:00</CS:dtstamp> - <CS:resource-change> - <CS:deleted> - <D:href>http://example.com/cyrus/calendar/new.ics</D:href> - <CS:changed-by> - <CS:first-name>Cyrus</CS:first-name> - <CS:last-name>Daboo</CS:last-name> - <D:href>/principals/cyrusdaboo</D:href> - </CS:changed-by> - <CS:deleted-details> - <CS:deleted-component>VEVENT</CS:deleted-component> - <CS:deleted-summary>CalDAV Meeting</CS:deleted-summary> - <CS:deleted-next-instance - >20120210T170000Z</CS:deleted-next-instance> - </CS:deleted-details> - </CS:deleted> - </CS:resource-change> - </CS:notification> - -A.7. Collection Created - - This is an example of the body of a notification resource where a - calendar collection has been created. - - <?xml version="1.0" encoding="UTF-8"?> - <CS:notification xmlns:D="DAV:" - xmlns:CS="http://calendarserver.org/ns/"> - <CS:dtstamp>2011-12-09T11:51:14-05:00</CS:dtstamp> - <CS:resource-change> - <CS:created> - <D:href>http://example.com/cyrus/new-calendar/</D:href> - <CS:changed-by> - <CS:first-name>Cyrus</CS:first-name> - <CS:last-name>Daboo</CS:last-name> - <D:href>/principals/cyrusdaboo</D:href> - </CS:changed-by> - </CS:created> - </CS:resource-change> - </CS:notification> - -A.8. Collection Updated - - This is an example of the body of a notification resource where - coalesced changes in a calendar collection are shown. In this case 1 - child resource was created, 2 updated, and 1 deleted. - - - -Daboo [Page 26] - - CalDAV User Notifications March 2012 - - - <?xml version="1.0" encoding="UTF-8"?> - <CS:notification xmlns:D="DAV:" - xmlns:CS="http://calendarserver.org/ns/"> - <CS:dtstamp>2011-12-09T11:51:14-05:00</CS:dtstamp> - <CS:resource-change> - <CS:collection-changes> - <D:href>http://example.com/cyrus/calendar/</D:href> - <CS:child-created>1</CS:child-created> - <CS:child-updated>2</CS:child-updated> - <CS:child-deleted>1</CS:child-deleted> - </CS:collection-changes> - </CS:resource-change> - </CS:notification> - -A.9. Collection Deleted - - This is an example of the body of a notification resource where a - calendar collection has been deleted. - - <?xml version="1.0" encoding="UTF-8"?> - <CS:notification xmlns:D="DAV:" - xmlns:CS="http://calendarserver.org/ns/"> - <CS:dtstamp>2011-12-09T11:51:14-05:00</CS:dtstamp> - <CS:resource-change> - <CS:deleted> - <D:href>http://example.com/cyrus/old-calendar/</D:href> - <CS:changed-by> - <CS:first-name>Cyrus</CS:first-name> - <CS:last-name>Daboo</CS:last-name> - <D:href>/principals/cyrusdaboo</D:href> - </CS:changed-by> - <CS:deleted-details> - <CS:deleted-displayname>Holidays</CS:deleted-displayname> - </CS:deleted-details> - </CS:deleted> - </CS:resource-change> - </CS:notification> - - - - - - - - - - - - - - -Daboo [Page 27] - - CalDAV User Notifications March 2012 - - -Author's Address - - Cyrus Daboo - Apple Inc. - 1 Infinite Loop - Cupertino, CA 95014 - USA - - Email: cyrus@daboo.name - URI: http://www.apple.com/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Daboo [Page 28] - |