X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/blobdiff_plain/86261ea6e673de559883d2fc683536d2e8aa950f..cd2201ae7c2d76351e752b288bd1ab5d4db7ac30:/doc/rfc6352-CardDAV-Spec.html diff --git a/doc/rfc6352-CardDAV-Spec.html b/doc/rfc6352-CardDAV-Spec.html new file mode 100644 index 00000000..717112ef --- /dev/null +++ b/doc/rfc6352-CardDAV-Spec.html @@ -0,0 +1,2718 @@ + + +RFC 6352 - CardDAV: vCard Extensions to Web Distributed Authoring and Versioning (WebDAV)
[Docs] [txt|pdf] [draft-ietf-vcardd...] [Diff1] [Diff2]

PROPOSED STANDARD

Internet Engineering Task Force (IETF)                          C. Daboo
+Request for Comments: 6352                                         Apple
+Category: Standards Track                                    August 2011
+ISSN: 2070-1721
+
+
+                      

CardDAV: vCard Extensions to

+

Web Distributed Authoring and Versioning (WebDAV)

+ +Abstract + + This document defines extensions to the Web Distributed Authoring and + Versioning (WebDAV) protocol to specify a standard way of accessing, + managing, and sharing contact information based on the vCard format. + +Status of This Memo + + This is an Internet Standards Track document. + + This document is a product of the Internet Engineering Task Force + (IETF). It represents the consensus of the IETF community. It has + received public review and has been approved for publication by the + Internet Engineering Steering Group (IESG). Further information on + Internet Standards is available in Section 2 of RFC 5741. + + Information about the current status of this document, any errata, + and how to provide feedback on it may be obtained at + http://www.rfc-editor.org/info/rfc6352. + +Copyright Notice + + Copyright (c) 2011 IETF Trust and the persons identified as the + document authors. All rights reserved. + + This document is subject to BCP 78 and the IETF Trust's Legal + Provisions Relating to IETF Documents + (http://trustee.ietf.org/license-info) in effect on the date of + publication of this document. Please review these documents + carefully, as they describe your rights and restrictions with respect + to this document. Code Components extracted from this document must + include Simplified BSD License text as described in Section 4.e of + the Trust Legal Provisions and are provided without warranty as + described in the Simplified BSD License. + + This document may contain material from IETF Documents or IETF + Contributions published or made publicly available before November + 10, 2008. The person(s) controlling the copyright in some of this + material may not have granted the IETF Trust the right to allow + + + +Daboo Standards Track [Page 1] +

+RFC 6352                         CardDAV                     August 2011
+
+
+   modifications of such material outside the IETF Standards Process.
+   Without obtaining an adequate license from the person(s) controlling
+   the copyright in such materials, this document may not be modified
+   outside the IETF Standards Process, and derivative works of it may
+   not be created outside the IETF Standards Process, except to format
+   it for publication as an RFC or to translate it into languages other
+   than English.
+
+Table of Contents
+
+   1.  Introduction and Overview  . . . . . . . . . . . . . . . . . .  4
+   2.  Conventions  . . . . . . . . . . . . . . . . . . . . . . . . .  5
+   3.  Requirements Overview  . . . . . . . . . . . . . . . . . . . .  6
+   4.  Address Book Data Model  . . . . . . . . . . . . . . . . . . .  7
+     4.1.  Address Book Server  . . . . . . . . . . . . . . . . . . .  7
+   5.  Address Book Resources . . . . . . . . . . . . . . . . . . . .  7
+     5.1.  Address Object Resources . . . . . . . . . . . . . . . . .  7
+       5.1.1.  Data Type Conversion . . . . . . . . . . . . . . . . .  8
+         5.1.1.1.  Additional Precondition for GET  . . . . . . . . .  8
+     5.2.  Address Book Collections . . . . . . . . . . . . . . . . .  9
+   6.  Address Book Feature . . . . . . . . . . . . . . . . . . . . . 10
+     6.1.  Address Book Support . . . . . . . . . . . . . . . . . . . 10
+       6.1.1.  Example: Using OPTIONS for the Discovery of
+               Support for CardDAV  . . . . . . . . . . . . . . . . . 10
+     6.2.  Address Book Properties  . . . . . . . . . . . . . . . . . 10
+       6.2.1.  CARDDAV:addressbook-description Property . . . . . . . 10
+       6.2.2.  CARDDAV:supported-address-data Property  . . . . . . . 11
+       6.2.3.  CARDDAV:max-resource-size Property . . . . . . . . . . 12
+     6.3.  Creating Resources . . . . . . . . . . . . . . . . . . . . 13
+       6.3.1.  Extended MKCOL Method  . . . . . . . . . . . . . . . . 13
+         6.3.1.1.  Example - Successful MKCOL Request . . . . . . . . 14
+       6.3.2.  Creating Address Object Resources  . . . . . . . . . . 15
+         6.3.2.1.  Additional Preconditions for PUT, COPY, and
+                   MOVE . . . . . . . . . . . . . . . . . . . . . . . 16
+         6.3.2.2.  Non-Standard vCard Properties and Parameters . . . 17
+         6.3.2.3.  Address Object Resource Entity Tag . . . . . . . . 18
+   7.  Address Book Access Control  . . . . . . . . . . . . . . . . . 18
+     7.1.  Additional Principal Properties  . . . . . . . . . . . . . 18
+       7.1.1.  CARDDAV:addressbook-home-set Property  . . . . . . . . 19
+       7.1.2.  CARDDAV:principal-address Property . . . . . . . . . . 19
+   8.  Address Book Reports . . . . . . . . . . . . . . . . . . . . . 20
+     8.1.  REPORT Method  . . . . . . . . . . . . . . . . . . . . . . 20
+     8.2.  Ordinary Collections . . . . . . . . . . . . . . . . . . . 21
+     8.3.  Searching Text: Collations . . . . . . . . . . . . . . . . 21
+       8.3.1.  CARDDAV:supported-collation-set Property . . . . . . . 22
+     8.4.  Partial Retrieval  . . . . . . . . . . . . . . . . . . . . 23
+     8.5.  Non-Standard Properties and Parameters . . . . . . . . . . 23
+
+
+
+
+Daboo                        Standards Track                    [Page 2]
+

+RFC 6352                         CardDAV                     August 2011
+
+
+     8.6.  CARDDAV:addressbook-query Report . . . . . . . . . . . . . 23
+       8.6.1.  Limiting Results . . . . . . . . . . . . . . . . . . . 25
+       8.6.2.  Truncation of Results  . . . . . . . . . . . . . . . . 25
+       8.6.3.  Example: Partial Retrieval of vCards Matching
+               NICKNAME . . . . . . . . . . . . . . . . . . . . . . . 26
+       8.6.4.  Example: Partial Retrieval of vCards Matching a
+               Full Name or Email Address . . . . . . . . . . . . . . 27
+       8.6.5.  Example: Truncated Results . . . . . . . . . . . . . . 29
+     8.7.  CARDDAV:addressbook-multiget Report  . . . . . . . . . . . 31
+       8.7.1.  Example: CARDDAV:addressbook-multiget Report . . . . . 32
+       8.7.2.  Example: CARDDAV:addressbook-multiget Report . . . . . 33
+   9.  Client Guidelines  . . . . . . . . . . . . . . . . . . . . . . 34
+     9.1.  Restrict the Properties Returned . . . . . . . . . . . . . 34
+     9.2.  Avoiding Lost Updates  . . . . . . . . . . . . . . . . . . 35
+     9.3.  Client Configuration . . . . . . . . . . . . . . . . . . . 35
+     9.4.  Finding Other Users' Address Books . . . . . . . . . . . . 35
+   10. XML Element Definitions  . . . . . . . . . . . . . . . . . . . 36
+     10.1. CARDDAV:addressbook XML Element  . . . . . . . . . . . . . 36
+     10.2. CARDDAV:supported-collation XML Element  . . . . . . . . . 36
+     10.3. CARDDAV:addressbook-query XML Element  . . . . . . . . . . 37
+     10.4. CARDDAV:address-data XML Element . . . . . . . . . . . . . 37
+       10.4.1. CARDDAV:allprop XML Element  . . . . . . . . . . . . . 39
+       10.4.2. CARDDAV:prop XML Element . . . . . . . . . . . . . . . 39
+     10.5. CARDDAV:filter XML Element . . . . . . . . . . . . . . . . 40
+       10.5.1. CARDDAV:prop-filter XML Element  . . . . . . . . . . . 40
+       10.5.2. CARDDAV:param-filter XML Element . . . . . . . . . . . 41
+       10.5.3. CARDDAV:is-not-defined XML Element . . . . . . . . . . 42
+       10.5.4. CARDDAV:text-match XML Element . . . . . . . . . . . . 42
+     10.6. CARDDAV:limit XML Element  . . . . . . . . . . . . . . . . 43
+       10.6.1. CARDDAV:nresults XML Element . . . . . . . . . . . . . 44
+     10.7. CARDDAV:addressbook-multiget XML Element . . . . . . . . . 44
+   11. Service Discovery via SRV Records  . . . . . . . . . . . . . . 45
+   12. Internationalization Considerations  . . . . . . . . . . . . . 45
+   13. Security Considerations  . . . . . . . . . . . . . . . . . . . 45
+   14. IANA Consideration . . . . . . . . . . . . . . . . . . . . . . 46
+     14.1. Namespace Registration . . . . . . . . . . . . . . . . . . 46
+   15. Acknowledgments  . . . . . . . . . . . . . . . . . . . . . . . 46
+   16. References . . . . . . . . . . . . . . . . . . . . . . . . . . 47
+     16.1. Normative References . . . . . . . . . . . . . . . . . . . 47
+     16.2. Informative References . . . . . . . . . . . . . . . . . . 48
+
+
+
+
+
+
+
+
+
+
+
+Daboo                        Standards Track                    [Page 3]
+

+RFC 6352                         CardDAV                     August 2011
+
+
+

1. Introduction and Overview

+ + Address books containing contact information are a key component of + personal information management tools, such as email, calendaring and + scheduling, and instant messaging clients. To date several protocols + have been used for remote access to contact data, including the + Lightweight Directory Access Protocol (LDAP) [RFC4510], Internet + Message Support Protocol [IMSP], and Application Configuration Access + Protocol (ACAP) [RFC2244], together with SyncML used for + synchronization of such data. + + WebDAV [RFC4918] offers a number of advantages as a framework or + basis for address book access and management. Most of these + advantages boil down to a significant reduction in the costs of + design, implementation, interoperability testing, and deployment. + + The key features of address book support with WebDAV are: + + 1. Ability to use multiple address books with hierarchical layout. + + 2. Ability to control access to individual address books and address + entries as per WebDAV Access Control List (ACL) [RFC3744]. + + 3. Principal collections can be used to enumerate and query other + users on the system as per WebDAV ACL [RFC3744]. + + 4. Server-side searching of address data, avoiding the need for + clients to download an entire address book in order to do a quick + address 'expansion' operation. + + 5. Well-defined internationalization support through WebDAV's use of + XML. + + 6. Use of vCards [RFC2426] for well-defined address schema to + enhance client interoperability. + + 7. Many limited clients (e.g., mobile devices) contain an HTTP stack + that makes implementing WebDAV much easier than other protocols. + + The key disadvantage of address book support in WebDAV is: + + 1. Lack of change notification. Many of the alternative protocols + also lack this ability. However, an extension for push + notifications could easily be developed. + + vCard is a MIME directory profile aimed at encapsulating personal + addressing and contact information about people. The specification + of vCard was originally done by the Versit consortium, with a + + + +Daboo Standards Track [Page 4] +

+RFC 6352                         CardDAV                     August 2011
+
+
+   subsequent 3.0 version standardized by the IETF [RFC2426]. vCard is
+   in widespread use in email clients and mobile devices as a means of
+   encapsulating address information for transport via email or for
+   import/export and synchronization operations.
+
+   An update to vCard -- vCard v4 -- is currently being developed
+   [RFC6350] and is compatible with this specification.
+
+

2. 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 15 of [RFC4918]. + + This document uses XML DTD fragments ([W3C.REC-xml-20081126], Section + 3.2) as a purely notational convention. WebDAV request and response + bodies cannot be validated by a DTD due to the specific extensibility + rules defined in Section 17 of [RFC4918] and due to the fact that all + XML elements defined by that specification use the XML namespace name + "DAV:". In particular: + + 1. Element names use the "DAV:" namespace. + + 2. Element ordering is irrelevant unless explicitly stated. + + 3. Extension elements (elements not already defined as valid child + elements) may be added anywhere, except when explicitly stated + otherwise. + + 4. Extension attributes (attributes not already defined as valid for + this element) may be added anywhere, except when explicitly + stated otherwise. + + The namespace "urn:ietf:params:xml:ns:carddav" is reserved for the + XML elements defined in this specification, its revisions, and + related CardDAV specifications. XML elements defined by individual + implementations MUST NOT use the "urn:ietf:params:xml:ns:carddav" + namespace, and instead should use a namespace that they control. + + When XML element types in the namespaces "DAV:" and + "urn:ietf:params:xml:ns:carddav" are referenced in this document + outside of the context of an XML fragment, the strings "DAV:" and + "CARDDAV:" will be prefixed to the element types, respectively. + + + + + +Daboo Standards Track [Page 5] +

+RFC 6352                         CardDAV                     August 2011
+
+
+   This document inherits, and sometimes extends, DTD productions from
+   Section 14 of [RFC4918].
+
+   Also, note that some CardDAV 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.
+
+

3. Requirements Overview

+ + This section lists what functionality is required of a CardDAV + server. To advertise support for CardDAV, a server: + + o MUST support vCard v3 [RFC2426] as a media type for the address + object resource format; + + o MUST support WebDAV Class 3 [RFC4918]; + + o MUST support WebDAV ACL [RFC3744]; + + o MUST support secure transport as defined in [RFC2818] using + Transport Layer Security (TLS) [RFC5246] and using the certificate + validation procedures described in [RFC5280]; + + o MUST support ETags [RFC2616] with additional requirements + specified in Section 6.3.2.3 of this document; + + o MUST support all address book reports defined in Section 8 of this + document; and + + o MUST advertise support on all address book collections and address + object resources for the address book reports in the + DAV:supported-report-set property, as defined in Versioning + Extensions to WebDAV [RFC3253]. + + In addition, a server: + + o SHOULD support vCard v4 [RFC6350] as a media type for the address + object resource format; + + o SHOULD support the extended MKCOL method [RFC5689] to create + address book collections as defined in Section 6.3.1 of this + document. + + o SHOULD support the DAV:current-user-principal-URL property as + defined in [RFC5397] to give clients a fast way to locate user + principals. + + + + + +Daboo Standards Track [Page 6] +

+RFC 6352                         CardDAV                     August 2011
+
+
+

4. Address Book Data Model

+ + As a brief overview, a CardDAV address book is modeled as a WebDAV + collection with a well-defined structure; each of these address book + collections contains a number of resources representing address + objects as their direct child resources. Each resource representing + an address object is called an "address object resource". Each + address object resource and each address book collection can be + individually locked and have individual WebDAV properties. + Requirements derived from this model are provided in Sections 5.1 and + 5.2. + +

4.1. Address Book Server

+ + A CardDAV server is an address-aware engine combined with a WebDAV + server. The server may include address data in some parts of its URL + namespace and non-address data in other parts. + + A WebDAV server can advertise itself as a CardDAV server if it + supports the functionality defined in this specification at any point + within the root of its repository. That might mean that address data + is spread throughout the repository and mixed with non-address data + in nearby collections (e.g., address data may be found in /lisa/ + addressbook/ as well as in /bernard/addressbook/, and non-address + data in /lisa/calendars/). Or, it might mean that address data can + be found only in certain sections of the repository (e.g., + /addressbooks/user/). Address book features are only required in the + repository sections that are or contain address objects. So, a + repository confining address data to the /carddav/ collection would + only need to support the CardDAV required features within that + collection. + + The CardDAV server is the canonical location for address data and + state information. Clients may submit requests to change data or + download data. Clients may store address objects offline and attempt + to synchronize at a later time. Address data on the server can + change between the time of last synchronization and when attempting + an update, as address book collections may be shared and accessible + via multiple clients. Entity tags and locking help this work. + +

5. Address Book Resources

+ +

5.1. Address Object Resources

+ + This specification uses vCard as the default format for address or + contact information being stored on the server. However, this + specification does allow other formats for address data provided that + the server advertises support for those additional formats as + + + +Daboo Standards Track [Page 7] +

+RFC 6352                         CardDAV                     August 2011
+
+
+   described below.  The requirements in this section pertain to vCard
+   address data or formats that follow the semantics of vCard data.
+
+   Address object resources contained in address book collections MUST
+   contain a single vCard component only.
+
+   vCard components in an address book collection MUST have a UID
+   property value that MUST be unique in the scope of the address book
+   collection in which it is contained.
+
+

5.1.1. Data Type Conversion

+ + Servers might support more than one primary media type for address + object resources, for example, vCard v3.0 and vCard v4.0. In such + cases, servers have to accept all media types that they advertise via + the CARDDAV:supported-address-data WebDAV property (see + Section 6.2.2). + + However, clients can use standard HTTP content negotiation behavior + (the Accept request header defined in Section 14.1 of [RFC2616]) to + request that an address object resource's data be returned in a + specific media type format. For example, a client merely capable of + handling vCard v3.0 would only want to have address object resources + returned in v3.0 format. + + Additionally, REPORT requests, defined later in this specification, + allow for the return of address object resource data within an XML + response body. Again, the client can use content negotiation to + request that data be returned in a specific media type by specifying + appropriate attributes on the CARDDAV:address-data XML element used + in the request body (see Section 10.4). + + In some cases, it might not be possible for a server to convert from + one media type to another. When that happens, the server MUST return + the CARDDAV:supported-address-data-conversion precondition (see + below) in the response body (when the failure to convert applies to + the entire response) or use that same precondition code in the + DAV:response XML element in the response for the targeted address + object resource when one of the REPORTs defined below is used. See + Section 8.7.2 for an example of this. + +
5.1.1.1. Additional Precondition for GET
+ + This specification creates additional preconditions for the GET + method. + + + + + + +Daboo Standards Track [Page 8] +

+RFC 6352                         CardDAV                     August 2011
+
+
+   The new precondition is:
+
+      (CARDDAV:supported-address-data-conversion): The resource targeted
+      by the GET request can be converted to the media type specified in
+      the Accept request header included with the request.
+
+

5.2. Address Book Collections

+ + Address book collections appear to clients as a WebDAV collection + resource, identified by a URL. An address book collection MUST + report the DAV:collection and CARDDAV:addressbook XML elements in the + value of the DAV:resourcetype property. The element type declaration + for CARDDAV:addressbook is: + + <!ELEMENT addressbook EMPTY> + + An address book collection can be created through provisioning (e.g., + automatically created when a user's account is provisioned), or it + can be created with the extended MKCOL method (see Section 6.3.1). + This can be used by a user to create additional address books (e.g., + "soccer team members") or for users to share an address book (e.g., + "sales team contacts"). However, note that this document doesn't + define what extra address book collections are for. Users must rely + on non-standard cues to find out what an address book collection is + for, or use the CARDDAV:addressbook-description property defined in + Section 6.2.1 to provide such a cue. + + The following restrictions are applied to the resources within an + address book collection: + + a. Address book collections MUST only contain address object + resources and collections that are not address book collections. + That is, the only "top-level" non-collection resources allowed in + an address book collection are address object resources. This + ensures that address book clients do not have to deal with non- + address data in an address book collection, though they do have + to distinguish between address object resources and collections + when using standard WebDAV techniques to examine the contents of + a collection. + + b. Collections contained in address book collections MUST NOT + contain address book collections at any depth. That is, + "nesting" of address book collections within other address book + collections at any depth is not allowed. This specification does + not define how collections contained in an address book + collection are used or how they relate to any address object + resources contained in the address book collection. + + + + +Daboo Standards Track [Page 9] +

+RFC 6352                         CardDAV                     August 2011
+
+
+   Multiple address book collections MAY be children of the same
+   collection.
+
+

6. Address Book Feature

+ +

6.1. Address Book Support

+ + A server supporting the features described in this document MUST + include "addressbook" as a field in the DAV response header from an + OPTIONS request on any resource that supports any address book + properties, reports, or methods. A value of "addressbook" in the DAV + response header MUST indicate that the server supports all MUST level + requirements and REQUIRED features specified in this document. + +

6.1.1. Example: Using OPTIONS for the Discovery of Support for CardDAV

+ + >> Request << + + OPTIONS /addressbooks/users/ HTTP/1.1 + Host: addressbook.example.com + + >> Response << + + HTTP/1.1 200 OK + Allow: OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, COPY, MOVE + Allow: MKCOL, PROPFIND, PROPPATCH, LOCK, UNLOCK, REPORT, ACL + DAV: 1, 2, 3, access-control, addressbook + DAV: extended-mkcol + Date: Sat, 11 Nov 2006 09:32:12 GMT + Content-Length: 0 + + In this example, the OPTIONS response indicates that the server + supports CardDAV in this namespace; therefore, the '/addressbooks/ + users/' collection may be used as a parent for address book + collections as the extended MKCOL method is available and as a + possible target for REPORT requests for address book reports. + +

6.2. Address Book Properties

+ +

6.2.1. CARDDAV:addressbook-description Property

+ + Name: addressbook-description + + Namespace: urn:ietf:params:xml:ns:carddav + + Purpose: Provides a human-readable description of the address book + collection. + + + + +Daboo Standards Track [Page 10] +

+RFC 6352                         CardDAV                     August 2011
+
+
+   Value:  Any text.
+
+   Protected:  SHOULD NOT be protected so that users can specify a
+      description.
+
+   COPY/MOVE behavior:  This property value SHOULD be preserved in COPY
+      and MOVE operations.
+
+   allprop behavior:  SHOULD NOT be returned by a PROPFIND DAV:allprop
+      request.
+
+   Description:  This property contains a description of the address
+      book collection that is suitable for presentation to a user.  The
+      xml:lang attribute can be used to add a language tag for the value
+      of this property.
+
+   Definition:
+
+       <!ELEMENT addressbook-description (#PCDATA)>
+       <!-- PCDATA value: string -->
+
+   Example:
+
+       <C:addressbook-description xml:lang="fr-CA"
+          xmlns:C="urn:ietf:params:xml:ns:carddav"
+       >Adresses de Oliver Daboo</C:addressbook-description>
+
+

6.2.2. CARDDAV:supported-address-data Property

+ + Name: supported-address-data + + Namespace: urn:ietf:params:xml:ns:carddav + + Purpose: Specifies what media types are allowed for address object + resources in an address book collection. + + Protected: MUST be protected as it indicates the level of support + provided by the server. + + COPY/MOVE behavior: This property value MUST be preserved in COPY + and MOVE operations. + + allprop behavior: SHOULD NOT be returned by a PROPFIND DAV:allprop + request. + + Description: The CARDDAV:supported-address-data property is used to + specify the media type supported for the address object resources + contained in a given address book collection (e.g., vCard version + + + +Daboo Standards Track [Page 11] +

+RFC 6352                         CardDAV                     August 2011
+
+
+      3.0).  Any attempt by the client to store address object resources
+      with a media type not listed in this property MUST result in an
+      error, with the CARDDAV:supported-address-data precondition
+      (Section 6.3.2.1) being violated.  In the absence of this
+      property, the server MUST only accept data with the media type
+      "text/vcard" and vCard version 3.0, and clients can assume that is
+      all the server will accept.
+
+   Definition:
+
+       <!ELEMENT supported-address-data (address-data-type+)>
+
+       <!ELEMENT address-data-type EMPTY>
+       <!ATTLIST address-data-type content-type CDATA "text/vcard"
+                             version CDATA "3.0">
+       <!-- content-type value: a MIME media type -->
+       <!-- version value: a version string -->
+
+   Example:
+
+       <C:supported-address-data
+          xmlns:C="urn:ietf:params:xml:ns:carddav">
+         <C:address-data-type content-type="text/vcard" version="3.0"/>
+       </C:supported-address-data>
+
+

6.2.3. CARDDAV:max-resource-size Property

+ + Name: max-resource-size + + Namespace: urn:ietf:params:xml:ns:carddav + + Purpose: Provides a numeric value indicating the maximum size in + octets of a resource that the server is willing to accept when an + address object resource is stored in an address book collection. + + Value: Any text representing a numeric value. + + Protected: MUST be protected as it indicates limits provided by the + server. + + COPY/MOVE behavior: This property value MUST be preserved in COPY + and MOVE operations. + + allprop behavior: SHOULD NOT be returned by a PROPFIND DAV:allprop + request. + + + + + + +Daboo Standards Track [Page 12] +

+RFC 6352                         CardDAV                     August 2011
+
+
+   Description:  The CARDDAV: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 an address object resource is
+      stored in an address book collection.  Any attempt to store an
+      address book object resource exceeding this size MUST result in an
+      error, with the CARDDAV:max-resource-size precondition
+      (Section 6.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 decimal integer) -->
+
+   Example:
+
+       <C:max-resource-size xmlns:C="urn:ietf:params:xml:ns:carddav"
+       >102400</C:max-resource-size>
+
+

6.3. Creating Resources

+ + Address book collections and address object resources may be created + by either a CardDAV client or the CardDAV server. This specification + defines restrictions and a data model that both clients and servers + MUST adhere to when manipulating such address data. + +

6.3.1. Extended MKCOL Method

+ + An HTTP request using the extended MKCOL method [RFC5689] can be used + to create a new address book collection resource. A server MAY + restrict address book collection creation to particular collections. + + To create an address book, the client sends an extended MKCOL request + to the server and in the body of the request sets the + DAV:resourcetype property to the resource type for an address book + collection as defined in Section 5.2. + + Support for creating address books on the server is only RECOMMENDED + and not REQUIRED because some address book stores only support one + address book per user (or principal), and those are typically pre- + created for each account. However, servers and clients are strongly + encouraged to support address book creation whenever possible to + allow users to create multiple address book collections to help + organize their data better. + + + + + + +Daboo Standards Track [Page 13] +

+RFC 6352                         CardDAV                     August 2011
+
+
+   The DAV:displayname property can be used for a human-readable name of
+   the address book.  Clients can either specify the value of the
+   DAV:displayname property in the request body of the extended MKCOL
+   request or, alternatively, issue a PROPPATCH request to change the
+   DAV:displayname property to the appropriate value immediately after
+   using the extended MKCOL request.  When displaying address book
+   collections to users, clients SHOULD check the DAV:displayname
+   property and use that value as the name of the address book.  In the
+   event that the DAV:displayname property is not set, the client MAY
+   use the last part of the address book collection URI as the name;
+   however, that path segment may be "opaque" and not represent any
+   meaningful human-readable text.
+
+
6.3.1.1. Example - Successful MKCOL Request
+ + This example creates an address book collection called /home/lisa/ + addressbook/ on the server addressbook.example.com with specific + values for the properties DAV:resourcetype, DAV:displayname, and + CARDDAV:addressbook-description. + + >> Request << + + MKCOL /home/lisa/addressbook/ HTTP/1.1 + Host: addressbook.example.com + Content-Type: text/xml; charset="utf-8" + Content-Length: xxx + + <?xml version="1.0" encoding="utf-8" ?> + <D:mkcol xmlns:D="DAV:" + xmlns:C="urn:ietf:params:xml:ns:carddav"> + <D:set> + <D:prop> + <D:resourcetype> + <D:collection/> + <C:addressbook/> + </D:resourcetype> + <D:displayname>Lisa's Contacts</D:displayname> + <C:addressbook-description xml:lang="en" + >My primary address book.</C:addressbook-description> + </D:prop> + </D:set> + </D:mkcol> + + + + + + + + + +Daboo Standards Track [Page 14] +

+RFC 6352                         CardDAV                     August 2011
+
+
+   >> Response <<
+
+   HTTP/1.1 201 Created
+   Cache-Control: no-cache
+   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:mkcol-response xmlns:D="DAV:"
+                 xmlns:C="urn:ietf:params:xml:ns:carddav">
+     <D:propstat>
+       <D:prop>
+         <D:resourcetype/>
+         <D:displayname/>
+         <C:addressbook-description/>
+       </D:prop>
+       <D:status>HTTP/1.1 200 OK</D:status>
+     </D:propstat>
+   </D:mkcol-response>
+
+

6.3.2. Creating Address Object Resources

+ + Clients populate address book collections with address object + resources. The URL for each address object resource is entirely + arbitrary and does not need to bear a specific relationship (but + might) to the address object resource's vCard properties or other + metadata. New address 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 address object resource. + + When servers create new resources, it's not hard for the server to + choose a unique URL. 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 one + isn't created with a name collision. However, there is an HTTP + feature to mitigate this. If the client intends to create a new + address resource, the client SHOULD use the HTTP 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" header ensures that the client will not inadvertently + overwrite an existing resource even if the last path segment turned + out to already be used. + + + + + + + +Daboo Standards Track [Page 15] +

+RFC 6352                         CardDAV                     August 2011
+
+
+   >> Request <<
+
+   PUT /lisa/addressbook/newvcard.vcf HTTP/1.1
+   If-None-Match: *
+   Host: addressbook.example.com
+   Content-Type: text/vcard
+   Content-Length: xxx
+
+   BEGIN:VCARD
+   VERSION:3.0
+   FN:Cyrus Daboo
+   N:Daboo;Cyrus
+   ADR;TYPE=POSTAL:;2822 Email HQ;Suite 2821;RFCVille;PA;15213;USA
+   EMAIL;TYPE=INTERNET,PREF:cyrus@example.com
+   NICKNAME:me
+   NOTE:Example VCard.
+   ORG:Self Employed
+   TEL;TYPE=WORK,VOICE:412 605 0499
+   TEL;TYPE=FAX:412 605 0705
+   URL:http://www.example.com
+   UID:1234-5678-9000-1
+   END:VCARD
+
+   >> Response <<
+
+   HTTP/1.1 201 Created
+   Date: Thu, 02 Sep 2004 16:53:32 GMT
+   Content-Length: 0
+   ETag: "123456789-000-111"
+
+   The request to change an existing address object resource without
+   overwriting a change made on the server uses a specific ETag in an
+   "If-Match" header, rather than the "If-None-Match" header.
+
+   File names for vCards are commonly suffixed by ".vcf", and clients
+   may choose to use the same convention for URLs.
+
+
6.3.2.1. Additional Preconditions for PUT, COPY, and MOVE
+ + This specification creates additional preconditions for the PUT, + COPY, and MOVE methods. These preconditions apply: + + o When a PUT operation of an address object resource into an address + book collection occurs. + + o When a COPY or MOVE operation of an address object resource into + an address book collection occurs. + + + + +Daboo Standards Track [Page 16] +

+RFC 6352                         CardDAV                     August 2011
+
+
+   The new preconditions are:
+
+      (CARDDAV:supported-address-data): The resource submitted in the
+      PUT request, or targeted by a COPY or MOVE request, MUST be a
+      supported media type (i.e., vCard) for address object resources.
+
+      (CARDDAV:valid-address-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 vCard
+      data).
+
+      (CARDDAV:no-uid-conflict): The resource submitted in the PUT
+      request, or targeted by a COPY or MOVE request, MUST NOT specify a
+      vCard UID property value already in use in the targeted address
+      book collection or overwrite an existing address 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)>
+
+      (CARDDAV:addressbook-collection-location-ok): In a COPY or MOVE
+      request, when the Request-URI is an address book collection, the
+      URI targeted by the Destination HTTP Request header MUST identify
+      a location where an address book collection can be created.
+
+      (CARDDAV:max-resource-size): The resource submitted in the PUT
+      request, or targeted by a COPY or MOVE request, MUST have a size
+      in octets less than or equal to the value of the
+      CARDDAV:max-resource-size property value (Section 6.2.3) on the
+      address book collection where the resource will be stored.
+
+
6.3.2.2. Non-Standard vCard Properties and Parameters
+ + vCard provides a "standard mechanism for doing non-standard things". + This extension support allows implementers to make use of non- + standard vCard properties and parameters whose names are prefixed + with the text "X-". + + Servers MUST support the use of non-standard properties and + parameters in address object resources stored via the PUT method. + + Servers may need to enforce rules for their own "private" 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. A server SHOULD ensure that any "private" + + + + + +Daboo Standards Track [Page 17] +

+RFC 6352                         CardDAV                     August 2011
+
+
+   properties or parameters it uses follow the convention of including a
+   vendor ID in the "X-" name, as described in Section 3.8 of [RFC2426],
+   e.g., "X-ABC-PRIVATE".
+
+
6.3.2.3. Address Object Resource Entity Tag
+ + The DAV:getetag property MUST be defined and set to a strong entity + tag on all address object resources. + + A response to a GET request targeted at an address object resource + MUST contain an ETag response header field indicating the current + value of the strong entity tag of the address object resource. + + Servers SHOULD return a strong entity tag (ETag header) in a PUT + response when the stored address object resource is equivalent by + octet equality to the address 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 address object + resource, have the DAV:getetag property returned, compare that value + with the strong entity tag it received on the PUT response, and know + that if they are equal, then the address 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 address + 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, a client may need to + retrieve the modified address object resource (and ETag) as a basis + for further changes, rather than use the address object resource it + had sent with the PUT request. + +

7. Address Book Access Control

+ + CardDAV 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. + +

7.1. Additional Principal Properties

+ + This section defines additional properties for WebDAV principal + resources as defined in [RFC3744]. + + + + + + + +Daboo Standards Track [Page 18] +

+RFC 6352                         CardDAV                     August 2011
+
+
+

7.1.1. CARDDAV:addressbook-home-set Property

+ + Name: addressbook-home-set + + Namespace: urn:ietf:params:xml:ns:carddav + + Purpose: Identifies the URL of any WebDAV collections that contain + address book collections owned by the associated principal + resource. + + Protected: MAY be protected if the server has fixed locations in + which address books are created. + + COPY/MOVE behavior: This property value MUST be preserved in COPY + and MOVE operations. + + allprop behavior: SHOULD NOT be returned by a PROPFIND DAV:allprop + request. + + Description: The CARDDAV:addressbook-home-set property is meant to + allow users to easily find the address book collections owned by + the principal. Typically, users will group all the address book + collections that they own under a common collection. This + property specifies the URL of collections that are either address + book collections or ordinary collections that have child or + descendant address book collections owned by the principal. + + Definition: + + <!ELEMENT addressbook-home-set (DAV:href*)> + + Example: + + <C:addressbook-home-set xmlns:D="DAV:" + xmlns:C="urn:ietf:params:xml:ns:carddav"> + <D:href>/bernard/addresses/</D:href> + </C:addressbook-home-set> + +

7.1.2. CARDDAV:principal-address Property

+ + Name: principal-address + + Namespace: urn:ietf:params:xml:ns:carddav + + Purpose: Identifies the URL of an address object resource that + corresponds to the user represented by the principal. + + + + + +Daboo Standards Track [Page 19] +

+RFC 6352                         CardDAV                     August 2011
+
+
+   Protected:  MAY be protected if the server provides a fixed location
+      for principal addresses.
+
+   COPY/MOVE behavior:  This property value MUST be preserved in COPY
+      and MOVE operations.
+
+   allprop behavior:  SHOULD NOT be returned by a PROPFIND DAV:allprop
+      request.
+
+   Description:  The CARDDAV:principal-address property is meant to
+      allow users to easily find contact information for users
+      represented by principals on the system.  This property specifies
+      the URL of the resource containing the corresponding contact
+      information.  The resource could be an address object resource in
+      an address book collection, or it could be a resource in a
+      "regular" collection.
+
+   Definition:
+
+       <!ELEMENT principal-address (DAV:href)>
+
+   Example:
+
+       <C:principal-address xmlns:D="DAV:"
+          xmlns:C="urn:ietf:params:xml:ns:carddav">
+          <D:href>/system/cyrus.vcf</D:href>
+       </C:principal-address>
+
+

8. Address Book Reports

+ + This section defines the reports that CardDAV servers MUST support on + address book collections and address object resources. + + CardDAV servers MUST advertise support for these reports on all + address book collections and address object resources with the + DAV:supported-report-set property defined in Section 3.1.5 of + [RFC3253]. CardDAV servers MAY also advertise support for these + reports on ordinary collections. + + Some of these reports allow address data (from possibly multiple + resources) to be returned. + +

8.1. REPORT Method

+ + The REPORT method (defined in Section 3.6 of [RFC3253]) provides an + extensible mechanism for obtaining information about a resource. + Unlike the PROPFIND method, which returns the value of one or more + named properties, the REPORT method can involve more complex + + + +Daboo Standards Track [Page 20] +

+RFC 6352                         CardDAV                     August 2011
+
+
+   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.
+
+   A server that supports this specification MUST support the
+   DAV:expand-property report (defined in Section 3.8 of [RFC3253]).
+
+

8.2. Ordinary Collections

+ + Servers MAY support the reports defined in this document on ordinary + collections (collections that are not address book collections) in + addition to address book collections or address object resources. In + computing responses to the reports on ordinary collections, servers + MUST only consider address object resources contained in address book + collections that are targeted by the REPORT based on the value of the + Depth request header. + +

8.3. Searching Text: Collations

+ + Some of the reports defined in this section do text matches of + character strings provided by the client and compared to stored + address data. Since vCard data is by default encoded in the UTF-8 + charset and may include characters outside of 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. + + Collations supported by the server MUST support "equality" and + "substring" match operations as per [RFC4790], Section 4.2, including + the "prefix" and "suffix" options for "substring" matching. CardDAV + uses these match options for "equals", "contains", "starts-with", and + "ends-with" match operations. + + CardDAV servers are REQUIRED to support the "i;ascii-casemap" + [RFC4790] and "i;unicode-casemap" [RFC5051] collations and MAY + support other collations. + + Servers MUST advertise the set of collations that they support via + the CARDDAV:supported-collation-set property defined on any resource + that supports reports that use collations. + + + + + + +Daboo Standards Track [Page 21] +

+RFC 6352                         CardDAV                     August 2011
+
+
+   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;unicode-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 CARDDAV:supported-collation precondition
+   error response.
+
+

8.3.1. CARDDAV:supported-collation-set Property

+ + Name: supported-collation-set + + Namespace: urn:ietf:params:xml:ns:carddav + + Purpose: Identifies the set of collations supported by the server + for text matching operations. + + Protected: MUST be protected as it indicates support provided by the + server. + + COPY/MOVE behavior: This property value MUST be preserved in COPY + and MOVE operations. + + allprop behavior: SHOULD NOT be returned by a PROPFIND DAV:allprop + request. + + Description: The CARDDAV:supported-collation-set property contains + two or more CARDDAV:supported-collation elements that specify the + identifiers of the collations supported by the server. + + Definition: + + <!ELEMENT supported-collation-set ( + supported-collation + supported-collation + supported-collation*)> + <!-- Both "i;ascii-casemap" and "i;unicode-casemap" + will be present --> + + <!ELEMENT supported-collation (#PCDATA)> + + + + + + + +Daboo Standards Track [Page 22] +

+RFC 6352                         CardDAV                     August 2011
+
+
+   Example:
+
+      <C:supported-collation-set
+        xmlns:C="urn:ietf:params:xml:ns:carddav">
+        <C:supported-collation>i;ascii-casemap</C:supported-collation>
+        <C:supported-collation>i;octet</C:supported-collation>
+        <C:supported-collation>i;unicode-casemap</C:supported-collation>
+      </C:supported-collation-set>
+
+

8.4. Partial Retrieval

+ + Some address book reports defined in this document allow partial + retrieval of address object resources. A CardDAV client can specify + what information to return in the body of an address book REPORT + request. + + A CardDAV client can request particular WebDAV property values, all + WebDAV property values, or a list of the names of the resource's + WebDAV properties. A CardDAV client can also request address data to + be returned and whether all vCard properties should be returned or + only particular ones. See CARDDAV:address-data in Section 10.4. + +

8.5. Non-Standard Properties and Parameters

+ + Servers MUST support the use of non-standard vCard property or + parameter names in the CARDDAV:address-data XML element in address + book REPORT requests to allow clients to request that non-standard + properties and parameters be returned in the address data provided in + the response. + + Servers MAY support the use of non-standard vCard property or + parameter names in the CARDDAV:prop-filter and CARDDAV:param-filter + XML elements specified in the CARDDAV:filter XML element of address + book REPORT requests. + + Servers MUST fail with the CARDDAV:supported-filter precondition if + an address book REPORT request uses a CARDDAV:prop-filter or + CARDDAV:param-filter XML element that makes reference to a non- + standard vCard property or parameter name on which the server does + not support queries. + +

8.6. CARDDAV:addressbook-query Report

+ + The CARDDAV:addressbook-query REPORT performs a search for all + address object resources that match a specified filter. The response + of this report will contain all the WebDAV properties and address + object resource data specified in the request. In the case of the + + + + +Daboo Standards Track [Page 23] +

+RFC 6352                         CardDAV                     August 2011
+
+
+   CARDDAV:address-data XML element, one can explicitly specify the
+   vCard properties that should be returned in the address 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 CARDDAV:addressbook-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 WebDAV property results.  For
+   instance, a request to retrieve the value of a WebDAV 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 CARDDAV:addressbook-query REPORT is REQUIRED.
+
+   Marshalling:
+
+      The request body MUST be a CARDDAV:addressbook-query XML element
+      as defined in Section 10.3.
+
+      The request MUST include a Depth header.  The scope of the query
+      is determined by the value of the Depth header.  For example, to
+      query all address object resources in an address book collection,
+      the REPORT would use the address book collection as the Request-
+      URI and specify a Depth of 1 or infinity.
+
+      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 CARDDAV:addressbook-query
+      REPORT request MUST contain a DAV:response element for each
+      address object that matched the search filter.  Address data is
+      returned in the CARDDAV:address-data XML element inside the
+      DAV:propstat XML element.
+
+   Preconditions:
+
+      (CARDDAV:supported-address-data): The attributes "content-type"
+      and "version" of the CARDDAV:address-data XML element (see
+      Section 10.4) specify a media type supported by the server for
+      address object resources.
+
+
+
+
+
+Daboo                        Standards Track                   [Page 24]
+

+RFC 6352                         CardDAV                     August 2011
+
+
+      (CARDDAV:supported-filter): The CARDDAV:prop-filter (see
+      Section 10.5.1) and CARDDAV:param-filter (see Section 10.5.2) XML
+      elements used in the CARDDAV:filter XML element (see Section 10.5)
+      in the REPORT request only make reference to vCard properties and
+      parameters for which queries are supported by the server.  That
+      is, if the CARDDAV:filter element attempts to reference an
+      unsupported vCard property or parameter, this precondition is
+      violated.  A server SHOULD report the CARDDAV:prop-filter or
+      CARDDAV:param-filter for which it does not provide support.
+
+          <!ELEMENT supported-filter (prop-filter*,
+                                      param-filter*)>
+
+      (CARDDAV:supported-collation): Any XML attribute specifying a
+      collation MUST specify a collation supported by the server as
+      described in Section 8.3.
+
+   Postconditions:
+
+      (DAV:number-of-matches-within-limits): The number of matching
+      address 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.
+
+

8.6.1. Limiting Results

+ + A client can limit the number of results returned by the server + through use of the CARDDAV:limit element in the request body. This + is useful when clients are only interested in a few matches or only + have limited space to display results to users and thus don't need + the overhead of receiving more than that. When the results are + truncated by the server, the server MUST follow the rules below for + indicating a result set truncation to the client. + +

8.6.2. Truncation of Results

+ + A server MAY limit the number of resources in a response, for + example, to limit the amount of work expended in processing a query, + or as the result of an explicit limit set by the client. If the + result set is truncated because of such a limit, the response MUST + use status code 207 (Multi-Status), return a DAV:multistatus response + body, and indicate a status of 507 (Insufficient Storage) for the + Request-URI. That DAV:response element SHOULD include a DAV:error + element with the DAV:number-of-matches-within-limits precondition, as + defined in [RFC3744], Section 9.2. + + + + + +Daboo Standards Track [Page 25] +

+RFC 6352                         CardDAV                     August 2011
+
+
+   The server SHOULD also include the partial results in additional
+   DAV:response elements.  If a client-requested limit is being applied,
+   the 507 response for the Request-URI MUST NOT be included in
+   calculating the limit (e.g., if the client requests that only a
+   single result be returned, and multiple matches are present, then the
+   DAV:multistatus response will include one DAV:response for the
+   matching resource and one DAV:response for the 507 status on the
+   Request-URI).
+
+

8.6.3. Example: Partial Retrieval of vCards Matching NICKNAME

+ + In this example, the client requests that the server search for + address object resources that contain a NICKNAME property whose value + equals some specific text and return specific vCard properties for + those vCards found. In addition, the DAV:getetag property is also + requested and returned as part of the response. + + >> Request << + + REPORT /home/bernard/addressbook/ HTTP/1.1 + Host: addressbook.example.com + Depth: 1 + Content-Type: text/xml; charset="utf-8" + Content-Length: xxxx + + <?xml version="1.0" encoding="utf-8" ?> + <C:addressbook-query xmlns:D="DAV:" + xmlns:C="urn:ietf:params:xml:ns:carddav"> + <D:prop> + <D:getetag/> + <C:address-data> + <C:prop name="VERSION"/> + <C:prop name="UID"/> + <C:prop name="NICKNAME"/> + <C:prop name="EMAIL"/> + <C:prop name="FN"/> + </C:address-data> + </D:prop> + <C:filter> + <C:prop-filter name="NICKNAME"> + <C:text-match collation="i;unicode-casemap" + match-type="equals" + >me</C:text-match> + </C:prop-filter> + </C:filter> + </C:addressbook-query> + + + + + +Daboo Standards Track [Page 26] +

+RFC 6352                         CardDAV                     August 2011
+
+
+   >> Response <<
+
+   HTTP/1.1 207 Multi-Status
+   Date: Sat, 11 Nov 2006 09:32:12 GMT
+   Content-Type: text/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:carddav">
+     <D:response>
+       <D:href>/home/bernard/addressbook/v102.vcf</D:href>
+       <D:propstat>
+         <D:prop>
+           <D:getetag>"23ba4d-ff11fb"</D:getetag>
+           <C:address-data>BEGIN:VCARD
+   VERSION:3.0
+   NICKNAME:me
+   UID:34222-232@example.com
+   FN:Cyrus Daboo
+   EMAIL:daboo@example.com
+   END:VCARD
+   </C:address-data>
+         </D:prop>
+         <D:status>HTTP/1.1 200 OK</D:status>
+       </D:propstat>
+     </D:response>
+   </D:multistatus>
+
+

8.6.4. Example: Partial Retrieval of vCards Matching a Full Name or

+ Email Address + + In this example, the client requests that the server search for + address object resources that contain a FN property whose value + contains some specific text or that contain an EMAIL property whose + value contains other text and return specific vCard properties for + those vCards found. In addition, the DAV:getetag property is also + requested and returned as part of the response. + + >> Request << + + REPORT /home/bernard/addressbook/ HTTP/1.1 + Host: addressbook.example.com + Depth: 1 + Content-Type: text/xml; charset="utf-8" + Content-Length: xxxx + + + + + +Daboo Standards Track [Page 27] +

+RFC 6352                         CardDAV                     August 2011
+
+
+   <?xml version="1.0" encoding="utf-8" ?>
+   <C:addressbook-query xmlns:D="DAV:"
+                     xmlns:C="urn:ietf:params:xml:ns:carddav">
+     <D:prop>
+       <D:getetag/>
+       <C:address-data>
+         <C:prop name="VERSION"/>
+         <C:prop name="UID"/>
+         <C:prop name="NICKNAME"/>
+         <C:prop name="EMAIL"/>
+         <C:prop name="FN"/>
+       </C:address-data>
+     </D:prop>
+     <C:filter test="anyof">
+       <C:prop-filter name="FN">
+         <C:text-match collation="i;unicode-casemap"
+                       match-type="contains"
+         >daboo</C:text-match>
+       </C:prop-filter>
+       <C:prop-filter name="EMAIL">
+         <C:text-match collation="i;unicode-casemap"
+                       match-type="contains"
+         >daboo</C:text-match>
+       </C:prop-filter>
+     </C:filter>
+   </C:addressbook-query>
+
+   >> Response <<
+
+   HTTP/1.1 207 Multi-Status
+   Date: Sat, 11 Nov 2006 09:32:12 GMT
+   Content-Type: text/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:carddav">
+     <D:response>
+       <D:href>/home/bernard/addressbook/v102.vcf</D:href>
+       <D:propstat>
+         <D:prop>
+           <D:getetag>"23ba4d-ff11fb"</D:getetag>
+           <C:address-data>BEGIN:VCARD
+   VERSION:3.0
+   NICKNAME:me
+   UID:34222-232@example.com
+   FN:David Boo
+   EMAIL:daboo@example.com
+
+
+
+Daboo                        Standards Track                   [Page 28]
+

+RFC 6352                         CardDAV                     August 2011
+
+
+   END:VCARD
+   </C:address-data>
+         </D:prop>
+         <D:status>HTTP/1.1 200 OK</D:status>
+       </D:propstat>
+     </D:response>
+     <D:response>
+       <D:href>/home/bernard/addressbook/v104.vcf</D:href>
+       <D:propstat>
+         <D:prop>
+           <D:getetag>"23ba4d-ff11fc"</D:getetag>
+           <C:address-data>BEGIN:VCARD
+   VERSION:3.0
+   NICKNAME:oliver
+   UID:34222-23222@example.com
+   FN:Oliver Daboo
+   EMAIL:oliver@example.com
+   END:VCARD
+   </C:address-data>
+         </D:prop>
+         <D:status>HTTP/1.1 200 OK</D:status>
+       </D:propstat>
+     </D:response>
+   </D:multistatus>
+
+

8.6.5. Example: Truncated Results

+ + In this example, the client requests that the server search for + address object resources that contain a FN property whose value + contains some specific text and return the DAV:getetag property for + two results only. The server response includes a 507 status for the + Request-URI indicating that there were more than two resources that + matched the query, but that the server truncated the result set as + requested by the client. + + >> Request << + + REPORT /home/bernard/addressbook/ HTTP/1.1 + Host: addressbook.example.com + Depth: 1 + Content-Type: text/xml; charset="utf-8" + Content-Length: xxxx + + <?xml version="1.0" encoding="utf-8" ?> + <C:addressbook-query xmlns:D="DAV:" + xmlns:C="urn:ietf:params:xml:ns:carddav"> + + + + + +Daboo Standards Track [Page 29] +

+RFC 6352                         CardDAV                     August 2011
+
+
+     <D:prop>
+       <D:getetag/>
+     </D:prop>
+     <C:filter test="anyof">
+       <C:prop-filter name="FN">
+         <C:text-match collation="i;unicode-casemap"
+                       match-type="contains"
+         >daboo</C:text-match>
+       </C:prop-filter>
+     </C:filter>
+     <C:limit>
+       <C:nresults>2</C:nresults>
+     </C:limit>
+   </C:addressbook-query>
+
+   >> Response <<
+
+   HTTP/1.1 207 Multi-Status
+   Date: Sat, 11 Nov 2006 09:32:12 GMT
+   Content-Type: text/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:carddav">
+     <D:response>
+       <D:href>/home/bernard/addressbook/</D:href>
+       <D:status>HTTP/1.1 507 Insufficient Storage</D:status>
+       <D:error><D:number-of-matches-within-limits/></D:error>
+       <D:responsedescription xml:lang="en">
+         Only two matching records were returned
+       </D:responsedescription>
+     </D:response>
+     <D:response>
+       <D:href>/home/bernard/addressbook/v102.vcf</D:href>
+       <D:propstat>
+         <D:prop>
+           <D:getetag>"23ba4d-ff11fb"</D:getetag>
+         </D:prop>
+         <D:status>HTTP/1.1 200 OK</D:status>
+       </D:propstat>
+     </D:response>
+     <D:response>
+       <D:href>/home/bernard/addressbook/v104.vcf</D:href>
+       <D:propstat>
+         <D:prop>
+           <D:getetag>"23ba4d-ff11fc"</D:getetag>
+         </D:prop>
+
+
+
+Daboo                        Standards Track                   [Page 30]
+

+RFC 6352                         CardDAV                     August 2011
+
+
+         <D:status>HTTP/1.1 200 OK</D:status>
+       </D:propstat>
+     </D:response>
+   </D:multistatus>
+
+

8.7. CARDDAV:addressbook-multiget Report

+ + The CARDDAV:addressbook-multiget REPORT is used to retrieve specific + address object resources from within a collection, if the Request-URI + is a collection, or to retrieve a specific address object resource, + if the Request-URI is an address object resource. This report is + similar to the CARDDAV:addressbook-query REPORT (see Section 8.6), + except that it takes a list of DAV:href elements instead of a + CARDDAV:filter element to determine which address object resources to + return. + + Support for the addressbook-multiget REPORT is REQUIRED. + + Marshalling: + + The request body MUST be a CARDDAV:addressbook-multiget XML + element (see Section 10.7), which MUST contain at least one + DAV:href XML element and one optional CARDDAV:address-data element + as defined in Section 10.4. If DAV:href elements are present, the + scope of the request is the set of resources identified by these + elements, which all need to be members (not necessarily internal + members) of the resource identified by the Request-URI. + Otherwise, the scope is the resource identified by the Request-URI + itself. + + The request MUST include a Depth: 0 header; however, the actual + scope of the REPORT is determined as described above. + + The response body for a successful request MUST be a + DAV:multistatus XML element. + + The response body for a successful CARDDAV:addressbook-multiget + REPORT request MUST contain a DAV:response element for each + address object resource referenced by the provided set of DAV:href + elements. Address data is returned in the CARDDAV:address-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. + + + + + +Daboo Standards Track [Page 31] +

+RFC 6352                         CardDAV                     August 2011
+
+
+   Preconditions:
+
+      (CARDDAV:supported-address-data): The attributes "content-type"
+      and "version" of the CARDDAV:address-data XML elements (see
+      Section 10.4) specify a media type supported by the server for
+      address object resources.
+
+   Postconditions:
+
+      None.
+
+

8.7.1. Example: CARDDAV:addressbook-multiget Report

+ + In this example, the client requests the server to return specific + vCard properties of the address 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://addressbook.example.com/home/bernard/addressbook/vcf1.vcf does + not exist, resulting in an error status response. + + >> Request << + + REPORT /home/bernard/addressbook/ HTTP/1.1 + Host: addressbook.example.com + Depth: 1 + Content-Type: text/xml; charset="utf-8" + Content-Length: xxxx + + <?xml version="1.0" encoding="utf-8" ?> + <C:addressbook-multiget xmlns:D="DAV:" + xmlns:C="urn:ietf:params:xml:ns:carddav"> + <D:prop> + <D:getetag/> + <C:address-data> + <C:prop name="VERSION"/> + <C:prop name="UID"/> + <C:prop name="NICKNAME"/> + <C:prop name="EMAIL"/> + <C:prop name="FN"/> + </C:address-data> + </D:prop> + <D:href>/home/bernard/addressbook/vcf102.vcf</D:href> + <D:href>/home/bernard/addressbook/vcf1.vcf</D:href> + </C:addressbook-multiget> + + + + + + +Daboo Standards Track [Page 32] +

+RFC 6352                         CardDAV                     August 2011
+
+
+   >> Response <<
+
+   HTTP/1.1 207 Multi-Status
+   Date: Sat, 11 Nov 2006 09:32:12 GMT
+   Content-Type: text/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:carddav">
+     <D:response>
+       <D:href>/home/bernard/addressbook/vcf102.vcf</D:href>
+       <D:propstat>
+         <D:prop>
+           <D:getetag>"23ba4d-ff11fb"</D:getetag>
+           <C:address-data>BEGIN:VCARD
+   VERSION:3.0
+   NICKNAME:me
+   UID:34222-232@example.com
+   FN:Cyrus Daboo
+   EMAIL:daboo@example.com
+   END:VCARD
+   </C:address-data>
+         </D:prop>
+         <D:status>HTTP/1.1 200 OK</D:status>
+       </D:propstat>
+     </D:response>
+     <D:response>
+       <D:href>/home/bernard/addressbook/vcf1.vcf</D:href>
+       <D:status>HTTP/1.1 404 Resource not found</D:status>
+     </D:response>
+   </D:multistatus>
+
+

8.7.2. Example: CARDDAV:addressbook-multiget Report

+ + In this example, the client requests the server to return vCard v4.0 + data of the address 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://addressbook.example.com/home/bernard/addressbook/vcf3.vcf + exists but in a media type format that the server is unable to + convert, resulting in an error status response. + + + + + + + + + +Daboo Standards Track [Page 33] +

+RFC 6352                         CardDAV                     August 2011
+
+
+   >> Request <<
+
+   REPORT /home/bernard/addressbook/ HTTP/1.1
+   Host: addressbook.example.com
+   Depth: 1
+   Content-Type: text/xml; charset="utf-8"
+   Content-Length: xxxx
+
+   <?xml version="1.0" encoding="utf-8" ?>
+   <C:addressbook-multiget xmlns:D="DAV:"
+                        xmlns:C="urn:ietf:params:xml:ns:carddav">
+     <D:prop>
+       <D:getetag/>
+       <C:address-data content-type='text/vcard' version='4.0'/>
+     </D:prop>
+     <D:href>/home/bernard/addressbook/vcf3.vcf</D:href>
+   </C:addressbook-multiget>
+
+   >> Response <<
+
+   HTTP/1.1 207 Multi-Status
+   Date: Sat, 11 Nov 2006 09:32:12 GMT
+   Content-Type: text/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:carddav">
+     <D:response>
+       <D:href>/home/bernard/addressbook/vcf3.vcf</D:href>
+       <D:status>HTTP/1.1 415 Unsupported Media Type</D:status>
+       <D:error><C:supported-address-data-conversion/></D:error>
+       <D:responsedescription>Unable to convert from vCard v3.0
+       to vCard v4.0</D:responsedescription>
+     </D:response>
+   </D:multistatus>
+
+

9. Client Guidelines

+ +

9.1. Restrict the Properties Returned

+ + Clients may not need all the properties in a vCard object when + presenting information to the user, or looking up specific items for + their email address, for example. Since some property data can be + large (e.g., PHOTO or SOUND with in-line content) clients can choose + to ignore those by only requesting the specific items it knows it + will use, through use of the CARDDAV:address-data XML element in the + relevant reports. + + + +Daboo Standards Track [Page 34] +

+RFC 6352                         CardDAV                     August 2011
+
+
+   However, if a client needs to make a change to a vCard, it can only
+   change the entire vCard data via a PUT request.  There is no way to
+   incrementally make a change to a set of properties within a vCard
+   object resource.  As a result, the client will have to cache the
+   entire set of properties on a resource that is being changed.
+
+

9.2. Avoiding Lost Updates

+ + When resources are accessed by multiple clients, the possibility of + clients overwriting each other's changes exists. To alleviate this, + clients SHOULD use the If-Match request header on PUT requests with + the ETag of the previously retrieved resource data to check whether + the resource was modified since it was previously retrieved. If a + precondition failure occurs, clients need to reload the resource and + go through their own merge or conflict resolution process before + writing back the data (again using the If-Match check). + +

9.3. Client Configuration

+ + When CardDAV clients need to be configured, the key piece of + information that they require is the principal-URL of the user whose + address book information is desired. Servers SHOULD support the + DAV:current-user-principal-URL property as defined in [RFC5397] to + give clients a fast way to locate user principals. + + Given support for SRV records (Section 11) and DAV:current-user- + principal-URL [RFC5397], users only need enter a user identifier, + host name, and password to configure their client. The client would + take the host name and do an SRV lookup to locate the CardDAV server, + then execute an authenticated PROPFIND on the root/resource looking + for the DAV:current-user-principal-URL property. The value returned + gives the client direct access to the user's principal-URL and from + there all the related CardDAV properties needed to locate address + books. + +

9.4. Finding Other Users' Address Books

+ + For use cases of address book sharing, one might wish to find the + address book belonging to another user. To find other users' address + books on the same server, the DAV:principal-property-search REPORT + [RFC3744] can be used to search principals for matching properties + and return specified properties for the matching principal resources. + To search for an address book owned by a user named "Laurie", the + REPORT request body would look like this: + + + + + + + +Daboo Standards Track [Page 35] +

+RFC 6352                         CardDAV                     August 2011
+
+
+   <?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:addressbook-home-set
+          xmlns:C="urn:ietf:params:xml:ns:carddav"/>
+       <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" all as matching DAV:displayname
+   values, and the address books for each of these.
+
+

10. XML Element Definitions

+ +

10.1. CARDDAV:addressbook XML Element

+ + Name: addressbook + + Namespace: urn:ietf:params:xml:ns:carddav + + Purpose: Specifies the resource type of an address book collection. + + Description: See Section 5.2. + + Definition: + + <!ELEMENT addressbook EMPTY> + +

10.2. CARDDAV:supported-collation XML Element

+ + Name: supported-collation + + Namespace: urn:ietf:params:xml:ns:carddav + + Purpose: Identifies a single collation via its collation identifier + as defined by [RFC4790]. + + Description: The CARDDAV:supported-collation contains the text of a + collation identifier as described in Section 8.3.1. + + + +Daboo Standards Track [Page 36] +

+RFC 6352                         CardDAV                     August 2011
+
+
+   Definition:
+
+       <!ELEMENT supported-collation (#PCDATA)>
+       <!-- PCDATA value: collation identifier -->
+
+

10.3. CARDDAV:addressbook-query XML Element

+ + Name: addressbook-query + + Namespace: urn:ietf:params:xml:ns:carddav + + Purpose: Defines a report for querying address book data + + Description: See Section 8.6. + + Definition: + + <!ELEMENT addressbook-query ((DAV:allprop | + DAV:propname | + DAV:prop)?, filter, limit?)> + +

10.4. CARDDAV:address-data XML Element

+ + Name: address-data + + Namespace: urn:ietf:params:xml:ns:carddav + + Purpose: Specifies one of the following: + + 1. The parts of an address object resource that should be + returned by a given address book REPORT request, and the media + type and version for the returned data; or + + 2. The content of an address object resource in a response to an + address book REPORT request. + + Description: When used in an address book REPORT request, the + CARDDAV:address-data XML element specifies which parts of address + object resources need to be returned in the response. If the + CARDDAV:address-data XML element doesn't contain any CARDDAV:prop + elements, address object resources will be returned in their + entirety. Additionally, a media type and version can be specified + to request that the server return the data in that format if + possible. + + Finally, when used in an address book REPORT response, the + CARDDAV:address-data XML element specifies the content of an + address object resource. Given that XML parsers normalize the + + + +Daboo Standards Track [Page 37] +

+RFC 6352                         CardDAV                     August 2011
+
+
+      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 address object
+      resources specified in the CARDDAV:address-data XML element.
+      Furthermore, address object resources specified in the
+      CARDDAV:address-data XML element MAY be invalid per their media
+      type specification if the CARDDAV:address-data XML element part of
+      the address book REPORT request did not specify required vCard
+      properties (e.g., UID, etc.) or specified a CARDDAV:prop XML
+      element with the "novalue" attribute set to "yes".
+
+   Note:  The CARDDAV:address-data XML element is specified in requests
+      and responses inside the DAV:prop XML element as if it were a
+      WebDAV property.  However, the CARDDAV:address-data XML element is
+      not a WebDAV property and as such it is not returned in PROPFIND
+      responses nor used in PROPPATCH requests.
+
+   Note:  The address data embedded within the CARDDAV:address-data 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 latter case, the
+      vCard data cannot contain the character sequence "]]>", which is
+      the end delimiter for the CDATA section.
+
+   Definition:
+
+       <!ELEMENT address-data (allprop | prop*)>
+
+       when nested in the DAV:prop XML element in an address book
+       REPORT request to specify which parts of address object
+       resources should be returned in the response;
+
+       <!ELEMENT address-data (#PCDATA)>
+       <!-- PCDATA value: address data -->
+
+       when nested in the DAV:prop XML element in an address book
+       REPORT response to specify the content of a returned
+       address object resource.
+
+       <!ATTLIST address-data content-type CDATA "text/vcard"
+                             version CDATA "3.0">
+       <!-- content-type value: a MIME media type -->
+       <!-- version value: a version string -->
+
+       attributes can be used on each variant of the
+       CALDAV:address-data XML element.
+
+
+
+
+
+Daboo                        Standards Track                   [Page 38]
+

+RFC 6352                         CardDAV                     August 2011
+
+
+

10.4.1. CARDDAV:allprop XML Element

+ + Name: allprop + + Namespace: urn:ietf:params:xml:ns:carddav + + Purpose: Specifies that all vCard properties shall be returned. + + Description: This element can be used when the client wants all + vCard properties of components returned by a report. + + Definition: + + <!ELEMENT allprop EMPTY> + + Note: The CARDDAV:allprop element defined here has the same name as + the DAV:allprop element defined in WebDAV. However, the + CARDDAV:allprop element defined here uses the + "urn:ietf:params:xml:ns:carddav" namespace, as opposed to the "DAV:" + namespace used for the DAV:allprop element defined in WebDAV. + +

10.4.2. CARDDAV:prop XML Element

+ + Name: prop + + Namespace: urn:ietf:params:xml:ns:carddav + + Purpose: Defines which vCard properties to return in the response. + + Description: The "name" attribute specifies the name of the vCard + property to return (e.g., "NICKNAME"). 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 vCard + property name and any vCard parameters and a trailing ":" without + the subsequent value data. + + vCard allows a "group" prefix to appear before a property name in + the vCard data. When the "name" attribute does not specify a + group prefix, it MUST match properties in the vCard data without a + group prefix or with any group prefix. When the "name" attribute + includes a group prefix, it MUST match properties that have + exactly the same group prefix and name. For example, a "name" set + to "TEL" will match "TEL", "X-ABC.TEL", and "X-ABC-1.TEL" vCard + properties. A "name" set to "X-ABC.TEL" will match an "X-ABC.TEL" + vCard property only; it will not match "TEL" or "X-ABC-1.TEL". + + + + + +Daboo Standards Track [Page 39] +

+RFC 6352                         CardDAV                     August 2011
+
+
+   Definition:
+
+       <!ELEMENT prop EMPTY>
+
+       <!ATTLIST prop name CDATA #REQUIRED
+                  novalue (yes | no) "no">
+       <!-- name value: a vCard property name -->
+       <!-- novalue value: "yes" or "no" -->
+
+   Note: The CARDDAV:prop element defined here has the same name as the
+   DAV:prop element defined in WebDAV.  However, the CARDDAV:prop
+   element defined here uses the "urn:ietf:params:xml:ns:carddav"
+   namespace, as opposed to the "DAV:" namespace used for the DAV:prop
+   element defined in WebDAV.
+
+

10.5. CARDDAV:filter XML Element

+ + Name: filter + + Namespace: urn:ietf:params:xml:ns:carddav + + Purpose: Determines which matching objects are returned. + + Description: The "filter" element specifies the search filter used + to match address objects that should be returned by a report. The + "test" attribute specifies whether any (logical OR) or all + (logical AND) of the prop-filter tests need to match in order for + the overall filter to match. + + Definition: + + <!ELEMENT filter (prop-filter*)> + + <!ATTLIST filter test (anyof | allof) "anyof"> + <!-- test value: + anyof logical OR for prop-filter matches + allof logical AND for prop-filter matches --> + +

10.5.1. CARDDAV:prop-filter XML Element

+ + Name: prop-filter + + Namespace: urn:ietf:params:xml:ns:carddav + + Purpose: Limits the search to specific vCard properties. + + + + + + +Daboo Standards Track [Page 40] +

+RFC 6352                         CardDAV                     August 2011
+
+
+   Description:  The CARDDAV:prop-filter XML element specifies search
+      criteria on a specific vCard property (e.g., "NICKNAME").  An
+      address object is said to match a CARDDAV:prop-filter if:
+
+      *  A vCard property of the type specified by the "name" attribute
+         exists, and the CARDDAV:prop-filter is empty, or it matches any
+         specified CARDDAV:text-match or CARDDAV:param-filter
+         conditions.  The "test" attribute specifies whether any
+         (logical OR) or all (logical AND) of the text-filter and param-
+         filter tests need to match in order for the overall filter to
+         match.
+
+      or:
+
+      *  A vCard property of the type specified by the "name" attribute
+         does not exist, and the CARDDAV:is-not-defined element is
+         specified.
+
+      vCard allows a "group" prefix to appear before a property name in
+      the vCard data.  When the "name" attribute does not specify a
+      group prefix, it MUST match properties in the vCard data without a
+      group prefix or with any group prefix.  When the "name" attribute
+      includes a group prefix, it MUST match properties that have
+      exactly the same group prefix and name.  For example, a "name" set
+      to "TEL" will match "TEL", "X-ABC.TEL", "X-ABC-1.TEL" vCard
+      properties.  A "name" set to "X-ABC.TEL" will match an "X-ABC.TEL"
+      vCard property only, it will not match "TEL" or "X-ABC-1.TEL".
+
+   Definition:
+
+       <!ELEMENT prop-filter (is-not-defined |
+                              (text-match*, param-filter*))>
+
+       <!ATTLIST prop-filter name CDATA #REQUIRED
+                             test (anyof | allof) "anyof">
+       <!-- name value: a vCard property name (e.g., "NICKNAME")
+         test value:
+             anyof logical OR for text-match/param-filter matches
+             allof logical AND for text-match/param-filter matches -->
+
+

10.5.2. CARDDAV:param-filter XML Element

+ + Name: param-filter + + Namespace: urn:ietf:params:xml:ns:carddav + + Purpose: Limits the search to specific parameter values. + + + + +Daboo Standards Track [Page 41] +

+RFC 6352                         CardDAV                     August 2011
+
+
+   Description:  The CARDDAV:param-filter XML element specifies search
+      criteria on a specific vCard property parameter (e.g., TYPE) in
+      the scope of a given CARDDAV:prop-filter.  A vCard property is
+      said to match a CARDDAV:param-filter if:
+
+      *  A parameter of the type specified by the "name" attribute
+         exists, and the CARDDAV:param-filter is empty, or it matches
+         the CARDDAV:text-match conditions if specified.
+
+      or:
+
+      *  A parameter of the type specified by the "name" attribute does
+         not exist, and the CARDDAV:is-not-defined element is specified.
+
+   Definition:
+
+       <!ELEMENT param-filter (is-not-defined | text-match)?>
+
+       <!ATTLIST param-filter name CDATA #REQUIRED>
+       <!-- name value: a property parameter name (e.g., "TYPE") -->
+
+

10.5.3. CARDDAV:is-not-defined XML Element

+ + Name: is-not-defined + + Namespace: urn:ietf:params:xml:ns:carddav + + Purpose: Specifies that a match should occur if the enclosing vCard + property or parameter does not exist. + + Description: The CARDDAV:is-not-defined XML element specifies that a + match occurs if the enclosing vCard property or parameter value + specified in an address book REPORT request does not exist in the + address data being tested. + + Definition: + + <!ELEMENT is-not-defined EMPTY> + +

10.5.4. CARDDAV:text-match XML Element

+ + Name: text-match + + Namespace: urn:ietf:params:xml:ns:carddav + + Purpose: Specifies a substring match on a vCard property or + parameter value. + + + + +Daboo Standards Track [Page 42] +

+RFC 6352                         CardDAV                     August 2011
+
+
+   Description:  The CARDDAV:text-match XML element specifies text used
+      for a substring match against the vCard property or parameter
+      value specified in an address book 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;unicode-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 CATEGORIES property not set to
+      PERSON.
+
+      The "match-type" attribute is used to indicate the type of match
+      operation to use.  Possible choices are:
+
+         "equals" - an exact match to the target string
+
+         "contains" - a substring match, matching anywhere within the
+         target string
+
+         "starts-with" - a substring match, matching only at the start
+         of the target string
+
+         "ends-with" - a substring match, matching only at the end of
+         the target string
+
+   Definition:
+
+       <!ELEMENT text-match (#PCDATA)>
+       <!-- PCDATA value: string -->
+
+       <!ATTLIST text-match
+          collation        CDATA "i;unicode-casemap"
+          negate-condition (yes | no) "no"
+          match-type (equals|contains|starts-with|ends-with) "contains">
+
+

10.6. CARDDAV:limit XML Element

+ + Name: limit + + Namespace: urn:ietf:params:xml:ns:carddav + + Purpose: Specifies different types of limits that can be applied to + the results returned by the server. + + + +Daboo Standards Track [Page 43] +

+RFC 6352                         CardDAV                     August 2011
+
+
+   Description:  The CARDDAV:limit XML element can be used to specify
+      different types of limits that the client can request the server
+      to apply to the results returned by the server.  Currently, only
+      the CARDDAV:nresults limit can be used; other types of limit could
+      be defined in the future.
+
+   Definition:
+
+       <!ELEMENT limit (nresults)>
+
+

10.6.1. CARDDAV:nresults XML Element

+ + Name: nresults + + Namespace: urn:ietf:params:xml:ns:carddav + + Purpose: Specifies a limit on the number of results returned by the + server. + + Description: The CARDDAV:nresults XML element contains a requested + maximum number of DAV:response elements to be returned in the + response body of a query. The server MAY disregard this limit. + The value of this element is an unsigned integer. + + Definition: + + <!ELEMENT nresults (#PCDATA)> + <!-- nresults value: unsigned integer, must be digits --> + +

10.7. CARDDAV:addressbook-multiget XML Element

+ + Name: addressbook-multiget + + Namespace: urn:ietf:params:xml:ns:carddav + + Purpose: CardDAV report used to retrieve specific address objects + via their URIs. + + Description: See Section 8.7. + + Definition: + + <!ELEMENT addressbook-multiget ((DAV:allprop | + DAV:propname | + DAV:prop)?, + DAV:href+)> + + + + + +Daboo Standards Track [Page 44] +

+RFC 6352                         CardDAV                     August 2011
+
+
+

11. Service Discovery via SRV Records

+ + [RFC2782] defines a DNS-based service discovery protocol that has + been widely adopted as a means of locating particular services within + a local area network and beyond, using SRV RRs. + + This specification adds two service types for use with SRV records: + + carddav: Identifies a CardDAV server that uses HTTP without TLS + [RFC2818]. + + carddavs: Identifies a CardDAV server that uses HTTP with TLS + [RFC2818]. + + Example: non-TLS service record + + _carddav._tcp SRV 0 1 80 addressbook.example.com. + + Example: TLS service + + _carddavs._tcp SRV 0 1 443 addressbook.example.com. + +

12. Internationalization Considerations

+ + CardDAV allows internationalized strings to be stored and retrieved + for the description of address book collections (see Section 6.2.1). + + The CARDDAV:addressbook-query REPORT (Section 8.6) includes a text + searching option controlled by the CARDDAV:text-match element and + details of character handling are covered in the description of that + element (see Section 10.5.4). + +

13. 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, + if HTTP Basic authentication [RFC2617] is available, the server MUST + allow TLS to be used at the same time, and it SHOULD prevent use of + Basic authentication when TLS is not in use. Clients SHOULD use TLS + whenever possible. + + With the ACL extension [RFC3744] present, WebDAV allows control over + who can access (read or write) any resource on the WebDAV server. In + addition, WebDAV ACL provides for an "inheritance" mechanism, whereby + resources may inherit access privileges from other resources. Often, + the "other" resource is a parent collection of the resource itself. + Servers are able to support address books that are "private" + + + +Daboo Standards Track [Page 45] +

+RFC 6352                         CardDAV                     August 2011
+
+
+   (accessible only to the "owner"), "shared" (accessible to the owner
+   and other specified authenticated users), and "public" (accessible to
+   any authenticated or unauthenticated users).  When provisioning
+   address books of a particular type, servers MUST ensure that the
+   correct privileges are applied on creation.  In particular, private
+   and shared address books MUST NOT be accessible by unauthenticated
+   users (to prevent data from being automatically searched or indexed
+   by web "crawlers").
+
+   Clients SHOULD warn users in an appropriate fashion when they copy or
+   move address data from a private address book to a shared address
+   book or public address book.  Clients SHOULD provide a clear
+   indication as to which address books are private, shared, or public.
+   Clients SHOULD provide an appropriate warning when changing access
+   privileges for a private or shared address book with data so as to
+   allow unauthenticated users access.
+
+   This specification currently relies on standard HTTP authentication
+   mechanisms for identifying users.  These comprise Basic and Digest
+   authentication [RFC2617] as well as TLS [RFC2818] using client-side
+   certificates.
+
+

14. IANA Consideration

+ + This document uses a URN to describe a new XML namespace conforming + to the registry mechanism described in [RFC3688]. + +

14.1. Namespace Registration

+ + Registration request for the carddav namespace: + + URI: urn:ietf:params:xml:ns:carddav + + Registrant Contact: The IESG <iesg@ietf.org> + + XML: None - not applicable for namespace registrations. + +

15. Acknowledgments

+ + Thanks go to Lisa Dusseault and Bernard Desruisseaux for their work + on CalDAV, on which CardDAV is heavily based. The following + individuals contributed their ideas and support for writing this + specification: Mike Douglass, Stefan Eissing, Helge Hess, Arnaud + Quillaud, Julian Reschke, Elias Sinderson, Greg Stein, Wilfredo + Sanchez, and Simon Vaillancourt. + + + + + + +Daboo Standards Track [Page 46] +

+RFC 6352                         CardDAV                     August 2011
+
+
+

16. References

+ +

16.1. Normative References

+ + [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate + Requirement Levels", BCP 14, RFC 2119, March 1997. + + [RFC2426] Dawson, F. and T. Howes, "vCard MIME Directory Profile", + RFC 2426, September 1998. + + [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. + + [RFC2617] Franks, J., Hallam-Baker, P., Hostetler, J., Lawrence, S., + Leach, P., Luotonen, A., and L. Stewart, "HTTP + Authentication: Basic and Digest Access Authentication", + RFC 2617, June 1999. + + [RFC2782] Gulbrandsen, A., Vixie, P., and L. Esibov, "A DNS RR for + specifying the location of services (DNS SRV)", RFC 2782, + February 2000. + + [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. + + [RFC3744] Clemm, G., Reschke, J., Sedlar, E., and J. Whitehead, "Web + Distributed Authoring and Versioning (WebDAV) + Access Control Protocol", RFC 3744, May 2004. + + [RFC4790] Newman, C., Duerst, M., and A. Gulbrandsen, "Internet + Application Protocol Collation Registry", RFC 4790, + March 2007. + + [RFC4918] Dusseault, L., "HTTP Extensions for Web Distributed + Authoring and Versioning (WebDAV)", RFC 4918, June 2007. + + [RFC5051] Crispin, M., "i;unicode-casemap - Simple Unicode Collation + Algorithm", RFC 5051, October 2007. + + + + + +Daboo Standards Track [Page 47] +

+RFC 6352                         CardDAV                     August 2011
+
+
+   [RFC5246]  Dierks, T. and E. Rescorla, "The Transport Layer Security
+              (TLS) Protocol Version 1.2", RFC 5246, August 2008.
+
+   [RFC5280]  Cooper, D., Santesson, S., Farrell, S., Boeyen, S.,
+              Housley, R., and W. Polk, "Internet X.509 Public Key
+              Infrastructure Certificate and Certificate Revocation List
+              (CRL) Profile", RFC 5280, May 2008.
+
+   [RFC5397]  Sanchez, W. and C. Daboo, "WebDAV Current Principal
+              Extension", RFC 5397, December 2008.
+
+   [RFC5689]  Daboo, C., "Extended MKCOL for Web Distributed Authoring
+              and Versioning (WebDAV)", RFC 5689, September 2009.
+
+   [RFC6350]  Perreault, S., "vCard Format Specification", RFC 6350,
+              August 2011.
+
+   [W3C.REC-xml-20081126]
+              Bray, T., Paoli, J., Sperberg-McQueen, C., Maler, E., and
+              F. Yergeau, "Extensible Markup Language (XML) 1.0 (Fifth
+              Edition)", World Wide Web Consortium Recommendation REC-
+              xml-20081126, November 2008,
+              <http://www.w3.org/TR/2008/REC-xml-20081126>.
+
+

16.2. Informative References

+ + [IMSP] Myers, J., "IMSP - Internet Message Support Protocol", + Work in Progress, June 1995. + + [RFC2244] Newman, C. and J. Myers, "ACAP -- Application + Configuration Access Protocol", RFC 2244, November 1997. + + [RFC4510] Zeilenga, K., "Lightweight Directory Access Protocol + (LDAP): Technical Specification Road Map", RFC 4510, + June 2006. + +Author's Address + + Cyrus Daboo + Apple, Inc. + 1 Infinite Loop + Cupertino, CA 95014 + USA + + EMail: cyrus@daboo.name + URI: http://www.apple.com/ + + + + + +Daboo Standards Track [Page 48] +
+

Html markup produced by rfcmarkup 1.96, available from http://tools.ietf.org/tools/rfcmarkup/ \ No newline at end of file