INTERNET-DRAFT Geoffrey Clemm, Rational Software
draft-ietf-deltav-versioning-02.txt Chris Kaler, Microsoft
Expires July 21, 2000 January 21, 2000
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
that define the WebDAV Versioning extensions to the HTTP/1.1 protocol.
WebDAV Versioning will minimize the complexity of clients so as to
facilitate widespread deployment of applications capable of utilizing
the WebDAV Versioning services. WebDAV Versioning includes:
- Basic versioning with automatic versioning for versioning-unaware
clients,
- Activity and configuration management ,
- URL namespace versioning.
Clemm, Kaler [Page 1]
INTERNET-DRAFT WebDAV Versioning January 21, 2000
Table of Contents
VERSIONING EXTENSIONS TO WEBDAV...........................1
STATUS OF THIS MEMO.......................................1
ABSTRACT..................................................1
TABLE OF CONTENTS.........................................2
1 INTRODUCTION...........................................4
1.1 Relationship to DAV.................................5
1.2 Terms...............................................5
1.3 Notational Conventions.............................10
2 WEBDAV VERSIONING SEMANTICS...........................11
2.1 Creating Versioned Resources.......................11
2.2 Modifying a Versioned Resource.....................11
2.3 Naming Revisions: Revision Ids and Revision Labels.12
2.4 Revision Selection and Workspaces..................12
2.5 Parallel Development, Activities, and Merging
<Activity>.........................................13
2.6 Configurations <Activity>..........................14
2.7 Versioned Collections <Versioned-Collection>.......14
2.8 Repositories <Versioned-Collection>................14
3 VERSIONING PROPERTIES BY RESOURCE TYPE................15
3.1 Property Characteristics...........................15
3.1.1 Writeable/Readonly Properties....................15
3.1.2 Mutable Properties...............................15
3.2 Common Property Values.............................15
3.2.1 boolean Syntax...................................15
3.2.2 segment Syntax...................................15
3.2.3 date-time Syntax.................................15
3.2.4 href XML Element.................................15
3.2.5 stable-href Syntax...............................16
3.3 Resource Properties................................16
3.3.1 DAV:author.......................................16
3.3.2 DAV:comment......................................16
3.4 Versioned Resource Properties......................16
3.4.1 DAV:revisions (readonly).........................16
3.4.2 DAV:initial-revisions (readonly).................16
3.4.3 DAV:revision-resourcetype (readonly).............16
3.4.4 DAV:auto-version.................................16
3.4.5 DAV:baselines (readonly) <Versioned-Collection>..17
3.4.6 DAV:baselines-root (readonly)
<Versioned-Collection>...........................17
3.4.7 DAV:repository (readonly) <Versioned-Collection>.17
3.5 Revision Properties................................17
3.5.1 DAV:revision-id (readonly).......................17
3.5.2 DAV:revision (readonly)..........................18
3.5.3 DAV:predecessors (readonly)......................18
3.5.4 DAV:successors (readonly, mutable)...............18
3.5.5 DAV:labels (readonly, mutable)...................18
3.5.6 DAV:checkin-date (readonly)......................18
Clemm, Kaler [Page 2]
INTERNET-DRAFT WebDAV Versioning January 21, 2000
3.5.7 DAV:working-resources (readonly, mutable)........19
3.5.8 DAV:single-checkout..............................19
3.5.9 DAV:versioned-resource (readonly)................19
3.5.10 DAV:activity <Activity>...............19
3.6 Working Resource Properties........................19
3.6.1 DAV:workspace (readonly).........................19
3.6.2 DAV:predecessors (readonly)......................19
3.6.3 DAV:checkin-policy...............................20
3.6.4 DAV:activity <Activity>..........................20
3.7 Workspace Properties...............................20
3.7.1 DAV:working-resources (readonly).................20
3.7.2 DAV:revision-selection-rule......................20
3.7.3 DAV:no-checkout..................................22
3.7.4 DAV:current-label................................22
3.7.5 DAV:current-activity <Activity>..................22
3.8 Activity Properties <Activity>.....................22
3.8.1 DAV:revisions....................................23
3.8.2 DAV:needed-activities............................23
3.8.3 DAV:workspaces (readonly)........................23
3.9 Configuration Properties <Activity>................23
3.10 Baseline Properties <Versioned-Collection>.........23
3.11 Repository Properties <Versioned-Collection>.......23
3.11.1 DAV:versioned-resources (readonly)..............23
3.11.2 DAV:root-versioned-collection (readonly)........24
3.11.3 DAV:activities (readonly).......................24
3.11.4 DAV:configurations (readonly)...................24
4 EXISTING METHODS......................................24
4.1 GET................................................24
4.2 PUT................................................24
4.3 PROPFIND...........................................25
4.4 PROPPATCH..........................................25
4.5 COPY...............................................25
4.6 MKCOL..............................................25
4.7 DELETE.............................................25
4.8 BIND...............................................26
4.9 MOVE...............................................26
4.10 LOCK...............................................26
4.11 OPTIONS............................................26
5 NEW METHODS...........................................26
5.1 MKRESOURCE.........................................27
5.1.1 Example - MKRESOURCE.............................28
5.2 REPORT.............................................28
5.2.1 DAV:report-request...............................28
5.2.2 DAV:report-response..............................29
5.3 Available REPORT...................................29
5.3.1 DAV:available-report-request.....................29
5.3.2 DAV:available-report-response....................29
5.3.3 Example - Available REPORT.......................29
5.4 Property REPORT....................................30
5.4.1 DAV:property-report-request......................30
5.4.2 DAV:property-report-response.....................30
5.4.3 Example - Property REPORT........................30
Clemm, Kaler [Page 3]
INTERNET-DRAFT WebDAV Versioning January 21, 2000
5.5 Conflict REPORT <Activity>.........................31
5.5.1 DAV:conflict-report-request......................31
5.5.2 DAV:conflict-report-response.....................31
5.5.3 Example - Conflict REPORT........................32
5.6 Compare REPORT <Activity>..........................32
5.6.1 DAV:compare-report-request.......................33
5.6.2 DAV:compare-report-response......................33
5.6.3 Example - Compare REPORT.........................33
6 NEW VERSIONING METHODS................................34
6.1 VERSION............................................34
6.1.1 Example - VERSION................................35
6.2 CHECKOUT...........................................35
6.2.1 Example - CHECKOUT...............................36
6.3 MERGE..............................................37
6.3.1 Example - MERGE..................................38
6.4 UNCHECKOUT.........................................38
6.4.1 Example - UNCHECKOUT.............................38
6.5 CHECKIN............................................39
6.5.1 Example - CHECKIN................................40
6.6 LABEL..............................................40
6.6.1 Example - LABEL..................................41
7 NEW VERSIONING HEADERS................................41
7.1 Workspace..........................................41
7.2 Revision-Selector..................................42
8 INTERNATIONALIZATION CONSIDERATIONS...................42
9 SECURITY CONSIDERATIONS...............................42
10 SCALABILITY..........................................42
11 AUTHENTICATION.......................................42
12 IANA CONSIDERATIONS..................................42
13 INTELLECTUAL PROPERTY................................43
14 ACKNOWLEDGEMENTS.....................................43
15 INDEX................................................43
16 REFERENCES...........................................43
17 AUTHORS' ADDRESSES...................................44
18 OPEN ISSUES..........................................44
1 INTRODUCTION
This document defines WebDAV Versioning extensions, an application
of HTTP/1.1 for handling resource versioning in a WebDAV
Clemm, Kaler [Page 4]
INTERNET-DRAFT WebDAV Versioning January 21, 2000
environment. [Goals] describes the motivation and requirements for
WebDAV Versioning.
WebDAV Versioning will minimize the complexity of clients so as to
facilitate widespread deployment of applications capable of
utilizing the WebDAV services. WebDAV Versioning defines three
levels of versioning functionality for versioning-aware clients:
- Basic versioning with automatic versioning for versioning-unaware
clients,
- Activity and configuration management ,
- URL namespace versioning.
2 RELATIONSHIP TO DAV
To maximize interoperability and the use of existing protocol
functionality, versioning support is designed as extensions to the
WebDAV [RFC2518] and Binding protocols [Binding]. In particular,
WebDAV Versioning relies on the resource and property model defined
by [RFC2518] and the binding model defined by [Binding].
This protocol defines three levels of versioning support: Core,
Activity, and Versioned-Collection support. Core support provides
versioning of largely independent resources. It allows authors to
concurrently create and access distinct revisions of a resource.
Activity support extends Core support with logical change tracking
and configuration management. Versioned-Collection support extends
Activity support with the ability to version the URL namespace.
Throughout this specification, the notations <Activity> and
<Versioned-Collection> indicate concepts that are introduced by
Activity and Versioned-Collection, respectively. The level of
versioning support provided by a server can be discovered via an
OPTIONS request.
2.1 Terms
This draft uses the terms defined in [RFC2068] and [RFC2518]. In
addition, the following terms are defined:
Versionable Resource
A versionable resource is a resource that can be placed under
version control.
Versioned Resource
A versioned resource is a resource that is under version control.
A versioned resource tracks the history of its significant states,
called revisions of that versioned resource. To update a resource
under version control, it must be checked out and then subsequently
checked in.
Revision
Clemm, Kaler [Page 5]
INTERNET-DRAFT WebDAV Versioning January 21, 2000
A revision of a versioned resource is created by a CHECKIN
operation, and captures the current state of the versioned
resource.
Mutable Property
A mutable property is a property of a revision that can be changed
without checking out that revision.
Revision Name
A revision name is a name that can be used to identify a single
revision of a versioned resource. There are two types of revision
names: revision identifiers and revision labels.
Revision Identifier
A revision identifier (or revision ID) is a revision name that is
assigned by the server when the revision is created and cannot be
changed to refer to a different revision.
Revision Label
A revision label is a revision name that is assigned by a client
and may later be changed to refer to a different revision. The same
label may be assigned to a revision of many different versioned
resources.
Initial Revision
An initial revision is the first revision of a versioned resource.
Predecessor, Successor
A predecessor of a revision is a previous revision that was checked
out or merged to create the revision. A successor of a revision is
a later revision that has the revision as one of its predecessors.
Each revision except for the initial revision has at least one
predecessor.
Line Of Descent
A line of descent to a specified revision is a sequence of
revisions connected by successor relationships from the initial
revision to that revision.
The following diagram illustrates several of the previous
definitions.
Versioned -------> Foo.htm
Resource
+----+ \
---> "stable" | V1 | | |
/ +----+ | |
Label - | | |
\ | | |
\ +----+ | Line |
---> "beta1" | V2 | | of |
+----+ | Descent |
/ \ | to |
/ \ | V6 |
Clemm, Kaler [Page 6]
INTERNET-DRAFT WebDAV Versioning January 21, 2000
+----+ +----+ | |
Revision Id ----> | V3 | | V4 | | | History
+----+ +----+ | | of
^ | | | | Foo.htm
Predecessor | | | | |
| +----+ +----+ v |
| V5 | | V6 | |
+----+ +----+ |
| \ / |
Successor | \ / |
v +----+ |
| V7 | |
+----+ /
Checkout/Checkin Model
The checkout/checkin model is the process by which updates are made
to a versioned resource. A versioned resource is checked out to
create an editable working resource. The working resource is
updated as desired, and then checked in to make it part of the
revision history of the versioned resource.
The following diagram illustrates the checkout/checkin process.
===CHECKOUT==> ===CHECKIN==>
Foo.htm | Foo.htm | Foo.htm
| |
+----+ | +----+ | +----+
| V1 | | | V1 | | | V1 |
+----+ | +----+ | +----+
| | | | |
v | v | v
+----+ | +----+ | +----+
| V2 | | | V2 | | | V2 |
+----+ | +----+ | +----+
| | | |
| v | v
| +----+ | +----+
| | WR | | | V3 |
| +----+ | +----+
Working Resource
A working resource is an editable resource created by checking out
a revision of a versioned resource.
Workspace
A workspace is a resource that is used to identify working
resources. A workspace can also contain a revision selection rule
that specifies what revision of an arbitrary versioned resource
should be accessed when the resource is referenced in the context
of that workspace. A revision selection rule provides revision
Clemm, Kaler [Page 7]
INTERNET-DRAFT WebDAV Versioning January 21, 2000
selection based on criteria such as revision name, latest in an
activity, and membership in a configuration.
A workspace that does not contain a revision selection rule (and
therefore can only be used to identify working resources) is called
a basic workspace. A workspace that contains a revision selection
rule (and therefore can be used to specify revision selection) is
called an extended workspace.
The following diagram illustrates an extended workspace.
Foo.htm Bar.htm Bing.htm
+----+ +----+
| V1 | | V1 |
+----+ +----+
| |
| |
+-----------------|------------|------------------+
| v v |
| +----+ +----+ +----+ |
| | V1 | | V2 | | WR | Workspace X |
| +----+ +----+ +----+ |
| | |
+-----------------|-------------------------------+
|
v
+----+
| V3 |
+----+
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 modifiable by a
client.
Target
Whenever a server encounters a versioned resource while it is
processing an HTTP request, it acts on the "target" of the
versioned resource, rather than on the versioned resource itself.
Target selection is performed based on the value of the Workspace
header of the request. If no Workspace header is specified, a
default workspace is used to determine target selection. A
Revision-Selector header can be used to modify which target is
selected by the Workspace header.
Default Target
The "default target" of a versioned resource is the target selected
by the default workspace.
Activity <Activity>
An activity is a resource that selects a set of revisions that
correspond to some unit of work or conceptual change. An activity
Clemm, Kaler [Page 8]
INTERNET-DRAFT WebDAV Versioning January 21, 2000
can contain revisions of multiple versioned resources, and multiple
revisions of the same versioned resource. If an activity contains
multiple revisions of the same versioned resource, all of those
revisions must be on a single line of descent to one of those
revisions, and this revision is called the latest revision selected
by that activity for that versioned resource.
The following diagram illustrates activities. Revision V3 is the
latest revision of Foo.htm selected by activity 2, and revision V7
is the latest revision of Bar.htm selected by activity 2.
Foo.htm | Bar.htm
|
+----+ | +----+
| V1 | | | V5 |
+----+ | +----+
| Activity | | Activity
v 1 | v 2
+----+ | +----+
| V2 | | | V6 |
+----+ | +----+
| Activity | | Activity
v 2 | v 2
+----+ | +----+
| V3 | | | V7 |
+----+ | +----+
| | Activity
| v 3
| +----+
| | V8 |
| +----+
Conflict Report <Activity>
A conflict report lists all versioned resources for which the
revision selection rule of a workspace selects multiple revisions
on different lines of descent. A conflict is resolved by checking
out one of the selected revisions, modifying the resulting working
resource so that it represents the logical merge of all selected
revisions, and then indicating these merges by adding these
revisions as merge predecessors of the working resource. Checking
in this working resource creates a new revision that resolves the
conflict.
Configuration <Activity>
A configuration is a type of collection that contains a set of
revisions, with a most one revision from any versioned resource.
Unlike a workspace, which can select both working resources and
revisions, a configuration can only select revisions. Also, while
the revision selected by a workspace for a versioned resource can
change as a result of a change to the versioned resource (such as
adding a label), the revision selected by a configuration can
change only by explicitly modifying the configuration. Unlike an
activity, a configuration can contain at most one revision of a
Clemm, Kaler [Page 9]
INTERNET-DRAFT WebDAV Versioning January 21, 2000
given versioned resource. Unlike both a workspace and an activity,
a configuration can be versioned.
The following diagram illustrates a configuration.
Foo.htm Bar.htm Bing.htm
+----+
| V1 |
+----+
|
|
+-----------------|-------------------------------+
| | |
| +----+ +----+ +----+ Configuration |
| | V1 | | V2 | | V1 | V1.1 |
| +----+ +----+ +----+ |
| | | |
+-----------------|------------|------------------+
| |
v v
+----+ +----+
| V3 | | V2 |
+----+ +----+
Versioned Collection <Versioned-Collection>
A versioned collection is a type of versioned resource that results
from placing a collection under version control. The members of a
versioned collection revision must be versioned resources. The
working resource that results from checking out a versioned
collection is called a working collection.
Baseline <Versioned-Collection>
A baseline is a revision of a versioned configuration that is
associated with a particular versioned collection. Each baseline
defines a "deep revision" of a particular versioned collection. A
deep revision of a versioned collection captures the state of a
versioned collection in a particular workspace, including a
revision of the versioned collection selected by that workspace, as
well as a revision of every member of that versioned collection
selected by that workspace.
Repository <Versioned-Collection>
A repository is a type of resource that contains related versioned
resources, activities, and configurations. A repository provides a
stable namespace for versioning metadata resources, and provides
versioning unaware clients access to the versioning metadata.
2.2 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
Clemm, Kaler [Page 10]
INTERNET-DRAFT WebDAV Versioning January 21, 2000
[RFC2068]. Because this augmented BNF uses the basic production
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 WEBDAV VERSIONING SEMANTICS
3.1 Creating Versioned Resources
When a new resource is created in an unversioned collection (e.g.
by a PUT, MKCOL, or COPY request), it is created as an unversioned
resource. An unversioned resource that can be put under version
control is called a versionable resource. A versionable resource
is put under version control with a CHECKOUT operation. When a new
resource is created in a versioned collection, it is created as a
versioned resource.
3.2 Modifying a Versioned Resource
A versioned resource must be checked out before it can be modified.
Checking out a versioned resource produces a new resource, called a
working resource. A working resource is always identified by the
workspace that contains it. A working resource is a modifiable
copy of the revision, and is identical to an unversioned resource
in all respects other than that it is associated with a particular
revision of a particular versioned resource. It may be edited by
setting its properties or contents any number of times. When the
author is satisfied that the working resource is in a state that
should be retained in the versioned resource history, the author
checks in the working resource to create a new revision of the
versioned resource. The revision that was checked out is the
predecessor of the new revision.
The use of checkout/checkin and working resources to update a
versioned resource addresses the lost update problem by ensuring
that each author is updating his or her own working resource rather
than a shared resource, and by ensuring that the predecessor of the
updated resource is reliably tracked. Authors can use
checkout/checkin to register intent to modify a versioned resource
similar to the way lock /unlock are used in WebDAV class 2, but the
underlying semantics are very different. With lock/unlock, work is
serialized and avoiding lost updates depends on clients using the
lock/unlock protocol. With checkout/checkin, work can be performed
in parallel, and the server prevents lost updates by retaining all
saved states (revisions) of the resource. Another distinction is
that an update to a locked resource is immediately visible to all
clients, while an update to a working resource in a workspace is
immediately visible only to clients using that workspace.
Clemm, Kaler [Page 11]
INTERNET-DRAFT WebDAV Versioning January 21, 2000
A server MAY support mutable revisions. Normally, a revision cannot
be changed and provides a stable environment for history
management, change recovery, merging, and configuration management.
A mutable revision is more suitable for situations where versioning
is treated more informally, and it is not necessary or desirable to
maintain strict version histories, or to guarantee the possibility
of backtracking to a previous saved state. If mutable revisions are
supported, the author may request that a checkin should overwrite
the revision that was checked out, instead of creating a new
revision. In this case, the previous state captured by that
revision is lost. Servers may choose not to support mutable
revisions.
3.3 Naming Revisions: Revision Ids and Revision Labels
Revision names are used to distinguish a revision of a versioned
resource from other revisions of that versioned resource. A
revision name is either a revision id or any number of revision
labels. A revision of a versioned resource is given a server
assigned revision id when it is created. This revision id acts as a
persistent, immutable identifier distinguishing this revision from
all others of the same versioned resource. The revision id cannot
be changed, assigned to another revision, or reused.
A user may assign revision labels to a revision in order to provide
a more meaningful name for the revision. A given revision label
can be assigned to at most one revision of a given versioned
resource, but may be reassigned to any revision of the versioned
resource at any time.
A revision name does not distinguish revisions from different
resources, since the same revision name can be assigned to a
revision of any versioned resource.
3.4 Revision Selection and Workspaces
Resources, working resources, and revisions of versioned resources
are all accessed using a URL. When a client accesses a versioned
resource, it is necessary to provide additional information to
specify which working resource or which revision of the versioned
resource should be accessed. Specifying the resource URL and a
revision name can access a specific revision of the versioned
resource. However, this requires the user to add and remember
labels for each revision; it does not provide a way of accessing a
consistent set of revisions captured by an activity or contained in
a configuration; it does not enable non-versioning aware clients to
access revisions; and it does not provide a client with access to a
working resource of a versioned resource.
To address the restrictions inherent in revision-name based
revision selection, the revision selected when a specific revision
name is not specified is resolved through a workspace. A workspace
is a resource whose primary purpose is to identify working
resources. If the workspace contains no working resource for a
Clemm, Kaler [Page 12]
INTERNET-DRAFT WebDAV Versioning January 21, 2000
given versioned resource, it can also be used to select an
appropriate revision of the versioned resource. This allows
versioned resources and unversioned resources to be accessed
consistently by both versioning-aware and versioning-unaware
clients.
In order to specify revision selection, a workspace contains a
revision selection rule. A revision selection rule can specify
revision names, activities, configurations, or use operators that
combine several of these revision selectors. A revision name
selects a revision with that name. An activity selects the latest
revision that was created in that activity. Configurations select
the revision contained in the configuration. The "or" operator
contains a sequence of rule elements, and applies them in order
until the first match is found. If there is no matching revision,
then a resource-not-found status is returned.
If a request is made and no workspace is specified, a server
determined default workspace is used. This is the workspace used by
all versioning-unaware clients. A server MAY allow modifications to
the revision selection rule of the default workspace.
3.5 Parallel Development, Activities, and Merging <Activity>
In a locking model, when a resource is locked for modifications by
one author, all other authors are supposed to respect that lock and
not work on a copy of that resource until the lock has been
released. To avoid the work serialization inherent in the locking
model, a versioning model allows multiple authors in different
workspaces to check out the same revision at the same time, work on
their respective working resources in parallel, and check in their
respective working resources as soon as their changes are complete.
This results in two parallel revisions (neither revision is an
ancestor of the other) that will need to be merged.
Although a simple versioning model works well for isolated changes
to independent resources, the required merge process becomes
unmanageable when sequences of inter-related changes are performed
on sets of related resources. To address this merge problem,
resources can be checked out in the context of an activity. An
activity captures the set of revisions that form a set of related
changes an author is making to one or more versioned resources.
Each activity represents a thread of development, where any thread
can be isolated from other threads to provide a stable environment
for parallel work.
When parallel work on isolated activities results in branches in
the underlying versioned resource histories, the activities can be
unified through a merge operation. The activities to be merged are
specified with a merge operator in the revision selection rule of a
workspace. A conflict report is then obtained from the workspace,
which enumerates which revisions of which versioned resources need
to be merged. The client then uses the conflict report to iterate
through the versioned resources that require merging, preferably
providing the user with some domain specific merge tool. Finally,
Clemm, Kaler [Page 13]
INTERNET-DRAFT WebDAV Versioning January 21, 2000
the result of each merge is checked in as a new revision with
multiple predecessors (the revisions that were merged). The next
time a conflict report is requested for that set of activities, the
workspace will indicate that no conflicts exist (i.e. all conflicts
have been resolved by merges).
3.6 Configurations <Activity>
A workspace selects a volatile set of revisions. Changes to
selected activities or changes to labels may result in the
selection of different revisions. A configuration is a resource
that selects a specific set of revisions. A workspace whose
version selection rule contains a configuration will always select
the same revisions as long as the configuration is not modified and
no checkouts are performed in that workspace.
Configurations are convenient for defining a persistent set of
revisions that relate to each other in some specific way at some
point in time. This can be useful for a variety of purposes such as
publishing consistent versions of resources to deploy an
application, or for recovering a specific state for legal or
maintenance reasons.
3.7 Versioned Collections <Versioned-Collection>
A collection contains a set of named bindings to other resources
that are the members of that collection. For a versioned
collection, the bindings are to versioned resources, not to
particular revisions. To modify the state of a versioned collection
(i.e. add or remove a binding), the versioned collection must be
checked out, just like any other versioned resource. Requests that
modify the state of a collection member, such as checking it out or
checking in a new revision, have no effect on the state of the
collection. Conversely, requests that modify the state of a
versioned collection, such as deleting or adding a binding to a
resource, have no effect on the state of that resource. In
particular, the resource will remain bound in any other revisions
of the collection of which it was a member.
It is often important to capture the entire tree of revisions
selected by a workspace rooted at a given versioned collection.
This "deep revision" of a versioned collection is called a
baseline.
If a URL identifies a sequence of nested versioned collections,
revision selection is performed for each versioned collection in
the sequence, to select the versioned collection revision that will
be used to map the next segment of the URL to the appropriate
versioned resource.
3.8 Repositories <Versioned-Collection>
A repository contains versioned resources, activities, and
configurations. Since a server will often allow certain metadata
Clemm, Kaler [Page 14]
INTERNET-DRAFT WebDAV Versioning January 21, 2000
relationships to be created only between resources in the same
repository, it is important to allow a client to specify in which
repository a resource should be created.
4 VERSIONING PROPERTIES BY RESOURCE TYPE
This section defines the new resource types and properties
introduced by WebDAV versioning.
4.1 Property Characteristics
There are several important characteristics of properties that will
be defined for every property introduced by this document.
4.1.1 Writeable/Readonly Properties
A writeable property can be modified by a client, while a read-only
property can only be modified by the server. All properties
defined in this document are writeable unless explicitly marked as
"read-only".
4.1.2Mutable Properties
A mutable property is a property of a revision that can be changed
without checking out that revision. A property is mutable only if
it is explicitly defined in this document as being mutable.
4.2 Common Property Values
4.2.1 boolean Syntax
Some properties take a Boolean value.
boolean = "F" | "T"
4.2.2 segment Syntax
Some properties take a value suitable for use as a segment of a
URI. The syntax of a segment is defined in section 3.3 of
[RFC2396].
4.2.3 date-time Syntax
Some properties take a date or time value. The syntax of date-time
is defined in section 23.2 of [RFC2518].
4.2.4 href XML Element
The href XML element is defined in section 12.3 of [RFC2518].
Clemm, Kaler [Page 15]
INTERNET-DRAFT WebDAV Versioning January 21, 2000
4.2.5 stable-href Syntax
A stable-href is an href XML element contains a URL that identifies
a resource that cannot be renamed with a MOVE request.
4.3 Resource Properties
WebDAV versioning introduces the following properties for a
resource:
4.3.1 DAV:author
This property is used to track the author of a resource.
<!ELEMENT author (#PCDATA)>
4.3.2 DAV:comment
This property is used to track a brief comment about a resource.
<!ELEMENT comment (#PCDATA)>
4.4 Versioned Resource Properties
The DAV:resourcetype of a versioned resource MUST be DAV:versioned-
resource-resourcetype. A versioned resource MUST contain a
DAV:resourceid property. WebDAV versioning introduces the
following properties for a versioned resource:
4.4.1 DAV:revisions (readonly)
This property identifies the revisions of this versioned resource.
<!ELEMENT revisions (stable-href*)>
4.4.2 DAV:initial-revisions (readonly)
This property identifies the initial revisions of this versioned
resource.
<!ELEMENT initial-revision (stable-href)>
4.4.3 DAV:revision-resourcetype (readonly)
This property identifies resource type of the revisions of this
versioned resource.
<!ELEMENT revision-resourcetype ANY>
4.4.4 DAV:auto-version
When the DAV:auto-version property of a versioned resource is set,
a request that attempts to modify the state of a revision of that
versioned resource (such as PUT/PROPPATCH for a basic resource or a
DELETE /MOVE for a collection) is automatically preceded by a
Clemm, Kaler [Page 16]
INTERNET-DRAFT WebDAV Versioning January 21, 2000
CHECKOUT into the default workspace and automatically 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.
<!ELEMENT auto-version (checkin-policy)>
4.4.5 DAV:baselines (readonly) <Versioned-Collection>
This optional property of a versioned collection identifies the
versioned configuration containing baselines of this versioned
collection.
<!ELEMENT baselines (stable-href)>
4.4.6 DAV:baselines-root (readonly) <Versioned-Collection>
This optional property of a versioned configuration identifies the
versioned collection whose DAV:baselines property identifies this
versioned configuration.
<!ELEMENT baselines-root (stable-href)>
4.4.7 DAV:repository (readonly) <Versioned-Collection>
This property identifies the repository that contains this
versioned resource.
<!ELEMENT repository (stable-href)>
4.5 Revision Properties
The DAV:resourceid of a revision of a versioned resource MUST be
the DAV:resourceid of that versioned-resource. WebDAV versioning
introduces the following properties for a revision of a versioned
resource:
4.5.1 DAV:revision-id (readonly)
The DAV:revision-id is an identifier assigned to a revision by the
server. 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.
<!ELEMENT revision-id (#PCDATA)>
Value: segment
Since implementations are likely to use revision identifiers in
resource naming schemes, a revision identifier is constrained to be
a legal URL segment. Standard URL encoding techniques should
provide a server with sufficient flexibility in defining revision
identifier formats.
Clemm, Kaler [Page 17]
INTERNET-DRAFT WebDAV Versioning January 21, 2000
Since a revision identifier can be specified in a Revision-Selector
header, the length of a revision-id should be compatible with
common header length constraints.
4.5.2 DAV:revision (readonly)
This property contains a URL for this revision. This is a server
allocated URL that can be used without a Workspace or Revision-
Selector header to reference this revision. If this URL is the
request-URL of a MOVE request, the MOVE request MUST fail.
<!ELEMENT revision (stable-href)>
4.5.3 DAV:predecessors (readonly)
The DAV:predecessors of a revision identifies the revisions that
were checked out or merged to produce a working resource that was
checked in to produce this revision.
<!ELEMENT predecessors (stable-href*)>
4.5.4 DAV:successors (readonly, mutable)
This property identifies the revisions whose DAV:predecessors
identify this revision.
<!ELEMENT successors (stable-href*)>
4.5.5 DAV:labels (readonly, mutable)
This property is used to identify labels that are associated with a
specific revision. The value of DAV:labels is updated with the
LABEL method.
<!ELEMENT labels (label*)>
<!ELEMENT label (#PCDATA)>
Value: segment
Since revision labels are only exposed to a user as a simple
mnemonic tag for selecting a specific revision, embedding advanced
XML facilities for character set tagging, character set encoding,
and language tagging would not be appropriate. For label
applications that are not exposed to a user, the standard URL
encoding techniques will provide a client with sufficient
flexibility in defining label formats.
Since a revision label can be specified in a Revision-Selector
header, clients should limit the length of a revision label to be
compatible with common header length constraints.
4.5.6 DAV:checkin-date (readonly)
This property contains the date when the revision was checked in.
<!ELEMENT checkin-date (#PCDATA)>
Value: date-time
Clemm, Kaler [Page 18]
INTERNET-DRAFT WebDAV Versioning January 21, 2000
4.5.7 DAV:working-resources (readonly, mutable)
This property identifies the working-resources whose
DAV:predecessors property identifies this revision. This property
is updated with the CHECKOUT method.
<!ELEMENT working-resources (stable-href*)>
4.5.8 DAV:single-checkout
When the DAV:single-checkout property of a revision is true, only
one working resource can be checked out from that revision at any
time.
<!ELEMENT single-checkout (#PCDATA)>
Value: boolean
4.5.9 DAV:versioned-resource (readonly)
This property identifies the versioned resource whose DAV:revisions
property identifies this revision.
<!ELEMENT versioned-resource (stable-href)>
4.5.10 DAV:activity <Activity>
This property identifies the activity that represents the logical
change to which this revision contributes.
<!ELEMENT activity (stable-href)>
4.6 Working Resource Properties
The DAV:resourceid of a working resource MUST be the DAV:resourceid
of the revision that was checked out to create that working
resource. WebDAV versioning introduces the following properties
for a working resource:
4.6.1 DAV:workspace (readonly)
This property identifies the workspace that contains this working
resource..
<!ELEMENT workspace (stable-href)>
4.6.2 DAV:predecessors (readonly)
This property identifies the revisions that were checked out or
merged to create this working resource. This property is modified
with a MERGE request.
<!ELEMENT predecessor (stable-href*)>
Clemm, Kaler [Page 19]
INTERNET-DRAFT WebDAV Versioning January 21, 2000
4.6.3 DAV:checkin-policy
The DAV:checkin-policy property of a working resource describes any
special processing that should be performed when this working
resource is checked in. If a PROPPATCH request specifies a
DAV:checkin-policy that is not supported by the server, it MUST
fail. The following are defined values for DAV:checkin-policy:
DAV:new-revision - Create a new revision (the default value).
DAV:overwrite - The working resource should be copied into its
DAV:predecessor instead of creating a new revision. This CHECKIN
will succeed only if the server supports mutable revisions.
DAV:keep-checked-out - Create a new revision but do not delete the
working resource. The DAV:predecessors of the working resource is
changed to identify the new revision.
<!ELEMENT checkin-policy
(new-revision | overwrite | keep-checked-out | ANY)* >
<!ELEMENT new-revision EMPTY>
<!ELEMENT overwrite EMPTY>
<!ELEMENT keep-checked-out EMPTY>
4.6.4 DAV:activity <Activity>
This property identifies the activity that represents the logical
change to which this working resource contributes.
<!ELEMENT activity (stable-href)>
4.7 Workspace Properties
The DAV:resourcetype of a workspace MUST be DAV:workspace-
resourcetype. WebDAV versioning introduces the following
properties for a workspace:
4.7.1 DAV:working-resources (readonly)
This property identifies the working resources that are checked out
into this workspace.
<!ELEMENT working-resources (stable-href*)>
4.7.2 DAV:revision-selection-rule
If there is no working resource in a workspace for a given
versioned resource, the DAV:revision-selection-rule of the
workspace specifies the revision of that versioned resource that is
selected by that workspace. Since the working resources checked out
into a workspace take priority over revisions selected by the
revision selection rule, the target of a versioned resource in a
workspace is the working resource in that workspace for that
versioned resource, otherwise the revision selected by the
workspace revision selection rule. To ensure that working resources
Clemm, Kaler [Page 20]
INTERNET-DRAFT WebDAV Versioning January 21, 2000
continue to be visible in a workspace after they are checked in,
the DAV:current-label or DAV:current-activity of a workspace is
usually the first element of the DAV:revision-selection-rule. If
the DAV:revision-selection-rule is not set or is empty, the
workspace will select no revision for any versioned resource.
The DAV:revision-selection-rule property contains an XML element.
Semantically, a revision selection rule (or RSR) element can be
applied to an arbitrary versioned resource, and will either select
a particular revision of that versioned resource, select no
revision of that versioned resource, or detect a conflict (e.g.
when there were multiple candidates for selection). A document
describing the conflicts can be obtained through a conflict REPORT
request.
<!ELEMENT revision-selection-rule
(stable-href | label | rsr-latest | rsr-or | rsr-merge)>
<!ELEMENT rsr-latest EMPTY>
<!ELEMENT rsr-or (stable-href | label)*>
<!ELEMENT rsr-merge (stable-href | label)*>
An href element contains the URL of an activity, a configuration,
or a revision.
If the href identifies an activity, and the DAV:revisions
collection of the activity contains one or more revisions of the
versioned resource, then the latest revision for that activity is
selected. The semantics of activities ensures that there always is
a unique latest revision for an activity. If the activity contains
no revisions of the versioned resource, the activity selects no
revisions of that versioned resource. If the DAV:needed-activities
collection of an activity is non-empty, then the activity acts like
a DAV:rsr-merge element that contains that activity and each of the
DAV:needed-activities. An activity element can generate conflicts
only if the DAV:needed-activities collection is non-empty.
If the href identifies a configuration, and the configuration
contains a revision of the versioned resource, that revision is
selected by the configuration; otherwise, no revision is selected.
To avoid revision selection circularities, a versioned
configuration MUST not be specified in a revision selection rule,
but a configuration revision may. A configuration never generates
a conflict.
If the href identifies a revision, then that revision is selected
if it is a revision of the versioned resource; otherwise, no
revision is selected.
If the revision selection rule element is a label, and a revision
of the versioned resource has that label, that revision is
selected; otherwise, no revision is selected. A label element
never generates a conflict.
Clemm, Kaler [Page 21]
INTERNET-DRAFT WebDAV Versioning January 21, 2000
A DAV:rsr-latest element selects the revision of that versioned
resource with the latest DAV:creationdate. A DAV:rsr-latest
element never generates a conflict.
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 this element generates a conflict, the
DAV:rsr-or element generates this conflict as well. If no element
selects a revision, then the DAV:rsr-or element selects no revision
of that versioned resource.
A DAV:rsr-merge 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-merge
element. If no selected revision is a descendent of all the other
selected revisions, then the result of the DAV:rsr-merge is a
"conflict". A conflict REPORT request can be used to identify the
conflicts.
4.7.3 DAV:no-checkout
The DAV:no-checkout property of a workspace indicates that no new
working resources can be created in that workspace.
<!ELEMENT no-checkout (#PCDATA)>
Value: boolean
4.7.4 DAV:current-label
The DAV:current-label property of a workspace can contain a
revision label. When a working resource in a workspace is checked
in, it will be given this label.
<!ELEMENT current-label (#PCDATA)>
Value: segment
4.7.5 DAV:current-activity <Activity>
The DAV:current-activity property of a workspace is the activity
that is currently being performed in that workspace. A new
working resource in a workspace will have its DAV:current-activity
property set to this activity.
<!ELEMENT current-activity (stable-href)>
4.8 Activity Properties <Activity>
The DAV:resourcetype of an activity MUST be DAV:activity-
resourcetype. WebDAV versioning introduces the following
properties for an activity:
Clemm, Kaler [Page 22]
INTERNET-DRAFT WebDAV Versioning January 21, 2000
4.8.1 DAV:revisions
This property identifies the revisions whose DAV:activity property
identifies this activity.
<!ELEMENT revisions (stable-href*)>
4.8.2 DAV:needed-activities
This property identifies the other activities that form a part of
the logical change being captured by this activity. The
DAV:needed-activities of an activity contribute to the revision
selection behavior of that activity when it is used in a revision
selection rule. The purpose of this property is to identify other
activities that are a prerequisite to this activity.
<!ELEMENT needed-activities (stable-href*)>
4.8.3 DAV:workspaces (readonly)
This property identifies the workspaces whose DAV:current-activity
property identifies this activity.
<!ELEMENT workspaces (stable-href*)>
4.9 Configuration Properties <Activity>
The DAV:resourcetype of a configuration MUST be DAV:configuration-
resourcetype.
4.10 Baseline Properties <Versioned-Collection>
The DAV:resourcetype of a baseline MUST be DAV:baseline-
resourcetype.
4.11 Repository Properties <Versioned-Collection>
The DAV:resourcetype of a repository MUST be DAV:repository-
resourcetype. WebDAV versioning introduces the following
properties for a repository:
4.11.1 DAV:versioned-resources (readonly)
This property identifies a collection that contains the set of
versioned resources maintained by the repository. The name of a
versioned resource in the DAV:versioned-resources collection MUST
be its DAV:resourceid. This restricts the DAV:resourceid of a
versioned resource in a repository to be a legal URL segment name.
<!ELEMENT versioned-resources (stable-href)>
Clemm, Kaler [Page 23]
INTERNET-DRAFT WebDAV Versioning January 21, 2000
4.11.2 DAV:root-versioned-collection (readonly)
This property identifies the member of DAV:versioned-resources that
can be exposed with a BIND operation in another part of the URL
namespace.
<!ELEMENT root-versioned-collection (stable-href)>
4.11.3 DAV:activities (readonly)
This property identifies a collection that contains the set of
activities maintained by that repository. New activities can be
added to this collection with a MKRESOURCE request. A server MAY
restrict the creation of new activities to only occur in a
DAV:activities collection of a repository.
<!ELEMENT activities (stable-href)>
4.11.4 DAV:configurations (readonly)
This property identifies a collection that contains the set of
configurations maintained by that repository. New configurations
can be added to this collection with a MKRESOURCE request. A
server MAY restrict the creation of new configurations to only
occur in a DAV:configurations collection of a repository.
<!ELEMENT configurations (stable-href)>
5 EXISTING METHODS
This section describes the extensions to the existing WebDAV
methods. Under versioning, these methods have all of the WebDAV
functionality with the following extensions.
5.1 GET
When the request-URL of a GET identifies a versioned resource, the
GET is applied to the target of that versioned resource. When a GET
is applied to a workspace, activity, configuration, or versioned
resource, it MUST fail.
5.2 PUT
When the request-URL of a PUT identifies a versioned resource, the
PUT is applied to the target of that versioned resource.
When PUT is applied to a revision of a versioned resource, the PUT
MUST fail unless the versioned resource has a DAV:auto-version
property and no Workspace header has been specified. In this case,
the revision 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 used to create a new internal member of a working
collection, a new versioned resource is created, an empty initial
Clemm, Kaler [Page 24]
INTERNET-DRAFT WebDAV Versioning January 21, 2000
revision is created, the initial revision is checked out, and the
PUT is applied to the resulting working resource.
When a PUT request attempts to create a new internal member of a
revision of a versioned collection, the PUT MUST fail unless the
versioned collection has a DAV:auto-version property and no
Workspace header has been specified. In this case, the versioned
collection is checked out into the default workspace, a new
versioned resource is created in that working collection, the new
versioned resource is checked out into the default workspace, the
PUT is applied to the resulting working resource, the working
resource is checked in, and the working collection is checked in.
When a PUT is applied to a workspace, activity, configuration, or
versioned resource, it MUST fail.
5.3 PROPFIND
When the request-URL of a PROPFIND identifies a versioned resource,
the PROPFIND is applied to the target of that versioned resource.
5.4 PROPPATCH
When the request-URL of a PROPPATCH identifies a versioned
resource, the behavior of the PROPATCH is similar to that of PUT.
In particular, when PROPPATCH is applied to a property of a
revision, it MUST fail unless the property is mutable or the
versioned resource has a DAV:auto-version property.
5.5 COPY
When the request-URL or Destination collection of a COPY identifies
a versioned resource, the COPY is applied to the target of that
versioned resource. The behavior of COPY is similar to that of PUT
applied to the Destination of the COPY.
5.6 MKCOL
The behavior of MKCOL is analogous to that of PUT.
5.7 DELETE
When a DELETE request is applied to a member of a working
collection, the specified binding is deleted from that working
collection. When a DELETE is applied to a member of a collection
revision, the DELETE MUST fail unless the versioned collection has
a DAV:auto-version property and no Workspace header has been
specified. In this case, the collection revision is checked out
into the default workspace, the member is deleted from the working
collection, and the working collection is checked in.
If a DELETE request would result in the deletion of a revision from
a baseline, the BIND MUST fail.
Clemm, Kaler [Page 25]
INTERNET-DRAFT WebDAV Versioning January 21, 2000
5.8 BIND
When the request-URL of a BIND identifies a versioned resource, the
BIND is applied to that versioned resource, not to the target of
that versioned resource. The behavior of BIND is similar to that
of PUT applied to the Destination of the BIND.
When the Destination collection of the BIND is a configuration, the
request-URL MUST identify a revision, and the Destination binding
name MUST be the resourceid of that revision. If a BIND request
would result in the addition of a revision to a baseline, the BIND
MUST fail.
5.9 MOVE
When the request-URL of a MOVE identifies a versioned resource, the
MOVE is applied to that versioned resource, not to the target of
that versioned resource. When the Destination collection of the
MOVE is a versioned collection, the new binding is made in the
target of that versioned collection.
5.10LOCK
If a LOCK is successfully applied to a URL, revision selection in
the current workspace is frozen for the duration of the lock for
any versioned resource or versioned collection identified by that
URL or by any slash-terminated prefix of that URL. When revision
selection is frozen for a particular versioned resource in a
workspace, only a CHECKIN of a working resource in that workspace
for that versioned resource causes revision selection to be
recomputed for that versioned resource.
5.11OPTIONS
The OPTIONS method allows the client to discover the level of
versioning support provided by a server.
The following defines the BNF for the Versioning header:
Versioning := "Versioning" ":" Ver-level
Ver-level := "Core"
| "Activity"
| "Versioned-Collection"
6 NEW METHODS
WebDAV versioning introduces two new methods, MKRESOURCE and
REPORT, that are not specific to versioning but are needed to
support the versioning extensions.
Clemm, Kaler [Page 26]
INTERNET-DRAFT WebDAV Versioning January 21, 2000
6.1 MKRESOURCE
The MKRESOURCE method requests the creation of a resource and
initialization of its properties. It allows resources other than
standard data containers and collections to be created and their
properties initialized in one atomic operation.
Preconditions:
A resource MUST NOT exist at the Request-URL.
Request Marshalling:
The location of the new resource to be created is specified by the
Request-URL.
The request body of the MKRESOURCE method MUST consist of the
DAV:propertyupdate XML element defined in Section 12.13 of
[WebDAV].
Postconditions:
If the response status code is 201, a new resource exists at the
request-URL.
The body of the new resource is empty.
The properties of the new resource are as specified by the
DAV:propertyupdate request body, using PROPPATCH semantics. If the
DAV:propertyupdate does not specify a DAV:resourcetype, the
resource will be a standard data container.
If the response status code is not 201, then a new resource is not
created at the request-URL, and any existing resource at the
request-URL is unaffected.
Response Marshalling:
Responses from a MKRESOURCE request SHOULD NOT be cached, as
MKRESOURCE has non-idempotent semantics.
The following status codes can be expected in responses to
MKRESOURCE:
201 (Created): The new resource was successfully created.
207 (Multi-Status): This response is generated if an error was
encountered while initializing the properties of the resource, in
which case the response is as defined in Section 8.2.1 of [WebDAV].
403 (Forbidden): The server does not allow the creation of the
requested resource type at the requested location, or the parent
collection of the request-URL exists but cannot accept members.
409 (Conflict): A resource cannot be created at the request-URL
because the parent collection for the resource does not exist, or
because there is already a resource at that request-URL.
423 (Locked): The request-URL is locked and the lock token was not
specified in the request.
507 (Insufficient Storage): The server does not have sufficient
space to record the state of the resource.
Clemm, Kaler [Page 27]
INTERNET-DRAFT WebDAV Versioning January 21, 2000
6.1.1 Example - MKRESOURCE
MKRESOURCE http://www.webdav.org/repo/worspaces/public HTTP/1.1
Host: www.foo.com
Content-Type: text/xml; charset="utf-8"
Content-Length: xxxx
<?xml version="1.0" encoding="utf-8" ?>
<D:propertyupdate xmlns:D="DAV:">
<D:set>
<D:prop>
<D:resourcetype> <D:workspace-resourcetype/>
</D:resourcetype>
</D:prop>
</D:set>
</D:propertyupdate>
>>Response
HTTP/1.1 200 OK
Content-Type: text/xml; charset="utf-8"
Content-Length: xxxx
6.2 REPORT
The REPORT request is an extensible mechanism for obtaining
information about resources. This differs from OPTIONS in that the
information provided is dynamic. This document defines the
following report types: DAV:available-report, DAV:lock-report,
DAV:compare-report and DAV:conflict-report. The REPORT method MUST
not change the state of any resource managed by the server.
Request Marshalling:
The resource that is the target of the report is specified by the
request-URL.
A Depth header MAY be specified.
The request body of the REPORT method MUST consist of a DAV:report-
request XML element.
Response Marshalling:
The response body of the REPORT method MUST consist of a
DAV:report-response XML element.
The following status codes are used to transmit MKRESOURCE results
back to the client.
200 (OK) - Generated on successful completion of the requested
report. The body of the response is marshaled as a DAV:report-
response.
6.2.1 DAV:report-request
Describes a report request.
Clemm, Kaler [Page 28]
INTERNET-DRAFT WebDAV Versioning January 21, 2000
<!ELEMENT report-request
(available-report-request
| property-report-request
| lock-report-request
| conflict-report-request
| compare-report-request
| ANY)>
6.2.2 DAV:report-response
A DAV:report-response contains an entire report. A response can be
for one of the standard reports (reports, conflict, or compare) or
for a server-defined report. The form of server-defined requests
is not specified.
<!ELEMENT report-response status
(available-report-response
| property-report-response
| lock-report-response
| conflict-report-response
| compare-report-response
| ANY)>
6.3 Available REPORT
The list of reports supported by the resource identified by the
request-URL.
6.3.1 DAV:available-report-request
<!ELEMENT available-report-request EMPTY>
6.3.2DAV:available-report-response
A DAV:available-report-response is a sequence of elements
identifying the supported reports.
<!ELEMENT available-report-response
(available-report
| property-report
| lock-report
| conflict-report
| compare-report
| ANY)*>
<!ELEMENT available-report EMPTY>
<!ELEMENT property-report EMPTY>
<!ELEMENT lock-report EMPTY>
<!ELEMENT conflict-report EMPTY>
<!ELEMENT compare-report EMPTY>
6.3.3Example - Available REPORT
>>Request
Clemm, Kaler [Page 29]
INTERNET-DRAFT WebDAV Versioning January 21, 2000
REPORT http://www.webdav.org/myCollection HTTP/1.1
Content-Type: text/xml; charset="utf-8"
Content-Length: xxxx
Workspace http://www.webdav.org/repo/workspaces/public
<?xml version="1.0" encoding="utf-8" ?>
<D:report-request xmlns:D="DAV:">
<D:available-report/>
</D:report-request>
>>Response
HTTP/1.1 200 OK
Content-Type: text/xml; charset="utf-8"
Content-Length: xxxx
Workspace http://www.webdav.org/repo/workspaces/public
<?xml version="1.0" encoding="utf-8" ?>
<D:report-response xmlns:D="DAV:">
<D:available-report-response>
<DAV:available-report/>
<DAV:conflict-report/>
</D:available-report-response>
</D:report-response>
6.4 Property REPORT
Many properties consist of a set of one or more href elements. The
property REPORT provides a mechanism for retrieving in one request
the properties from all of the resources identified by those href
elements.
6.4.1 DAV:property-report-request
<!ELEMENT property-report-request (property-list)>
<!ELEMENT property-list ...> (TBD)
6.4.2DAV:property-report-response
TBD.
6.4.3Example - Property REPORT
>>Request
REPORT http://www.webdav.org/myCollection HTTP/1.1
Content-Type: text/xml; charset="utf-8"
Content-Length: xxxx
Workspace http://www.webdav.org/repo/workspaces/public
<?xml version="1.0" encoding="utf-8" ?>
<D:report-request xmlns:D="DAV:">
<D:property-report-request>
Clemm, Kaler [Page 30]
INTERNET-DRAFT WebDAV Versioning January 21, 2000
...
</D:property-report-request>
</D:report-request>
>>Response
HTTP/1.1 200 OK
Content-Type: text/xml; charset="utf-8"
Content-Length: xxxx
Workspace http://www.webdav.org/repo/workspaces/public
<?xml version="1.0" encoding="utf-8" ?>
<D:report-response xmlns:D="DAV:">
<D:property-report-response>
...
</D:property-report-response>
</D:report-response>
6.5 Conflict REPORT <Activity>
A conflict report describes the conflicts in a specified workspace
for a specified resource or for all the members of a specified
versioned collection. Conflicts occur when the workspace revision
selection rule selects more than one revision of a particular
versioned resource, resulting in ambiguous revision selection. The
resource to test is specified by the request-URL. Conflicts are
checked in the workspace specified in the Workspace header. If the
Workspace header is not given, the default workspace is used.
Conflicts for all resources transitively reachable from the
request-URL are reported according to the value of the Depth
header. If the Depth header is not specified, the value infinity
is assumed. Conflicts in resources reachable only via a versioned
collection which is itself ambiguous are not reported.
6.5.1DAV:conflict-report-request
<!ELEMENT conflict-report-request EMPTY>
6.5.2DAV:conflict-report-response
A DAV:conflict-report-response contains a DAV:conflict element for
each versioned resource for which the workspace produced a
conflict.
<!ELEMENT conflict-report-response (conflict*)>
<!ELEMENT conflict (href, common-ancestor, contributor,
contributor+)>
<!ELEMENT common-ancestor (#PCDATA)>
Value: segment
<!ELEMENT contributor(#PCDATA)>
Value: segment
Clemm, Kaler [Page 31]
INTERNET-DRAFT WebDAV Versioning January 21, 2000
The DAV:conflict element contains the URL of a versioned resource
for which the revision selection rule generated a conflict, a
DAV:common-ancestor for the conflict, and two or more
DAV:contributor elements for the conflict.
The DAV:common-ancestor element identifies the revision id of a
revision that is a common ancestor of all the DAV:contributor
elements for a particular conflict.
The DAV:contributor element identifies the revision id of 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.
6.5.3Example - Conflict REPORT
>>Request
REPORT http://www.webdav.org/myCollection HTTP/1.1
Content-Type: text/xml; charset="utf-8"
Content-Length: xxxx
Workspace http://www.webdav.org/repo/workspaces/public
<?xml version="1.0" encoding="utf-8" ?>
<D:report-request xmlns:D="DAV:">
<D:conflict-report-request/>
</D:report-request>
>>Response
HTTP/1.1 200 OK
Content-Type: text/xml; charset="utf-8"
Content-Length: xxxx
Workspace http://www.webdav.org/repo/workspaces/public
<?xml version="1.0" encoding="utf-8" ?>
<D:report-response xmlns:D="DAV:">
<D:conflict-report-response>
<D:conflict>
<D:href>http://www.webdav.org/repo/vr/vr732</D:href>
<D:common-ancestor>revisionid:3</D:common-ancestor>
<D:contributor>revisionid:5</D:contributor>
<D:contributor>revisionid:4</D:contributor>
</D:conflict>
</D:conflict-report-response>
</D:report-response>
6.6 Compare REPORT <Activity>
A compare REPORT identifies the differences between the resource
identified by the request-URL (base) and the resources specified in
the body of the request (targets). The comparison is carried out
transitively on any children of the resources according to the
Clemm, Kaler [Page 32]
INTERNET-DRAFT WebDAV Versioning January 21, 2000
value of the Depth header. If the Depth header is not specified,
the value infinity is assumed. Resources appearing in a target but
not in the base are described by DAV:added elements, resources
appearing in the base but not a target are described by DAV:deleted
elements, and resources appearing in both base and target but
having different states are described by DAV:changed elements.
Resource content comparison is not specified, though servers MAY
provide it.
6.6.1DAV:compare-report-request
A DAV:compare- request contains the URL's of the resources to be
compared with the resource identified by the request URL.
<!ELEMENT compare-report-request (href*)>
6.6.2DAV:compare-report-response
A DAV:compare-report-response identifies the differences between
two resources. These differences are indicated by appropriate
DAV:added, DAV:deleted, and DAV:changed elements. For example, if
a DAV:compare-request is applied to two configurations, the
DAV:compare-report-response contains the revisions that are
selected by one configuration but not the other.
<!ELEMENT compare-report-response (added, deleted, changed)*>
<!ELEMENT added (href, ANY*)>
<!ELEMENT deleted (href, ANY*)>
<!ELEMENT changed (href, ANY*)>
A DAV:added element identifies something that appears in a
particular target resource but not in the base.
A DAV:deleted element identifies something that appears in the base
resource but not in a particular target.
A DAV:changed element identifies information that is in both the
base and the target but that has changed in some way. For example,
when two configurations are being compared, a DAV:changed element
can identify a versioned resource if the configurations select
different revisions of that versioned resource.
6.6.3Example - Compare REPORT
>>Request
REPORT /myCollection HTTP/1.1
Host: www.foo.com
Content-Type: text/xml; charset="utf-8"
Content-Length: xxxx
Depth: 1
<?xml version="1.0" encoding="utf-8" ?>
<D:report-request xmlns:D="DAV:">
<D:compare-report-request>
Clemm, Kaler [Page 33]
INTERNET-DRAFT WebDAV Versioning January 21, 2000
<href>http://www.foo.com/myOtherCollection</href>
</D:compare-report-request>
</D:report-request>
>>Response
HTTP/1.1 200 OK
Content-Type: text/xml; charset="utf-8"
Content-Length: xxxx
<?xml version="1.0" encoding="utf-8" ?>
<D:report-response xmlns:D="DAV:">
<D:compare-report-response>
<D:added>
<href>http://www.foo.com/myOtherCollection</href>
</D:added>
<D:added>
<href>http://www.foo.com/myOtherCollection/foo.html</href>
</D:added>
<D:deleted>
<href>http://www.foo.com/myCollection/bar.html</href>
</D:deleted>
</D:compare-report-response>
</D:report-response>
7 NEW VERSIONING METHODS
7.1 VERSION
The VERSION method can be applied to a versionable resource to
produce a new versioned resource whose initial revision is a copy
of the versionable resource.
Preconditions:
The request-URL MUST identify a versionable resource.
Request Marshalling:
The request-URL specifies a versionable resource.
Postconditions:
A new versioned resource is created.
The initial revision of the new versioned resource is a copy of the
versionable resource.
The versionable resource is replaced in its parent collection by
the new versioned resource.
Response Marshalling:
The following status codes can appear in the DAV:status element.
201 (Created) - The versioned resource was successfully created.
Clemm, Kaler [Page 34]
INTERNET-DRAFT WebDAV Versioning January 21, 2000
404 (Not Found) - The request-URL did not identify a resource.
405 (Method Not Allowed) - The selected resource is not a
versionable resource.
7.1.1Example - VERSION
>> REQUEST
VERSION http://www.webdav.org/file HTTP/1.1
Content-type: text/xml; charset="utf-8"
>> RESPONSE
HTTP/1.1 201 Created
Content-type: text/xml; charset="utf-8"
7.2 CHECKOUT
The CHECKOUT method can be applied to a revision of a versioned
resource to produce a working resource that is a modifiable copy of
that revision. If the workspace for the working resource is not
specified in the Workspace header, the server will select a
workspace for it. After a CHECKOUT on a request-URL succeeds, a
subsequent request on that request-URL that specifies that
workspace in a Workspace header will be applied to that working
resource. A CHECKIN request applied to that working resource can
be used to create a new revision of that working resource.
Preconditions:
The request-URL MUST identify either a revision or a versioned
resource whose target is a revision. This is the "selected
revision". The versioned resource for the revision is the
"selected versioned resource".
If the DAV:single-checkout property of the selected revision is
set, this revision MUST not be already checked out (i.e. the
DAV:workspaces collection of the selected revision MUST have no
members).
If the Workspace header is specified, the DAV:no-checkout property
of that workspace MUST not be set.
If the Workspace header is specified, there MUST not be any
revision of the selected versioned resource checked out into that
workspace (i.e. the DAV:workspaces collection of the revision MUST
not contain that workspace).
Request Marshalling:
The request-URL specifies the revision to check out.
The workspace for the working resource MAY be specified in a
Workspace header.
The revision to be checked out MAY be specified in a Revision-
Selector header.
Clemm, Kaler [Page 35]
INTERNET-DRAFT WebDAV Versioning January 21, 2000
Postconditions:
A new working resource that is a copy of the revision is created.
The DAV:predecessor of the new working resource is set to the
selected revision.
The DAV:workspace of the new working resource is set to the
workspace specified in the Workspace header. If no workspace is
specified, then DAV:workspace is set to a workspace selected by the
server. The value of DAV:workspace is the "selected workspace".
The selected workspace is added to the DAV:workspaces collection of
the selected revision.
The working resource is added to the DAV:working-resources
collection of the selected workspace.
If the DAV:current-activity property of the selected workspace is
set, the DAV:activity property of the working resource is set to
that activity.
Response Marshalling:
Results from a CHECKOUT request MUST NOT be cached as CHECKOUT has
non-idempotent semantics.
The CHECKOUT request response MUST contain a DAV:response XML
element, as defined in section 12.9.1 of [RFC2518]. The
DAV:response MUST contain an href containing the DAV:versioned-
resource property of the selected revision, followed by either a
DAV:status containing an error status or a DAV:propstat element
describing properties of the new working resource. The
DAV:workspace property of the working resource must be included in
the DAV:prop element.
The following status codes can appear in the DAV:status element.
201 (Created) - The working resource was successfully created.
404 (Not Found) - The request-URL did not identify a resource.
405 (Method Not Allowed) - The selected resource is not a revision
or the specified Workspace is invalid.
409 (Conflict) - Any other violated pre-condition of the CHECKOUT
request.
7.2.1Example - CHECKOUT
>> REQUEST
CHECKOUT http://www.webdav.org/file HTTP/1.1
Workspace: http://www.webdav.org/workspaces/mywksp
Content-type: text/xml; charset="utf-8"
>> RESPONSE
Clemm, Kaler [Page 36]
INTERNET-DRAFT WebDAV Versioning January 21, 2000
HTTP/1.1 201 Created
Workspace: http://www.webdav.org/workspaces/mywksp
Content-type: text/xml; charset="utf-8"
<?xml version="1.0" encoding="utf-8" ?>
<D:response xmlns:D="DAV:">
<D:href>http://www.webdav.org/workspaces/mywksp/wr/X143</D:href>
<D:status>HTTP/1.1 201 Created</D:status>
</D:response>
7.3 MERGE
The MERGE method can be applied to a working resource to add or
delete predecessors for that working resource.
Preconditions:
The request-URL MUST identify a working resource.
A revision being added to the predecessors of a working resource
MUST share a common ancestor with each of the other predecessors of
the working resource.
A revision being added to the predecessors of working resource MUST
not be an ancestor of one of the other predecessors of the working
resource.
A revision being deleted from the predecessors of a working
resource MUST be one of the predecessors of the working resource.
Request Marshalling:
The request-URL specifies the working resource.
The body of the request contains an XML document with DAV:add and
DAV:delete members.
Postconditions:
The predecessor revisions being added are members of the
DAV:predecessors property of the working resource.
The predecessor revisions being deleted are not members of the
DAV:predecessors property of the working resource.
Response Marshalling:
The following status codes can appear in the DAV:status element.
200 (OK) - The predecessor update was performed..
404 (Not Found) - The request-URL did not identify a resource.
405 (Method Not Allowed) - The selected resource is not a working
resource or the specified Workspace is invalid.
409 (Conflict) - Any other violated pre-condition of the MERGE
request.
Clemm, Kaler [Page 37]
INTERNET-DRAFT WebDAV Versioning January 21, 2000
7.3.1Example - MERGE
>> REQUEST
MERGE http://www.webdav.org/file HTTP/1.1
Workspace "http://www.webdav.org/workspaces/mywksp"
Content-type: text/xml; charset="utf-8"
<?xml version="1.0" encoding="utf-8" ?>
<D:request xmlns:D="DAV:">
<D:add>http://www.webdav.org/repo/vr/VR182/rev/5
</D:response>
>> RESPONSE
HTTP/1.1 200 OK
Workspace "http://www.webdav.org/workspaces/mywksp"
Content-type: text/xml; charset="utf-8"
7.4 UNCHECKOUT
The UNCHECKOUT method can be applied to a working resource of a
versioned resource to cancel the CHECKOUT and delete the working
resource.
Preconditions:
The request-URL MUST identify a working resource.
Request Marshalling:
The request-URL specifies the working resource.
The Workspace header specifies the workspace that contains the
selected working resource. This workspace is the "selected
workspace".
Postconditions:
The selected working resource is removed from the selected
workspace.
Response Marshalling:
The following status codes can appear in the DAV:status element.
200 (OK) - The working resource was successfully deleted.
404 (Not Found) - The request-URL did not identify a resource.
405 (Method Not Allowed) - The selected resource is not a working
resource or the specified Workspace is invalid.
7.4.1Example - UNCHECKOUT
>> REQUEST
UNCHECKOUT http://www.webdav.org/file HTTP/1.1
Workspace: http://www.webdav.org/workspaces/mywksp
Clemm, Kaler [Page 38]
INTERNET-DRAFT WebDAV Versioning January 21, 2000
Content-type: text/xml; charset="utf-8"
>> RESPONSE
HTTP/1.1 200 OK
Workspace: http://www.webdav.org/workspaces/mywksp
7.5 CHECKIN
The CHECKIN method can be applied to a working resource of a
versioned resource to produce a new revision that is a copy of that
working resource. This working resource is the "selected working
resource". The DAV:predecessor of the selected working resource is
the "predecessor revision". The versioned resource that contains
the predecessor revision is the "selected versioned resource". The
DAV:activity of the selected working resource is the "selected
activity". The DAV:workspace property of the working resource is
the "selected workspace". If the server supports mutable
revisions, CHECKIN can be used to overwrite the value of the
revision that is the predecessor of the working resource.
Preconditions:
The request-URL MUST identify a working resource.
Request Marshalling:
The request-URL specifies the working resource.
The Workspace header specifies the workspace that contains the
selected working resource. This workspace is the "selected
workspace".
If a CHECKIN request body is specified, it MUST contain a
DAV:propertyupdate XML element.
Postconditions:
A new revision is created for the selected versioned resource. The
new revision is a copy of the working resource without the
DAV:checkin-policy property, but with the property updates
specified in the CHECKIN request body.
The selected workspace is deleted from the DAV:workspaces
collection of the predecessor revision.
The new revision is added to the DAV:successors collection of the
predecessor revision.
If there is a selected activity, the new revision is added to the
DAV:revisions collection of the selected activity.
If there is a selected label, the new revision is labeled with the
selected label.
If DAV:keep-checked-out is specified, the working-resource is not
deleted, but the DAV:predecessor property of the working resource
is modified to contain the new revision. Otherwise, the selected
working resource is removed from the selected workspace.
Response Marshalling:
Clemm, Kaler [Page 39]
INTERNET-DRAFT WebDAV Versioning January 21, 2000
The following status codes can appear in the DAV:status element.
201 (Created) - The revision was successfully created.
404 (Not Found) - The request-URL did not identify a resource.
405 (Method Not Allowed) - The selected resource is not a working
resource, the specified Workspace is invalid, or the specified
properties in the DAV:propertyupdate element are invalid.
409 (Conflict) - Any other violated pre-condition of the CHECKIN
request.
7.5.1Example - CHECKIN
>> REQUEST
CHECKIN http://www.webdav.org/file HTTP/1.1
Workspace: http://www.webdav.org/workspaces/mywksp
Content-type: text/xml; charset="utf-8"
<? xml version="1.0" encoding="utf-8" ?>
<D:propertyupdate xmlns:D="DAV:">
<D:set>
<D:prop>
<D:checkin-policy>
<D:identical-abort/> </D:checkin-policy>
</D:prop> </D:set>
</D:propertyupdate>
>> RESPONSE
HTTP/1.1 201 Created
Workspace: http://www.webdav.org/workspaces/mywksp
Content-type: text/xml; charset="utf-8"
<?xml version="1.0" encoding="utf-8" ?>
<D:response xmlns:D="DAV:">
<D:href>http://www.webdav.org/repository/vr/23/rev/12</D:href>
<D:status>HTTP/1.1 201 Created</D:status>
</D:response>
7.6 LABEL
The LABEL method is used to add, change, and remove labels on
revisions of a versioned resource.
Preconditions:
The request-URL MUST identify a revision of a versioned resource.
Request Marshalling:
The request-URL specifies the revision.
Clemm, Kaler [Page 40]
INTERNET-DRAFT WebDAV Versioning January 21, 2000
The body of the request contains an XML document with either a
DAV:add or a DAV:delete member.
Postconditions:
The specified labels have been added and deleted from the specified
revision.
Response Marshalling:
The following status codes can appear in the DAV:status element.
200 (OK) - The label update was performed.
400 (Bad Request) - The specified label was not a legal segment.
404 (Not Found) - The request-URL did not identify a resource.
405 (Method Not Allowed) - The selected resource is not a revision.
7.6.1Example - LABEL
>> REQUEST
LABEL http://www.webdav.org/file HTTP/1.1
Workspace "http://www.webdav.org/workspaces/mywksp"
Content-type: text/xml; charset="utf-8"
<?xml version="1.0" encoding="utf-8" ?>
<D:request xmlns:D="DAV:">
<D:add>stable</D:add>
</D:response>
>> RESPONSE
HTTP/1.1 200 OK
Workspace "http://www.webdav.org/workspaces/mywksp"
Content-type: text/xml; charset="utf-8"
8 NEW VERSIONING HEADERS
8.1 Workspace
The following defines the BNF for the Workspace header:
Workspace := "Workspace" ":" Workspace-URL
| "Workspace" ":"
Examples of a workspace header are:
Workspace: http://www.webdav.org/workspaces/public
Workspace:
Whenever a server encounters a versioned resource while it is
processing an HTTP request, it is required to act on the target of
the versioned resource, rather than the versioned resource itself.
The Workspace header specifies which workspace will be used to
determine the target. If there is a working resource in that
Clemm, Kaler [Page 41]
INTERNET-DRAFT WebDAV Versioning January 21, 2000
workspace for that versioned resource, that working resource is
selected. Otherwise, the revision specified by the DAV:revision-
selection-rule property of the workspace is selected.
If the Workspace-URL is omitted in the Workspace header, the
versioned resource itself is the target of the request. This allows
a client to access the properties of the versioned resource itself.
If no Workspace header is specified, a default workspace determined
by the server is used.
A server MUST return a Vary header containing "Workspace" in any
response that includes a Workspace header.
8.2 Revision-Selector
The following defines the BNF for the Revision-Selector header:
Revision-Selector := "Revision-Selector" ":" "id" segment
| " Revision-Selector" ":" "label" segment
Examples of a Revision-Selector header are:
Revision-Selector: id "Rev178AE8"
Revision-Selector: label "released"
When the target of a request-URL would otherwise be a working
resource or a revision of a versioned resource, a Revision-Selector
header causes the revision identified by the specified id or label
to be selected instead.
A server MUST return a Vary header containing "Revision-Selector"
in any response that includes a Revision-Selector header.
9 INTERNATIONALIZATION CONSIDERATIONS
To be supplied.
10 SECURITY CONSIDERATIONS
To be supplied.
11 SCALABILITY
To be supplied.
12 AUTHENTICATION
Authentication mechanisms defined in WebDAV will also apply to
WebDAV Versioning.
13 IANA CONSIDERATIONS
This document uses the namespace defined by [RFC2518] for XML
elements. All other IANA considerations mentioned in [RFC2518]
also applicable to WebDAV Versioning.
Clemm, Kaler [Page 42]
INTERNET-DRAFT WebDAV Versioning January 21, 2000
14 INTELLECTUAL PROPERTY
The following notice is copied from RFC 2026, section 10.4, and
describes the position of the IETF concerning intellectual property
claims made against this document.
The IETF takes no position regarding the validity or scope of any
intellectual property or other rights that might be claimed to
pertain to the implementation or use other technology described in
this document or the extent to which any license under such rights
might or might not be available; neither does it represent that it
has made any effort to identify any such rights. Information on
the IETF's procedures with respect to rights in standards-track and
standards-related documentation can be found in BCP-11. Copies of
claims of rights made available for publication and any assurances
of licenses to be made available, or the result of an attempt made
to obtain a general license or permission for the use of such
proprietary rights by implementers or users of this specification
can be obtained from the IETF Secretariat.
The IETF invites any interested party to bring to its attention any
copyrights, patents or patent applications, or other proprietary
rights which may cover technology that may be required to practice
this standard. Please address the information to the IETF
Executive Director.
15 ACKNOWLEDGEMENTS
This protocol is the collaborative product of the Delta-V design
team: Jim Amsden (IBM, DeltaV Chair), Geoffrey Clemm (Rational),
Bruce Cragun (Novell), David Durand (INSO), Chris Kaler
(Microsoft), Jeff McAffer (OTI), Bradley Sergeant (Merant), and Jim
Whitehead (UC Irvine). We would like to acknowledge the foundation
laid for us by the authors of the WebDAV and HTTP protocols upon
which this protocol is layered, and the invaluable feedback from
the WebDAV and DeltaV working groups.
16 INDEX
To be supplied.
17 REFERENCES
[RFC2026] S.Bradner, "The Internet Standards Process", Harvard,
1996, <http://www.ietf.org/rfc/rfc2026.txt>.
[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, 1997,
<http://www.ietf.org/rfc/rfc2068.txt >.
Clemm, Kaler [Page 43]
INTERNET-DRAFT WebDAV Versioning January 21, 2000
[RFC2119] S.Bradner, "Key words for use in RFCs to Indicate
Requirement Levels", Harvard, 1997,
<http://www.ietf.org/rfc/rfc2119.txt >.
[RFC2396] T.Berners-Lee, R.Fielding, L.Masinter, Uniform Resource
Identifiers (URI): Generic Syntax÷, MIT/LCS, U.C. Irvine, Xerox,
1998, <http://www.ietf.org/rfc/rfc2396.txt>.
[RFC2518] Y. Goland, E.Whitehead, A.Faizi, S.R.Carter, D.Jensen,
"HTTP Extensions for Distributed Authoring - WEBDAV", Microsoft,
U.C.Irvine, Netscape, Novell, 1999
<http://www.ietf.org/rfc/rfc2518.txt>.
[Binding] J.Slein, E.Whitehead, J.Davis, G.Clemm, C.Fay,
J.Crawford, T.Chihaya, "WebDAV Bindings", Xerox, U.C.Irvine,
CourseNet, Rational, FileNet, DataChannel, 1999,
<http://www.ietf.org/internet-drafts/draft-ietf-webdav-binding-
protocol-01.txt>
[Goals] J.Amsden, C.Kaler, J.Stracke, "Goals for Web Versioning",
IBM, Microsoft, Netscape, 1999, <http://www.ietf.org/internet-
drafts/draft-ietf-webdav-version-goals-01.txt>
18 AUTHORS' ADDRESSES
Geoffrey Clemm
Rational Software
20 Maguire Road
Lexington, MA
Email: geoffrey.clemm@rational.com
Christopher Kaler
Microsoft
One Microsoft Way
Redmond WA, 9085-6933
Email: ckaler@microsoft.com
19 OPEN ISSUES
The following list identifies key open issues against this
document:
@ TODO: Allow activity and workspace as CHECKIN request-URL.
@ TODO: Allow CHECKOUT to apply to a versionable resource (like
LOCK).
@ TODO: Describe how MKRESOURCE can be used to create a baseline.
@ TODO: Describe how BIND can mount the root versioned collection
of a repository at an arbitrary URL, even at another authority.
@ TODO: Mention that the If-Modified-Since header cannot be used to
reliably cache versioned resource information since the
modification date can decrease.
Clemm, Kaler [Page 44]
INTERNET-DRAFT WebDAV Versioning January 21, 2000
@ Does Versioning have to be a header, or can it be the body of the
OPTIONS response?
@ Couldn't MKRESOURCE be handled just by allowing PROPPATCH to be
applied to a null resource?
@ Do members of a versioned collection revision have to be
versioned resources?
@ Should the server be allowed to restrict where activities,
workspaces, and configurations are located in the URL namespace?
@ Can there be any working resources under a collection when a
baseline for that collection is created?
@ Should we define which properties are optional, and which can
have an empty string as a value?
@ Should there be an options call to enumerate the repositories and
workspaces ?
@ Is there already an DAV property like DAV:author?
@ Should dead properties like DAV:author and DAV:comment be in
another document
METHOD Template
Preconditions:
{What are the expected preconditions of the method, and what
happens if these preconditions are violated. For example, a common
precondition is the resource identified by the Request-URI must
exist.}
Request Marshalling:
{How are the arguments for the method marshalled. For WebDAV, this
includes stating which headers must be present, and which XML
elements are present in the request body.}
Postconditions:
{It states the postconditions of the method, giving easily
validated postconditions. Some examples of postconditions are
effects on the state of the resource, including body and
properties, and effects on the resource's parent collection.
Postconditions will often vary depending on the type of the
resource executing the method.}
Response Marshalling:
{It states how the results of the method are marshalled, including
the response for success, and the responses which are generated
when the postconditions cannot be achieved.}
Effect on Existing Resource Types:
{How does this method work on all the different types of resources
defined so far (collections, redirect references, ordinary
resources, etc.)}
Clemm, Kaler [Page 45]