INTERNET-DRAFT Geoffrey Clemm
draft-ietf-clemm-versioning-01 Rational Software
Expires September 22, 1999 March 22, 1999
Versioning Extensions to WebDAV
Status of this Memo.
This document is an Internet-Draft and is in full conformance with all
provisions of Section 10 of RFC2026.
Internet-Drafts are working documents of the Internet Engineering Task
Force (IETF), its areas, and its working groups. Note that other groups
may also distribute working documents as Internet-Drafts.
Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet- Drafts as reference material
or to cite them other than as "work in progress."
The list of current Internet-Drafts can be accessed at
http://www.ietf.org/ietf/1id-abstracts.txt
The list of Internet-Draft Shadow Directories can be accessed at
http://www.ietf.org/shadow.html.
Abstract
This document specifies a set of methods, headers, and resource-types
composing the DAV Versioning extensions to the HTTP/1.1 protocol. DAV
Versioning will minimize the complexity of clients so as to facilitate
widespread deployment of applications capable of utilizing the DAV
Versioning services. DAV Versioning includes:
- Automatic versioning support for versioning-unaware clients,
- Multiple resource revisions with default revision selection,
- Resource branching for basic parallel development, and
- Configuration support for sophisticated parallel development.
Clemm [Page 1]
INTERNET-DRAFT WebDAV Versioning March 22, 1999
Table of Contents
1 DAV VERSIONING PROTOCOL LEVELS.........................4
1.1 Version-Management Protocol.........................5
1.2 Configuration-Management Protocol...................5
2 TERMS..................................................5
2.1 Version-ManagementTerms.............................5
2.1.1 Versionable-Resource..............................5
2.1.2 Revision..........................................5
2.1.3 Versioned-Resource................................5
2.1.4 Versioning-Reference..............................5
2.1.5 Revision-Id.......................................6
2.1.6 Label-Id..........................................6
2.1.7 Working-Resource..................................6
2.1.8 Workspace.........................................6
2.1.9 Default Workspace.................................6
2.1.10Default Revision..................................7
2.2 Configuration-Management Terms......................7
2.2.1 Activity..........................................7
2.2.2 Repository........................................7
2.2.3 Versioned-Collection..............................7
2.2.4 Configuration.....................................7
2.3 Notational Conventions..............................7
3 VERSIONING PROPERTIES..................................8
3.1 Property Attributes.................................8
3.1.1 Writeable/Readonly Properties.....................8
3.1.2 Immutable/Mutable Properties......................8
3.1.3 Property-Collections..............................8
3.2 Versioned-Resource Properties.......................9
3.2.1 DAV:revisions (readonly, collection)..............9
3.2.2 DAV:revision-labels (collection)..................9
3.3 Revision Properties.................................9
3.3.1 DAV:versioned-resource-id (readonly, immutable)...9
3.3.2 DAV:revision-id (readonly, immutable).............9
3.3.3 DAV:predecessor (readonly, immutable).............9
3.3.4 DAV:successors (readonly, mutable, collection)...10
3.3.5 DAV:workspaces (readonly, mutable, collection)...10
3.3.6 DAV:single-checkout..............................10
3.3.7 DAV:auto-version.................................10
3.4 Versioning-reference Properties....................10
3.4.1 DAV:ref-target...................................10
3.4.2 DAV:default-workspace (readonly).................10
3.5 Working-Resource Properties........................10
3.5.1 DAV:workspace (readonly).........................11
3.5.2 DAV:predecessor (readonly).......................11
3.5.3 DAV:checkin-policy...............................11
3.6 Workspace Properties...............................11
3.6.1 DAV:ref-target (readonly)........................11
3.6.2 DAV:current......................................11
3.6.3 DAV:revision-selection-rule......................11
Clemm [Page 2]
INTERNET-DRAFT WebDAV Versioning March 22, 1999
4 VERSIONING METHODS....................................12
4.1 Existing Methods...................................12
4.1.1 GET..............................................12
4.1.2 PUT..............................................12
4.1.3 PROPPATCH........................................12
4.1.4 DELETE...........................................12
4.1.5 COPY.............................................13
4.1.6 MOVE.............................................13
4.1.7 LOCK.............................................13
4.2 New Versioning Methods.............................13
4.2.1 RESOURCEPUT......................................13
4.2.2 CHECKOUT.........................................14
4.2.3 CHECKIN..........................................14
4.2.4 UNCHECKOUT.......................................14
4.3 New Versioning Headers.............................14
4.3.1 Version-Selector.................................14
5 CONFIGURATION-MANAGEMENT PROPERTIES...................15
5.1 Resource Properties................................15
5.1.1 DAV:workspaces (collection)......................15
5.2 Versioned-resource Properties......................15
5.2.1 DAV:versioned-resource-id (readonly).............15
5.2.2 DAV:configuration................................15
5.3 Revision Properties................................15
5.3.1 DAV:merge-predecessors (mutable, collection).....15
5.3.2 DAV:merge-successors (mutable, collection).......16
5.3.3 DAV:child-configurations (immutable, collection).16
5.4 Working-Resource Properties........................16
5.4.1 DAV:merge-predecessors (collection)..............16
5.4.2 DAV:activity (readonly)..........................16
5.5 Workspace Properties...............................16
5.5.1 DAV:current......................................16
5.6 Activity Properties................................17
5.6.1 DAV:revisions (readonly, collection).............17
5.6.2 DAV:child-activities (collection)................17
5.6.3 DAV:workspace....................................17
5.7 Repository Properties..............................17
5.7.1 DAV:versioned-resources (collection).............17
5.7.2 DAV:activities (collection)......................17
6 CONFIGURATION-MANAGEMENT METHODS AND HEADERS..........17
6.1 Existing Methods...................................17
6.1.1 RESOURCEPUT......................................18
6.1.2 PUT..............................................18
6.1.3 COPY.............................................18
6.1.4 MOVE.............................................18
6.1.5 LOCK.............................................18
6.1.6 CHECKOUT.........................................18
6.1.7 CHECKIN..........................................18
6.2 New Methods........................................19
6.2.1 GET-CONFLICTS....................................19
6.2.2 COMPARE..........................................19
7 THE DAV VERSIONING XML ELEMENTS.......................19
Clemm [Page 3]
INTERNET-DRAFT WebDAV Versioning March 22, 1999
7.1 Revision-Selection-Rule Elements...................19
7.1.1 DAV:rsr-configuration-revision...................19
7.1.2 DAV:rsr-activity.................................19
7.1.3 DAV:rsr-label....................................20
7.1.4 DAV:rsr-revision-id..............................20
7.1.5 DAV:rsr-latest...................................20
7.1.6 DAV:rsr-or-else..................................20
7.1.7 DAV:rsr-or-else-conflicts........................20
7.2 Conflict Report Elements...........................21
7.2.1 DAV:conflict.....................................21
7.2.2 DAV:contributor..................................21
7.2.3 DAV:contributor-base.............................21
7.3 Compare Report Elements............................21
7.3.1 DAV:added........................................21
7.3.2 DAV:deleted......................................21
7.3.3 DAV:changed......................................21
8 INTERNATIONALIZATION CONSIDERATIONS...................22
9 SECURITY CONSIDERATIONS...............................22
10 SCALABILITY..........................................22
11 AUTHENTICATION.......................................22
12 IANA CONSIDERATIONS..................................22
13 COPYRIGHT............................................22
14 INTELLECTUAL PROPERTY................................22
15 REFERENCES...........................................22
16 AUTHOR'S ADDRESS.....................................23
17 OPEN ISSUES..........................................23
1 DAV VERSIONING PROTOCOL LEVELS
This document describes two classes of versioning support: version-
management and configuration-management. To maximize
interoperability and use of existing protocol functionality, the
version-management protocol is an extension of the WebDAV advanced-
collection protocol [WEBDAV-ADVCOL], and the configuration-
management protocol is an extension of the version-management
protocol. . These versioning protocols are designed so that WebDAV
locking (class 2) support is optional. The effect of a lock on
versioning methods and content-types will be defined to provide
interoperability of servers that provide locking support.
Clemm [Page 4]
INTERNET-DRAFT WebDAV Versioning March 22, 1999
1.1 Version-Management Protocol
Version-management is a basic versioning protocol designed to
support versioning of largely independent resources. It allows
authors to concurrently create and access distinct revisions of a
resource.
1.2 Configuration-Management Protocol
Configuration management is a more comprehensive versioning
protocol, designed to support consistent versioning of sets of
related resources being modified in parallel by many authors at
different sites. Configuration management includes the capability
of versioning the URL namespace to maintain the validity of both
relative and absolute URL references.
2 TERMS
This draft uses the terms defined in [RFC2068], [RFC2568], and
[WEBDAV-ADVCOL]. In addition, the following terms are introduced:
2.1 Version-ManagementTerms
2.1.1 Versionable-Resource
A versionable-resource is a resource that can be placed under
version control. A null-resource is a versionable-resource.
2.1.2 Revision
A revision is a resource that captures one state of a resource that
is under version control. A revision is not a versionable-
resource.
2.1.3 Versioned-Resource
A versioned-resource is a type of resource that collects and
controls all revisions of a resource that has been placed under
version control. A versioned-resource is not a versionable-
resource.
2.1.4 Versioning-Reference
A versioning-reference is a special type of reference created when
a versionable-resource is placed under version control. The
DAV:ref-target of a versioning-reference is a versioned-resource
but the target of a versioning-reference is a revision or working-
resource of that versioned-resource. A Version-Selection header is
used to specify the target of a versioning-reference. A
versioning-reference is not a versionable-resource.
Clemm [Page 5]
INTERNET-DRAFT WebDAV Versioning March 22, 1999
As with an ordinary reference, a DELETE or MOVE request is applied
to the versioning-reference itself, while all other requests such
as GET, PUT, PROPFIND, PROPPATCH, COPY, and LOCK are passed on to
the target of the versioning-reference. This allows versioning-
unaware clients to interact appropriately with a versioned-
resource. In particular, it ensures that a versioning-unaware
DELETE does not destroy the history captured by a versioned-
resource.
2.1.5 Revision-Id
A revision-id is a string specified by the server to identify a
particular revision of a versioned-resource.
2.1.6 Label-Id
A label-id is a string specified by the client to identify a
particular revision of a versioned-resource.
2.1.7 Working-Resource
A working-resource is a resource that is created by checking out a
versioning-reference. A working-resource can be directly modified
by a PUT request. A working-resource is not a versionable-
resource.
2.1.8 Workspace
A workspace is a type of resource that contains working-resources
and is used to specify revision selection for versioning-
references. The DAV:revision-selection-rule property of a
workspace specifies how revision selection is done in that
workspace. A workspace is not a versionable-resource.
2.1.9 Default Workspace
A server MUST provide a default workspace that is used to perform
version selection for versioning-unaware clients. The revision-
selection-rule of the default workspace MAY be a modifiable by a
client. The DAV:current property of the default workspace must be
set.
A workspace acts like a reference to the root collection of the web
site, except that for URL's that contain this reference, this
workspace becomes the default workspace for versioning-unaware
clients. As with an ordinary reference, a DELETE or MOVE request is
applied to the workspace itself, while all other requests such as
GET, PUT, PROPFIND, PROPPATCH, COPY, and LOCK are passed on to the
root collection of the web site.
Clemm [Page 6]
INTERNET-DRAFT WebDAV Versioning March 22, 1999
2.1.10 Default Revision
The default revision of a versioning-reference is the one selected
by the revision selection rule of the default workspace.
2.2 Configuration-Management Terms
2.2.1 Activity
An activity is a type of resource that is used to identify a set of
revisions (possibly from multiple versioned-resources) that
together define a consistent change. An activity is not a
versionable-resource.
2.2.2 Repository
A repository is a type of versioning-reference that controls a set
of versioned-resources and activities. A repository is not a
versionable-resource.
2.2.3 Versioned-Collection
A versioned-collection is a type of versioned-resource created in a
repository to collect and control revisions of a collection. An
initial versioned-collection is created when a repository is
created, and the DAV:ref-target of the repository is set to this
versioned-collection. Each member of a versioned-collection
revision either is a versioning-reference to a versioned-resource
in that repository, or is a reference. Versioned-collections
provide a mechanism for versioning a sub-tree of the URL namespace,
and thereby maintain the validity of both relative and absolute URL
references in distinct views of that URL namespace.
2.2.4 Configuration
A configuration is a type of versioned-resource in a repository. A
configuration revision is a collection that contains references to
other revisions in that repository, where the name of each
reference is the versioned-resource-id of the versioned-resource
that contains that revision. This ensures that a configuration can
contain at most one revision of a given versioned-resource, and
provides a convenient protocol for determining the revision of a
versioned-resource selected by the configuration.
2.3 Notational Conventions
The augmented BNF used by this document to describe protocol
elements is exactly the same as the one described in Section 2.1 of
[RFC2068]. Because this augmented BNF uses the basic production
Clemm [Page 7]
INTERNET-DRAFT WebDAV Versioning March 22, 1999
rules provided in Section 2.2 of [RFC2068], those rules apply to
this document as well.
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in
this document are to be interpreted as described in [RFC2119].
3 VERSIONING PROPERTIES
Version-management introduces the following additional properties:
3.1 Property Attributes
There are several important attributes of properties that will be
defined for every property introduced by this document.
3.1.1 Writeable/Readonly Properties
A writeable property can be modified by a client, while a readonly
property can only be modified by the server. All properties
defined in this document are writeable unless explicitly indicated
as readonly.
3.1.2 Immutable/Mutable Properties
An immutable resource is a resource whose value cannot change. An
immutable property is a property whose value cannot change when it
appears on an immutable resource. A mutable property is a property
whose value can change, even when it appears on an immutable
resource. All properties defined in this document are immutable
unless explicitly indicated as mutable.
3.1.3 Property-Collections
The value of a property can be the URL of a collection, where this
URL value cannot be modified by a client. Such a property is
called a property-collection. The writeable/readonly and
immutable/mutable attributes of a property-collection indicate
whether members can be added or removed from the property-
collection. All properties defined in this document are not
property-collections, unless explicitly indicated to be one.
When the members of a property-collection are all references, then
the property-collection could be represented as a comma-separated
list of URL's or as an XML document, but this is susceptible to
lost updates (when one client updates the value without locking the
property before reading it). A comma-separated list of URLs also
cannot handle the case where an immediate member is a resource and
not just a reference to a resource.
Clemm [Page 8]
INTERNET-DRAFT WebDAV Versioning March 22, 1999
3.2 Versioned-Resource Properties
Version-management introduces the following additional properties
for a versioned-resource:
3.2.1 DAV:revisions (readonly, collection)
The DAV:revisions collection of a versioned-resource contains all
revisions of that versioned-resource, where the name of a revision
in the DAV:revisions collection is its DAV:revision-id. PROPFIND
can then be used to gather arbitrary information about the
revisions. If a revision-id contains a URL reserved character, that
character is escaped in the DAV:revisions name.
3.2.2 DAV:revision-labels (collection)
The DAV:revision-labels collection of a versioned-resource contains
references to members of the DAV:revisions collection of that
versioned-resource. The client can label and unlabel revisions by
adding and deleting members of the DAV:revision-labels collection.
If a label-id contains a URL reserved character, that character is
escaped in the DAV:revision-labels name.
3.3 Revision Properties
Version-management introduces the following additional properties
for a revision:
3.3.1 DAV:versioned-resource-id (readonly, immutable)
The DAV:versioned-resource-id of a revision is the DAV:versioned-
resource-id of the versioned-resource whose DAV:revisions
collection contains this revision.
3.3.2 DAV:revision-id (readonly, immutable)
The DAV:revision-id is an identifier assigned to a revision by the
server. Whenever a revision is created or modified by a CHECKIN, it
must be assigned a new DAV:revision-id. A revision cannot be given
a DAV:revision-id that has been given to any other revision of that
versioned-resource, even a revision that has been deleted.
3.3.3 DAV:predecessor (readonly, immutable)
The DAV:predecessor of a revision is the revision that was checked
out to produce a working resource that was checked in to produce
this revision.
Clemm [Page 9]
INTERNET-DRAFT WebDAV Versioning March 22, 1999
3.3.4 DAV:successors (readonly, mutable, collection)
The DAV:successors collection of a revision contains a reference to
each revision whose DAV:predecessor is that revision.
3.3.5 DAV:workspaces (readonly, mutable, collection)
The DAV:workspaces collection contains references to all workspaces
that have a working-resource checked out from this revision.
3.3.6 DAV:single-checkout
When the DAV:single-checkout property of a revision is set, only
one working-resource can be checked out from that revision at any
time.
3.3.7 DAV:auto-version
When the DAV:auto-version property of a revision is set, a PUT
request to this revision is automatically preceded by a CHECKOUT
into the default workspace and followed by a CHECKIN. This allows
a versioning-unaware client to modify a version-controlled
resource. The DAV:auto-version value can take the same values as
the DAV:checkin-policy of a working-resource, and the DAV:checkin-
policy of the automatically created working-resource is set to be
the DAV:auto-version policy of the revision.
3.4 Versioning-reference Properties
Version-management introduces the following additional properties
for a versioning-reference:
3.4.1 DAV:ref-target
The DAV:ref-target of a versioning-reference is the versioned-
resource that contains the revisions that may be the target of this
versioning-reference.
3.4.2 DAV:default-workspace (readonly)
The DAV:default-workspace property specifies which workspace will
be used to perform version selection for a versioning-reference
request that does not contain an explicit Version-Selector header.
3.5 Working-Resource Properties
Version-management introduces the following additional properties
for a working-resource:
Clemm [Page 10]
INTERNET-DRAFT WebDAV Versioning March 22, 1999
3.5.1 DAV:workspace (readonly)
The DAV:workspace of a working-resource is the workspace that
contains this working resource.
3.5.2 DAV:predecessor (readonly)
The DAV:predecessor of a working-resource is the revision that was
checked-out to produce that working-resource.
3.5.3 DAV:checkin-policy
The DAV:checkin-policy property of a working-resource indicates how
this working-resource should be checked in. The default value is
DAV:immutable.
DAV:identical-abort indicates that the CHECKIN should fail if the
working-resource is identical to its DAV:predecessor.
DAV:identical-uncheckout indicates that an UNCHECKOUT should be
applied if the working-resource is identical to its
DAV:predecessor.
DAV:overwrite indicates that the working resource should be copied
into the DAV:predecessor instead of creating a new revision.
DAV:mutable indicates that the new revision can be overwritten by a
subsequent DAV:overwrite CHECKIN.
3.6 Workspace Properties
Version-management introduces the following additional properties
for a workspace:
3.6.1 DAV:ref-target (readonly)
The DAV:ref-target of a workspace is the root collection of the web
site (i.e. "/"). This reflects the fact that a workspace can be
used to specify version selection for any versioning-reference at a
web site. Since a workspace is a reference, the properties of a
workspace must be accessed with a DAV:nopassthrough header.
3.6.2 DAV:current
The DAV:current property of a workspace can contain the name of a
label. Whenever a working-resource is checked in to create a new
revision, the DAV:current label of the workspace is applied to that
revision.
3.6.3 DAV:revision-selection-rule
The DAV:revision-selection-rule of a workspace contains an XML
document that describes how revision selection will be performed in
that workspace. The working-resources checked-out into a workspace
Clemm [Page 11]
INTERNET-DRAFT WebDAV Versioning March 22, 1999
take priority over revisions selected by the revision-selection-
rule, thus the version selection algorithm for a workspace is
"checked-out to that workspace" else "selected by the workspace
revision-selection rule". To ensure that working-resources continue
to be visible in a workspace after they are checked in, the
contents of DAV:current is usually the first element of the
DAV:revision-selection-rule. If the DAV:revision-selection-rule is
not set or is empty, the revision selection rule will select no
revision for any versioning-reference.
Standard revision-selection-rule elements are defined in this
document, but additional revision-selection-rule elements may be
supported by a WebDAV server.
4 VERSIONING METHODS
4.1 Existing Methods
4.1.1 GET
When GET is applied to a versioning-reference, it returns the body
of the target of that versioning-reference.
4.1.2 PUT
When PUT is applied to a versioning-reference whose target is a
working-resource, the PUT is applied to that working-resource.
When PUT is applied to a versioning-reference whose target is a
revision, the PUT fails unless the revision has a DAV:auto-version
property and no Version-Selector header has been specified. In
this case, the versioning-reference is checked out into the default
workspace, the PUT is applied to the resulting working-resource,
and the working-resource is checked in. When PUT is applied to a
versioned-resource or a revision, it fails.
4.1.3 PROPPATCH
When PROPPATCH is applied to a versioning-reference, its behavior
is similar to that of PUT. When PROPPATCH is applied to a revision,
it fails unless the property is mutable.
4.1.4 DELETE
When DELETE is applied to a working-resource or a versioning-
reference whose target is a working-resource, the workspace of the
working-resource is deleted from the DAV:workspaces of the
DAV:predecessor of the working-resource and the working-resource is
deleted. When DELETE is applied to a versioning-reference whose
target is a revision, the versioning-reference is deleted, but the
revision is unaffected. When DELETE is applied to a workspace, the
Clemm [Page 12]
INTERNET-DRAFT WebDAV Versioning March 22, 1999
workspace and all working-resources of that workspace are deleted.
When DELETE is applied to a revision, the revision is deleted.
When DELETE is applied to a versioned-resource, the versioned-
resource and all revisions of that versioned-resource are deleted.
4.1.5 COPY
When COPY is applied to a versioned-resource, it fails.
4.1.6 MOVE
When MOVE is applied to a versioning-reference, the versioning-
reference is moved, but the versioned-resource and revisions of
that versioning-reference are unaffected. When MOVE is applied to
a working-resource, the working-resource is moved but its
associated versioned-resource is unaffected. When a MOVE is
applied to a versioned-resource, workspace, or revision, it fails.
4.1.7 LOCK
A write-lock on a versioned-resource places a write-lock on all
revisions of that versioned-resource. A write-lock on a revision
prevents unauthorized modifications to the DAV:workspaces property
of that revision. A write-lock on a working-resource prevents
unauthorized changes to the body or properties of that working-
resource.
4.2 New Versioning Methods
Version-management introduces the following additional methods:
4.2.1 RESOURCEPUT
RESOURCEPUT is a generalized PUT that allows the update or creation
of an arbitrary resource type. The body of RESOURCEPUT has the
same syntax as PROPPATCH except that a DAV:body element can be used
to update or initialize the body of the resource. If RESOURCEPUT
is applied to a null resource, a new resource is created. If it is
applied to a resource of the type specified by the RESOURCEPUT, the
existing resource is updated.
If RESOURCEPUT is used to create a new versioning-reference, and
the DAV:versioned-resource is not specified, then the result of the
RESOURCEPUT depends on whether the specified URL is a null
resource, a versionable resource, or a versioning-reference. If it
is a null resource, a new versioned-resource is created whose
initial revision has a null body. If it is a versionable-resource,
a new versioned-resource is created whose initial revision is a
copy of that versionable-resource. If it is a versioning-
reference, the versioning-reference is updated by the RESOURCEPUT.
Clemm [Page 13]
INTERNET-DRAFT WebDAV Versioning March 22, 1999
4.2.2 CHECKOUT
When a CHECKOUT request is applied to a versioning-reference whose
target is a revision, a new working-resource is created that is a
copy of the revision, and the DAV:predecessor of the working-
resource is set to be that revision. If the DAV:predecessor has a
DAV:single-checkout property and is already checked out into a
workspace, the CHECKOUT request fails. The DAV:workspace of the
working-resource is set to be the workspace specified in the
Version-Selector header. If the Version-Selector is not a workspace
or if there is no Version-Selector header, the DAV:workspace for
that working-resource is allocated by the server. The body of the
CHECKOUT request can be used to initialize the DAV:checkin-policy
of the working-resource. The location of the new working-resource
is returned in the Location response header. A client may indicate
a preference for the location of the new working-resource with a
Location request header, but the server MAY ignore this preference.
When a CHECKOUT request is applied to a versioning reference whose
target is a working-resource, the CHECKOUT request fails.
4.2.3 CHECKIN
When a CHECKIN request is applied to a working-resource of a
versioned-resource, a copy of the working-resource is made a new
revision of that versioned-resource and the working-resource is
deleted. A reference to the new revision is added to the
DAV:successors collection of the DAV:predecessor of the new
revision, and the workspace of the working-resource is deleted from
the DAV:workspaces collection of the DAV:predecessor.
4.2.4 UNCHECKOUT
When an UNCHECKOUT request is applied to a working-resource or a
versioning-reference whose target is a working-resource, the
DAV:workspace of that working-resource is deleted from the
DAV:workspaces collection of the DAV:revision of the working-
resource, and the working-resource is deleted. This effectively
cancels the CHECKOUT request that produced the working-resource.
4.3 New Versioning Headers
4.3.1 Version-Selector
The Version-Selector header contains a workspace URL, a label, or a
revision-identifier. The Version-Selector header is used to specify
which working-resource or revision of a versioned-resource should
be the target of a versioning-reference. If a Version-Selector
header is omitted in a request on a versioning-reference, the
default-workspace is implicitly used to perform version selection.
Clemm [Page 14]
INTERNET-DRAFT WebDAV Versioning March 22, 1999
5 CONFIGURATION-MANAGEMENT PROPERTIES
Configuration-management introduces the following additional
properties:
5.1 Resource Properties
Configuration-management introduces the following additional
properties for a resource:
5.1.1 DAV:workspaces (collection)
The DAV:workspaces collection of a resource contains workspaces.
5.2 Versioned-resource Properties
Configuration-management introduces the following additional
properties for a versioned-resource:
5.2.1 DAV:versioned-resource-id (readonly)
The DAV:versioned-resource-id is an identifier assigned to a
versioned-resource in a repository by the server. A versioned-
resource cannot be given a DAV:versioned-resource-id that has been
given to any other versioned-resource in that repository, even a
versioned-resource that has been deleted.
5.2.2 DAV:configuration
The DAV:configuration of a versioned-collection is a configuration.
When a DAV:configuration of a versioned-collection is checked out
into a workspace, it tracks the revision selected by the workspace
for each member of that collection. When the configuration is
checked in, the new configuration revision can be used in a
DAV:revision-selection-rule to select the revisions that were
selected by the workspace at the time that configuration revision
was checked in.
5.3 Revision Properties
Version-management introduces the following additional properties
for a revision:
5.3.1 DAV:merge-predecessors (mutable, collection)
The DAV:merge-predecessors collection of a revision contains
references to the other revisions whose contents were explicitly
merged by the client into that revision. The client is free to add
or delete members to this collection to more accurately reflect the
contents of that revision.
Clemm [Page 15]
INTERNET-DRAFT WebDAV Versioning March 22, 1999
5.3.2 DAV:merge-successors (mutable, collection)
The DAV:merge-successors collection of a revision contains a
reference to each revision whose DAV:merge-predecessors collection
contains a reference to that revision.
5.3.3 DAV:child-configurations (immutable, collection)
The DAV:child-configurations collection of a configuration contains
references to revisions of configurations in other repositories.
The DAV:child-configurations of a configuration revision contribute
to the revision selection behavior of that configuration revision
when it is used in a revision-selection-rule.
5.4 Working-Resource Properties
Configuration-management introduces the following additional
properties for a working-resource:
5.4.1 DAV:merge-predecessors (collection)
The DAV:merge-predecessors collection of a working-resource
contains references to the revisions whose contents were explicitly
merged by the client into that working-resource. The client is free
to add or delete members to this collection to more accurately
reflect the contents of that working-resource. The name of a
DAV:merge-predecessors member is the DAV:revision-id of that
revision.
5.4.2 DAV:activity (readonly)
The DAV:activity property of a working-resource contains the
DAV:current activity of the workspace when the working-resource was
checked out.
5.5 Workspace Properties
Configuration-management introduces the following additional
properties for a workspace:
5.5.1 DAV:current
The DAV:current property of a workspace on a configuration-
management server can contain the URL of an activity. When
DAV:current is an activity, every new working-resource in a
workspace will have its DAV:activity property set to this activity.
Clemm [Page 16]
INTERNET-DRAFT WebDAV Versioning March 22, 1999
5.6 Activity Properties
Configuration-management introduces the following additional
properties for an activity:
5.6.1 DAV:revisions (readonly, collection)
The DAV:revisions collection of an activity contains references to
all revisions whose DAV:activity property contains this activity.
5.6.2 DAV:child-activities (collection)
The DAV:child-activities collection of an activity contains
references to other activities that form a part of the logical
change being captured by the activity. The DAV:child-activities of
an activity contribute to the revision selection behavior of that
activity when it is used in a revision-selection-rule.
5.6.3 DAV:workspace
The DAV:workspace property of an activity contains the workspace
that currently has that activity as its DAV:current activity. This
implies that at most one workspace can be working in a given
activity at a time. If any working-resource of a workspace is
checked-out into a given activity, the DAV:workspace of that
activity can only be that workspace.
5.7 Repository Properties
5.7.1 DAV:versioned-resources (collection)
The DAV:versioned-resources collection of repository contains the
versioned-resources created in that repository.
5.7.2 DAV:activities (collection)
The DAV:activities collection of a repository contains the
activities created in that repository.
6 CONFIGURATION-MANAGEMENT METHODS AND HEADERS
6.1 Existing Methods
When invoked on a configuration-management server, the following
methods will display additional behavior.
Clemm [Page 17]
INTERNET-DRAFT WebDAV Versioning March 22, 1999
6.1.1 RESOURCEPUT
RESOURCEPUT can be used to create a new activity in a repository
DAV:activities collection. When RESOURCEPUT is used to create a
repository from an existing versionable collection, every member of
that versionable collection is also placed under version control as
a versioned-resource in that repository.
6.1.2 PUT
When a PUT request is applied to an activity, it fails. When a PUT
request is applied to a null-resource in a versioned-collection
revision, the PUT request fails unless DAV:auto-version is set on
that revision. If DAV:auto-version is set, a new versioned-
resource is created in the repository, an initial revision whose
body contains the body of the PUT request is created for that
versioned-resource, and a versioning-reference to the new
versioned-resource is created at the URL of the PUT.
6.1.3 COPY
When a COPY request is applied to an activity or a repository, it
fails.
6.1.4 MOVE
When a MOVE request is applied to an activity, it fails.
6.1.5 LOCK
A write lock on an activity prevents a modification to the
DAV:revisions collection of that activity.
6.1.6 CHECKOUT
On CHECKOUT, the DAV:activity of the new working-resource is set to
be the DAV:current activity of the current workspace. If
DAV:current is a label, the server automatically assigns an
activity to the new working-resource. The CHECKOUT request fails
if the workspace DAV:current is not set.
6.1.7 CHECKIN
When a CHECKIN request is invoked on a working-resource of a
versioned-collection, every versionable-resource in that collection
is put under version control. When a CHECKIN request is invoked on
a working-resource for a configuration of a versioned-collection,
the new configuration revision selects the revisions currently
selected by the workspace for that versioned-collection and each of
its members.
Clemm [Page 18]
INTERNET-DRAFT WebDAV Versioning March 22, 1999
6.2 New Methods
Configuration-management introduces the following additional
methods:
6.2.1 GET-CONFLICTS
A GET-CONFLICTS request must have a Version-Selector header
specifying a workspace. The body of the GET-CONFLICTS response
contains an XML document describing all revision selection
conflicts in that workspace. This document enumerates the
versioning-references which have conflicts, as well as information
about how to resolve the conflicts (such as the revisions that
would need to be merged). If the body of a GET-CONFLICTS request is
non-empty, it contains a revision selection rule that is appended
by a DAV:rsr-or-else-conflicts to the DAV:revision-selection-rule
of the workspace.
6.2.2 COMPARE
A COMPARE request can be applied to two configuration revisions.
The COMPARE response body contains an XML document listing the
revisions, child-configuration-revisions, and activities that are
selected by one configuration revision but not the other.
7 THE DAV VERSIONING XML ELEMENTS
7.1 Revision-Selection-Rule Elements
A revision-selection-rule (or RSR) element can be applied to an
arbitrary versioning-reference, and will either select a particular
revision of the versioned-resource of that versioning-reference or
select no revision of that versioned-resource. If it selects a
particular revision, it may also detect a conflict (e.g. when there
were multiple candidates for selection). A document describing all
the conflicts can be obtained through the GET-CONFLICTS method.
7.1.1 DAV:rsr-configuration-revision
A DAV:rsr-configuration element contains the URL of a configuration
revision. If the configuration revision contains a revision of the
versioned-resource, that revision is selected by the DAV:rsr-
configuration-revision element; otherwise, no revision is selected.
7.1.2 DAV:rsr-activity
A DAV:rsr-activity element contains the URL of an activity. If the
DAV:revisions collection of the activity contains one or more
revisions of the versioned-resource, then the revision is selected
that is the descendent of each of the other revisions in the
Clemm [Page 19]
INTERNET-DRAFT WebDAV Versioning March 22, 1999
DAV:revisions collection. The semantics of activities ensures that
such a revision always exists in the DAV:revisions collection of an
activity. If the activity contains no revisions of a versioned-
resource, the DAV:rsr-activity element selects no revisions of that
versioned-resource.
If the DAV:child-activities collection of an activity is non-empty,
then the DAV:rsr-activity element acts like a DAV:rsr-or-else-
conflicts element that contains that activity and each of the
DAV:child-activities. A DAV:rsr-activity element can generate
conflicts only if the DAV:child-activities collection is non-empty.
7.1.3 DAV:rsr-label
A DAV:rsr-label element contains a label. If a revision of the
versioned-resource has that label, that revision is selected by the
DAV:rsr-label element; otherwise, no revision is selected. A
DAV:rsr-label element never generates a conflict.
7.1.4 DAV:rsr-revision-id
A DAV:rsr-revision-id element contains a revision-id. If a
revision of the versioned-resource has that revision-id, that
revision is selected by the DAV:rsr-revision-id element; otherwise,
no revision is selected. A DAV:rsr-revision-id element never
generates a conflict.
7.1.5 DAV:rsr-latest
A DAV:rsr-latest element selects the revision of that versioned-
resource with the latest DAV:modification-time.
7.1.6 DAV:rsr-or-else
A DAV:rsr-or element contains a sequence of RSR elements. The
behavior of a DAV:rsr-or element is identical to the behavior of
the first element in this sequence that selects a revision of the
versioned-resource. If no element selects a revision, then the
DAV:rsr-or element selects no revision of that versioned-resource.
7.1.7 DAV:rsr-or-else-conflicts
A DAV:rsr-or-else-conflicts element contains a sequence of RSR
elements. If one of the elements in this sequence selects a
revision that is the descendent of all of the other revisions
selected by elements in this sequence, then that revision is
selected by the DAV:rsr-or-else-conflicts element. If no selected
revision is a descendent of all the other selected revisions, then
a conflict has occurred, and the DAV:rsr-or-else-conflicts selects
the first revision selected by an element in the sequence. The
GET-CONFLICTS method can be used to identify the conflicts.
Clemm [Page 20]
INTERNET-DRAFT WebDAV Versioning March 22, 1999
7.2 Conflict Report Elements
A conflict report identifies the versioned-resources in a workspace
that generate a conflict when the specified revision-selection-rule
is applied to them.
7.2.1 DAV:conflict
The DAV:conflict element identifies a particular versioned-resource
for which the revision-selection-rule generated a conflict.
7.2.2 DAV:contributor
The DAV:contributor element identifies a revision that is selected
by an element of the revision-selection-rule but that is not an
ancestor of any of the other revisions selected by the revision-
selection-rule.
7.2.3 DAV:contributor-base
The DAV:contributor-base element identifies a revision that is a
common ancestor of each DAV:contributor for a particular conflict..
7.3 Compare Report Elements
A compare report identifies the differences between two resources
of the same type.
7.3.1 DAV:added
A DAV:added element identifies something that appears in the second
resource but not in the first.
7.3.2 DAV:deleted
A DAV:deleted element identifies something that appears in the
first resource but not in the second.
7.3.3 DAV:changed
A DAV:changed element identifies something that is in both
resources but that is in some way different in the two resources.
For example, when two configurations are being compared, a
DAV:changed element can identify a versioned-resource, a versioned-
collection, or an activity. A versioned-resource has changed if
the configurations select different revisions of that versioned-
resource. A versioned-collection has changed if the configurations
select different revisions or different configurations of that
versioned-collection. An activity has changed if both
configurations contained that activity but the DAV:revisions or
Clemm [Page 21]
INTERNET-DRAFT WebDAV Versioning March 22, 1999
DAV:child-activities of that activity were different when those
configurations were created.
8 INTERNATIONALIZATION CONSIDERATIONS
To be supplied.
9 SECURITY CONSIDERATIONS
To be supplied.
10 SCALABILITY
To be supplied.
11 AUTHENTICATION
Authentication mechanisms defined in WebDAV will also apply to DAV
Versioning.
12 IANA CONSIDERATIONS
This document uses the namespace defined by [WebDAV] for XML
elements. All other IANA considerations mentioned in [WebDAV] also
applicable to DAV Versioning.
13 COPYRIGHT
To be supplied.
14 INTELLECTUAL PROPERTY
To be supplied.
15 REFERENCES
[RFC2068] R. Fielding, J. Gettys, J. C. Mogul, H. Frystyk, and T.
Berners-Lee, "Hypertext Transfer Protocol -- HTTP/1.1", RFC 2068,
U.C. Irvine, DEC, MIT/LCS, January 1997.
[RFC2119] S. Bradner, "Key words for use in RFCs to Indicate
Requirement Levels." RFC 2119, BCP 14. Harvard University. March,
1997.
[RFC2518] Y. Goland, E.J. Whitehead, A. Faizi, S.R. Carter, D.
Jenson, "HTTP Extensions for Distributed Authoring - WEBDAV", RFC
2518, Microsoft, UCIrvine, Netscape, Novell, February. 1999.
[WEBDAV-ADVCOL]
Clemm [Page 22]
INTERNET-DRAFT WebDAV Versioning March 22, 1999
16 AUTHOR'S ADDRESS
Geoffrey Clemm
Rational Software
20 Maguire Road
Lexington, MA 02421
Email: geoffrey.clemm@rational.com
Clemm [Page 23]