Configurations: A Compromise Proposal

Geoffrey M. Clemm (gclemm@tantalum.atria.com)
Fri, 7 May 1999 06:23:12 -0400


Date: Fri, 7 May 1999 06:23:12 -0400
Message-Id: <9905071023.AA08418@tantalum>
From: "Geoffrey M. Clemm" <gclemm@tantalum.atria.com>
To: ietf-dav-versioning@w3.org
Subject: Configurations: A Compromise Proposal


Jim, Sankar, Chris, and others have made a good case for having a simple
"collection" style configuration, where revisions are explicitly
added and removed by a client.  Jeff and I are firm believers in
"a deep revision of a collection" as the approach that is also
simple (in a different way) and scales up to handle large configurations.

I think this is a case where "we're both right".  These are two distinct
approaches with different advantages, and our current attempt to force
them into a single resource-type may be a mistake.  So I'd like
to propose the following:

----------------------------------------------------------------------

A "configuration" is just a "a collection of revisions".  The user
uses standard advanced collection protocol to add and remove revisions
from this collection.  The name of a member of a configuration is the
"versioned-resource-id" of that revision.  This guarantees that at
most one revision of a versioned-resource can be a member of a given
configuration.  (Note: there is no "recursively adding members of a
collection" semantics -- the only constraint on the revision set is
one revision per versioned-resource).

A "baselined-collection" is a special kind of "versioned-collection"
which has a "baselines" property in addition to the "revisions"
property that all versioned-resources have.  The "baselines" are the
"deep revisions" of the collection, while the "revisions" are the
standard "shallow revisions".  A new revision of a baselined-collectin
is created in the standard way with a CHECKIN operation.  A new
baseline of a baselined-collection is created by adding a "Baseline"
(or perhaps "Deep") header to the CHECKIN request.  A
"Baseline CHECKIN" creates a new baseline of a baselined-collection
that contains the revisions of the members of the baselined-collection
that are currently selected by the Workspace.

----------------------------------------------------------------------

A configuration is then the simple "set of revisions" that Jim, Sankar,
Chris, et. al. have advocated.  A baselined-collection provides the
deep-revision semantics Jeff and I have advocated.  These two concepts
fit nicely together, in that adding a baseline of a collection into
a configuration lets you mix and match deep revisions just as you would
mix and match shallow revisions.

This also gets back to a question that was raised in the design meeting
about 7 months ago about whether a revision of a collection was deep
or shallow ... the answer would now be "we support both".

How does this sound?

Cheers,
Geoff