Simplifying client access to advanced versioning

From: Clemm, Geoff (gclemm@Rational.Com)
Date: Sat, Apr 15 2000

  • 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