- From: Geoffrey M. Clemm <geoffrey.clemm@rational.com>
- Date: Mon, 18 Dec 2000 18:25:24 -0500 (EST)
- To: ietf-dav-versioning@w3.org
From: "Lisa Dusseault" <lisa@xythos.com>
I hadn't considered this before, but now that I am, I'm not sure
it's wise to send depth headers on the REPORT method. My three
(somewhat related) worries:
1) Lack of clear model: Although depth makes sense when we're
dealing with well-modelled collections and resources, the model
here is less clear. A REPORT on a "baseline" may well give a bunch
of information on the baseline and the things the baseline is
involved in. Is that depth infinity? Does depth 1 make sense? A
REPORT request could target the whole server (e.g. a report asking
for all orphaned resources). A REPORT request could target
something more ephemeral like "all baselines in this collection"
which is not the same thing as depth infinity on the collection.
It's not like a GET or a MKCOL where there's a clear model of the
resource being targetted.
Yes, we do need to make it clear that Depth on a REPORT just means
running that report on every member of the request collection (just
like PROPFIND). A baseline is not a collection, so a Depth header has
no effect on a request on a baseline (other than possibly changing the
response status to a 207).
So I believe a Depth REPORT has a clear model, but that we need to add
a sentence to the protocol to make it unambiguous.
2) Multiple targets of REPORT: E.g. "merge-preview-report" in deltav draft
10. What would depth header mean on this request? The "target" of the
report is not a single resource or collection, but a combination of some
things being merged into other things. When a combination of things is
specified in the request, the depth header is ambiguous. It could apply to
any, all, or none.
Here as well, the merge-preview-report is just applied separately to
each member of the request collection. This is a well-defined
operation.
On the other hand, your question did highlight the fact that MERGE
handles the Depth header somewhat specially, when logically, it
doesn't have to. It probably is worth cleaning this up, by defining
MERGE with a Depth header to be just a MERGE applied to each member of
the request collection.
3) REPORT on specific kind of resource: it seems that even when a
report targest only one resource, it's often a resource of a very
particular kind. For example, one could have a report which only
made sense for a baseline, or a report which only made sense for a
versioned resource. If depth: 1 or depth: infinity were specified,
what about items within that depth that aren't the right kind of
resource for this kind of report?
That's the same as any other Depth operation. If you do a Depth
PROPFIND, some of the resources may not support the requested
properties. Or if you do a Depth LABEL, some of the resources may not
support the LABEL request. The DAV:propstat tells you what
happened for a particular resource.
Thus, I'd suggest a good justification for requiring "depth" on
REPORT.
Greg provided a good example. You want to issue a property report on
every member of a collection.
If it turns out a depth modifier is required, we should consider
whether:
- it might be better just to define appropriate reports as always
being depth infinity (e.g. "report to me on all orphaned resources"
would always cover an entire server or at least a major section of
it)
I'd like to keep Depth to just mean what it means in 2518, namely,
apply this operation to every member of the collection.
- it might be better to include a "depth" modifier _inside_ the report
request body, so that the requester can be very clear about what resources
the depth modifier applies to.
You could have depth-like modifies in the argument list, but I believe
that doesn't decrease the utility of the Depth header with its standard
semantics.
Cheers,
Geoff
Received on Monday, 18 December 2000 18:26:11 UTC