tech-invite   World Map     

3GPP     Specs     Glossaries     Architecture     IMS     UICC       IETF     RFCs     Groups     SIP     ABNFs       Search

RFC 4791

 
 
 

Calendaring Extensions to WebDAV (CalDAV)

Part 2 of 5, p. 11 to 31
Prev RFC Part       Next RFC Part

 


prevText      Top      Up      ToC       Page 11 
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      Up      ToC       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      Up      ToC       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      Up      ToC       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      Up      ToC       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      Up      ToC       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      Up      ToC       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      Up      ToC       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      Up      ToC       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      Up      ToC       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      Up      ToC       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      Up      ToC       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      Up      ToC       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      Up      ToC       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      Up      ToC       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      Up      ToC       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      Up      ToC       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      Up      ToC       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      Up      ToC       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      Up      ToC       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      Up      ToC       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 RFC Part