- From: Julian Reschke <julian.reschke@gmx.de>
- Date: Fri, 13 Mar 2009 17:56:14 +0100
- To: WebDAV <w3c-dist-auth@w3.org>, vcarddav@ietf.org
Hi, this is somehow related to a discussion we had in July 2007 (<http://lists.osafoundation.org/pipermail/ietf-carddav/2007-July/000018.html>): > Property model > > The specs avoid exposing the content of their data objects as WebDAV > properties. This leads to lots of workarounds, such as introducing > "pseudo-properties" containing the actual content > (CARDDAV:addressbook-data), and abuse of DAV:prop for something that is > not a WebDAV property. Don't do this, it requires generic WebDAV servers > to use lots of special cases. (WebDAV SEARCH started with pseudo > properties but got successfully rid of them, so this can be done). As far as I recall, the feedback I got was that making them full-blown WebDAV properties would be both expensive, and lose flexibility. I am still not sure that I buy that. But, accepting this for now, then CardDAV should really stop pretending that these pseudo properties are WebDAV properties in reports - it is really confusing, and makes implementing a generic server hard if something appears as a property only in specific contexts. Furthermore, the current specification makes it harder to re-use generic code, as it overloads not only the semantics, but also the syntax of DAV:prop. Consider the use of DAV:prop in: <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> -- <http://tools.ietf.org/html/draft-ietf-vcarddav-carddav-06#section-8.6.3> Here, DAV:prop contains both a true WebDAV property, and a pseudo-property: <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> That pseudo property though needs special treatment, it's *not* just an identifier, but an identifier augmented with parameters. There's really no point in putting it into a DAV:prop, as generic WebDAV XML handling code is not capable to use it. So, IMHO, the right thing here is to make C:address-data a top-level element in the request, as in: <C:addressbook-query xmlns:D="DAV:" xmlns:C="urn:ietf:params:xml:ns:carddav"> <D:prop> <D:getetag/> </D:prop> <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> <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> This also means that the response format needs to be extended; but again, this is a good thing - generic code handling multistatus/propstat will be confused anyway, so it's *good* not to overload DAV:propstat with things that do not belong there. Note that during the development of WebDAV SEARCH (RFC 5323), pseudo-properties were used both for request (DAV:iscollection) and responses (DAV:score), but fortunately we got rid of these problems (see, for instance, <http://greenbytes.de/tech/webdav/rfc5323.html#rfc.section.5.16.1>). Best regards, Julian
Received on Friday, 13 March 2009 16:56:58 UTC