Next message: Clemm, Geoff: "RE: MKRESOURCE vs. MKACTIVITY and MKWORKSPACE"
Message-ID: <65B141FB11CCD211825700A0C9D609BC027A143E@chef.lex.rational.com>
From: "Clemm, Geoff" <gclemm@Rational.Com>
To: "DeltaV (E-mail)" <ietf-dav-versioning@w3.org>
Date: Sat, 15 Apr 2000 10:59:00 -0400
Subject: Simplifying client access to advanced versioning
One of the current aspects of the protocol that is designed
to provide consistent client access to core and advanced
versioning functionality, is that the same methods and headers
are used when a working resource is identified by a working-resource-id
and when it is identified by a workspace.
I believe that we can achieve an analogous increase in consistency
if we modify the marshalling so that the same methods and headers
are used when a set of revisions are identified by a label,
and when they are identified by a workspace. Note that this is
very similar to the working-resource-id/workspace relationship,
in that core versioning uses a string (a label), while advanced
versioning uses a resource (a workspace).
One way to make this change is to rename our two headers (once again :-)
to be "Request-Target-Selector" (that applies only to the request URL)
and "Target-Selector" (that applies to all the other resources encountered
during a request). Note that this is the same semantics as we have at
the moment, so it is just a rename of the headers, not a semantic change.
But then let's allow a Target-Selector (aka Workspace) header to specify
either a label or a workspace. Now we can use a label for the things
we used to only be able to do with workspaces (e.g. specify that this
label should be used for every resource in a Depth:infinity PROPFIND
request).
Then we can replace the LABEL and SET-DEFAULT-REVISION methods with a
single SET-TARGET method. The SET-TARGET method makes the specified
Target-Selector (i.e. workspace or label) select the revision identified
by the Request-Target-Selector header. If no Target-Selector header is
specified, a core client thinks of this as "setting the default target"
while an advanced client thinks of this as "specifying the target in the
default workspace". In either case, it has the desired effect, i.e. that
is the revision you get if you specify no target selection headers in your
request.
So to set the default revision to be rev-3, you'd say:
SET-TARGET /foo
Request-Target-Selector: rev-3
Then the next time you said:
GET /foo
you'd get rev-3.
Then to make the label "tested" select rev-8, you'd say:
SET-TARGET /foo
Target-Selector: tested
Request-Target-Selector: rev-8
Then the next time you said:
GET /foo
Target-Selector: tested
you'd get rev-8.
Then to make the workspace named http://www.webdav.org/ws/my-ws select
rev-12, you'd say
SET-TARGET /foo
Target-Selector: http://www.webdav.org/ws/my-ws
Request-Target-Selector: rev-12
Then the next time you said:
GET /foo
Target-Selector: /http://www.webdav.org/ws/my-ws
you'd get rev-12.
I think this then not only simplifies the client model, but provides a more
uniform set of concepts grouped around the notion of a "target".
Comments?
Cheers,
Geoff