Tech-invite3GPPspaceIETFspace
959493929190898887868584838281807978777675747372717069686766656463626160595857565554535251504948474645444342414039383736353433323130292827262524232221201918171615141312111009080706050403020100
in Index   Prev   Next

RFC 4791

Calendaring Extensions to WebDAV (CalDAV)

Pages: 107
Proposed Standard
Errata
Updated by:  568966386764780979538996
Part 2 of 5 – Pages 11 to 31
First   Prev   Next

Top   ToC   RFC4791 - Page 11   prevText

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.
Top   ToC   RFC4791 - Page 12

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.
Top   ToC   RFC4791 - Page 13
   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 &lt;, &gt;, &amp; 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.
Top   ToC   RFC4791 - Page 14
   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 &amp; Canada)
   END:STANDARD
   BEGIN:DAYLIGHT
   DTSTART:19870405T020000
   RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
   TZOFFSETFROM:-0500
   TZOFFSETTO:-0400
   TZNAME:Eastern Daylight Time (US &amp; 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]).
Top   ToC   RFC4791 - Page 15
   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
Top   ToC   RFC4791 - Page 16
      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)
Top   ToC   RFC4791 - Page 17
   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>
Top   ToC   RFC4791 - Page 18

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>
Top   ToC   RFC4791 - Page 19

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
Top   ToC   RFC4791 - Page 20
      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.
Top   ToC   RFC4791 - Page 21
   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;
Top   ToC   RFC4791 - Page 22
      (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
Top   ToC   RFC4791 - Page 23
         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.
Top   ToC   RFC4791 - Page 24
   >> 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>
Top   ToC   RFC4791 - Page 25
   >> 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.
Top   ToC   RFC4791 - Page 26
   >> 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.
Top   ToC   RFC4791 - Page 27
   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
Top   ToC   RFC4791 - Page 28
      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.
Top   ToC   RFC4791 - Page 29
   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.
Top   ToC   RFC4791 - Page 30
   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*)>
Top   ToC   RFC4791 - Page 31
   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>



(page 31 continued on part 3)

Next Section