mirror of
https://github.com/etesync/android
synced 2024-12-28 09:28:10 +00:00
5996 lines
202 KiB
Plaintext
5996 lines
202 KiB
Plaintext
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Network Working Group C. Daboo
|
|||
|
Request for Comments: 4791 Apple
|
|||
|
Category: Standards Track B. Desruisseaux
|
|||
|
Oracle
|
|||
|
L. Dusseault
|
|||
|
CommerceNet
|
|||
|
March 2007
|
|||
|
|
|||
|
|
|||
|
Calendaring Extensions to WebDAV (CalDAV)
|
|||
|
|
|||
|
Status of This Memo
|
|||
|
|
|||
|
This document specifies an Internet standards track protocol for the
|
|||
|
Internet community, and requests discussion and suggestions for
|
|||
|
improvements. Please refer to the current edition of the "Internet
|
|||
|
Official Protocol Standards" (STD 1) for the standardization state
|
|||
|
and status of this protocol. Distribution of this memo is unlimited.
|
|||
|
|
|||
|
Copyright Notice
|
|||
|
|
|||
|
Copyright (C) The IETF Trust (2007).
|
|||
|
|
|||
|
Abstract
|
|||
|
|
|||
|
This document defines extensions to the Web Distributed Authoring and
|
|||
|
Versioning (WebDAV) protocol to specify a standard way of accessing,
|
|||
|
managing, and sharing calendaring and scheduling information based on
|
|||
|
the iCalendar format. This document defines the "calendar-access"
|
|||
|
feature of CalDAV.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 1]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
Table of Contents
|
|||
|
|
|||
|
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 5
|
|||
|
1.1. Notational Conventions . . . . . . . . . . . . . . . . . . 5
|
|||
|
1.2. XML Namespaces and Processing . . . . . . . . . . . . . . 5
|
|||
|
1.3. Method Preconditions and Postconditions . . . . . . . . . 6
|
|||
|
2. Requirements Overview . . . . . . . . . . . . . . . . . . . . 6
|
|||
|
3. Calendaring Data Model . . . . . . . . . . . . . . . . . . . . 7
|
|||
|
3.1. Calendar Server . . . . . . . . . . . . . . . . . . . . . 7
|
|||
|
3.2. Recurrence and the Data Model . . . . . . . . . . . . . . 8
|
|||
|
4. Calendar Resources . . . . . . . . . . . . . . . . . . . . . . 9
|
|||
|
4.1. Calendar Object Resources . . . . . . . . . . . . . . . . 9
|
|||
|
4.2. Calendar Collection . . . . . . . . . . . . . . . . . . . 10
|
|||
|
5. Calendar Access Feature . . . . . . . . . . . . . . . . . . . 11
|
|||
|
5.1. Calendar Access Support . . . . . . . . . . . . . . . . . 11
|
|||
|
5.1.1. Example: Using OPTIONS for the Discovery of
|
|||
|
Calendar Access Support . . . . . . . . . . . . . . . 12
|
|||
|
5.2. Calendar Collection Properties . . . . . . . . . . . . . . 12
|
|||
|
5.2.1. CALDAV:calendar-description Property . . . . . . . . . 12
|
|||
|
5.2.2. CALDAV:calendar-timezone Property . . . . . . . . . . 13
|
|||
|
5.2.3. CALDAV:supported-calendar-component-set Property . . . 14
|
|||
|
5.2.4. CALDAV:supported-calendar-data Property . . . . . . . 15
|
|||
|
5.2.5. CALDAV:max-resource-size Property . . . . . . . . . . 16
|
|||
|
5.2.6. CALDAV:min-date-time Property . . . . . . . . . . . . 17
|
|||
|
5.2.7. CALDAV:max-date-time Property . . . . . . . . . . . . 18
|
|||
|
5.2.8. CALDAV:max-instances Property . . . . . . . . . . . . 19
|
|||
|
5.2.9. CALDAV:max-attendees-per-instance Property . . . . . . 19
|
|||
|
5.2.10. Additional Precondition for PROPPATCH . . . . . . . . 20
|
|||
|
5.3. Creating Resources . . . . . . . . . . . . . . . . . . . . 20
|
|||
|
5.3.1. MKCALENDAR Method . . . . . . . . . . . . . . . . . . 20
|
|||
|
5.3.1.1. Status Codes . . . . . . . . . . . . . . . . . . . 22
|
|||
|
5.3.1.2. Example: Successful MKCALENDAR Request . . . . . . 23
|
|||
|
5.3.2. Creating Calendar Object Resources . . . . . . . . . . 25
|
|||
|
5.3.2.1. Additional Preconditions for PUT, COPY, and
|
|||
|
MOVE . . . . . . . . . . . . . . . . . . . . . . . 26
|
|||
|
5.3.3. Non-Standard Components, Properties, and Parameters . 28
|
|||
|
5.3.4. Calendar Object Resource Entity Tag . . . . . . . . . 28
|
|||
|
6. Calendaring Access Control . . . . . . . . . . . . . . . . . . 29
|
|||
|
6.1. Calendaring Privilege . . . . . . . . . . . . . . . . . . 29
|
|||
|
6.1.1. CALDAV:read-free-busy Privilege . . . . . . . . . . . 29
|
|||
|
6.2. Additional Principal Property . . . . . . . . . . . . . . 30
|
|||
|
6.2.1. CALDAV:calendar-home-set Property . . . . . . . . . . 30
|
|||
|
7. Calendaring Reports . . . . . . . . . . . . . . . . . . . . . 31
|
|||
|
7.1. REPORT Method . . . . . . . . . . . . . . . . . . . . . . 31
|
|||
|
7.2. Ordinary Collections . . . . . . . . . . . . . . . . . . . 31
|
|||
|
7.3. Date and Floating Time . . . . . . . . . . . . . . . . . . 32
|
|||
|
7.4. Time Range Filtering . . . . . . . . . . . . . . . . . . . 32
|
|||
|
7.5. Searching Text: Collations . . . . . . . . . . . . . . . . 33
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 2]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
7.5.1. CALDAV:supported-collation-set Property . . . . . . . 34
|
|||
|
7.6. Partial Retrieval . . . . . . . . . . . . . . . . . . . . 34
|
|||
|
7.7. Non-Standard Components, Properties, and Parameters . . . 35
|
|||
|
7.8. CALDAV:calendar-query REPORT . . . . . . . . . . . . . . . 36
|
|||
|
7.8.1. Example: Partial Retrieval of Events by Time Range . . 38
|
|||
|
7.8.2. Example: Partial Retrieval of Recurring Events . . . . 42
|
|||
|
7.8.3. Example: Expanded Retrieval of Recurring Events . . . 45
|
|||
|
7.8.4. Example: Partial Retrieval of Stored Free Busy
|
|||
|
Components . . . . . . . . . . . . . . . . . . . . . . 48
|
|||
|
7.8.5. Example: Retrieval of To-Dos by Alarm Time Range . . . 50
|
|||
|
7.8.6. Example: Retrieval of Event by UID . . . . . . . . . . 51
|
|||
|
7.8.7. Example: Retrieval of Events by PARTSTAT . . . . . . . 53
|
|||
|
7.8.8. Example: Retrieval of Events Only . . . . . . . . . . 55
|
|||
|
7.8.9. Example: Retrieval of All Pending To-Dos . . . . . . . 59
|
|||
|
7.8.10. Example: Attempt to Query Unsupported Property . . . . 62
|
|||
|
7.9. CALDAV:calendar-multiget REPORT . . . . . . . . . . . . . 63
|
|||
|
7.9.1. Example: Successful CALDAV:calendar-multiget REPORT . 64
|
|||
|
7.10. CALDAV:free-busy-query REPORT . . . . . . . . . . . . . . 66
|
|||
|
7.10.1. Example: Successful CALDAV:free-busy-query REPORT . . 68
|
|||
|
8. Guidelines . . . . . . . . . . . . . . . . . . . . . . . . . . 69
|
|||
|
8.1. Client-to-Client Interoperability . . . . . . . . . . . . 69
|
|||
|
8.2. Synchronization Operations . . . . . . . . . . . . . . . . 69
|
|||
|
8.2.1. Use of Reports . . . . . . . . . . . . . . . . . . . . 69
|
|||
|
8.2.1.1. Restrict the Time Range . . . . . . . . . . . . . 69
|
|||
|
8.2.1.2. Synchronize by Time Range . . . . . . . . . . . . 70
|
|||
|
8.2.1.3. Synchronization Process . . . . . . . . . . . . . 70
|
|||
|
8.2.2. Restrict the Properties Returned . . . . . . . . . . . 72
|
|||
|
8.3. Use of Locking . . . . . . . . . . . . . . . . . . . . . . 72
|
|||
|
8.4. Finding Calendars . . . . . . . . . . . . . . . . . . . . 72
|
|||
|
8.5. Storing and Using Attachments . . . . . . . . . . . . . . 74
|
|||
|
8.5.1. Inline Attachments . . . . . . . . . . . . . . . . . . 74
|
|||
|
8.5.2. External Attachments . . . . . . . . . . . . . . . . . 75
|
|||
|
8.6. Storing and Using Alarms . . . . . . . . . . . . . . . . . 76
|
|||
|
9. XML Element Definitions . . . . . . . . . . . . . . . . . . . 77
|
|||
|
9.1. CALDAV:calendar XML Element . . . . . . . . . . . . . . . 77
|
|||
|
9.2. CALDAV:mkcalendar XML Element . . . . . . . . . . . . . . 77
|
|||
|
9.3. CALDAV:mkcalendar-response XML Element . . . . . . . . . . 78
|
|||
|
9.4. CALDAV:supported-collation XML Element . . . . . . . . . . 78
|
|||
|
9.5. CALDAV:calendar-query XML Element . . . . . . . . . . . . 78
|
|||
|
9.6. CALDAV:calendar-data XML Element . . . . . . . . . . . . . 79
|
|||
|
9.6.1. CALDAV:comp XML Element . . . . . . . . . . . . . . . 80
|
|||
|
9.6.2. CALDAV:allcomp XML Element . . . . . . . . . . . . . . 81
|
|||
|
9.6.3. CALDAV:allprop XML Element . . . . . . . . . . . . . . 81
|
|||
|
9.6.4. CALDAV:prop XML Element . . . . . . . . . . . . . . . 82
|
|||
|
9.6.5. CALDAV:expand XML Element . . . . . . . . . . . . . . 82
|
|||
|
9.6.6. CALDAV:limit-recurrence-set XML Element . . . . . . . 83
|
|||
|
9.6.7. CALDAV:limit-freebusy-set XML Element . . . . . . . . 84
|
|||
|
9.7. CALDAV:filter XML Element . . . . . . . . . . . . . . . . 85
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 3]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
9.7.1. CALDAV:comp-filter XML Element . . . . . . . . . . . . 85
|
|||
|
9.7.2. CALDAV:prop-filter XML Element . . . . . . . . . . . . 86
|
|||
|
9.7.3. CALDAV:param-filter XML Element . . . . . . . . . . . 87
|
|||
|
9.7.4. CALDAV:is-not-defined XML Element . . . . . . . . . . 88
|
|||
|
9.7.5. CALDAV:text-match XML Element . . . . . . . . . . . . 88
|
|||
|
9.8. CALDAV:timezone XML Element . . . . . . . . . . . . . . . 89
|
|||
|
9.9. CALDAV:time-range XML Element . . . . . . . . . . . . . . 90
|
|||
|
9.10. CALDAV:calendar-multiget XML Element . . . . . . . . . . . 94
|
|||
|
9.11. CALDAV:free-busy-query XML Element . . . . . . . . . . . . 95
|
|||
|
10. Internationalization Considerations . . . . . . . . . . . . . 95
|
|||
|
11. Security Considerations . . . . . . . . . . . . . . . . . . . 95
|
|||
|
12. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 96
|
|||
|
12.1. Namespace Registration . . . . . . . . . . . . . . . . . . 96
|
|||
|
13. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 96
|
|||
|
14. References . . . . . . . . . . . . . . . . . . . . . . . . . . 97
|
|||
|
14.1. Normative References . . . . . . . . . . . . . . . . . . . 97
|
|||
|
14.2. Informative References . . . . . . . . . . . . . . . . . . 98
|
|||
|
Appendix A. CalDAV Method Privilege Table (Normative) . . . . . . 99
|
|||
|
Appendix B. Calendar Collections Used in the Examples . . . . . . 99
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 4]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
1. Introduction
|
|||
|
|
|||
|
The concept of using HTTP [RFC2616] and WebDAV [RFC2518] as a basis
|
|||
|
for a calendar access protocol is by no means a new concept: it was
|
|||
|
discussed in the IETF CALSCH working group as early as 1997 or 1998.
|
|||
|
Several companies have implemented calendar access protocols using
|
|||
|
HTTP to upload and download iCalendar [RFC2445] objects, and using
|
|||
|
WebDAV to get listings of resources. However, those implementations
|
|||
|
do not interoperate because there are many small and big decisions to
|
|||
|
be made in how to model calendaring data as WebDAV resources, as well
|
|||
|
as how to implement required features that aren't already part of
|
|||
|
WebDAV. This document proposes a way to model calendar data in
|
|||
|
WebDAV, with additional features to make an interoperable calendar
|
|||
|
access protocol.
|
|||
|
|
|||
|
1.1. Notational Conventions
|
|||
|
|
|||
|
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].
|
|||
|
|
|||
|
The term "protected" is used in the Conformance field of property
|
|||
|
definitions as defined in Section 1.4.2 of [RFC3253].
|
|||
|
|
|||
|
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.
|
|||
|
|
|||
|
1.2. XML Namespaces and Processing
|
|||
|
|
|||
|
Definitions of XML elements in this document use XML element type
|
|||
|
declarations (as found in XML Document Type Declarations), described
|
|||
|
in Section 3.2 of [W3C.REC-xml-20060816].
|
|||
|
|
|||
|
The namespace "urn:ietf:params:xml:ns:caldav" is reserved for the XML
|
|||
|
elements defined in this specification, its revisions, and related
|
|||
|
CalDAV specifications. XML elements defined by individual
|
|||
|
implementations MUST NOT use the "urn:ietf:params:xml:ns:caldav"
|
|||
|
namespace, and instead should use a namespace that they control.
|
|||
|
|
|||
|
The XML declarations used in this document do not include namespace
|
|||
|
information. Thus, implementers must not use these declarations as
|
|||
|
the only way to create valid CalDAV properties or to validate CalDAV
|
|||
|
XML element types. Some of the declarations refer to XML elements
|
|||
|
defined by WebDAV [RFC2518], which use the "DAV:" namespace.
|
|||
|
Wherever such XML elements appear, they are explicitly prefixed with
|
|||
|
"DAV:" to avoid confusion.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 5]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
Also note that some CalDAV XML element names are identical to WebDAV
|
|||
|
XML element names, though their namespace differs. Care must be
|
|||
|
taken not to confuse the two sets of names.
|
|||
|
|
|||
|
Processing of XML by CalDAV clients and servers MUST follow the rules
|
|||
|
described in [RFC2518]; in particular, Section 14, and Appendix 3 of
|
|||
|
that specification.
|
|||
|
|
|||
|
1.3. Method Preconditions and Postconditions
|
|||
|
|
|||
|
A "precondition" of a method describes the state of the server that
|
|||
|
must be true for that method to be performed. A "postcondition" of a
|
|||
|
method describes the state of the server that must be true after that
|
|||
|
method has been completed. If a method precondition or postcondition
|
|||
|
for a request is not satisfied, the response status of the request
|
|||
|
MUST either be 403 (Forbidden), if the request should not be repeated
|
|||
|
because it will always fail, or 409 (Conflict), if it is expected
|
|||
|
that the user might be able to resolve the conflict and resubmit the
|
|||
|
request.
|
|||
|
|
|||
|
In order to allow better client handling of 403 and 409 responses, a
|
|||
|
distinct XML element type is associated with each method precondition
|
|||
|
and postcondition of a request. When a particular precondition is
|
|||
|
not satisfied or a particular postcondition cannot be achieved, the
|
|||
|
appropriate XML element MUST be returned as the child of a top-level
|
|||
|
DAV:error element in the response body, unless otherwise negotiated
|
|||
|
by the request.
|
|||
|
|
|||
|
2. Requirements Overview
|
|||
|
|
|||
|
This section lists what functionality is required of a CalDAV server.
|
|||
|
To advertise support for CalDAV, a server:
|
|||
|
|
|||
|
o MUST support iCalendar [RFC2445] as a media type for the calendar
|
|||
|
object resource format;
|
|||
|
|
|||
|
o MUST support WebDAV Class 1 [RFC2518] (note that [rfc2518bis]
|
|||
|
describes clarifications to [RFC2518] that aid interoperability);
|
|||
|
|
|||
|
o MUST support WebDAV ACL [RFC3744] with the additional privilege
|
|||
|
defined in Section 6.1 of this document;
|
|||
|
|
|||
|
o MUST support transport over TLS [RFC2246] as defined in [RFC2818]
|
|||
|
(note that [RFC2246] has been obsoleted by [RFC4346]);
|
|||
|
|
|||
|
o MUST support ETags [RFC2616] with additional requirements
|
|||
|
specified in Section 5.3.4 of this document;
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 6]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
o MUST support all calendaring reports defined in Section 7 of this
|
|||
|
document; and
|
|||
|
|
|||
|
o MUST advertise support on all calendar collections and calendar
|
|||
|
object resources for the calendaring reports in the DAV:supported-
|
|||
|
report-set property, as defined in Versioning Extensions to WebDAV
|
|||
|
[RFC3253].
|
|||
|
|
|||
|
In addition, a server:
|
|||
|
|
|||
|
o SHOULD support the MKCALENDAR method defined in Section 5.3.1 of
|
|||
|
this document.
|
|||
|
|
|||
|
3. Calendaring Data Model
|
|||
|
|
|||
|
One of the features that has made WebDAV a successful protocol is its
|
|||
|
firm data model. This makes it a useful framework for other
|
|||
|
applications such as calendaring. This specification follows the
|
|||
|
same pattern by developing all features based on a well-described
|
|||
|
data model.
|
|||
|
|
|||
|
As a brief overview, a CalDAV calendar is modeled as a WebDAV
|
|||
|
collection with a defined structure; each calendar collection
|
|||
|
contains a number of resources representing calendar objects as its
|
|||
|
direct child resource. Each resource representing a calendar object
|
|||
|
(event, to-do, journal entry, or other calendar components) is called
|
|||
|
a "calendar object resource". Each calendar object resource and each
|
|||
|
calendar collection can be individually locked and have individual
|
|||
|
WebDAV properties. Requirements derived from this model are provided
|
|||
|
in Section 4.1 and Section 4.2.
|
|||
|
|
|||
|
3.1. Calendar Server
|
|||
|
|
|||
|
A CalDAV server is a calendaring-aware engine combined with a WebDAV
|
|||
|
repository. A WebDAV repository is a set of WebDAV collections,
|
|||
|
containing other WebDAV resources, within a unified URL namespace.
|
|||
|
For example, the repository "http://www.example.com/webdav/" may
|
|||
|
contain WebDAV collections and resources, all of which have URLs
|
|||
|
beginning with "http://www.example.com/webdav/". Note that the root
|
|||
|
URL, "http://www.example.com/", may not itself be a WebDAV repository
|
|||
|
(for example, if the WebDAV support is implemented through a servlet
|
|||
|
or other Web server extension).
|
|||
|
|
|||
|
A WebDAV repository MAY include calendar data in some parts of its
|
|||
|
URL namespace, and non-calendaring data in other parts.
|
|||
|
|
|||
|
A WebDAV repository can advertise itself as a CalDAV server if it
|
|||
|
supports the functionality defined in this specification at any point
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 7]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
within the root of the repository. That might mean that calendaring
|
|||
|
data is spread throughout the repository and mixed with non-calendar
|
|||
|
data in nearby collections (e.g., calendar data may be found in
|
|||
|
/home/lisa/calendars/ as well as in /home/bernard/calendars/, and
|
|||
|
non-calendar data in /home/lisa/contacts/). Or, it might mean that
|
|||
|
calendar data can be found only in certain sections of the repository
|
|||
|
(e.g., /calendar/). Calendaring features are only required in the
|
|||
|
repository sections that are or contain calendar object resources.
|
|||
|
Therefore, a repository confining calendar data to the /calendar/
|
|||
|
collection would only need to support the CalDAV required features
|
|||
|
within that collection.
|
|||
|
|
|||
|
The CalDAV server or repository is the canonical location for
|
|||
|
calendar data and state information. Clients may submit requests to
|
|||
|
change data or download data. Clients may store calendar objects
|
|||
|
offline and attempt to synchronize at a later time. However, clients
|
|||
|
MUST be prepared for calendar data on the server to change between
|
|||
|
the time of last synchronization and when attempting an update, as
|
|||
|
calendar collections may be shared and accessible via multiple
|
|||
|
clients. Entity tags and other features make this possible.
|
|||
|
|
|||
|
3.2. Recurrence and the Data Model
|
|||
|
|
|||
|
Recurrence is an important part of the data model because it governs
|
|||
|
how many resources are expected to exist. This specification models
|
|||
|
a recurring calendar component and its recurrence exceptions as a
|
|||
|
single resource. In this model, recurrence rules, recurrence dates,
|
|||
|
exception rules, and exception dates are all part of the data in a
|
|||
|
single calendar object resource. This model avoids problems of
|
|||
|
limiting how many recurrence instances to store in the repository,
|
|||
|
how to keep recurrence instances in sync with the recurring calendar
|
|||
|
component, and how to link recurrence exceptions with the recurring
|
|||
|
calendar component. It also results in less data to synchronize
|
|||
|
between client and server, and makes it easier to make changes to all
|
|||
|
recurrence instances or to a recurrence rule. It makes it easier to
|
|||
|
create a recurring calendar component and to delete all recurrence
|
|||
|
instances.
|
|||
|
|
|||
|
Clients are not forced to retrieve information about all recurrence
|
|||
|
instances of a recurring component. The CALDAV:calendar-query and
|
|||
|
CALDAV:calendar-multiget reports defined in this document allow
|
|||
|
clients to retrieve only recurrence instances that overlap a given
|
|||
|
time range.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 8]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
4. Calendar Resources
|
|||
|
|
|||
|
4.1. Calendar Object Resources
|
|||
|
|
|||
|
Calendar object resources contained in calendar collections MUST NOT
|
|||
|
contain more than one type of calendar component (e.g., VEVENT,
|
|||
|
VTODO, VJOURNAL, VFREEBUSY, etc.) with the exception of VTIMEZONE
|
|||
|
components, which MUST be specified for each unique TZID parameter
|
|||
|
value specified in the iCalendar object. For instance, a calendar
|
|||
|
object resource can contain one VEVENT component and one VTIMEZONE
|
|||
|
component, but it cannot contain one VEVENT component and one VTODO
|
|||
|
component. Instead, the VEVENT and VTODO components would have to be
|
|||
|
stored in separate calendar object resources in the same collection.
|
|||
|
|
|||
|
Calendar object resources contained in calendar collections MUST NOT
|
|||
|
specify the iCalendar METHOD property.
|
|||
|
|
|||
|
The UID property value of the calendar components contained in a
|
|||
|
calendar object resource MUST be unique in the scope of the calendar
|
|||
|
collection in which they are stored.
|
|||
|
|
|||
|
Calendar components in a calendar collection that have different UID
|
|||
|
property values MUST be stored in separate calendar object resources.
|
|||
|
|
|||
|
Calendar components with the same UID property value, in a given
|
|||
|
calendar collection, MUST be contained in the same calendar object
|
|||
|
resource. This ensures that all components in a recurrence "set" are
|
|||
|
contained in the same calendar object resource. It is possible for a
|
|||
|
calendar object resource to just contain components that represent
|
|||
|
"overridden" instances (ones that modify the behavior of a regular
|
|||
|
instance, and thus include a RECURRENCE-ID property) without also
|
|||
|
including the "master" recurring component (the one that defines the
|
|||
|
recurrence "set" and does not contain any RECURRENCE-ID property).
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 9]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
For example, given the following iCalendar object:
|
|||
|
|
|||
|
BEGIN:VCALENDAR
|
|||
|
PRODID:-//Example Corp.//CalDAV Client//EN
|
|||
|
VERSION:2.0
|
|||
|
BEGIN:VEVENT
|
|||
|
UID:1@example.com
|
|||
|
SUMMARY:One-off Meeting
|
|||
|
DTSTAMP:20041210T183904Z
|
|||
|
DTSTART:20041207T120000Z
|
|||
|
DTEND:20041207T130000Z
|
|||
|
END:VEVENT
|
|||
|
BEGIN:VEVENT
|
|||
|
UID:2@example.com
|
|||
|
SUMMARY:Weekly Meeting
|
|||
|
DTSTAMP:20041210T183838Z
|
|||
|
DTSTART:20041206T120000Z
|
|||
|
DTEND:20041206T130000Z
|
|||
|
RRULE:FREQ=WEEKLY
|
|||
|
END:VEVENT
|
|||
|
BEGIN:VEVENT
|
|||
|
UID:2@example.com
|
|||
|
SUMMARY:Weekly Meeting
|
|||
|
RECURRENCE-ID:20041213T120000Z
|
|||
|
DTSTAMP:20041210T183838Z
|
|||
|
DTSTART:20041213T130000Z
|
|||
|
DTEND:20041213T140000Z
|
|||
|
END:VEVENT
|
|||
|
END:VCALENDAR
|
|||
|
|
|||
|
The VEVENT component with the UID value "1@example.com" would be
|
|||
|
stored in its own calendar object resource. The two VEVENT
|
|||
|
components with the UID value "2@example.com", which represent a
|
|||
|
recurring event where one recurrence instance has been overridden,
|
|||
|
would be stored in the same calendar object resource.
|
|||
|
|
|||
|
4.2. Calendar Collection
|
|||
|
|
|||
|
A calendar collection contains calendar object resources that
|
|||
|
represent calendar components within a calendar. A calendar
|
|||
|
collection is manifested to clients as a WebDAV resource collection
|
|||
|
identified by a URL. A calendar collection MUST report the DAV:
|
|||
|
collection and CALDAV:calendar XML elements in the value of the DAV:
|
|||
|
resourcetype property. The element type declaration for CALDAV:
|
|||
|
calendar is:
|
|||
|
|
|||
|
<!ELEMENT calendar EMPTY>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 10]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
A calendar collection can be created through provisioning (i.e.,
|
|||
|
automatically created when a user's account is provisioned), or it
|
|||
|
can be created with the MKCALENDAR method (see Section 5.3.1). This
|
|||
|
method can be useful for a user to create additional calendars (e.g.,
|
|||
|
soccer schedule) or for users to share a calendar (e.g., team events
|
|||
|
or conference rooms). However, note that this document doesn't
|
|||
|
define the purpose of extra calendar collections. Users must rely on
|
|||
|
non-standard cues to find out what a calendar collection is for, or
|
|||
|
use the CALDAV:calendar-description property defined in Section 5.2.1
|
|||
|
to provide such a cue.
|
|||
|
|
|||
|
The following restrictions are applied to the resources within a
|
|||
|
calendar collection:
|
|||
|
|
|||
|
a. Calendar collections MUST only contain calendar object resources
|
|||
|
and collections that are not calendar collections, i.e., the only
|
|||
|
"top-level" non-collection resources allowed in a calendar
|
|||
|
collection are calendar object resources. This ensures that
|
|||
|
calendar clients do not have to deal with non-calendar data in a
|
|||
|
calendar collection, though they do have to distinguish between
|
|||
|
calendar object resources and collections when using standard
|
|||
|
WebDAV techniques to examine the contents of a collection.
|
|||
|
|
|||
|
b. Collections contained in calendar collections MUST NOT contain
|
|||
|
calendar collections at any depth, i.e., "nesting" of calendar
|
|||
|
collections within other calendar collections at any depth is not
|
|||
|
allowed. This specification does not define how collections
|
|||
|
contained in a calendar collection are used or how they relate to
|
|||
|
any calendar object resources contained in the calendar
|
|||
|
collection.
|
|||
|
|
|||
|
Multiple calendar collections MAY be children of the same collection.
|
|||
|
|
|||
|
5. Calendar Access Feature
|
|||
|
|
|||
|
5.1. Calendar Access Support
|
|||
|
|
|||
|
A server supporting the features described in this document MUST
|
|||
|
include "calendar-access" as a field in the DAV response header from
|
|||
|
an OPTIONS request on any resource that supports any calendar
|
|||
|
properties, reports, method, or privilege. A value of "calendar-
|
|||
|
access" in the DAV response header MUST indicate that the server
|
|||
|
supports all MUST level requirements specified in this document.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 11]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
5.1.1. Example: Using OPTIONS for the Discovery of Calendar Access
|
|||
|
Support
|
|||
|
|
|||
|
>> Request <<
|
|||
|
|
|||
|
OPTIONS /home/bernard/calendars/ HTTP/1.1
|
|||
|
Host: cal.example.com
|
|||
|
|
|||
|
>> Response <<
|
|||
|
|
|||
|
HTTP/1.1 200 OK
|
|||
|
Allow: OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, COPY, MOVE
|
|||
|
Allow: PROPFIND, PROPPATCH, LOCK, UNLOCK, REPORT, ACL
|
|||
|
DAV: 1, 2, access-control, calendar-access
|
|||
|
Date: Sat, 11 Nov 2006 09:32:12 GMT
|
|||
|
Content-Length: 0
|
|||
|
|
|||
|
In this example, the OPTIONS method returns the value "calendar-
|
|||
|
access" in the DAV response header to indicate that the collection
|
|||
|
"/home/bernard/calendars/" supports the properties, reports, method,
|
|||
|
or privilege defined in this specification.
|
|||
|
|
|||
|
5.2. Calendar Collection Properties
|
|||
|
|
|||
|
This section defines properties for calendar collections.
|
|||
|
|
|||
|
5.2.1. CALDAV:calendar-description Property
|
|||
|
|
|||
|
Name: calendar-description
|
|||
|
|
|||
|
Namespace: urn:ietf:params:xml:ns:caldav
|
|||
|
|
|||
|
Purpose: Provides a human-readable description of the calendar
|
|||
|
collection.
|
|||
|
|
|||
|
Conformance: This property MAY be defined on any calendar
|
|||
|
collection. If defined, it MAY be protected and SHOULD NOT be
|
|||
|
returned by a PROPFIND DAV:allprop request (as defined in Section
|
|||
|
12.14.1 of [RFC2518]). An xml:lang attribute indicating the human
|
|||
|
language of the description SHOULD be set for this property by
|
|||
|
clients or through server provisioning. Servers MUST return any
|
|||
|
xml:lang attribute if set for the property.
|
|||
|
|
|||
|
Description: If present, the property contains a description of the
|
|||
|
calendar collection that is suitable for presentation to a user.
|
|||
|
If not present, the client should assume no description for the
|
|||
|
calendar collection.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 12]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
Definition:
|
|||
|
|
|||
|
<!ELEMENT calendar-description (#PCDATA)>
|
|||
|
PCDATA value: string
|
|||
|
|
|||
|
Example:
|
|||
|
|
|||
|
<C:calendar-description xml:lang="fr-CA"
|
|||
|
xmlns:C="urn:ietf:params:xml:ns:caldav"
|
|||
|
>Calendrier de Mathilde Desruisseaux</C:calendar-description>
|
|||
|
|
|||
|
5.2.2. CALDAV:calendar-timezone Property
|
|||
|
|
|||
|
Name: calendar-timezone
|
|||
|
|
|||
|
Namespace: urn:ietf:params:xml:ns:caldav
|
|||
|
|
|||
|
Purpose: Specifies a time zone on a calendar collection.
|
|||
|
|
|||
|
Conformance: This property SHOULD be defined on all calendar
|
|||
|
collections. If defined, it SHOULD NOT be returned by a PROPFIND
|
|||
|
DAV:allprop request (as defined in Section 12.14.1 of [RFC2518]).
|
|||
|
|
|||
|
Description: The CALDAV:calendar-timezone property is used to
|
|||
|
specify the time zone the server should rely on to resolve "date"
|
|||
|
values and "date with local time" values (i.e., floating time) to
|
|||
|
"date with UTC time" values. The server will require this
|
|||
|
information to determine if a calendar component scheduled with
|
|||
|
"date" values or "date with local time" values overlaps a CALDAV:
|
|||
|
time-range specified in a CALDAV:calendar-query REPORT. The
|
|||
|
server will also require this information to compute the proper
|
|||
|
FREEBUSY time period as "date with UTC time" in the VFREEBUSY
|
|||
|
component returned in a response to a CALDAV:free-busy-query
|
|||
|
REPORT request that takes into account calendar components
|
|||
|
scheduled with "date" values or "date with local time" values. In
|
|||
|
the absence of this property, the server MAY rely on the time zone
|
|||
|
of their choice.
|
|||
|
|
|||
|
Note: The iCalendar data embedded within the CALDAV:calendar-
|
|||
|
timezone XML element MUST follow the standard XML character data
|
|||
|
encoding rules, including use of <, >, & etc. entity
|
|||
|
encoding or the use of a <![CDATA[ ... ]]> construct. In the
|
|||
|
later case, the iCalendar data cannot contain the character
|
|||
|
sequence "]]>", which is the end delimiter for the CDATA section.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 13]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
Definition:
|
|||
|
|
|||
|
<!ELEMENT calendar-timezone (#PCDATA)>
|
|||
|
PCDATA value: an iCalendar object with exactly one VTIMEZONE
|
|||
|
component.
|
|||
|
|
|||
|
Example:
|
|||
|
|
|||
|
<C:calendar-timezone
|
|||
|
xmlns:C="urn:ietf:params:xml:ns:caldav">BEGIN:VCALENDAR
|
|||
|
PRODID:-//Example Corp.//CalDAV Client//EN
|
|||
|
VERSION:2.0
|
|||
|
BEGIN:VTIMEZONE
|
|||
|
TZID:US-Eastern
|
|||
|
LAST-MODIFIED:19870101T000000Z
|
|||
|
BEGIN:STANDARD
|
|||
|
DTSTART:19671029T020000
|
|||
|
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
|
|||
|
TZOFFSETFROM:-0400
|
|||
|
TZOFFSETTO:-0500
|
|||
|
TZNAME:Eastern Standard Time (US & Canada)
|
|||
|
END:STANDARD
|
|||
|
BEGIN:DAYLIGHT
|
|||
|
DTSTART:19870405T020000
|
|||
|
RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
|
|||
|
TZOFFSETFROM:-0500
|
|||
|
TZOFFSETTO:-0400
|
|||
|
TZNAME:Eastern Daylight Time (US & Canada)
|
|||
|
END:DAYLIGHT
|
|||
|
END:VTIMEZONE
|
|||
|
END:VCALENDAR
|
|||
|
</C:calendar-timezone>
|
|||
|
|
|||
|
5.2.3. CALDAV:supported-calendar-component-set Property
|
|||
|
|
|||
|
Name: supported-calendar-component-set
|
|||
|
|
|||
|
Namespace: urn:ietf:params:xml:ns:caldav
|
|||
|
|
|||
|
Purpose: Specifies the calendar component types (e.g., VEVENT,
|
|||
|
VTODO, etc.) that calendar object resources can contain in the
|
|||
|
calendar collection.
|
|||
|
|
|||
|
Conformance: This property MAY be defined on any calendar
|
|||
|
collection. If defined, it MUST be protected and SHOULD NOT be
|
|||
|
returned by a PROPFIND DAV:allprop request (as defined in Section
|
|||
|
12.14.1 of [RFC2518]).
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 14]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
Description: The CALDAV:supported-calendar-component-set property is
|
|||
|
used to specify restrictions on the calendar component types that
|
|||
|
calendar object resources may contain in a calendar collection.
|
|||
|
Any attempt by the client to store calendar object resources with
|
|||
|
component types not listed in this property, if it exists, MUST
|
|||
|
result in an error, with the CALDAV:supported-calendar-component
|
|||
|
precondition (Section 5.3.2.1) being violated. Since this
|
|||
|
property is protected, it cannot be changed by clients using a
|
|||
|
PROPPATCH request. However, clients can initialize the value of
|
|||
|
this property when creating a new calendar collection with
|
|||
|
MKCALENDAR. The empty-element tag <C:comp name="VTIMEZONE"/> MUST
|
|||
|
only be specified if support for calendar object resources that
|
|||
|
only contain VTIMEZONE components is provided or desired. Support
|
|||
|
for VTIMEZONE components in calendar object resources that contain
|
|||
|
VEVENT or VTODO components is always assumed. In the absence of
|
|||
|
this property, the server MUST accept all component types, and the
|
|||
|
client can assume that all component types are accepted.
|
|||
|
|
|||
|
Definition:
|
|||
|
|
|||
|
<!ELEMENT supported-calendar-component-set (comp+)>
|
|||
|
|
|||
|
Example:
|
|||
|
|
|||
|
<C:supported-calendar-component-set
|
|||
|
xmlns:C="urn:ietf:params:xml:ns:caldav">
|
|||
|
<C:comp name="VEVENT"/>
|
|||
|
<C:comp name="VTODO"/>
|
|||
|
</C:supported-calendar-component-set>
|
|||
|
|
|||
|
5.2.4. CALDAV:supported-calendar-data Property
|
|||
|
|
|||
|
Name: supported-calendar-data
|
|||
|
|
|||
|
Namespace: urn:ietf:params:xml:ns:caldav
|
|||
|
|
|||
|
Purpose: Specifies what media types are allowed for calendar object
|
|||
|
resources in a calendar collection.
|
|||
|
|
|||
|
Conformance: This property MAY be defined on any calendar
|
|||
|
collection. If defined, it MUST be protected and SHOULD NOT be
|
|||
|
returned by a PROPFIND DAV:allprop request (as defined in Section
|
|||
|
12.14.1 of [RFC2518]).
|
|||
|
|
|||
|
Description: The CALDAV:supported-calendar-data property is used to
|
|||
|
specify the media type supported for the calendar object resources
|
|||
|
contained in a given calendar collection (e.g., iCalendar version
|
|||
|
2.0). Any attempt by the client to store calendar object
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 15]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
resources with a media type not listed in this property MUST
|
|||
|
result in an error, with the CALDAV:supported-calendar-data
|
|||
|
precondition (Section 5.3.2.1) being violated. In the absence of
|
|||
|
this property, the server MUST only accept data with the media
|
|||
|
type "text/calendar" and iCalendar version 2.0, and clients can
|
|||
|
assume that the server will only accept this data.
|
|||
|
|
|||
|
Definition:
|
|||
|
|
|||
|
<!ELEMENT supported-calendar-data (calendar-data+)>
|
|||
|
|
|||
|
Example:
|
|||
|
|
|||
|
<C:supported-calendar-data
|
|||
|
xmlns:C="urn:ietf:params:xml:ns:caldav">
|
|||
|
<C:calendar-data content-type="text/calendar" version="2.0"/>
|
|||
|
</C:supported-calendar-data>
|
|||
|
|
|||
|
5.2.5. CALDAV:max-resource-size Property
|
|||
|
|
|||
|
Name: max-resource-size
|
|||
|
|
|||
|
Namespace: urn:ietf:params:xml:ns:caldav
|
|||
|
|
|||
|
Purpose: Provides a numeric value indicating the maximum size of a
|
|||
|
resource in octets that the server is willing to accept when a
|
|||
|
calendar object resource is stored in a calendar collection.
|
|||
|
|
|||
|
Conformance: This property MAY be defined on any calendar
|
|||
|
collection. If defined, it MUST be protected and SHOULD NOT be
|
|||
|
returned by a PROPFIND DAV:allprop request (as defined in Section
|
|||
|
12.14.1 of [RFC2518]).
|
|||
|
|
|||
|
Description: The CALDAV:max-resource-size is used to specify a
|
|||
|
numeric value that represents the maximum size in octets that the
|
|||
|
server is willing to accept when a calendar object resource is
|
|||
|
stored in a calendar collection. Any attempt to store a calendar
|
|||
|
object resource exceeding this size MUST result in an error, with
|
|||
|
the CALDAV:max-resource-size precondition (Section 5.3.2.1) being
|
|||
|
violated. In the absence of this property, the client can assume
|
|||
|
that the server will allow storing a resource of any reasonable
|
|||
|
size.
|
|||
|
|
|||
|
Definition:
|
|||
|
|
|||
|
<!ELEMENT max-resource-size (#PCDATA)>
|
|||
|
PCDATA value: a numeric value (positive integer)
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 16]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
Example:
|
|||
|
|
|||
|
<C:max-resource-size xmlns:C="urn:ietf:params:xml:ns:caldav"
|
|||
|
>102400</C:max-resource-size>
|
|||
|
|
|||
|
5.2.6. CALDAV:min-date-time Property
|
|||
|
|
|||
|
Name: min-date-time
|
|||
|
|
|||
|
Namespace: urn:ietf:params:xml:ns:caldav
|
|||
|
|
|||
|
Purpose: Provides a DATE-TIME value indicating the earliest date and
|
|||
|
time (in UTC) that the server is willing to accept for any DATE or
|
|||
|
DATE-TIME value in a calendar object resource stored in a calendar
|
|||
|
collection.
|
|||
|
|
|||
|
Conformance: This property MAY be defined on any calendar
|
|||
|
collection. If defined, it MUST be protected and SHOULD NOT be
|
|||
|
returned by a PROPFIND DAV:allprop request (as defined in Section
|
|||
|
12.14.1 of [RFC2518]).
|
|||
|
|
|||
|
Description: The CALDAV:min-date-time is used to specify an
|
|||
|
iCalendar DATE-TIME value in UTC that indicates the earliest
|
|||
|
inclusive date that the server is willing to accept for any
|
|||
|
explicit DATE or DATE-TIME value in a calendar object resource
|
|||
|
stored in a calendar collection. Any attempt to store a calendar
|
|||
|
object resource using a DATE or DATE-TIME value earlier than this
|
|||
|
value MUST result in an error, with the CALDAV:min-date-time
|
|||
|
precondition (Section 5.3.2.1) being violated. Note that servers
|
|||
|
MUST accept recurring components that specify instances beyond
|
|||
|
this limit, provided none of those instances have been overridden.
|
|||
|
In that case, the server MAY simply ignore those instances outside
|
|||
|
of the acceptable range when processing reports on the calendar
|
|||
|
object resource. In the absence of this property, the client can
|
|||
|
assume any valid iCalendar date may be used at least up to the
|
|||
|
CALDAV:max-date-time value, if that is defined.
|
|||
|
|
|||
|
Definition:
|
|||
|
|
|||
|
<!ELEMENT min-date-time (#PCDATA)>
|
|||
|
PCDATA value: an iCalendar format DATE-TIME value in UTC
|
|||
|
|
|||
|
Example:
|
|||
|
|
|||
|
<C:min-date-time xmlns:C="urn:ietf:params:xml:ns:caldav"
|
|||
|
>19000101T000000Z</C:min-date-time>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 17]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
5.2.7. CALDAV:max-date-time Property
|
|||
|
|
|||
|
Name: max-date-time
|
|||
|
|
|||
|
Namespace: urn:ietf:params:xml:ns:caldav
|
|||
|
|
|||
|
Purpose: Provides a DATE-TIME value indicating the latest date and
|
|||
|
time (in UTC) that the server is willing to accept for any DATE or
|
|||
|
DATE-TIME value in a calendar object resource stored in a calendar
|
|||
|
collection.
|
|||
|
|
|||
|
Conformance: This property MAY be defined on any calendar
|
|||
|
collection. If defined, it MUST be protected and SHOULD NOT be
|
|||
|
returned by a PROPFIND DAV:allprop request (as defined in Section
|
|||
|
12.14.1 of [RFC2518]).
|
|||
|
|
|||
|
Description: The CALDAV:max-date-time is used to specify an
|
|||
|
iCalendar DATE-TIME value in UTC that indicates the inclusive
|
|||
|
latest date that the server is willing to accept for any date or
|
|||
|
time value in a calendar object resource stored in a calendar
|
|||
|
collection. Any attempt to store a calendar object resource using
|
|||
|
a DATE or DATE-TIME value later than this value MUST result in an
|
|||
|
error, with the CALDAV:max-date-time precondition
|
|||
|
(Section 5.3.2.1) being violated. Note that servers MUST accept
|
|||
|
recurring components that specify instances beyond this limit,
|
|||
|
provided none of those instances have been overridden. In that
|
|||
|
case, the server MAY simply ignore those instances outside of the
|
|||
|
acceptable range when processing reports on the calendar object
|
|||
|
resource. In the absence of this property, the client can assume
|
|||
|
any valid iCalendar date may be used at least down to the CALDAV:
|
|||
|
min-date-time value, if that is defined.
|
|||
|
|
|||
|
Definition:
|
|||
|
|
|||
|
<!ELEMENT max-date-time (#PCDATA)>
|
|||
|
PCDATA value: an iCalendar format DATE-TIME value in UTC
|
|||
|
|
|||
|
Example:
|
|||
|
|
|||
|
<C:max-date-time xmlns:C="urn:ietf:params:xml:ns:caldav"
|
|||
|
>20491231T235959Z</C:max-date-time>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 18]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
5.2.8. CALDAV:max-instances Property
|
|||
|
|
|||
|
Name: max-instances
|
|||
|
|
|||
|
Namespace: urn:ietf:params:xml:ns:caldav
|
|||
|
|
|||
|
Purpose: Provides a numeric value indicating the maximum number of
|
|||
|
recurrence instances that a calendar object resource stored in a
|
|||
|
calendar collection can generate.
|
|||
|
|
|||
|
Conformance: This property MAY be defined on any calendar
|
|||
|
collection. If defined, it MUST be protected and SHOULD NOT be
|
|||
|
returned by a PROPFIND DAV:allprop request (as defined in Section
|
|||
|
12.14.1 of [RFC2518]).
|
|||
|
|
|||
|
Description: The CALDAV:max-instances is used to specify a numeric
|
|||
|
value that indicates the maximum number of recurrence instances
|
|||
|
that a calendar object resource stored in a calendar collection
|
|||
|
can generate. Any attempt to store a calendar object resource
|
|||
|
with a recurrence pattern that generates more instances than this
|
|||
|
value MUST result in an error, with the CALDAV:max-instances
|
|||
|
precondition (Section 5.3.2.1) being violated. In the absence of
|
|||
|
this property, the client can assume that the server has no limits
|
|||
|
on the number of recurrence instances it can handle or expand.
|
|||
|
|
|||
|
Definition:
|
|||
|
|
|||
|
<!ELEMENT max-instances (#PCDATA)>
|
|||
|
PCDATA value: a numeric value (integer greater than zero)
|
|||
|
|
|||
|
Example:
|
|||
|
|
|||
|
<C:max-instances xmlns:C="urn:ietf:params:xml:ns:caldav"
|
|||
|
>100</C:max-instances>
|
|||
|
|
|||
|
5.2.9. CALDAV:max-attendees-per-instance Property
|
|||
|
|
|||
|
Name: max-attendees-per-instance
|
|||
|
|
|||
|
Namespace: urn:ietf:params:xml:ns:caldav
|
|||
|
|
|||
|
Purpose: Provides a numeric value indicating the maximum number of
|
|||
|
ATTENDEE properties in any instance of a calendar object resource
|
|||
|
stored in a calendar collection.
|
|||
|
|
|||
|
Conformance: This property MAY be defined on any calendar
|
|||
|
collection. If defined, it MUST be protected and SHOULD NOT be
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 19]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
returned by a PROPFIND DAV:allprop request (as defined in Section
|
|||
|
12.14.1 of [RFC2518]).
|
|||
|
|
|||
|
Description: The CALDAV:max-attendees-per-instance is used to
|
|||
|
specify a numeric value that indicates the maximum number of
|
|||
|
iCalendar ATTENDEE properties on any one instance of a calendar
|
|||
|
object resource stored in a calendar collection. Any attempt to
|
|||
|
store a calendar object resource with more ATTENDEE properties per
|
|||
|
instance than this value MUST result in an error, with the CALDAV:
|
|||
|
max-attendees-per-instance precondition (Section 5.3.2.1) being
|
|||
|
violated. In the absence of this property, the client can assume
|
|||
|
that the server can handle any number of ATTENDEE properties in a
|
|||
|
calendar component.
|
|||
|
|
|||
|
Definition:
|
|||
|
|
|||
|
<!ELEMENT max-attendees-per-instance (#PCDATA)>
|
|||
|
PCDATA value: a numeric value (integer greater than zero)
|
|||
|
|
|||
|
Example:
|
|||
|
|
|||
|
<C:max-attendees-per-instance
|
|||
|
xmlns:C="urn:ietf:params:xml:ns:caldav"
|
|||
|
>25</C:max-attendees-per-instance>
|
|||
|
|
|||
|
5.2.10. Additional Precondition for PROPPATCH
|
|||
|
|
|||
|
This specification requires an additional Precondition for the
|
|||
|
PROPPATCH method. The precondition is:
|
|||
|
|
|||
|
(CALDAV:valid-calendar-data): The time zone specified in CALDAV:
|
|||
|
calendar-timezone property MUST be a valid iCalendar object
|
|||
|
containing a single valid VTIMEZONE component.
|
|||
|
|
|||
|
5.3. Creating Resources
|
|||
|
|
|||
|
Calendar collections and calendar object resources may be created by
|
|||
|
either a CalDAV client or by the CalDAV server. This specification
|
|||
|
defines restrictions and a data model that both clients and servers
|
|||
|
MUST adhere to when manipulating such calendar data.
|
|||
|
|
|||
|
5.3.1. MKCALENDAR Method
|
|||
|
|
|||
|
An HTTP request using the MKCALENDAR method creates a new calendar
|
|||
|
collection resource. A server MAY restrict calendar collection
|
|||
|
creation to particular collections.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 20]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
Support for MKCALENDAR on the server is only RECOMMENDED and not
|
|||
|
REQUIRED because some calendar stores only support one calendar per
|
|||
|
user (or principal), and those are typically pre-created for each
|
|||
|
account. However, servers and clients are strongly encouraged to
|
|||
|
support MKCALENDAR whenever possible to allow users to create
|
|||
|
multiple calendar collections to help organize their data better.
|
|||
|
|
|||
|
Clients SHOULD use the DAV:displayname property for a human-readable
|
|||
|
name of the calendar. Clients can either specify the value of the
|
|||
|
DAV:displayname property in the request body of the MKCALENDAR
|
|||
|
request, or alternatively issue a PROPPATCH request to change the
|
|||
|
DAV:displayname property to the appropriate value immediately after
|
|||
|
issuing the MKCALENDAR request. Clients SHOULD NOT set the DAV:
|
|||
|
displayname property to be the same as any other calendar collection
|
|||
|
at the same URI "level". When displaying calendar collections to
|
|||
|
users, clients SHOULD check the DAV:displayname property and use that
|
|||
|
value as the name of the calendar. In the event that the DAV:
|
|||
|
displayname property is empty, the client MAY use the last part of
|
|||
|
the calendar collection URI as the name; however, that path segment
|
|||
|
may be "opaque" and not represent any meaningful human-readable text.
|
|||
|
|
|||
|
If a MKCALENDAR request fails, the server state preceding the request
|
|||
|
MUST be restored.
|
|||
|
|
|||
|
Marshalling:
|
|||
|
If a request body is included, it MUST be a CALDAV:mkcalendar XML
|
|||
|
element. Instruction processing MUST occur in the order
|
|||
|
instructions are received (i.e., from top to bottom).
|
|||
|
Instructions MUST either all be executed or none executed. Thus,
|
|||
|
if any error occurs during processing, all executed instructions
|
|||
|
MUST be undone and a proper error result returned. Instruction
|
|||
|
processing details can be found in the definition of the DAV:set
|
|||
|
instruction in Section 12.13.2 of [RFC2518].
|
|||
|
|
|||
|
<!ELEMENT mkcalendar (DAV:set)>
|
|||
|
|
|||
|
If a response body for a successful request is included, it MUST
|
|||
|
be a CALDAV:mkcalendar-response XML element.
|
|||
|
|
|||
|
<!ELEMENT mkcalendar-response ANY>
|
|||
|
|
|||
|
The response MUST include a Cache-Control:no-cache header.
|
|||
|
|
|||
|
Preconditions:
|
|||
|
|
|||
|
(DAV:resource-must-be-null): A resource MUST NOT exist at the
|
|||
|
Request-URI;
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 21]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
(CALDAV:calendar-collection-location-ok): The Request-URI MUST
|
|||
|
identify a location where a calendar collection can be created;
|
|||
|
|
|||
|
(CALDAV:valid-calendar-data): The time zone specified in the
|
|||
|
CALDAV:calendar-timezone property MUST be a valid iCalendar object
|
|||
|
containing a single valid VTIMEZONE component;
|
|||
|
|
|||
|
(DAV:needs-privilege): The DAV:bind privilege MUST be granted to
|
|||
|
the current user on the parent collection of the Request-URI.
|
|||
|
|
|||
|
Postconditions:
|
|||
|
|
|||
|
(CALDAV:initialize-calendar-collection): A new calendar collection
|
|||
|
exists at the Request-URI. The DAV:resourcetype of the calendar
|
|||
|
collection MUST contain both DAV:collection and CALDAV:calendar
|
|||
|
XML elements.
|
|||
|
|
|||
|
5.3.1.1. Status Codes
|
|||
|
|
|||
|
The following are examples of response codes one would expect to get
|
|||
|
in a response to a MKCALENDAR request. Note that this list is by no
|
|||
|
means exhaustive.
|
|||
|
|
|||
|
201 (Created) - The calendar collection resource was created in
|
|||
|
its entirety;
|
|||
|
|
|||
|
207 (Multi-Status) - The calendar collection resource was not
|
|||
|
created since one or more DAV:set instructions specified in the
|
|||
|
request body could not be processed successfully. The following
|
|||
|
are examples of response codes one would expect to be used in a
|
|||
|
207 (Multi-Status) response in this situation:
|
|||
|
|
|||
|
403 (Forbidden) - The client, for reasons the server chooses
|
|||
|
not to specify, cannot alter one of the properties;
|
|||
|
|
|||
|
409 (Conflict) - The client has provided a value whose
|
|||
|
semantics are not appropriate for the property. This includes
|
|||
|
trying to set read-only properties;
|
|||
|
|
|||
|
424 (Failed Dependency) - The DAV:set instruction on the
|
|||
|
specified resource would have succeeded if it were not for the
|
|||
|
failure of another DAV:set instruction specified in the request
|
|||
|
body;
|
|||
|
|
|||
|
423 (Locked) - The specified resource is locked and the client
|
|||
|
either is not a lock owner or the lock type requires a lock
|
|||
|
token to be submitted and the client did not submit it; and
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 22]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
507 (Insufficient Storage) - The server did not have sufficient
|
|||
|
space to record the property;
|
|||
|
|
|||
|
403 (Forbidden) - This indicates at least one of two conditions:
|
|||
|
1) the server does not allow the creation of calendar collections
|
|||
|
at the given location in its namespace, or 2) the parent
|
|||
|
collection of the Request-URI exists but cannot accept members;
|
|||
|
|
|||
|
409 (Conflict) - A collection cannot be made at the Request-URI
|
|||
|
until one or more intermediate collections have been created;
|
|||
|
|
|||
|
415 (Unsupported Media Type) - The server does not support the
|
|||
|
request type of the body; and
|
|||
|
|
|||
|
507 (Insufficient Storage) - The resource does not have sufficient
|
|||
|
space to record the state of the resource after the execution of
|
|||
|
this method.
|
|||
|
|
|||
|
5.3.1.2. Example: Successful MKCALENDAR Request
|
|||
|
|
|||
|
This example creates a calendar collection called /home/lisa/
|
|||
|
calendars/events/ on the server cal.example.com with specific values
|
|||
|
for the properties DAV:displayname, CALDAV:calendar-description,
|
|||
|
CALDAV:supported-calendar-component-set, and CALDAV:calendar-
|
|||
|
timezone.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 23]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
>> Request <<
|
|||
|
|
|||
|
MKCALENDAR /home/lisa/calendars/events/ HTTP/1.1
|
|||
|
Host: cal.example.com
|
|||
|
Content-Type: application/xml; charset="utf-8"
|
|||
|
Content-Length: xxxx
|
|||
|
|
|||
|
<?xml version="1.0" encoding="utf-8" ?>
|
|||
|
<C:mkcalendar xmlns:D="DAV:"
|
|||
|
xmlns:C="urn:ietf:params:xml:ns:caldav">
|
|||
|
<D:set>
|
|||
|
<D:prop>
|
|||
|
<D:displayname>Lisa's Events</D:displayname>
|
|||
|
<C:calendar-description xml:lang="en"
|
|||
|
>Calendar restricted to events.</C:calendar-description>
|
|||
|
<C:supported-calendar-component-set>
|
|||
|
<C:comp name="VEVENT"/>
|
|||
|
</C:supported-calendar-component-set>
|
|||
|
<C:calendar-timezone><![CDATA[BEGIN:VCALENDAR
|
|||
|
PRODID:-//Example Corp.//CalDAV Client//EN
|
|||
|
VERSION:2.0
|
|||
|
BEGIN:VTIMEZONE
|
|||
|
TZID:US-Eastern
|
|||
|
LAST-MODIFIED:19870101T000000Z
|
|||
|
BEGIN:STANDARD
|
|||
|
DTSTART:19671029T020000
|
|||
|
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
|
|||
|
TZOFFSETFROM:-0400
|
|||
|
TZOFFSETTO:-0500
|
|||
|
TZNAME:Eastern Standard Time (US & Canada)
|
|||
|
END:STANDARD
|
|||
|
BEGIN:DAYLIGHT
|
|||
|
DTSTART:19870405T020000
|
|||
|
RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
|
|||
|
TZOFFSETFROM:-0500
|
|||
|
TZOFFSETTO:-0400
|
|||
|
TZNAME:Eastern Daylight Time (US & Canada)
|
|||
|
END:DAYLIGHT
|
|||
|
END:VTIMEZONE
|
|||
|
END:VCALENDAR
|
|||
|
]]></C:calendar-timezone>
|
|||
|
</D:prop>
|
|||
|
</D:set>
|
|||
|
</C:mkcalendar>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 24]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
>> Response <<
|
|||
|
|
|||
|
HTTP/1.1 201 Created
|
|||
|
Cache-Control: no-cache
|
|||
|
Date: Sat, 11 Nov 2006 09:32:12 GMT
|
|||
|
Content-Length: 0
|
|||
|
|
|||
|
5.3.2. Creating Calendar Object Resources
|
|||
|
|
|||
|
Clients populate calendar collections with calendar object resources.
|
|||
|
The URL for each calendar object resource is entirely arbitrary and
|
|||
|
does not need to bear a specific relationship to the calendar object
|
|||
|
resource's iCalendar properties or other metadata. New calendar
|
|||
|
object resources MUST be created with a PUT request targeted at an
|
|||
|
unmapped URI. A PUT request targeted at a mapped URI updates an
|
|||
|
existing calendar object resource.
|
|||
|
|
|||
|
When servers create new resources, it's not hard for the server to
|
|||
|
choose an unmapped URI. It's slightly tougher for clients, because a
|
|||
|
client might not want to examine all resources in the collection and
|
|||
|
might not want to lock the entire collection to ensure that a new
|
|||
|
resource isn't created with a name collision. However, there is an
|
|||
|
HTTP feature to mitigate this. If the client intends to create a new
|
|||
|
non-collection resource, such as a new VEVENT, the client SHOULD use
|
|||
|
the HTTP request header "If-None-Match: *" on the PUT request. The
|
|||
|
Request-URI on the PUT request MUST include the target collection,
|
|||
|
where the resource is to be created, plus the name of the resource in
|
|||
|
the last path segment. The "If-None-Match: *" request header ensures
|
|||
|
that the client will not inadvertently overwrite an existing resource
|
|||
|
if the last path segment turned out to already be used.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 25]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
>> Request <<
|
|||
|
|
|||
|
PUT /home/lisa/calendars/events/qwue23489.ics HTTP/1.1
|
|||
|
If-None-Match: *
|
|||
|
Host: cal.example.com
|
|||
|
Content-Type: text/calendar
|
|||
|
Content-Length: xxxx
|
|||
|
|
|||
|
BEGIN:VCALENDAR
|
|||
|
VERSION:2.0
|
|||
|
PRODID:-//Example Corp.//CalDAV Client//EN
|
|||
|
BEGIN:VEVENT
|
|||
|
UID:20010712T182145Z-123401@example.com
|
|||
|
DTSTAMP:20060712T182145Z
|
|||
|
DTSTART:20060714T170000Z
|
|||
|
DTEND:20060715T040000Z
|
|||
|
SUMMARY:Bastille Day Party
|
|||
|
END:VEVENT
|
|||
|
END:VCALENDAR
|
|||
|
|
|||
|
>> Response <<
|
|||
|
|
|||
|
HTTP/1.1 201 Created
|
|||
|
Content-Length: 0
|
|||
|
Date: Sat, 11 Nov 2006 09:32:12 GMT
|
|||
|
ETag: "123456789-000-111"
|
|||
|
|
|||
|
The request to change an existing event is the same, but with a
|
|||
|
specific ETag in the "If-Match" header, rather than the "If-None-
|
|||
|
Match" header.
|
|||
|
|
|||
|
As indicated in Section 3.10 of [RFC2445], the URL of calendar object
|
|||
|
resources containing (an arbitrary set of) calendaring and scheduling
|
|||
|
information may be suffixed by ".ics", and the URL of calendar object
|
|||
|
resources containing free or busy time information may be suffixed by
|
|||
|
".ifb".
|
|||
|
|
|||
|
5.3.2.1. Additional Preconditions for PUT, COPY, and MOVE
|
|||
|
|
|||
|
This specification creates additional Preconditions for PUT, COPY,
|
|||
|
and MOVE methods. These preconditions apply when a PUT operation of
|
|||
|
a calendar object resource into a calendar collection occurs, or when
|
|||
|
a COPY or MOVE operation of a calendar object resource into a
|
|||
|
calendar collection occurs, or when a COPY or MOVE operation occurs
|
|||
|
on a calendar collection.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 26]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
The new preconditions are:
|
|||
|
|
|||
|
(CALDAV:supported-calendar-data): The resource submitted in the
|
|||
|
PUT request, or targeted by a COPY or MOVE request, MUST be a
|
|||
|
supported media type (i.e., iCalendar) for calendar object
|
|||
|
resources;
|
|||
|
|
|||
|
(CALDAV:valid-calendar-data): The resource submitted in the PUT
|
|||
|
request, or targeted by a COPY or MOVE request, MUST be valid data
|
|||
|
for the media type being specified (i.e., MUST contain valid
|
|||
|
iCalendar data);
|
|||
|
|
|||
|
(CALDAV:valid-calendar-object-resource): The resource submitted in
|
|||
|
the PUT request, or targeted by a COPY or MOVE request, MUST obey
|
|||
|
all restrictions specified in Section 4.1 (e.g., calendar object
|
|||
|
resources MUST NOT contain more than one type of calendar
|
|||
|
component, calendar object resources MUST NOT specify the
|
|||
|
iCalendar METHOD property, etc.);
|
|||
|
|
|||
|
(CALDAV:supported-calendar-component): The resource submitted in
|
|||
|
the PUT request, or targeted by a COPY or MOVE request, MUST
|
|||
|
contain a type of calendar component that is supported in the
|
|||
|
targeted calendar collection;
|
|||
|
|
|||
|
(CALDAV:no-uid-conflict): The resource submitted in the PUT
|
|||
|
request, or targeted by a COPY or MOVE request, MUST NOT specify
|
|||
|
an iCalendar UID property value already in use in the targeted
|
|||
|
calendar collection or overwrite an existing calendar object
|
|||
|
resource with one that has a different UID property value.
|
|||
|
Servers SHOULD report the URL of the resource that is already
|
|||
|
making use of the same UID property value in the DAV:href element;
|
|||
|
|
|||
|
<!ELEMENT no-uid-conflict (DAV:href)>
|
|||
|
|
|||
|
(CALDAV:calendar-collection-location-ok): In a COPY or MOVE
|
|||
|
request, when the Request-URI is a calendar collection, the
|
|||
|
Destination-URI MUST identify a location where a calendar
|
|||
|
collection can be created;
|
|||
|
|
|||
|
(CALDAV:max-resource-size): The resource submitted in the PUT
|
|||
|
request, or targeted by a COPY or MOVE request, MUST have an octet
|
|||
|
size less than or equal to the value of the CALDAV:max-resource-
|
|||
|
size property value (Section 5.2.5) on the calendar collection
|
|||
|
where the resource will be stored;
|
|||
|
|
|||
|
(CALDAV:min-date-time): The resource submitted in the PUT request,
|
|||
|
or targeted by a COPY or MOVE request, MUST have all of its
|
|||
|
iCalendar DATE or DATE-TIME property values (for each recurring
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 27]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
instance) greater than or equal to the value of the CALDAV:min-
|
|||
|
date-time property value (Section 5.2.6) on the calendar
|
|||
|
collection where the resource will be stored;
|
|||
|
|
|||
|
(CALDAV:max-date-time): The resource submitted in the PUT request,
|
|||
|
or targeted by a COPY or MOVE request, MUST have all of its
|
|||
|
iCalendar DATE or DATE-TIME property values (for each recurring
|
|||
|
instance) less than the value of the CALDAV:max-date-time property
|
|||
|
value (Section 5.2.7) on the calendar collection where the
|
|||
|
resource will be stored;
|
|||
|
|
|||
|
(CALDAV:max-instances): The resource submitted in the PUT request,
|
|||
|
or targeted by a COPY or MOVE request, MUST generate a number of
|
|||
|
recurring instances less than or equal to the value of the CALDAV:
|
|||
|
max-instances property value (Section 5.2.8) on the calendar
|
|||
|
collection where the resource will be stored;
|
|||
|
|
|||
|
(CALDAV:max-attendees-per-instance): The resource submitted in the
|
|||
|
PUT request, or targeted by a COPY or MOVE request, MUST have a
|
|||
|
number of ATTENDEE properties on any one instance less than or
|
|||
|
equal to the value of the CALDAV:max-attendees-per-instance
|
|||
|
property value (Section 5.2.9) on the calendar collection where
|
|||
|
the resource will be stored;
|
|||
|
|
|||
|
5.3.3. Non-Standard Components, Properties, and Parameters
|
|||
|
|
|||
|
iCalendar provides a "standard mechanism for doing non-standard
|
|||
|
things". This extension support allows implementers to make use of
|
|||
|
non-standard components, properties, and parameters whose names are
|
|||
|
prefixed with the text "X-".
|
|||
|
|
|||
|
Servers MUST support the use of non-standard components, properties,
|
|||
|
and parameters in calendar object resources stored via the PUT
|
|||
|
method.
|
|||
|
|
|||
|
Servers may need to enforce rules for their own "private" components,
|
|||
|
properties, or parameters, so servers MAY reject any attempt by the
|
|||
|
client to change those or use values for those outside of any
|
|||
|
restrictions the server may have. Servers SHOULD ensure that any
|
|||
|
"private" components, properties, or parameters it uses follow the
|
|||
|
convention of including a vendor id in the "X-" name, as described in
|
|||
|
Section 4.2 of [RFC2445], e.g., "X-ABC-PRIVATE".
|
|||
|
|
|||
|
5.3.4. Calendar Object Resource Entity Tag
|
|||
|
|
|||
|
The DAV:getetag property MUST be defined and set to a strong entity
|
|||
|
tag on all calendar object resources.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 28]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
A response to a GET request targeted at a calendar object resource
|
|||
|
MUST contain an ETag response header field indicating the current
|
|||
|
value of the strong entity tag of the calendar object resource.
|
|||
|
|
|||
|
Servers SHOULD return a strong entity tag (ETag header) in a PUT
|
|||
|
response when the stored calendar object resource is equivalent by
|
|||
|
octet equality to the calendar object resource submitted in the body
|
|||
|
of the PUT request. This allows clients to reliably use the returned
|
|||
|
strong entity tag for data synchronization purposes. For instance,
|
|||
|
the client can do a PROPFIND request on the stored calendar object
|
|||
|
resource and have the DAV:getetag property returned, and compare that
|
|||
|
value with the strong entity tag it received on the PUT response, and
|
|||
|
know that if they are equal, then the calendar object resource on the
|
|||
|
server has not been changed.
|
|||
|
|
|||
|
In the case where the data stored by a server as a result of a PUT
|
|||
|
request is not equivalent by octet equality to the submitted calendar
|
|||
|
object resource, the behavior of the ETag response header is not
|
|||
|
specified here, with the exception that a strong entity tag MUST NOT
|
|||
|
be returned in the response. As a result, clients may need to
|
|||
|
retrieve the modified calendar object resource (and ETag) as a basis
|
|||
|
for further changes, rather than use the calendar object resource it
|
|||
|
had sent with the PUT request.
|
|||
|
|
|||
|
6. Calendaring Access Control
|
|||
|
|
|||
|
6.1. Calendaring Privilege
|
|||
|
|
|||
|
CalDAV servers MUST support and adhere to the requirements of WebDAV
|
|||
|
ACL [RFC3744]. WebDAV ACL provides a framework for an extensible set
|
|||
|
of privileges that can be applied to WebDAV collections and ordinary
|
|||
|
resources. CalDAV servers MUST also support the calendaring
|
|||
|
privilege defined in this section.
|
|||
|
|
|||
|
6.1.1. CALDAV:read-free-busy Privilege
|
|||
|
|
|||
|
Calendar users often wish to allow other users to see their busy time
|
|||
|
information, without viewing the other details of the calendar
|
|||
|
components (e.g., location, summary, attendees). This allows a
|
|||
|
significant amount of privacy while still allowing other users to
|
|||
|
schedule meetings at times when the user is likely to be free.
|
|||
|
|
|||
|
The CALDAV:read-free-busy privilege controls which calendar
|
|||
|
collections, regular collections, and calendar object resources are
|
|||
|
examined when a CALDAV:free-busy-query REPORT request is processed
|
|||
|
(see Section 7.10). This privilege can be granted on calendar
|
|||
|
collections, regular collections, or calendar object resources.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 29]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
Servers MUST support this privilege on all calendar collections,
|
|||
|
regular collections, and calendar object resources.
|
|||
|
|
|||
|
|
|||
|
<!ELEMENT read-free-busy EMPTY>
|
|||
|
|
|||
|
The CALDAV:read-free-busy privilege MUST be aggregated in the DAV:
|
|||
|
read privilege. Servers MUST allow the CALDAV:read-free-busy to be
|
|||
|
granted without the DAV:read privilege being granted.
|
|||
|
|
|||
|
Clients should note that when only the CALDAV:read-free-busy
|
|||
|
privilege has been granted on a resource, access to GET, HEAD,
|
|||
|
OPTIONS, and PROPFIND on the resource is not implied (those
|
|||
|
operations are governed by the DAV:read privilege).
|
|||
|
|
|||
|
6.2. Additional Principal Property
|
|||
|
|
|||
|
This section defines an additional property for WebDAV principal
|
|||
|
resources, as defined in [RFC3744].
|
|||
|
|
|||
|
6.2.1. CALDAV:calendar-home-set Property
|
|||
|
|
|||
|
Name: calendar-home-set
|
|||
|
|
|||
|
Namespace: urn:ietf:params:xml:ns:caldav
|
|||
|
|
|||
|
Purpose: Identifies the URL of any WebDAV collections that contain
|
|||
|
calendar collections owned by the associated principal resource.
|
|||
|
|
|||
|
Conformance: This property SHOULD be defined on a principal
|
|||
|
resource. If defined, it MAY be protected and SHOULD NOT be
|
|||
|
returned by a PROPFIND DAV:allprop request (as defined in Section
|
|||
|
12.14.1 of [RFC2518]).
|
|||
|
|
|||
|
Description: The CALDAV:calendar-home-set property is meant to allow
|
|||
|
users to easily find the calendar collections owned by the
|
|||
|
principal. Typically, users will group all the calendar
|
|||
|
collections that they own under a common collection. This
|
|||
|
property specifies the URL of collections that are either calendar
|
|||
|
collections or ordinary collections that have child or descendant
|
|||
|
calendar collections owned by the principal.
|
|||
|
|
|||
|
Definition:
|
|||
|
|
|||
|
<!ELEMENT calendar-home-set (DAV:href*)>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 30]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
Example:
|
|||
|
|
|||
|
<C:calendar-home-set xmlns:D="DAV:"
|
|||
|
xmlns:C="urn:ietf:params:xml:ns:caldav">
|
|||
|
<D:href>http://cal.example.com/home/bernard/calendars/</D:href>
|
|||
|
</C:calendar-home-set>
|
|||
|
|
|||
|
7. Calendaring Reports
|
|||
|
|
|||
|
This section defines the reports that CalDAV servers MUST support on
|
|||
|
calendar collections and calendar object resources.
|
|||
|
|
|||
|
CalDAV servers MUST advertise support for these reports on all
|
|||
|
calendar collections and calendar object resources with the DAV:
|
|||
|
supported-report-set property, defined in Section 3.1.5 of [RFC3253].
|
|||
|
CalDAV servers MAY also advertise support for these reports on
|
|||
|
ordinary collections.
|
|||
|
|
|||
|
Some of these reports allow calendar data (from possibly multiple
|
|||
|
resources) to be returned.
|
|||
|
|
|||
|
7.1. REPORT Method
|
|||
|
|
|||
|
The REPORT method (defined in Section 3.6 of [RFC3253]) provides an
|
|||
|
extensible mechanism for obtaining information about one or more
|
|||
|
resources. Unlike the PROPFIND method, which returns the value of
|
|||
|
one or more named properties, the REPORT method can involve more
|
|||
|
complex processing. REPORT is valuable in cases where the server has
|
|||
|
access to all of the information needed to perform the complex
|
|||
|
request (such as a query), and where it would require multiple
|
|||
|
requests for the client to retrieve the information needed to perform
|
|||
|
the same request.
|
|||
|
|
|||
|
CalDAV servers MUST support the DAV:expand-property REPORT defined in
|
|||
|
Section 3.8 of [RFC3253].
|
|||
|
|
|||
|
7.2. Ordinary Collections
|
|||
|
|
|||
|
Servers MAY support the reports defined in this document on ordinary
|
|||
|
collections (collections that are not calendar collections), in
|
|||
|
addition to calendar collections or calendar object resources. In
|
|||
|
computing responses to the reports on ordinary collections, servers
|
|||
|
MUST only consider calendar object resources contained in calendar
|
|||
|
collections that are targeted by the REPORT request, based on the
|
|||
|
value of the Depth request header.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 31]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
7.3. Date and Floating Time
|
|||
|
|
|||
|
iCalendar provides a way to specify DATE and DATE-TIME values that
|
|||
|
are not bound to any time zone in particular, hereafter called
|
|||
|
"floating date" and "floating time", respectively. These values are
|
|||
|
used to represent the same day, hour, minute, and second value,
|
|||
|
regardless of which time zone is being observed. For instance, the
|
|||
|
DATE value "20051111", represents November 11, 2005 in no specific
|
|||
|
time zone, while the DATE-TIME value "20051111T111100" represents
|
|||
|
November 11, 2005, at 11:11 A.M. in no specific time zone.
|
|||
|
|
|||
|
CalDAV servers may need to convert "floating date" and "floating
|
|||
|
time" values in date with UTC time values in the processing of
|
|||
|
calendaring REPORT requests.
|
|||
|
|
|||
|
For the CALDAV:calendar-query REPORT, CalDAV servers MUST rely on the
|
|||
|
value of the CALDAV:timezone XML element, if specified as part of the
|
|||
|
request body, to perform the proper conversion of "floating date" and
|
|||
|
"floating time" values to date with UTC time values. If the CALDAV:
|
|||
|
timezone XML element is not specified in the request body, CalDAV
|
|||
|
servers MUST rely on the value of the CALDAV:calendar-timezone
|
|||
|
property, if defined, or else the CalDAV servers MAY rely on the time
|
|||
|
zone of their choice.
|
|||
|
|
|||
|
For the CALDAV:free-busy-query REPORT, CalDAV servers MUST rely on
|
|||
|
the value of the CALDAV:calendar-timezone property, if defined, to
|
|||
|
compute the proper FREEBUSY time period value as date with UTC time
|
|||
|
for calendar components scheduled with "floating date" or "floating
|
|||
|
time". If the CALDAV:calendar-timezone property is not defined,
|
|||
|
CalDAV servers MAY rely on the time zone of their choice.
|
|||
|
|
|||
|
7.4. Time Range Filtering
|
|||
|
|
|||
|
Some of the reports defined in this section can include a time range
|
|||
|
filter that is used to restrict the set of calendar object resources
|
|||
|
returned to just those that overlap the specified time range. The
|
|||
|
time range filter can be applied to a calendar component as a whole,
|
|||
|
or to specific calendar component properties with DATE or DATE-TIME
|
|||
|
value types.
|
|||
|
|
|||
|
To determine whether a calendar object resource matches the time
|
|||
|
range filter element, the start and end times for the targeted
|
|||
|
component or property are determined and then compared to the
|
|||
|
requested time range. If there is an overlap with the requested time
|
|||
|
range, then the calendar object resource matches the filter element.
|
|||
|
The rules defined in [RFC2445] for determining the actual start and
|
|||
|
end times of calendar components MUST be used, and these are fully
|
|||
|
enumerated in Section 9.9 of this document.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 32]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
When such time range filtering is used, special consideration must be
|
|||
|
given to recurring calendar components, such as VEVENT and VTODO.
|
|||
|
The server MUST expand recurring components to determine whether any
|
|||
|
recurrence instances overlap the specified time range. If one or
|
|||
|
more recurrence instances overlap the time range, then the calendar
|
|||
|
object resource matches the filter element.
|
|||
|
|
|||
|
7.5. Searching Text: Collations
|
|||
|
|
|||
|
Some of the reports defined in this section do text matches of
|
|||
|
character strings provided by the client and are compared to stored
|
|||
|
calendar data. Since iCalendar data is, by default, encoded in the
|
|||
|
UTF-8 charset and may include characters outside the US-ASCII charset
|
|||
|
range in some property and parameter values, there is a need to
|
|||
|
ensure that text matching follows well-defined rules.
|
|||
|
|
|||
|
To deal with this, this specification makes use of the IANA Collation
|
|||
|
Registry defined in [RFC4790] to specify collations that may be used
|
|||
|
to carry out the text comparison operations with a well-defined rule.
|
|||
|
|
|||
|
The comparisons used in CalDAV are all "substring" matches, as per
|
|||
|
[RFC4790], Section 4.2. Collations supported by the server MUST
|
|||
|
support "substring" match operations.
|
|||
|
|
|||
|
CalDAV servers are REQUIRED to support the "i;ascii-casemap" and
|
|||
|
"i;octet" collations, as described in [RFC4790], and MAY support
|
|||
|
other collations.
|
|||
|
|
|||
|
Servers MUST advertise the set of collations that they support via
|
|||
|
the CALDAV:supported-collation-set property defined on any resource
|
|||
|
that supports reports that use collations.
|
|||
|
|
|||
|
Clients MUST only use collations from the list advertised by the
|
|||
|
server.
|
|||
|
|
|||
|
In the absence of a collation explicitly specified by the client, or
|
|||
|
if the client specifies the "default" collation identifier (as
|
|||
|
defined in [RFC4790], Section 3.1), the server MUST default to using
|
|||
|
"i;ascii-casemap" as the collation.
|
|||
|
|
|||
|
Wildcards (as defined in [RFC4790], Section 3.2) MUST NOT be used in
|
|||
|
the collation identifier.
|
|||
|
|
|||
|
If the client chooses a collation not supported by the server, the
|
|||
|
server MUST respond with a CALDAV:supported-collation precondition
|
|||
|
error response.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 33]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
7.5.1. CALDAV:supported-collation-set Property
|
|||
|
|
|||
|
Name: supported-collation-set
|
|||
|
|
|||
|
Namespace: urn:ietf:params:xml:ns:caldav
|
|||
|
|
|||
|
Purpose: Identifies the set of collations supported by the server
|
|||
|
for text matching operations.
|
|||
|
|
|||
|
Conformance: This property MUST be defined on any resource that
|
|||
|
supports a report that does text matching. If defined, it MUST be
|
|||
|
protected and SHOULD NOT be returned by a PROPFIND DAV:allprop
|
|||
|
request (as defined in Section 12.14.1 of [RFC2518]).
|
|||
|
|
|||
|
Description: The CALDAV:supported-collation-set property contains
|
|||
|
zero or more CALDAV:supported-collation elements, which specify
|
|||
|
the collection identifiers of the collations supported by the
|
|||
|
server.
|
|||
|
|
|||
|
Definition:
|
|||
|
|
|||
|
<!ELEMENT supported-collation-set (supported-collation*)>
|
|||
|
|
|||
|
<!ELEMENT supported-collation (#PCDATA)>
|
|||
|
|
|||
|
Example:
|
|||
|
|
|||
|
<C:supported-collation-set
|
|||
|
xmlns:C="urn:ietf:params:xml:ns:caldav">
|
|||
|
<C:supported-collation>i;ascii-casemap</C:supported-collation>
|
|||
|
<C:supported-collation>i;octet</C:supported-collation>
|
|||
|
</C:supported-collation-set>
|
|||
|
|
|||
|
7.6. Partial Retrieval
|
|||
|
|
|||
|
Some calendaring reports defined in this document allow partial
|
|||
|
retrieval of calendar object resources. A CalDAV client can specify
|
|||
|
what information to return in the body of a calendaring REPORT
|
|||
|
request.
|
|||
|
|
|||
|
A CalDAV client can request particular WebDAV property values, all
|
|||
|
WebDAV property values, or a list of the names of the resource's
|
|||
|
WebDAV properties. A CalDAV client can also request calendar data to
|
|||
|
be returned and specify whether all calendar components and
|
|||
|
properties should be returned, or only particular ones. See CALDAV:
|
|||
|
calendar-data in Section 9.6.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 34]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
By default, the returned calendar data will include the component
|
|||
|
that defines the recurrence set, referred to as the "master
|
|||
|
component", as well as the components that define exceptions to the
|
|||
|
recurrence set, referred to as the "overridden components".
|
|||
|
|
|||
|
A CalDAV client that is only interested in the recurrence instances
|
|||
|
that overlap a specified time range can request to receive only the
|
|||
|
"master component", along with the "overridden components" that
|
|||
|
impact the specified time range, and thus, limit the data returned by
|
|||
|
the server (see CALDAV:limit-recurrence-set in Section 9.6.6). An
|
|||
|
overridden component impacts a time range if its current start and
|
|||
|
end times overlap the time range, or if the original start and end
|
|||
|
times -- the ones that would have been used if the instance were not
|
|||
|
overridden -- overlap the time range, or if it affects other
|
|||
|
instances that overlap the time range.
|
|||
|
|
|||
|
A CalDAV client with no support for recurrence properties (i.e.,
|
|||
|
EXDATE, EXRULE, RDATE, and RRULE) and possibly VTIMEZONE components,
|
|||
|
or a client unwilling to perform recurrence expansion because of
|
|||
|
limited processing capability, can request to receive only the
|
|||
|
recurrence instances that overlap a specified time range as separate
|
|||
|
calendar components that each define exactly one recurrence instance
|
|||
|
(see CALDAV:expand in Section 9.6.5.)
|
|||
|
|
|||
|
Finally, in the case of VFREEBUSY components, a CalDAV client can
|
|||
|
request to receive only the FREEBUSY property values that overlap a
|
|||
|
specified time range (see CALDAV:limit-freebusy-set in
|
|||
|
Section 9.6.7.)
|
|||
|
|
|||
|
7.7. Non-Standard Components, Properties, and Parameters
|
|||
|
|
|||
|
Servers MUST support the use of non-standard component, property, or
|
|||
|
parameter names in the CALDAV:calendar-data XML element in
|
|||
|
calendaring REPORT requests to allow clients to request that non-
|
|||
|
standard components, properties, and parameters be returned in the
|
|||
|
calendar data provided in the response.
|
|||
|
|
|||
|
Servers MAY support the use of non-standard component, property, or
|
|||
|
parameter names in the CALDAV:comp-filter, CALDAV:prop-filter, and
|
|||
|
CALDAV:param-filter XML elements specified in the CALDAV:filter XML
|
|||
|
element of calendaring REPORT requests.
|
|||
|
|
|||
|
Servers MUST fail with the CALDAV:supported-filter precondition if a
|
|||
|
calendaring REPORT request uses a CALDAV:comp-filter, CALDAV:prop-
|
|||
|
filter, or CALDAV:param-filter XML element that makes reference to a
|
|||
|
non-standard component, property, or parameter name on which the
|
|||
|
server does not support queries.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 35]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
7.8. CALDAV:calendar-query REPORT
|
|||
|
|
|||
|
The CALDAV:calendar-query REPORT performs a search for all calendar
|
|||
|
object resources that match a specified filter. The response of this
|
|||
|
report will contain all the WebDAV properties and calendar object
|
|||
|
resource data specified in the request. In the case of the CALDAV:
|
|||
|
calendar-data XML element, one can explicitly specify the calendar
|
|||
|
components and properties that should be returned in the calendar
|
|||
|
object resource data that matches the filter.
|
|||
|
|
|||
|
The format of this report is modeled on the PROPFIND method. The
|
|||
|
request and response bodies of the CALDAV:calendar-query REPORT use
|
|||
|
XML elements that are also used by PROPFIND. In particular, the
|
|||
|
request can include XML elements to request WebDAV properties to be
|
|||
|
returned. When that occurs, the response should follow the same
|
|||
|
behavior as PROPFIND with respect to the DAV:multistatus response
|
|||
|
elements used to return specific property results. For instance, a
|
|||
|
request to retrieve the value of a property that does not exist is an
|
|||
|
error and MUST be noted with a response XML element that contains a
|
|||
|
404 (Not Found) status value.
|
|||
|
|
|||
|
Support for the CALDAV:calendar-query REPORT is REQUIRED.
|
|||
|
|
|||
|
Marshalling:
|
|||
|
|
|||
|
The request body MUST be a CALDAV:calendar-query XML element, as
|
|||
|
defined in Section 9.5.
|
|||
|
|
|||
|
The request MAY include a Depth header. If no Depth header is
|
|||
|
included, Depth:0 is assumed.
|
|||
|
|
|||
|
The response body for a successful request MUST be a DAV:
|
|||
|
multistatus XML element (i.e., the response uses the same format
|
|||
|
as the response for PROPFIND). In the case where there are no
|
|||
|
response elements, the returned DAV:multistatus XML element is
|
|||
|
empty.
|
|||
|
|
|||
|
The response body for a successful CALDAV:calendar-query REPORT
|
|||
|
request MUST contain a DAV:response element for each iCalendar
|
|||
|
object that matched the search filter. Calendar data is being
|
|||
|
returned in the CALDAV:calendar-data XML element inside the DAV:
|
|||
|
propstat XML element.
|
|||
|
|
|||
|
Preconditions:
|
|||
|
|
|||
|
(CALDAV:supported-calendar-data): The attributes "content-type"
|
|||
|
and "version" of the CALDAV:calendar-data XML element (see
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 36]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
Section 9.6) specify a media type supported by the server for
|
|||
|
calendar object resources.
|
|||
|
|
|||
|
(CALDAV:valid-filter): The CALDAV:filter XML element (see
|
|||
|
Section 9.7) specified in the REPORT request MUST be valid. For
|
|||
|
instance, a CALDAV:filter cannot nest a <C:comp name="VEVENT">
|
|||
|
element in a <C:comp name="VTODO"> element, and a CALDAV:filter
|
|||
|
cannot nest a <C:time-range start="..." end="..."> element in a
|
|||
|
<C:prop name="SUMMARY"> element.
|
|||
|
|
|||
|
(CALDAV:supported-filter): The CALDAV:comp-filter (see
|
|||
|
Section 9.7.1), CALDAV:prop-filter (see Section 9.7.2), and
|
|||
|
CALDAV:param-filter (see Section 9.7.3) XML elements used in the
|
|||
|
CALDAV:filter XML element (see Section 9.7) in the REPORT request
|
|||
|
only make reference to components, properties, and parameters for
|
|||
|
which queries are supported by the server, i.e., if the CALDAV:
|
|||
|
filter element attempts to reference an unsupported component,
|
|||
|
property, or parameter, this precondition is violated. Servers
|
|||
|
SHOULD report the CALDAV:comp-filter, CALDAV:prop-filter, or
|
|||
|
CALDAV:param-filter for which it does not provide support.
|
|||
|
|
|||
|
<!ELEMENT supported-filter (comp-filter*,
|
|||
|
prop-filter*,
|
|||
|
param-filter*)>
|
|||
|
|
|||
|
(CALDAV:valid-calendar-data): The time zone specified in the
|
|||
|
REPORT request MUST be a valid iCalendar object containing a
|
|||
|
single valid VTIMEZONE component.
|
|||
|
|
|||
|
(CALDAV:min-date-time): Any XML element specifying a range of time
|
|||
|
MUST have its start or end DATE or DATE-TIME values greater than
|
|||
|
or equal to the value of the CALDAV:min-date-time property value
|
|||
|
(Section 5.2.6) on the calendar collections being targeted by the
|
|||
|
REPORT request;
|
|||
|
|
|||
|
(CALDAV:max-date-time): Any XML element specifying a range of time
|
|||
|
MUST have its start or end DATE or DATE-TIME values less than or
|
|||
|
equal to the value of the CALDAV:max-date-time property value
|
|||
|
(Section 5.2.7) on the calendar collections being targeted by the
|
|||
|
REPORT request;
|
|||
|
|
|||
|
(CALDAV:supported-collation): Any XML attribute specifying a
|
|||
|
collation MUST specify a collation supported by the server as
|
|||
|
described in Section 7.5.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 37]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
Postconditions:
|
|||
|
|
|||
|
(DAV:number-of-matches-within-limits): The number of matching
|
|||
|
calendar object resources must fall within server-specific,
|
|||
|
predefined limits. For example, this condition might be triggered
|
|||
|
if a search specification would cause the return of an extremely
|
|||
|
large number of responses.
|
|||
|
|
|||
|
7.8.1. Example: Partial Retrieval of Events by Time Range
|
|||
|
|
|||
|
In this example, the client requests the server to return specific
|
|||
|
components and properties of the VEVENT components that overlap the
|
|||
|
time range from January 4, 2006, at 00:00:00 A.M. UTC to January 5,
|
|||
|
2006, at 00:00:00 A.M. UTC. In addition, the DAV:getetag property is
|
|||
|
also requested and returned as part of the response. Note that the
|
|||
|
first calendar object returned is a recurring event whose first
|
|||
|
instance lies outside the requested time range, but whose third
|
|||
|
instance does overlap the time range. Note that due to the CALDAV:
|
|||
|
calendar-data element restrictions, the DTSTAMP property in VEVENT
|
|||
|
components has not been returned, and the only property returned in
|
|||
|
the VCALENDAR object is VERSION.
|
|||
|
|
|||
|
See Appendix B for the calendar data being targeted by this example.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 38]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
>> Request <<
|
|||
|
|
|||
|
REPORT /bernard/work/ HTTP/1.1
|
|||
|
Host: cal.example.com
|
|||
|
Depth: 1
|
|||
|
Content-Type: application/xml; charset="utf-8"
|
|||
|
Content-Length: xxxx
|
|||
|
|
|||
|
<?xml version="1.0" encoding="utf-8" ?>
|
|||
|
<C:calendar-query xmlns:D="DAV:"
|
|||
|
xmlns:C="urn:ietf:params:xml:ns:caldav">
|
|||
|
<D:prop>
|
|||
|
<D:getetag/>
|
|||
|
<C:calendar-data>
|
|||
|
<C:comp name="VCALENDAR">
|
|||
|
<C:prop name="VERSION"/>
|
|||
|
<C:comp name="VEVENT">
|
|||
|
<C:prop name="SUMMARY"/>
|
|||
|
<C:prop name="UID"/>
|
|||
|
<C:prop name="DTSTART"/>
|
|||
|
<C:prop name="DTEND"/>
|
|||
|
<C:prop name="DURATION"/>
|
|||
|
<C:prop name="RRULE"/>
|
|||
|
<C:prop name="RDATE"/>
|
|||
|
<C:prop name="EXRULE"/>
|
|||
|
<C:prop name="EXDATE"/>
|
|||
|
<C:prop name="RECURRENCE-ID"/>
|
|||
|
</C:comp>
|
|||
|
<C:comp name="VTIMEZONE"/>
|
|||
|
</C:comp>
|
|||
|
</C:calendar-data>
|
|||
|
</D:prop>
|
|||
|
<C:filter>
|
|||
|
<C:comp-filter name="VCALENDAR">
|
|||
|
<C:comp-filter name="VEVENT">
|
|||
|
<C:time-range start="20060104T000000Z"
|
|||
|
end="20060105T000000Z"/>
|
|||
|
</C:comp-filter>
|
|||
|
</C:comp-filter>
|
|||
|
</C:filter>
|
|||
|
</C:calendar-query>
|
|||
|
|
|||
|
>> Response <<
|
|||
|
|
|||
|
HTTP/1.1 207 Multi-Status
|
|||
|
Date: Sat, 11 Nov 2006 09:32:12 GMT
|
|||
|
Content-Type: application/xml; charset="utf-8"
|
|||
|
Content-Length: xxxx
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 39]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
<?xml version="1.0" encoding="utf-8" ?>
|
|||
|
<D:multistatus xmlns:D="DAV:"
|
|||
|
xmlns:C="urn:ietf:params:xml:ns:caldav">
|
|||
|
<D:response>
|
|||
|
<D:href>http://cal.example.com/bernard/work/abcd2.ics</D:href>
|
|||
|
<D:propstat>
|
|||
|
<D:prop>
|
|||
|
<D:getetag>"fffff-abcd2"</D:getetag>
|
|||
|
<C:calendar-data>BEGIN:VCALENDAR
|
|||
|
VERSION:2.0
|
|||
|
BEGIN:VTIMEZONE
|
|||
|
LAST-MODIFIED:20040110T032845Z
|
|||
|
TZID:US/Eastern
|
|||
|
BEGIN:DAYLIGHT
|
|||
|
DTSTART:20000404T020000
|
|||
|
RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
|
|||
|
TZNAME:EDT
|
|||
|
TZOFFSETFROM:-0500
|
|||
|
TZOFFSETTO:-0400
|
|||
|
END:DAYLIGHT
|
|||
|
BEGIN:STANDARD
|
|||
|
DTSTART:20001026T020000
|
|||
|
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
|
|||
|
TZNAME:EST
|
|||
|
TZOFFSETFROM:-0400
|
|||
|
TZOFFSETTO:-0500
|
|||
|
END:STANDARD
|
|||
|
END:VTIMEZONE
|
|||
|
BEGIN:VEVENT
|
|||
|
DTSTART;TZID=US/Eastern:20060102T120000
|
|||
|
DURATION:PT1H
|
|||
|
RRULE:FREQ=DAILY;COUNT=5
|
|||
|
SUMMARY:Event #2
|
|||
|
UID:00959BC664CA650E933C892C@example.com
|
|||
|
END:VEVENT
|
|||
|
BEGIN:VEVENT
|
|||
|
DTSTART;TZID=US/Eastern:20060104T140000
|
|||
|
DURATION:PT1H
|
|||
|
RECURRENCE-ID;TZID=US/Eastern:20060104T120000
|
|||
|
SUMMARY:Event #2 bis
|
|||
|
UID:00959BC664CA650E933C892C@example.com
|
|||
|
END:VEVENT
|
|||
|
BEGIN:VEVENT
|
|||
|
DTSTART;TZID=US/Eastern:20060106T140000
|
|||
|
DURATION:PT1H
|
|||
|
RECURRENCE-ID;TZID=US/Eastern:20060106T120000
|
|||
|
SUMMARY:Event #2 bis bis
|
|||
|
UID:00959BC664CA650E933C892C@example.com
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 40]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
END:VEVENT
|
|||
|
END:VCALENDAR
|
|||
|
</C:calendar-data>
|
|||
|
</D:prop>
|
|||
|
<D:status>HTTP/1.1 200 OK</D:status>
|
|||
|
</D:propstat>
|
|||
|
</D:response>
|
|||
|
<D:response>
|
|||
|
<D:href>http://cal.example.com/bernard/work/abcd3.ics</D:href>
|
|||
|
<D:propstat>
|
|||
|
<D:prop>
|
|||
|
<D:getetag>"fffff-abcd3"</D:getetag>
|
|||
|
<C:calendar-data>BEGIN:VCALENDAR
|
|||
|
VERSION:2.0
|
|||
|
PRODID:-//Example Corp.//CalDAV Client//EN
|
|||
|
BEGIN:VTIMEZONE
|
|||
|
LAST-MODIFIED:20040110T032845Z
|
|||
|
TZID:US/Eastern
|
|||
|
BEGIN:DAYLIGHT
|
|||
|
DTSTART:20000404T020000
|
|||
|
RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
|
|||
|
TZNAME:EDT
|
|||
|
TZOFFSETFROM:-0500
|
|||
|
TZOFFSETTO:-0400
|
|||
|
END:DAYLIGHT
|
|||
|
BEGIN:STANDARD
|
|||
|
DTSTART:20001026T020000
|
|||
|
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
|
|||
|
TZNAME:EST
|
|||
|
TZOFFSETFROM:-0400
|
|||
|
TZOFFSETTO:-0500
|
|||
|
END:STANDARD
|
|||
|
END:VTIMEZONE
|
|||
|
BEGIN:VEVENT
|
|||
|
DTSTART;TZID=US/Eastern:20060104T100000
|
|||
|
DURATION:PT1H
|
|||
|
SUMMARY:Event #3
|
|||
|
UID:DC6C50A017428C5216A2F1CD@example.com
|
|||
|
END:VEVENT
|
|||
|
END:VCALENDAR
|
|||
|
</C:calendar-data>
|
|||
|
</D:prop>
|
|||
|
<D:status>HTTP/1.1 200 OK</D:status>
|
|||
|
</D:propstat>
|
|||
|
</D:response>
|
|||
|
</D:multistatus>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 41]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
7.8.2. Example: Partial Retrieval of Recurring Events
|
|||
|
|
|||
|
In this example, the client requests the server to return VEVENT
|
|||
|
components that overlap the time range from January 3, 2006, at 00:
|
|||
|
00:00 A.M. UTC to January 5, 2006, at 00:00:00 A.M. UTC. Use of the
|
|||
|
CALDAV:limit-recurrence-set element causes the server to only return
|
|||
|
overridden recurrence components that overlap the time range
|
|||
|
specified in that element or that affect other instances that overlap
|
|||
|
the time range (e.g., in the case of a THISANDFUTURE behavior). In
|
|||
|
this example, the first overridden component in the matching resource
|
|||
|
is returned, but the second one is not.
|
|||
|
|
|||
|
See Appendix B for the calendar data being targeted by this example.
|
|||
|
|
|||
|
>> Request <<
|
|||
|
|
|||
|
REPORT /bernard/work/ HTTP/1.1
|
|||
|
Host: cal.example.com
|
|||
|
Depth: 1
|
|||
|
Content-Type: application/xml; charset="utf-8"
|
|||
|
Content-Length: xxxx
|
|||
|
|
|||
|
<?xml version="1.0" encoding="utf-8" ?>
|
|||
|
<C:calendar-query xmlns:D="DAV:"
|
|||
|
xmlns:C="urn:ietf:params:xml:ns:caldav">
|
|||
|
<D:prop>
|
|||
|
<C:calendar-data>
|
|||
|
<C:limit-recurrence-set start="20060103T000000Z"
|
|||
|
end="20060105T000000Z"/>
|
|||
|
</C:calendar-data>
|
|||
|
</D:prop>
|
|||
|
<C:filter>
|
|||
|
<C:comp-filter name="VCALENDAR">
|
|||
|
<C:comp-filter name="VEVENT">
|
|||
|
<C:time-range start="20060103T000000Z"
|
|||
|
end="20060105T000000Z"/>
|
|||
|
</C:comp-filter>
|
|||
|
</C:comp-filter>
|
|||
|
</C:filter>
|
|||
|
</C:calendar-query>
|
|||
|
|
|||
|
>> Response <<
|
|||
|
|
|||
|
HTTP/1.1 207 Multi-Status
|
|||
|
Date: Sat, 11 Nov 2006 09:32:12 GMT
|
|||
|
Content-Type: application/xml; charset="utf-8"
|
|||
|
Content-Length: xxxx
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 42]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
<?xml version="1.0" encoding="utf-8" ?>
|
|||
|
<D:multistatus xmlns:D="DAV:"
|
|||
|
xmlns:C="urn:ietf:params:xml:ns:caldav">
|
|||
|
<D:response>
|
|||
|
<D:href>http://cal.example.com/bernard/work/abcd2.ics</D:href>
|
|||
|
<D:propstat>
|
|||
|
<D:prop>
|
|||
|
<D:getetag>"fffff-abcd2"</D:getetag>
|
|||
|
<C:calendar-data>BEGIN:VCALENDAR
|
|||
|
VERSION:2.0
|
|||
|
PRODID:-//Example Corp.//CalDAV Client//EN
|
|||
|
BEGIN:VTIMEZONE
|
|||
|
LAST-MODIFIED:20040110T032845Z
|
|||
|
TZID:US/Eastern
|
|||
|
BEGIN:DAYLIGHT
|
|||
|
DTSTART:20000404T020000
|
|||
|
RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
|
|||
|
TZNAME:EDT
|
|||
|
TZOFFSETFROM:-0500
|
|||
|
TZOFFSETTO:-0400
|
|||
|
END:DAYLIGHT
|
|||
|
BEGIN:STANDARD
|
|||
|
DTSTART:20001026T020000
|
|||
|
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
|
|||
|
TZNAME:EST
|
|||
|
TZOFFSETFROM:-0400
|
|||
|
TZOFFSETTO:-0500
|
|||
|
END:STANDARD
|
|||
|
END:VTIMEZONE
|
|||
|
BEGIN:VEVENT
|
|||
|
DTSTAMP:20060206T001121Z
|
|||
|
DTSTART;TZID=US/Eastern:20060102T120000
|
|||
|
DURATION:PT1H
|
|||
|
RRULE:FREQ=DAILY;COUNT=5
|
|||
|
SUMMARY:Event #2
|
|||
|
UID:00959BC664CA650E933C892C@example.com
|
|||
|
END:VEVENT
|
|||
|
BEGIN:VEVENT
|
|||
|
DTSTAMP:20060206T001121Z
|
|||
|
DTSTART;TZID=US/Eastern:20060104T140000
|
|||
|
DURATION:PT1H
|
|||
|
RECURRENCE-ID;TZID=US/Eastern:20060104T120000
|
|||
|
SUMMARY:Event #2 bis
|
|||
|
UID:00959BC664CA650E933C892C@example.com
|
|||
|
END:VEVENT
|
|||
|
END:VCALENDAR
|
|||
|
</C:calendar-data>
|
|||
|
</D:prop>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 43]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
<D:status>HTTP/1.1 200 OK</D:status>
|
|||
|
</D:propstat>
|
|||
|
</D:response>
|
|||
|
<D:response>
|
|||
|
<D:href>http://cal.example.com/bernard/work/abcd3.ics</D:href>
|
|||
|
<D:propstat>
|
|||
|
<D:prop>
|
|||
|
<D:getetag>"fffff-abcd3"</D:getetag>
|
|||
|
<C:calendar-data>BEGIN:VCALENDAR
|
|||
|
VERSION:2.0
|
|||
|
PRODID:-//Example Corp.//CalDAV Client//EN
|
|||
|
BEGIN:VTIMEZONE
|
|||
|
LAST-MODIFIED:20040110T032845Z
|
|||
|
TZID:US/Eastern
|
|||
|
BEGIN:DAYLIGHT
|
|||
|
DTSTART:20000404T020000
|
|||
|
RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
|
|||
|
TZNAME:EDT
|
|||
|
TZOFFSETFROM:-0500
|
|||
|
TZOFFSETTO:-0400
|
|||
|
END:DAYLIGHT
|
|||
|
BEGIN:STANDARD
|
|||
|
DTSTART:20001026T020000
|
|||
|
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
|
|||
|
TZNAME:EST
|
|||
|
TZOFFSETFROM:-0400
|
|||
|
TZOFFSETTO:-0500
|
|||
|
END:STANDARD
|
|||
|
END:VTIMEZONE
|
|||
|
BEGIN:VEVENT
|
|||
|
ATTENDEE;PARTSTAT=ACCEPTED;ROLE=CHAIR:mailto:cyrus@example.com
|
|||
|
ATTENDEE;PARTSTAT=NEEDS-ACTION:mailto:lisa@example.com
|
|||
|
DTSTAMP:20060206T001220Z
|
|||
|
DTSTART;TZID=US/Eastern:20060104T100000
|
|||
|
DURATION:PT1H
|
|||
|
LAST-MODIFIED:20060206T001330Z
|
|||
|
ORGANIZER:mailto:cyrus@example.com
|
|||
|
SEQUENCE:1
|
|||
|
STATUS:TENTATIVE
|
|||
|
SUMMARY:Event #3
|
|||
|
UID:DC6C50A017428C5216A2F1CD@example.com
|
|||
|
X-ABC-GUID:E1CX5Dr-0007ym-Hz@example.com
|
|||
|
END:VEVENT
|
|||
|
END:VCALENDAR
|
|||
|
</C:calendar-data>
|
|||
|
</D:prop>
|
|||
|
<D:status>HTTP/1.1 200 OK</D:status>
|
|||
|
</D:propstat>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 44]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
</D:response>
|
|||
|
</D:multistatus>
|
|||
|
|
|||
|
7.8.3. Example: Expanded Retrieval of Recurring Events
|
|||
|
|
|||
|
In this example, the client requests the server to return VEVENT
|
|||
|
components that overlap the time range from January 2, 2006, at 00:
|
|||
|
00:00 A.M. UTC to January 5, 2006, at 00:00:00 A.M. UTC and to return
|
|||
|
recurring calendar components expanded into individual recurrence
|
|||
|
instance calendar components. Use of the CALDAV:expand element
|
|||
|
causes the server to only return overridden recurrence instances that
|
|||
|
overlap the time range specified in that element.
|
|||
|
|
|||
|
See Appendix B for the calendar data being targeted by this example.
|
|||
|
|
|||
|
>> Request <<
|
|||
|
|
|||
|
REPORT /bernard/work/ HTTP/1.1
|
|||
|
Host: cal.example.com
|
|||
|
Depth: 1
|
|||
|
Content-Type: application/xml; charset="utf-8"
|
|||
|
Content-Length: xxxx
|
|||
|
|
|||
|
<?xml version="1.0" encoding="utf-8" ?>
|
|||
|
<C:calendar-query xmlns:D="DAV:"
|
|||
|
xmlns:C="urn:ietf:params:xml:ns:caldav">
|
|||
|
<D:prop>
|
|||
|
<C:calendar-data>
|
|||
|
<C:expand start="20060103T000000Z"
|
|||
|
end="20060105T000000Z"/>
|
|||
|
</C:calendar-data>
|
|||
|
</D:prop>
|
|||
|
<C:filter>
|
|||
|
<C:comp-filter name="VCALENDAR">
|
|||
|
<C:comp-filter name="VEVENT">
|
|||
|
<C:time-range start="20060103T000000Z"
|
|||
|
end="20060105T000000Z"/>
|
|||
|
</C:comp-filter>
|
|||
|
</C:comp-filter>
|
|||
|
</C:filter>
|
|||
|
</C:calendar-query>
|
|||
|
|
|||
|
>> Response <<
|
|||
|
|
|||
|
HTTP/1.1 207 Multi-Status
|
|||
|
Date: Sat, 11 Nov 2006 09:32:12 GMT
|
|||
|
Content-Type: application/xml; charset="utf-8"
|
|||
|
Content-Length: xxxx
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 45]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
<?xml version="1.0" encoding="utf-8" ?>
|
|||
|
<D:multistatus xmlns:D="DAV:"
|
|||
|
xmlns:C="urn:ietf:params:xml:ns:caldav">
|
|||
|
<D:response>
|
|||
|
<D:href>http://cal.example.com/bernard/work/abcd2.ics</D:href>
|
|||
|
<D:propstat>
|
|||
|
<D:prop>
|
|||
|
<D:getetag>"fffff-abcd2"</D:getetag>
|
|||
|
<C:calendar-data>BEGIN:VCALENDAR
|
|||
|
VERSION:2.0
|
|||
|
PRODID:-//Example Corp.//CalDAV Client//EN
|
|||
|
BEGIN:VEVENT
|
|||
|
DTSTAMP:20060206T001121Z
|
|||
|
DTSTART:20060103T170000
|
|||
|
DURATION:PT1H
|
|||
|
RECURRENCE-ID:20060103T170000
|
|||
|
SUMMARY:Event #2
|
|||
|
UID:00959BC664CA650E933C892C@example.com
|
|||
|
END:VEVENT
|
|||
|
BEGIN:VEVENT
|
|||
|
DTSTAMP:20060206T001121Z
|
|||
|
DTSTART:20060104T190000
|
|||
|
DURATION:PT1H
|
|||
|
RECURRENCE-ID:20060104T170000
|
|||
|
SUMMARY:Event #2 bis
|
|||
|
UID:00959BC664CA650E933C892C@example.com
|
|||
|
END:VEVENT
|
|||
|
END:VCALENDAR
|
|||
|
</C:calendar-data>
|
|||
|
</D:prop>
|
|||
|
<D:status>HTTP/1.1 200 OK</D:status>
|
|||
|
</D:propstat>
|
|||
|
</D:response>
|
|||
|
<D:response>
|
|||
|
<D:href>http://cal.example.com/bernard/work/abcd3.ics</D:href>
|
|||
|
<D:propstat>
|
|||
|
<D:prop>
|
|||
|
<D:getetag>"fffff-abcd3"</D:getetag>
|
|||
|
<C:calendar-data>BEGIN:VCALENDAR
|
|||
|
VERSION:2.0
|
|||
|
PRODID:-//Example Corp.//CalDAV Client//EN
|
|||
|
BEGIN:VEVENT
|
|||
|
ATTENDEE;PARTSTAT=ACCEPTED;ROLE=CHAIR:mailto:cyrus@example.com
|
|||
|
ATTENDEE;PARTSTAT=NEEDS-ACTION:mailto:lisa@example.com
|
|||
|
DTSTAMP:20060206T001220Z
|
|||
|
DTSTART:20060104T150000
|
|||
|
DURATION:PT1H
|
|||
|
LAST-MODIFIED:20060206T001330Z
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 46]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
ORGANIZER:mailto:cyrus@example.com
|
|||
|
SEQUENCE:1
|
|||
|
STATUS:TENTATIVE
|
|||
|
SUMMARY:Event #3
|
|||
|
UID:DC6C50A017428C5216A2F1CD@example.com
|
|||
|
X-ABC-GUID:E1CX5Dr-0007ym-Hz@example.com
|
|||
|
END:VEVENT
|
|||
|
END:VCALENDAR
|
|||
|
</C:calendar-data>
|
|||
|
</D:prop>
|
|||
|
<D:status>HTTP/1.1 200 OK</D:status>
|
|||
|
</D:propstat>
|
|||
|
</D:response>
|
|||
|
</D:multistatus>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 47]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
7.8.4. Example: Partial Retrieval of Stored Free Busy Components
|
|||
|
|
|||
|
In this example, the client requests the server to return the
|
|||
|
VFREEBUSY components that have free busy information that overlap the
|
|||
|
time range from January 2, 2006, at 00:00:00 A.M. UTC (inclusively)
|
|||
|
to January 3, 2006, at 00:00:00 A.M. UTC (exclusively). Use of the
|
|||
|
CALDAV:limit-freebusy-set element causes the server to only return
|
|||
|
the FREEBUSY property values that overlap the time range specified in
|
|||
|
that element. Note that this is not an example of discovering when
|
|||
|
the calendar owner is busy.
|
|||
|
|
|||
|
See Appendix B for the calendar data being targeted by this example.
|
|||
|
|
|||
|
>> Request <<
|
|||
|
|
|||
|
REPORT /bernard/work/ HTTP/1.1
|
|||
|
Host: cal.example.com
|
|||
|
Depth: 1
|
|||
|
Content-Type: application/xml; charset="utf-8"
|
|||
|
Content-Length: xxxx
|
|||
|
|
|||
|
<?xml version="1.0" encoding="utf-8" ?>
|
|||
|
<C:calendar-query xmlns:D="DAV:"
|
|||
|
xmlns:C="urn:ietf:params:xml:ns:caldav">
|
|||
|
<D:prop>
|
|||
|
<C:calendar-data>
|
|||
|
<C:limit-freebusy-set start="20060102T000000Z"
|
|||
|
end="20060103T000000Z"/>
|
|||
|
</C:calendar-data>
|
|||
|
</D:prop>
|
|||
|
<C:filter>
|
|||
|
<C:comp-filter name="VCALENDAR">
|
|||
|
<C:comp-filter name="VFREEBUSY">
|
|||
|
<C:time-range start="20060102T000000Z"
|
|||
|
end="20060103T000000Z"/>
|
|||
|
</C:comp-filter>
|
|||
|
</C:comp-filter>
|
|||
|
</C:filter>
|
|||
|
</C:calendar-query>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 48]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
>> Response <<
|
|||
|
|
|||
|
HTTP/1.1 207 Multi-Status
|
|||
|
Date: Sat, 11 Nov 2006 09:32:12 GMT
|
|||
|
Content-Type: application/xml; charset="utf-8"
|
|||
|
Content-Length: xxxx
|
|||
|
|
|||
|
<?xml version="1.0" encoding="utf-8" ?>
|
|||
|
<D:multistatus xmlns:D="DAV:"
|
|||
|
xmlns:C="urn:ietf:params:xml:ns:caldav">
|
|||
|
<D:response>
|
|||
|
<D:href>http://cal.example.com/bernard/work/abcd8.ics</D:href>
|
|||
|
<D:propstat>
|
|||
|
<D:prop>
|
|||
|
<D:getetag>"fffff-abcd8"</D:getetag>
|
|||
|
<C:calendar-data>BEGIN:VCALENDAR
|
|||
|
VERSION:2.0
|
|||
|
PRODID:-//Example Corp.//CalDAV Client//EN
|
|||
|
BEGIN:VFREEBUSY
|
|||
|
ORGANIZER;CN="Bernard Desruisseaux":mailto:bernard@example.com
|
|||
|
UID:76ef34-54a3d2@example.com
|
|||
|
DTSTAMP:20050530T123421Z
|
|||
|
DTSTART:20060101T100000Z
|
|||
|
DTEND:20060108T100000Z
|
|||
|
FREEBUSY;FBTYPE=BUSY-TENTATIVE:20060102T100000Z/20060102T120000Z
|
|||
|
END:VFREEBUSY
|
|||
|
END:VCALENDAR
|
|||
|
</C:calendar-data>
|
|||
|
</D:prop>
|
|||
|
<D:status>HTTP/1.1 200 OK</D:status>
|
|||
|
</D:propstat>
|
|||
|
</D:response>
|
|||
|
</D:multistatus>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 49]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
7.8.5. Example: Retrieval of To-Dos by Alarm Time Range
|
|||
|
|
|||
|
In this example, the client requests the server to return the VTODO
|
|||
|
components that have an alarm trigger scheduled in the specified time
|
|||
|
range.
|
|||
|
|
|||
|
See Appendix B for the calendar data being targeted by this example.
|
|||
|
|
|||
|
>> Request <<
|
|||
|
|
|||
|
REPORT /bernard/work/ HTTP/1.1
|
|||
|
Host: cal.example.com
|
|||
|
Depth: 1
|
|||
|
Content-Type: application/xml; charset="utf-8"
|
|||
|
Content-Length: xxxx
|
|||
|
|
|||
|
<?xml version="1.0" encoding="utf-8" ?>
|
|||
|
<C:calendar-query xmlns:C="urn:ietf:params:xml:ns:caldav">
|
|||
|
<D:prop xmlns:D="DAV:">
|
|||
|
<D:getetag/>
|
|||
|
<C:calendar-data/>
|
|||
|
</D:prop>
|
|||
|
<C:filter>
|
|||
|
<C:comp-filter name="VCALENDAR">
|
|||
|
<C:comp-filter name="VTODO">
|
|||
|
<C:comp-filter name="VALARM">
|
|||
|
<C:time-range start="20060106T100000Z"
|
|||
|
end="20060107T100000Z"/>
|
|||
|
</C:comp-filter>
|
|||
|
</C:comp-filter>
|
|||
|
</C:comp-filter>
|
|||
|
</C:filter>
|
|||
|
</C:calendar-query>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 50]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
>> Response <<
|
|||
|
|
|||
|
HTTP/1.1 207 Multi-Status
|
|||
|
Date: Sat, 11 Nov 2006 09:32:12 GMT
|
|||
|
Content-Type: application/xml; charset="utf-8"
|
|||
|
Content-Length: xxxx
|
|||
|
|
|||
|
<?xml version="1.0" encoding="utf-8" ?>
|
|||
|
<D:multistatus xmlns:D="DAV:"
|
|||
|
xmlns:C="urn:ietf:params:xml:ns:caldav">
|
|||
|
<D:response>
|
|||
|
<D:href>http://cal.example.com/bernard/work/abcd4.ics</D:href>
|
|||
|
<D:propstat>
|
|||
|
<D:prop>
|
|||
|
<D:getetag>"fffff-abcd4"</D:getetag>
|
|||
|
<C:calendar-data>BEGIN:VCALENDAR
|
|||
|
VERSION:2.0
|
|||
|
PRODID:-//Example Corp.//CalDAV Client//EN
|
|||
|
BEGIN:VTODO
|
|||
|
DTSTAMP:20060205T235300Z
|
|||
|
DUE;TZID=US/Eastern:20060106T120000
|
|||
|
LAST-MODIFIED:20060205T235308Z
|
|||
|
SEQUENCE:1
|
|||
|
STATUS:NEEDS-ACTION
|
|||
|
SUMMARY:Task #2
|
|||
|
UID:E10BA47467C5C69BB74E8720@example.com
|
|||
|
BEGIN:VALARM
|
|||
|
ACTION:AUDIO
|
|||
|
TRIGGER;RELATED=START:-PT10M
|
|||
|
END:VALARM
|
|||
|
END:VTODO
|
|||
|
END:VCALENDAR
|
|||
|
</C:calendar-data>
|
|||
|
</D:prop>
|
|||
|
<D:status>HTTP/1.1 200 OK</D:status>
|
|||
|
</D:propstat>
|
|||
|
</D:response>
|
|||
|
</D:multistatus>
|
|||
|
|
|||
|
7.8.6. Example: Retrieval of Event by UID
|
|||
|
|
|||
|
In this example, the client requests the server to return the VEVENT
|
|||
|
component that has the UID property set to
|
|||
|
"DC6C50A017428C5216A2F1CD@example.com".
|
|||
|
|
|||
|
See Appendix B for the calendar data being targeted by this example.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 51]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
>> Request <<
|
|||
|
|
|||
|
REPORT /bernard/work/ HTTP/1.1
|
|||
|
Host: cal.example.com
|
|||
|
Depth: 1
|
|||
|
Content-Type: application/xml; charset="utf-8"
|
|||
|
Content-Length: xxxx
|
|||
|
|
|||
|
<?xml version="1.0" encoding="utf-8" ?>
|
|||
|
<C:calendar-query xmlns:C="urn:ietf:params:xml:ns:caldav">
|
|||
|
<D:prop xmlns:D="DAV:">
|
|||
|
<D:getetag/>
|
|||
|
<C:calendar-data/>
|
|||
|
</D:prop>
|
|||
|
<C:filter>
|
|||
|
<C:comp-filter name="VCALENDAR">
|
|||
|
<C:comp-filter name="VEVENT">
|
|||
|
<C:prop-filter name="UID">
|
|||
|
<C:text-match collation="i;octet"
|
|||
|
>DC6C50A017428C5216A2F1CD@example.com</C:text-match>
|
|||
|
</C:prop-filter>
|
|||
|
</C:comp-filter>
|
|||
|
</C:comp-filter>
|
|||
|
</C:filter>
|
|||
|
</C:calendar-query>
|
|||
|
|
|||
|
>> Response <<
|
|||
|
|
|||
|
HTTP/1.1 207 Multi-Status
|
|||
|
Date: Sat, 11 Nov 2006 09:32:12 GMT
|
|||
|
Content-Type: application/xml; charset="utf-8"
|
|||
|
Content-Length: xxxx
|
|||
|
|
|||
|
<?xml version="1.0" encoding="utf-8" ?>
|
|||
|
<D:multistatus xmlns:D="DAV:"
|
|||
|
xmlns:C="urn:ietf:params:xml:ns:caldav">
|
|||
|
<D:response>
|
|||
|
<D:href>http://cal.example.com/bernard/work/abcd3.ics</D:href>
|
|||
|
<D:propstat>
|
|||
|
<D:prop>
|
|||
|
<D:getetag>"fffff-abcd3"</D:getetag>
|
|||
|
<C:calendar-data>BEGIN:VCALENDAR
|
|||
|
VERSION:2.0
|
|||
|
PRODID:-//Example Corp.//CalDAV Client//EN
|
|||
|
BEGIN:VTIMEZONE
|
|||
|
LAST-MODIFIED:20040110T032845Z
|
|||
|
TZID:US/Eastern
|
|||
|
BEGIN:DAYLIGHT
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 52]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
DTSTART:20000404T020000
|
|||
|
RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
|
|||
|
TZNAME:EDT
|
|||
|
TZOFFSETFROM:-0500
|
|||
|
TZOFFSETTO:-0400
|
|||
|
END:DAYLIGHT
|
|||
|
BEGIN:STANDARD
|
|||
|
DTSTART:20001026T020000
|
|||
|
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
|
|||
|
TZNAME:EST
|
|||
|
TZOFFSETFROM:-0400
|
|||
|
TZOFFSETTO:-0500
|
|||
|
END:STANDARD
|
|||
|
END:VTIMEZONE
|
|||
|
BEGIN:VEVENT
|
|||
|
ATTENDEE;PARTSTAT=ACCEPTED;ROLE=CHAIR:mailto:cyrus@example.com
|
|||
|
ATTENDEE;PARTSTAT=NEEDS-ACTION:mailto:lisa@example.com
|
|||
|
DTSTAMP:20060206T001220Z
|
|||
|
DTSTART;TZID=US/Eastern:20060104T100000
|
|||
|
DURATION:PT1H
|
|||
|
LAST-MODIFIED:20060206T001330Z
|
|||
|
ORGANIZER:mailto:cyrus@example.com
|
|||
|
SEQUENCE:1
|
|||
|
STATUS:TENTATIVE
|
|||
|
SUMMARY:Event #3
|
|||
|
UID:DC6C50A017428C5216A2F1CD@example.com
|
|||
|
X-ABC-GUID:E1CX5Dr-0007ym-Hz@example.com
|
|||
|
END:VEVENT
|
|||
|
END:VCALENDAR
|
|||
|
</C:calendar-data>
|
|||
|
</D:prop>
|
|||
|
<D:status>HTTP/1.1 200 OK</D:status>
|
|||
|
</D:propstat>
|
|||
|
</D:response>
|
|||
|
</D:multistatus>
|
|||
|
|
|||
|
7.8.7. Example: Retrieval of Events by PARTSTAT
|
|||
|
|
|||
|
In this example, the client requests the server to return the VEVENT
|
|||
|
components that have the ATTENDEE property with the value
|
|||
|
"mailto:lisa@example.com" and for which the PARTSTAT parameter is set
|
|||
|
to NEEDS-ACTION.
|
|||
|
|
|||
|
See Appendix B for the calendar data being targeted by this example.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 53]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
>> Request <<
|
|||
|
|
|||
|
REPORT /bernard/work/ HTTP/1.1
|
|||
|
Host: cal.example.com
|
|||
|
Depth: 1
|
|||
|
Content-Type: application/xml; charset="utf-8"
|
|||
|
Content-Length: xxxx
|
|||
|
|
|||
|
<?xml version="1.0" encoding="utf-8" ?>
|
|||
|
<C:calendar-query xmlns:C="urn:ietf:params:xml:ns:caldav">
|
|||
|
<D:prop xmlns:D="DAV:">
|
|||
|
<D:getetag/>
|
|||
|
<C:calendar-data/>
|
|||
|
</D:prop>
|
|||
|
<C:filter>
|
|||
|
<C:comp-filter name="VCALENDAR">
|
|||
|
<C:comp-filter name="VEVENT">
|
|||
|
<C:prop-filter name="ATTENDEE">
|
|||
|
<C:text-match collation="i;ascii-casemap"
|
|||
|
>mailto:lisa@example.com</C:text-match>
|
|||
|
<C:param-filter name="PARTSTAT">
|
|||
|
<C:text-match collation="i;ascii-casemap"
|
|||
|
>NEEDS-ACTION</C:text-match>
|
|||
|
</C:param-filter>
|
|||
|
</C:prop-filter>
|
|||
|
</C:comp-filter>
|
|||
|
</C:comp-filter>
|
|||
|
</C:filter>
|
|||
|
</C:calendar-query>
|
|||
|
|
|||
|
>> Response <<
|
|||
|
|
|||
|
HTTP/1.1 207 Multi-Status
|
|||
|
Date: Sat, 11 Nov 2006 09:32:12 GMT
|
|||
|
Content-Type: application/xml; charset="utf-8"
|
|||
|
Content-Length: xxxx
|
|||
|
|
|||
|
<?xml version="1.0" encoding="utf-8" ?>
|
|||
|
<D:multistatus xmlns:D="DAV:"
|
|||
|
xmlns:C="urn:ietf:params:xml:ns:caldav">
|
|||
|
<D:response>
|
|||
|
<D:href>http://cal.example.com/bernard/work/abcd3.ics</D:href>
|
|||
|
<D:propstat>
|
|||
|
<D:prop>
|
|||
|
<D:getetag>"fffff-abcd3"</D:getetag>
|
|||
|
<C:calendar-data>BEGIN:VCALENDAR
|
|||
|
VERSION:2.0
|
|||
|
PRODID:-//Example Corp.//CalDAV Client//EN
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 54]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
BEGIN:VTIMEZONE
|
|||
|
LAST-MODIFIED:20040110T032845Z
|
|||
|
TZID:US/Eastern
|
|||
|
BEGIN:DAYLIGHT
|
|||
|
DTSTART:20000404T020000
|
|||
|
RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
|
|||
|
TZNAME:EDT
|
|||
|
TZOFFSETFROM:-0500
|
|||
|
TZOFFSETTO:-0400
|
|||
|
END:DAYLIGHT
|
|||
|
BEGIN:STANDARD
|
|||
|
DTSTART:20001026T020000
|
|||
|
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
|
|||
|
TZNAME:EST
|
|||
|
TZOFFSETFROM:-0400
|
|||
|
TZOFFSETTO:-0500
|
|||
|
END:STANDARD
|
|||
|
END:VTIMEZONE
|
|||
|
BEGIN:VEVENT
|
|||
|
ATTENDEE;PARTSTAT=ACCEPTED;ROLE=CHAIR:mailto:cyrus@example.com
|
|||
|
ATTENDEE;PARTSTAT=NEEDS-ACTION:mailto:lisa@example.com
|
|||
|
DTSTAMP:20060206T001220Z
|
|||
|
DTSTART;TZID=US/Eastern:20060104T100000
|
|||
|
DURATION:PT1H
|
|||
|
LAST-MODIFIED:20060206T001330Z
|
|||
|
ORGANIZER:mailto:cyrus@example.com
|
|||
|
SEQUENCE:1
|
|||
|
STATUS:TENTATIVE
|
|||
|
SUMMARY:Event #3
|
|||
|
UID:DC6C50A017428C5216A2F1CD@example.com
|
|||
|
X-ABC-GUID:E1CX5Dr-0007ym-Hz@example.com
|
|||
|
END:VEVENT
|
|||
|
END:VCALENDAR
|
|||
|
</C:calendar-data>
|
|||
|
</D:prop>
|
|||
|
<D:status>HTTP/1.1 200 OK</D:status>
|
|||
|
</D:propstat>
|
|||
|
</D:response>
|
|||
|
</D:multistatus>
|
|||
|
|
|||
|
7.8.8. Example: Retrieval of Events Only
|
|||
|
|
|||
|
In this example, the client requests the server to return all VEVENT
|
|||
|
components.
|
|||
|
|
|||
|
See Appendix B for the calendar data being targeted by this example.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 55]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
>> Request <<
|
|||
|
|
|||
|
REPORT /bernard/work/ HTTP/1.1
|
|||
|
Host: cal.example.com
|
|||
|
Depth: 1
|
|||
|
Content-Type: application/xml; charset="utf-8"
|
|||
|
Content-Length: xxxx
|
|||
|
|
|||
|
<?xml version="1.0" encoding="utf-8" ?>
|
|||
|
<C:calendar-query xmlns:C="urn:ietf:params:xml:ns:caldav">
|
|||
|
<D:prop xmlns:D="DAV:">
|
|||
|
<D:getetag/>
|
|||
|
<C:calendar-data/>
|
|||
|
</D:prop>
|
|||
|
<C:filter>
|
|||
|
<C:comp-filter name="VCALENDAR">
|
|||
|
<C:comp-filter name="VEVENT"/>
|
|||
|
</C:comp-filter>
|
|||
|
</C:filter>
|
|||
|
</C:calendar-query>
|
|||
|
|
|||
|
>> Response <<
|
|||
|
|
|||
|
HTTP/1.1 207 Multi-Status
|
|||
|
Date: Sat, 11 Nov 2006 09:32:12 GMT
|
|||
|
Content-Type: application/xml; charset="utf-8"
|
|||
|
Content-Length: xxxx
|
|||
|
|
|||
|
<?xml version="1.0" encoding="utf-8" ?>
|
|||
|
<D:multistatus xmlns:D="DAV:"
|
|||
|
xmlns:C="urn:ietf:params:xml:ns:caldav">
|
|||
|
<D:response>
|
|||
|
<D:href>http://cal.example.com/bernard/work/abcd1.ics</D:href>
|
|||
|
<D:propstat>
|
|||
|
<D:prop>
|
|||
|
<D:getetag>"fffff-abcd1"</D:getetag>
|
|||
|
<C:calendar-data>BEGIN:VCALENDAR
|
|||
|
VERSION:2.0
|
|||
|
PRODID:-//Example Corp.//CalDAV Client//EN
|
|||
|
BEGIN:VTIMEZONE
|
|||
|
LAST-MODIFIED:20040110T032845Z
|
|||
|
TZID:US/Eastern
|
|||
|
BEGIN:DAYLIGHT
|
|||
|
DTSTART:20000404T020000
|
|||
|
RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
|
|||
|
TZNAME:EDT
|
|||
|
TZOFFSETFROM:-0500
|
|||
|
TZOFFSETTO:-0400
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 56]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
END:DAYLIGHT
|
|||
|
BEGIN:STANDARD
|
|||
|
DTSTART:20001026T020000
|
|||
|
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
|
|||
|
TZNAME:EST
|
|||
|
TZOFFSETFROM:-0400
|
|||
|
TZOFFSETTO:-0500
|
|||
|
END:STANDARD
|
|||
|
END:VTIMEZONE
|
|||
|
BEGIN:VEVENT
|
|||
|
DTSTAMP:20060206T001102Z
|
|||
|
DTSTART;TZID=US/Eastern:20060102T100000
|
|||
|
DURATION:PT1H
|
|||
|
SUMMARY:Event #1
|
|||
|
Description:Go Steelers!
|
|||
|
UID:74855313FA803DA593CD579A@example.com
|
|||
|
END:VEVENT
|
|||
|
END:VCALENDAR
|
|||
|
</C:calendar-data>
|
|||
|
</D:prop>
|
|||
|
<D:status>HTTP/1.1 200 OK</D:status>
|
|||
|
</D:propstat>
|
|||
|
</D:response>
|
|||
|
<D:response>
|
|||
|
<D:href>http://cal.example.com/bernard/work/abcd2.ics</D:href>
|
|||
|
<D:propstat>
|
|||
|
<D:prop>
|
|||
|
<D:getetag>"fffff-abcd2"</D:getetag>
|
|||
|
<C:calendar-data>BEGIN:VCALENDAR
|
|||
|
VERSION:2.0
|
|||
|
PRODID:-//Example Corp.//CalDAV Client//EN
|
|||
|
BEGIN:VTIMEZONE
|
|||
|
LAST-MODIFIED:20040110T032845Z
|
|||
|
TZID:US/Eastern
|
|||
|
BEGIN:DAYLIGHT
|
|||
|
DTSTART:20000404T020000
|
|||
|
RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
|
|||
|
TZNAME:EDT
|
|||
|
TZOFFSETFROM:-0500
|
|||
|
TZOFFSETTO:-0400
|
|||
|
END:DAYLIGHT
|
|||
|
BEGIN:STANDARD
|
|||
|
DTSTART:20001026T020000
|
|||
|
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
|
|||
|
TZNAME:EST
|
|||
|
TZOFFSETFROM:-0400
|
|||
|
TZOFFSETTO:-0500
|
|||
|
END:STANDARD
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 57]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
END:VTIMEZONE
|
|||
|
BEGIN:VEVENT
|
|||
|
DTSTAMP:20060206T001121Z
|
|||
|
DTSTART;TZID=US/Eastern:20060102T120000
|
|||
|
DURATION:PT1H
|
|||
|
RRULE:FREQ=DAILY;COUNT=5
|
|||
|
SUMMARY:Event #2
|
|||
|
UID:00959BC664CA650E933C892C@example.com
|
|||
|
END:VEVENT
|
|||
|
BEGIN:VEVENT
|
|||
|
DTSTAMP:20060206T001121Z
|
|||
|
DTSTART;TZID=US/Eastern:20060104T140000
|
|||
|
DURATION:PT1H
|
|||
|
RECURRENCE-ID;TZID=US/Eastern:20060104T120000
|
|||
|
SUMMARY:Event #2 bis
|
|||
|
UID:00959BC664CA650E933C892C@example.com
|
|||
|
END:VEVENT
|
|||
|
BEGIN:VEVENT
|
|||
|
DTSTAMP:20060206T001121Z
|
|||
|
DTSTART;TZID=US/Eastern:20060106T140000
|
|||
|
DURATION:PT1H
|
|||
|
RECURRENCE-ID;TZID=US/Eastern:20060106T120000
|
|||
|
SUMMARY:Event #2 bis bis
|
|||
|
UID:00959BC664CA650E933C892C@example.com
|
|||
|
END:VEVENT
|
|||
|
END:VCALENDAR
|
|||
|
</C:calendar-data>
|
|||
|
</D:prop>
|
|||
|
<D:status>HTTP/1.1 200 OK</D:status>
|
|||
|
</D:propstat>
|
|||
|
</D:response>
|
|||
|
<D:response>
|
|||
|
<D:href>http://cal.example.com/bernard/work/abcd3.ics</D:href>
|
|||
|
<D:propstat>
|
|||
|
<D:prop>
|
|||
|
<D:getetag>"fffff-abcd3"</D:getetag>
|
|||
|
<C:calendar-data>BEGIN:VCALENDAR
|
|||
|
VERSION:2.0
|
|||
|
PRODID:-//Example Corp.//CalDAV Client//EN
|
|||
|
BEGIN:VTIMEZONE
|
|||
|
LAST-MODIFIED:20040110T032845Z
|
|||
|
TZID:US/Eastern
|
|||
|
BEGIN:DAYLIGHT
|
|||
|
DTSTART:20000404T020000
|
|||
|
RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
|
|||
|
TZNAME:EDT
|
|||
|
TZOFFSETFROM:-0500
|
|||
|
TZOFFSETTO:-0400
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 58]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
END:DAYLIGHT
|
|||
|
BEGIN:STANDARD
|
|||
|
DTSTART:20001026T020000
|
|||
|
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
|
|||
|
TZNAME:EST
|
|||
|
TZOFFSETFROM:-0400
|
|||
|
TZOFFSETTO:-0500
|
|||
|
END:STANDARD
|
|||
|
END:VTIMEZONE
|
|||
|
BEGIN:VEVENT
|
|||
|
ATTENDEE;PARTSTAT=ACCEPTED;ROLE=CHAIR:mailto:cyrus@example.com
|
|||
|
ATTENDEE;PARTSTAT=NEEDS-ACTION:mailto:lisa@example.com
|
|||
|
DTSTAMP:20060206T001220Z
|
|||
|
DTSTART;TZID=US/Eastern:20060104T100000
|
|||
|
DURATION:PT1H
|
|||
|
LAST-MODIFIED:20060206T001330Z
|
|||
|
ORGANIZER:mailto:cyrus@example.com
|
|||
|
SEQUENCE:1
|
|||
|
STATUS:TENTATIVE
|
|||
|
SUMMARY:Event #3
|
|||
|
UID:DC6C50A017428C5216A2F1CD@example.com
|
|||
|
X-ABC-GUID:E1CX5Dr-0007ym-Hz@example.com
|
|||
|
END:VEVENT
|
|||
|
END:VCALENDAR
|
|||
|
</C:calendar-data>
|
|||
|
</D:prop>
|
|||
|
<D:status>HTTP/1.1 200 OK</D:status>
|
|||
|
</D:propstat>
|
|||
|
</D:response>
|
|||
|
</D:multistatus>
|
|||
|
|
|||
|
7.8.9. Example: Retrieval of All Pending To-Dos
|
|||
|
|
|||
|
In this example, the client requests the server to return all VTODO
|
|||
|
components that do not include a COMPLETED property and do not have a
|
|||
|
STATUS property value matching CANCELLED, i.e., VTODOs that still
|
|||
|
need to be worked on.
|
|||
|
|
|||
|
See Appendix B for the calendar data being targeted by this example.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 59]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
>> Request <<
|
|||
|
|
|||
|
REPORT /bernard/work/ HTTP/1.1
|
|||
|
Host: cal.example.com
|
|||
|
Depth: 1
|
|||
|
Content-Type: application/xml; charset="utf-8"
|
|||
|
Content-Length: xxxx
|
|||
|
|
|||
|
<?xml version="1.0" encoding="utf-8" ?>
|
|||
|
<C:calendar-query xmlns:C="urn:ietf:params:xml:ns:caldav">
|
|||
|
<D:prop xmlns:D="DAV:">
|
|||
|
<D:getetag/>
|
|||
|
<C:calendar-data/>
|
|||
|
</D:prop>
|
|||
|
<C:filter>
|
|||
|
<C:comp-filter name="VCALENDAR">
|
|||
|
<C:comp-filter name="VTODO">
|
|||
|
<C:prop-filter name="COMPLETED">
|
|||
|
<C:is-not-defined/>
|
|||
|
</C:prop-filter>
|
|||
|
<C:prop-filter name="STATUS">
|
|||
|
<C:text-match
|
|||
|
negate-condition="yes">CANCELLED</C:text-match>
|
|||
|
</C:prop-filter>
|
|||
|
</C:comp-filter>
|
|||
|
</C:comp-filter>
|
|||
|
</C:filter>
|
|||
|
</C:calendar-query>
|
|||
|
|
|||
|
>> Response <<
|
|||
|
|
|||
|
HTTP/1.1 207 Multi-Status
|
|||
|
Date: Sat, 11 Nov 2006 09:32:12 GMT
|
|||
|
Content-Type: application/xml; charset="utf-8"
|
|||
|
Content-Length: xxxx
|
|||
|
|
|||
|
<?xml version="1.0" encoding="utf-8" ?>
|
|||
|
<D:multistatus xmlns:D="DAV:"
|
|||
|
xmlns:C="urn:ietf:params:xml:ns:caldav">
|
|||
|
<D:response>
|
|||
|
<D:href>http://cal.example.com/bernard/work/abcd4.ics</D:href>
|
|||
|
<D:propstat>
|
|||
|
<D:prop>
|
|||
|
<D:getetag>"fffff-abcd4"</D:getetag>
|
|||
|
<C:calendar-data>BEGIN:VCALENDAR
|
|||
|
VERSION:2.0
|
|||
|
PRODID:-//Example Corp.//CalDAV Client//EN
|
|||
|
BEGIN:VTODO
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 60]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
DTSTAMP:20060205T235335Z
|
|||
|
DUE;VALUE=DATE:20060104
|
|||
|
STATUS:NEEDS-ACTION
|
|||
|
SUMMARY:Task #1
|
|||
|
UID:DDDEEB7915FA61233B861457@example.com
|
|||
|
BEGIN:VALARM
|
|||
|
ACTION:AUDIO
|
|||
|
TRIGGER;RELATED=START:-PT10M
|
|||
|
END:VALARM
|
|||
|
END:VTODO
|
|||
|
END:VCALENDAR
|
|||
|
</C:calendar-data>
|
|||
|
</D:prop>
|
|||
|
<D:status>HTTP/1.1 200 OK</D:status>
|
|||
|
</D:propstat>
|
|||
|
</D:response>
|
|||
|
|
|||
|
<D:response>
|
|||
|
<D:href>http://cal.example.com/bernard/work/abcd5.ics</D:href>
|
|||
|
<D:propstat>
|
|||
|
<D:prop>
|
|||
|
<D:getetag>"fffff-abcd5"</D:getetag>
|
|||
|
<C:calendar-data>BEGIN:VCALENDAR
|
|||
|
VERSION:2.0
|
|||
|
PRODID:-//Example Corp.//CalDAV Client//EN
|
|||
|
BEGIN:VTODO
|
|||
|
DTSTAMP:20060205T235300Z
|
|||
|
DUE;VALUE=DATE:20060106
|
|||
|
LAST-MODIFIED:20060205T235308Z
|
|||
|
SEQUENCE:1
|
|||
|
STATUS:NEEDS-ACTION
|
|||
|
SUMMARY:Task #2
|
|||
|
UID:E10BA47467C5C69BB74E8720@example.com
|
|||
|
BEGIN:VALARM
|
|||
|
ACTION:AUDIO
|
|||
|
TRIGGER;RELATED=START:-PT10M
|
|||
|
END:VALARM
|
|||
|
END:VTODO
|
|||
|
END:VCALENDAR
|
|||
|
</C:calendar-data>
|
|||
|
</D:prop>
|
|||
|
<D:status>HTTP/1.1 200 OK</D:status>
|
|||
|
</D:propstat>
|
|||
|
</D:response>
|
|||
|
</D:multistatus>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 61]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
7.8.10. Example: Attempt to Query Unsupported Property
|
|||
|
|
|||
|
In this example, the client requests the server to return all VEVENT
|
|||
|
components that include an X-ABC-GUID property with a value matching
|
|||
|
"ABC". However, the server does not support querying that non-
|
|||
|
standard property, and instead returns an error response.
|
|||
|
|
|||
|
See Appendix B for the calendar data being targeted by this example.
|
|||
|
|
|||
|
>> Request <<
|
|||
|
|
|||
|
REPORT /bernard/work/ HTTP/1.1
|
|||
|
Host: cal.example.com
|
|||
|
Depth: 1
|
|||
|
Content-Type: application/xml; charset="utf-8"
|
|||
|
Content-Length: xxxx
|
|||
|
|
|||
|
<?xml version="1.0" encoding="utf-8" ?>
|
|||
|
<C:calendar-query xmlns:C="urn:ietf:params:xml:ns:caldav">
|
|||
|
<D:prop xmlns:D="DAV:">
|
|||
|
<D:getetag/>
|
|||
|
<C:calendar-data/>
|
|||
|
</D:prop>
|
|||
|
<C:filter>
|
|||
|
<C:comp-filter name="VCALENDAR">
|
|||
|
<C:comp-filter name="VEVENT">
|
|||
|
<C:prop-filter name="X-ABC-GUID">
|
|||
|
<C:text-match>ABC</C:text-match>
|
|||
|
</C:prop-filter>
|
|||
|
</C:comp-filter>
|
|||
|
</C:comp-filter>
|
|||
|
</C:filter>
|
|||
|
</C:calendar-query>
|
|||
|
|
|||
|
>> Response <<
|
|||
|
|
|||
|
HTTP/1.1 403 Forbidden
|
|||
|
Date: Sat, 11 Nov 2005 09:32:12 GMT
|
|||
|
Content-Type: application/xml; charset="utf-8"
|
|||
|
Content-Length: xxxx
|
|||
|
|
|||
|
<?xml version="1.0" encoding="utf-8" ?>
|
|||
|
<D:error>
|
|||
|
<C:supported-filter>
|
|||
|
<C:prop-filter name="X-ABC-GUID"/>
|
|||
|
</C:supported-filter>
|
|||
|
</D:error>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 62]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
7.9. CALDAV:calendar-multiget REPORT
|
|||
|
|
|||
|
The CALDAV:calendar-multiget REPORT is used to retrieve specific
|
|||
|
calendar object resources from within a collection, if the Request-
|
|||
|
URI is a collection, or to retrieve a specific calendar object
|
|||
|
resource, if the Request-URI is a calendar object resource. This
|
|||
|
report is similar to the CALDAV:calendar-query REPORT (see
|
|||
|
Section 7.8), except that it takes a list of DAV:href elements,
|
|||
|
instead of a CALDAV:filter element, to determine which calendar
|
|||
|
object resources to return.
|
|||
|
|
|||
|
Support for the CALDAV:calendar-multiget REPORT is REQUIRED.
|
|||
|
|
|||
|
Marshalling:
|
|||
|
|
|||
|
The request body MUST be a CALDAV:calendar-multiget XML element
|
|||
|
(see Section 9.10). If the Request-URI is a collection resource,
|
|||
|
then the DAV:href elements MUST refer to calendar object resources
|
|||
|
within that collection, and they MAY refer to calendar object
|
|||
|
resources at any depth within the collection. As a result, the
|
|||
|
"Depth" header MUST be ignored by the server and SHOULD NOT be
|
|||
|
sent by the client. If the Request-URI refers to a non-collection
|
|||
|
resource, then there MUST be a single DAV:href element that is
|
|||
|
equivalent to the Request-URI.
|
|||
|
|
|||
|
The response body for a successful request MUST be a DAV:
|
|||
|
multistatus XML element.
|
|||
|
|
|||
|
The response body for a successful CALDAV:calendar-multiget REPORT
|
|||
|
request MUST contain a DAV:response element for each calendar
|
|||
|
object resource referenced by the provided set of DAV:href
|
|||
|
elements. Calendar data is being returned in the CALDAV:calendar-
|
|||
|
data element inside the DAV:prop element.
|
|||
|
|
|||
|
In the case of an error accessing any of the provided DAV:href
|
|||
|
resources, the server MUST return the appropriate error status
|
|||
|
code in the DAV:status element of the corresponding DAV:response
|
|||
|
element.
|
|||
|
|
|||
|
Preconditions:
|
|||
|
|
|||
|
(CALDAV:supported-calendar-data): The attributes "content-type"
|
|||
|
and "version" of the CALDAV:calendar-data XML elements (see
|
|||
|
Section 9.6) specify a media type supported by the server for
|
|||
|
calendar object resources.
|
|||
|
|
|||
|
(CALDAV:min-date-time): Any XML element specifying a range of time
|
|||
|
MUST have its start or end DATE or DATE-TIME values greater than
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 63]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
or equal to the value of the CALDAV:min-date-time property value
|
|||
|
(Section 5.2.6) on the calendar collections being targeted by the
|
|||
|
REPORT request;
|
|||
|
|
|||
|
(CALDAV:max-date-time): Any XML element specifying a range of time
|
|||
|
MUST have its start or end DATE or DATE-TIME values less than or
|
|||
|
equal to the value of the CALDAV:max-date-time property value
|
|||
|
(Section 5.2.7) on the calendar collections being targeted by the
|
|||
|
REPORT request;
|
|||
|
|
|||
|
Postconditions:
|
|||
|
|
|||
|
None.
|
|||
|
|
|||
|
7.9.1. Example: Successful CALDAV:calendar-multiget REPORT
|
|||
|
|
|||
|
In this example, the client requests the server to return specific
|
|||
|
properties of the VEVENT components referenced by specific URIs. In
|
|||
|
addition, the DAV:getetag property is also requested and returned as
|
|||
|
part of the response. Note that in this example, the resource at
|
|||
|
http://cal.example.com/bernard/work/mtg1.ics does not exist,
|
|||
|
resulting in an error status response.
|
|||
|
|
|||
|
See Appendix B for the calendar data being targeted by this example.
|
|||
|
|
|||
|
>> Request <<
|
|||
|
|
|||
|
REPORT /bernard/work/ HTTP/1.1
|
|||
|
Host: cal.example.com
|
|||
|
Content-Type: application/xml; charset="utf-8"
|
|||
|
Content-Length: xxxx
|
|||
|
|
|||
|
<?xml version="1.0" encoding="utf-8" ?>
|
|||
|
<C:calendar-multiget xmlns:D="DAV:"
|
|||
|
xmlns:C="urn:ietf:params:xml:ns:caldav">
|
|||
|
<D:prop>
|
|||
|
<D:getetag/>
|
|||
|
<C:calendar-data/>
|
|||
|
</D:prop>
|
|||
|
<D:href>/bernard/work/abcd1.ics</D:href>
|
|||
|
<D:href>/bernard/work/mtg1.ics</D:href>
|
|||
|
</C:calendar-multiget>
|
|||
|
|
|||
|
>> Response <<
|
|||
|
|
|||
|
HTTP/1.1 207 Multi-Status
|
|||
|
Date: Sat, 11 Nov 2006 09:32:12 GMT
|
|||
|
Content-Type: application/xml; charset="utf-8"
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 64]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
Content-Length: xxxx
|
|||
|
|
|||
|
<?xml version="1.0" encoding="utf-8" ?>
|
|||
|
<D:multistatus xmlns:D="DAV:"
|
|||
|
xmlns:C="urn:ietf:params:xml:ns:caldav">
|
|||
|
<D:response>
|
|||
|
<D:href>http://cal.example.com/bernard/work/abcd1.ics</D:href>
|
|||
|
<D:propstat>
|
|||
|
<D:prop>
|
|||
|
<D:getetag>"fffff-abcd1"</D:getetag>
|
|||
|
<C:calendar-data>BEGIN:VCALENDAR
|
|||
|
VERSION:2.0
|
|||
|
PRODID:-//Example Corp.//CalDAV Client//EN
|
|||
|
BEGIN:VTIMEZONE
|
|||
|
LAST-MODIFIED:20040110T032845Z
|
|||
|
TZID:US/Eastern
|
|||
|
BEGIN:DAYLIGHT
|
|||
|
DTSTART:20000404T020000
|
|||
|
RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
|
|||
|
TZNAME:EDT
|
|||
|
TZOFFSETFROM:-0500
|
|||
|
TZOFFSETTO:-0400
|
|||
|
END:DAYLIGHT
|
|||
|
BEGIN:STANDARD
|
|||
|
DTSTART:20001026T020000
|
|||
|
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
|
|||
|
TZNAME:EST
|
|||
|
TZOFFSETFROM:-0400
|
|||
|
TZOFFSETTO:-0500
|
|||
|
END:STANDARD
|
|||
|
END:VTIMEZONE
|
|||
|
BEGIN:VEVENT
|
|||
|
DTSTAMP:20060206T001102Z
|
|||
|
DTSTART;TZID=US/Eastern:20060102T100000
|
|||
|
DURATION:PT1H
|
|||
|
SUMMARY:Event #1
|
|||
|
Description:Go Steelers!
|
|||
|
UID:74855313FA803DA593CD579A@example.com
|
|||
|
END:VEVENT
|
|||
|
END:VCALENDAR
|
|||
|
</C:calendar-data>
|
|||
|
</D:prop>
|
|||
|
<D:status>HTTP/1.1 200 OK</D:status>
|
|||
|
</D:propstat>
|
|||
|
</D:response>
|
|||
|
<D:response>
|
|||
|
<D:href>http://cal.example.com/bernard/work/mtg1.ics</D:href>
|
|||
|
<D:status>HTTP/1.1 404 Not Found</D:status>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 65]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
</D:response>
|
|||
|
</D:multistatus>
|
|||
|
|
|||
|
7.10. CALDAV:free-busy-query REPORT
|
|||
|
|
|||
|
The CALDAV:free-busy-query REPORT generates a VFREEBUSY component
|
|||
|
containing free busy information for all the calendar object
|
|||
|
resources targeted by the request and that have the CALDAV:read-free-
|
|||
|
busy or DAV:read privilege granted to the current user.
|
|||
|
|
|||
|
Only VEVENT components without a TRANSP property or with the TRANSP
|
|||
|
property set to OPAQUE, and VFREEBUSY components SHOULD be considered
|
|||
|
in generating the free busy time information.
|
|||
|
|
|||
|
In the case of VEVENT components, the free or busy time type (FBTYPE)
|
|||
|
of the FREEBUSY properties in the returned VFREEBUSY component SHOULD
|
|||
|
be derived from the value of the TRANSP and STATUS properties, as
|
|||
|
outlined in the table below:
|
|||
|
|
|||
|
+---------------------------++------------------+
|
|||
|
| VEVENT || VFREEBUSY |
|
|||
|
+-------------+-------------++------------------+
|
|||
|
| TRANSP | STATUS || FBTYPE |
|
|||
|
+=============+=============++==================+
|
|||
|
| | CONFIRMED || BUSY |
|
|||
|
| | (default) || |
|
|||
|
| OPAQUE +-------------++------------------+
|
|||
|
| (default) | CANCELLED || FREE |
|
|||
|
| +-------------++------------------+
|
|||
|
| | TENTATIVE || BUSY-TENTATIVE |
|
|||
|
| +-------------++------------------+
|
|||
|
| | x-name || BUSY or |
|
|||
|
| | || x-name |
|
|||
|
+-------------+-------------++------------------+
|
|||
|
| | CONFIRMED || |
|
|||
|
| TRANSPARENT | CANCELLED || FREE |
|
|||
|
| | TENTATIVE || |
|
|||
|
| | x-name || |
|
|||
|
+-------------+-------------++------------------+
|
|||
|
|
|||
|
Duplicate busy time periods with the same FBTYPE parameter value
|
|||
|
SHOULD NOT be specified in the returned VFREEBUSY component. Servers
|
|||
|
SHOULD coalesce consecutive or overlapping busy time periods of the
|
|||
|
same type. Busy time periods with different FBTYPE parameter values
|
|||
|
MAY overlap.
|
|||
|
|
|||
|
Support for the CALDAV:free-busy-query REPORT is REQUIRED.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 66]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
Marshalling:
|
|||
|
|
|||
|
The request body MUST be a CALDAV:free-busy-query XML element (see
|
|||
|
Section 9.11), which MUST contain exactly one CALDAV:time-range
|
|||
|
XML element, as defined in Section 9.9.
|
|||
|
|
|||
|
The request MAY include a Depth header. If no Depth header is
|
|||
|
included, Depth:0 is assumed.
|
|||
|
|
|||
|
The response body for a successful request MUST be an iCalendar
|
|||
|
object that contains exactly one VFREEBUSY component that
|
|||
|
describes the busy time intervals for the calendar object
|
|||
|
resources containing VEVENT, or VFREEBUSY components that satisfy
|
|||
|
the Depth value and for which the current user is at least granted
|
|||
|
the CALDAV:read-free-busy privilege. If no calendar object
|
|||
|
resources are found to satisfy these conditions, a VFREEBUSY
|
|||
|
component with no FREEBUSY property MUST be returned. This report
|
|||
|
only returns busy time information. Free time information can be
|
|||
|
inferred from the returned busy time information.
|
|||
|
|
|||
|
If the current user is not granted the CALDAV:read-free-busy or
|
|||
|
DAV:read privileges on the Request-URI, the CALDAV:free-busy-query
|
|||
|
REPORT request MUST fail and return a 404 (Not Found) status
|
|||
|
value. This restriction will prevent users from discovering URLs
|
|||
|
of resources for which they are only granted the CALDAV:read-free-
|
|||
|
busy privilege.
|
|||
|
|
|||
|
The CALDAV:free-busy-query REPORT request can only be run against
|
|||
|
a collection (either a regular collection or a calendar
|
|||
|
collection). An attempt to run the report on a calendar object
|
|||
|
resource MUST fail and return a 403 (Forbidden) status value.
|
|||
|
|
|||
|
Preconditions:
|
|||
|
|
|||
|
None.
|
|||
|
|
|||
|
Postconditions:
|
|||
|
|
|||
|
(DAV:number-of-matches-within-limits): The number of matching
|
|||
|
calendar object resources must fall within server-specific,
|
|||
|
predefined limits. For example, this postcondition might fail if
|
|||
|
the specified CALDAV:time-range would cause an extremely large
|
|||
|
number of calendar object resources to be considered in computing
|
|||
|
the response.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 67]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
7.10.1. Example: Successful CALDAV:free-busy-query REPORT
|
|||
|
|
|||
|
In this example, the client requests the server to return free busy
|
|||
|
information on the calendar collection /bernard/work/, between 9:00
|
|||
|
A.M. and 5:00 P.M. EST (2:00 P.M. and 10:00 P.M. UTC) on the January
|
|||
|
4, 2006. The server responds, indicating two busy time intervals of
|
|||
|
one hour, one of which is tentative.
|
|||
|
|
|||
|
See Appendix B for the calendar data being targeted by this example.
|
|||
|
|
|||
|
>> Request <<
|
|||
|
|
|||
|
REPORT /bernard/work/ HTTP/1.1
|
|||
|
Host: cal.example.com
|
|||
|
Depth: 1
|
|||
|
Content-Type: application/xml; charset="utf-8"
|
|||
|
Content-Length: xxxx
|
|||
|
|
|||
|
<?xml version="1.0" encoding="utf-8" ?>
|
|||
|
<C:free-busy-query xmlns:C="urn:ietf:params:xml:ns:caldav">
|
|||
|
<C:time-range start="20060104T140000Z"
|
|||
|
end="20060105T220000Z"/>
|
|||
|
</C:free-busy-query>
|
|||
|
|
|||
|
>> Response <<
|
|||
|
|
|||
|
HTTP/1.1 200 OK
|
|||
|
Date: Sat, 11 Nov 2006 09:32:12 GMT
|
|||
|
Content-Type: text/calendar
|
|||
|
Content-Length: xxxx
|
|||
|
|
|||
|
BEGIN:VCALENDAR
|
|||
|
VERSION:2.0
|
|||
|
PRODID:-//Example Corp.//CalDAV Server//EN
|
|||
|
BEGIN:VFREEBUSY
|
|||
|
DTSTAMP:20050125T090000Z
|
|||
|
DTSTART:20060104T140000Z
|
|||
|
DTEND:20060105T220000Z
|
|||
|
FREEBUSY;FBTYPE=BUSY-TENTATIVE:20060104T150000Z/PT1H
|
|||
|
FREEBUSY:20060104T190000Z/PT1H
|
|||
|
END:VFREEBUSY
|
|||
|
END:VCALENDAR
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 68]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
8. Guidelines
|
|||
|
|
|||
|
8.1. Client-to-Client Interoperability
|
|||
|
|
|||
|
There are a number of actions clients can take that will be legal
|
|||
|
(the server will not return errors), but that can degrade
|
|||
|
interoperability with other client implementations accessing the same
|
|||
|
data. For example, a recurrence rule could be replaced with a set of
|
|||
|
recurrence dates, a single recurring event could be replaced with a
|
|||
|
set of independent resources to represent each recurrence, or the
|
|||
|
start/end time values can be translated from the original time zone
|
|||
|
to another time zone. Although this advice amounts to iCalendar
|
|||
|
interoperability best practices and is not limited only to CalDAV
|
|||
|
usage, interoperability problems are likely to be more evident in
|
|||
|
CalDAV use cases.
|
|||
|
|
|||
|
8.2. Synchronization Operations
|
|||
|
|
|||
|
WebDAV already provides functionality required to synchronize a
|
|||
|
collection or set of collections, to make changes offline, and
|
|||
|
provides a simple way to resolve conflicts when reconnected. ETags
|
|||
|
are the key to making this work, but these are not required of all
|
|||
|
WebDAV servers. Since offline functionality is more important to
|
|||
|
calendar applications than to some other WebDAV applications, CalDAV
|
|||
|
servers MUST support ETags, as specified in Section 5.3.4.
|
|||
|
|
|||
|
8.2.1. Use of Reports
|
|||
|
|
|||
|
8.2.1.1. Restrict the Time Range
|
|||
|
|
|||
|
The reports provided in CalDAV can be used by clients to optimize
|
|||
|
their performance in terms of network bandwidth usage and resource
|
|||
|
consumption on the local client machine. Both are certainly major
|
|||
|
considerations for mobile or handheld devices with limited capacity,
|
|||
|
but they are also relevant to desktop client applications in cases
|
|||
|
where the calendar collections contain large amounts of data.
|
|||
|
|
|||
|
Typically, clients present calendar data to users in views that span
|
|||
|
a finite time interval, so whenever possible, clients should only
|
|||
|
retrieve calendar components from the server using CALDAV:calendar-
|
|||
|
query REPORT, combined with a CALDAV:time-range element, to limit the
|
|||
|
set of returned components to just those needed to populate the
|
|||
|
current view.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 69]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
8.2.1.2. Synchronize by Time Range
|
|||
|
|
|||
|
Typically in a calendar, historical data (events, to-dos, etc. that
|
|||
|
have completed prior to the current date) do not change, though they
|
|||
|
may be deleted. As a result, a client can speed up the
|
|||
|
synchronization process by only considering data for the present time
|
|||
|
and the future up to a reasonable limit (e.g., one week, one month).
|
|||
|
If the user then tries to examine a portion of the calendar outside
|
|||
|
the range that has been synchronized, the client can perform another
|
|||
|
synchronization operation on the new time interval being examined.
|
|||
|
This "just-in-time" synchronization can minimize bandwidth for common
|
|||
|
user interaction behaviors.
|
|||
|
|
|||
|
8.2.1.3. Synchronization Process
|
|||
|
|
|||
|
If a client wants to support calendar data synchronization, as
|
|||
|
opposed to downloading calendar data each time it is needed, the
|
|||
|
client needs to cache the calendar object resource's URI and ETag,
|
|||
|
along with the actual calendar data. While the URI remains static
|
|||
|
for the lifetime of the calendar object resource, the ETag will
|
|||
|
change with each successive change to the calendar object resource.
|
|||
|
Thus, to synchronize a local data cache with the server, the client
|
|||
|
can first fetch the URI/ETag pairs for the time interval being
|
|||
|
considered, and compare those results with the cached data. Any
|
|||
|
cached component whose ETag differs from that on the server needs to
|
|||
|
be refreshed.
|
|||
|
|
|||
|
In order to properly detect the changes between the server and client
|
|||
|
data, the client will need to keep a record of which calendar object
|
|||
|
resources have been created, changed, or deleted since the last
|
|||
|
synchronization operation so that it can reconcile those changes with
|
|||
|
the data on the server.
|
|||
|
|
|||
|
Here's an example of how to do that:
|
|||
|
|
|||
|
The client issues a CALDAV:calendar-query REPORT request for a
|
|||
|
specific time range and asks for only the DAV:getetag property to be
|
|||
|
returned:
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 70]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
REPORT /bernard/work/ HTTP/1.1
|
|||
|
Host: cal.example.com
|
|||
|
Depth: 1
|
|||
|
Content-Type: application/xml; charset="utf-8"
|
|||
|
Content-Length: xxxx
|
|||
|
|
|||
|
<?xml version="1.0" encoding="utf-8" ?>
|
|||
|
<C:calendar-query xmlns:D="DAV:"
|
|||
|
xmlns:C="urn:ietf:params:xml:ns:caldav">
|
|||
|
<D:prop>
|
|||
|
<D:getetag/>
|
|||
|
</D:prop>
|
|||
|
<C:filter>
|
|||
|
<C:comp-filter name="VCALENDAR">
|
|||
|
<C:comp-filter name="VEVENT">
|
|||
|
<C:time-range start="20040902T000000Z"
|
|||
|
end="20040903T000000Z"/>
|
|||
|
</C:comp-filter>
|
|||
|
</C:comp-filter>
|
|||
|
</C:filter>
|
|||
|
</C:calendar-query>
|
|||
|
|
|||
|
The client then uses the results to determine which calendar object
|
|||
|
resources have changed, been created, or deleted on the server, and
|
|||
|
how those relate to locally cached calendar object resources that may
|
|||
|
have changed, been created, or deleted. If the client determines
|
|||
|
that there are calendar object resources on the server that need to
|
|||
|
be fetched, the client issues a CALDAV:calendar-multiget REPORT
|
|||
|
request to fetch its calendar data:
|
|||
|
|
|||
|
REPORT /bernard/work/ HTTP/1.1
|
|||
|
Host: cal.example.com
|
|||
|
Content-Type: application/xml; charset="utf-8"
|
|||
|
Content-Length: xxxx
|
|||
|
|
|||
|
<?xml version="1.0" encoding="utf-8" ?>
|
|||
|
<C:calendar-multiget xmlns:D="DAV:"
|
|||
|
xmlns:C="urn:ietf:params:xml:ns:caldav">
|
|||
|
<D:prop>
|
|||
|
<D:getetag/>
|
|||
|
<C:calendar-data/>
|
|||
|
</D:prop>
|
|||
|
<D:href>/bernard/work/abcd1.ics</D:href>
|
|||
|
<D:href>/bernard/work/mtg1.ics</D:href>
|
|||
|
</C:calendar-multiget>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 71]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
8.2.2. Restrict the Properties Returned
|
|||
|
|
|||
|
A client may not need all the calendar properties of a calendar
|
|||
|
object resource when presenting information to the user. Since some
|
|||
|
calendar property values can be large (e.g., ATTACH or ATTENDEE), a
|
|||
|
client can choose to restrict the calendar properties to be returned
|
|||
|
in a calendaring REPORT request to those it knows it will use.
|
|||
|
|
|||
|
However, if a client needs to make a change to a calendar object
|
|||
|
resource, it can only change the entire calendar object resource via
|
|||
|
a PUT request. There is currently no way to incrementally make a
|
|||
|
change to a set of calendar properties of a calendar object resource.
|
|||
|
As a result, the client will have to get the entire calendar object
|
|||
|
resource that is being changed.
|
|||
|
|
|||
|
8.3. Use of Locking
|
|||
|
|
|||
|
WebDAV locks can be used to prevent two clients that are modifying
|
|||
|
the same resource from either overwriting each others' changes
|
|||
|
(though that problem can also be solved by using ETags) or wasting
|
|||
|
time making changes that will conflict with another set of changes.
|
|||
|
In a multi-user calendar system, an interactive calendar client could
|
|||
|
lock an event while the user is editing the event, and unlock the
|
|||
|
event when the user finishes or cancels. Locks can also be used to
|
|||
|
prevent changes while data is being reorganized. For example, a
|
|||
|
calendar client might lock two calendar collections prior to moving a
|
|||
|
bunch of calendar resources from one to another.
|
|||
|
|
|||
|
Clients are responsible for requesting a lock timeout period that is
|
|||
|
appropriate to the use case. When the user explicitly decides to
|
|||
|
reserve a resource and prevent other changes, a long timeout might be
|
|||
|
appropriate, but in cases where the client automatically decides to
|
|||
|
lock the resource, the timeout should be short (and the client can
|
|||
|
always refresh the lock should it need to). A short lock timeout
|
|||
|
means that if the client is unable to remove the lock, the other
|
|||
|
calendar users aren't prevented from making changes.
|
|||
|
|
|||
|
8.4. Finding Calendars
|
|||
|
|
|||
|
Much of the time, a calendar client (or agent) will discover a new
|
|||
|
calendar's location by being provided directly with the URL. For
|
|||
|
example, a user will type his or her own calendar location into
|
|||
|
client configuration information or copy and paste a URL from email
|
|||
|
into the calendar application. The client need only confirm that the
|
|||
|
URL points to a resource that is a calendar collection. The client
|
|||
|
may also be able to browse WebDAV collections to find calendar
|
|||
|
collections.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 72]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
The choice of HTTP URLs means that calendar object resources are
|
|||
|
backward compatible with existing software, but does have the
|
|||
|
disadvantage that existing software does not usually know to look at
|
|||
|
the OPTIONS response to that URL to determine what can be done with
|
|||
|
it. This is somewhat of a barrier for WebDAV usage as well as with
|
|||
|
CalDAV usage. This specification does not offer a way through this
|
|||
|
other than making the information available in the OPTIONS response
|
|||
|
should this be requested.
|
|||
|
|
|||
|
For calendar sharing and scheduling use cases, one might wish to find
|
|||
|
the calendar belonging to another user. If the other user has a
|
|||
|
calendar in the same repository, that calendar can be found by using
|
|||
|
the principal namespace required by WebDAV ACL support. For other
|
|||
|
cases, the authors have no universal solution, but implementers can
|
|||
|
consider whether to use vCard [RFC2426] or LDAP [RFC4511] standards
|
|||
|
together with calendar attributes [RFC2739].
|
|||
|
|
|||
|
Because CalDAV requires servers to support WebDAV ACL [RFC3744],
|
|||
|
including principal namespaces, and with the addition of the CALDAV:
|
|||
|
calendar-home-set property, there are a couple options for CalDAV
|
|||
|
clients to find one's own calendar or another user's calendar.
|
|||
|
|
|||
|
In this case, a DAV:principal-match REPORT is used to find a named
|
|||
|
property (the CALDAV:calendar-home-set) on the Principal-URL of the
|
|||
|
current user. Using this, a WebDAV client can learn "who am I" and
|
|||
|
"where are my calendars". The REPORT request body looks like this:
|
|||
|
|
|||
|
<?xml version="1.0" encoding="utf-8" ?>
|
|||
|
<D:principal-match xmlns:D="DAV:">
|
|||
|
<D:self/>
|
|||
|
<D:prop>
|
|||
|
<C:calendar-home-set
|
|||
|
xmlns:C="urn:ietf:params:xml:ns:caldav"/>
|
|||
|
</D:prop>
|
|||
|
</D:principal-match>
|
|||
|
|
|||
|
To find other users' calendars, the DAV:principal-property-search
|
|||
|
REPORT can be used to filter on some properties and return others.
|
|||
|
To search for a calendar owned by a user named "Laurie", the REPORT
|
|||
|
request body would look like this:
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 73]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
<?xml version="1.0" encoding="utf-8" ?>
|
|||
|
<D:principal-property-search xmlns:D="DAV:">
|
|||
|
<D:property-search>
|
|||
|
<D:prop>
|
|||
|
<D:displayname/>
|
|||
|
</D:prop>
|
|||
|
<D:match>Laurie</D:match>
|
|||
|
</D:property-search>
|
|||
|
<D:prop>
|
|||
|
<C:calendar-home-set
|
|||
|
xmlns:C="urn:ietf:params:xml:ns:caldav"/>
|
|||
|
<D:displayname/>
|
|||
|
</D:prop>
|
|||
|
</D:principal-property-search>
|
|||
|
|
|||
|
The server performs a case-sensitive or caseless search for a
|
|||
|
matching string subset of "Laurie" within the DAV:displayname
|
|||
|
property. Thus, the server might return "Laurie Dusseault", "Laurier
|
|||
|
Desruisseaux", or "Wilfrid Laurier" as matching DAV:displayname
|
|||
|
values, and return the calendars for each of these.
|
|||
|
|
|||
|
8.5. Storing and Using Attachments
|
|||
|
|
|||
|
CalDAV clients MAY create attachments in calendar components either
|
|||
|
as inline or external. This section contains some guidelines for
|
|||
|
creating and managing attachments.
|
|||
|
|
|||
|
8.5.1. Inline Attachments
|
|||
|
|
|||
|
CalDAV clients MUST support inline attachments as specified in
|
|||
|
iCalendar [RFC2445]. CalDAV servers MUST support inline attachments,
|
|||
|
so clients can rely on being able to create attachments this way. On
|
|||
|
the other hand, inline attachments have some drawbacks:
|
|||
|
|
|||
|
o Servers MAY impose limitations on the size of calendar object
|
|||
|
resources (i.e., refusing PUT requests of very large iCalendar
|
|||
|
objects). Servers that impose such limitations MUST use the
|
|||
|
CALDAV:max-resource-size property on a calendar collection to
|
|||
|
inform the client as to what the limitation is (see
|
|||
|
Section 5.2.5).
|
|||
|
|
|||
|
o Servers MAY impose storage quota limitations on calendar
|
|||
|
collections (See [RFC4331]).
|
|||
|
|
|||
|
o Any change to a calendar object resource containing an inline
|
|||
|
attachment requires the entire inline attachment to be re-
|
|||
|
uploaded.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 74]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
o Clients synchronizing a changed calendar object resource have to
|
|||
|
download the entire calendar object resource, even if the
|
|||
|
attachment is unchanged.
|
|||
|
|
|||
|
8.5.2. External Attachments
|
|||
|
|
|||
|
CalDAV clients SHOULD support downloading of external attachments
|
|||
|
referenced by arbitrary URI schemes, by either processing them
|
|||
|
directly, or by passing the attachment URI to a suitable "helper
|
|||
|
application" for processing, if such an application exists. CalDAV
|
|||
|
clients MUST support downloading of external attachments referenced
|
|||
|
by the "http" or "https" URI schemes. An external attachment could
|
|||
|
be:
|
|||
|
|
|||
|
o In a collection in the calendar collection containing the calendar
|
|||
|
object resource;
|
|||
|
|
|||
|
o Somewhere else in the same repository that hosts the calendar
|
|||
|
collection; or
|
|||
|
|
|||
|
o On an HTTP or FTP server elsewhere.
|
|||
|
|
|||
|
CalDAV servers MAY provide support for child collections in calendar
|
|||
|
collections. CalDAV servers MAY allow the MKCOL method to create
|
|||
|
child collections in calendar collections. Child collections of
|
|||
|
calendar collections MAY contain any type of resource except calendar
|
|||
|
collections that they MUST NOT contain. Some CalDAV servers won't
|
|||
|
allow child collections in calendar collections, and it may be
|
|||
|
possible on such a server to discover other locations where
|
|||
|
attachments can be stored.
|
|||
|
|
|||
|
Clients are entirely responsible for maintaining reference
|
|||
|
consistency with calendar components that link to external
|
|||
|
attachments. A client deleting a calendar component with an external
|
|||
|
attachment might therefore also delete the attachment if that's
|
|||
|
appropriate; however, appropriateness can be very hard to determine.
|
|||
|
A new component might easily reference some pre-existing Web resource
|
|||
|
that is intended to have independent existence from the calendar
|
|||
|
component (the "attachment" could be a major proposal to be discussed
|
|||
|
in a meeting, for instance). Best practices will probably emerge and
|
|||
|
should probably be documented, but for now, clients should be wary of
|
|||
|
engaging in aggressive "cleanup" of external attachments. A client
|
|||
|
could involve the user in making decisions about removing
|
|||
|
unreferenced documents, or a client could be conservative in only
|
|||
|
deleting attachments it had created.
|
|||
|
|
|||
|
Also, clients are responsible for consistency of permissions when
|
|||
|
using external attachments. One reason for servers to support the
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 75]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
storage of attachments within child collections of calendar
|
|||
|
collections is that ACL inheritance might make it easier to grant the
|
|||
|
same permissions to attachments that are granted on the calendar
|
|||
|
collection. Otherwise, it can be very difficult to keep permissions
|
|||
|
synchronized. With attachments stored on separate repositories, it
|
|||
|
can be impossible to keep permissions consistent -- the two
|
|||
|
repositories may not support the same permissions or have the same
|
|||
|
set of principals. Some systems have used tickets or other anonymous
|
|||
|
access control mechanisms to provide partially satisfactory solutions
|
|||
|
to these kinds of problems.
|
|||
|
|
|||
|
8.6. Storing and Using Alarms
|
|||
|
|
|||
|
Note that all CalDAV calendar collections (including those the user
|
|||
|
might treat as public or group calendars) can contain alarm
|
|||
|
information on events and to-dos. Users can synchronize a calendar
|
|||
|
between multiple devices and decide to have alarms execute on a
|
|||
|
different device than the device that created the alarm. Not all
|
|||
|
alarm action types are completely interoperable (e.g., those that
|
|||
|
name a sound file to play).
|
|||
|
|
|||
|
When the action is AUDIO and the client is configured to execute
|
|||
|
the alarm, the client SHOULD play the suggested sound if it's
|
|||
|
available or play another sound, but SHOULD NOT rewrite the alarm
|
|||
|
just to replace the suggested sound with a sound that's locally
|
|||
|
available.
|
|||
|
|
|||
|
When the action is DISPLAY and the client is configured to execute
|
|||
|
the alarm, the client SHOULD execute a display alarm by displaying
|
|||
|
according to the suggested description or some reasonable
|
|||
|
replacement, but SHOULD NOT rewrite the alarm for its own
|
|||
|
convenience.
|
|||
|
|
|||
|
When the action is EMAIL and the client is incapable of sending
|
|||
|
email, it SHOULD ignore the alarm, but it MUST continue to
|
|||
|
synchronize the alarm itself.
|
|||
|
|
|||
|
This specification makes no recommendations about executing alarms
|
|||
|
of type PROCEDURE, except to note that clients are advised to take
|
|||
|
care to avoid creating security holes by executing these.
|
|||
|
|
|||
|
Non-interoperable alarm information (e.g., should somebody define a
|
|||
|
color to be used in a display alarm) should be put in non-standard
|
|||
|
properties inside the VALARM component in order to keep the basic
|
|||
|
alarm usable on all devices.
|
|||
|
|
|||
|
Clients that allow changes to calendar object resources MUST
|
|||
|
synchronize the alarm data that already exists in the resources.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 76]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
Clients MAY execute alarms that are downloaded in this fashion,
|
|||
|
possibly based on user preference. If a client is only doing read
|
|||
|
operations on a calendar and there is no risk of losing alarm
|
|||
|
information, then the client MAY discard alarm information.
|
|||
|
|
|||
|
This specification makes no attempt to provide multi-user alarms on
|
|||
|
group calendars or to find out for whom an alarm is intended.
|
|||
|
Addressing those issues might require extensions to iCalendar; for
|
|||
|
example, to store alarms per-user, or to indicate for which user a
|
|||
|
VALARM was intended. In the meantime, clients might maximize
|
|||
|
interoperability by generally not uploading alarm information to
|
|||
|
public, group, or resource calendars.
|
|||
|
|
|||
|
9. XML Element Definitions
|
|||
|
|
|||
|
9.1. CALDAV:calendar XML Element
|
|||
|
|
|||
|
Name: calendar
|
|||
|
|
|||
|
Namespace: urn:ietf:params:xml:ns:caldav
|
|||
|
|
|||
|
Purpose: Specifies the resource type of a calendar collection.
|
|||
|
|
|||
|
Description: See Section 4.2.
|
|||
|
|
|||
|
Definition:
|
|||
|
|
|||
|
<!ELEMENT calendar EMPTY>
|
|||
|
|
|||
|
9.2. CALDAV:mkcalendar XML Element
|
|||
|
|
|||
|
Name: mkcalendar
|
|||
|
|
|||
|
Namespace: urn:ietf:params:xml:ns:caldav
|
|||
|
|
|||
|
Purpose: Specifies a request that includes the WebDAV property
|
|||
|
values to be set for a calendar collection resource when it is
|
|||
|
created.
|
|||
|
|
|||
|
Description: See Section 5.3.1.
|
|||
|
|
|||
|
Definition:
|
|||
|
|
|||
|
<!ELEMENT mkcalendar (DAV:set)>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 77]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
9.3. CALDAV:mkcalendar-response XML Element
|
|||
|
|
|||
|
Name: mkcalendar-response
|
|||
|
|
|||
|
Namespace: urn:ietf:params:xml:ns:caldav
|
|||
|
|
|||
|
Purpose: Specifies a response body for a successful MKCALENDAR
|
|||
|
request.
|
|||
|
|
|||
|
Description: See Section 5.3.1.
|
|||
|
|
|||
|
Definition:
|
|||
|
|
|||
|
<!ELEMENT mkcalendar-response ANY>
|
|||
|
|
|||
|
9.4. CALDAV:supported-collation XML Element
|
|||
|
|
|||
|
Name: supported-collation
|
|||
|
|
|||
|
Namespace: urn:ietf:params:xml:ns:caldav
|
|||
|
|
|||
|
Purpose: Identifies a single collation via its collation identifier,
|
|||
|
as defined by [RFC4790].
|
|||
|
|
|||
|
Description: The CALDAV:supported-collation contains the text of a
|
|||
|
collation identifier, as described in Section 7.5.1.
|
|||
|
|
|||
|
Definition:
|
|||
|
|
|||
|
<!ELEMENT supported-collation (#PCDATA)>
|
|||
|
PCDATA value: collation identifier
|
|||
|
|
|||
|
9.5. CALDAV:calendar-query XML Element
|
|||
|
|
|||
|
Name: calendar-query
|
|||
|
|
|||
|
Namespace: urn:ietf:params:xml:ns:caldav
|
|||
|
|
|||
|
Purpose: Defines a report for querying calendar object resources.
|
|||
|
|
|||
|
Description: See Section 7.8.
|
|||
|
|
|||
|
Definition:
|
|||
|
|
|||
|
<!ELEMENT calendar-query ((DAV:allprop |
|
|||
|
DAV:propname |
|
|||
|
DAV:prop)?, filter, timezone?)>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 78]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
9.6. CALDAV:calendar-data XML Element
|
|||
|
|
|||
|
Name: calendar-data
|
|||
|
|
|||
|
Namespace: urn:ietf:params:xml:ns:caldav
|
|||
|
|
|||
|
Purpose: Specified one of the following:
|
|||
|
|
|||
|
1. A supported media type for calendar object resources when
|
|||
|
nested in the CALDAV:supported-calendar-data property;
|
|||
|
|
|||
|
2. The parts of a calendar object resource should be returned by
|
|||
|
a calendaring report;
|
|||
|
|
|||
|
3. The content of a calendar object resource in a response to a
|
|||
|
calendaring report.
|
|||
|
|
|||
|
Description: When nested in the CALDAV:supported-calendar-data
|
|||
|
property, the CALDAV:calendar-data XML element specifies a media
|
|||
|
type supported by the CalDAV server for calendar object resources.
|
|||
|
|
|||
|
When used in a calendaring REPORT request, the CALDAV:calendar-
|
|||
|
data XML element specifies which parts of calendar object
|
|||
|
resources need to be returned in the response. If the CALDAV:
|
|||
|
calendar-data XML element doesn't contain any CALDAV:comp element,
|
|||
|
calendar object resources will be returned in their entirety.
|
|||
|
|
|||
|
Finally, when used in a calendaring REPORT response, the CALDAV:
|
|||
|
calendar-data XML element specifies the content of a calendar
|
|||
|
object resource. Given that XML parsers normalize the two-
|
|||
|
character sequence CRLF (US-ASCII decimal 13 and US-ASCII decimal
|
|||
|
10) to a single LF character (US-ASCII decimal 10), the CR
|
|||
|
character (US-ASCII decimal 13) MAY be omitted in calendar object
|
|||
|
resources specified in the CALDAV:calendar-data XML element.
|
|||
|
Furthermore, calendar object resources specified in the CALDAV:
|
|||
|
calendar-data XML element MAY be invalid per their media type
|
|||
|
specification if the CALDAV:calendar-data XML element part of the
|
|||
|
calendaring REPORT request did not specify required properties
|
|||
|
(e.g., UID, DTSTAMP, etc.), or specified a CALDAV:prop XML element
|
|||
|
with the "novalue" attribute set to "yes".
|
|||
|
|
|||
|
Note: The CALDAV:calendar-data XML element is specified in requests
|
|||
|
and responses inside the DAV:prop XML element as if it were a
|
|||
|
WebDAV property. However, the CALDAV:calendar-data XML element is
|
|||
|
not a WebDAV property and, as such, is not returned in PROPFIND
|
|||
|
responses, nor used in PROPPATCH requests.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 79]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
Note: The iCalendar data embedded within the CALDAV:calendar-data
|
|||
|
XML element MUST follow the standard XML character data encoding
|
|||
|
rules, including use of <, >, & etc. entity encoding or
|
|||
|
the use of a <![CDATA[ ... ]]> construct. In the later case, the
|
|||
|
iCalendar data cannot contain the character sequence "]]>", which
|
|||
|
is the end delimiter for the CDATA section.
|
|||
|
|
|||
|
Definition:
|
|||
|
|
|||
|
<!ELEMENT calendar-data EMPTY>
|
|||
|
|
|||
|
when nested in the CALDAV:supported-calendar-data property
|
|||
|
to specify a supported media type for calendar object
|
|||
|
resources;
|
|||
|
|
|||
|
<!ELEMENT calendar-data (comp?,
|
|||
|
(expand | limit-recurrence-set)?,
|
|||
|
limit-freebusy-set?)>
|
|||
|
|
|||
|
when nested in the DAV:prop XML element in a calendaring
|
|||
|
REPORT request to specify which parts of calendar object
|
|||
|
resources should be returned in the response;
|
|||
|
|
|||
|
<!ELEMENT calendar-data (#PCDATA)>
|
|||
|
PCDATA value: iCalendar object
|
|||
|
|
|||
|
when nested in the DAV:prop XML element in a calendaring
|
|||
|
REPORT response to specify the content of a returned
|
|||
|
calendar object resource.
|
|||
|
|
|||
|
<!ATTLIST calendar-data content-type CDATA "text/calendar"
|
|||
|
version CDATA "2.0">
|
|||
|
content-type value: a MIME media type
|
|||
|
version value: a version string
|
|||
|
|
|||
|
attributes can be used on all three variants of the
|
|||
|
CALDAV:calendar-data XML element.
|
|||
|
|
|||
|
9.6.1. CALDAV:comp XML Element
|
|||
|
|
|||
|
Name: comp
|
|||
|
|
|||
|
Namespace: urn:ietf:params:xml:ns:caldav
|
|||
|
|
|||
|
Purpose: Defines which component types to return.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 80]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
Description: The name value is a calendar component name (e.g.,
|
|||
|
VEVENT).
|
|||
|
|
|||
|
Definition:
|
|||
|
|
|||
|
<!ELEMENT comp ((allprop | prop*), (allcomp | comp*))>
|
|||
|
|
|||
|
<!ATTLIST comp name CDATA #REQUIRED>
|
|||
|
name value: a calendar component name
|
|||
|
|
|||
|
Note: The CALDAV:prop and CALDAV:allprop elements have the same name
|
|||
|
as the DAV:prop and DAV:allprop elements defined in [RFC2518].
|
|||
|
However, the CALDAV:prop and CALDAV:allprop elements are defined
|
|||
|
in the "urn:ietf:params:xml:ns:caldav" namespace instead of the
|
|||
|
"DAV:" namespace.
|
|||
|
|
|||
|
9.6.2. CALDAV:allcomp XML Element
|
|||
|
|
|||
|
Name: allcomp
|
|||
|
|
|||
|
Namespace: urn:ietf:params:xml:ns:caldav
|
|||
|
|
|||
|
Purpose: Specifies that all components shall be returned.
|
|||
|
|
|||
|
Description: The CALDAV:allcomp XML element can be used when the
|
|||
|
client wants all types of components returned by a calendaring
|
|||
|
REPORT request.
|
|||
|
|
|||
|
Definition:
|
|||
|
|
|||
|
<!ELEMENT allcomp EMPTY>
|
|||
|
|
|||
|
9.6.3. CALDAV:allprop XML Element
|
|||
|
|
|||
|
Name: allprop
|
|||
|
|
|||
|
Namespace: urn:ietf:params:xml:ns:caldav
|
|||
|
|
|||
|
Purpose: Specifies that all properties shall be returned.
|
|||
|
|
|||
|
Description: The CALDAV:allprop XML element can be used when the
|
|||
|
client wants all properties of components returned by a
|
|||
|
calendaring REPORT request.
|
|||
|
|
|||
|
Definition:
|
|||
|
|
|||
|
<!ELEMENT allprop EMPTY>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 81]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
Note: The CALDAV:allprop element has the same name as the DAV:
|
|||
|
allprop element defined in [RFC2518]. However, the CALDAV:allprop
|
|||
|
element is defined in the "urn:ietf:params:xml:ns:caldav"
|
|||
|
namespace instead of the "DAV:" namespace.
|
|||
|
|
|||
|
9.6.4. CALDAV:prop XML Element
|
|||
|
|
|||
|
Name: prop
|
|||
|
|
|||
|
Namespace: urn:ietf:params:xml:ns:caldav
|
|||
|
|
|||
|
Purpose: Defines which properties to return in the response.
|
|||
|
|
|||
|
Description: The "name" attribute specifies the name of the calendar
|
|||
|
property to return (e.g., ATTENDEE). The "novalue" attribute can
|
|||
|
be used by clients to request that the actual value of the
|
|||
|
property not be returned (if the "novalue" attribute is set to
|
|||
|
"yes"). In that case, the server will return just the iCalendar
|
|||
|
property name and any iCalendar parameters and a trailing ":"
|
|||
|
without the subsequent value data.
|
|||
|
|
|||
|
Definition:
|
|||
|
|
|||
|
<!ELEMENT prop EMPTY>
|
|||
|
|
|||
|
<!ATTLIST prop name CDATA #REQUIRED
|
|||
|
novalue (yes | no) "no">
|
|||
|
name value: a calendar property name
|
|||
|
novalue value: "yes" or "no"
|
|||
|
|
|||
|
Note: The CALDAV:prop element has the same name as the DAV:prop
|
|||
|
element defined in [RFC2518]. However, the CALDAV:prop element is
|
|||
|
defined in the "urn:ietf:params:xml:ns:caldav" namespace instead
|
|||
|
of the "DAV:" namespace.
|
|||
|
|
|||
|
9.6.5. CALDAV:expand XML Element
|
|||
|
|
|||
|
Name: expand
|
|||
|
|
|||
|
Namespace: urn:ietf:params:xml:ns:caldav
|
|||
|
|
|||
|
Purpose: Forces the server to expand recurring components into
|
|||
|
individual recurrence instances.
|
|||
|
|
|||
|
Description: The CALDAV:expand XML element specifies that for a
|
|||
|
given calendaring REPORT request, the server MUST expand the
|
|||
|
recurrence set into calendar components that define exactly one
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 82]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
recurrence instance, and MUST return only those whose scheduled
|
|||
|
time intersect a specified time range.
|
|||
|
|
|||
|
The "start" attribute specifies the inclusive start of the time
|
|||
|
range, and the "end" attribute specifies the non-inclusive end of
|
|||
|
the time range. Both attributes are specified as date with UTC
|
|||
|
time value. The value of the "end" attribute MUST be greater than
|
|||
|
the value of the "start" attribute.
|
|||
|
|
|||
|
The server MUST use the same logic as defined for CALDAV:time-
|
|||
|
range to determine if a recurrence instance intersects the
|
|||
|
specified time range.
|
|||
|
|
|||
|
Recurring components, other than the initial instance, MUST
|
|||
|
include a RECURRENCE-ID property indicating which instance they
|
|||
|
refer to.
|
|||
|
|
|||
|
The returned calendar components MUST NOT use recurrence
|
|||
|
properties (i.e., EXDATE, EXRULE, RDATE, and RRULE) and MUST NOT
|
|||
|
have reference to or include VTIMEZONE components. Date and local
|
|||
|
time with reference to time zone information MUST be converted
|
|||
|
into date with UTC time.
|
|||
|
|
|||
|
Definition:
|
|||
|
|
|||
|
<!ELEMENT expand EMPTY>
|
|||
|
|
|||
|
<!ATTLIST expand start CDATA #REQUIRED
|
|||
|
end CDATA #REQUIRED>
|
|||
|
start value: an iCalendar "date with UTC time"
|
|||
|
end value: an iCalendar "date with UTC time"
|
|||
|
|
|||
|
9.6.6. CALDAV:limit-recurrence-set XML Element
|
|||
|
|
|||
|
Name: limit-recurrence-set
|
|||
|
|
|||
|
Namespace: urn:ietf:params:xml:ns:caldav
|
|||
|
|
|||
|
Purpose: Specifies a time range to limit the set of "overridden
|
|||
|
components" returned by the server.
|
|||
|
|
|||
|
Description: The CALDAV:limit-recurrence-set XML element specifies
|
|||
|
that for a given calendaring REPORT request, the server MUST
|
|||
|
return, in addition to the "master component", only the
|
|||
|
"overridden components" that impact a specified time range. An
|
|||
|
overridden component impacts a time range if its current start and
|
|||
|
end times overlap the time range, or if the original start and end
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 83]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
times -- the ones that would have been used if the instance were
|
|||
|
not overridden -- overlap the time range.
|
|||
|
|
|||
|
The "start" attribute specifies the inclusive start of the time
|
|||
|
range, and the "end" attribute specifies the non-inclusive end of
|
|||
|
the time range. Both attributes are specified as date with UTC
|
|||
|
time value. The value of the "end" attribute MUST be greater than
|
|||
|
the value of the "start" attribute.
|
|||
|
|
|||
|
The server MUST use the same logic as defined for CALDAV:time-
|
|||
|
range to determine if the current or original scheduled time of an
|
|||
|
"overridden" recurrence instance intersects the specified time
|
|||
|
range.
|
|||
|
|
|||
|
Overridden components that have a RANGE parameter on their
|
|||
|
RECURRENCE-ID property may specify one or more instances in the
|
|||
|
recurrence set, and some of those instances may fall within the
|
|||
|
specified time range or may have originally fallen within the
|
|||
|
specified time range prior to being overridden. If that is the
|
|||
|
case, the overridden component MUST be included in the results, as
|
|||
|
it has a direct impact on the interpretation of instances within
|
|||
|
the specified time range.
|
|||
|
|
|||
|
Definition:
|
|||
|
|
|||
|
<!ELEMENT limit-recurrence-set EMPTY>
|
|||
|
|
|||
|
<!ATTLIST limit-recurrence-set start CDATA #REQUIRED
|
|||
|
end CDATA #REQUIRED>
|
|||
|
start value: an iCalendar "date with UTC time"
|
|||
|
end value: an iCalendar "date with UTC time"
|
|||
|
|
|||
|
9.6.7. CALDAV:limit-freebusy-set XML Element
|
|||
|
|
|||
|
Name: limit-freebusy-set
|
|||
|
|
|||
|
Namespace: urn:ietf:params:xml:ns:caldav
|
|||
|
|
|||
|
Purpose: Specifies a time range to limit the set of FREEBUSY values
|
|||
|
returned by the server.
|
|||
|
|
|||
|
Description: The CALDAV:limit-freebusy-set XML element specifies
|
|||
|
that for a given calendaring REPORT request, the server MUST only
|
|||
|
return the FREEBUSY property values of a VFREEBUSY component that
|
|||
|
intersects a specified time range.
|
|||
|
|
|||
|
The "start" attribute specifies the inclusive start of the time
|
|||
|
range, and the "end" attribute specifies the non-inclusive end of
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 84]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
the time range. Both attributes are specified as "date with UTC
|
|||
|
time" value. The value of the "end" attribute MUST be greater
|
|||
|
than the value of the "start" attribute.
|
|||
|
|
|||
|
The server MUST use the same logic as defined for CALDAV:time-
|
|||
|
range to determine if a FREEBUSY property value intersects the
|
|||
|
specified time range.
|
|||
|
|
|||
|
Definition:
|
|||
|
|
|||
|
<!ELEMENT limit-freebusy-set EMPTY>
|
|||
|
|
|||
|
<!ATTLIST limit-freebusy-set start CDATA #REQUIRED
|
|||
|
end CDATA #REQUIRED>
|
|||
|
start value: an iCalendar "date with UTC time"
|
|||
|
end value: an iCalendar "date with UTC time"
|
|||
|
|
|||
|
9.7. CALDAV:filter XML Element
|
|||
|
|
|||
|
Name: filter
|
|||
|
|
|||
|
Namespace: urn:ietf:params:xml:ns:caldav
|
|||
|
|
|||
|
Purpose: Specifies a filter to limit the set of calendar components
|
|||
|
returned by the server.
|
|||
|
|
|||
|
Description: The CALDAV:filter XML element specifies the search
|
|||
|
filter used to limit the calendar components returned by a
|
|||
|
calendaring REPORT request.
|
|||
|
|
|||
|
Definition:
|
|||
|
|
|||
|
<!ELEMENT filter (comp-filter)>
|
|||
|
|
|||
|
9.7.1. CALDAV:comp-filter XML Element
|
|||
|
|
|||
|
Name: comp-filter
|
|||
|
|
|||
|
Namespace: urn:ietf:params:xml:ns:caldav
|
|||
|
|
|||
|
Purpose: Specifies search criteria on calendar components.
|
|||
|
|
|||
|
Description: The CALDAV:comp-filter XML element specifies a query
|
|||
|
targeted at the calendar object (i.e., VCALENDAR) or at a specific
|
|||
|
calendar component type (e.g., VEVENT). The scope of the
|
|||
|
CALDAV:comp-filter XML element is the calendar object when used as
|
|||
|
a child of the CALDAV:filter XML element. The scope of the
|
|||
|
CALDAV:comp-filter XML element is the enclosing calendar component
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 85]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
when used as a child of another CALDAV:comp-filter XML element. A
|
|||
|
CALDAV:comp-filter is said to match if:
|
|||
|
|
|||
|
* The CALDAV:comp-filter XML element is empty and the calendar
|
|||
|
object or calendar component type specified by the "name"
|
|||
|
attribute exists in the current scope;
|
|||
|
|
|||
|
or:
|
|||
|
|
|||
|
* The CALDAV:comp-filter XML element contains a CALDAV:is-not-
|
|||
|
defined XML element and the calendar object or calendar
|
|||
|
component type specified by the "name" attribute does not exist
|
|||
|
in the current scope;
|
|||
|
|
|||
|
or:
|
|||
|
|
|||
|
* The CALDAV:comp-filter XML element contains a CALDAV:time-range
|
|||
|
XML element and at least one recurrence instance in the
|
|||
|
targeted calendar component is scheduled to overlap the
|
|||
|
specified time range, and all specified CALDAV:prop-filter and
|
|||
|
CALDAV:comp-filter child XML elements also match the targeted
|
|||
|
calendar component;
|
|||
|
|
|||
|
or:
|
|||
|
|
|||
|
* The CALDAV:comp-filter XML element only contains CALDAV:prop-
|
|||
|
filter and CALDAV:comp-filter child XML elements that all match
|
|||
|
the targeted calendar component.
|
|||
|
|
|||
|
Definition:
|
|||
|
|
|||
|
<!ELEMENT comp-filter (is-not-defined | (time-range?,
|
|||
|
prop-filter*, comp-filter*))>
|
|||
|
|
|||
|
<!ATTLIST comp-filter name CDATA #REQUIRED>
|
|||
|
name value: a calendar object or calendar component
|
|||
|
type (e.g., VEVENT)
|
|||
|
|
|||
|
9.7.2. CALDAV:prop-filter XML Element
|
|||
|
|
|||
|
Name: prop-filter
|
|||
|
|
|||
|
Namespace: urn:ietf:params:xml:ns:caldav
|
|||
|
|
|||
|
Purpose: Specifies search criteria on calendar properties.
|
|||
|
|
|||
|
Description: The CALDAV:prop-filter XML element specifies a query
|
|||
|
targeted at a specific calendar property (e.g., CATEGORIES) in the
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 86]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
scope of the enclosing calendar component. A calendar property is
|
|||
|
said to match a CALDAV:prop-filter if:
|
|||
|
|
|||
|
* The CALDAV:prop-filter XML element is empty and a property of
|
|||
|
the type specified by the "name" attribute exists in the
|
|||
|
enclosing calendar component;
|
|||
|
|
|||
|
or:
|
|||
|
|
|||
|
* The CALDAV:prop-filter XML element contains a CALDAV:is-not-
|
|||
|
defined XML element and no property of the type specified by
|
|||
|
the "name" attribute exists in the enclosing calendar
|
|||
|
component;
|
|||
|
|
|||
|
or:
|
|||
|
|
|||
|
* The CALDAV:prop-filter XML element contains a CALDAV:time-range
|
|||
|
XML element and the property value overlaps the specified time
|
|||
|
range, and all specified CALDAV:param-filter child XML elements
|
|||
|
also match the targeted property;
|
|||
|
|
|||
|
or:
|
|||
|
|
|||
|
* The CALDAV:prop-filter XML element contains a CALDAV:text-match
|
|||
|
XML element and the property value matches it, and all
|
|||
|
specified CALDAV:param-filter child XML elements also match the
|
|||
|
targeted property;
|
|||
|
|
|||
|
Definition:
|
|||
|
|
|||
|
<!ELEMENT prop-filter (is-not-defined |
|
|||
|
((time-range | text-match)?,
|
|||
|
param-filter*))>
|
|||
|
|
|||
|
<!ATTLIST prop-filter name CDATA #REQUIRED>
|
|||
|
name value: a calendar property name (e.g., ATTENDEE)
|
|||
|
|
|||
|
9.7.3. CALDAV:param-filter XML Element
|
|||
|
|
|||
|
Name: param-filter
|
|||
|
|
|||
|
Namespace: urn:ietf:params:xml:ns:caldav
|
|||
|
|
|||
|
Purpose: Limits the search to specific parameter values.
|
|||
|
|
|||
|
Description: The CALDAV:param-filter XML element specifies a query
|
|||
|
targeted at a specific calendar property parameter (e.g.,
|
|||
|
PARTSTAT) in the scope of the calendar property on which it is
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 87]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
defined. A calendar property parameter is said to match a CALDAV:
|
|||
|
param-filter if:
|
|||
|
|
|||
|
* The CALDAV:param-filter XML element is empty and a parameter of
|
|||
|
the type specified by the "name" attribute exists on the
|
|||
|
calendar property being examined;
|
|||
|
|
|||
|
or:
|
|||
|
|
|||
|
* The CALDAV:param-filter XML element contains a CALDAV:is-not-
|
|||
|
defined XML element and no parameter of the type specified by
|
|||
|
the "name" attribute exists on the calendar property being
|
|||
|
examined;
|
|||
|
|
|||
|
Definition:
|
|||
|
|
|||
|
<!ELEMENT param-filter (is-not-defined | text-match?)>
|
|||
|
|
|||
|
<!ATTLIST param-filter name CDATA #REQUIRED>
|
|||
|
name value: a property parameter name (e.g., PARTSTAT)
|
|||
|
|
|||
|
9.7.4. CALDAV:is-not-defined XML Element
|
|||
|
|
|||
|
Name: is-not-defined
|
|||
|
|
|||
|
Namespace: urn:ietf:params:xml:ns:caldav
|
|||
|
|
|||
|
Purpose: Specifies that a match should occur if the enclosing
|
|||
|
component, property, or parameter does not exist.
|
|||
|
|
|||
|
Description: The CALDAV:is-not-defined XML element specifies that a
|
|||
|
match occurs if the enclosing component, property, or parameter
|
|||
|
value specified in a calendaring REPORT request does not exist in
|
|||
|
the calendar data being tested.
|
|||
|
|
|||
|
Definition:
|
|||
|
|
|||
|
<!ELEMENT is-not-defined EMPTY>
|
|||
|
|
|||
|
9.7.5. CALDAV:text-match XML Element
|
|||
|
|
|||
|
Name: text-match
|
|||
|
|
|||
|
Namespace: urn:ietf:params:xml:ns:caldav
|
|||
|
|
|||
|
Purpose: Specifies a substring match on a property or parameter
|
|||
|
value.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 88]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
Description: The CALDAV:text-match XML element specifies text used
|
|||
|
for a substring match against the property or parameter value
|
|||
|
specified in a calendaring REPORT request.
|
|||
|
|
|||
|
The "collation" attribute is used to select the collation that the
|
|||
|
server MUST use for character string matching. In the absence of
|
|||
|
this attribute, the server MUST use the "i;ascii-casemap"
|
|||
|
collation.
|
|||
|
|
|||
|
The "negate-condition" attribute is used to indicate that this
|
|||
|
test returns a match if the text matches when the attribute value
|
|||
|
is set to "no", or return a match if the text does not match, if
|
|||
|
the attribute value is set to "yes". For example, this can be
|
|||
|
used to match components with a STATUS property not set to
|
|||
|
CANCELLED.
|
|||
|
|
|||
|
Definition:
|
|||
|
|
|||
|
<!ELEMENT text-match (#PCDATA)>
|
|||
|
PCDATA value: string
|
|||
|
|
|||
|
<!ATTLIST text-match collation CDATA "i;ascii-casemap"
|
|||
|
negate-condition (yes | no) "no">
|
|||
|
|
|||
|
9.8. CALDAV:timezone XML Element
|
|||
|
|
|||
|
Name: timezone
|
|||
|
|
|||
|
Namespace: urn:ietf:params:xml:ns:caldav
|
|||
|
|
|||
|
Purpose: Specifies the time zone component to use when determining
|
|||
|
the results of a report.
|
|||
|
|
|||
|
Description: The CALDAV:timezone XML element specifies that for a
|
|||
|
given calendaring REPORT request, the server MUST rely on the
|
|||
|
specified VTIMEZONE component instead of the CALDAV:calendar-
|
|||
|
timezone property of the calendar collection, in which the
|
|||
|
calendar object resource is contained to resolve "date" values and
|
|||
|
"date with local time" values (i.e., floating time) to "date with
|
|||
|
UTC time" values. The server will require this information to
|
|||
|
determine if a calendar component scheduled with "date" values or
|
|||
|
"date with local time" values intersects a CALDAV:time-range
|
|||
|
specified in a CALDAV:calendar-query REPORT.
|
|||
|
|
|||
|
Note: The iCalendar data embedded within the CALDAV:timezone XML
|
|||
|
element MUST follow the standard XML character data encoding
|
|||
|
rules, including use of <, >, & etc. entity encoding or
|
|||
|
the use of a <![CDATA[ ... ]]> construct. In the later case, the
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 89]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
iCalendar data cannot contain the character sequence "]]>", which
|
|||
|
is the end delimiter for the CDATA section.
|
|||
|
|
|||
|
Definition:
|
|||
|
|
|||
|
<!ELEMENT timezone (#PCDATA)>
|
|||
|
PCDATA value: an iCalendar object with exactly one VTIMEZONE
|
|||
|
|
|||
|
9.9. CALDAV:time-range XML Element
|
|||
|
|
|||
|
Name: time-range
|
|||
|
|
|||
|
Namespace: urn:ietf:params:xml:ns:caldav
|
|||
|
|
|||
|
Purpose: Specifies a time range to limit the set of calendar
|
|||
|
components returned by the server.
|
|||
|
|
|||
|
Description: The CALDAV:time-range XML element specifies that for a
|
|||
|
given calendaring REPORT request, the server MUST only return the
|
|||
|
calendar object resources that, depending on the context, have a
|
|||
|
component or property whose value intersects a specified time
|
|||
|
range.
|
|||
|
|
|||
|
The "start" attribute specifies the inclusive start of the time
|
|||
|
range, and the "end" attribute specifies the non-inclusive end of
|
|||
|
the time range. Both attributes MUST be specified as "date with
|
|||
|
UTC time" value. Time ranges open at one end can be specified by
|
|||
|
including only one attribute; however, at least one attribute MUST
|
|||
|
always be present in the CALDAV:time-range element. If either the
|
|||
|
"start" or "end" attribute is not specified in the CALDAV:time-
|
|||
|
range XML element, assume "-infinity" and "+infinity" as their
|
|||
|
value, respectively. If both "start" and "end" are present, the
|
|||
|
value of the "end" attribute MUST be greater than the value of the
|
|||
|
"start" attribute.
|
|||
|
|
|||
|
Time range tests MUST consider every recurrence instance when
|
|||
|
testing the time range condition; if any one instance matches,
|
|||
|
then the test returns true. Testing recurrence instances requires
|
|||
|
the server to infer an effective value for DTSTART, DTEND,
|
|||
|
DURATION, and DUE properties for an instance based on the
|
|||
|
recurrence patterns and any overrides.
|
|||
|
|
|||
|
A VEVENT component overlaps a given time range if the condition
|
|||
|
for the corresponding component state specified in the table below
|
|||
|
is satisfied. Note that, as specified in [RFC2445], the DTSTART
|
|||
|
property is REQUIRED in the VEVENT component. The conditions
|
|||
|
depend on the presence of the DTEND and DURATION properties in the
|
|||
|
VEVENT component. Furthermore, the value of the DTEND property
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 90]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
MUST be later in time than the value of the DTSTART property. The
|
|||
|
duration of a VEVENT component with no DTEND and DURATION
|
|||
|
properties is 1 day (+P1D) when the DTSTART is a DATE value, and 0
|
|||
|
seconds when the DTSTART is a DATE-TIME value.
|
|||
|
|
|||
|
+---------------------------------------------------------------+
|
|||
|
| VEVENT has the DTEND property? |
|
|||
|
| +-----------------------------------------------------------+
|
|||
|
| | VEVENT has the DURATION property? |
|
|||
|
| | +-------------------------------------------------------+
|
|||
|
| | | DURATION property value is greater than 0 seconds? |
|
|||
|
| | | +---------------------------------------------------+
|
|||
|
| | | | DTSTART property is a DATE-TIME value? |
|
|||
|
| | | | +-----------------------------------------------+
|
|||
|
| | | | | Condition to evaluate |
|
|||
|
+---+---+---+---+-----------------------------------------------+
|
|||
|
| Y | N | N | * | (start < DTEND AND end > DTSTART) |
|
|||
|
+---+---+---+---+-----------------------------------------------+
|
|||
|
| N | Y | Y | * | (start < DTSTART+DURATION AND end > DTSTART) |
|
|||
|
| | +---+---+-----------------------------------------------+
|
|||
|
| | | N | * | (start <= DTSTART AND end > DTSTART) |
|
|||
|
+---+---+---+---+-----------------------------------------------+
|
|||
|
| N | N | N | Y | (start <= DTSTART AND end > DTSTART) |
|
|||
|
+---+---+---+---+-----------------------------------------------+
|
|||
|
| N | N | N | N | (start < DTSTART+P1D AND end > DTSTART) |
|
|||
|
+---+---+---+---+-----------------------------------------------+
|
|||
|
|
|||
|
A VTODO component is said to overlap a given time range if the
|
|||
|
condition for the corresponding component state specified in the
|
|||
|
table below is satisfied. The conditions depend on the presence
|
|||
|
of the DTSTART, DURATION, DUE, COMPLETED, and CREATED properties
|
|||
|
in the VTODO component. Note that, as specified in [RFC2445], the
|
|||
|
DUE value MUST be a DATE-TIME value equal to or after the DTSTART
|
|||
|
value if specified.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 91]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
+-------------------------------------------------------------------+
|
|||
|
| VTODO has the DTSTART property? |
|
|||
|
| +---------------------------------------------------------------+
|
|||
|
| | VTODO has the DURATION property? |
|
|||
|
| | +-----------------------------------------------------------+
|
|||
|
| | | VTODO has the DUE property? |
|
|||
|
| | | +-------------------------------------------------------+
|
|||
|
| | | | VTODO has the COMPLETED property? |
|
|||
|
| | | | +---------------------------------------------------+
|
|||
|
| | | | | VTODO has the CREATED property? |
|
|||
|
| | | | | +-----------------------------------------------+
|
|||
|
| | | | | | Condition to evaluate |
|
|||
|
+---+---+---+---+---+-----------------------------------------------+
|
|||
|
| Y | Y | N | * | * | (start <= DTSTART+DURATION) AND |
|
|||
|
| | | | | | ((end > DTSTART) OR |
|
|||
|
| | | | | | (end >= DTSTART+DURATION)) |
|
|||
|
+---+---+---+---+---+-----------------------------------------------+
|
|||
|
| Y | N | Y | * | * | ((start < DUE) OR (start <= DTSTART)) |
|
|||
|
| | | | | | AND |
|
|||
|
| | | | | | ((end > DTSTART) OR (end >= DUE)) |
|
|||
|
+---+---+---+---+---+-----------------------------------------------+
|
|||
|
| Y | N | N | * | * | (start <= DTSTART) AND (end > DTSTART) |
|
|||
|
+---+---+---+---+---+-----------------------------------------------+
|
|||
|
| N | N | Y | * | * | (start < DUE) AND (end >= DUE) |
|
|||
|
+---+---+---+---+---+-----------------------------------------------+
|
|||
|
| N | N | N | Y | Y | ((start <= CREATED) OR (start <= COMPLETED))|
|
|||
|
| | | | | | AND |
|
|||
|
| | | | | | ((end >= CREATED) OR (end >= COMPLETED))|
|
|||
|
+---+---+---+---+---+-----------------------------------------------+
|
|||
|
| N | N | N | Y | N | (start <= COMPLETED) AND (end >= COMPLETED) |
|
|||
|
+---+---+---+---+---+-----------------------------------------------+
|
|||
|
| N | N | N | N | Y | (end > CREATED) |
|
|||
|
+---+---+---+---+---+-----------------------------------------------+
|
|||
|
| N | N | N | N | N | TRUE |
|
|||
|
+---+---+---+---+---+-----------------------------------------------+
|
|||
|
|
|||
|
A VJOURNAL component overlaps a given time range if the condition
|
|||
|
for the corresponding component state specified in the table below
|
|||
|
is satisfied. The conditions depend on the presence of the
|
|||
|
DTSTART property in the VJOURNAL component and on whether the
|
|||
|
DTSTART is a DATE-TIME or DATE value. The effective "duration" of
|
|||
|
a VJOURNAL component is 1 day (+P1D) when the DTSTART is a DATE
|
|||
|
value, and 0 seconds when the DTSTART is a DATE-TIME value.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 92]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
+----------------------------------------------------+
|
|||
|
| VJOURNAL has the DTSTART property? |
|
|||
|
| +------------------------------------------------+
|
|||
|
| | DTSTART property is a DATE-TIME value? |
|
|||
|
| | +--------------------------------------------+
|
|||
|
| | | Condition to evaluate |
|
|||
|
+---+---+--------------------------------------------+
|
|||
|
| Y | Y | (start <= DTSTART) AND (end > DTSTART) |
|
|||
|
+---+---+--------------------------------------------+
|
|||
|
| Y | N | (start < DTSTART+P1D) AND (end > DTSTART) |
|
|||
|
+---+---+--------------------------------------------+
|
|||
|
| N | * | FALSE |
|
|||
|
+---+---+--------------------------------------------+
|
|||
|
|
|||
|
A VFREEBUSY component overlaps a given time range if the condition
|
|||
|
for the corresponding component state specified in the table below
|
|||
|
is satisfied. The conditions depend on the presence in the
|
|||
|
VFREEBUSY component of the DTSTART and DTEND properties, and any
|
|||
|
FREEBUSY properties in the absence of DTSTART and DTEND. Any
|
|||
|
DURATION property is ignored, as it has a special meaning when
|
|||
|
used in a VFREEBUSY component.
|
|||
|
|
|||
|
When only FREEBUSY properties are used, each period in each
|
|||
|
FREEBUSY property is compared against the time range, irrespective
|
|||
|
of the type of free busy information (free, busy, busy-tentative,
|
|||
|
busy-unavailable) represented by the property.
|
|||
|
|
|||
|
|
|||
|
+------------------------------------------------------+
|
|||
|
| VFREEBUSY has both the DTSTART and DTEND properties? |
|
|||
|
| +--------------------------------------------------+
|
|||
|
| | VFREEBUSY has the FREEBUSY property? |
|
|||
|
| | +----------------------------------------------+
|
|||
|
| | | Condition to evaluate |
|
|||
|
+---+---+----------------------------------------------+
|
|||
|
| Y | * | (start <= DTEND) AND (end > DTSTART) |
|
|||
|
+---+---+----------------------------------------------+
|
|||
|
| N | Y | (start < freebusy-period-end) AND |
|
|||
|
| | | (end > freebusy-period-start) |
|
|||
|
+---+---+----------------------------------------------+
|
|||
|
| N | N | FALSE |
|
|||
|
+---+---+----------------------------------------------+
|
|||
|
|
|||
|
A VALARM component is said to overlap a given time range if the
|
|||
|
following condition holds:
|
|||
|
|
|||
|
(start <= trigger-time) AND (end > trigger-time)
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 93]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
A VALARM component can be defined such that it triggers repeatedly.
|
|||
|
Such a VALARM component is said to overlap a given time range if at
|
|||
|
least one of its triggers overlaps the time range.
|
|||
|
|
|||
|
The calendar properties COMPLETED, CREATED, DTEND, DTSTAMP,
|
|||
|
DTSTART, DUE, and LAST-MODIFIED overlap a given time range if the
|
|||
|
following condition holds:
|
|||
|
|
|||
|
(start <= date-time) AND (end > date-time)
|
|||
|
|
|||
|
Note that if DTEND is not present in a VEVENT, but DURATION is, then
|
|||
|
the test should instead operate on the 'effective' DTEND, i.e.,
|
|||
|
DTSTART+DURATION. Similarly, if DUE is not present in a VTODO, but
|
|||
|
DTSTART and DURATION are, then the test should instead operate on the
|
|||
|
'effective' DUE, i.e., DTSTART+DURATION.
|
|||
|
|
|||
|
The semantic of CALDAV:time-range is not defined for any other
|
|||
|
calendar components and properties.
|
|||
|
|
|||
|
Definition:
|
|||
|
|
|||
|
<!ELEMENT time-range EMPTY>
|
|||
|
|
|||
|
<!ATTLIST time-range start CDATA #IMPLIED
|
|||
|
end CDATA #IMPLIED>
|
|||
|
start value: an iCalendar "date with UTC time"
|
|||
|
end value: an iCalendar "date with UTC time"
|
|||
|
|
|||
|
9.10. CALDAV:calendar-multiget XML Element
|
|||
|
|
|||
|
Name: calendar-multiget
|
|||
|
|
|||
|
Namespace: urn:ietf:params:xml:ns:caldav
|
|||
|
|
|||
|
Purpose: CalDAV report used to retrieve specific calendar object
|
|||
|
resources.
|
|||
|
|
|||
|
Description: See Section 7.9.
|
|||
|
|
|||
|
Definition:
|
|||
|
|
|||
|
<!ELEMENT calendar-multiget ((DAV:allprop |
|
|||
|
DAV:propname |
|
|||
|
DAV:prop)?, DAV:href+)>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 94]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
9.11. CALDAV:free-busy-query XML Element
|
|||
|
|
|||
|
Name: free-busy-query
|
|||
|
|
|||
|
Namespace: urn:ietf:params:xml:ns:caldav
|
|||
|
|
|||
|
Purpose: CalDAV report used to generate a VFREEBUSY to determine
|
|||
|
busy time over a specific time range.
|
|||
|
|
|||
|
Description: See Section 7.10.
|
|||
|
|
|||
|
Definition:
|
|||
|
|
|||
|
<!ELEMENT free-busy-query (time-range)>
|
|||
|
|
|||
|
10. Internationalization Considerations
|
|||
|
|
|||
|
CalDAV allows internationalized strings to be stored and retrieved
|
|||
|
for the description of calendar collections (see Section 5.2.1).
|
|||
|
|
|||
|
The CALDAV:calendar-query REPORT (Section 7.8) includes a text
|
|||
|
searching option controlled by the CALDAV:text-match element, and
|
|||
|
details of character handling are covered in the description of that
|
|||
|
element (see Section 9.7.5).
|
|||
|
|
|||
|
11. Security Considerations
|
|||
|
|
|||
|
HTTP protocol transactions are sent in the clear over the network
|
|||
|
unless protection from snooping is negotiated. This can be
|
|||
|
accomplished by use of TLS, as defined in [RFC2818]. In particular,
|
|||
|
HTTP Basic authentication MUST NOT be used unless TLS is in effect.
|
|||
|
|
|||
|
Servers MUST take adequate precautions to ensure that malicious
|
|||
|
clients cannot consume excessive server resources (CPU, memory, disk,
|
|||
|
etc.) through carefully crafted reports. For example, a client could
|
|||
|
upload an event with a recurrence rule that specifies a recurring
|
|||
|
event occurring every second for the next 100 years, which would
|
|||
|
result in approximately 3 x 10^9 instances! A report that asks for
|
|||
|
recurrences to be expanded over that range would likely constitute a
|
|||
|
denial-of-service attack on the server.
|
|||
|
|
|||
|
When creating new resources (including calendar collections), clients
|
|||
|
MUST ensure that the resource name (the last path segment of the
|
|||
|
resource URI) assigned to the new resource does not expose any data
|
|||
|
from within the iCalendar resource itself or information about the
|
|||
|
nature of a calendar collection. This is required to ensure that the
|
|||
|
presence of a specific iCalendar component or nature of components in
|
|||
|
a collection cannot be inferred based on the name of a resource.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 95]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
When rolling up free-busy information, more information about a
|
|||
|
user's events is exposed if busy periods overlap or are adjacent
|
|||
|
(this tells the client requesting the free-busy information that the
|
|||
|
calendar owner has at least two events, rather than knowing only that
|
|||
|
the calendar owner has one or more events during the busy period).
|
|||
|
Thus, a conservative approach to calendar data privacy would have
|
|||
|
servers always coalesce such busy periods when they are the same
|
|||
|
type.
|
|||
|
|
|||
|
Procedure alarms are a known security risk for either clients or
|
|||
|
servers to handle, particularly when the alarm was created by another
|
|||
|
agent. Clients and servers are not required to execute such
|
|||
|
procedure alarms.
|
|||
|
|
|||
|
Security considerations described in iCalendar [RFC2445] and iTIP
|
|||
|
[RFC2446] are also applicable to CalDAV.
|
|||
|
|
|||
|
Beyond these, CalDAV does not raise any security considerations that
|
|||
|
are not present in HTTP [RFC2616] and WebDAV [RFC2518], [RFC3253],
|
|||
|
[RFC3744].
|
|||
|
|
|||
|
12. IANA Considerations
|
|||
|
|
|||
|
This document uses one new URN to identify a new XML namespace. The
|
|||
|
URN conforms to a registry mechanism described in [RFC3688].
|
|||
|
|
|||
|
12.1. Namespace Registration
|
|||
|
|
|||
|
Registration request for the CalDAV namespace:
|
|||
|
|
|||
|
URI: urn:ietf:params:xml:ns:caldav
|
|||
|
|
|||
|
Registrant Contact: See the "Authors' Addresses" section of this
|
|||
|
document.
|
|||
|
|
|||
|
XML: None. Namespace URIs do not represent an XML specification.
|
|||
|
|
|||
|
13. Acknowledgements
|
|||
|
|
|||
|
The authors would like to thank the following individuals for
|
|||
|
contributing their ideas and support for writing this specification:
|
|||
|
Michael Arick, Mario Bonin, Chris Bryant, Scott Carr, Andre
|
|||
|
Courtemanche, Mike Douglass, Ted Hardie, Marten den Haring, Jeffrey
|
|||
|
Harris, Sam Hartman, Helge Hess, Jeff McCullough, Alexey Melnikov,
|
|||
|
Dan Mosedale, Brian Moseley, Francois Perrault, Kervin L. Pierre,
|
|||
|
Julian F. Reschke, Wilfredo Sanchez Vega, Mike Shaver, Jari
|
|||
|
Urpalainen, Simon Vaillancourt, and Jim Whitehead.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 96]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
The authors would also like to thank the Calendaring and Scheduling
|
|||
|
Consortium for advice with this specification, and for organizing
|
|||
|
interoperability testing events to help refine it.
|
|||
|
|
|||
|
14. References
|
|||
|
|
|||
|
14.1. Normative References
|
|||
|
|
|||
|
[RFC2119] Bradner, S., "Key words for use in RFCs to
|
|||
|
Indicate Requirement Levels", BCP 14,
|
|||
|
RFC 2119, March 1997.
|
|||
|
|
|||
|
[RFC2246] Dierks, T. and C. Allen, "The TLS Protocol
|
|||
|
Version 1.0", RFC 2246, January 1999.
|
|||
|
|
|||
|
[RFC2445] Dawson, F. and Stenerson, D., "Internet
|
|||
|
Calendaring and Scheduling Core Object
|
|||
|
Specification (iCalendar)", RFC 2445,
|
|||
|
November 1998.
|
|||
|
|
|||
|
[RFC2446] Silverberg, S., Mansour, S., Dawson, F., and
|
|||
|
R. Hopson, "iCalendar Transport-Independent
|
|||
|
Interoperability Protocol (iTIP) Scheduling
|
|||
|
Events, BusyTime, To-dos and Journal
|
|||
|
Entries", RFC 2446, November 1998.
|
|||
|
|
|||
|
[RFC2518] Goland, Y., Whitehead, E., Faizi, A., Carter,
|
|||
|
S., and D. Jensen, "HTTP Extensions for
|
|||
|
Distributed Authoring -- WEBDAV", RFC 2518,
|
|||
|
February 1999.
|
|||
|
|
|||
|
[RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk,
|
|||
|
H., Masinter, L., Leach, P., and T. Berners-
|
|||
|
Lee, "Hypertext Transfer Protocol --
|
|||
|
HTTP/1.1", RFC 2616, June 1999.
|
|||
|
|
|||
|
[RFC2818] Rescorla, E., "HTTP Over TLS", RFC 2818,
|
|||
|
May 2000.
|
|||
|
|
|||
|
[RFC3253] Clemm, G., Amsden, J., Ellison, T., Kaler,
|
|||
|
C., and J. Whitehead, "Versioning Extensions
|
|||
|
to WebDAV (Web Distributed Authoring and
|
|||
|
Versioning)", RFC 3253, March 2002.
|
|||
|
|
|||
|
[RFC3688] Mealling, M., "The IETF XML Registry",
|
|||
|
BCP 81, RFC 3688, January 2004.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 97]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
[RFC3744] Clemm, G., Reschke, J., Sedlar, E., and J.
|
|||
|
Whitehead, "Web Distributed Authoring and
|
|||
|
Versioning (WebDAV) Access Control Protocol",
|
|||
|
RFC 3744, May 2004.
|
|||
|
|
|||
|
[RFC4346] Dierks, T. and E. Rescorla, "The Transport
|
|||
|
Layer Security (TLS) Protocol Version 1.1",
|
|||
|
RFC 4346, April 2006.
|
|||
|
|
|||
|
[RFC4790] Newman, C., Duerst, M., and A. Gulbrandsen,
|
|||
|
"Internet Application Protocol Collation
|
|||
|
Registry", RFC 4790, March 2007.
|
|||
|
|
|||
|
[W3C.REC-xml-20060816] Paoli, J., Maler, E., Yergeau, F., Sperberg-
|
|||
|
McQueen, C., and T. Bray, "Extensible Markup
|
|||
|
Language (XML) 1.0 (Fourth Edition)", World
|
|||
|
Wide Web Consortium Recommendation REC-xml-
|
|||
|
20060816, August 2006,
|
|||
|
<http://www.w3.org/TR/2006/REC-xml-20060816>.
|
|||
|
|
|||
|
14.2. Informative References
|
|||
|
|
|||
|
[RFC2426] Dawson, F. and T. Howes, "vCard MIME
|
|||
|
Directory Profile", RFC 2426, September 1998.
|
|||
|
|
|||
|
[RFC2739] Small, T., Hennessy, D., and F. Dawson,
|
|||
|
"Calendar Attributes for vCard and LDAP",
|
|||
|
RFC 2739, January 2000.
|
|||
|
|
|||
|
[RFC4331] Korver, B. and L. Dusseault, "Quota and Size
|
|||
|
Properties for Distributed Authoring and
|
|||
|
Versioning (DAV) Collections", RFC 4331,
|
|||
|
February 2006.
|
|||
|
|
|||
|
[RFC4511] Sermersheim, J., "Lightweight Directory
|
|||
|
Access Protocol (LDAP): The Protocol",
|
|||
|
RFC 4511, June 2006.
|
|||
|
|
|||
|
[rfc2518bis] Dusseault, L., "HTTP Extensions for
|
|||
|
Distributed Authoring - WebDAV", Work
|
|||
|
in Progress, December 2006.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 98]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
Appendix A. CalDAV Method Privilege Table (Normative)
|
|||
|
|
|||
|
The following table extends the WebDAV Method Privilege Table
|
|||
|
specified in Appendix B of [RFC3744].
|
|||
|
|
|||
|
+------------+------------------------------------------------------+
|
|||
|
| METHOD | PRIVILEGES |
|
|||
|
+------------+------------------------------------------------------+
|
|||
|
| MKCALENDAR | DAV:bind |
|
|||
|
| REPORT | DAV:read or CALDAV:read-free-busy (on all referenced |
|
|||
|
| | resources) |
|
|||
|
+------------+------------------------------------------------------+
|
|||
|
|
|||
|
Appendix B. Calendar Collections Used in the Examples
|
|||
|
|
|||
|
This appendix shows the calendar object resources contained in the
|
|||
|
calendar collection queried in the examples throughout this document.
|
|||
|
|
|||
|
The content of the calendar collection is being shown as if it were
|
|||
|
returned by a CALDAV:calendar-query REPORT request designed to return
|
|||
|
all the calendar data in the collection:
|
|||
|
|
|||
|
>> Request <<
|
|||
|
|
|||
|
REPORT /bernard/work/ HTTP/1.1
|
|||
|
Host: cal.example.com
|
|||
|
Depth: 1
|
|||
|
Content-Type: application/xml; charset="utf-8"
|
|||
|
Content-Length: xxxx
|
|||
|
|
|||
|
<?xml version="1.0" encoding="utf-8" ?>
|
|||
|
<C:calendar-query xmlns:D="DAV:"
|
|||
|
xmlns:C="urn:ietf:params:xml:ns:caldav">
|
|||
|
<D:prop>
|
|||
|
<D:getetag/>
|
|||
|
<C:calendar-data/>
|
|||
|
</D:prop>
|
|||
|
<C:filter>
|
|||
|
<C:comp-filter name="VCALENDAR"/>
|
|||
|
</C:filter>
|
|||
|
</C:calendar-query>
|
|||
|
|
|||
|
>> Response <<
|
|||
|
|
|||
|
HTTP/1.1 207 Multi-Status
|
|||
|
Content-Type: application/xml; charset="utf-8"
|
|||
|
Content-Length: xxxx
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 99]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
<?xml version="1.0" encoding="utf-8" ?>
|
|||
|
<D:multistatus xmlns:D="DAV:"
|
|||
|
xmlns:C="urn:ietf:params:xml:ns:caldav">
|
|||
|
|
|||
|
<D:response>
|
|||
|
<D:href>http://cal.example.com/bernard/work/abcd1.ics</D:href>
|
|||
|
<D:propstat>
|
|||
|
<D:prop>
|
|||
|
<D:getetag>"fffff-abcd1"</D:getetag>
|
|||
|
<C:calendar-data>BEGIN:VCALENDAR
|
|||
|
VERSION:2.0
|
|||
|
PRODID:-//Example Corp.//CalDAV Client//EN
|
|||
|
BEGIN:VTIMEZONE
|
|||
|
LAST-MODIFIED:20040110T032845Z
|
|||
|
TZID:US/Eastern
|
|||
|
BEGIN:DAYLIGHT
|
|||
|
DTSTART:20000404T020000
|
|||
|
RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
|
|||
|
TZNAME:EDT
|
|||
|
TZOFFSETFROM:-0500
|
|||
|
TZOFFSETTO:-0400
|
|||
|
END:DAYLIGHT
|
|||
|
BEGIN:STANDARD
|
|||
|
DTSTART:20001026T020000
|
|||
|
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
|
|||
|
TZNAME:EST
|
|||
|
TZOFFSETFROM:-0400
|
|||
|
TZOFFSETTO:-0500
|
|||
|
END:STANDARD
|
|||
|
END:VTIMEZONE
|
|||
|
BEGIN:VEVENT
|
|||
|
DTSTAMP:20060206T001102Z
|
|||
|
DTSTART;TZID=US/Eastern:20060102T100000
|
|||
|
DURATION:PT1H
|
|||
|
SUMMARY:Event #1
|
|||
|
Description:Go Steelers!
|
|||
|
UID:74855313FA803DA593CD579A@example.com
|
|||
|
END:VEVENT
|
|||
|
END:VCALENDAR
|
|||
|
</C:calendar-data>
|
|||
|
</D:prop>
|
|||
|
<D:status>HTTP/1.1 200 OK</D:status>
|
|||
|
</D:propstat>
|
|||
|
</D:response>
|
|||
|
|
|||
|
<D:response>
|
|||
|
<D:href>http://cal.example.com/bernard/work/abcd2.ics</D:href>
|
|||
|
<D:propstat>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 100]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
<D:prop>
|
|||
|
<D:getetag>"fffff-abcd2"</D:getetag>
|
|||
|
<C:calendar-data>BEGIN:VCALENDAR
|
|||
|
VERSION:2.0
|
|||
|
PRODID:-//Example Corp.//CalDAV Client//EN
|
|||
|
BEGIN:VTIMEZONE
|
|||
|
LAST-MODIFIED:20040110T032845Z
|
|||
|
TZID:US/Eastern
|
|||
|
BEGIN:DAYLIGHT
|
|||
|
DTSTART:20000404T020000
|
|||
|
RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
|
|||
|
TZNAME:EDT
|
|||
|
TZOFFSETFROM:-0500
|
|||
|
TZOFFSETTO:-0400
|
|||
|
END:DAYLIGHT
|
|||
|
BEGIN:STANDARD
|
|||
|
DTSTART:20001026T020000
|
|||
|
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
|
|||
|
TZNAME:EST
|
|||
|
TZOFFSETFROM:-0400
|
|||
|
TZOFFSETTO:-0500
|
|||
|
END:STANDARD
|
|||
|
END:VTIMEZONE
|
|||
|
BEGIN:VEVENT
|
|||
|
DTSTAMP:20060206T001121Z
|
|||
|
DTSTART;TZID=US/Eastern:20060102T120000
|
|||
|
DURATION:PT1H
|
|||
|
RRULE:FREQ=DAILY;COUNT=5
|
|||
|
SUMMARY:Event #2
|
|||
|
UID:00959BC664CA650E933C892C@example.com
|
|||
|
END:VEVENT
|
|||
|
BEGIN:VEVENT
|
|||
|
DTSTAMP:20060206T001121Z
|
|||
|
DTSTART;TZID=US/Eastern:20060104T140000
|
|||
|
DURATION:PT1H
|
|||
|
RECURRENCE-ID;TZID=US/Eastern:20060104T120000
|
|||
|
SUMMARY:Event #2 bis
|
|||
|
UID:00959BC664CA650E933C892C@example.com
|
|||
|
END:VEVENT
|
|||
|
END:VCALENDAR
|
|||
|
</C:calendar-data>
|
|||
|
</D:prop>
|
|||
|
<D:status>HTTP/1.1 200 OK</D:status>
|
|||
|
</D:propstat>
|
|||
|
</D:response>
|
|||
|
|
|||
|
<D:response>
|
|||
|
<D:href>http://cal.example.com/bernard/work/abcd3.ics</D:href>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 101]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
<D:propstat>
|
|||
|
<D:prop>
|
|||
|
<D:getetag>"fffff-abcd3"</D:getetag>
|
|||
|
<C:calendar-data>BEGIN:VCALENDAR
|
|||
|
VERSION:2.0
|
|||
|
PRODID:-//Example Corp.//CalDAV Client//EN
|
|||
|
BEGIN:VTIMEZONE
|
|||
|
LAST-MODIFIED:20040110T032845Z
|
|||
|
TZID:US/Eastern
|
|||
|
BEGIN:DAYLIGHT
|
|||
|
DTSTART:20000404T020000
|
|||
|
RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
|
|||
|
TZNAME:EDT
|
|||
|
TZOFFSETFROM:-0500
|
|||
|
TZOFFSETTO:-0400
|
|||
|
END:DAYLIGHT
|
|||
|
BEGIN:STANDARD
|
|||
|
DTSTART:20001026T020000
|
|||
|
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
|
|||
|
TZNAME:EST
|
|||
|
TZOFFSETFROM:-0400
|
|||
|
TZOFFSETTO:-0500
|
|||
|
END:STANDARD
|
|||
|
END:VTIMEZONE
|
|||
|
BEGIN:VEVENT
|
|||
|
ATTENDEE;PARTSTAT=ACCEPTED;ROLE=CHAIR:mailto:cyrus@example.com
|
|||
|
ATTENDEE;PARTSTAT=NEEDS-ACTION:mailto:lisa@example.com
|
|||
|
DTSTAMP:20060206T001220Z
|
|||
|
DTSTART;TZID=US/Eastern:20060104T100000
|
|||
|
DURATION:PT1H
|
|||
|
LAST-MODIFIED:20060206T001330Z
|
|||
|
ORGANIZER:mailto:cyrus@example.com
|
|||
|
SEQUENCE:1
|
|||
|
STATUS:TENTATIVE
|
|||
|
SUMMARY:Event #3
|
|||
|
UID:DC6C50A017428C5216A2F1CD@example.com
|
|||
|
END:VEVENT
|
|||
|
END:VCALENDAR
|
|||
|
</C:calendar-data>
|
|||
|
</D:prop>
|
|||
|
<D:status>HTTP/1.1 200 OK</D:status>
|
|||
|
</D:propstat>
|
|||
|
</D:response>
|
|||
|
|
|||
|
<D:response>
|
|||
|
<D:href>http://cal.example.com/bernard/work/abcd4.ics</D:href>
|
|||
|
<D:propstat>
|
|||
|
<D:prop>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 102]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
<D:getetag>"fffff-abcd4"</D:getetag>
|
|||
|
<C:calendar-data>BEGIN:VCALENDAR
|
|||
|
VERSION:2.0
|
|||
|
PRODID:-//Example Corp.//CalDAV Client//EN
|
|||
|
BEGIN:VTODO
|
|||
|
DTSTAMP:20060205T235335Z
|
|||
|
DUE;VALUE=DATE:20060104
|
|||
|
STATUS:NEEDS-ACTION
|
|||
|
SUMMARY:Task #1
|
|||
|
UID:DDDEEB7915FA61233B861457@example.com
|
|||
|
BEGIN:VALARM
|
|||
|
ACTION:AUDIO
|
|||
|
TRIGGER;RELATED=START:-PT10M
|
|||
|
END:VALARM
|
|||
|
END:VTODO
|
|||
|
END:VCALENDAR
|
|||
|
</C:calendar-data>
|
|||
|
</D:prop>
|
|||
|
<D:status>HTTP/1.1 200 OK</D:status>
|
|||
|
</D:propstat>
|
|||
|
</D:response>
|
|||
|
|
|||
|
<D:response>
|
|||
|
<D:href>http://cal.example.com/bernard/work/abcd5.ics</D:href>
|
|||
|
<D:propstat>
|
|||
|
<D:prop>
|
|||
|
<D:getetag>"fffff-abcd5"</D:getetag>
|
|||
|
<C:calendar-data>BEGIN:VCALENDAR
|
|||
|
VERSION:2.0
|
|||
|
PRODID:-//Example Corp.//CalDAV Client//EN
|
|||
|
BEGIN:VTODO
|
|||
|
DTSTAMP:20060205T235300Z
|
|||
|
DUE;VALUE=DATE:20060106
|
|||
|
LAST-MODIFIED:20060205T235308Z
|
|||
|
SEQUENCE:1
|
|||
|
STATUS:NEEDS-ACTION
|
|||
|
SUMMARY:Task #2
|
|||
|
UID:E10BA47467C5C69BB74E8720@example.com
|
|||
|
BEGIN:VALARM
|
|||
|
ACTION:AUDIO
|
|||
|
TRIGGER;RELATED=START:-PT10M
|
|||
|
END:VALARM
|
|||
|
END:VTODO
|
|||
|
END:VCALENDAR
|
|||
|
</C:calendar-data>
|
|||
|
</D:prop>
|
|||
|
<D:status>HTTP/1.1 200 OK</D:status>
|
|||
|
</D:propstat>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 103]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
</D:response>
|
|||
|
|
|||
|
<D:response>
|
|||
|
<D:href>http://cal.example.com/bernard/work/abcd6.ics</D:href>
|
|||
|
<D:propstat>
|
|||
|
<D:prop>
|
|||
|
<D:getetag>"fffff-abcd6"</D:getetag>
|
|||
|
<C:calendar-data>BEGIN:VCALENDAR
|
|||
|
VERSION:2.0
|
|||
|
PRODID:-//Example Corp.//CalDAV Client//EN
|
|||
|
BEGIN:VTODO
|
|||
|
COMPLETED:20051223T122322Z
|
|||
|
DTSTAMP:20060205T235400Z
|
|||
|
DUE;VALUE=DATE:20051225
|
|||
|
LAST-MODIFIED:20060205T235308Z
|
|||
|
SEQUENCE:1
|
|||
|
STATUS:COMPLETED
|
|||
|
SUMMARY:Task #3
|
|||
|
UID:E10BA47467C5C69BB74E8722@example.com
|
|||
|
END:VTODO
|
|||
|
END:VCALENDAR
|
|||
|
</C:calendar-data>
|
|||
|
</D:prop>
|
|||
|
<D:status>HTTP/1.1 200 OK</D:status>
|
|||
|
</D:propstat>
|
|||
|
</D:response>
|
|||
|
|
|||
|
<D:response>
|
|||
|
<D:href>http://cal.example.com/bernard/work/abcd7.ics</D:href>
|
|||
|
<D:propstat>
|
|||
|
<D:prop>
|
|||
|
<D:getetag>"fffff-abcd7"</D:getetag>
|
|||
|
<C:calendar-data>BEGIN:VCALENDAR
|
|||
|
VERSION:2.0
|
|||
|
PRODID:-//Example Corp.//CalDAV Client//EN
|
|||
|
BEGIN:VTODO
|
|||
|
DTSTAMP:20060205T235600Z
|
|||
|
DUE;VALUE=DATE:20060101
|
|||
|
LAST-MODIFIED:20060205T235308Z
|
|||
|
SEQUENCE:1
|
|||
|
STATUS:CANCELLED
|
|||
|
SUMMARY:Task #4
|
|||
|
UID:E10BA47467C5C69BB74E8725@example.com
|
|||
|
END:VTODO
|
|||
|
END:VCALENDAR
|
|||
|
</C:calendar-data>
|
|||
|
</D:prop>
|
|||
|
<D:status>HTTP/1.1 200 OK</D:status>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 104]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
</D:propstat>
|
|||
|
</D:response>
|
|||
|
|
|||
|
<D:response>
|
|||
|
<D:href>http://cal.example.com/bernard/work/abcd8.ics</D:href>
|
|||
|
<D:propstat>
|
|||
|
<D:prop>
|
|||
|
<D:getetag>"fffff-abcd8"</D:getetag>
|
|||
|
<C:calendar-data>BEGIN:VCALENDAR
|
|||
|
VERSION:2.0
|
|||
|
PRODID:-//Example Corp.//CalDAV Client//EN
|
|||
|
BEGIN:VFREEBUSY
|
|||
|
ORGANIZER;CN="Bernard Desruisseaux":mailto:bernard@example.com
|
|||
|
UID:76ef34-54a3d2@example.com
|
|||
|
DTSTAMP:20050530T123421Z
|
|||
|
DTSTART:20060101T000000Z
|
|||
|
DTEND:20060108T000000Z
|
|||
|
FREEBUSY:20050531T230000Z/20050601T010000Z
|
|||
|
FREEBUSY;FBTYPE=BUSY-TENTATIVE:20060102T100000Z/20060102T120000Z
|
|||
|
FREEBUSY:20060103T100000Z/20060103T120000Z
|
|||
|
FREEBUSY:20060104T100000Z/20060104T120000Z
|
|||
|
FREEBUSY;FBTYPE=BUSY-UNAVAILABLE:20060105T100000Z/20060105T120000Z
|
|||
|
FREEBUSY:20060106T100000Z/20060106T120000Z
|
|||
|
END:VFREEBUSY
|
|||
|
END:VCALENDAR
|
|||
|
</C:calendar-data>
|
|||
|
</D:prop>
|
|||
|
<D:status>HTTP/1.1 200 OK</D:status>
|
|||
|
</D:propstat>
|
|||
|
</D:response>
|
|||
|
|
|||
|
</D:multistatus>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 105]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
Authors' Addresses
|
|||
|
|
|||
|
Cyrus Daboo
|
|||
|
Apple Inc.
|
|||
|
1 Infinite Loop
|
|||
|
Cupertino, CA 95014
|
|||
|
USA
|
|||
|
|
|||
|
EMail: cyrus@daboo.name
|
|||
|
URI: http://www.apple.com/
|
|||
|
|
|||
|
|
|||
|
Bernard Desruisseaux
|
|||
|
Oracle Corporation
|
|||
|
600 Blvd. de Maisonneuve West
|
|||
|
Suite 1900
|
|||
|
Montreal, QC H3A 3J2
|
|||
|
CANADA
|
|||
|
|
|||
|
EMail: bernard.desruisseaux@oracle.com
|
|||
|
URI: http://www.oracle.com/
|
|||
|
|
|||
|
|
|||
|
Lisa Dusseault
|
|||
|
CommerceNet
|
|||
|
169 University Ave.
|
|||
|
Palo Alto, CA 94301
|
|||
|
USA
|
|||
|
|
|||
|
EMail: ldusseault@commerce.net
|
|||
|
URI: http://commerce.net/
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 106]
|
|||
|
|
|||
|
RFC 4791 CalDAV March 2007
|
|||
|
|
|||
|
|
|||
|
Full Copyright Statement
|
|||
|
|
|||
|
Copyright (C) The IETF Trust (2007).
|
|||
|
|
|||
|
This document is subject to the rights, licenses and restrictions
|
|||
|
contained in BCP 78, and except as set forth therein, the authors
|
|||
|
retain all their rights.
|
|||
|
|
|||
|
This document and the information contained herein are provided on an
|
|||
|
"AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
|
|||
|
OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND
|
|||
|
THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS
|
|||
|
OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF
|
|||
|
THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
|
|||
|
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
|
|||
|
|
|||
|
Intellectual Property
|
|||
|
|
|||
|
The IETF takes no position regarding the validity or scope of any
|
|||
|
Intellectual Property Rights or other rights that might be claimed to
|
|||
|
pertain to the implementation or use of the technology described in
|
|||
|
this document or the extent to which any license under such rights
|
|||
|
might or might not be available; nor does it represent that it has
|
|||
|
made any independent effort to identify any such rights. Information
|
|||
|
on the procedures with respect to rights in RFC documents can be
|
|||
|
found in BCP 78 and BCP 79.
|
|||
|
|
|||
|
Copies of IPR disclosures made to the IETF Secretariat and any
|
|||
|
assurances of licenses to be made available, or the result of an
|
|||
|
attempt made to obtain a general license or permission for the use of
|
|||
|
such proprietary rights by implementers or users of this
|
|||
|
specification can be obtained from the IETF on-line IPR repository at
|
|||
|
http://www.ietf.org/ipr.
|
|||
|
|
|||
|
The IETF invites any interested party to bring to its attention any
|
|||
|
copyrights, patents or patent applications, or other proprietary
|
|||
|
rights that may cover technology that may be required to implement
|
|||
|
this standard. Please address the information to the IETF at
|
|||
|
ietf-ipr@ietf.org.
|
|||
|
|
|||
|
Acknowledgement
|
|||
|
|
|||
|
Funding for the RFC Editor function is currently provided by the
|
|||
|
Internet Society.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Daboo, et al. Standards Track [Page 107]
|
|||
|
|