summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc3253.txt
diff options
context:
space:
mode:
Diffstat (limited to 'doc/rfc/rfc3253.txt')
-rw-r--r--doc/rfc/rfc3253.txt6611
1 files changed, 6611 insertions, 0 deletions
diff --git a/doc/rfc/rfc3253.txt b/doc/rfc/rfc3253.txt
new file mode 100644
index 0000000..4e18dfd
--- /dev/null
+++ b/doc/rfc/rfc3253.txt
@@ -0,0 +1,6611 @@
+
+
+
+
+
+
+Network Working Group G. Clemm
+Request for Comments: 3253 Rational Software
+Category: Standards Track J. Amsden
+ T. Ellison
+ IBM
+ C. Kaler
+ Microsoft
+ J. Whitehead
+ U.C. Santa Cruz
+ March 2002
+
+
+ Versioning Extensions to WebDAV
+ (Web Distributed Authoring and Versioning)
+
+Status of this Memo
+
+ This document specifies an Internet standards track protocol for the
+ Internet community, and requests discussion and suggestions for
+ improvements. Please refer to the current edition of the "Internet
+ Official Protocol Standards" (STD 1) for the standardization state
+ and status of this protocol. Distribution of this memo is unlimited.
+
+Copyright Notice
+
+ Copyright (C) The Internet Society (2002). All Rights Reserved.
+
+Abstract
+
+ This document specifies a set of methods, headers, and resource types
+ that define the WebDAV (Web Distributed Authoring and Versioning)
+ versioning extensions to the HTTP/1.1 protocol. WebDAV versioning
+ will minimize the complexity of clients that are capable of
+ interoperating with a variety of versioning repository managers, to
+ facilitate widespread deployment of applications capable of utilizing
+ the WebDAV Versioning services. WebDAV versioning includes automatic
+ versioning for versioning-unaware clients, version history
+ management, workspace management, baseline management, activity
+ management, and URL namespace versioning.
+
+Table of Contents
+
+ 1 Introduction.................................................... 6
+ 1.1 Relationship to WebDAV........................................ 7
+ 1.2 Notational Conventions........................................ 8
+ 1.3 Terms......................................................... 8
+ 1.4 Property Values............................................... 11
+ 1.4.1 Initial Property Value..................................... 11
+
+
+
+Clemm, et al. Standards Track [Page 1]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ 1.4.2 Protected Property Value................................... 12
+ 1.4.3 Computed Property Value.................................... 12
+ 1.4.4 Boolean Property Value..................................... 12
+ 1.4.5 DAV:href Property Value.................................... 12
+ 1.5 DAV Namespace XML Elements.................................... 12
+ 1.6 Method Preconditions and Postconditions....................... 12
+ 1.6.1 Example - CHECKOUT request................................. 13
+ 1.7 Clarification of COPY Semantics with Overwrite:T.............. 13
+ 1.8 Versioning Methods and Write Locks............................ 14
+ 2 Basic Versioning Features....................................... 14
+ 2.1 Basic Versioning Packages..................................... 14
+ 2.2 Basic Versioning Semantics.................................... 16
+ 2.2.1 Creating a Version-Controlled Resource..................... 16
+ 2.2.2 Modifying a Version-Controlled Resource.................... 17
+ 2.2.3 Reporting.................................................. 19
+ 3 Version-Control Feature......................................... 20
+ 3.1 Additional Resource Properties................................ 20
+ 3.1.1 DAV:comment................................................ 20
+ 3.1.2 DAV:creator-displayname.................................... 20
+ 3.1.3 DAV:supported-method-set (protected)....................... 20
+ 3.1.4 DAV:supported-live-property-set (protected)................ 21
+ 3.1.5 DAV:supported-report-set (protected)....................... 21
+ 3.2 Version-Controlled Resource Properties........................ 21
+ 3.2.1 DAV:checked-in (protected)................................. 21
+ 3.2.2 DAV:auto-version........................................... 22
+ 3.3 Checked-Out Resource Properties............................... 22
+ 3.3.1 DAV:checked-out (protected)................................ 23
+ 3.3.2 DAV:predecessor-set........................................ 23
+ 3.4 Version Properties............................................ 23
+ 3.4.1 DAV:predecessor-set (protected)............................ 23
+ 3.4.2 DAV:successor-set (computed)............................... 23
+ 3.4.3 DAV:checkout-set (computed)................................ 23
+ 3.4.4 DAV:version-name (protected)............................... 24
+ 3.5 VERSION-CONTROL Method........................................ 24
+ 3.5.1 Example - VERSION-CONTROL.................................. 25
+ 3.6 REPORT Method................................................. 25
+ 3.7 DAV:version-tree Report....................................... 26
+ 3.7.1 Example - DAV:version-tree Report.......................... 27
+ 3.8 DAV:expand-property Report.................................... 29
+ 3.8.1 Example - DAV:expand-property.............................. 30
+ 3.9 Additional OPTIONS Semantics.................................. 31
+ 3.10 Additional PUT Semantics..................................... 31
+ 3.11 Additional PROPFIND Semantics................................ 32
+ 3.12 Additional PROPPATCH Semantics............................... 33
+ 3.13 Additional DELETE Semantics.................................. 33
+ 3.14 Additional COPY Semantics.................................... 34
+ 3.15 Additional MOVE Semantics.................................... 34
+ 3.16 Additional UNLOCK Semantics.................................. 35
+
+
+
+Clemm, et al. Standards Track [Page 2]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ 4 Checkout-In-Place Feature....................................... 35
+ 4.1 Additional Version Properties................................. 35
+ 4.1.1 DAV:checkout-fork.......................................... 36
+ 4.1.2 DAV:checkin-fork........................................... 36
+ 4.2 Checked-Out Resource Properties............................... 36
+ 4.2.1 DAV:checkout-fork.......................................... 36
+ 4.2.2 DAV:checkin-fork........................................... 37
+ 4.3 CHECKOUT Method............................................... 37
+ 4.3.1 Example - CHECKOUT......................................... 38
+ 4.4 CHECKIN Method................................................ 38
+ 4.4.1 Example - CHECKIN.......................................... 40
+ 4.5 UNCHECKOUT Method............................................. 40
+ 4.5.1 Example - UNCHECKOUT....................................... 41
+ 4.6 Additional OPTIONS Semantics.................................. 42
+ 5 Version-History Feature......................................... 42
+ 5.1 Version History Properties.................................... 42
+ 5.1.1 DAV:version-set (protected)................................ 42
+ 5.1.2 DAV:root-version (computed)................................ 42
+ 5.2 Additional Version-Controlled Resource Properties............. 42
+ 5.2.1 DAV:version-history (computed)............................. 43
+ 5.3 Additional Version Properties................................. 43
+ 5.3.1 DAV:version-history (computed)............................. 43
+ 5.4 DAV:locate-by-history Report.................................. 43
+ 5.4.1 Example - DAV:locate-by-history Report..................... 44
+ 5.5 Additional OPTIONS Semantics.................................. 45
+ 5.6 Additional DELETE Semantics................................... 46
+ 5.7 Additional COPY Semantics..................................... 46
+ 5.8 Additional MOVE Semantics..................................... 46
+ 5.9 Additional VERSION-CONTROL Semantics.......................... 46
+ 5.10 Additional CHECKIN Semantics................................. 47
+ 6 Workspace Feature............................................... 47
+ 6.1 Workspace Properties.......................................... 48
+ 6.1.1 DAV:workspace-checkout-set (computed)...................... 48
+ 6.2 Additional Resource Properties................................ 48
+ 6.2.1 DAV:workspace (protected).................................. 48
+ 6.3 MKWORKSPACE Method............................................ 48
+ 6.3.1 Example - MKWORKSPACE...................................... 49
+ 6.4 Additional OPTIONS Semantics.................................. 49
+ 6.4.1 Example - OPTIONS.......................................... 51
+ 6.5 Additional DELETE Semantics................................... 51
+ 6.6 Additional MOVE Semantics..................................... 52
+ 6.7 Additional VERSION-CONTROL Semantics.......................... 52
+ 6.7.1 Example - VERSION-CONTROL.................................. 53
+ 7 Update Feature.................................................. 53
+ 7.1 UPDATE Method................................................. 53
+ 7.1.1 Example - UPDATE........................................... 55
+ 7.2 Additional OPTIONS Semantics.................................. 55
+ 8 Label Feature................................................... 56
+
+
+
+Clemm, et al. Standards Track [Page 3]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ 8.1 Additional Version Properties................................. 56
+ 8.1.1 DAV:label-name-set (protected)............................. 56
+ 8.2 LABEL Method.................................................. 56
+ 8.2.1 Example - Setting a label.................................. 58
+ 8.3 Label Header.................................................. 58
+ 8.4 Additional OPTIONS Semantics.................................. 59
+ 8.5 Additional GET Semantics...................................... 59
+ 8.6 Additional PROPFIND Semantics................................. 59
+ 8.7 Additional COPY Semantics..................................... 60
+ 8.8 Additional CHECKOUT Semantics................................. 60
+ 8.9 Additional UPDATE Semantics................................... 61
+ 9 Working-Resource Feature........................................ 62
+ 9.1 Additional Version Properties................................. 62
+ 9.1.1 DAV:checkout-fork.......................................... 62
+ 9.1.2 DAV:checkin-fork........................................... 63
+ 9.2 Working Resource Properties................................... 63
+ 9.2.1 DAV:auto-update (protected)................................ 63
+ 9.2.2 DAV:checkout-fork.......................................... 63
+ 9.2.3 DAV:checkin-fork........................................... 63
+ 9.3 CHECKOUT Method (applied to a version)........................ 63
+ 9.3.1 Example - CHECKOUT of a version............................ 65
+ 9.4 CHECKIN Method (applied to a working resource)................ 65
+ 9.4.1 Example - CHECKIN of a working resource.................... 66
+ 9.5 Additional OPTIONS Semantics.................................. 67
+ 9.6 Additional COPY Semantics..................................... 67
+ 9.7 Additional MOVE Semantics..................................... 67
+ 10 Advanced Versioning Features.................................. 67
+ 10.1 Advanced Versioning Packages................................. 68
+ 10.2 Advanced Versioning Terms.................................... 68
+ 11 MERGE Feature................................................. 70
+ 11.1 Additional Checked-Out Resource Properties................... 70
+ 11.1.1 DAV:merge-set............................................. 70
+ 11.1.2 DAV:auto-merge-set........................................ 71
+ 11.2 MERGE Method................................................. 71
+ 11.2.1 Example - MERGE........................................... 74
+ 11.3 DAV:merge-preview Report..................................... 75
+ 11.3.1 Example - DAV:merge-preview Report........................ 76
+ 11.4 Additional OPTIONS Semantics................................. 77
+ 11.5 Additional DELETE Semantics.................................. 77
+ 11.6 Additional CHECKIN Semantics................................. 77
+ 12 Baseline Feature.............................................. 77
+ 12.1 Version-Controlled Configuration Properties.................. 78
+ 12.1.1 DAV:baseline-controlled-collection (protected)............ 78
+ 12.2 Checked-Out Configuration Properties......................... 78
+ 12.2.1 DAV:subbaseline-set....................................... 78
+ 12.3 Baseline Properties.......................................... 78
+ 12.3.1 DAV:baseline-collection (protected)....................... 79
+ 12.3.2 DAV:subbaseline-set (protected)........................... 79
+
+
+
+Clemm, et al. Standards Track [Page 4]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ 12.4 Additional Resource Properties............................... 79
+ 12.4.1 DAV:version-controlled-configuration (computed)........... 79
+ 12.5 Additional Workspace Properties.............................. 80
+ 12.5.1 DAV:baseline-controlled-collection-set (computed)......... 80
+ 12.6 BASELINE-CONTROL Method...................................... 80
+ 12.6.1 Example - BASELINE-CONTROL................................ 82
+ 12.7 DAV:compare-baseline Report.................................. 84
+ 12.7.1 Example - DAV:compare-baseline Report..................... 85
+ 12.8 Additional OPTIONS Semantics................................. 86
+ 12.9 Additional MKCOL Semantics................................... 86
+ 12.10 Additional COPY Semantics................................... 86
+ 12.11 Additional CHECKOUT Semantics............................... 86
+ 12.12 Additional CHECKIN Semantics................................ 86
+ 12.13 Additional UPDATE Semantics................................. 87
+ 12.14 Additional MERGE Semantics.................................. 89
+ 13 Activity Feature.............................................. 90
+ 13.1 Activity Properties.......................................... 91
+ 13.1.1 DAV:activity-version-set (computed)....................... 91
+ 13.1.2 DAV:activity-checkout-set (computed)...................... 92
+ 13.1.3 DAV:subactivity-set....................................... 92
+ 13.1.4 DAV:current-workspace-set (computed)...................... 92
+ 13.2 Additional Version Properties................................ 92
+ 13.2.1 DAV:activity-set.......................................... 93
+ 13.3 Additional Checked-Out Resource Properties................... 93
+ 13.3.1 DAV:unreserved............................................ 93
+ 13.3.2 DAV:activity-set.......................................... 93
+ 13.4 Additional Workspace Properties.............................. 93
+ 13.4.1 DAV:current-activity-set.................................. 94
+ 13.5 MKACTIVITY Method............................................ 94
+ 13.5.1 Example - MKACTIVITY...................................... 95
+ 13.6 DAV:latest-activity-version Report........................... 95
+ 13.7 Additional OPTIONS Semantics................................. 96
+ 13.8 Additional DELETE Semantics.................................. 96
+ 13.9 Additional MOVE Semantics.................................... 97
+ 13.10 Additional CHECKOUT Semantics............................... 97
+ 13.10.1 Example - CHECKOUT with an activity...................... 98
+ 13.11 Additional CHECKIN Semantics................................ 99
+ 13.12 Additional MERGE Semantics.................................. 99
+ 14 Version-Controlled-Collection Feature.........................100
+ 14.1 Version-Controlled Collection Properties.....................102
+ 14.1.1 DAV:eclipsed-set (computed)...............................102
+ 14.2 Collection Version Properties................................103
+ 14.2.1 DAV:version-controlled-binding-set (protected)............103
+ 14.3 Additional OPTIONS Semantics.................................103
+ 14.4 Additional DELETE Semantics..................................103
+ 14.5 Additional MKCOL Semantics...................................104
+ 14.6 Additional COPY Semantics....................................104
+ 14.7 Additional MOVE Semantics....................................104
+
+
+
+Clemm, et al. Standards Track [Page 5]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ 14.8 Additional VERSION-CONTROL Semantics.........................104
+ 14.9 Additional CHECKOUT Semantics................................105
+ 14.10 Additional CHECKIN Semantics................................105
+ 14.11 Additional UPDATE and MERGE Semantics.......................106
+ 15 Internationalization Considerations...........................106
+ 16 Security Considerations.......................................107
+ 16.1 Auditing and Traceability....................................107
+ 16.2 Increased Need for Access Control............................108
+ 16.3 Security Through Obscurity...................................108
+ 16.4 Denial of Service............................................108
+ 17 IANA Considerations...........................................109
+ 18 Intellectual Property.........................................109
+ 19 Acknowledgements..............................................109
+ 20 References....................................................110
+ Appendix A - Resource Classification..............................111
+ A.1 DeltaV-Compliant Unmapped URL.................................111
+ A.2 DeltaV-Compliant Resource.....................................111
+ A.3 DeltaV-Compliant Collection...................................112
+ A.4 Versionable Resource..........................................112
+ A.5 Version-Controlled Resource...................................112
+ A.6 Version.......................................................113
+ A.7 Checked-In Version-Controlled Resource........................113
+ A.8 Checked-Out Resource..........................................113
+ A.9 Checked-Out Version-Controlled Resource.......................114
+ A.10 Working Resource.............................................114
+ A.11 Version History..............................................114
+ A.12 Workspace....................................................115
+ A.13 Activity.....................................................115
+ A.14 Version-Controlled Collection................................115
+ A.15 Collection Version...........................................115
+ A.16 Version-Controlled Configuration.............................116
+ A.17 Baseline.....................................................116
+ A.18 Checked-Out Version-Controlled Configuration.................116
+ Authors' Addresses................................................117
+ Full Copyright Statement..........................................118
+
+1 Introduction
+
+ This document specifies a set of methods, headers, and properties
+ that define the WebDAV (Web Distributed Authoring and Versioning)
+ versioning extensions to the HTTP/1.1 protocol. Versioning is
+ concerned with tracking and accessing the history of important states
+ of a web resource, such as a standalone web page. The benefits of
+ versioning in the context of the worldwide web include:
+
+
+
+
+
+
+
+Clemm, et al. Standards Track [Page 6]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ - A resource has an explicit history and a persistent identity
+ across the various states it has had during the course of that
+ history. It allows browsing through past and alternative versions
+ of a resource. Frequently the modification and authorship history
+ of a resource is critical information in itself.
+
+ - Resource states (versions) are given stable names that can support
+ externally stored links for annotation and link server support.
+ Both annotation and link servers frequently need to store stable
+ references to portions of resources that are not under their
+ direct control. By providing stable states of resources, version
+ control systems allow not only stable pointers into those
+ resources, but also well defined methods to determine the
+ relationships of those states of a resource.
+
+ WebDAV Versioning defines both basic and advanced versioning
+ functionality.
+
+ Basic versioning allows users to:
+
+ - Put a resource under version control
+ - Determine whether a resource is under version control
+ - Determine whether a resource update will automatically be captured
+ as a new version
+ - Create and access distinct versions of a resource
+
+ Advanced versioning provides additional functionality for parallel
+ development and configuration management of sets of web resources.
+
+ This document will first define the properties and method semantics
+ for the basic versioning features, and then define the additional
+ properties and method semantics for the advanced versioning features.
+ An implementer that is only interested in basic versioning should
+ skip the advanced versioning sections (Section 10 to Section 14).
+
+1.1 Relationship to WebDAV
+
+ To maximize interoperability and the use of existing protocol
+ functionality, versioning support is designed as extensions to the
+ WebDAV protocol [RFC2518], which itself is an extension to the HTTP
+ protocol [RFC2616]. All method marshalling and postconditions
+ defined by RFC 2518 and RFC 2616 continue to hold, to ensure that
+ versioning unaware clients can interoperate successfully with
+ versioning servers. Although the versioning extensions are designed
+ to be orthogonal to most aspects of the WebDAV and HTTP protocols, a
+ clarification to RFC 2518 is required for effective interoperable
+ versioning. This clarification is described in Section 1.7.
+
+
+
+
+Clemm, et al. Standards Track [Page 7]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+1.2 Notational Conventions
+
+ 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 RFC 2119.
+
+ The term "protected" is placed in parentheses following the
+ definition of a protected property (see Section 1.4.2).
+
+ The term "computed" is placed in parentheses following the definition
+ of a computed property (see Section 1.4.3).
+
+ When an XML element type in the "DAV:" namespace is referenced in
+ this document outside of the context of an XML fragment, the string
+ "DAV:" will be prefixed to the element type.
+
+ When a method is defined in this document, a list of preconditions
+ and postconditions will be defined for that method. If the semantics
+ of an existing method is being extended, a list of additional
+ preconditions and postconditions will be defined. A precondition or
+ postcondition is prefixed by a parenthesized XML element type that
+ identifies that precondition or postcondition (see Section 1.6).
+
+1.3 Terms
+
+ This document uses the terms defined in RFC 2616, in RFC 2518, and in
+ this section. Section 2.2 defines the semantic versioning model
+ underlying this terminology.
+
+ Version Control, Checked-In, Checked-Out
+
+ "Version control" is a set of constraints on how a resource can be
+ updated. A resource under version control is either in a
+ "checked-in" or "checked-out" state, and the version control
+ constraints apply only while the resource is in the checked-in
+ state.
+
+ Versionable Resource
+
+ A "versionable resource" is a resource that can be put under
+ version control.
+
+ Version-Controlled Resource
+
+ When a versionable resource is put under version control, it
+ becomes a "version-controlled resource". A version-controlled
+ resource can be "checked out" to allow modification of its content
+ or dead properties by standard HTTP and WebDAV methods.
+
+
+
+Clemm, et al. Standards Track [Page 8]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ Checked-Out Resource
+
+ A "checked-out resource" is a resource under version control that
+ is in the checked-out state.
+
+ Version Resource
+
+ A "version resource", or simply "version", is a resource that
+ contains a copy of a particular state (content and dead
+ properties) of a version-controlled resource. A version is
+ created by "checking in" a checked-out resource. The server
+ allocates a distinct new URL for each new version, and this URL
+ will never be used to identify any resource other than that
+ version. The content and dead properties of a version never
+ change.
+
+ Version History Resource
+
+ A "version history resource", or simply "version history", is a
+ resource that contains all the versions of a particular version-
+ controlled resource.
+
+ Version Name
+
+ A "version name" is a string chosen by the server to distinguish
+ one version of a version history from the other versions of that
+ version history. Versions from different version histories may
+ have the same version name.
+
+ Predecessor, Successor, Ancestor, Descendant
+
+ When a version-controlled resource is checked out and then
+ subsequently checked in, the version that was checked out becomes
+ a "predecessor" of the version created by the checkin. A client
+ can specify multiple predecessors for a new version if the new
+ version is logically a merge of those predecessors. When a
+ version is connected to another version by traversing one or more
+ predecessor relations, it is called an "ancestor" of that version.
+ The inverse of the predecessor and ancestor relations are the
+ "successor" and "descendant" relations. Therefore, if X is a
+ predecessor of Y, then Y is a successor of X, and if X is an
+ ancestor of Y, then Y is a descendant of X.
+
+ Root Version Resource
+
+ The "root version resource", or simply "root version", is the
+ version in a version history that is an ancestor of every other
+ version in that version history.
+
+
+
+Clemm, et al. Standards Track [Page 9]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ Workspace Resource
+
+ A "workspace resource", or simply "workspace", is a collection
+ that contains at most one version-controlled resource for a given
+ version history (see Section 6).
+
+ Working Resource
+
+ A "working resource" is a checked-out resource created by the
+ server at a server-defined URL when a version (instead of a
+ version-controlled resource) is checked out. Unlike a checked-out
+ version-controlled resource, a working resource is deleted when it
+ is checked in.
+
+ Fork, Merge
+
+ When a second successor is added to a version, this creates a
+ "fork" in the version history. When a version is created with
+ multiple predecessors, this creates a "merge" in the version
+ history. A server may restrict the version history to be linear
+ (with no forks or merges), but an interoperable versioning client
+ should be prepared to deal with both forks and merges in the
+ version history.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Clemm, et al. Standards Track [Page 10]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ The following diagram illustrates several of the previous
+ definitions. Each box represents a version and each line between two
+ boxes represents a predecessor/successor relationship. For example,
+ it shows V3 is a predecessor of V5, V7 is a successor of V5, V1 is an
+ ancestor of V4, and V7 is a descendant of V4. It also shows that
+ there is a fork at version V2 and a merge at version V7.
+
+ History of foo.html
+
+ +---+
+ Root Version -------> | | V1
+ +---+ ^
+ | |
+ | |
+ +---+ |
+ Version Name ----> V2 | | | Ancestor
+ +---+ |
+ / \ |
+ / \ |
+ +---+ +---+
+ | | V3 | | V4
+ ^ +---+ +---+
+ | | | |
+ Predecessor | | | |
+ +---+ +---+ |
+ | | V5 | | V6 | Descendant
+ +---+ +---+ |
+ Successor | \ / |
+ | \ / |
+ v +---+ v
+ | | V7
+ +---+
+
+ Label
+
+ A "label" is a name that can be used to select a version from a
+ version history. A label can be assigned by either a client or
+ the server. The same label can be used in different version
+ histories.
+
+1.4 Property Values
+
+1.4.1 Initial Property Value
+
+ Unless an initial value of a property of a given type is defined by
+ this document, the initial value of a property of that type is
+ implementation dependent.
+
+
+
+
+Clemm, et al. Standards Track [Page 11]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+1.4.2 Protected Property Value
+
+ When a property of a specific kind of resource is "protected", the
+ property value cannot be updated on that kind of resource except by a
+ method explicitly defined as updating that specific property. In
+ particular, a protected property cannot be updated with a PROPPATCH
+ request. Note that a given property can be protected on one kind of
+ resource, but not protected on another kind of resource.
+
+1.4.3 Computed Property Value
+
+ When a property is "computed", its value is defined in terms of a
+ computation based on the content and other properties of that
+ resource, or even of some other resource. When the semantics of a
+ method is defined in this document, the effect of that method on
+ non-computed properties will be specified; the effect of that method
+ on computed properties will not be specified, but can be inferred
+ from the computation defined for those properties. A computed
+ property is always a protected property.
+
+1.4.4 Boolean Property Value
+
+ Some properties take a Boolean value of either "false" or "true".
+
+1.4.5 DAV:href Property Value
+
+ The DAV:href XML element is defined in RFC 2518, Section 12.3.
+
+1.5 DAV Namespace XML Elements in Request and Response Bodies
+
+ Although WebDAV request and response bodies can be extended by
+ arbitrary XML elements, which can be ignored by the message
+ recipient, an XML element in the DAV namespace MUST NOT be used in
+ the request or response body of a versioning method unless that XML
+ element is explicitly defined in an IETF RFC.
+
+1.6 Method Preconditions and Postconditions
+
+ A "precondition" of a method describes the state of the server that
+ must be true for that method to be performed. A "postcondition" of a
+ method describes the state of the server that must be true after that
+ method has been completed. If a method precondition or postcondition
+ for a request is not satisfied, the response status of the request
+ MUST be either 403 (Forbidden) if the request should not be repeated
+ because it will always fail, or 409 (Conflict) if it is expected that
+ the user might be able to resolve the conflict and resubmit the
+ request.
+
+
+
+
+Clemm, et al. Standards Track [Page 12]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ In order to allow better client handling of 403 and 409 responses, a
+ distinct XML element type is associated with each method precondition
+ and postcondition of a request. When a particular precondition is
+ not satisfied or a particular postcondition cannot be achieved, the
+ appropriate XML element MUST be returned as the child of a top-level
+ DAV:error element in the response body, unless otherwise negotiated
+ by the request. In a 207 Multi-Status response, the DAV:error
+ element would appear in the appropriate DAV:responsedescription
+ element.
+
+1.6.1 Example - CHECKOUT request with DAV:must-be-checked-in response
+
+ >>REQUEST
+
+ CHECKOUT /foo.html HTTP/1.1
+ Host: www.webdav.org
+
+ >>RESPONSE
+
+ HTTP/1.1 409 Conflict
+ Content-Type: text/xml; charset="utf-8"
+ Content-Length: xxxx
+
+ <?xml version="1.0" encoding="utf-8" ?>
+ <D:error xmlns:D="DAV:">
+ <D:must-be-checked-in/>
+ </D:error>
+
+ In this example, the request to CHECKOUT /foo.html fails because
+ /foo.html is not checked in.
+
+1.7 Clarification of COPY Semantics with Overwrite:T
+
+ RFC 2518, Section 8.8.4 states:
+
+ "If a resource exists at the destination and the Overwrite header is
+ "T" then prior to performing the copy the server MUST perform a
+ DELETE with "Depth: infinity" on the destination resource."
+
+ The purpose of this sentence is to ensure that following a COPY, all
+ destination resources have the same content and dead properties as
+ the corresponding resources identified by the request-URL (where a
+ resource with a given name relative to the Destination URL
+ "corresponds" to a resource with the same name relative to the
+ request-URL). If at the time of the request, there already is a
+ resource at the destination that has the same resource type as the
+ corresponding resource at the request-URL, that resource MUST NOT be
+ deleted, but MUST be updated to have the content and dead properties
+
+
+
+Clemm, et al. Standards Track [Page 13]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ of its corresponding member. If a client wishes all resources at the
+ destination to be deleted prior to the COPY, it MUST explicitly issue
+ a DELETE request.
+
+ The difference between updating a resource and replacing a resource
+ with a new resource is especially important when resource history is
+ being maintained (the former adds to an existing history, while the
+ latter creates a new history). In addition, locking and access
+ control constraints might allow you to update a resource, but not
+ allow you to delete it and create a new one in its place.
+
+ Note that this clarification does not apply to a MOVE request. A
+ MOVE request with Overwrite:T MUST perform the DELETE with
+ "Depth:infinity" on the destination resource prior to performing the
+ MOVE.
+
+1.8 Versioning Methods and Write Locks
+
+ If a write-locked resource has a non-computed property defined by
+ this document, the property value MUST NOT be changed by a request
+ unless the appropriate lock token is included in the request. Since
+ every method introduced in this document other than REPORT modifies
+ at least one property defined by this document, every versioning
+ method other than REPORT is affected by a write lock. In particular,
+ the method MUST fail with a 423 (Locked) status if the resource is
+ write-locked and the appropriate token is not specified in an If
+ request header.
+
+2 Basic Versioning Features
+
+ Each basic versioning feature defines extensions to existing HTTP and
+ WebDAV methods, as well as new resource types, live properties, and
+ methods.
+
+2.1 Basic Versioning Packages
+
+ A server MAY support any combination of versioning features.
+ However, in order to minimize the complexity of a WebDAV basic
+ versioning client, a WebDAV basic versioning server SHOULD support
+ one of the following three "packages" (feature sets):
+
+ - Core-Versioning Package: version-control
+ - Basic-Server-Workspace Package: version-control, workspace,
+ version-history, checkout
+ - Basic-Client-Workspace Package: version-control, working-
+ resource, update, label
+
+
+
+
+
+Clemm, et al. Standards Track [Page 14]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ The core-versioning package supports linear versioning by both
+ versioning-aware and versioning-unaware clients. A versioning-aware
+ client can use reports and properties to access previous versions of
+ a version-controlled resource.
+
+ The basic workspace packages support parallel development of
+ version-controlled resources. Each client has its own configuration
+ of the shared version-controlled resources, and can make changes to
+ its configuration without disturbing that of another client.
+
+ In the basic-server-workspace package, all persistent state is
+ maintained on the server. Each client has its own workspace resource
+ allocated on the server, where each workspace identifies a
+ configuration of the shared version-controlled resources. Each
+ client makes changes to its workspace, and can transfer changes when
+ appropriate from one workspace to another. The server workspace
+ package is appropriate for clients with no local persistent state, or
+ for clients that wish to expose their working configurations to other
+ clients.
+
+ In the basic-client-workspace package, each client maintains in local
+ persistent storage the state for its configuration of the shared
+ version-controlled resources. When a client is ready to make its
+ changes visible to other clients, it allocates a set of "working
+ resources" on the server, updates the content and dead properties of
+ these working resources, and then uses the set of working resources
+ to update the version-controlled resources. The working resources
+ are used, instead of directly updating the version-controlled
+ resources, so that sets of consistent updates can be prepared in
+ parallel by multiple clients. Also, a working resource allows a
+ client to prepare a single update that requires multiple server
+ requests (e.g. updating both the content and dead properties of a
+ resource requires both a PUT and a PROPPATCH). The client workspace
+ package simplifies the server implementation by requiring each client
+ to maintain its own namespace, but this requires that the clients
+ have local persistent state, and does not allow clients to expose
+ their working configurations to other clients.
+
+ A server that supports both basic workspace packages will
+ interoperate with all basic versioning clients.
+
+
+
+
+
+
+
+
+
+
+
+Clemm, et al. Standards Track [Page 15]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+2.2 Basic Versioning Semantics
+
+2.2.1 Creating a Version-Controlled Resource
+
+ In order to track the history of the content and dead properties of a
+ versionable resource, a user can put the resource under version
+ control with a VERSION-CONTROL request. A VERSION-CONTROL request
+ performs three distinct operations:
+
+ 1) It creates a new "version history resource". In basic versioning,
+ a version history resource is not assigned a URL, and hence is not
+ visible in the http scheme URL space. However, when the version-
+ history feature (see Section 5) is supported, this changes, and
+ each version history resource is assigned a new distinct and
+ unique server-defined URL.
+
+ 2) It creates a new "version resource" and adds it to the new version
+ history resource. The body and dead properties of the new version
+ resource are a copy of those of the versionable resource.
+
+ The server assigns the new version resource a new distinct and
+ unique URL.
+
+ 3) It converts the versionable resource into a "version-controlled
+ resource". The version-controlled resource continues to be
+ identified by the same URL that identified it as a versionable
+ resource. As part of this conversion, it adds a DAV:checked-in
+ property, whose value contains the URL of the new version
+ resource.
+
+ Note that a versionable resource and a version-controlled resource
+ are not new types of resources (i.e. they introduce no new
+ DAV:resourcetype), but rather they are any type of resource that
+ supports the methods and live properties defined for them in this
+ document, in addition to all the methods and live properties implied
+ by their DAV:resourcetype. For example, a collection (whose
+ DAV:resourcetype is DAV:collection) is a versionable resource if it
+ supports the VERSION-CONTROL method, and is a version-controlled
+ resource if it supports the version-controlled resource methods and
+ live properties.
+
+ In the following example, foo.html is a versionable resource that is
+ put under version control. After the VERSION-CONTROL request
+ succeeds, there are two additional resources: a new version history
+ resource and a new version resource in that version history. The
+ versionable resource is converted into a version-controlled resource,
+ whose DAV:checked-in property identifies the new version resource.
+
+
+
+
+Clemm, et al. Standards Track [Page 16]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ The content and dead properties of a resource are represented by the
+ symbol appearing inside the box for that resource (e.g., "S1" in the
+ following example).
+
+ ===VERSION-CONTROL==>
+
+ | +----+ version
+ | version- | | history
+ versionable | controlled +----+ resource
+ resource | resource |
+ /foo.html | /foo.html |
+ | v
+ +----+ | +----+ checked-in +----+ version
+ | S1 | | | S1 |----------->| S1 | resource
+ +----+ | +----+ +----+ /his/73/ver/1
+
+ Thus, whereas before the VERSION-CONTROL request there was only one,
+ non-version-controlled resource, after VERSION-CONTROL there are
+ three separate, distinct resources, each containing its own state and
+ properties: the version-controlled resource, the version resource,
+ and the version history resource. Since the version-controlled
+ resource and the version resource are separate, distinct resources,
+ when a method is applied to a version-controlled resource, it is only
+ applied to that version-controlled resource, and is not applied to
+ the version resource that is currently identified by the
+ DAV:checked-in property of that version-controlled resource.
+ Although the content and dead properties of a checked-in version-
+ controlled resource are required to be the same as those of its
+ current DAV:checked-in version, its live properties may differ. An
+ implementation may optimize storage by retrieving the content and
+ dead properties of a checked-in version-controlled resource from its
+ current DAV:checked-in version rather than storing them in the
+ version-controlled resource, but this is just an implementation
+ optimization.
+
+ Normally, a resource is placed under version control with an explicit
+ VERSION-CONTROL request. A server MAY automatically place every new
+ versionable resource under version control. In this case, the
+ resulting state on the server MUST be the same as if the client had
+ explicitly applied a VERSION-CONTROL request to the versionable
+ resource.
+
+2.2.2 Modifying a Version-Controlled Resource
+
+ In order to use methods like PUT and PROPPATCH to directly modify the
+ content or dead properties of a version-controlled resource, the
+ version-controlled resource must first be checked out. When the
+ checked-out resource is checked in, a new version is created in the
+
+
+
+Clemm, et al. Standards Track [Page 17]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ version history of that version-controlled resource. The version
+ that was checked out is remembered as the predecessor of the new
+ version.
+
+ The DAV:auto-version property (see Sections 3.2.2) of a checked-in
+ version-controlled resource determines how it responds to a method
+ that attempts to modify its content or dead properties. Possible
+ responses include:
+
+ - Fail the request. The resource requires an explicit CHECKOUT
+ request for it to be modified (see Sections 4 and 9.2.1).
+
+ - Automatically checkout the resource, perform the modification, and
+ automatically checkin the resource. This ensures that every state
+ of the resource is tracked by the server, but can result in an
+ excessive number of versions being created.
+
+ - Automatically checkout the resource, perform the modification, and
+ then if the resource is not write-locked, automatically checkin
+ the resource. If the resource is write-locked, it remains
+ checked-out until the write-lock is removed (either explicitly
+ through a subsequent UNLOCK request or implicitly through a time-
+ out of the write-lock). This helps a locking client avoid the
+ proliferation of versions, while still allowing a non-locking
+ client to update the resource.
+
+ - Automatically checkout the resource, perform the modification, and
+ then leave the resource checked out. If the resource is write-
+ locked, it will be automatically checked in when the write-lock is
+ removed, but an explicit CHECKIN operation (see Section 4.4) is
+ required for a non-write-locked resource. This minimizes the
+ number of new versions that will be created by a versioning
+ unaware client, but only a versioning aware client can create new
+ versions of a non-write-locked resource.
+
+ - Fail the request unless the resource is write-locked. If it is
+ write-locked, automatically checkout the resource and perform the
+ modification. The resource is automatically checked in when the
+ write-lock is removed. This minimizes the number of new versions
+ that will be created by a versioning unaware client, but never
+ automatically checks out a resource that will not subsequently be
+ automatically checked in.
+
+
+
+
+
+
+
+
+
+Clemm, et al. Standards Track [Page 18]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ The following diagram illustrates the effect of the checkout/checkin
+ process on a version-controlled resource and its version history.
+ The symbol inside a box (S1, S2, S3) represents the current content
+ and dead properties of the resource represented by that box. The
+ symbol next to a box (V1, V2, V3) represents the URL for that
+ resource.
+
+ ===checkout==> ===PUT==> ===checkin==>
+
+
+ /foo.html (version-controlled resource)
+
+ +----+ | +----+ | +----+ | +----+
+ | S2 | | | S2 | | | S3 | | | S3 |
+ +----+ | +----+ | +----+ | +----+
+ Checked-In=V2|Checked-Out=V2|Checked-Out=V2|Checked-In=V3
+
+
+ /his/73 (version history for /foo.html)
+
+ +----+ | +----+ | +----+ | +----+
+ | S1 | V1 | | S1 | V1 | | S1 | V1 | | S1 | V1
+ +----+ | +----+ | +----+ | +----+
+ | | | | | | |
+ | | | | | | |
+ +----+ | +----+ | +----+ | +----+
+ | S2 | V2 | | S2 | V2 | | S2 | V2 | | S2 | V2
+ +----+ | +----+ | +----+ | +----+
+ | | | |
+ | | | |
+ | | | +----+
+ | | | | S3 | V3
+ | | | +----+
+
+ Note that a version captures only a defined subset of the state of a
+ resource. In particular, a version of a basic resource captures its
+ content and dead properties, but not its live properties.
+
+2.2.3 Reporting
+
+ Some versioning information about a resource requires that parameters
+ be specified along with that request for information. Included in
+ basic versioning is the required support for an extensible reporting
+ mechanism, which includes a REPORT method as well as a live property
+ for determining what reports are supported by a particular resource.
+ The REPORT method is required by versioning, but it can be used in
+ non-versioning WebDAV extensions.
+
+
+
+
+Clemm, et al. Standards Track [Page 19]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ To allow a client to query the properties of all versions in the
+ version history of a specified version-controlled resource, basic
+ versioning provides the DAV:version-tree report (see Section 3.7). A
+ more powerful version history reporting mechanism is provided by
+ applying the DAV:expand-property report (see Section 3.8) to a
+ version history resource (see Section 5).
+
+3 Version-Control Feature
+
+ The version-control feature provides support for putting a resource
+ under version control, creating an associated version-controlled
+ resource and version history resource as described in Section 2.2.1.
+ A server indicates that it supports the version-control feature by
+ including the string "version-control" as a field in the DAV header
+ in the response to an OPTIONS request. The version-control feature
+ MUST be supported if any other versioning feature is supported.
+
+3.1 Additional Resource Properties
+
+ The version-control feature introduces the following REQUIRED
+ properties for any WebDAV resource.
+
+3.1.1 DAV:comment
+
+ This property is used to track a brief comment about a resource that
+ is suitable for presentation to a user. The DAV:comment of a version
+ can be used to indicate why that version was created.
+
+ <!ELEMENT comment (#PCDATA)>
+ PCDATA value: string
+
+3.1.2 DAV:creator-displayname
+
+ This property contains a description of the creator of the resource
+ that is suitable for presentation to a user. The DAV:creator-
+ displayname of a version can be used to indicate who created that
+ version.
+
+ <!ELEMENT creator-displayname (#PCDATA)>
+ PCDATA value: string
+
+3.1.3 DAV:supported-method-set (protected)
+
+ This property identifies the methods that are supported by the
+ resource. A method is supported by a resource if there is some state
+ of that resource for which an application of that method will
+
+
+
+
+
+Clemm, et al. Standards Track [Page 20]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ successfully satisfy all postconditions of that method, including any
+ additional postconditions added by the features supported by that
+ resource.
+
+ <!ELEMENT supported-method-set (supported-method*)>
+ <!ELEMENT supported-method ANY>
+ <!ATTLIST supported-method name NMTOKEN #REQUIRED>
+ name value: a method name
+
+3.1.4 DAV:supported-live-property-set (protected)
+
+ This property identifies the live properties that are supported by
+ the resource. A live property is supported by a resource if that
+ property has the semantics defined for that property. The value of
+ this property MUST identify all live properties defined by this
+ document that are supported by the resource, and SHOULD identify all
+ live properties that are supported by the resource.
+
+ <!ELEMENT supported-live-property-set (supported-live-property*)>
+ <!ELEMENT supported-live-property name>
+ <!ELEMENT prop ANY>
+ ANY value: a property element type
+
+3.1.5 DAV:supported-report-set (protected)
+
+ This property identifies the reports that are supported by the
+ resource.
+
+ <!ELEMENT supported-report-set (supported-report*)>
+ <!ELEMENT supported-report report>
+ <!ELEMENT report ANY>
+ ANY value: a report element type
+
+3.2 Version-Controlled Resource Properties
+
+ The version-control feature introduces the following REQUIRED
+ properties for a version-controlled resource.
+
+3.2.1 DAV:checked-in (protected)
+
+ This property appears on a checked-in version-controlled resource,
+ and identifies a version that has the same content and dead
+ properties as the version-controlled resource. This property is
+ removed when the resource is checked out, and then added back
+ (identifying a new version) when the resource is checked back in.
+
+ <!ELEMENT checked-in (href)>
+
+
+
+
+Clemm, et al. Standards Track [Page 21]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+3.2.2 DAV:auto-version
+
+ If the DAV:auto-version value is DAV:checkout-checkin, when a
+ modification request (such as PUT/PROPPATCH) is applied to a
+ checked-in version-controlled resource, the request is automatically
+ preceded by a checkout and followed by a checkin operation.
+
+ If the DAV:auto-version value is DAV:checkout-unlocked-checkin, when
+ a modification request is applied to a checked-in version-controlled
+ resource, the request is automatically preceded by a checkout
+ operation. If the resource is not write-locked, the request is
+ automatically followed by a checkin operation.
+
+ If the DAV:auto-version value is DAV:checkout, when a modification
+ request is applied to a checked-in version-controlled resource, the
+ request is automatically preceded by a checkout operation.
+
+ If the DAV:auto-version value is DAV:locked-checkout, when a
+ modification request is applied to a write-locked checked-in
+ version-controlled resource, the request is automatically preceded by
+ a checkout operation.
+
+ If an update to a write-locked checked-in resource is automatically
+ preceded by a checkout of that resource, the checkout is associated
+ with the write lock. When this write lock is removed (e.g. from an
+ UNLOCK or a lock timeout), if the resource has not yet been checked
+ in, the removal of the write lock is automatically preceded by a
+ checkin operation.
+
+ A server MAY refuse to allow the value of the DAV:auto-version
+ property to be modified, or MAY only support values from a subset of
+ the valid values.
+
+ <!ELEMENT auto-version (checkout-checkin | checkout-unlocked-checkin
+ | checkout | locked-checkout)? >
+ <!ELEMENT checkout-checkin EMPTY>
+ <!ELEMENT checkout-unlocked-checkin EMPTY>
+ <!ELEMENT checkout EMPTY>
+ <!ELEMENT locked-checkout EMPTY>
+
+3.3 Checked-Out Resource Properties
+
+ The version-control feature introduces the following REQUIRED
+ properties for a checked-out resource.
+
+
+
+
+
+
+
+Clemm, et al. Standards Track [Page 22]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+3.3.1 DAV:checked-out (protected)
+
+ This property identifies the version that was identified by the
+ DAV:checked-in property at the time the resource was checked out.
+ This property is removed when the resource is checked in.
+
+ <!ELEMENT checked-out (href)>
+
+3.3.2 DAV:predecessor-set
+
+ This property determines the DAV:predecessor-set property of the
+ version that results from checking in this resource.
+
+ A server MAY reject attempts to modify the DAV:predecessor-set of a
+ version-controlled resource.
+
+ <!ELEMENT predecessor-set (href+)>
+
+3.4 Version Properties
+
+ The version-control feature introduces the following REQUIRED
+ properties for a version.
+
+3.4.1 DAV:predecessor-set (protected)
+
+ This property identifies each predecessor of this version. Except
+ for the root version, which has no predecessors, each version has at
+ least one predecessor.
+
+ <!ELEMENT predecessor-set (href*)>
+
+3.4.2 DAV:successor-set (computed)
+
+ This property identifies each version whose DAV:predecessor-set
+ identifies this version.
+
+ <!ELEMENT successor-set (href*)>
+
+3.4.3 DAV:checkout-set (computed)
+
+ This property identifies each checked-out resource whose
+ DAV:checked-out property identifies this version.
+
+ <!ELEMENT checkout-set (href*)>
+
+
+
+
+
+
+
+Clemm, et al. Standards Track [Page 23]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+3.4.4 DAV:version-name (protected)
+
+ This property contains a server-defined string that is different for
+ each version in a given version history. This string is intended for
+ display for a user, unlike the URL of a version, which is normally
+ only used by a client and not displayed for a user.
+
+ <!ELEMENT version-name (#PCDATA)>
+ PCDATA value: string
+
+3.5 VERSION-CONTROL Method
+
+ A VERSION-CONTROL request can be used to create a version-controlled
+ resource at the request-URL. It can be applied to a versionable
+ resource or to a version-controlled resource.
+
+ If the request-URL identifies a versionable resource, a new version
+ history resource is created, a new version is created whose content
+ and dead properties are copied from the versionable resource, and the
+ resource is given a DAV:checked-in property that is initialized to
+ identify this new version.
+
+ If the request-URL identifies a version-controlled resource, the
+ resource just remains under version-control. This allows a client to
+ be unaware of whether or not a server automatically puts a resource
+ under version control when it is created.
+
+ If a VERSION-CONTROL request fails, the server state preceding the
+ request MUST be restored.
+
+ Marshalling:
+
+ If a request body is included, it MUST be a DAV:version-control
+ XML element.
+
+ <!ELEMENT version-control ANY>
+
+ If a response body for a successful request is included, it MUST
+ be a DAV:version-control-response XML element. Note that this
+ document does not define any elements for the VERSION-CONTROL
+ response body, but the DAV:version-control-response element is
+ defined to ensure interoperability between future extensions that
+ do define elements for the VERSION-CONTROL response body.
+
+ <!ELEMENT version-control-response ANY>
+
+
+
+
+
+
+Clemm, et al. Standards Track [Page 24]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ Postconditions:
+
+ (DAV:put-under-version-control): If the request-URL identified a
+ versionable resource at the time of the request, the request MUST
+ have created a new version history and MUST have created a new
+ version resource in that version history. The resource MUST have
+ a DAV:checked-in property that identifies the new version. The
+ content, dead properties, and DAV:resourcetype of the new version
+ MUST be the same as those of the resource. Note that an
+ implementation can choose to locate the version history and
+ version resources anywhere that it wishes. In particular, it
+ could locate them on the same host and server as the version-
+ controlled resource, on a different virtual host maintained by the
+ same server, on the same host maintained by a different server, or
+ on a different host maintained by a different server.
+
+ (DAV:must-not-change-existing-checked-in-out): If the request-URL
+ identified a resource already under version control at the time of
+ the request, the request MUST NOT change the DAV:checked-in or
+ DAV:checked-out property of that version-controlled resource.
+
+3.5.1 Example - VERSION-CONTROL
+
+ >>REQUEST
+
+ VERSION-CONTROL /foo.html HTTP/1.1
+ Host: www.webdav.org
+ Content-Length: 0
+
+ >>RESPONSE
+
+ HTTP/1.1 200 OK
+
+ In this example, /foo.html is put under version control. A new
+ version history is created for it, and a new version is created that
+ has a copy of the content and dead properties of /foo.html. The
+ DAV:checked-in property of /foo.html identifies this new version.
+
+3.6 REPORT Method
+
+ A REPORT request is an extensible mechanism for obtaining information
+ about a resource. Unlike a resource property, which has a single
+ value, the value of a report can depend on additional information
+ specified in the REPORT request body and in the REPORT request
+ headers.
+
+
+
+
+
+
+Clemm, et al. Standards Track [Page 25]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ Marshalling:
+
+ The body of a REPORT request specifies which report is being
+ requested, as well as any additional information that will be used
+ to customize the report.
+
+ The request MAY include a Depth header. If no Depth header is
+ included, Depth:0 is assumed.
+
+ The response body for a successful request MUST contain the
+ requested report.
+
+ If a Depth request header is included, the response MUST be a 207
+ Multi-Status. The request MUST be applied separately to the
+ collection itself and to all members of the collection that
+ satisfy the Depth value. The DAV:prop element of a DAV:response
+ for a given resource MUST contain the requested report for that
+ resource.
+
+ Preconditions:
+
+ (DAV:supported-report): The specified report MUST be supported by
+ the resource identified by the request-URL.
+
+ Postconditions:
+
+ (DAV:no-modification): The REPORT method MUST NOT have changed the
+ content or dead properties of any resource.
+
+3.7 DAV:version-tree Report
+
+ The DAV:version-tree report describes the requested properties of all
+ the versions in the version history of a version. If the report is
+ requested for a version-controlled resource, it is redirected to its
+ DAV:checked-in or DAV:checked-out version.
+
+ The DAV:version-tree report MUST be supported by all version
+ resources and all version-controlled resources.
+
+ Marshalling:
+
+ The request body MUST be a DAV:version-tree XML element.
+
+ <!ELEMENT version-tree ANY>
+ ANY value: a sequence of zero or more elements, with at most one
+ DAV:prop element.
+ prop: see RFC 2518, Section 12.11
+
+
+
+
+Clemm, et al. Standards Track [Page 26]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ The response body for a successful request MUST be a
+ DAV:multistatus XML element.
+
+ multistatus: see RFC 2518, Section 12.9
+
+ The response body for a successful DAV:version-tree REPORT request
+ MUST contain a DAV:response element for each version in the
+ version history of the version identified by the request-URL.
+
+3.7.1 Example - DAV:version-tree Report
+
+ The version history drawn below would produce the following version
+ tree report.
+
+ foo.html History
+
+ +---+
+ | | V1
+ +---+
+ / \
+ / \
+ +---+ +---+
+ | | V2 | | V2.1.1
+ +---+ +---+
+
+ >>REQUEST
+
+ REPORT /foo.html HTTP/1.1
+ Host: www.webdav.org
+ Content-Type: text/xml; charset="utf-8"
+ Content-Length: xxxx
+
+ <?xml version="1.0" encoding="utf-8" ?>
+ <D:version-tree xmlns:D="DAV:">
+ <D:prop>
+ <D:version-name/>
+ <D:creator-displayname/>
+ <D:successor-set/>
+ </D:prop>
+ </D:version-tree>
+
+
+
+
+
+
+
+
+
+
+
+Clemm, et al. Standards Track [Page 27]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ >>RESPONSE
+
+ HTTP/1.1 207 Multi-Status
+ Content-Type: text/xml; charset="utf-8"
+ Content-Length: xxxx
+
+ <?xml version="1.0" encoding="utf-8" ?>
+ <D:multistatus xmlns:D="DAV:">
+ <D:response>
+ <D:href>http://repo.webdav.org/his/23/ver/V1</D:href>
+ <D:propstat>
+ <D:prop>
+ <D:version-name>V1</D:version-name>
+ <D:creator-displayname>Fred</D:creator-displayname>
+ <D:successor-set>
+ <D:href>http://repo.webdav.org/his/23/ver/V2</D:href>
+ <D:href>http://repo.webdav.org/his/23/ver/V2.1.1</D:href>
+ </D:successor-set>
+ </D:prop>
+ <D:status>HTTP/1.1 200 OK</D:status>
+ </D:propstat>
+ </D:response>
+ <D:response>
+ <D:href>http://repo.webdav.org/his/23/ver/V2</D:href>
+ <D:propstat>
+ <D:prop>
+ <D:version-name>V2</D:version-name>
+ <D:creator-displayname>Fred</D:creator-displayname>
+ <D:successor-set/>
+ </D:prop>
+ <D:status>HTTP/1.1 200 OK</D:status>
+ </D:propstat>
+ </D:response>
+ <D:response>
+ <D:href>http://repo.webdav.org/his/23/ver/V2.1.1</D:href>
+ <D:propstat>
+ <D:prop>
+ <D:version-name>V2.1.1</D:version-name>
+ <D:creator-displayname>Sally</D:creator-displayname>
+ <D:successor-set/>
+ </D:prop>
+ <D:status>HTTP/1.1 200 OK</D:status>
+ </D:propstat>
+ </D:response>
+ </D:multistatus>
+
+
+
+
+
+
+Clemm, et al. Standards Track [Page 28]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+3.8 DAV:expand-property Report
+
+ Many property values are defined as a DAV:href, or a set of DAV:href
+ elements. The DAV:expand-property report provides a mechanism for
+ retrieving in one request the properties from the resources
+ identified by those DAV:href elements. This report not only
+ decreases the number of requests required, but also allows the server
+ to minimize the number of separate read transactions required on the
+ underlying versioning store.
+
+ The DAV:expand-property report SHOULD be supported by all resources
+ that support the REPORT method.
+
+ Marshalling:
+
+ The request body MUST be a DAV:expand-property XML element.
+
+ <!ELEMENT expand-property (property*)>
+ <!ELEMENT property (property*)>
+ <!ATTLIST property name NMTOKEN #REQUIRED>
+ name value: a property element type
+ <!ATTLIST property namespace NMTOKEN "DAV:">
+ namespace value: an XML namespace
+
+ The response body for a successful request MUST be a
+ DAV:multistatus XML element.
+
+ multistatus: see RFC 2518, Section 12.9
+
+ The properties reported in the DAV:prop elements of the
+ DAV:multistatus element MUST be those identified by the
+ DAV:property elements in the DAV:expand-property element. If
+ there are DAV:property elements nested within a DAV:property
+ element, then every DAV:href in the value of the corresponding
+ property is replaced by a DAV:response element whose DAV:prop
+ elements report the values of the properties identified by the
+ nested DAV:property elements. The nested DAV:property elements
+ can in turn contain DAV:property elements, so that multiple levels
+ of DAV:href expansion can be requested.
+
+ Note that a validating parser MUST be aware that the DAV:expand-
+ property report effectively modifies the DTD of every property by
+ replacing every occurrence of "href" in the DTD with "href |
+ response".
+
+
+
+
+
+
+
+Clemm, et al. Standards Track [Page 29]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+3.8.1 Example - DAV:expand-property
+
+ This example describes how to query a version-controlled resource to
+ determine the DAV:creator-display-name and DAV:activity-set of every
+ version in the version history of that version-controlled resource.
+ This example assumes that the server supports the version-history
+ feature (see Section 5).
+
+ >>REQUEST
+
+ REPORT /foo.html HTTP/1.1
+ Host: www.webdav.org
+ Content-Type: text/xml; charset="utf-8"
+ Content-Length: xxxx
+
+ <?xml version="1.0" encoding="utf-8" ?>
+ <D:expand-property xmlns:D="DAV:">
+ <D:property name="version-history">
+ <D:property name="version-set">
+ <D:property name="creator-displayname"/>
+ <D:property name="activity-set"/>
+ </D:property>
+ </D:property>
+ </D:expand-property>
+
+ >>RESPONSE
+
+ HTTP/1.1 207 Multi-Status
+ Content-Type: text/xml; charset="utf-8"
+ Content-Length: xxxx
+
+ <?xml version="1.0" encoding="utf-8" ?>
+ <D:multistatus xmlns:D="DAV:">
+ <D:response>
+ <D:href>http://www.webdav.org/foo.html</D:href>
+ <D:propstat>
+ <D:prop>
+ <D:version-history>
+ <D:response>
+ <D:href>http://repo.webdav.org/his/23</D:href>
+ <D:propstat>
+ <D:prop>
+ <D:version-set>
+ <D:response>
+ <D:href>http://repo.webdav.org/his/23/ver/1</D:href>
+ <D:propstat>
+ <D:prop>
+ <D:creator-displayname>Fred</D:creator-displayname>
+
+
+
+Clemm, et al. Standards Track [Page 30]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ <D:activity-set> <D:href>
+ http://www.webdav.org/ws/dev/sally
+ </D:href> </D:activity-set> </D:prop>
+ <D:status>HTTP/1.1 200 OK</D:status>
+ </D:propstat> </D:response>
+ <D:response>
+ <D:href>http://repo.webdav.org/his/23/ver/2</D:href>
+ <D:propstat>
+ <D:prop>
+ <D:creator-displayname>Sally</D:creator-displayname>
+ <D:activity-set>
+ <D:href>http://repo.webdav.org/act/add-refresh-cmd</D:href>
+ </D:activity-set> </D:prop>
+ <D:status>HTTP/1.1 200 OK</D:status>
+ </D:propstat> </D:response>
+ </D:version-set> </D:prop>
+ <D:status>HTTP/1.1 200 OK</D:status>
+ </D:propstat> </D:response>
+ </D:version-history> </D:prop>
+ <D:status>HTTP/1.1 200 OK</D:status>
+ </D:propstat> </D:response>
+ </D:multistatus>
+
+ In this example, the DAV:creator-displayname and DAV:activity-set
+ properties of the versions in the DAV:version-set of the
+ DAV:version-history of http://www.webdav.org/foo.html are reported.
+
+3.9 Additional OPTIONS Semantics
+
+ If the server supports the version-control feature, it MUST include
+ "version-control" as a field in the DAV response header from an
+ OPTIONS request on any resource that supports any versioning
+ properties, reports, or methods.
+
+3.10 Additional PUT Semantics
+
+ Additional Preconditions:
+
+ (DAV:cannot-modify-version-controlled-content): If the request-URL
+ identifies a resource with a DAV:checked-in property, the request
+ MUST fail unless DAV:auto-version semantics will automatically
+ check out the resource.
+
+ (DAV:cannot-modify-version): If the request-URL identifies a
+ version, the request MUST fail.
+
+
+
+
+
+
+Clemm, et al. Standards Track [Page 31]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ If the request creates a new resource that is automatically placed
+ under version control, all preconditions for VERSION-CONTROL apply
+ to the request.
+
+ Additional Postconditions:
+
+ (DAV:auto-checkout): If the resource was a checked-in version-
+ controlled resource whose DAV:auto-version property indicates it
+ should be automatically checked out but not automatically checked
+ in for a modification request, then the server MUST have
+ automatically checked out the resource prior to executing the
+ request. In particular, the value of the DAV:checked-out property
+ of the resource MUST be that of the DAV:checked-in property prior
+ to the request, the DAV:checked-in property MUST have been
+ removed, and the DAV:predecessor-set property MUST be initialized
+ to be the same as the DAV:checked-out property. If any part of
+ the checkout/update sequence failed, the status from the failed
+ part of the request MUST be returned, and the server state
+ preceding the request sequence MUST be restored.
+
+ (DAV:auto-checkout-checkin): If the resource was a checked-in
+ version-controlled resource whose DAV:auto-version property
+ indicates it should be automatically checked out and automatically
+ checked in for a modification request, then the server MUST have
+ automatically checked out the resource prior to executing the
+ request and automatically checked it in after the request. In
+ particular, the DAV:checked-in property of the resource MUST
+ identify a new version whose content and dead properties are the
+ same as those of the resource. The DAV:predecessor-set of the new
+ version MUST identify the version identified by the DAV:checked-in
+ property prior to the request. If any part of the
+ checkout/update/checkin sequence failed, the status from the
+ failed part of the request MUST be returned, and the server state
+ preceding the request sequence MUST be restored.
+
+ If the request creates a new resource, the new resource MAY have
+ automatically been placed under version control, and all
+ postconditions for VERSION-CONTROL apply to the request.
+
+3.11 Additional PROPFIND Semantics
+
+ A DAV:allprop PROPFIND request SHOULD NOT return any of the
+ properties defined by this document. This allows a versioning server
+ to perform efficiently when a naive client, which does not understand
+ the cost of asking a server to compute all possible live properties,
+ issues a DAV:allprop PROPFIND request.
+
+
+
+
+
+Clemm, et al. Standards Track [Page 32]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ Additional Preconditions:
+
+ (DAV:supported-live-property): If the request attempts to access a
+ property defined by this document, the semantics of that property
+ MUST be supported by the server.
+
+3.12 Additional PROPPATCH Semantics
+
+ Additional Preconditions:
+
+ (DAV:cannot-modify-version-controlled-property): If the request
+ attempts to modify a dead property, same semantics as PUT (see
+ Section 3.10).
+
+ (DAV:cannot-modify-version): If the request attempts to modify a
+ dead property, same semantics as PUT (see Section 3.10).
+
+ (DAV:cannot-modify-protected-property): An attempt to modify a
+ property that is defined by this document, as being protected for
+ that kind of resource, MUST fail.
+
+ (DAV:supported-live-property): An attempt to modify a property
+ defined by this document, but whose semantics are not enforced by
+ the server, MUST fail. This helps ensure that a client will be
+ notified when it is trying to use a property whose semantics are
+ not supported by the server.
+
+ Additional Postconditions:
+
+ (DAV:auto-checkout): If the request modified a dead property, same
+ semantics as PUT (see Section 3.10).
+
+ (DAV:auto-checkout-checkin): If the request modified a dead
+ property, same semantics as PUT (see Section 3.10).
+
+3.13 Additional DELETE Semantics
+
+ Additional Preconditions:
+
+ (DAV:no-version-delete): A server MAY fail an attempt to DELETE a
+ version.
+
+ Additional Postconditions:
+
+ (DAV:update-predecessor-set): If a version was deleted, the server
+ MUST have replaced any reference to that version in a
+ DAV:predecessor-set by a copy of the DAV:predecessor-set of the
+ deleted version.
+
+
+
+Clemm, et al. Standards Track [Page 33]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+3.14 Additional COPY Semantics
+
+ Additional Preconditions:
+
+ If the request creates a new resource that is automatically placed
+ under version control, all preconditions for VERSION-CONTROL apply
+ to the request.
+
+ Additional Postconditions:
+
+ (DAV:must-not-copy-versioning-property): A property defined by
+ this document MUST NOT have been copied to the new resource
+ created by this request, but instead that property of the new
+ resource MUST have the default initial value it would have had if
+ the new resource had been created by a non-versioning method such
+ as PUT or a MKCOL.
+
+ (DAV:auto-checkout): If the destination is a version-controlled
+ resource, same semantics as PUT (see Section 3.10).
+
+ (DAV:auto-checkout-checkin): If the destination is a version-
+ controlled resource, same semantics as PUT (see Section 3.10).
+
+ (DAV:copy-creates-new-resource): If the source of a COPY is a
+ version-controlled resource or version, and if there is no
+ resource at the destination of the COPY, then the COPY creates a
+ new non-version-controlled resource at the destination of the
+ COPY. The new resource MAY automatically be put under version
+ control, but the resulting version-controlled resource MUST be
+ associated with a new version history created for that new
+ version-controlled resource, and all postconditions for
+ VERSION-CONTROL apply to the request.
+
+3.15 Additional MOVE Semantics
+
+ Additional Preconditions:
+
+ (DAV:cannot-rename-version): If the request-URL identifies a
+ version, the request MUST fail.
+
+ Additional Postconditions:
+
+ (DAV:preserve-versioning-properties): When a resource is moved
+ from a source URL to a destination URL, a property defined by this
+ document MUST have the same value at the destination URL as it had
+ at the source URL.
+
+
+
+
+
+Clemm, et al. Standards Track [Page 34]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+3.16 Additional UNLOCK Semantics
+
+ Note that these semantics apply both to an explicit UNLOCK request,
+ as well as to the removal of a lock because of a lock timeout. If a
+ precondition or postcondition cannot be satisfied, the lock timeout
+ MUST NOT occur.
+
+ Additional Preconditions:
+
+ (DAV:version-history-is-tree): If the request-URL identifies a
+ checked-out version-controlled resource that will be automatically
+ checked in when the lock is removed, then the versions identified
+ by the DAV:predecessor-set of the checked-out resource MUST be
+ descendants of the root version of the version history for the
+ DAV:checked-out version.
+
+ Additional Postconditions:
+
+ (DAV:auto-checkin): If the request-URL identified a checked-out
+ version-controlled resource that had been automatically checked
+ out because of its DAV:auto-version property, the request MUST
+ have created a new version in the version history of the
+ DAV:checked-out version. The request MUST have allocated a URL
+ for the version that MUST NOT have previously identified any other
+ resource, and MUST NOT ever identify a resource other than this
+ version. The content, dead properties, DAV:resourcetype, and
+ DAV:predecessor-set of the new version MUST be copied from the
+ checked-out resource. The DAV:version-name of the new version
+ MUST be set to a server-defined value distinct from all other
+ DAV:version-name values of other versions in the same version
+ history. The request MUST have removed the DAV:checked-out
+ property of the version-controlled resource, and MUST have added a
+ DAV:checked-in property that identifies the new version.
+
+4 CHECKOUT-IN-PLACE FEATURE
+
+ With the version-control feature, WebDAV locking can be used to avoid
+ the proliferation of versions that would result if every modification
+ to a version-controlled resource produced a new version. The
+ checkout-in-place feature provides an alternative mechanism that
+ allows a client to explicitly check out and check in a resource to
+ create a new version.
+
+4.1 Additional Version Properties
+
+ The checkout-in-place feature introduces the following REQUIRED
+ properties for a version.
+
+
+
+
+Clemm, et al. Standards Track [Page 35]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+4.1.1 DAV:checkout-fork
+
+ This property controls the behavior of CHECKOUT when a version
+ already is checked out or has a successor. If the DAV:checkout-fork
+ of a version is DAV:forbidden, a CHECKOUT request MUST fail if it
+ would result in that version appearing in the DAV:predecessor-set or
+ DAV:checked-out property of more than one version or checked-out
+ resource. If DAV:checkout-fork is DAV:discouraged, such a CHECKOUT
+ request MUST fail unless DAV:fork-ok is specified in the CHECKOUT
+ request body.
+
+ A server MAY reject attempts to modify the DAV:checkout-fork of a
+ version.
+
+ <!ELEMENT checkout-fork ANY>
+ ANY value: A sequence of elements with at most one DAV:discouraged
+ or DAV:forbidden element.
+ <!ELEMENT discouraged EMPTY>
+ <!ELEMENT forbidden EMPTY>
+
+4.1.2 DAV:checkin-fork
+
+ This property controls the behavior of CHECKIN when a version already
+ has a successor. If the DAV:checkin-fork of a version is
+ DAV:forbidden, a CHECKIN request MUST fail if it would result in that
+ version appearing in the DAV:predecessor-set of more than one
+ version. If DAV:checkin-fork is DAV:discouraged, such a CHECKIN
+ request MUST fail unless DAV:fork-ok is specified in the CHECKIN
+ request body.
+
+ A server MAY reject attempts to modify the DAV:checkout-fork of a
+ version.
+
+ <!ELEMENT checkin-fork ANY>
+ ANY value: A sequence of elements with at most one DAV:discouraged
+ or DAV:forbidden element.
+ <!ELEMENT discouraged EMPTY>
+ <!ELEMENT forbidden EMPTY>
+
+4.2 Checked-Out Resource Properties
+
+ The checkout-in-place feature introduces the following REQUIRED
+ properties for a checked-out resource.
+
+4.2.1 DAV:checkout-fork
+
+ This property determines the DAV:checkout-fork property of the
+ version that results from checking in this resource.
+
+
+
+Clemm, et al. Standards Track [Page 36]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+4.2.2 DAV:checkin-fork
+
+ This property determines the DAV:checkin-fork property of the version
+ that results from checking in this resource.
+
+4.3 CHECKOUT Method (applied to a version-controlled resource)
+
+ A CHECKOUT request can be applied to a checked-in version-controlled
+ resource to allow modifications to the content and dead properties of
+ that version-controlled resource.
+
+ If a CHECKOUT request fails, the server state preceding the request
+ MUST be restored.
+
+ Marshalling:
+
+ If a request body is included, it MUST be a DAV:checkout XML
+ element.
+
+ <!ELEMENT checkout ANY>
+
+ ANY value: A sequence of elements with at most one DAV:fork-ok
+ element.
+
+ <!ELEMENT fork-ok EMPTY>
+
+ If a response body for a successful request is included, it MUST
+ be a DAV:checkout-response XML element.
+
+ <!ELEMENT checkout-response ANY>
+
+ The response MUST include a Cache-Control:no-cache header.
+
+ Preconditions:
+
+ (DAV:must-be-checked-in): If a version-controlled resource is
+ being checked out, it MUST have a DAV:checked-in property.
+
+ (DAV:checkout-of-version-with-descendant-is-forbidden): If the
+ DAV:checkout-fork property of the version being checked out is
+ DAV:forbidden, the request MUST fail if a version identifies that
+ version in its DAV:predecessor-set.
+
+ (DAV:checkout-of-version-with-descendant-is-discouraged): If the
+ DAV:checkout-fork property of the version being checked out is
+ DAV:discouraged, the request MUST fail if a version identifies
+ that version in its DAV:predecessor-set unless DAV:fork-ok is
+ specified in the request body.
+
+
+
+Clemm, et al. Standards Track [Page 37]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ (DAV:checkout-of-checked-out-version-is-forbidden): If the
+ DAV:checkout-fork property of the version being checked out is
+ DAV:forbidden, the request MUST fail if a checked-out resource
+ identifies that version in its DAV:checked-out property.
+
+ (DAV:checkout-of-checked-out-version-is-discouraged): If the
+ DAV:checkout-fork property of the version being checked out is
+ DAV:discouraged, the request MUST fail if a checked-out resource
+ identifies that version in its DAV:checked-out property unless
+ DAV:fork-ok is specified in the request body.
+
+ Postconditions:
+
+ (DAV:is-checked-out): The checked-out resource MUST have a
+ DAV:checked-out property that identifies the DAV:checked-in
+ version preceding the checkout. The version-controlled resource
+ MUST NOT have a DAV:checked-in property.
+
+ (DAV:initialize-predecessor-set): The DAV:predecessor-set property
+ of the checked-out resource MUST be initialized to be the
+ DAV:checked-out version.
+
+4.3.1 Example - CHECKOUT of a version-controlled resource
+
+ >>REQUEST
+
+ CHECKOUT /foo.html HTTP/1.1
+ Host: www.webdav.org
+ Content-Length: 0
+
+ >>RESPONSE
+
+ HTTP/1.1 200 OK
+ Cache-Control: no-cache
+
+ In this example, the version-controlled resource /foo.html is checked
+ out.
+
+4.4 CHECKIN Method (applied to a version-controlled resource)
+
+ A CHECKIN request can be applied to a checked-out version-controlled
+ resource to produce a new version whose content and dead properties
+ are copied from the checked-out resource.
+
+ If a CHECKIN request fails, the server state preceding the request
+ MUST be restored.
+
+
+
+
+
+Clemm, et al. Standards Track [Page 38]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ Marshalling:
+
+ If a request body is included, it MUST be a DAV:checkin XML
+ element.
+
+ <!ELEMENT checkin ANY>
+ ANY value: A sequence of elements with at most one
+ DAV:keep-checked-out element and at most one DAV:fork-ok element.
+
+ <!ELEMENT keep-checked-out EMPTY>
+ <!ELEMENT fork-ok EMPTY>
+
+ If a response body for a successful request is included, it MUST
+ be a DAV:checkin-response XML element.
+
+ <!ELEMENT checkin-response ANY>
+
+ The response MUST include a Cache-Control:no-cache header.
+
+ Preconditions:
+
+ (DAV:must-be-checked-out): The request-URL MUST identify a
+ resource with a DAV:checked-out property.
+
+ (DAV:version-history-is-tree) The versions identified by the
+ DAV:predecessor-set of the checked-out resource MUST be
+ descendants of the root version of the version history for the
+ DAV:checked-out version.
+
+ (DAV:checkin-fork-forbidden): A CHECKIN request MUST fail if it
+ would cause a version whose DAV:checkin-fork is DAV:forbidden to
+ appear in the DAV:predecessor-set of more than one version.
+
+ (DAV:checkin-fork-discouraged): A CHECKIN request MUST fail if it
+ would cause a version whose DAV:checkin-fork is DAV:discouraged to
+ appear in the DAV:predecessor-set of more than one version, unless
+ DAV:fork-ok is specified in the request body.
+
+ Postconditions:
+
+ (DAV:create-version): The request MUST have created a new version
+ in the version history of the DAV:checked-out version. The
+ request MUST have allocated a distinct new URL for the new
+
+
+
+
+
+
+
+
+Clemm, et al. Standards Track [Page 39]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ version, and that URL MUST NOT ever identify any resource other
+ than that version. The URL for the new version MUST be returned in
+ a Location response header.
+
+ (DAV:initialize-version-content-and-properties): The content, dead
+ properties, DAV:resourcetype, and DAV:predecessor-set of the new
+ version MUST be copied from the checked-out resource. The
+ DAV:version-name of the new version MUST be set to a server-
+ defined value distinct from all other DAV:version-name values of
+ other versions in the same version history.
+
+ (DAV:checked-in): If the request-URL identifies a version-
+ controlled resource and DAV:keep-checked-out is not specified in
+ the request body, the DAV:checked-out property of the version-
+ controlled resource MUST have been removed and a DAV:checked-in
+ property that identifies the new version MUST have been added.
+
+ (DAV:keep-checked-out): If DAV:keep-checked-out is specified in
+ the request body, the DAV:checked-out property of the checked-out
+ resource MUST have been updated to identify the new version.
+
+4.4.1 Example - CHECKIN
+
+ >>REQUEST
+
+ CHECKIN /foo.html HTTP/1.1
+ Host: www.webdav.org
+ Content-Length: 0
+
+ >>RESPONSE
+
+ HTTP/1.1 201 Created
+ Location: http://repo.webdav.org/his/23/ver/32
+ Cache-Control: no-cache
+
+ In this example, version-controlled resource /foo.html is checked in,
+ and a new version is created at http://repo.webdav.org/his/23/ver/32.
+
+4.5 UNCHECKOUT Method
+
+ An UNCHECKOUT request can be applied to a checked-out version-
+ controlled resource to cancel the CHECKOUT and restore the pre-
+ CHECKOUT state of the version-controlled resource.
+
+ If an UNCHECKOUT request fails, the server MUST undo any partial
+ effects of the UNCHECKOUT request.
+
+
+
+
+
+Clemm, et al. Standards Track [Page 40]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ Marshalling:
+
+ If a request body is included, it MUST be a DAV:uncheckout XML
+ element.
+
+ <!ELEMENT uncheckout ANY>
+
+ If a response body for a successful request is included, it MUST
+ be a DAV:uncheckout-response XML element.
+
+ <!ELEMENT uncheckout-response ANY>
+
+ The response MUST include a Cache-Control:no-cache header.
+
+ Preconditions:
+
+ (DAV:must-be-checked-out-version-controlled-resource): The
+ request-URL MUST identify a version-controlled resource with a
+ DAV:checked-out property.
+
+ Postconditions:
+
+ (DAV:cancel-checked-out): The value of the DAV:checked-in property
+ is that of the DAV:checked-out property prior to the request, and
+ the DAV:checked-out property has been removed.
+
+ (DAV:restore-content-and-dead-properties): The content and dead
+ properties of the version-controlled resource are copies of its
+ DAV:checked-in version.
+
+4.5.1 Example - UNCHECKOUT
+
+ >>REQUEST
+
+ UNCHECKOUT /foo.html HTTP/1.1
+ Host: www.webdav.org
+ Content-Length: 0
+
+ >>RESPONSE
+
+ HTTP/1.1 200 OK
+ Cache-Control: no-cache
+
+ In this example, the content and dead properties of the version-
+ controlled resource identified by http://www.webdav.org/foo.html are
+ restored to their values preceding the most recent CHECKOUT of that
+ version-controlled resource.
+
+
+
+
+Clemm, et al. Standards Track [Page 41]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+4.6 Additional OPTIONS Semantics
+
+ If a server supports the checkout-in-place feature, it MUST include
+ "checkout-in-place" as a field in the DAV response header from an
+ OPTIONS request on any resource that supports any versioning
+ properties, reports, or methods.
+
+5 Version-History Feature
+
+ It is often useful to have access to a version history even after all
+ version-controlled resources for that version history have been
+ deleted. A server can provide this functionality by supporting
+ version history resources. A version history resource is a resource
+ that exists in a server defined namespace and therefore is unaffected
+ by any deletion or movement of version-controlled resources. A
+ version history resource is an appropriate place to add a property
+ that logically applies to all states of a resource. The DAV:expand-
+ property report (see Section 3.8) can be applied to the DAV:version-
+ set of a version history resource to provide a variety of useful
+ reports on all versions in that version history.
+
+5.1 Version History Properties
+
+ The DAV:resourcetype of a version history MUST be DAV:version-
+ history.
+
+ The version-history feature introduces the following REQUIRED
+ properties for a version history.
+
+5.1.1 DAV:version-set (protected)
+
+ This property identifies each version of this version history.
+
+ <!ELEMENT version-set (href+)>
+
+5.1.2 DAV:root-version (computed)
+
+ This property identifies the root version of this version history.
+
+ <!ELEMENT root-version (href)>
+
+5.2 Additional Version-Controlled Resource Properties
+
+ The version-history feature introduces the following REQUIRED
+ property for a version-controlled resource.
+
+
+
+
+
+
+Clemm, et al. Standards Track [Page 42]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+5.2.1 DAV:version-history (computed)
+
+ This property identifies the version history resource for the
+ DAV:checked-in or DAV:checked-out version of this version-controlled
+ resource.
+
+ <!ELEMENT version-history (href)>
+
+5.3 Additional Version Properties
+
+ The version-history feature introduces the following REQUIRED
+ property for a version.
+
+5.3.1 DAV:version-history (computed)
+
+ This property identifies the version history that contains this
+ version.
+
+ <!ELEMENT version-history (href)>
+
+5.4 DAV:locate-by-history Report
+
+ Many properties identify a version from some version history. It is
+ often useful to be able to efficiently locate a version-controlled
+ resource for that version history. The DAV:locate-by-history report
+ can be applied to a collection to locate the collection member that
+ is a version-controlled resource for a specified version history
+ resource.
+
+ Marshalling:
+
+ The request body MUST be a DAV:locate-by-history XML element.
+
+ <!ELEMENT locate-by-history (version-history-set, prop)>
+ <!ELEMENT version-history-set (href+)>
+ prop: see RFC 2518, Section 12.11
+
+ The response body for a successful request MUST be a
+ DAV:multistatus XML element containing every version-controlled
+ resource that is a member of the collection identified by the
+ request-URL, and whose DAV:version-history property identifies one
+ of the version history resources identified by the request body.
+ The DAV:prop element in the request body identifies which
+ properties should be reported in the DAV:prop elements in the
+ response body.
+
+
+
+
+
+
+Clemm, et al. Standards Track [Page 43]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ Preconditions:
+
+ (DAV:must-be-version-history): Each member of the DAV:version-
+ history-set element in the request body MUST identify a version
+ history resource.
+
+5.4.1 Example - DAV:locate-by-history Report
+
+ >>REQUEST
+
+ REPORT /ws/public HTTP/1.1
+ Host: www.webdav.org
+ Content-Type: text/xml; charset="utf-8"
+ Content-Length: xxxx
+
+ <?xml version="1.0" encoding="utf-8" ?>
+ <D:locate-by-history xmlns:D="DAV:">
+ <D:version-history-set>
+ <D:href>http://repo.webdav.org/his/23</D:href>
+ <D:href>http://repo.webdav.org/his/84</D:href>
+ <D:href>http://repo.webdav.org/his/129</D:href>
+ <D:version-history-set/>
+ <D:prop>
+ </D:version-history>
+ </D:prop>
+ </D:locate-by-history>
+
+ >>RESPONSE
+
+ HTTP/1.1 207 Multi-Status
+ Content-Type: text/xml; charset="utf-8"
+ Content-Length: xxxx
+
+ <?xml version="1.0" encoding="utf-8" ?>
+ <D:multistatus xmlns:D="DAV:">
+ <D:response>
+ <D:href>http://www.webdav.org/ws/public/x/test.html</D:href>
+ <D:propstat>
+ <D:prop>
+ <D:version-history>
+ <D:href>http://repo.webdav.org/his/23</D:href>
+ </D:version-history>
+ </D:prop>
+ <D:status>HTTP/1.1 200 OK</D:status>
+ </D:propstat>
+ </D:response>
+ </D:multistatus>
+
+
+
+
+Clemm, et al. Standards Track [Page 44]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ In this example, there is only one version-controlled member of
+ /ws/public that is a version-controlled resource for one of the three
+ specified version history resources. In particular,
+ /ws/public/x/test.html is the version-controlled resource for
+ http://repo.webdav.org/his/23.
+
+5.5 Additional OPTIONS Semantics
+
+ If the server supports the version-history feature, it MUST include
+ "version-history" as a field in the DAV response header from an
+ OPTIONS request on any resource that supports any versioning
+ properties, reports, or methods.
+
+ A DAV:version-history-collection-set element MAY be included in the
+ request body to identify collections that may contain version history
+ resources.
+
+ Additional Marshalling:
+
+ If an XML request body is included, it MUST be a DAV:options XML
+ element.
+
+ <!ELEMENT options ANY>
+ ANY value: A sequence of elements with at most one
+ DAV:version-history-collection-set element.
+
+ If an XML response body for a successful request is included, it
+ MUST be a DAV:options-response XML element.
+
+ <!ELEMENT options-response ANY>
+ ANY value: A sequence of elements with at most one
+ DAV:version-history-collection-set element.
+
+ <!ELEMENT version-history-collection-set (href*)>
+
+ If DAV:version-history-collection-set is included in the request
+ body, the response body for a successful request MUST contain a
+ DAV:version-history-collection-set element identifying collections
+ that may contain version histories. An identified collection MAY
+ be the root collection of a tree of collections, all of which may
+ contain version histories. Since different servers can control
+ different parts of the URL namespace, different resources on the
+ same host MAY have different DAV:version-history-collection-set
+ values. The identified collections MAY be located on different
+ hosts from the resource.
+
+
+
+
+
+
+Clemm, et al. Standards Track [Page 45]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+5.6 Additional DELETE Semantics
+
+ Additional Postconditions:
+
+ (DAV:delete-version-set): If the request deleted a version
+ history, the request MUST have deleted all versions in the
+ DAV:version-set of that version history, and MUST have satisfied
+ the postconditions for version deletion (see Section 3.13).
+
+ (DAV:version-history-has-root): If the request deleted the root
+ version of a version history, the request MUST have updated the
+ DAV:root-version of the version history to refer to another
+ version that is an ancestor of all other remaining versions in
+ that version history. A result of this postcondition is that
+ every version history will have at least one version, and the only
+ way to delete all versions is to delete the version history
+ resource.
+
+5.7 Additional COPY Semantics
+
+ Additional Preconditions:
+
+ (DAV:cannot-copy-history): If the request-URL identifies a version
+ history, the request MUST fail. In order to create another
+ version history whose versions have the same content and dead
+ properties, the appropriate sequence of VERSION-CONTROL, CHECKOUT,
+ PUT, PROPPATCH, and CHECKIN requests must be made.
+
+5.8 Additional MOVE Semantics
+
+ Additional Preconditions:
+
+ (DAV:cannot-rename-history): If the request-URL identifies a
+ version history, the request MUST fail.
+
+5.9 Additional VERSION-CONTROL Semantics
+
+ Additional Postconditions:
+
+ (DAV:new-version-history): If the request created a new version
+ history, the request MUST have allocated a new server-defined URL
+ for that version history that MUST NOT have previously identified
+ any other resource, and MUST NOT ever identify a resource other
+ than this version history.
+
+
+
+
+
+
+
+Clemm, et al. Standards Track [Page 46]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+5.10 Additional CHECKIN Semantics
+
+ Additional Postconditions:
+
+ (DAV:add-to-history): A URL for the new version resource MUST have
+ been added to the DAV:version-set of the version history of the
+ DAV:checked-out version.
+
+6 Workspace Feature
+
+ In order to allow multiple users to work concurrently on adding
+ versions to the same version history, it is necessary to allocate on
+ the server multiple checked-out resources for the same version
+ history. Even if only one user is making changes to a resource, that
+ user will sometimes wish to create a "private" version, and then to
+ expose that version at a later time. One way to provide this
+ functionality depends on the client keeping track of its current set
+ of checked-out resources. This is the working-resource feature
+ defined in Section 8. The other way to provide this functionality
+ avoids the need for persistent state on the client, and instead has
+ the server maintain a human meaningful namespace for related sets of
+ checked-out resources. This is the workspace feature defined in this
+ section.
+
+ The workspace feature introduces a "workspace resource". A workspace
+ resource is a collection whose members are related version-controlled
+ and non-version-controlled resources. Multiple workspaces may be
+ used to expose different versions and configurations of a set of
+ version-controlled resources concurrently. In order to make changes
+ to a version-controlled resource in one workspace visible in another
+ workspace, that version-controlled resource must be checked in, and
+ then the corresponding version-controlled resource in the other
+ workspace can be updated to display the content and dead properties
+ of the new version.
+
+ In order to ensure unambiguous merging (see Section 11) and
+ baselining (see Section 12) semantics, a workspace may contain at
+ most one version-controlled resource for a given version history.
+ This is required for unambiguous merging because the MERGE method
+ must identify which version-controlled resource is to be the merge
+ target of a given version. This is required for unambiguous
+ baselining because a baseline can only select one version for a given
+ version-controlled resource.
+
+ Initially, an empty workspace can be created. Non-version-controlled
+ resources can then be added to the workspace with standard WebDAV
+ requests such as PUT and MKCOL. Version-controlled resources can be
+ added to the workspace with VERSION-CONTROL requests. If the
+
+
+
+Clemm, et al. Standards Track [Page 47]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ baseline feature is supported, collections in the workspace can be
+ placed under baseline control, and then initialized by existing
+ baselines.
+
+6.1 Workspace Properties
+
+ The workspace feature introduces the following REQUIRED property for
+ a workspace.
+
+6.1.1 DAV:workspace-checkout-set (computed)
+
+ This property identifies each checked-out resource whose
+ DAV:workspace property identifies this workspace.
+
+ <!ELEMENT workspace-checkout-set (href*)>
+
+6.2 Additional Resource Properties
+
+ The workspace feature introduces the following REQUIRED property for
+ a WebDAV resource.
+
+6.2.1 DAV:workspace (protected)
+
+ The DAV:workspace property of a workspace resource MUST identify
+ itself. The DAV:workspace property of any other type of resource
+ MUST be the same as the DAV:workspace of its parent collection.
+
+ <!ELEMENT workspace (href)>
+
+6.3 MKWORKSPACE Method
+
+ A MKWORKSPACE request creates a new workspace resource. A server MAY
+ restrict workspace creation to particular collections, but a client
+ can determine the location of these collections from a
+ DAV:workspace-collection-set OPTIONS request (see Section 6.4).
+
+ If a MKWORKSPACE request fails, the server state preceding the
+ request MUST be restored.
+
+ Marshalling:
+
+ If a request body is included, it MUST be a DAV:mkworkspace XML
+ element.
+
+ <!ELEMENT mkworkspace ANY>
+
+ If a response body for a successful request is included, it MUST
+ be a DAV:mkworkspace-response XML element.
+
+
+
+Clemm, et al. Standards Track [Page 48]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ <!ELEMENT mkworkspace-response ANY>
+
+ The response MUST include a Cache-Control:no-cache header.
+
+ Preconditions:
+
+ (DAV:resource-must-be-null): A resource MUST NOT exist at the
+ request-URL.
+
+ (DAV:workspace-location-ok): The request-URL MUST identify a
+ location where a workspace can be created.
+
+ Postconditions:
+
+ (DAV:initialize-workspace): A new workspace exists at the
+ request-URL. The DAV:resourcetype of the workspace MUST be
+ DAV:collection. The DAV:workspace of the workspace MUST identify
+ the workspace.
+
+6.3.1 Example - MKWORKSPACE
+
+ >>REQUEST
+
+ MKWORKSPACE /ws/public HTTP/1.1
+ Host: www.webdav.org
+ Content-Length: 0
+
+ >>RESPONSE
+
+ HTTP/1.1 201 Created
+ Cache-Control: no-cache
+
+ In this example, a new workspace is created at
+ http://www.webdav.org/ws/public.
+
+6.4 Additional OPTIONS Semantics
+
+ If a server supports the workspace feature, it MUST include
+ "workspace" as a field in the DAV response header from an OPTIONS
+ request on any resource that supports any versioning properties,
+ reports, or methods.
+
+ If a server supports the workspace feature, it MUST also support the
+ checkout-in-place feature and the version-history feature.
+
+ A DAV:workspace-collection-set element MAY be included in the request
+ body to identify collections that may contain workspace resources.
+
+
+
+
+Clemm, et al. Standards Track [Page 49]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ Additional Marshalling:
+
+ If an XML request body is included, it MUST be a DAV:options XML
+ element.
+
+ <!ELEMENT options ANY>
+ ANY value: A sequence of elements with at most one
+ DAV:workspace-collection-set element.
+
+ If an XML response body for a successful request is included, it
+ MUST be a DAV:options-response XML element.
+
+ <!ELEMENT options-response ANY>
+ ANY value: A sequence of elements with at most one
+ DAV:workspace-collection-set element.
+
+ <!ELEMENT workspace-collection-set (href*)>
+
+ If DAV:workspace-collection-set is included in the request body,
+ the response body for a successful request MUST contain a
+ DAV:workspace-collection-set element identifying collections that
+ may contain workspaces. An identified collection MAY be the root
+ collection of a tree of collections, all of which may contain
+ workspaces. Since different servers can control different parts
+ of the URL namespace, different resources on the same host MAY
+ have different DAV:workspace-collection-set values. The
+ identified collections MAY be located on different hosts from the
+ resource.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Clemm, et al. Standards Track [Page 50]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+6.4.1 Example - OPTIONS
+
+ >>REQUEST
+
+ OPTIONS /doc HTTP/1.1
+ Host: www.webdav.org
+ Content-Type: text/xml; charset="utf-8"
+ Content-Length: xxxx
+
+ <?xml version="1.0" encoding="utf-8" ?>
+ <D:options xmlns:D="DAV:">
+ <D:version-history-collection-set/>
+ <D:workspace-collection-set/>
+ </D:options>
+
+ >>RESPONSE
+
+ HTTP/1.1 200 OK
+ DAV: 1
+ DAV: version-control,checkout-in-place,version-history,workspace
+ Content-Type: text/xml; charset="utf-8"
+ Content-Length: xxxx
+
+ <?xml version="1.0" encoding="utf-8" ?>
+ <D:options-response xmlns:D="DAV:">
+ <D:version-history-collection-set>
+ <D:href>http://repo.webdav.org/his</D:href>
+ </D:version-history-collection-set>
+ <D:workspace-collection-set>
+ <D:href>http://www.webdav.org/public/ws</D:href>
+ <D:href>http://www.webdav.org/private/ws</D:href>
+ </D:workspace-collection-set>
+ </D:options-response>
+
+ In this example, the server indicates that it provides Class 1 DAV
+ support and basic-server-workspace versioning support. In addition,
+ the server indicates the requested locations of the version history
+ resources and the workspace resources.
+
+6.5 Additional DELETE Semantics
+
+ Additional Postconditions:
+
+ (DAV:delete-workspace-members): If a workspace is deleted, any
+ resource that identifies that workspace in its DAV:workspace
+ property MUST be deleted.
+
+
+
+
+
+Clemm, et al. Standards Track [Page 51]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+6.6 Additional MOVE Semantics
+
+ Additional Postconditions:
+
+ (DAV:workspace-member-moved): If the request-URL did not identify
+ a workspace, the DAV:workspace of the destination MUST have been
+ updated to have the same value as the DAV:workspace of the parent
+ collection of the destination.
+
+ (DAV:workspace-moved): If the request-URL identified a workspace,
+ any reference to that workspace in a DAV:workspace property MUST
+ have been updated to refer to the new location of that workspace.
+
+6.7 Additional VERSION-CONTROL Semantics
+
+ A VERSION-CONTROL request can be used to create a new version-
+ controlled resource for an existing version history. This allows the
+ creation of version-controlled resources for the same version history
+ in multiple workspaces.
+
+ Additional Marshalling:
+
+ <!ELEMENT version-control ANY>
+ ANY value: A sequence of elements with at most one DAV:version
+ element.
+
+ <!ELEMENT version (href)>
+
+ Additional Preconditions:
+
+ (DAV:cannot-add-to-existing-history): If the DAV:version-control
+ request body element contains a DAV:version element, the request-
+ URL MUST NOT identify a resource.
+
+ (DAV:must-be-version): The DAV:href of the DAV:version element
+ MUST identify a version.
+
+ (DAV:one-version-controlled-resource-per-history-per-workspace):
+ If the DAV:version-control request body specifies a version, and
+ if the request-URL is a member of a workspace, then there MUST NOT
+ already be a version-controlled member of that workspace whose
+ DAV:checked-in or DAV:checked-out property identifies any version
+ from the version history of the version specified in the request
+ body.
+
+
+
+
+
+
+
+Clemm, et al. Standards Track [Page 52]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ Additional Postconditions:
+
+ (DAV:new-version-controlled-resource): If the request-URL did NOT
+ identify a resource, a new version-controlled resource exists at
+ the request-URL whose content and dead properties are initialized
+ by those of the version in the request body, and whose
+ DAV:checked-in property identifies that version.
+
+6.7.1 Example - VERSION-CONTROL (using an existing version history)
+
+ >>REQUEST
+
+ VERSION-CONTROL /ws/public/bar.html HTTP/1.1
+ Host: www.webdav.org
+ Content-Type: text/xml; charset="utf-8"
+ Content-Length: xxxx
+
+ <?xml version="1.0" encoding="utf-8" ?>
+ <D:version-control xmlns:D="DAV:">
+ <D:version>
+ <D:href>http://repo.webdav.org/his/12/ver/V3</D:href>
+ </D:version>
+ </D:version-control>
+
+ >>RESPONSE
+
+ HTTP/1.1 201 Created
+ Cache-Control: no-cache
+
+ In this example, a new version-controlled resource is created at
+ /ws/public/bar.html. The content and dead properties of the new
+ version-controlled resource are initialized to be the same as those
+ of the version identified by http://repo.webdav.org/his/12/ver/V3.
+
+7 UPDATE Feature
+
+ The update feature provides a mechanism for changing the state of a
+ checked-in version-controlled resource to be that of another version
+ from the version history of that resource.
+
+7.1 UPDATE Method
+
+ The UPDATE method modifies the content and dead properties of a
+ checked-in version-controlled resource (the "update target") to be
+ those of a specified version (the "update source") from the version
+ history of that version-controlled resource.
+
+
+
+
+
+Clemm, et al. Standards Track [Page 53]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ The response to an UPDATE request identifies the resources modified
+ by the request, so that a client can efficiently update any cached
+ state it is maintaining. Extensions to the UPDATE method allow
+ multiple resources to be modified from a single UPDATE request (see
+ Section 12.13).
+
+ Marshalling:
+
+ The request body MUST be a DAV:update element.
+
+ <!ELEMENT update ANY>
+ ANY value: A sequence of elements with at most one DAV:version
+ element and at most one DAV:prop element.
+ <!ELEMENT version (href)>
+ prop: see RFC 2518, Section 12.11
+
+ The response for a successful request MUST be a 207 Multi-Status,
+ where the DAV:multistatus XML element in the response body
+ identifies all resources that have been modified by the request.
+
+ multistatus: see RFC 2518, Section 12.9
+
+ The response MUST include a Cache-Control:no-cache header.
+
+ Postconditions:
+
+ (DAV:update-content-and-properties): If the DAV:version element in
+ the request body identified a version that is in the same version
+ history as the DAV:checked-in version of a version-controlled
+ resource identified by the request-URL, then the content and dead
+ properties of that version-controlled resource MUST be the same as
+ those of the version specified by the DAV:version element, and the
+ DAV:checked-in property of the version-controlled resource MUST
+ identify that version. The request-URL MUST appear in a
+ DAV:response element in the response body.
+
+ (DAV:report-properties): If DAV:prop is specified in the request
+ body, the properties specified in the DAV:prop element MUST be
+ reported in the DAV:response elements in the response body.
+
+
+
+
+
+
+
+
+
+
+
+
+Clemm, et al. Standards Track [Page 54]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+7.1.1 Example - UPDATE
+
+ >>REQUEST
+
+ UPDATE /foo.html HTTP/1.1
+ Host: www.webdav.org
+ Content-type: text/xml; charset="utf-8"
+ Content-Length: xxxx
+
+ <?xml version="1.0" encoding="utf-8" ?>
+ <D:update xmlns:D="DAV:">
+ <D:version>
+ <D:href>http://repo.webdav.org/his/23/ver/33</D:href>
+ </D:version>
+ </D:update>
+
+ >>RESPONSE
+
+ HTTP/1.1 207 Multi-Status
+ Content-Type: text/xml; charset="utf-8"
+ Content-Length: xxxx
+ Cache-Control: no-cache
+
+ <?xml version="1.0" encoding="utf-8" ?>
+ <D:multistatus xmlns:D="DAV:">
+ <D:response>
+ <D:href>http://www.webdav.org/foo.html</D:href>
+ <D:status>HTTP/1.1 200 OK</D:status>
+ </D:response>
+
+ In this example, the content and dead properties of
+ http://repo.webdav.org/his/23/ver/33 are copied to the version-
+ controlled resource /foo.html, and the DAV:checked-in property of
+ /foo.html is updated to refer to
+ http://repo.webdav.org/his/23/ver/33.
+
+7.2 Additional OPTIONS Semantics
+
+ If the server supports the update feature, it MUST include "update"
+ as a field in the DAV response header from an OPTIONS request on any
+ resource that supports any versioning properties, reports, or
+ methods.
+
+
+
+
+
+
+
+
+
+Clemm, et al. Standards Track [Page 55]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+8 Label Feature
+
+ A version "label" is a string that distinguishes one version in a
+ version history from all other versions in that version history. A
+ label can automatically be assigned by a server, or it can be
+ assigned by a client in order to provide a meaningful name for that
+ version. A given version label can be assigned to at most one
+ version of a given version history, but client assigned labels can be
+ reassigned to another version at any time. Note that although a
+ given label can be applied to at most one version from the same
+ version history, the same label can be applied to versions from
+ different version histories.
+
+ For certain methods, if the request-URL identifies a version-
+ controlled resource, a label can be specified in a Label request
+ header (see Section 8.3) to cause the method to be applied to the
+ version selected by that label from the version history of that
+ version-controlled resource.
+
+8.1 Additional Version Properties
+
+ The label feature introduces the following REQUIRED property for a
+ version.
+
+8.1.1 DAV:label-name-set (protected)
+
+ This property contains the labels that currently select this version.
+
+ <!ELEMENT label-name-set (label-name*)>
+ <!ELEMENT label-name (#PCDATA)>
+ PCDATA value: string
+
+8.2 LABEL Method
+
+ A LABEL request can be applied to a version to modify the labels that
+ select that version. The case of a label name MUST be preserved when
+ it is stored and retrieved. When comparing two label names to decide
+ if they match or not, a server SHOULD use a case-sensitive URL-
+ escaped UTF-8 encoded comparison of the two label names.
+
+ If a LABEL request is applied to a checked in version-controlled
+ resource, the operation MUST be applied to the DAV:checked-in version
+ of that version-controlled resource.
+
+
+
+
+
+
+
+
+Clemm, et al. Standards Track [Page 56]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ Marshalling:
+
+ The request body MUST be a DAV:label element.
+
+ <!ELEMENT label ANY>
+ ANY value: A sequence of elements with at most one DAV:add,
+ DAV:set, or DAV:remove element.
+
+ <!ELEMENT add (label-name)>
+ <!ELEMENT set (label-name)>
+ <!ELEMENT remove (label-name)>
+ <!ELEMENT label-name (#PCDATA)>
+ PCDATA value: string
+
+ The request MAY include a Label header.
+
+ The request MAY include a Depth header. If no Depth header is
+ included, Depth:0 is assumed. Standard depth semantics apply, and
+ the request is applied to the collection identified by the
+ request-URL and to all members of the collection that satisfy the
+ Depth value. If a Depth header is included and the request fails
+ on any resource, the response MUST be a 207 Multi-Status that
+ identifies all resources for which the request has failed.
+
+ If a response body for a successful request is included, it MUST
+ be a DAV:label-response XML element.
+
+ <!ELEMENT label-response ANY>
+
+ The response MUST include a Cache-Control:no-cache header.
+
+ Preconditions:
+
+ (DAV:must-be-checked-in): If the request-URL identifies a
+ version-controlled resource, the version-controlled resource MUST
+ be checked in.
+
+ (DAV:must-select-version-in-history): If a Label request header is
+ included and the request-URL identifies a version-controlled
+ resource, the specified label MUST select a version in the version
+ history of the version-controlled resource.
+
+ (DAV:add-must-be-new-label): If DAV:add is specified in the
+ request body, the specified label MUST NOT appear in the
+ DAV:label-name-set of any version in the version history of that
+ version-controlled resource.
+
+
+
+
+
+Clemm, et al. Standards Track [Page 57]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ (DAV:label-must-exist): If DAV:remove is specified in the request
+ body, the specified label MUST appear in the DAV:label-name-set of
+ that version.
+
+ Postconditions:
+
+ (DAV:add-or-set-label): If DAV:add or DAV:set is specified in the
+ request body, the specified label MUST appear in the DAV:label-
+ name-set of the specified version, and MUST NOT appear in the
+ DAV:label-name-set of any other version in the version history of
+ that version.
+
+ (DAV:remove-label): If DAV:remove is specified in the request
+ body, the specified label MUST NOT appear in the DAV:label-name-
+ set of any version in the version history of that version.
+
+8.2.1 Example - Setting a label
+
+ >>REQUEST
+
+ LABEL /foo.html HTTP/1.1
+ Host: www.webdav.org
+ Content-type: text/xml; charset="utf-8"
+ Content-Length: xxxx
+
+ <?xml version="1.0" encoding="utf-8" ?>
+ <D:label xmlns:D="DAV:">
+ <D:set>
+ <D:label-name>default</D:label-name>
+ </D:set>
+ </D:label>
+
+ >>RESPONSE
+
+ HTTP/1.1 200 OK
+ Cache-Control: no-cache
+
+ In this example, the label "default" is applied to the DAV:checked-in
+ version of /foo.html.
+
+8.3 Label Header
+
+ For certain methods (e.g. GET, PROPFIND), if the request-URL
+ identifies a version-controlled resource, a label can be specified in
+ a Label request header to cause the method to be applied to the
+ version selected by that label from the version history of that
+ version-controlled resource.
+
+
+
+
+Clemm, et al. Standards Track [Page 58]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ The value of a label header is the name of a label, encoded using
+ URL-escaped UTF-8. For example, the label "release B.3" is
+ identified by the following header:
+
+ Label: release%20B.3
+
+ A Label header MUST have no effect on a request whose request-URL
+ does not identify a version-controlled resource. In particular, it
+ MUST have no effect on a request whose request-URL identifies a
+ version or a version history.
+
+ A server MUST return an HTTP-1.1 Vary header containing Label in a
+ successful response to a cacheable request (e.g., GET) that includes
+ a Label header.
+
+8.4 Additional OPTIONS Semantics
+
+ If the server supports the label feature, it MUST include "label" as
+ a field in the DAV response header from an OPTIONS request on any
+ resource that supports any versioning properties, reports, or
+ methods.
+
+8.5 Additional GET Semantics
+
+ Additional Marshalling:
+
+ The request MAY include a Label header.
+
+ Additional Preconditions:
+
+ (DAV:must-select-version-in-history): If a Label request header is
+ included and the request-URL identifies a version-controlled
+ resource, the specified label MUST select a version in the version
+ history of the version-controlled resource.
+
+ Additional Postconditions:
+
+ (DAV:apply-request-to-labeled-version): If the request-URL
+ identifies a version-controlled resource and a Label request
+ header is included, the response MUST contain the content of the
+ specified version rather than that of the version-controlled
+ resource.
+
+8.6 Additional PROPFIND Semantics
+
+ Additional Marshalling:
+
+ The request MAY include a Label header.
+
+
+
+Clemm, et al. Standards Track [Page 59]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ Additional Preconditions:
+
+ (DAV:must-select-version-in-history): If a Label request header is
+ included and the request-URL identifies a version-controlled
+ resource, the specified label MUST select a version in the version
+ history of the version-controlled resource.
+
+ Additional Postconditions:
+
+ (DAV:apply-request-to-labeled-version): If the request-URL
+ identifies a version-controlled resource and a Label request
+ header is included, the response MUST contain the properties of
+ the specified version rather than that of the version-controlled
+ resource.
+
+8.7 Additional COPY Semantics
+
+ Additional Marshalling:
+
+ The request MAY include a Label header.
+
+ Additional Preconditions:
+
+ (DAV:must-select-version-in-history): If a Label request header is
+ included and the request-URL identifies a version-controlled
+ resource, the specified label MUST select a version in the version
+ history of the version-controlled resource.
+
+ Additional Postconditions:
+
+ (DAV:apply-request-to-labeled-version): If the request-URL
+ identifies a version-controlled resource and a Label request
+ header is included, the request MUST have copied the properties
+ and content of the specified version rather than that of the
+ version-controlled resource.
+
+8.8 Additional CHECKOUT Semantics
+
+ If the server supports the working-resource option, a LABEL header
+ may be included to check out the version selected by the specified
+ label.
+
+ Additional Marshalling:
+
+ The request MAY include a Label header.
+
+
+
+
+
+
+Clemm, et al. Standards Track [Page 60]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ Additional Preconditions:
+
+ (DAV:must-select-version-in-history): If a Label request header is
+ included and the request-URL identifies a version-controlled
+ resource, the specified label MUST select a version in the version
+ history of the version-controlled resource.
+
+ (DAV:must-not-have-label-and-apply-to-version): If a Label request
+ header is included, the request body MUST NOT contain a
+ DAV:apply-to-version element.
+
+ Additional Postconditions:
+
+ (DAV:apply-request-to-labeled-version): If the request-URL
+ identifies a checked-in version-controlled resource, and a Label
+ request header is included, the CHECKOUT MUST have been applied to
+ the version selected by the specified label, and not to the
+ version-controlled resource itself.
+
+8.9 Additional UPDATE Semantics
+
+ If the request body of an UPDATE request contains a DAV:label-name
+ element, the update target is the resource identified by the
+ request-URL, and the update source is the version selected by the
+ specified label from the version history of the update target.
+
+ Additional Marshalling:
+
+ <!ELEMENT update ANY>
+ ANY value: A sequence of elements with at most one DAV:label-name
+ or DAV:version element (but not both).
+ <!ELEMENT label-name (#PCDATA)>
+ PCDATA value: string
+
+ The request MAY include a Depth header. If no Depth header is
+ included, Depth:0 is assumed. Standard depth semantics apply, and
+ the request is applied to the collection identified by the
+ request-URL and to all members of the collection that satisfy the
+ Depth value. If a Depth header is included and the request fails
+ on any resource, the response MUST be a 207 Multi-Status that
+ identifies all resources for which the request has failed.
+
+ Additional Preconditions:
+
+ (DAV:must-select-version-in-history): If the request includes a
+ DAV:label-name element in the request body, the label MUST select
+ a version in the version history of the version-controlled
+ resource identified by the request-URL.
+
+
+
+Clemm, et al. Standards Track [Page 61]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ (DAV:depth-update): If the request includes a Depth header,
+ standard depth semantics apply, and the request is applied to the
+ collection identified by the request-URL and to all members of the
+ collection that satisfy the Depth value. The request MUST be
+ applied to a collection before being applied to any members of
+ that collection, since an update of a version-controlled
+ collection might change the membership of that collection.
+
+ Additional Postconditions:
+
+ (DAV:apply-request-to-labeled-version): If a DAV:label-name
+ element appears in the request body, the content and dead
+ properties of the version-controlled resource must have been
+ updated to be those of the version selected by that label.
+
+9 Working-Resource Feature
+
+ The working-resource feature provides an alternative to the workspace
+ feature for supporting parallel development. Unlike the workspace
+ feature, where the desired configuration of versions and checked-out
+ resources is maintained on the server, the working-resource feature
+ maintains the configuration on the client. This simplifies the
+ server implementation, but does not allow a user to access the
+ configuration from clients in different physical locations, such as
+ from another office, from home, or while traveling. Another
+ difference is that the workspace feature isolates clients from a
+ logical change that involves renaming shared resources, until that
+ logical change is complete and tested; with the working resource
+ feature, all clients use a common set of shared version-controlled
+ resources and every client sees the result of a MOVE as soon as it
+ occurs.
+
+ If a server supports the working-resource feature but not the
+ checkout-in-place feature, a CHECKOUT request can only be used to
+ create a working resource, and cannot be used to check out a
+ version-controlled resource. If a server supports the checkout-in-
+ place feature, but not the working-resource feature, a CHECKOUT can
+ only be used to change the state of a version-controlled resource
+ from checked-in to checked-out.
+
+9.1 Additional Version Properties
+
+ The working-resource feature introduces the following REQUIRED
+ properties for a version.
+
+9.1.1 DAV:checkout-fork
+
+ This property is defined in Section 4.1.1.
+
+
+
+Clemm, et al. Standards Track [Page 62]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+9.1.2 DAV:checkin-fork
+
+ This property is defined in Section 4.1.2.
+
+9.2 Working Resource Properties
+
+ The working-resource feature introduces the following REQUIRED
+ properties for a working resource. Since a working resource is a
+ checked-out resource, it also has any property defined in this
+ document for a checked-out resource.
+
+9.2.1 DAV:auto-update (protected)
+
+ This property identifies the version-controlled resource that will be
+ updated when the working resource is checked in.
+
+ <!ELEMENT auto-update (href)>
+
+9.2.2 DAV:checkout-fork
+
+ This property is defined in Section 4.2.1.
+
+9.2.3 DAV:checkin-fork
+
+ This property is defined in Section 4.2.2.
+
+9.3 CHECKOUT Method (applied to a version)
+
+ A CHECKOUT request can be applied to a version to create a new
+ working resource. The content and dead properties of the working
+ resource are a copy of the version that was checked out.
+
+ Marshalling:
+
+ If a request body is included, it MUST be a DAV:checkout XML
+ element.
+
+ <!ELEMENT checkout ANY>
+
+ ANY value: A sequence of elements with at most one DAV:apply-to-
+ version and at most one DAV:fork-ok element.
+
+ <!ELEMENT apply-to-version EMPTY>
+ <!ELEMENT fork-ok EMPTY>
+
+ If a response body for a successful request is included,
+ it MUST be a DAV:checkout-response XML element.
+
+
+
+
+Clemm, et al. Standards Track [Page 63]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ <!ELEMENT checkout-response ANY>
+
+ The response MUST include a Location header.
+
+ The response MUST include a Cache-Control:no-cache header.
+
+ Preconditions:
+
+ (DAV:checkout-of-version-with-descendant-is-forbidden): See
+ Section 4.3.
+
+ (DAV:checkout-of-version-with-descendant-is-discouraged): See
+ Section 4.3.
+
+ (DAV:checkout-of-checked-out-version-is-forbidden): See Section
+ 4.3.
+
+ (DAV:checkout-of-checked-out-version-is-discouraged): See Section
+ 4.3.
+
+ Postconditions:
+
+ (DAV:create-working-resource): If the request-URL identified a
+ version, the Location response header MUST contain the URL of a
+ new working resource. The DAV:checked-out property of the new
+ working resource MUST identify the version that was checked out.
+ The content and dead properties of the working resource MUST be
+ copies of the content and dead properties of the DAV:checked-out
+ version. The DAV:predecessor-set property of the working resource
+ MUST be initialized to be the version identified by the request-
+ URL. The DAV:auto-update property of the working resource MUST
+ NOT exist.
+
+ (DAV:create-working-resource-from-checked-in-version): If the
+ request-URL identified a version-controlled resource, and
+ DAV:apply-to-version is specified in the request body, the
+ CHECKOUT is applied to the DAV:checked-in version of the version-
+ controlled resource, and not the version-controlled resource
+ itself. A new working resource is created and the version-
+ controlled resource remains checked-in. The DAV:auto-update
+ property of the working resource MUST identify the version-
+ controlled resource.
+
+
+
+
+
+
+
+
+
+Clemm, et al. Standards Track [Page 64]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+9.3.1 Example - CHECKOUT of a version
+
+ >>REQUEST
+
+ CHECKOUT /his/12/ver/V3 HTTP/1.1
+ Host: repo.webdav.org
+ Content-Length: 0
+
+ >>RESPONSE
+
+ HTTP/1.1 201 Created
+ Location: http://repo.webdav.org/wr/157
+ Cache-Control: no-cache
+
+ In this example, the version identified by
+ http://repo.webdav.org/his/12/ver/V3 is checked out, and the new
+ working resource is located at http://repo.webdav.org/wr/157.
+
+9.4 CHECKIN Method (applied to a working resource)
+
+ A CHECKIN request can be applied to a working resource to produce a
+ new version whose content and dead properties are a copy of those of
+ the working resource. If the DAV:auto-update property of the working
+ resource was set because the working resource was created by applying
+ a CHECKOUT with the DAV:apply-to-version flag to a version-controlled
+ resource, the CHECKIN request will also update the content and dead
+ properties of that version-controlled resource to be those of the new
+ version.
+
+ Marshalling:
+
+ If a request body is included, it MUST be a DAV:checkin XML
+ element.
+
+ <!ELEMENT checkin ANY>
+ ANY value: A sequence of elements with at most one DAV:fork-ok
+ element.
+
+ <!ELEMENT fork-ok EMPTY>
+
+ If a response body for a successful request is included, it MUST
+ be a DAV:checkin-response XML element.
+
+ <!ELEMENT checkin-response ANY>
+
+ The response MUST include a Cache-Control:no-cache header.
+
+
+
+
+
+Clemm, et al. Standards Track [Page 65]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ Preconditions:
+
+ (DAV:must-be-checked-out): See Section 4.4.
+
+ (DAV:version-history-is-tree) See Section 4.4.
+
+ (DAV:checkin-fork-forbidden): See Section 4.4.
+
+ (DAV:checkin-fork-discouraged): See Section 4.4.
+
+ (DAV:no-overwrite-by-auto-update): If the DAV:auto-update property
+ for the checked-out resource identifies a version-controlled
+ resource, at least one of the versions identified by the
+ DAV:predecessor-set property of the checked-out resource MUST
+ identify a version that is either the same as or a descendant of
+ the version identified by the DAV:checked-in property of that
+ version-controlled resource.
+
+ Postconditions:
+
+ (DAV:create-version): See Section 4.4.
+
+ (DAV:initialize-version-content-and-properties): See Section 4.4.
+
+ (DAV:auto-update): If the DAV:auto-update property of the
+ checked-out resource identified a version-controlled resource, an
+ UPDATE request with the new version MUST have been applied to that
+ version-controlled resource.
+
+ (DAV:delete-working-resource): If the request-URL identifies a
+ working resource and if DAV:keep-checked-out is not specified in
+ the request body, the working resource is deleted.
+
+9.4.1 Example - CHECKIN of a working resource
+
+ >>REQUEST
+
+ CHECKIN /wr/157 HTTP/1.1
+ Host: repo.webdav.org
+ Content-Length: 0
+
+ >>RESPONSE
+
+ HTTP/1.1 201 Created
+ Location: http://repo.webdav.org/his/23/ver/15
+ Cache-Control: no-cache
+
+
+
+
+
+Clemm, et al. Standards Track [Page 66]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ In this example, the working resource /wr/157 checked in, and a new
+ version is created at http://repo.webdav.org/his/23/ver/15.
+
+9.5 Additional OPTIONS Semantics
+
+ If the server supports the working-resource feature, it MUST include
+ "working-resource" as a field in the DAV response header from an
+ OPTIONS request on any resource that supports any versioning
+ properties, reports, or methods.
+
+9.6 Additional COPY Semantics
+
+ Additional Postconditions:
+
+ (DAV:copy-creates-new-resource): The result of copying a working
+ resource is a new non-version-controlled resource at the
+ destination of the COPY. The new resource MAY automatically be
+ put under version control, but the resulting version-controlled
+ resource MUST be associated with a new version history created for
+ that new version-controlled resource.
+
+9.7 Additional MOVE Semantics
+
+ Additional Preconditions:
+
+ (DAV:cannot-rename-working-resource): If the request-URL
+ identifies a working resource, the request MUST fail.
+
+ Additional Postconditions:
+
+ (DAV:update-auto-update): If the request-URL identified a
+ version-controlled resource, any DAV:auto-update properties that
+ identified that version-controlled resource MUST have been updated
+ to contain the new location of that version-controlled resource.
+
+10 Advanced Versioning Features
+
+ Advanced versioning addresses the problems of parallel development
+ and configuration management of multiple sets of interrelated
+ resources. Traditionally, artifacts of software development,
+ including requirements, design documents, code, and test cases, have
+ been a focus of configuration management. Web sites, comprising
+ multiple inter-linked resources (HTML, graphics, sound, CGI, and
+ others), are another class of complex information artifacts that
+ benefit from the application of configuration management. The
+ advanced versioning capabilities for coordinating concurrent change
+ provide the infrastructure for efficient and controlled management of
+ large evolving web sites.
+
+
+
+Clemm, et al. Standards Track [Page 67]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+10.1 Advanced Versioning Packages
+
+ Although a server MAY support any combination of advanced versioning
+ features, in order to minimize the complexity of a WebDAV advanced
+ versioning client, a WebDAV advanced versioning server SHOULD support
+ one of the following packages:
+
+ Advanced-Server-Workspace Package: basic-server-workspace package
+ plus all advanced features
+
+ Advanced-Client-Workspace Package: basic-client-workspace package
+ plus all advanced features
+
+ The advanced-server-workspace package supports advanced versioning
+ capabilities for a client with no persistent state. The advanced-
+ client-workspace package supports advanced versioning capabilities
+ for a client that maintains configuration state on the client. A
+ server that supports both advanced workspace packages will
+ interoperate with all versioning clients.
+
+10.2 Advanced Versioning Terms
+
+ The following additional terms are used by the advanced versioning
+ features.
+
+ Collection
+
+ A "collection" is a resource whose state consists of not only
+ content and properties, but also a set of named "bindings", where
+ a binding identifies what RFC 2518 calls an "internal member" of
+ the collection. Note that a binding is not a resource, but rather
+ is a part of the state of a collection that defines a mapping from
+ a binding name (a URL segment) to a resource (an internal member
+ of the collection).
+
+ Collection Version Resource
+
+ A "collection version resource", or simply "collection version",
+ captures the dead properties of a version-controlled collection,
+ as well as the names of its version-controlled bindings (see
+ Section 14). A version-controlled binding is a binding to a
+ version-controlled resource. If the checkout-in-place feature is
+ supported, a collection version can be created by checking out and
+ then checking in a version-controlled collection. If the
+ working-resource feature is supported, a collection version can be
+ created by checking out a collection version (to create a "working
+ collection") and then checking in the working collection.
+
+
+
+
+Clemm, et al. Standards Track [Page 68]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ Configuration
+
+ A "configuration" is a set of resources that consists of a root
+ collection and all members (not just internal members) of that
+ root collection that are not members of another configuration.
+ The root collection is called the "configuration root", and the
+ members of this set are called the "members of the configuration".
+ Note that a collection (which is a single resource) is very
+ different from a configuration (which is a set of resources).
+
+ Baseline Resource
+
+ A "baseline resource", or simply "baseline", of a collection is a
+ version of the configuration that is rooted at that collection
+ (see Section 12). In particular, a baseline captures the
+ DAV:checked-in version of every version-controlled member of that
+ configuration. Note that a collection version (which captures the
+ state of a single resource) is very different from a collection
+ baseline (which captures the state of a set of resources).
+
+ Baseline-Controlled Collection
+
+ A "baseline-controlled collection" is a collection from which
+ baselines can be created (see Section 12).
+
+ Version-Controlled Configuration Resource
+
+ A "version-controlled configuration resource", or simply
+ "version-controlled configuration", is a special kind of version-
+ controlled resource that is associated with a baseline-controlled
+ collection, and is used to create and access baselines of that
+ collection (see Section 12). When a collection is both version-
+ controlled and baseline-controlled, a client can create a new
+ version of the collection by checking out and checking in that
+ collection, and it can create a new baseline of that collection by
+ checking out and checking in the version-controlled configuration
+ of that collection.
+
+ Activity Resource
+
+ An "activity resource", or simply "activity", is a resource that
+ selects a set of versions that correspond to a single logical
+ change, where the versions selected from a given version history
+ form a single line of descent through that version history (see
+ Section 13).
+
+
+
+
+
+
+Clemm, et al. Standards Track [Page 69]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+11 Merge Feature
+
+ When a user wants to accept the changes (new versions) created by
+ someone else, it is important not just to update the version-
+ controlled resources in the user's workspace with those new versions,
+ since this could result in "backing out" changes the user has made to
+ those version-controlled resources. Instead, the versions created in
+ another workspace should be "merged" into the user's version-
+ controlled resources.
+
+ The version history of a version-controlled resource provides the
+ information needed to determine the result of the merge. In
+ particular, the merge should select whichever version is later in the
+ line of descent from the root version. In case the versions to be
+ merged are on different lines of descent (neither version is a
+ descendant of the other), neither version should be selected, but
+ instead, a new version should be created that contains the logical
+ merge of the content and dead properties of those versions. The
+ MERGE request can be used to check out each version-controlled
+ resource that requires such a merge, and set the DAV:merge-set
+ property of each checked-out resource to identify the version to be
+ merged. The user is responsible for modifying the content and dead
+ properties of the checked-out resource so that it represents the
+ logical merge of that version, and then adding that version to the
+ DAV:predecessor-set of the checked-out resource.
+
+ If the server is capable of automatically performing the merge, it
+ MAY update the content, dead properties, and DAV:predecessor-set of
+ the checked-out resource itself. Before checking in the
+ automatically merged resource, the user is responsible for verifying
+ that the automatic merge is correct.
+
+11.1 Additional Checked-Out Resource Properties
+
+ The merge feature introduces the following REQUIRED properties for a
+ checked-out resource.
+
+11.1.1 DAV:merge-set
+
+ This property identifies each version that is to be merged into this
+ checked-out resource.
+
+ <!ELEMENT merge-set (href*)>
+
+
+
+
+
+
+
+
+Clemm, et al. Standards Track [Page 70]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+11.1.2 DAV:auto-merge-set
+
+ This property identifies each version that the server has merged into
+ this checked-out resource. The client should confirm that the merge
+ has been performed correctly before moving a URL from the DAV:auto-
+ merge-set to the DAV:predecessor-set of a checked-out resource.
+
+ <!ELEMENT auto-merge-set (href*)>
+
+11.2 MERGE Method
+
+ The MERGE method performs the logical merge of a specified version
+ (the "merge source") into a specified version-controlled resource
+ (the "merge target"). If the merge source is neither an ancestor nor
+ a descendant of the DAV:checked-in or DAV:checked-out version of the
+ merge target, the MERGE checks out the merge target (if it is not
+ already checked out) and adds the URL of the merge source to the
+ DAV:merge-set of the merge target. It is then the client's
+ responsibility to update the content and dead properties of the
+ checked-out merge target so that it reflects the logical merge of the
+ merge source into the current state of the merge target. The client
+ indicates that it has completed the update of the merge target, by
+ deleting the merge source URL from the DAV:merge-set of the checked-
+ out merge target, and adding it to the DAV:predecessor-set. As an
+ error check for a client forgetting to complete a merge, the server
+ MUST fail an attempt to CHECKIN a version-controlled resource with a
+ non-empty DAV:merge-set.
+
+ When a server has the ability to automatically update the content and
+ dead properties of the merge target to reflect the logical merge of
+ the merge source, it may do so unless DAV:no-auto-merge is specified
+ in the MERGE request body. In order to notify the client that a
+ merge source has been automatically merged, the MERGE request MUST
+ add the URL of the auto-merged source to the DAV:auto-merge-set
+ property of the merge target, and not to the DAV:merge-set property.
+ The client indicates that it has verified that the auto-merge is
+ valid, by deleting the merge source URL from the DAV:auto-merge-set,
+ and adding it to the DAV:predecessor-set.
+
+ Multiple merge sources can be specified in a single MERGE request.
+ The set of merge sources for a MERGE request is determined from the
+ DAV:source element of the MERGE request body as follows:
+
+ - If DAV:source identifies a version, that version is a merge
+ source.
+ - If DAV:source identifies a version-controlled resource, the
+ DAV:checked-in version of that version-controlled resource is a
+ merge source.
+
+
+
+Clemm, et al. Standards Track [Page 71]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ - If DAV:source identifies a collection, the DAV:checked-in version
+ of each version-controlled resource that is a member of that
+ collection is a merge source.
+
+ The request-URL identifies the set of possible merge targets. If the
+ request-URL identifies a collection, any member of the configuration
+ rooted at the request-URL is a possible merge target. The merge
+ target of a particular merge source is the version-controlled or
+ checked-out resource whose DAV:checked-in or DAV:checked-out version
+ is from the same version history as the merge source. If a merge
+ source has no merge target, that merge source is ignored.
+
+ The MERGE response identifies the resources that a client must modify
+ to complete the merge. It also identifies the resources modified by
+ the request, so that a client can efficiently update any cached state
+ it is maintaining.
+
+ Marshalling:
+
+ The request body MUST be a DAV:merge element.
+
+ The set of merge sources is determined by the DAV:source element
+ in the request body.
+
+ <!ELEMENT merge ANY>
+ ANY value: A sequence of elements with one DAV:source element, at
+ most one DAV:no-auto-merge element, at most one DAV:no-checkout
+ element, at most one DAV:prop element, and any legal set of
+ elements that can occur in a DAV:checkout element.
+ <!ELEMENT source (href+)>
+ <!ELEMENT no-auto-merge EMPTY>
+ <!ELEMENT no-checkout EMPTY>
+ prop: see RFC 2518, Section 12.11
+
+ The response for a successful request MUST be a 207 Multi-Status,
+ where the DAV:multistatus XML element in the response body
+ identifies all resources that have been modified by the request.
+
+ multistatus: see RFC 2518, Section 12.9
+
+ The response to a successful request MUST include a Location
+ header containing the URL for the new version created by the
+ checkin.
+
+ The response MUST include a Cache-Control:no-cache header.
+
+
+
+
+
+
+Clemm, et al. Standards Track [Page 72]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ Preconditions:
+
+ (DAV:cannot-merge-checked-out-resource): The DAV:source element
+ MUST NOT identify a checked-out resource. If the DAV:source
+ element identifies a collection, the collection MUST NOT have a
+ member that is a checked-out resource.
+
+ (DAV:checkout-not-allowed): If DAV:no-checkout is specified in the
+ request body, it MUST be possible to perform the merge without
+ checking out any of the merge targets.
+
+ All preconditions of the CHECKOUT operation apply to the checkouts
+ performed by the request.
+
+ Postconditions:
+
+ (DAV:ancestor-version): If a merge target is a version-controlled
+ or checked-out resource whose DAV:checked-in version or
+ DAV:checked-out version is the merge source or is a descendant of
+ the merge source, the merge target MUST NOT have been modified by
+ the MERGE.
+
+ (DAV:descendant-version): If the merge target was a checked-in
+ version-controlled resource whose DAV:checked-in version was an
+ ancestor of the merge source, an UPDATE operation MUST have been
+ applied to the merge target to set its content and dead properties
+ to be those of the merge source. If the UPDATE method is not
+ supported, the merge target MUST have been checked out, the
+ content and dead properties of the merge target MUST have been set
+ to those of the merge source, and the merge source MUST have been
+ added to the DAV:auto-merge-set of the merge target. The merge
+ target MUST appear in a DAV:response XML element in the response
+ body.
+
+ (DAV:checked-out-for-merge): If the merge target was a checked-in
+ version-controlled resource whose DAV:checked-in version was
+ neither a descendant nor an ancestor of the merge source, a
+ CHECKOUT MUST have been applied to the merge target. All XML
+ elements in the DAV:merge XML element that could appear in a
+ DAV:checkout XML element MUST have been used as arguments to the
+ CHECKOUT request. The merge target MUST appear in a DAV:response
+ XML element in the response body.
+
+ (DAV:update-merge-set): If the DAV:checked-out version of the
+ merge target is neither equal to nor a descendant of the merge
+ source, the merge source MUST be added to either the DAV:merge-set
+ or the DAV:auto-merge-set of the merge target. The merge target
+ MUST appear in a DAV:response XML element in the response body.
+
+
+
+Clemm, et al. Standards Track [Page 73]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ If a merge source has been added to the DAV:auto-merge-set, the
+ content and dead properties of the merge target MUST have been
+ modified by the server to reflect the result of a logical merge of
+ the merge source and the merge target. If a merge source has been
+ added to the DAV:merge-set, the content and dead properties of the
+ merge target MUST NOT have been modified by the server. If
+ DAV:no-auto-merge is specified in the request body, the merge
+ source MUST NOT have been added to the DAV:auto-merge-set.
+
+ (DAV:report-properties): If DAV:prop is specified in the request
+ body, the properties specified in the DAV:prop element MUST be
+ reported in the DAV:response elements in the response body.
+
+11.2.1 Example - MERGE
+
+ >>REQUEST
+
+ MERGE /ws/public HTTP/1.1
+ Host: www.webdav.org
+ Content-type: text/xml; charset="utf-8"
+ Content-Length: xxxx
+
+ <?xml version="1.0" encoding="utf-8" ?>
+ <D:merge xmlns:D="DAV:">
+ <D:source>
+ <D:href>http://www.webdav.org/ws/dev/sally</D:href>
+ </D:source>
+ </D:merge>
+
+ >>RESPONSE
+
+ HTTP/1.1 207 Multi-Status
+ Content-Type: text/xml; charset="utf-8"
+ Content-Length: xxxx
+ Cache-Control: no-cache
+
+ <?xml version="1.0" encoding="utf-8" ?>
+ <D:multistatus xmlns:D="DAV:">
+ <D:response>
+ <D:href>http://www.webdav.org/ws/public/src/parse.c</D:href>
+ <D:status>HTTP/1.1 200 OK</D:status>
+ </D:response>
+ <D:response>
+ <D:href>http://www.webdav.org/ws/public/doc/parse.html</D:href>
+ <D:status>HTTP/1.1 200 OK</D:status>
+ </D:response>
+ </D:multistatus>
+
+
+
+
+Clemm, et al. Standards Track [Page 74]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ In this example, the DAV:checked-in versions from the workspace
+ http://www.webdav.org/ws/dev/sally are merged into the version-
+ controlled resources in the workspace
+ http://www.webdav.org/ws/public. The resources
+ /ws/public/src/parse.c and /ws/public/doc/parse.html were modified by
+ the request.
+
+11.3 DAV:merge-preview Report
+
+ A merge preview describes the changes that would result if the
+ versions specified by the DAV:source element in the request body were
+ to be merged into the resource identified by the request-URL
+ (commonly, a collection).
+
+ Marshalling:
+
+ The request body MUST be a DAV:merge-preview XML element.
+
+ <!ELEMENT merge-preview (source)>
+ <!ELEMENT source (href)>
+
+ The response body for a successful request MUST be a
+ DAV:merge-preview-report XML element.
+
+ <!ELEMENT merge-preview-report
+ (update-preview | conflict-preview | ignore-preview)*>
+
+ A DAV:update-preview element identifies a merge target whose
+ DAV:checked-in property would change as a result of the MERGE, and
+ identifies the merge source for that merge target.
+
+ <!ELEMENT update-preview (target, version)>
+ <!ELEMENT target (href)>
+ <!ELEMENT version (href)>
+
+ A DAV:conflict-preview element identifies a merge target that
+ requires a merge.
+
+ <!ELEMENT conflict-preview (target, common-ancestor, version)>
+
+ A DAV:common-ancestor element identifies the version that is a
+ common ancestor of both the merge source and the DAV:checked-in or
+ DAV:checked-out version of the merge target.
+
+ <!ELEMENT common-ancestor (href)>
+
+ A DAV:ignore-preview element identifies a version that has no
+ merge target and therefore would be ignored by the merge.
+
+
+
+Clemm, et al. Standards Track [Page 75]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ <!ELEMENT ignore-preview (version)>
+
+11.3.1 Example - DAV:merge-preview Report
+
+ >>REQUEST
+
+ REPORT /ws/public HTTP/1.1
+ Host: www.webdav.org
+ Content-type: text/xml; charset="utf-8"
+ Content-Length: xxxx
+
+ <?xml version="1.0" encoding="utf-8" ?>
+ <D:merge-preview xmlns:D="DAV:">
+ <D:source>
+ <D:href>http://www.webdav.org/ws/dev/fred</D:href>
+ </D:source>
+ </D:merge-preview>
+
+ >>RESPONSE
+
+ HTTP/1.1 200 OK
+ Content-Type: text/xml; charset="utf-8"
+ Content-Length: xxxx
+
+ <?xml version="1.0" encoding="utf-8" ?>
+ <D:merge-preview-report xmlns:D="DAV:">
+ <D:conflict-preview>
+ <D:target>
+ <D:href>http://www.webdav.org/ws/public/foo.html</D:href>
+ </D:target>
+ <D:common-ancestor>
+ <D:href>http://repo.webdav.org/his/23/ver/18</D:href>
+ </D:common-ancestor>
+ <D:version>
+ <D:href>http://repo.webdav.org/his/23/ver/42</D:href>
+ </D:version>
+ </D:conflict-preview>
+ <D:update-preview>
+ <D:target>
+ <D:href>http://www.webdav.org/ws/public/bar.html</D:href>
+ </D:target>
+ <D:version>
+ <D:href>http://www.repo/his/42/ver/3</D:href>
+ </D:version>
+ </D:update-preview>
+ </D:merge-preview-report>
+
+
+
+
+
+Clemm, et al. Standards Track [Page 76]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ In this example, the merge preview report indicates that version
+ /his/23/ver/42 would be merged in /ws/public/foo.html, and version
+ /his/42/ver/3 would update /ws/public/bar.html if the workspace
+ http://www.webdav.org/ws/dev/fred was merged into the workspace
+ http://www.webdav.org/ws/public.
+
+11.4 Additional OPTIONS Semantics
+
+ If the server supports the merge feature, it MUST include "merge" as
+ a field in the DAV response header from an OPTIONS request on any
+ resource that supports any versioning properties, reports, or
+ methods.
+
+11.5 Additional DELETE Semantics
+
+ Additional Postconditions:
+
+ (DAV:delete-version-reference): If a version is deleted, any
+ reference to that version in a DAV:merge-set or DAV:auto-merge-set
+ property MUST be removed.
+
+11.6 Additional CHECKIN Semantics
+
+ Additional Preconditions:
+
+ (DAV:merge-must-be-complete): The DAV:merge-set and DAV:auto-
+ merge-set of the checked-out resource MUST be empty or not exist.
+
+12 Baseline Feature
+
+ A configuration is a set of resources that consists of a root
+ collection and all members of that root collection except those
+ resources that are members of another configuration. A configuration
+ that contains a large number of resources can consume a large amount
+ of space on a server. This can make it prohibitively expensive to
+ remember the state of an existing configuration by creating a
+ Depth:infinity copy of its root collection.
+
+ A baseline is a version resource that captures the state of each
+ version-controlled member of a configuration. A baseline history is
+ a version history whose versions are baselines. New baselines are
+ created by checking out and then checking in a special kind of
+ version-controlled resource called a version-controlled
+ configuration.
+
+ A collection that is under baseline control is called a baseline-
+ controlled collection. In order to allow efficient baseline
+ implementation, the state of a baseline of a collection is limited to
+
+
+
+Clemm, et al. Standards Track [Page 77]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ be a set of versions and their names relative to the collection, and
+ the operations on a baseline are limited to the creation of a
+ baseline from a collection, and restoring or merging the baseline
+ back into a collection. A server MAY automatically put a collection
+ under baseline control when it is created, or a client can use the
+ BASELINE-CONTROL method to put a specified collection under baseline
+ control.
+
+ As a configuration gets large, it is often useful to break it up into
+ a set of smaller configurations that form the logical "components" of
+ that configuration. In order to capture the fact that a baseline of
+ a configuration is logically extended by a component configuration
+ baseline, the component configuration baseline is captured as a
+ "subbaseline" of the baseline.
+
+ The root collection of a configuration is unconstrained with respect
+ to its relationship to the root collection of any of its components.
+ In particular, the root collection of a configuration can have a
+ member that is the root collection of one of its components (e.g.,
+ configuration /sys/x can have a component /sys/x/foo), can be a
+ member of the root collection of one of its components (e.g.,
+ configuration /sys/y/z can have a component /sys/y), or neither
+ (e.g., configuration /sys/x can have a component /comp/bar).
+
+12.1 Version-Controlled Configuration Properties
+
+ Since a version-controlled configuration is a version-controlled
+ resource, it has all the properties of a version-controlled resource.
+ In addition, the baseline feature introduces the following REQUIRED
+ property for a version-controlled configuration.
+
+12.1.1 DAV:baseline-controlled-collection (protected)
+
+ This property identifies the collection that contains the version-
+ controlled resources whose DAV:checked-in versions are being tracked
+ by this version-controlled configuration. The DAV:version-
+ controlled-configuration of the DAV:baseline-controlled-collection of
+ a version-controlled configuration MUST identify that version-
+ controlled configuration.
+
+ <!ELEMENT baseline-controlled-collection (href)>
+
+12.2 Checked-Out Configuration Properties
+
+ Since a checked-out configuration is a checked-out resource, it has
+ all the properties of a checked-out resource. In addition, the
+ baseline feature introduces the following REQUIRED property for a
+ checked-out configuration.
+
+
+
+Clemm, et al. Standards Track [Page 78]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+12.2.1 DAV:subbaseline-set
+
+ This property determines the DAV:subbaseline-set property of the
+ baseline that results from checking in this resource.
+
+ A server MAY reject attempts to modify the DAV:subbaseline-set of a
+ checked-out configuration.
+
+ <!ELEMENT subbaseline-set (href*)>
+
+12.3 Baseline Properties
+
+ The DAV:resourcetype of a baseline MUST be DAV:baseline. Since a
+ baseline is a version resource, it has all the properties of a
+ version resource. In addition, the baseline feature introduces the
+ following REQUIRED properties for a baseline.
+
+12.3.1 DAV:baseline-collection (protected)
+
+ This property contains a server-defined URL for a collection, where
+ each member of this collection MUST either be a version-controlled
+ resource with the same DAV:checked-in version and relative name as a
+ version-controlled member of the baseline-controlled collection at
+ the time the baseline was created, or be a collection needed to
+ provide the relative name for a version-controlled resource.
+
+ <!ELEMENT baseline-collection (href)>
+
+12.3.2 DAV:subbaseline-set (protected)
+
+ The URLs in the DAV:subbaseline-set property MUST identify a set of
+ other baselines. The subbaselines of a baseline are the baselines
+ identified by its DAV:subbaseline-set and all subbaselines of the
+ baselines identified by its DAV:subbaseline-set.
+
+ <!ELEMENT subbaseline-set (href*)>
+
+12.4 Additional Resource Properties
+
+ The baseline feature introduces the following REQUIRED property for a
+ resource.
+
+12.4.1 DAV:version-controlled-configuration (computed)
+
+ If the resource is a member of a version-controlled configuration
+ (i.e. the resource is a collection under baseline control or is a
+ member of a collection under baseline control), this property
+ identifies that version-controlled configuration.
+
+
+
+Clemm, et al. Standards Track [Page 79]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ <!ELEMENT version-controlled-configuration (href)>
+
+12.5 Additional Workspace Properties
+
+ The baseline feature introduces the following REQUIRED property for a
+ workspace.
+
+12.5.1 DAV:baseline-controlled-collection-set (computed)
+
+ This property identifies each member of the workspace that is a
+ collection under baseline control (as well as the workspace itself,
+ if it is under baseline control).
+
+ <!ELEMENT baseline-controlled-collection-set (href*)>
+
+12.6 BASELINE-CONTROL Method
+
+ A collection can be placed under baseline control with a
+ BASELINE-CONTROL request. When a collection is placed under baseline
+ control, the DAV:version-controlled-configuration property of the
+ collection is set to identify a new version-controlled configuration.
+ This version-controlled configuration can be checked out and then
+ checked in to create a new baseline for that collection.
+
+ If a baseline is specified in the request body, the DAV:checked-in
+ version of the new version-controlled configuration will be that
+ baseline, and the collection is initialized to contain version-
+ controlled members whose DAV:checked-in versions and relative names
+ are determined by the specified baseline.
+
+ If no baseline is specified, a new baseline history is created
+ containing a baseline that captures the state of the version-
+ controlled members of the collection, and the DAV:checked-in version
+ of the version-controlled configuration will be that baseline.
+
+ Marshalling:
+
+ If a request body is included, it MUST be a DAV:baseline-control
+ XML element.
+
+ <!ELEMENT baseline-control ANY>
+ ANY value: A sequence of elements with at most one DAV:baseline
+ element.
+
+ <!ELEMENT baseline (href)>
+
+ If a response body for a successful request is included, it MUST
+ be a DAV:baseline-control-response XML element.
+
+
+
+Clemm, et al. Standards Track [Page 80]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ <!ELEMENT baseline-control-response ANY>
+
+ The response MUST include a Cache-Control:no-cache header.
+
+ Preconditions:
+
+ (DAV:version-controlled-configuration-must-not-exist): The
+ DAV:version-controlled-configuration property of the collection
+ identified by the request-URL MUST not exist.
+
+ (DAV:must-be-baseline): The DAV:href of the DAV:baseline element
+ in the request body MUST identify a baseline.
+
+ (DAV:must-have-no-version-controlled-members): If a DAV:baseline
+ element is specified in the request body, the collection
+ identified by the request-URL MUST have no version-controlled
+ members.
+
+ (DAV:one-baseline-controlled-collection-per-history-per-
+ workspace): If the request-URL identifies a workspace or a member
+ of a workspace, and if a baseline is specified in a DAV:baseline
+ element in the request body, then there MUST NOT be another
+ collection in that workspace whose DAV:version-controlled-
+ configuration property identifies a version-controlled
+ configuration for the baseline history of that baseline.
+
+ Postconditions:
+
+ (DAV:create-version-controlled-configuration): A new version-
+ controlled configuration is created, whose DAV:baseline-
+ controlled-collection property identifies the collection.
+
+ (DAV:reference-version-controlled-configuration): The
+ DAV:version-controlled-configuration of the collection identifies
+ the new version-controlled configuration.
+
+ (DAV:select-existing-baseline): If the request body specifies a
+ baseline, the DAV:checked-in property of the new version-
+ controlled configuration MUST have been set to identify this
+ baseline. A version-controlled member of the collection will be
+ created for each version in the baseline, where the version-
+ controlled member will have the content and dead properties of
+ that version, and will have the same name relative to the
+ collection as the corresponding version-controlled resource had
+ when the baseline was created. Any nested collections that are
+ needed to provide the appropriate name for a version-controlled
+ member will be created.
+
+
+
+
+Clemm, et al. Standards Track [Page 81]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ (DAV:create-new-baseline): If no baseline is specified in the
+ request body, the request MUST have created a new baseline history
+ at a server-defined URL, and MUST have created a new baseline in
+ that baseline history. The DAV:baseline-collection of the new
+ baseline MUST identify a collection whose members have the same
+ relative name and DAV:checked-in version as the version-controlled
+ members of the request collection. The DAV:checked-in property of
+ the new version-controlled configuration MUST identify the new
+ baseline.
+
+12.6.1 Example - BASELINE-CONTROL
+
+ >>REQUEST
+
+ BASELINE-CONTROL /src HTTP/1.1
+ Host: www.webdav.org
+ Content-Type: text/xml; charset="utf-8"
+ Content-Length: xxxx
+
+ <?xml version="1.0" encoding="utf-8" ?>
+ <D:baseline-control xmlns:D="DAV:">
+ <D:href>http://www.webdav.org/repo/blh/13/ver/8</D:href>
+ </D:baseline-control>
+
+ >>RESPONSE
+
+ HTTP/1.1 200 OK
+ Cache-Control: no-cache
+ Content-Length: 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Clemm, et al. Standards Track [Page 82]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ In this example, the collection /src is placed under baseline
+ control, and is populated with members from an existing baseline. A
+ new version-controlled configuration (/repo/vcc/128) is created and
+ associated with /src, and /src is initialized with version-controlled
+ members whose DAV:checked-in versions are those selected by the
+ DAV:baseline-collection (/repo/bc/15) of the specified baseline
+ (/repo/blh/13/ver/8). The following diagram illustrates the
+ resulting state on the server.
+
+ +-------------------------------------+
+ |Baseline-Controlled Collection |<------+
+ |/src | |
+ |-------------------------------------| |
+ |DAV:version-controlled-configuration +---+ |
+ +-------------------------------------+ | |
+ | |
+ | |
+ +-------------------------------------+ | |
+ |Version-Controlled Configuration |<--+ |
+ |/repo/vcc/128 | |
+ |-------------------------------------| |
+ |DAV:baseline-controlled-collection +-------+
+ |-------------------------------------|
+ |DAV:checked-in +-------+
+ +-------------------------------------+ |
+ |DAV:version-history +---+ |
+ +-------------------------------------+ | |
+ | |
+ | |
+ +------------------------+ | |
+ |Baseline History |<---------------+ |
+ |/repo/blh/13 | |
+ |------------------------+ |
+ |DAV:version-set +----------------+ |
+ +------------------------+ | | | | |
+ v | v v |
+ | |
+ +------------------------+ | |
+ |Baseline |<-------+-----------+
+ |/repo/blh/13/ver/8 |
+ |------------------------+ +--------------+
+ |DAV:baseline-collection +---->|Collection |
+ +------------------------+ |/repo/bc/15 |
+ +--------------+
+
+
+
+
+
+
+
+Clemm, et al. Standards Track [Page 83]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ In order to create new baselines of /src, /repo/vcc/128 can be
+ checked out, new versions can be created or selected by the version-
+ controlled members of /src, and then /repo/vcc/128 can be checked in
+ to capture the current state of those version-controlled members.
+
+12.7 DAV:compare-baseline Report
+
+ A DAV:compare-baseline report contains the differences between the
+ baseline identified by the request-URL (the "request baseline") and
+ the baseline specified in the request body (the "compare baseline").
+
+ Marshalling:
+
+ The request body MUST be a DAV:compare-baseline XML element.
+
+ <!ELEMENT compare-baseline (href)>
+
+ The response body for a successful request MUST be a DAV:compare-
+ baseline-report XML element.
+
+ <!ELEMENT compare-baseline-report
+ (added-version | deleted-version | changed-version)*>
+
+ A DAV:added-version element identifies a version that is the
+ DAV:checked-in version of a member of the DAV:baseline-collection
+ of the compare baseline, but no version in the version history of
+ that version is the DAV:checked-in version of a member of the
+ DAV:baseline-collection of the request baseline.
+
+ <!ELEMENT added-version (href)>
+
+ A DAV:deleted-version element identifies a version that is the
+ DAV:checked-in version of a member of the DAV:baseline-collection
+ of the request baseline, but no version in the version history of
+ that version is the DAV:checked-in version of a member of the
+ DAV:baseline-collection of the compare baseline.
+
+ <!ELEMENT deleted-version (href)>
+
+ A DAV:changed-version element identifies two different versions
+ from the same version history that are the DAV:checked-in version
+ of the DAV:baseline-collection of the request baseline and the
+ compare baseline, respectively.
+
+ <!ELEMENT changed-version (href, href)>
+
+
+
+
+
+
+Clemm, et al. Standards Track [Page 84]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ Preconditions:
+
+ (DAV:must-be-baseline): The DAV:href in the request body MUST
+ identify a baseline.
+
+ (DAV:baselines-from-same-history): A server MAY require that the
+ baselines being compared be from the same baseline history.
+
+12.7.1 Example - DAV:compare-baseline Report
+
+ >>REQUEST
+
+ REPORT /bl-his/12/bl/14 HTTP/1.1
+ Host: repo.webdav.com
+ Content-Type: text/xml; charset="utf-8"
+ Content-Length: xxxx
+
+ <?xml version="1.0" encoding="utf-8" ?>
+ <D:compare-baseline xmlns:D="DAV:">
+ <D:href>http://repo.webdav.org/bl-his/12/bl/15</D:href>
+ </D:compare-baseline>
+
+ >>RESPONSE
+
+ HTTP/1.1 200 OK
+ Content-Type: text/xml; charset="utf-8"
+ Content-Length: xxxx
+
+ <?xml version="1.0" encoding="utf-8" ?>
+ <D:compare-baseline-report xmlns:D="DAV:">
+ <D:added-version>
+ <D:href>http://repo.webdav.org/his/23/ver/8</D:href>
+ </D:added-version>
+ <D:changed-version>
+ <D:href>http://repo.webdav.org/his/29/ver/12</D:href>
+ <D:href>http://repo.webdav.org/his/29/ver/19</D:href>
+ </D:changed-version>
+ <D:deleted-version>
+ <D:href>http://repo.webdav.org/his/12/ver/4</D:href>
+ </D:deleted-version>
+ </D:compare-baseline-report>
+
+ In this example, the differences between baseline 14 and baseline 15
+ of http://repo.webdav.org/bl-his/12 are identified.
+
+
+
+
+
+
+
+Clemm, et al. Standards Track [Page 85]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+12.8 Additional OPTIONS Semantics
+
+ If a server supports the baseline feature, it MUST include "baseline"
+ as a field in the DAV response header from an OPTIONS request on any
+ resource that supports any versioning properties, reports, or
+ methods.
+
+12.9 Additional MKCOL Semantics
+
+ Additional Postconditions:
+
+ If a server automatically puts a newly created collection under
+ baseline control, all postconditions for BASELINE-CONTROL apply to
+ the MKCOL.
+
+12.10 Additional COPY Semantics
+
+ Additional Postconditions:
+
+ If the request creates a new collection at the Destination, and a
+ server automatically puts a newly created collection under
+ baseline control, all postconditions for BASELINE-CONTROL apply to
+ the COPY.
+
+12.11 Additional CHECKOUT Semantics
+
+ Additional Preconditions:
+
+ (DAV:must-not-update-baseline-collection): If the request-URL
+ identifies a member of the configuration rooted at the
+ DAV:baseline-collection of a baseline, the request MUST fail.
+
+12.12 Additional CHECKIN Semantics
+
+ Additional Preconditions:
+
+ (DAV:no-checked-out-baseline-controlled-collection-members): If
+ the request-URL identifies a version-controlled configuration, all
+ version-controlled members of the DAV:baseline-controlled-
+ collection of the version-controlled configuration MUST be
+ checked-in.
+
+ (DAV:one-version-per-history-per-baseline): If the request-URL
+ identifies a version-controlled configuration, the set of versions
+ selected by that version-controlled configuration MUST contain at
+ most one version from any version history, where a version is
+ selected by a version-controlled configuration if the version is
+ identified by the DAV:checked-in property of any member of the
+
+
+
+Clemm, et al. Standards Track [Page 86]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ configuration rooted at the DAV:baseline-controlled collection of
+ that version-controlled configuration, or is identified by the
+ DAV:checked-in property of any member of the configuration rooted
+ at the DAV:baseline-collection of any subbaseline of that
+ version-controlled configuration.
+
+ (DAV:cannot-modify-version-controlled-configuration): If the
+ request-URL identifies a version-controlled member of a baseline-
+ controlled collection whose version-controlled configuration is
+ checked-in, the request MUST fail unless the DAV:auto-version
+ property of the version-controlled configuration will
+ automatically check out that version-controlled configuration when
+ it is modified.
+
+ Additional Postconditions:
+
+ (DAV:create-baseline-collection): If the request-URL identifies a
+ version-controlled configuration, the DAV:baseline-collection of
+ the new baseline identifies a collection whose members have the
+ same relative name and DAV:checked-in version as the members of
+ the DAV:baseline-controlled-collection of the version-controlled
+ configuration at the time of the request.
+
+ (DAV:modify-configuration): If the request-URL identifies a
+ version-controlled member of a baseline-controlled collection,
+ this is a modification to the version-controlled configuration of
+ that baseline-controlled collection, and standard auto-versioning
+ semantics apply.
+
+12.13 Additional UPDATE Semantics
+
+ Additional Preconditions:
+
+ (DAV:baseline-controlled-members-must-be-checked-in): If the
+ request-URL identifies a version-controlled configuration, then
+ all version-controlled members of the DAV:baseline-controlled-
+ collection of that version-controlled configuration MUST be
+ checked-in.
+
+ (DAV:must-not-update-baseline-collection): If the request-URL
+ identifies a member of the configuration rooted at the
+ DAV:baseline-collection of a baseline, the request MUST fail.
+
+ (DAV:cannot-modify-version-controlled-configuration): If the
+ request updates the DAV:checked-in property of any version-
+ controlled member of a baseline-controlled collection whose
+ version-controlled configuration is checked-in, the request MUST
+
+
+
+
+Clemm, et al. Standards Track [Page 87]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ fail unless the DAV:auto-version property of the version-
+ controlled configuration will automatically check out that
+ version-controlled configuration when it is modified.
+
+ Additional Postconditions:
+
+ (DAV:set-baseline-controlled-collection-members): If the request
+ updated the DAV:checked-in property of a version-controlled
+ configuration, then the version-controlled members of the
+ DAV:baseline-controlled-collection of that version-controlled
+ configuration MUST have been updated so that they have the same
+ relative name, content, and dead properties as the members of the
+ DAV:baseline-collection of the baseline. In particular:
+
+ - A version-controlled member for a given version history MUST
+ have been deleted if there is no version-controlled member for
+ that version history in the DAV:baseline-collection of the
+ baseline.
+ - A version-controlled member for a given version history MUST
+ have been renamed if its name relative to the baseline-
+ controlled collection is different from that of the version-
+ controlled member for that version history in the
+ DAV:baseline-collection of the baseline.
+ - A new version-controlled member MUST have been created for each
+ member of the DAV:baseline-collection of the baseline for which
+ there is no corresponding version-controlled member in the
+ baseline-controlled collection.
+ - An UPDATE request MUST have been applied to each version-
+ controlled member for a given version history whose
+ DAV:checked-in version is not the same as that of the version-
+ controlled member for that version history in the
+ DAV:baseline-collection of the baseline.
+
+ (DAV:update-subbaselines): If the request updated a version-
+ controlled configuration whose DAV:baseline-controlled-collection
+ contains a baseline-controlled member for one of the subbaselines
+ of the request baseline, then the DAV:checked-in property of the
+ version-controlled configuration of that baseline-controlled
+ member MUST have been updated to be that subbaseline. If the
+ request updated a version-controlled configuration whose
+ DAV:baseline-controlled-collection is a member of a workspace that
+ contains a baseline-controlled member for one of the subbaselines
+ of the request baseline, then the DAV:checked-in property of the
+ version-controlled configuration of that baseline-controlled
+ member MUST have been updated to be that subbaseline.
+
+
+
+
+
+
+Clemm, et al. Standards Track [Page 88]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ (DAV:modify-configuration): If the request updated the
+ DAV:checked-in property of any version-controlled member of a
+ baseline-controlled collection, and if this DAV:checked-in
+ property differs from the DAV:checked-in property of the
+ corresponding version-controlled member of the DAV:baseline-
+ collection of the DAV:checked-in baseline of the DAV:version-
+ controlled-configuration of the baseline-controlled collection,
+ then this is a modification to that version-controlled
+ configuration, and standard auto-versioning semantics apply.
+
+12.14 Additional MERGE Semantics
+
+ If the merge source is a baseline, the merge target is a version-
+ controlled configuration for the baseline history of that baseline,
+ where the baseline-controlled collection of that version-controlled
+ configuration is a member of the collection identified by the
+ request-URL.
+
+ Additional Preconditions:
+
+ (DAV:must-not-update-baseline-collection): Same semantics as
+ UPDATE (see Section 12.13).
+
+ (DAV:cannot-modify-version-controlled-configuration): Same
+ semantics as UPDATE (see Section 12.13).
+
+ Additional Postconditions:
+
+ (DAV:merge-baseline): If the merge target is a version-controlled
+ configuration whose DAV:checked-out baseline is not a descendant
+ of the merge baseline, then the merge baseline MUST have been
+ added to the DAV:auto-merge-set of a version-controlled
+ configuration. The DAV:checked-in version of each member of the
+ DAV:baseline-collection of that baseline MUST have been merged
+ into the DAV:baseline-controlled-collection of that version-
+ controlled configuration.
+
+ (DAV:merge-subbaselines): If the merge target is a version-
+ controlled configuration whose DAV:baseline-controlled-collection
+ contains a baseline-controlled member for one of the subbaselines
+ of the merge baseline, then that subbaseline MUST have been merged
+ into the version-controlled configuration of that baseline-
+ controlled member. If the merge target is a version-controlled
+ configuration whose DAV:baseline-controlled-collection is a member
+ of a workspace that contains a baseline-controlled member for one
+ of the subbaselines of the merge baseline, then that subbaseline
+ MUST have been merged into the version-controlled configuration of
+ that baseline-controlled member.
+
+
+
+Clemm, et al. Standards Track [Page 89]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ (DAV:set-baseline-controlled-collection-members): Same semantics
+ as UPDATE (see Section 12.13).
+
+ (DAV:modify-configuration): Same semantics as UPDATE (see Section
+ 12.13).
+
+13 Activity Feature
+
+ An activity is a resource that selects a set of versions that are on
+ a single "line of descent", where a line of descent is a sequence of
+ versions connected by successor relationships. If an activity
+ selects versions from multiple version histories, the versions
+ selected in each version history must be on a single line of descent.
+
+ A common problem that motivates the use of activities is that it is
+ often desirable to perform several different logical changes in a
+ single workspace, and then selectively merge a subset of those
+ logical changes to other workspaces. An activity can be used to
+ represent a single logical change, where an activity tracks all the
+ resources that were modified to effect that single logical change.
+ When a version-controlled resource is checked out, the user specifies
+ which activity should be associated with a new version that will be
+ created when that version-controlled resource is checked in. It is
+ then possible to select a particular logical change for merging into
+ another workspace, by specifying the appropriate activity in a MERGE
+ request.
+
+ Another common problem is that although a version-controlled resource
+ may need to have multiple lines of descent, all work done by members
+ of a given team must be on a single line of descent (to avoid merging
+ between team members). An activity resource provides the mechanism
+ for addressing this problem. When a version-controlled resource is
+ checked out, a client can request that an existing activity be used
+ or that a new activity be created. Activity semantics then ensure
+ that all versions in a given version history that are associated with
+ an activity are on a single line of descent. If all members of a
+ team share a common activity (or sub-activities of a common
+ activity), then all changes made by members of that team will be on a
+ single line of descent.
+
+
+
+
+
+
+
+
+
+
+
+
+Clemm, et al. Standards Track [Page 90]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ The following diagram illustrates activities. Version V5 is the
+ latest version of foo.html selected by activity Act-2, and version V8
+ is the latest version of bar.html selected by activity Act-2.
+
+ foo.html History bar.html History
+
+ +---+ +---+
+ Act-1| |V1 Act-1| |V6
+ +---+ +---+
+ | |
+ | |
+ +---+ +---+
+ Act-1| |V2 Act-2| |V7
+ +---+ +---+
+ / \ |
+ / \ |
+ +---+ +---+ +---+
+ Act-1| |V3 Act-2| |V4 Act-2| |V8
+ +---+ +---+ +---+
+ | |
+ | |
+ +---+ +---+
+ Act-2| |V5 Act-3| |V9
+ +---+ +---+
+
+ Activities appear under a variety of names in existing versioning
+ systems. When an activity is used to capture a logical change, it is
+ commonly called a "change set". When an activity is used to capture
+ a line of descent, it is commonly called a "branch". When a system
+ supports both branches and change sets, it is often useful to require
+ that a particular change set occur on a particular branch. This
+ relationship can be captured by making the change set activity be a
+ "subactivity" of the branch activity.
+
+13.1 Activity Properties
+
+ The DAV:resourcetype of an activity MUST be DAV:activity.
+
+ The activity feature introduces the following REQUIRED properties for
+ an activity.
+
+13.1.1 DAV:activity-version-set (computed)
+
+ This property identifies each version whose DAV:activity-set property
+ identifies this activity. Multiple versions of a single version
+ history can be selected by an activity's DAV:activity-version-set
+
+
+
+
+
+Clemm, et al. Standards Track [Page 91]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ property, but all DAV:activity-version-set versions from a given
+ version history must be on a single line of descent from the root
+ version of that version history.
+
+ <!ELEMENT activity-version-set (href*)>
+
+13.1.2 DAV:activity-checkout-set (computed)
+
+ This property identifies each checked-out resource whose
+ DAV:activity-set identifies this activity.
+
+ <!ELEMENT activity-checkout-set (href*)>
+
+13.1.3 DAV:subactivity-set
+
+ This property identifies each activity that forms a part of the
+ logical change being captured by this activity. An activity behaves
+ as if its DAV:activity-version-set is extended by the DAV:activity-
+ version-set of each activity identified in the DAV:subactivity-set.
+ In particular, the versions in this extended set MUST be on a single
+ line of descent, and when an activity selects a version for merging,
+ the latest version in this extended set is the one that will be
+ merged.
+
+ A server MAY reject attempts to modify the DAV:subactivity-set of an
+ activity.
+
+ <!ELEMENT subactivity-set (href*)>
+
+13.1.4 DAV:current-workspace-set (computed)
+
+ This property identifies each workspace whose DAV:current-activity-
+ set identifies this activity.
+
+ <!ELEMENT current-workspace-set (href*)>
+
+13.2 Additional Version Properties
+
+ The activity feature introduces the following REQUIRED property for a
+ version.
+
+
+
+
+
+
+
+
+
+
+
+Clemm, et al. Standards Track [Page 92]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+13.2.1 DAV:activity-set
+
+ This property identifies the activities that determine to which
+ logical changes this version contributes, and on which lines of
+ descent this version appears. A server MAY restrict the
+ DAV:activity-set to identify a single activity. A server MAY refuse
+ to allow the value of the DAV:activity-set property of a version to
+ be modified.
+
+ <!ELEMENT activity-set (href*)>
+
+13.3 Additional Checked-Out Resource Properties
+
+ The activity feature introduces the following REQUIRED properties for
+ a checked-out resource.
+
+13.3.1 DAV:unreserved
+
+ This property of a checked-out resource indicates whether the
+ DAV:activity-set of another checked-out resource associated with the
+ version history of this version-controlled resource can have an
+ activity that is in the DAV:activity-set property of this checked-out
+ resource.
+
+ A result of the requirement that an activity must form a single line
+ of descent through a given version history is that if multiple
+ checked-out resources for a given version history are checked out
+ unreserved into a single activity, only the first CHECKIN will
+ succeed. Before another of these checked-out resources can be
+ checked in, the user will first have to merge into that checked-out
+ resource the latest version selected by that activity from that
+ version history, and then modify the DAV:predecessor-set of that
+ checked-out resource to identify that version.
+
+ <!ELEMENT unreserved (#PCDATA)>
+ PCDATA value: boolean
+
+13.3.2 DAV:activity-set
+
+ This property of a checked-out resource determines the DAV:activity-
+ set property of the version that results from checking in this
+ resource.
+
+13.4 Additional Workspace Properties
+
+ The activity feature introduces the following REQUIRED property for a
+ workspace.
+
+
+
+
+Clemm, et al. Standards Track [Page 93]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+13.4.1 DAV:current-activity-set
+
+ This property identifies the activities that currently are being
+ performed in this workspace. When a member of this workspace is
+ checked out, if no activity is specified in the checkout request, the
+ DAV:current-activity-set will be used. This allows an activity-
+ unaware client to update a workspace in which activity tracking is
+ required. The DAV:current-activity-set MAY be restricted to identify
+ at most one activity.
+
+ <!ELEMENT current-activity-set (href*)>
+
+13.5 MKACTIVITY Method
+
+ A MKACTIVITY request creates a new activity resource. A server MAY
+ restrict activity creation to particular collections, but a client
+ can determine the location of these collections from a DAV:activity-
+ collection-set OPTIONS request.
+
+ Marshalling:
+
+ If a request body is included, it MUST be a DAV:mkactivity XML
+ element.
+
+ <!ELEMENT mkactivity ANY>
+
+ If a response body for a successful request is included, it MUST
+ be a DAV:mkactivity-response XML element.
+
+ <!ELEMENT mkactivity-response ANY>
+
+ The response MUST include a Cache-Control:no-cache header.
+
+ Preconditions:
+
+ (DAV:resource-must-be-null): A resource MUST NOT exist at the
+ request-URL.
+
+ (DAV:activity-location-ok): The request-URL MUST identify a
+ location where an activity can be created.
+
+ Postconditions:
+
+ (DAV:initialize-activity): A new activity exists at the request-
+ URL. The DAV:resourcetype of the activity MUST be DAV:activity.
+
+
+
+
+
+
+Clemm, et al. Standards Track [Page 94]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+13.5.1 Example - MKACTIVITY
+
+ >>REQUEST
+
+ MKACTIVITY /act/test-23 HTTP/1.1
+ Host: repo.webdav.org
+ Content-Length: 0
+
+ >>RESPONSE
+
+ HTTP/1.1 201 Created
+ Cache-Control: no-cache
+
+ In this example, a new activity is created at
+ http://repo.webdav.org/act/test-23.
+
+13.6 DAV:latest-activity-version Report
+
+ The DAV:latest-activity-version report can be applied to a version
+ history to identify the latest version that is selected from that
+ version history by a given activity.
+
+ Marshalling:
+
+ The request body MUST be a DAV:latest-activity-version XML
+ element.
+
+ <!ELEMENT latest-activity-version (href)>
+
+ The response body for a successful request MUST be a DAV:latest-
+ activity-version-report XML element.
+
+ <!ELEMENT latest-activity-version-report (href)>
+
+ The DAV:href of the response body MUST identify the version of the
+ given version history that is a member of the DAV:activity-
+ version-set of the given activity and has no descendant that is a
+ member of the DAV:activity-version-set of that activity.
+
+ Preconditions:
+
+ (DAV:must-be-activity): The DAV:href in the request body MUST
+ identify an activity.
+
+
+
+
+
+
+
+
+Clemm, et al. Standards Track [Page 95]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+13.7 Additional OPTIONS Semantics
+
+ If the server supports the activity feature, it MUST include
+ "activity" as a field in the DAV response header from an OPTIONS
+ request on any resource that supports any versioning properties,
+ reports, or methods.
+
+ A DAV:activity-collection-set element MAY be included in the request
+ body to identify collections that may contain activity resources.
+
+ Additional Marshalling:
+
+ If an XML request body is included, it MUST be a DAV:options XML
+ element.
+
+ <!ELEMENT options ANY>
+ ANY value: A sequence of elements with at most one
+ DAV:activity-collection-set element.
+
+ If an XML response body for a successful request is included, it
+ MUST be a DAV:options-response XML element.
+
+ <!ELEMENT options-response ANY>
+ ANY value: A sequence of elements with at most one
+ DAV:activity-collection-set element.
+
+ <!ELEMENT activity-collection-set (href*)>
+
+ If DAV:activity-collection-set is included in the request body,
+ the response body for a successful request MUST contain a
+ DAV:activity-collection-set element identifying collections that
+ may contain activities. An identified collection MAY be the root
+ collection of a tree of collections, all of which may contain
+ activities. Since different servers can control different parts
+ of the URL namespace, different resources on the same host MAY
+ have different DAV:activity-collection-set values. The identified
+ collections MAY be located on different hosts from the resource.
+
+13.8 Additional DELETE Semantics
+
+ Additional Postconditions:
+
+ (DAV:delete-activity-reference): If an activity is deleted, any
+ reference to that activity in a DAV:activity-set,
+ DAV:subactivity-set, or DAV:current-activity-set MUST be removed.
+
+
+
+
+
+
+Clemm, et al. Standards Track [Page 96]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+13.9 Additional MOVE Semantics
+
+ Additional Postconditions:
+
+ (DAV:update-checked-out-reference): If a checked-out resource is
+ moved, any reference to that resource in a DAV:activity-checkout-
+ set property MUST be updated to refer to the new location of that
+ resource.
+
+ (DAV:update-activity-reference): If the request-URL identifies an
+ activity, any reference to that activity in a DAV:activity-set,
+ DAV:subactivity-set, or DAV:current-activity-set MUST be updated
+ to refer to the new location of that activity.
+
+ (DAV:update-workspace-reference): If the request-URL identifies a
+ workspace, any reference to that workspace in a DAV:current-
+ workspace-set property MUST be updated to refer to the new
+ location of that workspace.
+
+13.10 Additional CHECKOUT Semantics
+
+ A CHECKOUT request MAY specify the DAV:activity-set for the checked-
+ out resource.
+
+ Additional Marshalling:
+
+ <!ELEMENT checkout ANY> ANY value: A sequence of elements with at
+ most one DAV:activity-set and at most one DAV:unreserved.
+
+ <!ELEMENT activity-set (href+ | new)>
+ <!ELEMENT new EMPTY>
+ <!ELEMENT unreserved EMPTY>
+
+ Additional Preconditions:
+
+ (DAV:one-checkout-per-activity-per-history): If there is a request
+ activity set, unless DAV:unreserved is specified, another checkout
+ from a version of that version history MUST NOT select an activity
+ in that activity set.
+
+ (DAV:linear-activity): If there is a request activity set, unless
+ DAV:unreserved is specified, the selected version MUST be a
+ descendant of all other versions of that version history that
+ select that activity.
+
+
+
+
+
+
+
+Clemm, et al. Standards Track [Page 97]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ Additional Postconditions:
+
+ (DAV:initialize-activity-set): The DAV:activity-set of the
+ checked-out resource is set as follows:
+
+ - If DAV:new is specified as the DAV:activity-set in the request
+ body, then a new activity created by the server is used.
+ - Otherwise, if activities are specified in the request body,
+ then those activities are used.
+ - Otherwise, if the version-controlled resource is a member of a
+ workspace and the DAV:current-activity-set of the workspace is
+ set, then those activities are used.
+ - Otherwise, the DAV:activity-set of the DAV:checked-out version
+ is used.
+
+ (DAV:initialize-unreserved): If DAV:unreserved was specified in
+ the request body, then the DAV:unreserved property of the
+ checked-out resource MUST be "true".
+
+13.10.1 Example - CHECKOUT with an activity
+
+ >>REQUEST
+
+ CHECKOUT /ws/public/foo.html HTTP/1.1
+ Host: www.webdav.org
+ Content-Type: text/xml; charset="utf-8"
+ Content-Length: xxxx
+
+ <?xml version="1.0" encoding="utf-8" ?>
+ <D:checkout xmlns:D="DAV:">
+ <D:activity-set>
+ <D:href>http://repo.webdav.org/act/fix-bug-23</D:href>
+ </D:activity-set>
+ </D:checkout>
+
+ >>RESPONSE
+
+ HTTP/1.1 200 OK
+ Cache-Control: no-cache
+
+ In this example, the CHECKOUT is being performed in the
+ http://repo.webdav.org/act/fix-bug-23 activity.
+
+
+
+
+
+
+
+
+
+Clemm, et al. Standards Track [Page 98]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+13.11 Additional CHECKIN Semantics
+
+ Additional Preconditions:
+
+ (DAV:linear-activity): Any version which is in the version history
+ of the checked-out resource and whose DAV:activity-set identifies
+ an activity from the DAV:activity-set of the checked-out resource
+ MUST be an ancestor of the checked-out resource.
+
+ (DAV:atomic-activity-checkin): If the request-URL identifies an
+ activity, the server MAY fail the request if any of the checked-
+ out resources in the DAV:activity-checkout-set of either that
+ activity or any subactivity of that activity cannot be checked in.
+
+ Additional Postconditions:
+
+ (DAV:initialize-activity-set): The DAV:activity-set of the new
+ version MUST have been initialized to be the same as the
+ DAV:activity-set of the checked-out resource.
+
+ (DAV:activity-checkin): If the request-URL identified an activity,
+ the server MUST have successfully applied the CHECKIN request to
+ each checked-out resource in the DAV:activity-checkout-set of both
+ that activity and any subactivity of that activity.
+
+13.12 Additional MERGE Semantics
+
+ If the DAV:source element of the request body identifies an activity,
+ then for each version history containing a version selected by that
+ activity, the latest version selected by that activity is a merge
+ source. Note that the versions selected by an activity are the
+ versions in its DAV:activity-version-set unioned with the versions
+ selected by the activities in its DAV:subactivity-set.
+
+ Additional Marshalling:
+
+ <!ELEMENT checkin-activity EMPTY>
+
+ Additional Postconditions:
+
+ (DAV:checkin-activity): If DAV:checkin-activity is specified in
+ the request body, and if the DAV:source element in the request
+ body identifies an activity, a CHECKIN request MUST have been
+ successfully applied to that activity before the merge sources
+ were determined.
+
+
+
+
+
+
+Clemm, et al. Standards Track [Page 99]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+14 Version-Controlled-Collection Feature
+
+ As with any versionable resource, when a collection is put under
+ version control, a version history resource is created to contain
+ versions for that version-controlled collection. In order to
+ preserve standard versioning semantics (a version of a collection
+ should not be modifiable), a collection version only records
+ information about the version-controlled bindings of that collection.
+
+ In order to cleanly separate a modification to the namespace from a
+ modification to content or dead properties, a version of a collection
+ has no members, but instead records in its DAV:version-controlled-
+ binding-set property the binding name and version history resource of
+ each version-controlled internal member of that collection. If,
+ instead, a collection version contained bindings to other versions,
+ creating a new version of a resource would require creating a new
+ version of all the collection versions that contain that resource,
+ which would cause activities to become entangled. For example,
+ suppose a "feature-12" activity created a new version of /x/y/a.html.
+ If a collection version contained bindings to versions of its
+ members, a new version of /x/y would have to be created to contain
+ the new version of /x/y/a.html, and a new version of /x would have to
+ be created to contain the new version of /x/y. Now suppose a
+ "bugfix-47" activity created a new version of /x/z/b.html. Again, a
+ new version of /x/z and a new version of /x would have to be created
+ to contain the new version of /x/y/b.html. But now it is impossible
+ to merge just "bugfix-47" into another workspace without "feature-
+ 12", because the version of /x that contains the desired version of
+ /x/z/b.html also contains version of /x/y/a.html created for
+ "feature-12". If, instead, a collection version just records the
+ binding name and version history resource of each version-controlled
+ internal member, changing the version selected by a member of that
+ collection would not require a new version of the collection. The
+ new version is still in the same version history so no new collection
+ version is required, and "feature-12" and "bugfix-47" would not
+ become entangled.
+
+ In the following example, there are three version histories, named
+ VH14, VH19, and VH24, where VH14 contains versions of a collection.
+ The version-controlled collection /x has version V2 of version
+ history VH14 as its DAV:checked-in version. Since V2 has recorded
+ two version controlled bindings, one with binding name "a" to version
+ history VH19, and the other with binding name "b" to version history
+ VH24, /x MUST have two version-controlled bindings, one named "a" to
+ a version-controlled resource for history VH19, and the other named
+ "b" to a version-controlled resource for history VH24. The version-
+
+
+
+
+
+Clemm, et al. Standards Track [Page 100]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ controlled resource /x/a currently has V4 of VH19 as its
+ DAV:checked-in version, while /x/b has V8 of VH24 as its
+ DAV:checked-in version.
+
+ VH19
+ +---------+
+ | +---+ |
+ | | |V4 |
+ | +---+ |
+ | | |
+ | | |
+ | +---+ |
+ | | |V5 |
+ VH14 | +---+ |
+ +---------+ | | |
+ | +---+ | | | |
+ a +---+ | | |V1 | | +---+ |
+ ---->| |checked-in=V4 | +---+ | a | | |V6 |
+ / +---+ | | ------>| +---+ |
+ / | | / | +---------+
+ +---+ | +---+ |
+ /x | |checked-in=V2 | | |V2 |
+ +---+ | +---+ | VH24
+ \ | | \ | b +---------+
+ \ b +---+ | | ------>| +---+ |
+ ---->| |checked-in=V8 | +---+ | | | |V7 |
+ +---+ | | |V3 | | +---+ |
+ | +---+ | | | |
+ +---------+ | | |
+ | +---+ |
+ | | |V8 |
+ | +---+ |
+ | | |
+ | | |
+ | +---+ |
+ | | |V9 |
+ | +---+ |
+ +---------+
+
+ For any request (e.g., DELETE, MOVE, COPY) that modifies a version-
+ controlled binding of a checked-in version-controlled collection, the
+ request MUST fail unless the version-controlled collection has a
+ DAV:auto-version property that will automatically check out the
+ version-controlled collection when it is modified.
+
+ Although a collection version only records the version-controlled
+ bindings of a collection, a version-controlled collection MAY contain
+ both version-controlled and non-version-controlled bindings. Non-
+
+
+
+Clemm, et al. Standards Track [Page 101]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ version-controlled bindings are not under version control, and
+ therefore can be added or deleted without checking out the version-
+ controlled collection.
+
+ Note that a collection version captures only a defined subset of the
+ state of a collection. In particular, a version of a collection
+ captures its dead properties and its bindings to version-controlled
+ resources, but not its live properties or bindings to non-version-
+ controlled resources.
+
+ When a server supports the working-resource feature, a client can
+ check out a collection version to create a working collection.
+ Unlike a version-controlled collection, which contains bindings to
+ version-controlled resources and non-version-controlled resources, a
+ working collection contains bindings to version history resources and
+ non-version-controlled resources. In particular, a working
+ collection is initialized to contain bindings to the version history
+ resources specified by the DAV:version-controlled-binding-set of the
+ checked out collection version. The members of a working collection
+ can then be deleted or moved to another working collection. Non-
+ version-controlled resources can be added to a working collection
+ with methods such as PUT, COPY, and MKCOL. When a working collection
+ is checked in, a VERSION-CONTROL request is automatically applied to
+ every non-version-controlled member of the working collection, and
+ each non-version-controlled member is replaced by its newly created
+ version history. The DAV:version-controlled-binding-set of the new
+ version resulting from checking in a working collection contains the
+ binding name and version history URL for each member of the working
+ collection.
+
+14.1 Version-Controlled Collection Properties
+
+ A version-controlled collection has all the properties of a
+ collection and of a version-controlled resource. In addition, the
+ version-controlled-collection feature introduces the following
+ REQUIRED property for a version-controlled collection.
+
+14.1.1 DAV:eclipsed-set (computed)
+
+ This property identifies the non-version-controlled internal members
+ of the collection that currently are eclipsing a version-controlled
+ internal member of the collection.
+
+ !ELEMENT eclipsed-set (binding-name*)>
+ <!ELEMENT binding-name (#PCDATA)>
+ PCDATA value: URL segment
+
+
+
+
+
+Clemm, et al. Standards Track [Page 102]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ An UPDATE or MERGE request can give a version-controlled collection a
+ version-controlled internal member that has the same name as an
+ existing non-version-controlled internal member. In this case, the
+ non-version-controlled internal member takes precedence and is said
+ to "eclipse" the new versioned-controlled internal member. If the
+ non-version-controlled internal member is removed (e.g., by a DELETE
+ or MOVE), the version-controlled internal member is exposed.
+
+14.2 Collection Version Properties
+
+ A collection version has all the properties of a version. In
+ addition, the version-controlled-collection feature introduces the
+ following REQUIRED property for a collection version.
+
+14.2.1 DAV:version-controlled-binding-set (protected)
+
+ This property captures the name and version-history of each version-
+ controlled internal member of a collection.
+
+ <!ELEMENT version-controlled-binding-set
+ (version-controlled-binding*)>
+ <!ELEMENT version-controlled-binding
+ (binding-name, version-history)>
+ <!ELEMENT binding-name (#PCDATA)>
+ PCDATA value: URL segment
+ <!ELEMENT version-history (href)>
+
+14.3 Additional OPTIONS Semantics
+
+ If the server supports the version-controlled-collection feature, it
+ MUST include "version-controlled-collection" as a field in the DAV
+ response header from an OPTIONS request on any resource that supports
+ any versioning properties, reports, or methods.
+
+14.4 Additional DELETE Semantics
+
+ Additional Preconditions:
+
+ (DAV:cannot-modify-checked-in-parent): If the request-URL
+ identifies a version-controlled resource, the DELETE MUST fail
+ when the collection containing the version-controlled resource is
+ a checked-in version-controlled collection, unless DAV:auto-
+ version semantics will automatically check out the version-
+ controlled collection.
+
+
+
+
+
+
+
+Clemm, et al. Standards Track [Page 103]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+14.5 Additional MKCOL Semantics
+
+ Additional Preconditions:
+
+ If the request creates a new resource that is automatically placed
+ under version control, all preconditions for VERSION-CONTROL apply
+ to the request.
+
+ Additional Postconditions:
+
+ If the new collection is automatically put under version control,
+ all postconditions for VERSION-CONTROL apply to the request.
+
+14.6 Additional COPY Semantics
+
+ Additional Preconditions:
+
+ (DAV:cannot-copy-collection-version): If the source of the request
+ is a collection version, the request MUST fail.
+
+14.7 Additional MOVE Semantics
+
+ Additional Preconditions:
+
+ (DAV:cannot-modify-checked-in-parent): If the source of the
+ request is a version-controlled resource, the request MUST fail
+ when the collection containing the source is a checked-in
+ version-controlled collection, unless DAV:auto-version semantics
+ will automatically check out that version-controlled collection.
+
+ (DAV:cannot-modify-destination-checked-in-parent): If the source
+ of the request is a version-controlled resource, the request MUST
+ fail when the collection containing the destination is a checked-
+ in version-controlled collection, unless DAV:auto-version
+ semantics will automatically check out that version-controlled
+ collection.
+
+14.8 Additional VERSION-CONTROL Semantics
+
+ Additional Preconditions:
+
+ (DAV:cannot-modify-checked-in-parent): If the parent of the
+ request-URL is a checked-in version-controlled collection, the
+ request MUST fail unless DAV:auto-version semantics will
+ automatically check out that version-controlled collection.
+
+
+
+
+
+
+Clemm, et al. Standards Track [Page 104]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ Additional Postconditions:
+
+ (DAV:new-version-controlled-collection): If the request body
+ identified a collection version, the collection at the request-URL
+ MUST contain a version-controlled internal member for each
+ DAV:version-controlled-binding specified in the DAV:version-
+ controlled-binding-set of the collection version, where the name
+ and DAV:version-history of the internal member MUST be the
+ DAV:binding-name and the DAV:version-history specified by the
+ DAV:version-controlled-binding. If the internal member is a
+ member of a workspace, and there is another member of the
+ workspace for the same version history, those two members MUST
+ identify the same version-controlled resource; otherwise, a
+ VERSION-CONTROL request with a server selected version of the
+ version history MUST have been applied to the URL for that
+ internal member.
+
+14.9 Additional CHECKOUT Semantics
+
+ Additional Postconditions:
+
+ (DAV:initialize-version-history-bindings): If the request has been
+ applied to a collection version, the new working collection MUST
+ be initialized to contain a binding to each of the history
+ resources identified in the DAV:version-controlled-binding-set of
+ that collection version.
+
+14.10 Additional CHECKIN Semantics
+
+ Additional Postconditions:
+
+ (DAV:initialize-version-controlled-bindings): If the request-URL
+ identified a version-controlled collection, then the DAV:version-
+ controlled-binding-set of the new collection version MUST contain
+ a DAV:version-controlled-binding that identifies the binding name
+ and version history for each version-controlled binding of the
+ version- controlled collection.
+
+ (DAV:version-control-working-collection-members): If the request-
+ URL identified a working collection, a VERSION-CONTROL request
+ MUST have been automatically applied to every non-version-
+ controlled member of the working collection, and each non-
+ version-controlled member MUST have been replaced by its newly
+ created version history. If a working collection member was a
+ non-version-controlled collection, every member of the non-
+ version-controlled collection MUST have been placed under version
+
+
+
+
+
+Clemm, et al. Standards Track [Page 105]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ control before the non-version-controlled collection was placed
+ under version control. The DAV:version-controlled-binding-set of
+ the new collection version MUST contain a DAV:version-controlled-
+ binding that identifies the binding name and the version history
+ URL for each member of the working collection.
+
+14.11 Additional UPDATE and MERGE Semantics
+
+ Additional Postconditions:
+
+ (DAV:update-version-controlled-collection-members): If the request
+ modified the DAV:checked-in version of a version-controlled
+ collection, then the version-controlled members of that version-
+ controlled collection MUST have been updated. In particular:
+
+ - A version-controlled internal member MUST have been deleted if
+ its version history is not identified by the DAV:version-
+ controlled-binding-set of the new DAV:checked-in version.
+ - A version-controlled internal member for a given version
+ history MUST have been renamed if its binding name differs from
+ the DAV:binding-name for that version history in the
+ DAV:version-controlled-binding-set of the new DAV:checked-in
+ version.
+ - A new version-controlled internal member MUST have been created
+ when a version history is identified by the DAV:version-
+ controlled-binding-set of the DAV:checked-in version, but there
+ was no member of the version-controlled collection for that
+ version history. If a new version-controlled member is in a
+ workspace that already has a version-controlled resource for
+ that version history, then the new version-controlled member
+ MUST be just a binding (i.e., another name for) that existing
+ version-controlled resource. Otherwise, the content and dead
+ properties of the new version-controlled member MUST have been
+ initialized to be those of the version specified for that
+ version history by the request. If no version is specified for
+ that version history by the request, the version selected is
+ server defined.
+
+15 Internationalization Considerations
+
+ This specification has been designed to be compliant with the IETF
+ Policy on Character Sets and Languages [RFC2277]. Specifically,
+ where human-readable strings exist in the protocol, either their
+ charset is explicitly stated, or XML mechanisms are used to specify
+ the charset used. Additionally, these human-readable strings all
+ have the ability to express the natural language of the string.
+
+
+
+
+
+Clemm, et al. Standards Track [Page 106]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ Most of the human-readable strings in this protocol appear in
+ properties, such as DAV:creator-displayname. As defined by RFC 2518,
+ properties have their values marshaled as XML. XML has explicit
+ provisions for character set tagging and encoding, and requires that
+ XML processors read XML elements encoded, at minimum, using the UTF-8
+ [RFC2279] encoding of the ISO 10646 multilingual plane. The charset
+ parameter of the Content-Type header, together with the XML
+ "encoding" attribute, provide charset identification information for
+ MIME and XML processors. Proper use of the charset header with XML
+ is described in RFC 3023. XML also provides a language tagging
+ capability for specifying the language of the contents of a
+ particular XML element. XML uses either IANA registered language
+ tags (see RFC 3066) or ISO 639 language tags in the "xml:lang"
+ attribute of an XML element to identify the language of its content
+ and attributes.
+
+ DeltaV applications, since they build upon WebDAV, are subject to the
+ internationalization requirements specified in RFC 2518, Section 16.
+ In brief, these requirements mandate the use of XML character set
+ tagging, character set encoding, and language tagging capabilities.
+ Additionally, they strongly recommend reading RFC 3023 for
+ instruction on the use of MIME media types for XML transport and the
+ use of the charset header.
+
+ Within this specification, a label is a human-readable string that is
+ marshaled in the Label header and as XML in request entity bodies.
+ When used in the Label header, the value of the label is URL-escaped
+ and encoded using UTF-8.
+
+16 Security Considerations
+
+ All of the security considerations of WebDAV discussed in RFC 2518,
+ Section 17 also apply to WebDAV versioning. Some aspects of the
+ versioning protocol help address security risks introduced by WebDAV,
+ but other aspects can increase these security risks. These issues
+ are detailed below.
+
+16.1 Auditing and Traceability
+
+ WebDAV increases the ease with which a remote client can modify
+ resources on a web site, but this also increases the risk of
+ important information being overwritten and lost, either through user
+ error or user maliciousness. The use of WebDAV versioning can help
+ address this problem by guaranteeing that previous information is
+ saved in the form of immutable versions, and therefore is easily
+ available for retrieval or restoration. In addition, the version
+ history provides a log of when changes were made, and by whom. When
+ requests are appropriately authenticated, the history mechanism
+
+
+
+Clemm, et al. Standards Track [Page 107]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ provides a clear audit trail for changes to web resources. This can
+ often significantly improve the ability to identify the source of the
+ security problem, and thereby help guard against it in the future.
+
+16.2 Increased Need for Access Control
+
+ WebDAV versioning provides a variety of links between related pieces
+ of information. This can increase the risk that authentication or
+ authorization errors allow a client to locate sensitive information.
+ For example, if version history is not appropriately protected by
+ access control, a client can use the version history of a public
+ resource to identify later versions of that resource that the user
+ intended to keep private. This increases the need for reliable
+ authentication and accurate authorization.
+
+ A WebDAV versioning client should be designed to handle a mixture of
+ 200 (OK) and 403 (Forbidden) responses on attempts to access the
+ properties and reports that are supported by a resource. For
+ example, a particular user may be authorized to access the content
+ and dead properties of a version-controlled resource, but not be
+ authorized to access the DAV:checked-in, DAV:checked-out, or
+ DAV:version-history properties of that resource.
+
+16.3 Security Through Obscurity
+
+ While it is acknowledged that "obscurity" is not an effective means
+ of security, it is often a good technique to keep honest people
+ honest. Within this protocol, version URLs, version history URLs,
+ and working resource URLs are generated by the server and can be
+ properly obfuscated so as not to draw attention to them. For
+ example, a version of "http://foobar.com/reviews/salaries.html" might
+ be assigned a URL such as "http://foobar.com/repo/4934943".
+
+16.4 Denial of Service
+
+ The auto-versioning mechanism provided by WebDAV can result in a
+ large number of resources being created on the server, since each
+ update to a resource could potentially result in the creation of a
+ new version resource. This increases the risk of a denial of service
+ attack that exhausts the storage capability of a server. This risk
+ is especially significant because it can be an unintentional result
+ of something like an aggressive auto-save feature provided by an
+ editing client. A server can decrease this risk by using delta
+ storage techniques to minimize the cost of additional versions, and
+ by limiting auto-versioning to a locking client, and thereby
+ decreasing the number of inadvertent version creations.
+
+
+
+
+
+Clemm, et al. Standards Track [Page 108]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+17 IANA Considerations
+
+ This document uses the namespace defined by RFC 2518 for XML
+ elements. All other IANA considerations from RFC 2518 are also
+ applicable to WebDAV Versioning.
+
+18 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
+ procedures of the IETF 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 that may cover technology that may be required to practice
+ this standard. Please address the information to the IETF Executive
+ Director.
+
+19 Acknowledgements
+
+ This protocol is the collaborative product of the authors and the
+ rest of the DeltaV design team: Boris Bokowski, Bruce Cragun
+ (Novell), Jim Doubek (Macromedia), David Durand (INSO), Lisa
+ Dusseault (Xythos), Chuck Fay (FileNet), Yaron Goland, Mark Hale
+ (Interwoven), Henry Harbury (Merant), James Hunt, Jeff McAffer (OTI),
+ Peter Raymond (Merant), Juergen Reuter, Edgar Schwarz (Marconi), Eric
+ Sedlar (Oracle), Bradley Sergeant, Greg Stein, and John Vasta
+ (Rational). 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.
+
+
+
+
+
+
+Clemm, et al. Standards Track [Page 109]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+20 References
+
+ [ISO639] ISO, "Code for the representation of names of languages",
+ ISO 639:1988, 1998.
+
+ [RFC2026] Bradner, S., "The Internet Standards Process -- Revision
+ 3", BCP 9, RFC 2026, October 1996.
+
+ [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
+ Requirement Levels", BCP 14, RFC 2119, March 1997.
+
+ [RFC2277] Alvestrand, H., "IETF Policy on Character Sets and
+ Languages", BCP 18, RFC 2277, January 1998.
+
+ [RFC2279] Yergeau, F., "UTF-8, a transformation format of ISO 10646",
+ RFC 2279, January 1998.
+
+ [RFC2396] Berners-Lee, T., Fielding, R. and L. Masinter, "Uniform
+ Resource Identifiers (URI): Generic Syntax", RFC 2396,
+ August 1998.
+
+ [RFC2518] Goland, Y., Whitehead, E., Faizi, A., Carter, S. and D.
+ Jensen, "HTTP Extensions for Distributed Authoring -
+ WEBDAV", RFC 2518, February 1999.
+
+ [RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H., Masinter,
+ L., Leach, P. and T.Berners-Lee, "Hypertext Transfer
+ Protocol -- HTTP/1.1", RFC 2616, June 1999.
+
+ [RFC3023] Murata, M., St.Laurent, S. and D. Kohn, "XML Media Types",
+ RFC 3023, January 2001.
+
+ [RFC3066] Alvestrand, H., "Tags for the Identification of Languages",
+ BCP 47, RFC 3066, January 2001.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Clemm, et al. Standards Track [Page 110]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+Appendix A - Resource Classification
+
+ This document introduces several different kinds of versioning
+ resources, such as version-controlled resources, versions, checked-
+ out resources, and version history resources. As clients discover
+ resources on a server, they may find it useful to classify those
+ resources (for example, to make UI decisions on choice of icon and
+ menu options).
+
+ Clients should classify a resource by examining the values of the
+ DAV:supported-method-set (see Section 3.1.3) and DAV:supported-live-
+ property-set (see Section 3.1.4) properties of that resource.
+
+ The following list shows the supported live properties and methods
+ for each kind of versioning resource. Where an optional feature
+ introduces a new kind of versioning resource, that feature is noted
+ in parentheses following the name of that kind of versioning
+ resource. If a live property or method is optional for a kind of
+ versioning resource, the feature that introduces that live property
+ or method is noted in parentheses following the live property or
+ method name.
+
+A.1 DeltaV-Compliant Unmapped URL (a URL that identifies no resource)
+
+ Supported methods:
+
+ - PUT [RFC2616]
+ - MKCOL [RFC2518]
+ - MKACTIVITY (activity)
+ - VERSION-CONTROL (workspace)
+ - MKWORKSPACE (workspace)
+
+A.2 DeltaV-Compliant Resource
+
+ Supported live properties:
+
+ - DAV:comment
+ - DAV:creator-displayname
+ - DAV:supported-method-set
+ - DAV:supported-live-property-set
+ - DAV:supported-report-set
+ - all properties defined in WebDAV [RFC2518].
+
+
+
+
+
+
+
+
+
+Clemm, et al. Standards Track [Page 111]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ Supported methods:
+
+ - REPORT
+ - all methods defined in WebDAV [RFC2518]
+ - all methods defined in HTTP/1.1 [RFC2616].
+
+A.3 DeltaV-Compliant Collection
+
+ Supported live properties:
+
+ - all DeltaV-compliant resource properties.
+
+ Supported methods:
+
+ - BASELINE-CONTROL (baseline)
+ - all DeltaV-compliant resource methods.
+
+A.4 Versionable Resource
+
+ Supported live properties:
+
+ - DAV:workspace (workspace)
+ - DAV:version-controlled-configuration (baseline)
+ - all DeltaV-compliant resource properties.
+
+ Supported methods:
+
+ - VERSION-CONTROL
+ - all DeltaV-compliant resource methods.
+
+A.5 Version-Controlled Resource
+
+ Supported live properties:
+
+ - DAV:auto-version
+ - DAV:version-history (version-history)
+ - DAV:workspace (workspace)
+ - DAV:version-controlled-configuration (baseline)
+ - all DeltaV-compliant resource properties.
+
+ Supported methods:
+
+ - VERSION-CONTROL
+ - MERGE (merge)
+ - all DeltaV-compliant resource methods.
+
+
+
+
+
+
+Clemm, et al. Standards Track [Page 112]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+A.6 Version
+
+ Supported live properties:
+
+ - DAV:predecessor-set
+ - DAV:successor-set
+ - DAV:checkout-set
+ - DAV:version-name
+ - DAV:checkout-fork (in-place-checkout or working resource)
+ - DAV:checkin-fork (in-place-checkout or working resource)
+ - DAV:version-history (version-history)
+ - DAV:label-name-set (label)
+ - DAV:activity-set (activity)
+ - all DeltaV-compliant resource properties.
+
+ Supported methods:
+
+ - LABEL (label)
+ - CHECKOUT (working-resource)
+ - all DeltaV-compliant resource methods.
+
+A.7 Checked-In Version-Controlled Resource
+
+ Supported live properties:
+
+ - DAV:checked-in
+ - all version-controlled resource properties.
+
+ Supported methods:
+
+ - CHECKOUT (checkout-in-place)
+ - UPDATE (update)
+ - all version-controlled resource methods.
+
+A.8 Checked-Out Resource
+
+ Supported live properties:
+
+ - DAV:checked-out
+ - DAV:predecessor-set
+ - DAV:checkout-fork (in-place-checkout or working resource)
+ - DAV:checkin-fork (in-place-checkout or working resource)
+ - DAV:merge-set (merge)
+ - DAV:auto-merge-set (merge)
+ - DAV:unreserved (activity)
+ - DAV:activity-set (activity)
+
+
+
+
+
+Clemm, et al. Standards Track [Page 113]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+ Supported methods:
+
+ - CHECKIN (checkout-in-place or working-resource)
+ - all DeltaV-compliant resource methods.
+
+A.9 Checked-Out Version-Controlled Resource (checkout-in-place)
+
+ Supported live properties:
+
+ - all version-controlled resource properties.
+ - all checked-out resource properties.
+
+ Supported methods:
+
+ - UNCHECKOUT
+ - all version-controlled resource methods.
+ - all checked-out resource methods.
+
+A.10 Working Resource (working-resource)
+
+ Supported live properties:
+
+ - all DeltaV-compliant resource properties
+ - all checked-out resource properties
+ - DAV:auto-update.
+
+ Supported methods:
+
+ - all checked-out resource methods.
+
+A.11 Version History (version-history)
+
+ Supported live properties:
+
+ - DAV:version-set
+ - DAV:root-version
+ - all DeltaV-compliant resource properties.
+
+ Supported methods:
+
+ - all DeltaV-compliant resource methods.
+
+
+
+
+
+
+
+
+
+
+Clemm, et al. Standards Track [Page 114]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+A.12 Workspace (workspace)
+
+ Supported live properties:
+
+ - DAV:workspace-checkout-set
+ - DAV:baseline-controlled-collection-set (baseline)
+ - DAV:current-activity-set (activity)
+ - all DeltaV-compliant collection properties.
+
+ Supported methods:
+
+ - all DeltaV-compliant collection methods.
+
+A.13 Activity (activity)
+
+ Supported live properties:
+
+ - DAV:activity-version-set
+ - DAV:activity-checkout-set
+ - DAV:subactivity-set
+ - DAV:current-workspace-set
+ - all DeltaV-compliant resource properties.
+
+ Supported methods:
+
+ - all DeltaV-compliant resource methods.
+
+A.14 Version-Controlled Collection (version-controlled-collection)
+
+ Supported live properties:
+
+ - DAV:eclipsed-set
+ - all version-controlled resource properties.
+
+ Supported methods:
+
+ - all version-controlled resource methods.
+
+A.15 Collection Version (version-controlled-collection)
+
+ Supported live properties:
+
+ - DAV:version-controlled-binding-set
+ - all version properties.
+
+ Supported methods:
+
+ - all version methods.
+
+
+
+Clemm, et al. Standards Track [Page 115]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+A.16 Version-Controlled Configuration (baseline)
+
+ Supported live properties:
+
+ - DAV:baseline-controlled-collection
+ - all version-controlled resource properties.
+
+ Supported methods:
+
+ - all version-controlled resource methods.
+
+A.17 Baseline (baseline)
+
+ Supported live properties:
+
+ - DAV:baseline-collection
+ - DAV:subbaseline-set
+ - all version properties.
+
+ Supported methods:
+
+ - all version methods.
+
+A.18 Checked-Out Version-Controlled Configuration (baseline)
+
+ Supported live properties:
+
+ - DAV:subbaseline-set
+ - all version-controlled configuration properties.
+
+ Supported methods:
+
+ - all version-controlled configuration methods.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Clemm, et al. Standards Track [Page 116]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+Authors' Addresses
+
+ Geoffrey Clemm
+ Rational Software
+ 20 Maguire Road, Lexington, MA 02421
+
+ EMail: geoffrey.clemm@rational.com
+
+
+ Jim Amsden
+ IBM
+ 3039 Cornwallis, Research Triangle Park, NC 27709
+
+ EMail: jamsden@us.ibm.com
+
+
+ Tim Ellison
+ IBM
+ Hursley Park, Winchester, UK S021 2JN
+
+ EMail: tim_ellison@uk.ibm.com
+
+
+ Christopher Kaler
+ Microsoft
+ One Microsoft Way, Redmond, WA 90852
+
+ EMail: ckaler@microsoft.com
+
+
+ Jim Whitehead
+ UC Santa Cruz, Dept. of Computer Science
+ 1156 High Street, Santa Cruz, CA 95064
+
+ EMail: ejw@cse.ucsc.edu
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Clemm, et al. Standards Track [Page 117]
+
+RFC 3253 Versioning Extensions to WebDAV March 2002
+
+
+Full Copyright Statement
+
+ Copyright (C) The Internet Society (2002). All Rights Reserved.
+
+ This document and translations of it may be copied and furnished to
+ others, and derivative works that comment on or otherwise explain it
+ or assist in its implementation may be prepared, copied, published
+ and distributed, in whole or in part, without restriction of any
+ kind, provided that the above copyright notice and this paragraph are
+ included on all such copies and derivative works. However, this
+ document itself may not be modified in any way, such as by removing
+ the copyright notice or references to the Internet Society or other
+ Internet organizations, except as needed for the purpose of
+ developing Internet standards in which case the procedures for
+ copyrights defined in the Internet Standards process must be
+ followed, or as required to translate it into languages other than
+ English.
+
+ The limited permissions granted above are perpetual and will not be
+ revoked by the Internet Society or its successors or assigns.
+
+ This document and the information contained herein is provided on an
+ "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
+ TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
+ BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
+ HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
+ MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+
+Acknowledgement
+
+ Funding for the RFC Editor function is currently provided by the
+ Internet Society.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Clemm, et al. Standards Track [Page 118]
+