Re: Target-Selector

From: Geoffrey M. Clemm (geoffrey.clemm@rational.com)
Date: Mon, Dec 27 1999

  • Next message: jamsden@us.ibm.com: "Re: Target-Selector"

    Date: Mon, 27 Dec 1999 16:29:30 -0500
    Message-Id: <9912272129.AA15149@tantalum>
    From: "Geoffrey M. Clemm" <geoffrey.clemm@rational.com>
    To: ietf-dav-versioning@w3.org
    Subject: Re: Target-Selector
    
       From: jamsden@us.ibm.com
    
       ... I agree that efficient data access will demand that the one
       playing the revision-selector role can only practically be a workspace, so
       why not call it that? For the override-selector, I might still stick with
       this name as it more clearly indicates the role the header is playing.
       Using Workspace and Revision-Selector makes it less clear that the
       Revision-Selector is never used by itself. If the Workspace header is not
       specified, the default workspace is used, so the Revision-Selector is
       always used to override a workspace.
    
    Yes, I would recommend against "Revision-Selector" for that same reason.
    I'm pretty neutral between "Override-Selector" and "Alternative-Revision".
    Perhaps we should also consider "Override-Revision-Selector"?
    
       Now we need another pair for those methods that specify a destination. I
       suggest Dest-Workspace, Dest-Override-Selector or some such names.
    
    The methods that take a Destination header (MOVE, COPY, BIND) all modify
    the destination, so they must target a "working resource" (in some
    workspace).  So I don't believe there are sufficiently important use
    cases to warrant having a Dest-Override-Selector" header.
    The "Destination-Workspace" header makes more sense, but I'm tempted
    to say that in the few cases where this is needed, (i.e. when you
    can't just use the Workspace header for both), the client can just
    get the workspace independent URL for the request-URL, and then use
    the appropriate Workspace header for the Destination.
    
    Cheers,
    Geoff
    
    
       "Geoffrey M. Clemm" <geoffrey.clemm@rational.com>@w3.org on 12/27/99
       03:26:45 PM
    
       Efficient data access in the presence of versioning will be all about
       caching (just as is the case for efficient access in the non-versioned
       case).  It is important for the headers to be significant to the
       behavior of proxies and other caching mechanism (otherwise you should
       just place this information in the request body).
    
       Semantically, the versioning "workspace" concept is all about producing
       a "private" or "separate" place to do your work, and is the natural
       object for caching (and scaling ... you scale by locating different
       workspaces on different servers).
    
       Thus the Workspace is a key piece of information to make visible to
       the proxies in the form of a header.  An additional piece of key
       information is whether you are going to "override" the behavior of the
       Workspace with a Revision-Selector.  This forces the request to be
       dispatched back to the server holding the versioned resource, since
       the Revision-Selector overrides the contents selected by the
       workspace.  Having the Revision-Selector override only apply to the
       last segment of the URL is important, since having it apply to
       anything else would involve a complicated dialog between the server
       holding the workspace and the server holding the versioned resources.
    
       So I will continue to vote heavily in favor of two headers:
       a Workspace header and a Alternative-Revision (aka "Revision-Selector")
       header (I'd be happy to rename the second header, but not change its
       semantics :-).
    
       From: Tim_Ellison@oti.com (Tim Ellison OTT)
    
       I'd really like to have both a Workspace: header and a
       Revision-Selector:
       since it seems that a common operation, when dealing with history, is to
       check-out a particular revision into a given workspace.
    
       Presently, we only have a single selector that specifies the workspace
       to
       both select the revision and contain the working resource.  There is,
       for
       example, no means of requesting a check-out of a labeled revision into a
       named workspace -- and I think that will be a common requirement.  The
       solution at the moment is to PROPFIND the stable revision URL using the
       label selector, then checkout with the workspace selector.
    
       I think 'workspace' would be a good candidate for addition to the
       headers.
        Here's my renditioning of a full-on selection:
    
       CHECKOUT /colln1/colln2/foo,html HTTP/1.1
       Target-Selector: label:Release1.0; finally label:bugfix
       Workspace: http://www.wedav.org/myworkspace
    
       which reads: checkout /colln1/colln2/foo.html by selecting the revision
       of
       colln1 and colln2 labeled Release1.0 and the revision of bugfix labeled
       foo.html into the workspace 'myworkspace'.
    
       Tim
    
       >From: jamsden
       >How about sticking with separate headers as they are simpler and easier
       to
       >parse than one. I suggest headers that reflect the roles the values are
       >playing rather than their types. For example, Revision-Selector for
       the,
       >well, revision selector, and Override-Selector for the leaf if the
       revision
       >selector is being overridden. This is the same as Geoff's proposal, but
       it
       >keeps the notion of Workspace out of the Revision-Selector so we could
       >potentially use other things there like a label, configuration,
       revision
       >id, activity, etc.
       >
       >Tim_Ellison@oti.com (Tim Ellison OTT)@w3.org on 12/22/99 02:06:36 PM
       >
       >I stand by my original proposal, although I agree we are only differing
       by
       >syntax.
       >
       >Firstly, I would prefer not to have two headers simply because it
       promotes
       >header bloat (would that be Workspace:, Revision-Selector:,
       >Desination-Workspace: and Destination-Revision-Selector:?).
       >
       >I find the name Target-Selector quite meaningful (as these things go
       :-)
       >and
       >a finally clause more intuative than recognising the overriding nature
       of
       >Revision-Selector/Workspace headers.
       >
       >Secondly, using 'keyword-space-value' is, as you would say, morally
       >equivalent to a URI.  By specifying as URIs you have a natural forward
       >compatibility solution that you cannot otherwise guarantee.
       >
       >... and finally, having to specify "configuration" is redundant since
       the
       >server will have to ensure the following URL really is a configuration
       and
       >not another type.
       >
       >So my objections are more on (relatively trivial) implementation
       grounds
       >than the semantics of our solution.
    
       >From: Geoffrey M. Clemm
       >
       >I'd like to propose a syntactic variant on Tim's proposal:
       >
       >Instead of adding a "finally" clause to the Target-Selector header,
       >let's replace the "Target-Selector" header with a "Workspace" and a
       >"Revision-Selector" selector header.  One advantage is that
       >Workspace and Revision-Selector are more self-explanatory than
       >Target-Selector.
       >
       >A Workspace header specifies either a Workspace URL or nothing,
       >where nothing corresponds to the old "metadata" Target-Selector.
       >A Revision-Selector specifies a label, an id, or a configuration.
       >A Workspace header specifies target selection for the entire request.
       >A Revision-Selector header overrides the Workspace header for the
       >versioned resource identified by the Request-URL.
       >
       >
       >workspace-hdr      = "Workspace" ":" [ URL ]
       >revision-selector-hdr = "Revision-Selector" ":" revision-selector
       >revision-selector     = "id" segment
       >             | "label" segment
       >             | "configuration" URL
       >
       >I'd like to keep the "id", "label" and "configuration" keywords
       >to avoid ambiguity in case we decide to extend those namespaces.
    
       >   From: Tim_Ellison@oti.com (Tim Ellison OTT)
       >
       >   I'd like to propose a change to the Target-Selector as described in
       the
       >   protocol spec.
       >
       >   Presently, the valid values are:
       > workspace "<URI>"
       > id "<revision id>"
       > label "<label>"
       > metadata
       >
       >   The change would accomodate the situation where the client wants to
       >select
       >   collection revisions using a workspace, and the final resource using
       a
       >label
       >
       >   or id.  Without such a change the "id" target selector is of
       little/no
       >use
       >   for selecting resources in collections (the collection will not have
       the
       >   same id as the "leaf" resource).
       >
       >   The change would also allow the client to select a revision based
       >directly
       >   upon an activity and provides extensibility for other selection
       schemes.
       >
       >   target selector = Target-Selector ":" URI [ LWS "; finally" URI ]
       >
       >   The use of URIs gives us extensibility for defining new selection
       >   mechanisms, and the optional "finally" clause allows clients to
       specify
       >a
       >
       >   different selector for the leaf.  (I don't see any benefit for N
       >selection
       >   methods.)
       >
       >   Example URIs would be id:some_id, label:some_label, metadata:, and
       >   http://machine/resource where 'resource' is a workspace or activity
       or
       >   something else (the server gets to figure out which by looking at
       the
       >   resource type).  Specifying a resource that cannot be used for
       selection
       >   results in a bad request.
       >
       >   Example target selectors would be:
       >     Target-Selector: http://foo.com/mywork
       >     Target-Selector: http://foo.com/mywork ; finally id:Rev12FP
       >     Target-Selector: label:bar ; finally http://foo.com/actif1