W3C home > Mailing lists > Public > ietf-dav-versioning@w3.org > October to December 2000

Re: Continuation of comments on versioning draft -09

From: Geoffrey M. Clemm <geoffrey.clemm@rational.com>
Date: Wed, 4 Oct 2000 14:43:32 -0400 (EDT)
Message-Id: <200010041843.OAA08239@tantalum.atria.com>
To: ietf-dav-versioning@w3.org

   From: "Lisa Dusseault" <lisa@xythos.com>

   If you decide to keep LABEL, changed or unchanged, I think it will only be
   useful as an advanced versioning feature, where it might work better in
   conjunction with workspaces...  please, please do not require "core" support
   for LABEL.

In advanced versioning, it is much more likely that a server will
support baselines, and not try to fake it with labels.  So labels
are primarily there for core versioning servers that don't want
to implement baselines.

Note that your server can do what it wants, e.g. expose the DAV:version-name
as a label, and fail all explicit client attempts to use the LABEL method.
The only interoperability cost that you would incur would be that
a client would then not be able to label against your server.  But
it would be able to checkout/checkin and all the other usual core
versioning things.  

   Section 11.2: DAV:successor-report
   Must this be supported by core versioning?  With single-line-of-descent
   versioning, I would think that this report wouldn't be particularly useful,
   and would just be extra work.

You need this report (actually, it is now a property)
to get a URL for the version that is the successor.

   Section 11.3 DAV:checkout-report
   Must this be supported by servers that only allow a single checkout to the
   same URL as the version selector?  With a server that simple, all a user
   needs to do is find out if the resource is currently checked out to get all
   the information they would out of this report.

Just knowing that a version is checked out doesn't tell you anything
about the current state of that checked out resource (i.e. it's
current content or properties or location).  Especially if the checked
out resource is a working resource, it might be hard to find it otherwise.

   Speaking of which, how do I find out who checked out a resource?

By looking at the DAV:creator-displayname of the checked-out resource
(or any other relevant property of the checked-out resource).

   Section 11.4.1
   This example contains a "latest-checkin-report".  The response includes a
   single XML element, DAV:href.  I'd like to see the name of the report
   included in every report, so it would be clearer to the client what it's

In 09, this has been converted to be a live property rather than a
report, so the issue no longer arises.

Also note that it is unclear whether including this in the response
would help a client that didn't know what it just asked for (:-).

   Section 11.5, DAV:version-tree-report
   It does make sense to have this supported by "core".  But, does it have to
   be nested?  The simple and common case will be a single-line-of-descent
   versioning history, which is inefficiently represented as nested.

Inefficiently represented?  Doesn't it just change where the closing
</DAV:version-tree> tags appear?

The purpose of this report is to guarantee that a core client to get
the entire version tree in one request.  It could also do so with a
DAV:property-report, but that report is not required by core.

BTW, I also prefer a list of versions, which is why I prefer the
the DAV:property-report over the DAV:version-tree report, but I
couldn't convince the rest of the design team of this (:-).

   Section 12, Advanced Versioning

   I'd like to admit at this point that I didn't take as close a look at
   Advanced versioning.  I'm primarily concerned with a reasonable set of
   "core" features that can be useful, and _not_ _too_ _confusing_, for normal
   people doing normal document authoring.

In general, we encourage reviewers to skim over the advanced features
to see which ones they are interested in, and then look carefully at
that subset.  In your case, it sounds like that is primarily the
version history resource and the DAV:checkin-fork property.

But reviews on the whole thing are of course much appreciated!

   That said, I do have a few comments.

   Section 12.1, Terms
   In the Baseline diagram -- thanks for which -- do V4 and V6 correspond to
   versions that were created after the creation of the baseline?

Not necessarily.  They are just the versions that happen to be the
targets of the members of the collection that was baselined.

   Please specify whether that is a MUST.

It's not even a SHOULD.  It's just a MAY.

  Can a baseline be created that refers to prior versins?

Yes, just set the targets of the members of your collection
to be the appropriate set of prior versions.

   Section 13.3, Activities, Change Sets and Branches
   The description here of an Activity as a "change set" seems incompatible
   with the description of an activity in "terms" as having only versions on a
   single line of descent.

Why?  A change set would be ambiguous if it had versions on multiple
lines of descent of a single version history.

   Section 13.6, Automatic Version Control
   How does the automatic creation of a versioned resource differ, in the
   response, from the creation of a non-versioned resource?

Not in any way required by the protocol.

   If I, an
   unsuspecting user, try to PUT a resource to a collection and it gets turned
   into a versioned resource immediately, how do I know?

By knowing what repository you are working against ... some versioning
repositories only support versioned resources (i.e. they can't cope
with a mixture of versioned and unversioned resources).

   Otherwise, I might
   turn around and then try to version it!

That's OK.  The VERSION-CONTROL method is specifically defined to be a
no-op in this case, to make life easier for clients.  So in general,
from a protocol perspective, a client doesn't have to care whether a
repository automatically puts things under version control.

   Section 14.2.1, DAV:version-history
   Why isn't this property part of "core", if such complicated things as
   "version-tree-report" are in "core"?

Not being in "core" just means that it is not a required feature
of a versioning server.  In particular, I expect *most* versioning
servers to support the version repository resource.  I personally
have argued that the version history resource should be part of core,
so I'm not the best one to defend it's not being in core (:-).
In particular, I believe Chris Kaler was the primary advocate of
it not being in core.  

   Is the version history totally
   unaccessible from a "core" versioning server?

Being a "core versioning" server just sets the minimum for what you support.
In particular, any server can (and usually will) a significant number of
the advanced versioning properties, methods, and reports.

   I notice there is a DAV:version-history for a version (14.2.1) and for a
   working resource (14.3.1).  Are these the same?  How do they differ?
   Could we have examples of the value of this property, particulary for the
   diagrams that can be seen in section 13.5 or similar?

In 09.1, only a version has a DAV:version-history property.  
If you want to get the version history associated with a
version selector, you would get it from its DAV:target or
DAV:checked-out version (you can get it with one round trip
using the DAV:property-report).

   Section 14.5, Workspace Properties
   How can you definitively tell if a collection is a workspace?

Good point.  I'll add a DAV:workspace property (analogous to
that on a version selector).  Then you can just
check if its DAV:workspace property identifies itself.

   Can I convert a workspace to a collection and vice versa?

No.  You create a workspace with MKWORKSPACE.  You can create
a collection that is a copy of a workspace with the COPY method.

   Section 14.5.1
   Can you convert from a collection to a workspace by adding the
   DAV:current-activity-set property to it?


   Must DAV:current-activity-set be present if a collection is a workspace?

No (in particular, it would never be present if the server
did not support activities).

   Section 16.10, CHECKIN
   This implies that the merge-set and auto-merge-set must be empty before the
   request can succeed.  How do they get empty?

With PROPPATCH (note that they are not protected properties).

   It's not clear if MERGE is
   supposed to empty those props, or if the user is supposed to manually.

The postconditions of MERGE specify the effect of MERGE on the
merge-set and auto-merge-set.  In particular, it adds values to
these properties, but never removes values.

   Section 17.1, MKWORKSPACE
   I'll suggest in a separate email that MKCOL be used for this...

I believe that the most important part of the definition of a method
is its list of postconditions.  The postconditions of MKWORKSPACE
differ significantly from those of MKCOL, and therefore it would be
inappropriate to use the same method for both.  This is of course
a value call, since "differ significantly" is not a well-defined term.

   Section 17.2, MKACTIVITY
   What does an Activity resource look like ?  What properties does it support?

See the section 14.7: "Activity Properties"

   Does it have a resource type?

Yes, required to be DAV:activity.

   Does it have an owner?

Up to the server.

   Can you delete it?

Up to the server, but if so, you'd use the DELETE method to do so.

   Can you GET it?  Can you PUT it?

See sections 16.2 and 16.2.  Yes, you can, but the result is undefined
by this protocol.

   Can you PROPPATCH it? 

Sure (you can PROPPATCH any resource).

   How about MOVE/COPY?

Up to the server.

   Who has permissions on it?

We'll have to wait for the ACL protocol to answer that question.

   Can you LOCK it?


   Can an "Activity" select versions from anywhere? 

Yes (although a versioning server will commonly restrict them
to being from the same repository).

   How does it represent them ?

As members of its DAV:version-set.

   How do you change the set of versions selected by an Activity?

By modifying the DAV:activity-set of a version, which is done
by CHECKIN (or possibly PROPPATCH, if a server allows that).

   Are MKACTIVITY and the corresponding "activity" resource necessary at all?

An activity has several key properties in this protocol, as well as 
all the dead/live properties that a change request
management or activity management system will want to define.

   It seems that an Activity resource only exists so that it can have its URL.
   Well, that seems stupid.

Don't forget the properties (:-).

   The client can easily generate a unique string --
   how about a UUID?  -- and use that for an Activity string.
   A more sensible readable string may even be possible, like
   "lisa@xythos.com,20001002T15:38,myactivity".  Then the user just has to add
   that to the activity-set for everything in that activity.
   This would help reduce the load on the server.

You need a URL to apply a method (such as MERGE) to it,
or to access it's properties (such as its DAV:version-set).

   Otherwise, does the server
   have to check everytime the activity-set is changed, to see if the
   activities are all valid, existing activity resources?

Yes, just like it has to check whenever you update a property of any
other resource (i.e. that there really is such a resource).  (That's
it's job, after all :-).

   Section 17.3, BASELINE-CONTROL
   This is really confused.  I think this needs much more explanation of what
   the model is before it's implementable.  What kinds of resources are you
   supposed to be able to apply this method to?

See the preconditions of the method.  In particular, DAV:must-be-collection.

   What does it do to the resource?

See the postconditions.  It sets the DAV:baseline-selector of the
collection to be a newly created baseline selector.  A baseline selector
selects a baseline from a baseline history, just as a version selector
selects a version from a version history.  This baseline selector
can then be checked out and in to create baselines of the collection.

   Can you have multiple baselines for a single workspace, as the model

A workspace can have several members that are baselined collections.
Each of these baselined collections have an associated baseline selector
whose target is a particular baseline.  So in this sense, yes, a single
workspace can have multiple baselines (one from each of the baselined
collection members).

   The model says you can only convert workspaces to baselines, but this
   section says  you can convert collections to baselines.

That was a bug in the 08 draft ... you used to only be able to baseline
a workspace collection, but in 09, this was extended to allow you to
baseline any collection ... in particular, you can have baselined collections
on a server that does not support workspaces.

   The new "baseline selector" resource that is created as a result of this
   request is underspecified.  What is it? What properties does it have?  Can
   you delete it?  What happens if you GET it?  What happens if you PROPFIND

Good point!  This should have been defined in the advanced versioning
Terminology section.  The answer is that a baseline selector is just a
version selector whose target happens to be a baseline version.  So
its properties and methods are just those of any other version

   Last comment, refering to no particular section:  I think the draft did a
   bit of a poor division between "core" and "advanced" with the
   "version-history" stuff.  Please take another look at what goes where; most
   of the "version history" properties are specified under "advanced".  thanks.

Chris, would you like to respond to this?  You're our designated "version
history should not be in core" advocate (:-).

   I think that's enough for this mail!

Lisa, I would like to especially thank you for taking the trouble to
look over the advanced sections that probably weren't of direct interest
to your clients or servers!  I will try to post a 9.2 draft that 
contains the fixes/changes based on your comments by the end of the

Received on Wednesday, 4 October 2000 15:43:02 UTC

This archive was generated by hypermail 2.3.1 : Tuesday, 6 January 2015 20:55:45 UTC