Title: WebDAV Collections Protocol
1WebDAV Collections Protocol
2Referential Member
3Strong Reference
4Weak Reference
5Creating Referential Members
- M-PUT /whitehead/dav/ HTTP/1.1
- Host www.ics.uci.edu
- Man "DAVColl-headers"
- Referential-Member spec08.ref
- Ref-Target http//www.ics.uci.edu/i-d/draft-web
dav-protocol-08.txt - Ref-Integrity T
- Position After requirements.html
- Content-Length 0
6Mandatory Extensions in HTTP Rationale
- HTTP servers ignore unrecognized headers
- We want requests to fail if the server doesnt
recognize DAV headers - PUT, MOVE, and COPY are affected
- 3 new methods vs. Mandatory Extensions
7Mandatory Extensions in HTTP Description
- M- method prefix causes old servers to fail the
request - Uniquely identify extension headers
- Label the extension headers as mandatory or
optional - Optionally assign namespace label to extension
headers - Use extension headers as usual
8Creating Referential Members (revised)
- ADDREF /whitehead/dav/ HTTP/1.1
- Host www.ics.uci.edu
- Referential-Member spec08.ref
- Ref-Target http//www.ics.uci.edu/i-d/draft-web
dav-protocol-08.txt - Ref-Integrity T
- Position After requirements.html
- Content-Length 0
9Deleting Referential Members
- Use the HTTP DELETE method
- No effect on target except for updates to its
DAVrefsource property when a strong reference is
deleted
10Listing Collection Members
- Use the DAV PROPFIND method
- Listing will include both internal and
referential members - If Depth infinity, the server SHOULD NOT (MUST
NOT?) follow references into any collections to
which they may refer
11Other Operations on Referential Members
- LOCK, PROPPATCH, MOVE, COPY affect the
referential member, not its target resource - Use M-MOVE and M-COPY to create a strong
reference at the destination - GET and PROPFIND retrieve the headers /
properties of the referential member, not of its
target resource
12Other Operations on Referential Members (revised)
- LOCK, PROPPATCH, MOVE, COPY affect the
referential member, not its target resource - Use MOVE and COPY with the Ref-Integrity header
to create a strong reference at the destination - GET and PROPFIND retrieve the headers /
properties of the referential member, not of its
target resource
13Operations on Target Resources
- Operations on targets have no effect on
referential members except as needed to maintain
referential integrity for strong references - MOVE on target causes a strong references
DAVreftarget property to be updated - DELETE on target of a strong reference Server
decides how to enforce referential integrity
14Ordered Collections
15Characteristics of Orderings
- At most 1 ordering per collection
- Client decides whether a collection is ordered
- If a collection is ordered, each collection
member belongs to the ordering exactly once - Only members of the collection can belong to its
ordering - orderingtype SHOULD point to a resource that
describes the semantics of the ordering
16Manipulating Orderings
- Retrieve the current DAVordering property with
PROPFIND - Modify DAVordering with PROPPATCH
- Use the Position header with M-PUT, M-MOVE, or
M-COPY to insert a member into the ordering at
the time it is added to the collection
17Manipulating Orderings (revised)
- Retrieve the current DAVordering property with
PROPFIND - Modify DAVordering with PROPPATCH
- Use the Position header with PUT, MOVE, or COPY
to insert a member into the ordering at the time
it is added to the collection
18PROPPATCH Example
- PROPPATCH /coll-1/ HTTP/1.1
- Host www.foo.com
- Content-Type text/xml
- Content-Length xxxx
- lt?xml version1.0 ?gt
- lt?xmlnamespace nsDAV prefixD ?gt
- ltDpropertyupdategt
- ltDsetgt
- ltDpropgt
- ltDorderinggt
- ltDorderingtypegt
- lthrefgthttp//www.foo.com/semantics/s1.txtlt/h
refgt - lt/Dorderingtypegt
- lthrefgtmaplt/hrefgt
- lthrefgthistorylt/hrefgt
- lthrefgtculturelt/hrefgt
- lt/Dorderinggt
- lt/Dpropgt
19Position Header Example
- PUT /coll1/history HTTP/1.1
- Host www.foo.com
- Content-Type text/plain
- Content-Length xxxx
- Position After map
- ltentity bodygt
20Server Responsibilities
- Remove href from ordering when member is removed
from collection - Add href to ordering when member is added to
collection - At requested position if Position header is used
- At end of ordering otherwise
- Verify values of DAVordering submitted with
PROPPATCH - Respond to PROPFIND with ordered listing if
collection is ordered
21Creating an Ordered Collection (proposal)
- Ordered header for use with MKCOL
- Value is URI of ordering semantics
- Example
- MKCOL /collection1/ HTTP/1.1
- Host www.foo.com
- Ordered http//www.foo.com/semantics/s1.txt
22Implementation Note (proposal)
- Recommend that clients follow Mandatory
Extensions specification when they want method to
fail if server doesnt recognize ordering headers - Ordered header with MKCOL
- Position header with PUT, MOVE, or COPY
- Define URI for extension semantics
- DAVOrderedCollectionHeaders
23Issues
- MOVE or COPY a collection that has referential
members - MOVE or COPY an ordered collection
- Let client choose whether Ref-Integrity, Ordered,
and Position headers are optional or mandatory? - How to enforce referential integrity for requests
to DELETE a target resource - Potential problems for ordering requests without
transactions - PROPPATCH vs. headers for manipulating orderings?
Or allow both?
24Information
- Draft protocol specification is at
- http//www.ics.uci.edu/ejw/authoring/collection/d
raft-ietf-webdav-collection-protocol-00.txt - Author can be reached at
- slein_at_wrc.xerox.com