INTERNET-DRAFTChris Kaler, Microsoft, Editor draft-ietf-webdav-versioning-01.txt Jim Amsden, IBM GoeffGeoffrey Clemm, RationalBruce Cragun, Novell David Durand, BU Bradley Sergeant, Microfocus Jim Whitehead, UC IrvineSoftware draft-ietf-webdav-versioning-02.txt Chris Kaler, Microsoft ExpiresJune 20,December 25, 1999January 20,June 25, 1999 Versioning Extensions to WebDAV Status of thisMemoMemo. This document is anInternet draft. Internet draftsInternet-Draft and is in full conformance with all provisions of Section 10 of RFC2026. Internet-Drafts are working documents of the Internet Engineering Task Force (IETF), itsareasareas, and its working groups. Note that other groups may also distribute workinginformationdocuments asInternet drafts. Internet DraftsInternet-Drafts. Internet-Drafts are draft documents valid for a maximum of six months andcanmay be updated,replacedreplaced, or obsoleted by other documents at any time. It is inappropriate to useInternet draftsInternet-Drafts as reference material or to cite themasother than as "work inprogress". To learn the current statusprogress." The list ofany Internet draft please check the "lid-abstracts.txt" listing contained in the Internet drafts shadow directories on ftp.is.co.za (Africa), nic.nordu.net (Europe), munnari.oz.au (Pacific Rim), ftp.isi.edu (US East coast) or ftp.isi.edu (US West coast). Further information about the IETFcurrent Internet-Drafts can befoundaccessed atURL: http://www.ietf.org/ Distribution of this document is unlimited. Please send comments to the mailinghttp://www.ietf.org/ietf/1id-abstracts.txt The listat <ietf-dav-versioning@w3.org>, which may be joined by sending a message with subject "subscribe" to <ietf-dav- versioning-request@w3.org>. Discussionsofthe list are archivedInternet-Draft Shadow Directories can be accessed at<URL:http://www.w3.org/Archives/Public/ietf-dav-versioning/>.http://www.ietf.org/shadow.html. Abstract This document specifies a set of methods, headers, andcontent- types composing DAVresource-types that define the WebDAV Versioningextensions, an application ofextensions to the HTTP/1.1protocolprotocol. WebDAV Versioning will minimize the complexity of clients so as toversion DAV resources.facilitate widespread deployment of applications capable of utilizing the WebDAV Versioning services. WebDAV Versioning includes: - Automatic versioning support for versioning-unaware clients, - Linear versioning , and - Support for parallel development and configuration management. Table of Contents VERSIONING EXTENSIONS TOWEBDAV ...........................1WEBDAV...........................1 STATUS OF THIS MEMO.......................................1 ABSTRACT..................................................1 TABLE OFCONTENTS .........................................2 1. INTRODUCTION ..........................................4 1.1.DAV Versioning ........................................4 1.2.RelationshipCONTENTS.........................................2 1 INTRODUCTION...........................................4 1.1 Relationship toDAV ...................................4 1.3.Terms .................................................4 1.4.Definitions ...........................................4 1.5.Notational Conventions ................................5 2. BASICDAV.................................4 1.2 Terms...............................................5 1.3 Notational Conventions..............................5 2 CONCEPTS AND DEFINITIONS...............................5 3 WEBDAV VERSIONING......................................5 2.1.Discovery .............................................6 2.2.Immutable and Mutable Properties ......................7 2.3.VersioningSEMANTICS...........................10 3.1 Creating Versioned Resources.......................10 3.2 Modifying aResource .................................8 2.4.ImmutableVersioned Resource.....................11 3.3 Naming Revisions: Revision Ids andMutable Revisions .......................8 2.5.VersioningLabels..........11 3.4 Parallel Development andCOPY/MOVE ..............................9 2.6.Sharing ...............................................9 2.7.Default Revision .....................................10 2.8.Collection Versioning ................................11 2.9.BasicActivities................12 3.5 RevisionProperties ............................11 2.10. Basic Versioning Headers ...........................13 2.10.1. Revision-Id .....................................13 2.10.2. Branch-Id .......................................14 2.10.3. Override-Checkin ................................14 2.10.4. Revision-Path ...................................14 3. CHECKING OUT/IN RESOURCES ............................15 3.1.Checkout .............................................15 3.2.Checkin ..............................................17 3.3.Cancelling Checkout ..................................17 3.4.Enumeration ..........................................18 4. BRANCHING RESOURCES ..................................18 5.Selection and Workspaces..................12 3.6 Configurations.....................................13 3.7 Versioned Collections..............................13 4 VERSIONING RESOURCEREPORTS .....................................19 5.1.Available Reports ....................................20 5.2.Default History ......................................21 5.3.Active Checkouts .....................................22 5.4.Direct Lineage .......................................23 5.5.Full Lineage .........................................24 6. CONFIGURATION BASICS .................................26 6.1.Discovery ............................................27 6.2.Creating Configurations ..............................28 6.3.Access Using Configurations ..........................30 6.4.Deleting Configurations ..............................30 6.5.Resolution Queues ....................................30 6.6.Configuration Properties .............................31 6.7.Headers ..............................................32 7. CONFIGURATION REPORTS ................................33 7.1.Configuration Derivation .............................33 7.2.Configuration Merge Graph ............................34 8. DYNAMIC CONFIGURATIONS ...............................35 9. WORKSPACE CONFIGURATIONS .............................37 9.1.Managing Configuration Content .......................37 9.2.DefaultTYPES AND PROPERTIES..............14 4.1 Property Attributes................................14 4.1.1 Writeable/Readonly Properties....................14 4.1.2 Immutable/Mutable Properties.....................14 4.1.3 Property Resources...............................14 4.2 Resource Properties................................15 4.2.1 DAV:author (immutable) [Core]...................15 4.2.2 DAV:comment (immutable) [Core]..................15 4.3 Revision Properties................................15 4.3.1 DAV:revision-id (readonly) [Core]................15 4.3.2 DAV:predecessor (readonly, resource) [Core]......15 4.3.3 DAV:successors (readonly, mutable, collection)...15 4.3.4 DAV:single-checkout (mutable) [Core].............15 4.3.5 DAV:auto-version (mutable) [Core]................16 4.3.6 DAV:revision-labels (mutable) [Core].............16 4.3.7 DAV:checkin-date (readonly) [Core]...............16 4.3.8 DAV:working-resources (readonly, collection) ....16 4.3.9 DAV:history-uuid (readonly) [Core]...............16 4.3.10DAV:history (readonly, resource) [Core]..........16 4.3.11DAV:merge-predecessors (mutable, collection).....16 4.3.12DAV:merge-successors ............................17 4.4 Working Resource Properties........................17 4.4.1 DAV:workspace (readonly, resource) [Core]........17 4.4.2 DAV:predecessor (read-only, resource) [Core].....17 4.4.3 DAV:checkin-policy [Core]........................17 4.4.4 DAV:merge-predecessors (collection) [Merging]....18 4.4.5 DAV:activity (readonly, resource) [Activity].....18 4.5 WorkspaceConfigurations .....................38 10. CHECKIN SETS .........................................38 11. VERSION MAPPING ......................................39 11.1. Discovery ..........................................40 11.2. Mapping Configurations .............................41 11.3. MappingProperties...............................18 4.5.1 DAV:working-resources (readonly, collection) ....18 4.5.2 DAV:revision-selection-rule [Core]..............18 4.5.3 DAV:label [Core].................................19 4.5.4 DAV:activity [Activity]..........................19 4.6 Activity Properties................................19 4.6.1 DAV:revisions (readonly, collection) [Activity]..19 4.6.2 DAV:required-activities (collection) [Activity]..19 4.6.3 DAV:workspace (resource) [Activty]...............19 4.7 Configuration Properties...........................19 4.7.1 DAV:roots (immutable, collection) [Configuration]20 4.8 Versioned Collection Properties....................20 4.8.1 DAV:baselines (resource) [Baseline]..............20 4.9 History ResourceVersions ..........................41 12.Properties........................20 4.9.1 DAV:uuid (readonly) [Core].......................20 4.9.2 DAV:revisions (readonly, collection) [Core]......20 4.9.3 DAV:revision-labels (collection) [Core]..........20 5 VERSIONING METHODS....................................21 5.1 Existing Methods...................................21 5.1.1 GET..............................................21 5.1.2 BIND.............................................21 5.1.3 PUT..............................................21 5.1.4 PROPFIND.........................................22 5.1.5 PROPPATCH........................................22 5.1.6 DELETE...........................................22 5.1.7 COPY.............................................22 5.1.8 MOVE.............................................22 5.1.9 LOCK.............................................23 5.1.10 OPTIONS..........................................23 5.2 New Methods........................................23 5.2.1 MKRESOURCE.......................................23 5.2.2 REPORT...........................................24 5.3 New Versioning Methods.............................24 5.3.1 CHECKOUT.........................................24 5.3.2 CHECKIN..........................................25 5.3.3 UNCHECKOUT.......................................25 5.4 New Versioning Headers.............................26 5.4.1 Target-Selector..................................26 6 THE DAV VERSIONINGGRAMMAR ...........................42 13.XML ELEMENTS.......................26 6.1 Revision Selection Rule Elements...................26 6.1.1 DAV:rsr-configuration............................26 6.1.2 DAV:rsr-activity-latest..........................26 6.1.3 DAV:rsr-label....................................27 6.1.4 DAV:rsr-revision-id..............................27 6.1.5 DAV:rsr-latest...................................27 6.1.6 DAV:rsr-or.......................................27 6.1.7 DAV:rsr-merge....................................27 6.2 Report Elements....................................28 6.2.1 Conflicts Report.................................28 6.2.2 Compare Report...................................28 7 INTERNATIONALIZATIONCONSIDERATIONS ..................42 14.CONSIDERATIONS...................29 8 SECURITYCONSIDERATIONS ..............................43 15. SCALABILITY ..........................................43 16. AUTHENTICATION .......................................43 17.CONSIDERATIONS...............................29 9 SCALABILITY...........................................29 10 AUTHENTICATION......................................30 11 IANACONSIDERATIONS ..................................43 18. COPYRIGHT ............................................43 19.CONSIDERATIONS..................................30 12 INTELLECTUALPROPERTY ................................43 20. REFERENCES ...........................................43 21. AUTHOR'S ADDRESSES ...................................44 22.PROPERTY................................30 13 ACKNOWLEDGEMENTS.....................................30 14 INDEX................................................30 15 REFERENCES...........................................31 16 AUTHORS ADDRESSES....................................31 17 OPENISSUES ..........................................44 23. CHANGE HISTORY .......................................45 1.ISSUES..........................................31 1 INTRODUCTION1.1. DAV VersioningThis document defines DAV Versioning extensions, an application of HTTP/1.1 for handling resource versioning in a DAV environment.[DAVVERREQ][VerGoal] describes the motivation and requirements for DAV Versioning. DAV Versioning will minimize the complexity of clients so as to facilitate widespread deployment of applications capable of utilizing the DAV services. As well, DAV Versioning supports a rich level of versioning options for versioning-aware clients. DAV Versioning consists of: - Automatic versioning support forHTTP/1.1-basedversioning-unaware clients, -BasicLinear versioningfor DAV Versioning-aware clients, - File branching for basic parallel development,, and -Configuration supportSupport forsophisticatedparalleldevelopment. 1.2.development and configuration management. 1.1 Relationship to DAV To maximize interoperability and use of existing protocol functionality, versioning support is designed as extensions to the WebDAV [RFC2518] and advanced-collection protocols [AdvCol]. In particular, DAV Versioning relies on the resource and property model defined by[WebDAV]. DAV Versioning does not alter this model. Instead, DAV Versioning allows clients to version and access DAV-modeled resources[RFC2518] andhistories. 1.3. Terms This draft usesthetermsbinding model definedin [RFC2068], [WebDAV], and [DAVVERREQ]. 1.4. Definitionsby [AdvCol]. Thesection defines several termsversioning protocol is designed so thatare used throughout the document specific to DAV versioning. Versioned Resource - This refers toWebDAV locking (class 2) support is optional. The effect of aresourcelock on versioning methods and content-types will be defined to provide interoperability of servers that provide locking support. Versioning support issubject to versioning (independentdefined in the form ofany specific version) Revision - This refers toCore versioning support, supplemented by aspecific versionset ofa versioned resource Revision History - This refersorthogonal extensions to thesetCore: Activity, Merging, Configuration, Versioned Collection, and Baseline versioning support. Core support provides versioning ofchanges to a versioned resource Working Resource - This referslargely independent resources. It allows authors toa resource that is an intermediate revisionconcurrently create and access distinct revisions of aversionedresource.That is,Activity support extends Core support with logical change tracking and management through activities. Merging support extends Core support with conflict detection and resolution through merging. Configuration support extends Core support with theversioned resource has been "checked out"creation of sets of consistent revisions. Versioned Collection support extends Core support with the ability to version the URL namespace. Baseline support extends Configuration and Versioned Collection support with the ability to create and compare configurations of all revisions in a URL subtree. Throughout this specification the [xyz] notation iswhere changes are made until it is readyused tobe "checked in". Noteindicate thatworking resources are not versioned. Revision Thread - This refers toasequenceproperty is introduced at the "xyz" level ofrevisions that have been branched for a specific purpose. Lineversioning support. The levels ofDescent -versioning support provided by a server can be discovered via an OPTIONS request. 1.2 Terms Thisrefers to the sequence of revisions that have occurred fromdraft uses theinitial revision to a specified revision. 1.5.terms defined in [RFC2068] and [RFC2518]. 1.3 Notational Conventions The augmented BNF used by this document to describe protocol elements is exactly the same as the one described in Section 2.1 of [RFC2068]. Because this augmented BNF uses the basic production rules provided in Section 2.2 of [RFC2068], those rules apply to this document as well. The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC2119].2. BASIC VERSIONING2 CONCEPTS AND DEFINITIONS Thebase level of versioning support defined by this specification includes both automatic versioning andsection presents thebasicversioningproperties defined for allconcepts and terms/definitions used in this protocol. Versionable Resource A versionable resource is a resource that can be placed under version control. A null resource is a versionable resource. Versioned Resource A versioned resource is a resource that is under version control. To update a resource under version control, it must be checked out and then subsequently checked in. The checked in states of a versioned resource are saved by the server to capture the history of that resource. Revision A revision contains a particular state of a versioned resource. An immutable revision is a revision whose body and immutable properties cannot be modified. A mutable revision is a revision whose state can be overwritten by a subsequent check in request. Revision Name A revision name is a name that can be used to identify a single revision of a versioned resource. There are two types of revision names: revision identifiers and revision labels. Revision Identifier A revision identifier (or revision ID) is a revision name that is assigned by the server when the revision is created and cannot be changed to refer to a different revision. Revision Label A revision label is a revision name that is assigned by a client and may later be changed to refer to a different revision. The same label may be assigned to many different versioned resources. Initial Revision An initial revision is the first revision of a versioned resource. Predecessor, Successor A predecessor of a revision is the previous revision that was checked out to create the revision. A successor of a revision is a revision whose predecessor is that revision. Each revision has a single predecessor (except for the initial revision which has no predecessor) and zero or more successors. Merge Predecessor, Merge Successor A merge predecessor of a revision is a revision that has been merged into this revision. A merge successor of a revision is a revision into which that revision has been merged. A revision can have zero or more merge predecessors and zero or more merge successors. Line Of Descent A line of descent to a specified revision is a sequence of revisions connected by successor relationships from the initial revision to that revision. The following diagram illustrates several of the previous definitions. Versioned --> Foo.htm Resource +----+ \ Label --> "initial" | V1 | | | \ +----+ | | \ | | | \ v | | \ +----+ | Line | -> "beta1" | V2 | | of | +----+ | Descent | / | | | v v | | +----+ +----+ | | Revision Id --> | V3 | | V4 | | | History +----+ +----+ | | ^ | | | | | v v | | Predecessor | +----+ +----+ v | | V5 | | V6 | | +----+ +----+ | \ | | Successor | | v v | | Merge Successor | +----+ v | v | V7 | | +----+ / Immutable/Mutable Property An immutable property is a property of an immutable revision that cannot be changed. A mutable property is a property of an immutable revision that can be changed. Only properties of revisions can be immutable or mutable. Working Resource A working resource is an editable resource created by checking out a revision of a versioned resource. Checkout/Checkin Model The checkout/checkin model is the process by which updates are made to a versioned resource. A versioned resource is checked out to create an editable working resource. The working resource is updated or augmented as desired, and then checked in to make it part of the revision history of the versioned resource. The following diagram illustrates the checkout/checkin process. ===CHECKOUT==> ===CHECKIN==> Foo.htm | Foo.htm | Foo.htm | | +----+ | +----+ | +----+ | V1 | | | V1 | | | V1 | +----+ | +----+ | +----+ | | | | | v | v | v +----+ | +----+ | +----+ | V2 | | | V2 | | | V2 | +----+ | +----+ | +----+ | | | | | v | v | +----+ | +----+ | | WR | | | V3 | | +----+ | +----+ Activity An activity is a resource that selects a set of revisions that correspond to some unit of work or conceptual change. An activity can contain revisions of multiple versioned resources, and multiple revisions of the same versioned resource. If an activity contains multiple revisions of the same versioned resource, all of those revisions must be on a single line of descent to one of those revisions, and this revision is called the latest revision selected by that activity for that versioned resource. The following diagram illustrates activities. Revision V3 is the latest revision of Foo.htm selected by activity 2, and revision V7 is the latest revision of Bar.htm selected by activity 2. Foo.htm | Bar.htm | +----+ | +----+ | V1 | | | V5 | +----+ | +----+ | Activity | | Activity v 1 | v 2 +----+ | +----+ | V2 | | | V6 | +----+ | +----+ | Activity | | Activity v 2 | v 2 +----+ | +----+ | V3 | | | V7 | +----+ | +----+ | | Activity | v 3 | +----+ | | V8 | | +----+ Workspace A workspace is a resource that is used to identify working resources. A workspace can also contain a revision selection rule that specifies what revision of an arbitrary versioned resource should be accessed when the resource is referenced in the context of that workspace. A revision selection rule provides revision selection based on criteria such as revision name, latest in an activity, and membership in a configuration. A workspace that does not contain a revision selection rule (and therefore can only be used to identify working resources) is called a basic workspace. A workspace that contains a revision selection rule (and therefore can be used to specify revision selection) is called an extended workspace. The following diagram illustrates an extended workspace. Foo.htm Bar.htm Bing.htm +----+ +----+ | V1 | | V1 | +----+ +----+ | | | | +-----------------|------------|------------------+ | v v | | +----+ +----+ +----+ | | | V1 | | V2 | | WR | Workspace X | | +----+ +----+ +----+ | | | | +-----------------|-------------------------------+ | v +----+ | V3 | +----+ Target The target of a versioned resource is the working resource or revision of that versioned resource that is selected by the current workspace. Conflict Report A conflict report lists all versioned resources for which the revision selection rule of a workspace selects multiple revisions on different lines of descent. A conflict is resolved by checking out one of the selected revisions, modifying the resulting working resource so that it represents the logical merge of all selected revisions, and then indicating these merges by adding these revisions as merge predecessors of the working resource. Checking in this working resource creates a new revision that resolves the conflict. Default Workspace A server MUST provide a default workspace that is used to perform version selection for versioning-unaware clients. The revision selection rule of the default workspace MAY be a modifiable by a client. Default Target The default target of a versioned resource is the target selected by the default workspace. Configuration A configuration selects a particular revision from each of a set of versioned resources.To support basic versioning,Unlike a workspace, which can select both working resourcesMUST allowand revisions, a configuration can only select revisions. Also, while the revision selected by a workspace for a versioned resource can change as a result of a change to the versioned resource (such as adding a label), the revision selected by a configuration can change only by explicitly modifying the configuration itself. Unlike an activity, a configuration can select at most one revisions of a given versioned resource. Unlike both a workspace and an activity, a configuration can be versioned. The following diagram illustrates a configuration. Foo.htm Bar.htm Bing.htm +----+ | V1 | +----+ | | +-----------------|-------------------------------+ | | | | +----+ +----+ +----+ Configuration | | | V1 | | V2 | | V1 | V1.1 | | +----+ +----+ +----+ | | | | | +-----------------|------------|------------------| | | v v +----+ +----+ | V3 | | V2 | +----+ +----+ Versioned Collection A versioned collection is a type of versioned resource that results from placing a collection under version control. The members of a versioned collection revision are all versioned resources. Baselined Collection A baselined collection is a special type of versioned collection that is associated with a versioned configuration. A revision of the associated versioned configuration is called a baseline of the baselined collection. A baseline contains a revision of the versioned collection and a revision of every member of every versioned collection revision in that baseline. History Resource A history resource forversioning to occur automatically on selecteda versioned resource contains all revisions of that versioned resource. 3 WEBDAV VERSIONING SEMANTICS 3.1 Creating Versioned Resources A resource may or may not be versioned. When a resource is created by a PUT or MKRESOURCE request, it is commonly created as an unversioned resource. Some unversioned resourceswhenever immutable aspectscan be put under version control; these arechanged,called versionable resources. After a resource is put under version control, it becomes a versioned resource, andsupportan initial revision is created that is a copy of the versionable resource. This initial revision becomes the target of the versioned resource. 3.2 Modifying a Versioned Resource A versioned resource must be checked out before it can be modified. Checking out a versioned resource produces a new resource, called a working resource. A working resource is a modifiable copy of the revision, and is identical to an unversioned resource in all respects other than that it is associated with a particular revision of a particular versioned resource. It may be edited by setting its propertiesdefinedor contents any number of times. When the author is satisfied that the working resource is inthis section. Resourcesa state thatsupport DAV:versioning MUST also provide additional versioning semantics for versioning-aware clients. This section describes these new semantics which include enhancementsshould be retained in the versioned resource history, the author checks in the working resource toexisting DAV methods,create a new revision of the versioned resource. The revision that was checked out is the predecessor of the newheaders,revision. The use of checkout/checkin andnew versioning-specific methods. Althoughworking resources to update a versioned resource addresses thesemantics can vary, most versioning systems supportlost update problem by ensuring that each author is updating his or her own working resource rather than a shared resource, and by ensuring that thenotionpredecessor ofindicatingthe updated resource is reliably tracked. Authors can use checkout/checkin to register intent to modify adocument (check-out)versioned resource similar to the way lock /unlock are used in WebDAV level 2, but the underlying semantics are very different. With lock/unlock, work is serialized and avoiding lost updates depends on clients using the lock/unlock protocol. With checkout/checkin, work can be performed in parallel, andthen submissionthe server prevents lost updates by retaining all saved states (revisions) of themodifiedresource. A revision may be created as either immutable or mutable. An immutable revision cannot be changed and provides a stable environment for history management, change recovery, merging, and configuration management. A mutable revision is more suitable for situations where versioning is treated more informally, and it is not necessary or desirable to maintain strict version(check-in). Typically this involves some form of locking (either sharedhistories, orexclusive). As well, many systems supportto guarantee theabilitypossibility of backtracking tocancelacheck-out or undoprevious saved state. If the revision is mutable, the author may request that arecent check-in. These optionssubsequent checkin should overwrite the revision that was checked out, instead of creating a new revision. In this case, the previous state captured by that revision is lost. Servers may choose to support only immutable revisions, only mutable revisions, or both. 3.3 Naming Revisions: Revision Ids and Labels Revision names areavailableused to distinguish a revision of a versioned resource from other revisions of that versioned resource. A revision name is either a revision id or any number of revision labels. A revision of a versioned resource is given a server assigned revision id when it is created. This revision id acts as a persistent, immutable identifier distinguishing this revision from all others of the same versioned resource. The revision id cannot be changed, assigned tothe owneranother revision, or reused. A user may assign revision labels to a revision in order to provide a more meaningful name for theAdministrator. Usersrevision. A given revision label cangenerally enumerate the current check-outs although they may notbeableassigned todetermine the user in all cases. Likewise, users can review check-insat most one revision of a given versioned resource, but may be reassigned toseeany revision of thechange history. Most systems allow users to selectversioned resource at any time. Revisions of differentversions fromversioned resources may have thechange historysame label. 3.4 Parallel Development andpresentActivities In acomparison of the versions. Note that locks are not covered in this specification as they are addressedlocking model, when a resource is locked for modifications by[WebDAV]. 2.1. Discovery The OPTIONS method allows the clientone author, all other authors are supposed todiscover ifrespect that lock and not work on aresource supports versioning. The presencecopy ofVersioning inthat resource until theresponse header indicates support for DAV versioning. This header indicateslock has been released. To avoid thelevel of support. The following defineswork serialization inherent in theBNF forlocking model, a versioning model allows multiple authors in different workspaces to check out theVersioning header: Versioning := "Versioning" ":" URI The valid values ofsame revision at theURI are: - DAV:basicversioning - TBD This example shows thatsame time, work on their respective working resources in parallel, check in their respective working resources as soon as their changes are complete, and then merge the/somefolder resource supports versioning. >> Request OPTIONS /somefolder/ HTTP/1.1 Host: foobar.com Content-Length: 0 >> Response HTTP/1.1 200 OK Date: Tue, 20 Jan 1998 20:52:29 GMT Connection: close Accept-Ranges: none Allow: OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, COPY, MOVE, MKCOL, PROPFIND, PROPPATCH, LOCK, UNLOCK, MKREF, FREEZE, THAW, CHECKIN, CHECKOUT, UNCHECKOUT, BRANCH Public: OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, COPY, MOVE, MKCOL, PROPFIND, PROPPATCH, LOCK, UNLOCK, MKREF, FREEZE, THAW, CHECKIN, CHECKOUT, UNCHECKOUT, BRANCH Versioning: DAV:basicversioning Content-Length: 0 Sinceresulting revisions at someaspects of DAV versioning require clients to know additional information, clients can includelater time. Although arequest body that specifies that DAVsimple versioninginformation is desired. The information is returned in the response body, formatted in XML. >> Request OPTIONS /somefolder/ HTTP/1.1 Host: foobar.com Content-Length: xxx Content-Type: text/xml <?xml version="1.0" encoding="utf-8" ?> <D:options xmlns:D="DAV:"> <D:verinfo/> </D:options> >> Response HTTP/1.1 200 OK Date: Tue, 20 Jan 1998 20:52:29 GMT Connection: close Accept-Ranges: none Allow: OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, COPY, MOVE, MKCOL, PROPFIND, PROPPATCH, LOCK, UNLOCK, MKREF, FREEZE, THAW, CHECKIN, CHECKOUT, UNCHECKOUT, BRANCH Public: OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, COPY, MOVE, MKCOL, PROPFIND, PROPPATCH, LOCK, UNLOCK, MKREF, FREEZE, THAW, CHECKIN, CHECKOUT, UNCHECKOUT, BRANCH Versioning: DAV:basicversioning Content-Type: text/xml Content-Length: xxx <?xml version="1.0" encoding="utf-8" ?> <D:options xmlns:D="DAV:"> <D:verinfo> ... </D:verinfo> </D:options> The details ofmodel works well for isolated changes to independent resources, thetags returnedrequired merge process becomes unmanageable when sequences of inter-related changes aredescribed throughoutperformed on sets of related resource. To address thisspecification. 2.2. Immutable and Mutable Propertiesmerge problem, resources can be checked out in the context of an activity. Animmutable property is defined asactivity captures the set of revisions that form aproperty that, when changed, causesset of related changes an author is making to one or more versioned resources. Each activity represents anew revisionthread of development, where any thread can be isolated from other threads to provide a stable environment for parallel work. In case parallel work on isolated activities results in branches in the underlying versioned resourceto be created. Likewise, a mutable property is a property thathistories, the activities can bechanged without havingunified through anew revision created. Resources can support both mutablemerge operation. 3.5 Revision Selection andimmutable properties although there MAY be restrictions that the mutability is consistent across all resources. This specification doesn't cover the discovery or managementWorkspaces Resources, working resources, and revisions ofproperty mutability. 2.3. Versioningversioned resources are all accessed using aResource By default,URL. When aresource may not be subject to versioning. This can be discovered by examining the DAV:isversioned property. To placeclient accesses anon-versioned resource under version control, clients use the VERSION method andversioned resource, it is necessary to provide additional information to specifythe URIwhich working resource or which revision of the versioned resourceto version. Note that ifshould be accessed. Specifying thespecifiedresourceisURL and acollection, thenrevision name can access a specific revision of theDepth header is used to identifyversioned resource. However, this requires thescopeuser to add and remember labels for each revision; it does not provide a way ofthe operation. A depthaccessing a consistent set ofinfinity is assumedrevisions captured bydefault. The DAV:isautoversioned property indicates ifan activity or contained in aresource is automatically versioned when any immutable aspect ofconfiguration; itis changed. Resources with automatic versioning allow HTTP/1.1does not enable non-versioning aware clients tohave changes versioned without explicit versioning commands. This appliesaccess revisions; and it does not provide a client with access toany method that modifiesa working resource(e.g., PUT, MKCOL, COPY, MOVE, DELETE, PROPPATCH, ...) Using the DAV:versioningenabled and DAV:autoversioning tags, clients can establish the versioning policy. >> Request VERSION /somefolder/ HTTP/1.1 Host: foobar.com Depth: infinity Content-Type: text/xml Content-Length: xxx <?xml version="1.0" encoding="utf-8" ?> <D:versioning xmlns:D="DAV:"> <D:versioningenabled>On</D:versioningenabled> <D:autoversioning>On</D:autoversioning> </D:versioning> >> Response HTTP/1.1 200 OK Content-Length: 0 2.4. Immutable and Mutable Revisions By default, the contentsof a versioned resource. To address the restrictions inherent in revision-name based revisionare immutable. That is, onceselection, the revision selected when a specific revisionis created, it cannot be altered. However, in many document management systems thisname is not specified is resolved through a workspace. A workspace is a resource whose primary purpose is to identify working resources. If thecase. To address these scenarios, the THAW/FREEZE methods are introduced. Note that supportworkspace contains no working resource forTHAW and FREEZE are optional, but these operations MUST fail if not supported. The THAW method specifies that the indicated revision should be made mutable so that subsequent methodsa given versioned resource, it canalter the immutable aspectsalso be used to select an appropriate revision of the versioned resource.The FREEZE method indicates that all changes have been madeThis allows versioned resources andthe revision shouldunversioned resources to bemarked immutable again. The DAV:canthaw property indicates ifaccessed consistently by both versioning-aware and versioning-unaware clients. In order to specify revision selection, a workspace contains a revision selection rule. A revision selection rule canbe thawed. Similarly, the DAV:hasthawed property indicates ifspecify revision names, activities, configurations, or use operators that combine several of these rule elements. A revision name selects a revisionhas ever been thawed. Finally,with that name. An activity selects theDAV:isthawed property specifies iflatest revision that was created in that activity. Configurations select the revisionis currently thawed (frozen if not). The following example showscontained in theuseconfiguration. The "or" operator contains a sequence ofTHAW and FREEZE. >>Request THAW /foo/bar.htm HTTP/1.1 Revision-Id: VER:FHF45409 Host: www.foobar.com Content-Length: 0 ... PUT /foo/bar.htm HTTP/1.1 Revision-Id: VER:FHF45409 Host: www.foobar.com Content-Length: xxx ... FREEZE /foo/bar.htm HTTP/1.1 Revision-Id: VER:FHF45409 Host: www.foobar.com Content-Length: 0 ... 2.5. Versioningrule elements, andCOPY/MOVE Whenapplies them in order until the first match is found. If there is no matching revision, then a resource-not-found status is returned. If aCOPY methodrequest isissued againstmade and no workspace is specified, aversioned resource or revision, onlyserver determined default workspace is used. This is the workspace used by all versioning-unaware clients. A server MAY allow modifications to the"current"revision selection rule of theversioned resourcedefault workspace. 3.6 Configurations A workspace selects a volatile set of revisions. Changes to selected activities orthe specified revision is copiedchanges to labels may result in thespecified destination. That is, the entire history is NOT copied. When a MOVE methodselection of different revisions. A configuration isissued againstaversionedresource that selects a set of immutable revisions. A workspace whose version selection rule contains a configuration will always select the"move" SHOULD be represented insame revisions as long as therevision history. That is,configuration is not modified and no checkouts are performed in that workspace. Configurations are convenient for defining aMOVE operation CANNOTpersistent set of revisions that relate to each other in some specific way at some point in time. This can berepresented asuseful for adelete andvariety of purposes such as publishing consistent versions of resources to deploy anadd. A MOVE operation cannot be issued againstapplication, or for recovering a specificrevision. 2.6. Sharing Many versioning systems today provide the ability to havestate for legal or maintenance reasons. 3.7 Versioned Collections A collection contains agiven resource visible in multiple partsset of named bindings to other resources that are thenamespace. In these situations,members of that collection. For aresource is shared. That is, changes toversioned collection, theresourcebindings arevisibletoall versions. The WebDAV Advanced Collections working group addresses this need with direct referential members. Support for direct referential members is required for DAV versioning. 2.7. Default Revision If a Revision-Id (or Branch-Id) header isversioned resources, notspecified when referringto particular revisions. To modify the state of aresource, thenversioned collection (i.e. add or remove a binding), thetip (latest) revision (fromversioned collection must be checked out, just like any other versioned resource. Requests that modify theprimary branch) is used, unless a default revision has been identified. To markstate of aspecified revisioncollection member, such asthe defaultchecking it out or checking in a new revision,clients usehave no effect on theSETDEFAULT method. Notestate of the collection. Conversely, requests thatPUTmodify the state of a versioned collection, such as deleting orCHECKIN will remove any default version. Also note that branchingadding aresource hasbinding to resource, have no effect on thedefault revisionstate of that resource. In particular, theresource, even ifresource will remain bound in any other revisions of thedefaultcollection of which it was a member. If a URL identifies a sequence of nested versioned collections, revision selection isbranched. Ifperformed for each versioned collection in thedefault is removed,sequence, to select thedefaultversioned collection revisionisthat will be used to map thetip revisionnext segment of theinitial (primary) branch ofURL to the appropriate versioned resource.Setting the default revision to DAV:none cancels4 VERSIONING RESOURCE TYPES AND PROPERTIES This section defines thedefault revision. >>Request SETDEFAULT /foo/bar.htm HTTP/1.1 Host: www.foobar.com Content-Type: text/xml Content-Length: xxx <?xml version="1.0" encoding="utf-8" ?> <D:setdefault xmlns:D="DAV:"> <D:href>VER:HT58GHDW49</D:href> </D:setdefault> >>Response HTTP/1.1 200 OK Content-Length: 0 >>Request SETDEFAULT /foo/bar.htm HTTP/1.1 Host: www.foobar.com Content-Type: text/xml Content-Length: xxx <?xml version="1.0" encoding="utf-8" ?> <D:setdefault xmlns:D="DAV:"> <D:none/> </D:setdefault> >>Response HTTP/1.1 200 OK Content-Length: 0 If anew resourceis shared, servers MUST support the ability to set different default revisions at each pointtypes and properties introduced by WebDAV versioning. 4.1 Property Attributes There are several important attributes ofthe share. Clientsproperties that will be defined for every property introduced by this document. 4.1.1 Writeable/Readonly Properties A writeable property candetermine the default revisionbe modified by a client, while a readonly property can only be modified byexamining the DAV:revisionid fromthedefault revision. >>Request PROPFIND /foo/bar.htm HTTP/1.1 Host: www.foobar.com Content-Type: text/xml Content-Length: xxx <?xml version="1.0" encoding="utf-8" ?> <D:propfind xmlns:D="DAV:"> <D:prop> <D:revisionid/> </D:prop> </D:propfind> 2.8. Collection Versioning Collectionsserver. All properties defined in this document are writeable unless explicitly marked as "readonly". 4.1.2 Immutable/Mutable Properties An immutable resource is a resource whose value cannot change. An immutable property is a property whose value cannot change when it appears on an immutable resource. A mutable property is a property whose value can change, even when it appears on an immutable resource. All properties defined in this document are immutable unless explicitly marked as "mutable". 4.1.3 Property Resources There are various properties whose contents can beversioned just like non-collection resources, however, they are only versioned whenrepresented as an HTTP resource. Doing so allows adirect change is madeclient to use thecollection. It is up to each collection resource to determine if it supports default versions. If it doesn't, then SETDEFAULT requests MUST fail. The Revision-Path header is used to identify specific revisions that are partfull set of HTTP methods to manipulate the"path"contents of that property, rather than being limited to theresource.functionality provided by PROPFIND and PROPPATCH. Thisheader serversis particularly valuable for a property value that is naturally represented as a collection resource. By default, PROPFIND returns analternative to "URL munging". This header can be specified on all methods and qualifiesXML document as theresource namedvalue of a property resource; however, when a DAV:property-resource-URL element is specified in themethod. 2.9. Basic Revision Properties For resources thatPROPFIND request body, PROPFIND will return the URL of the property resource. Servers MAY supportversioning, theyDAV:property- resource-URL for a property, but MUST support thefollowingdefault XML value. All propertiesusing the "DAV:" namespace. Notethat0/1 is usedare property resources are explicitly marked asa FALSE (0) / TRUE (1) indicator. DAV:isversioned - 0/1 to indicate if"resource". If the property resource isversionable. Note that this can be implemented asaread-only property. DAV:autoversion - 0/1 to indicate ifcollection, theresourceproperty isautomatically versioned when modified. Note that this can be implemented thismarked as "collection". 4.2 Resource Properties WebDAV versioning introduces the following additional properties for aread-only property. DAV:revisionid -resource: 4.2.1 DAV:author (immutable) [Core] This property is used to track the author of aread-onlyresource. 4.2.2 DAV:comment (immutable) [Core] This propertythat returnsis used to track a brief comment about aserver determined id for this specific revision of theresource.Every revision of4.3 Revision Properties WebDAV versioning introduces the following additional properties for aresource will haverevision: 4.3.1 DAV:revision-id (readonly) [Core] The DAV:revision-id is an identifier assigned to aunique DAV:revisionid. Arevisionid may beby the server. Whenever aURLrevision is created or modified by a CHECKIN, itmaymust bean arbitrary server-defined string. However, itassigned a new DAV:revision-id. A revision cannotcontain the "," character. Because it is not required tobe given aURL, the DAV:revisionurl property is requiredDAV:revision-id that has been given toobtainany other revision of that versioned resource, even aURI for the specificrevision that has been deleted. 4.3.2 DAV:predecessor (readonly, resource) [Core] The DAV:predecessor ofthe resource. DAV:vresourceid - This isaread-only propertyrevision is the revision thatreturnswas checked out to produce aserver determined idworking resource that was checked in to produce this revision. The XML document for DAV:predecessor contains theversioned resource. That is, all revisionsrevision-id of theresource haveDAV:predecessor. 4.3.3 DAV:successors (readonly, mutable, collection) [Core] The DAV:successors collection of a revision contains thesame DAV:vresourceid. This MUST be preserved over MOVE requests and should be globally unique. DAV:previousrevisionids - Thisrevisions whose DAV:predecessor isa read-only propertythatreturns the server defined idrevision. The XML document for DAV:successors contains a list of theprevious revisionrevision-id's of theresource. An empty value indicates that there are no previous revisions. Note that there could be multiple previous versions. If there are multiple revisions, they are returned asDAV:successors. 4.3.4 DAV:single-checkout (mutable) [Core] When the DAV:single-checkout property of acomma-separated list. Noterevision is set, only one working resource can be checked out from thatthisrevision at any time. 4.3.5 DAV:auto-version (mutable) [Core] When the DAV:auto-version propertyreturns previous revisionsof a revision is set, a PUT request (or any request that modifies an immutable aspect of theserver determines. That is,revision) to thisdoes not include user identified merged revisions. DAV:distinguishedpredecessorid - This read-only property indicates the primary predecessor for arevisioninis automatically preceded by a CHECKOUT into theevent they are multiple predecessors. DAV:nextrevisionids -default workspace and followed by a CHECKIN. Thisisallows aread-only property that returnsversioning-unaware client to modify a version-controlled resource. The DAV:auto-version value can take theserver defined id forsame values as the DAV:checkin-policy of a working resource, and thenext revisionDAV:checkin- policy of theresource. An empty value indicates that thereautomatically created working resource isno subsequent revision. Note that there couldset to bemultiple next revisions. If there are multiple revisions, they are returned as a comma-separated list. Note that this property returns successor revisions thattheserver determines. That is, this does not include user identified merged revisions. DAV:revisionurl -DAV:auto-version policy of the revision. 4.3.6 DAV:revision-labels (mutable) [Core] Thisis a read-onlyproperty is used to identify labels thatreturnsare associated with aURL for thisspecific revision.DAV:revisionlabel -4.3.7 DAV:checkin-date (readonly) [Core] This propertyallowscontains thespecificationdate when the revision was checked in. This property is automatically assigned and is formatted using ISO8061. 4.3.8 DAV:working-resources (readonly, collection) [Core] This property is a collection oftextual namesthe workspaces thatrefer tocontain working resources whose DAV:predecessor is thisversionrevision. The XML document for DAV:working-resources contains a description of these working resources. 4.3.9 DAV:history-uuid (readonly) [Core] The DAV:history-uuid ofthe resource. If there are multiple labels, they are returned asacomma separated list. Labels MUST be unique forrevision is theversioned resource. That is, no two revisionsDAV:uuid of thesame versionedhistory resourcecan have the same DAV:revisionlabel. As well, DAV:revisionlabel and DAV:revisionid properties share the same namespace and there can be no duplicates. Servers MAY reserve specific portions ofwhose DAV:revisions collection contains thisnamespace and return an error if a client uses a reserved name asrevision. 4.3.10 DAV:history (readonly, resource) [Core] The DAV:history of a revisionlabel. This property MUST be mutable. DAV:mergedfrom - This property specifiesis the history resource whose DAV:revisions collection contains this revision. The XML document for DAV:history contains acomma separated listdescription ofrevision ids from whichrevisions that form the line-of-descent to this revision. 4.3.11 DAV:merge-predecessors (mutable, collection) [Merging] The DAV:merge-predecessors collection of a revisionis purported to be derived. This information is provided and managedcontains the revisions whose contents were explicitly merged by theclient. Thisclient into that revision. The client isa mutable property. DAV:mergedto - This property specifies a comma separated list of revision ids from whichfree to add or delete members to thisrevision is purportedcollection tobe merged into. This information is provided and managed bymore accurately reflect theclient. This is a mutable property. DAV:mergedfromunion - This read-only property specified a comma separated listcontents of that revision. The XML document for DAV:merge-predecessors contains the revisionids from which this revision is derived. This is a unionid's of theDAV:mergedfrom and DAV:previousrevisionids properties. DAV:revisioncomment - This property containsDAV:merge-predecessors. 4.3.12 DAV:merge-successors (mutable, collection, readonly) [Merging] The DAV:merge-successors collection of aclient-defined property associated with the revision. This asrevision contains amutable property. This isbinding to each revision whose DAV:merge-predecessors collection contains amutable property. DAV:author -binding to that revision. ThecreatorXML document for DAV:merge-successors contains the revision id's of therevision. ThisDAV:merge- successors. 4.4 Working Resource Properties WebDAV versioning introduces the following additional properties for a working resource: 4.4.1 DAV:workspace (readonly, resource) [Core] The DAV:workspace of a working resource isan arbitrary string. DAV:canthaw - This property indicates iftherevision can be THAWedworkspace that contains this working resource. The XML document formodification. Servers MAY implementDAV:workspace contains the URL of thisas read-only. DAV:hasthawed -workspace. 4.4.2 DAV:predecessor (read-only, resource) [Core] Thisread-onlypropertyindicates ifcontains the revisionhas ever been thawed. DAV:isthawed - This read-onlythat was checked out to create this working resource. The XML document for DAV:predecessor contains the revision id of DAV:predecessor. 4.4.3 DAV:checkin-policy [Core] The DAV:checkin-policy property of a working resource indicates how this working resource should be checked in. The following are defined values for DAV:checkin-policy. The default value is DAV:immutable. DAV:identical-abort - the CHECKIN should fail if therevisionworking resource iscurrently thawed (or frozen if not). DAV:lastcheckinidentical to its DAV:predecessor. DAV:identical-uncheckout -This read-only property specifiesan UNCHECKOUT should be applied instead of CHECKIN if thedate this revision was "checked in" in ISO8601 format. 2.10. Basic Versioning Headers The following sub-sections describeworking resource is identical to its DAV:predecessor. DAV:overwrite - the working resource should be copied into its DAV:predecessor instead of creating a newversion headersrevision. DAV:mutable - a new revision is created thatMUSTcan besupported for resources that support DAV:versioning. 2.10.1. Revision-Id The Revision-Id headeroverwritten by a subsequent DAV:overwrite CHECKIN. DAV:immutable - a new revision isused to identifycreated that cannot be overwritten by aspecific revision ofsubsequent DAV:overwrite CHECKIN. DAV:keep-checked-out - create aversionednew revision but does not delete the working resource.This header can be specified on all methods and qualifiesThe DAV:predecessor of the working resourcenamed in the method. As well, this headerisincluded in all replieschanged toindicatebe the new revision. DAV:baseline - instead of creating a new revision of the versionedresource used or created. The BNFcollection, create a new baseline forthis headerit (the CHECKIN fails unless it isas follows. Revision-Id := "Revision-Id" ":" RID RID := "*" | Time-Ref | ANY Time-Ref := "Time" "(" ISO8601 ")" This property allows the specification of criteria that selectsapplied to aspecific revisionversioned collection with a DAV:baselines property). 4.4.4 DAV:merge-predecessors (collection) [Merging] The DAV:merge-predecessors collection of a working resource contains the revisions whose contents were explicitly merged by the client into that working resource.This includes a DAV:revisionid or anyThe client adds and deletes members ofthe DAV:revisionlabel values to referthis collection toa specific revisionreflect the set of revisions that were merged by the client into the working resource.As well,The name of aconfiguration (described later) can be referenced here to selectDAV:merge-predecessors binding is the DAV:revision-id of that revision. The XML document for DAV:merge-predecessors contains thedefaultrevisionassociated withid's of theconfiguration.DAV:merge-predecessors. 4.4.5 DAV:activity (readonly, resource) [Activity] TheuseDAV:activity property ofthe Time operatora working resource isto selectthe"current" revision asDAV:activity of thespecified time.workspace when the working resource was checked out. Theuse of Revision-Id: *XML document for DAV:activity isonly permitted with PROPFIND to obtainthe URL for the activity. 4.5 Workspace Properties WebDAV versioning introduces the following additional propertiesacross allfor a workspace: 4.5.1 DAV:working-resources (readonly, collection) [Core] The DAV:working-resources collection contains the versioned resources that are checked out into this workspace. The XML document for DAV:working-resources contains a description of these working resources. 4.5.2 DAV:revision-selection-rule [Core] The DAV:revision-selection-rule of a workspace can contain an XML document that describes how revision selection will be performed in that workspace. The working resources checked out into a workspace take priority over revisions selected by the revision selection rule, thus target of a versionedresource. 2.10.2. Branch-Id The Branch-Id header is used to identify a branch (revision thread). The BNF for the header is as follows: Branch-Id := "Branch-Id" ":" ANY The Branch-Id can be used anywhereresource in arevision-idworkspace isused. When specified, it indicates thatthelatest version ofworking resource in that workspace for that versioned resource, else theindicated branch is to berevision selectedasby the workspace revisionto use for the operation. 2.10.3. Override-Checkin It is possibleselection rule. To ensure thatthe check-in operation will detectworking resources continue to be visible in aconflict. For example, version 5 was checked out shared, and before it isworkspace after they are checkedbackin,version 6 was created. In these situations, the check-in MUST fail indicating a conflict. Clients can choose to branch the resource, merge ontheclient,DAV:label oroverwrite. To circumvent this check, clients can use the Override-Checkin header. This specifies thatDAV:activity of a workspace is usually thecheck-in operation SHOULD NOT fail (eitherfirst element of theclient has merged to resolveDAV:revision- selection-rule. If theconflict,DAV:revision-selection-rule is not set ordesires an overwrite). The BNFisas follows: Override-Checkin := "Override-Checkin" ":" ("Yes" | "No") 2.10.4. Revision-Path The Revision-Path header allows clients to identify specific versions of collections that should be used rather thanempty, thedefault revisions. The BNF for this header is as follows. Revision-Path := "Revision-Path" ":" Path Path := PItem | (Path PItem) PItem := "/" ANY Rev Rev := | (";" RID) RID := "*" | ANY | "(" ANY ")" >>Request GET /foo/bar.htm HTTP/1.1 Host: www.foobar.com Revision-Path: /foo;VER:HT58GHDW49/bar.htm Content-Length: 0 The use of * for arevisionis only permitted with PROPFIND to obtain properties across all revisions of aselection rule will select no revision for any versioned resource.3. CHECKING OUT/IN RESOURCES For versioning-aware clients, more advanced requests allow them to perform specific versioning operations. These methodsStandard revision selection rule elements aredirected at a specific URI to alter. If a resource supports DAV:versioning then it MUST support the methodsdefined in thissection. 3.1. Checkout Using the CHECKOUT method, clientsdocument, but additional revision selection rule elements may be supported by a WebDAV server. 4.5.3 DAV:label [Core] The DAV:label property of a workspace canrequest resources to be "checked out". This involves creatingcontain a revision label. When a working resourcethatin a workspace isnot automatically versioned. Checked out resources must becheckedin or cancelled. The diagram below illustratesin, it will be given thisprocess: Revisionslabel. 4.5.4 DAV:activity [Activity] The DAV:activity property offoo.htm: V1 Checkouta workspace isperformed: V1 | +-> Working Resource Checkinthe activity that isperformed: V1 -> V2currently being performed in that workspace. A new working resource in a workspace will have its DAV:activity property set to this activity. ThebodyXMLindicatesdocument for DAV:activity contains the URL of DAV:activity. 4.6 Activity Properties WebDAV versioning introduces the following additional properties for anoptional checkout comment,activity: 4.6.1 DAV:revisions (readonly, collection) [Activity] The DAV:revisions collection of anoptional user token, and locking actions.activity contains all revisions whose DAV:activity property contains this activity. Theresponse indicatesXML document for DAV:revisions contains theworking resource as well as any requested locks.URL's of these revisions. 4.6.2 DAV:required-activities (collection) [Activity] TheCHECKOUT method causesDAV:required-activities collection of an activity contains thecreationother activities that form a part of theworking copy which is specifiedlogical change being captured by theLocation header inactivity. The DAV:needed-activities of an activity contribute to theresponse. Clients can optionally request locksrevision selection behavior of that activity when it is used in a revision selection rule. The purpose of this property is tobe taken as partidentify other activities that are a prerequisite to this activity. The XML document for DAV:required-activities contains the URL's of these activities. 4.6.3 DAV:workspace (resource) [Activty] The DAV:workspace property of an activity contains theCHECKOUT operation.workspace that currently has that activity as its DAV:current activity. This implies that at most one workspace can be working in a given activity at a time. If any working resource of a workspace is checked out into a given activity, thelocks cannotDAV:workspace of that activity can only beobtained, the CHECKOUT operation MUST fail.that workspace. Thefollowing table identifiesXML document for DAV:workspace contains thedifferent lock options: Lock Tags Used Description Target (DAV: assumed) working wrlocktype, Limits access toURL of the workspace. 4.7 Configuration Properties WebDAV versioning introduces the following properties for a configuration: 4.7.1 DAV:roots (immutable, collection) [Configuration] The DAV:roots collection of a configuration contains thenewly created resource wrlockscope working resource revision revisionlockty Blocks CHECKOUT/INs against this pe, revision revisionlocksc ope branch branchlocktype Blocks CHECKOUT/INs against ,versioned resources that are not named by versioned collection revisions inthis branch branchlockscop e versioned vrlocktype, Blocks CHECKOUT/INs against any resource vrlockscope revisionthat configuration. The XML document for DAV:roots contains the URL's of these versioned resources. 4.8 Versioned Collection Properties WebDAV versioning introduces the following additional properties for a versionedresource.collection: 4.8.1 DAV:baselines (resource) [Baseline] ThesemanticsDAV:baselines of a versioned collection is a versioned configuration whose DAV:roots contains only that versioned collection. A revision of thetags match thoseDAV:baselines ofDAV:locktype and DAV:lockscope as specifieda versioned collection effectively provides a "deep-revision" of that versioned collection. The XML document for DAV:baselines contains theLOCK method. >>Request CHECKOUT /foo/bar HTTP/1.1 Host: www.foobar.com Content-Type: text/xml Content-Length: xxxx <?xml version="1.0" encoding="utf-8" ?> <D:checkout xmlns:D="DAV:"> <D:comment>checkout comment</D:comment> <D:owner>client-defined token</D:owner> <D:wrlocktype><D:write/></D:locktype> <D:wrlockscope><D:exclusive/></D:lockscope> </D:checkout> >>Response HTTP/1.1 201 CREATED Location: http://www.foobar.com/tmp/VRJHJWE3493409 Content-Type: text/xml Content-Length: xxxx <?xml version="1.0" encoding="utf-8"?> <D:prop xmlns:D="DAV:"> <D:lockdiscovery> <D:activelock> <D:wrlocktype><D:write/></D:locktype> <D:wrlockscope><D:exclusive/><D:lockscope> <D:owner>client-define token</D:owner> <D:locktoken> <D:href>opaquelocktoken:rejrei-43343-rereffre</D:href> </D:locktoken> </D:activelock> </D:lockdiscovery> </D:prop> Servers MUST fail this operation ifURL of the versioned configuration. 4.9 History Resource Properties WebDAV versioning introduces the following additional properties for abranchhistory resource: 4.9.1 DAV:uuid (readonly) [Core] The DAV:uuid isrequired. 3.2. Checkin Whenan identifier assigned to a history resource by theclientserver. A history resource cannot be given a DAV:uuid that hascompleted changesbeen given to any other history resource, even a history resourceand wishes it to become partthat has been deleted. 4.9.2 DAV:revisions (readonly, collection) [Core] The DAV:revisions collection of a history resource contains all revisions of that history resource, where the name of a revisionhistory, the client must checkin theresource. ThisDAV:revisions collection isperformed usingits DAV:revision-id. If a revision id contains a URL reserved character, that character is escaped in theCHECKIN method againstDAV:revisions name. The XML document for DAV:revisions contains theworking copy.URL's of the revisions. 4.9.3 DAV:revision-labels (collection) [Core] TheDAV:keepcheckedout tag can be specifiedDAV:revision-labels collection of a history resource contains a binding for each label assigned toindicateany revision of that history resource, where theresource should remain checked out. That is, create a new revision, but leavebinding name is that label (reserved URL characters are escaped) and theworking copy checked out. Using XML tags inbinding is to therequest body, clientsrevision selected by that label. The client canspecify optional checkin information. >>Request CHECKIN /tmp/VRJHJWE3493409 HTTP/1.1 Host: www.foobar.com Lock-Token: <opaquelocktoken:rejrei-43343-rereffre> Content-Type: text/xml Content-Length: xxx <?xml version="1.0" encoding="utf-8" ?> <D:checkin xmlns:D="DAV:"> <D:comment>checkin comment</D:comment> </D:checkin> >>Response HTTP/1.1 201 CREATED Revision-Id: VER:FREFRI49349 Content-Length: 0label and unlabel revisions by adding and deleting members of the DAV:revision-labels collection. Thereply MUST includeXML document for DAV:revision-labels contains theRevision-IdURL's of thenewly created revision. It is possible thatmembers of thecheck-in operation will detect a conflict. Servers MUST fail this operation if a branch is required. The Override-Checkin header is used to resolve these conflicts. 3.3. Cancelling Checkout If a client choosesDAV:revision-labels collection. 5 VERSIONING METHODS 5.1 Existing Methods This section describes the extensions tocancel a checkout request,theUNCHECKOUT method againstexisting WebDAV methods. Under versioning, theworking copy. As well, optional XML body tags can be used to supply additional information. >>Request UNCHECKOUT /tmp/VRJHJWE3493409 HTTP/1.1 Host: www.foobar.com Lock-Token: <opaquelocktoken:rejrei-43343-rereffre> Content-Type: text/xml Content-Length: xxxxx <?xml version="1.0" encoding="utf-8" ?> <D:uncheckout xmlns:D="DAV:"> <D:comment>cancel checkout comment</D:comment> </D:uncheckout> >>Response HTTP/1.1 200 OK Content-Length: 0 3.4. Enumeration Refer tomethods inherit all of theResource Reports section for details on check-out enumeration. 4. BRANCHING RESOURCES For more sophisticated clients, basic resource branchingWebDAV functionality with the following extensions. 5.1.1 GET When GET isrequired. Resource branching means that forapplied to agivenversioned resource, it returns thehistory is not linear. That is, there are different linesbody ofdescent.the target of that versioned resource. Thediagram below illustrates this. Revisionresult of GET on a workspace, activity, or historyV1 -> V2 -> V3 Of foo.htm: | +-> V1.1 -> V1.2 | +-> V1.1.1 Individualresourcebranchingiscommon in many versioning systems today. Project branching (configurations) are describedundefined. 5.1.2 BIND When BIND creates a binding in alater section. Note that whenworking resource for acollection is branched,versioned collection, it MUST fail if thedepthrequest URL of thebranchBIND isinfinity. Therenot a versioned resource. 5.1.3 PUT When PUT isno wayapplied tochange this. A revisiona versioned resource whose target isbranched usinga working resource, theBRANCH method. The resourcePUT is applied tobe branchedthat working resource. When PUT isspecified as the target URI for the method. As well, clients can specify a branch labelapplied toidentify a created branch using the DAV:branchlabel tag. The reply MUST include a Branch-Id header specifyinga versioned resourcedefined branch id or the specified branch label if a branchwhose target iscreated. The label or id can be specified inaBranch-Id or Revision-Id header to determinerevision, therevision to access. >>Request BRANCH VER:FHHR4959 HTTP/1.1 Host: www.foobar.com Content-Type: text/html Content-Length: xxxx <?xml version="1.0" encoding="utf-8" ?> <D:branch xmlns:D="DAV:"> <D:branchlabel>MyBranch</D:branchlabel> <D:comment>branch comment</D:comment> </D:branch> >>Response HTTP/1.1 201 CREATED Branch-Id: MyBranch Revision-Id: VER:REUU48583 Content-Length: 0 When a branch is created,PUT MUST fail except in the following two cases. If thereply MUST include a Branch-Id header. 5. RESOURCE REPORTS Revision history graphs and other reports ofrevision has aresource are accessed via PROPFIND. Note that resources MAY support multiple styles of historyDAV:auto-version property andreports. To enumerateno Target-Selector header has been specified, thesupported history graphs and reports, clients use PROPFIND andrevision is checked out into the<DAV:availablereports> property. The results indicate a list ofdefault workspace, thedifferent reports which can, themselves, be requested via PROPFIND. ForPUT is applied to theexamples in this section, assume thatresulting working resource, and the working resource/foo.htm hasis checked in. If thefollowingrevisiongraph: Revision history V1 -> V2 -> V3 Of foo.htm: | +-> V1.1 -> V1.2 | +-> V1.1.1 Clients have specified the following merge annotations: - V1.2is amergerevision ofV1.1 and V1.1.1 - V3 isamerge of V2baselined collection andV1.2 As well, the default revision history (those revisions marked asthedefault)value of DAV:checkin-policy isas follows: - V1 (the initial revision was created) - V2 (aDAV:baseline, a new revisionwas created) - V1 (a client changed the default revision) - V3 (an updated revision was created) Also, the following labels have been specified: - V2: Test1 - V1.1: Test2, Good - V1.2: Tested Additionally, when the V1.1 branch was created, it was labeled "MyBranch". 5.1. Available Reports Clients can obtainof theavailable reports for a resourceDAV:baselines configuration is created byobtaining its DAV:availablereports property. >>Request PROPFIND /foo/bar.htm HTTP/1.1 Host: www.foobar.com Depth: 0 Content-Type: text/xml Content-Length: xxxx <?xml version="1.0" encoding="utf-8" ?> <D:propfind xmlns:D="DAV:"> <D:prop> <D:availablereports/> </D:prop> </D:propfind> >>Response ... <D:multistatus> <D:response> <D:href>http:/www.foobar.com/foo/bar.htm</D:href> <D:propstat> <D:prop> <D:availablereports> <D:report>DAV:defaulthistory</D:report> <D:report>DAV:directlineage</D:report> <D:report>DAV:fulllineage</D:report> </D:availablereports> </D:prop> </D:propstat> <D:status>HTTP/1.1 200 OK</D:status> </D:response> </D:multistatus> ... Note thatthereport styles MUST be specified as DAV:href values.CHECKIN. Whenclients issue PROPFIND requestsPUT is applied directly toobtain reports, they may include other properties in the request. These properties are returned for each report item. 5.2. Default History Resourcesa revision (i.e. not indirectly via a versioned resource), it MUSTsupport the DAV:defaulthistory report. This enumerates the historical record of revisions that have been visible as the default revision. Clients can specify the limit parameterfail. When PUT is applied tolimit the number revisions returned. By definition, revisions are returned in reverse chronological order starting with the most recent. >>Request PROPFIND /foo/bar.htm HTTP/1.1 Host: www.foobar.com Depth: 0 Content-Type: text/xml Content-Length: xxxx <?xml version="1.0" encoding="utf-8" ?> <D:propfind xmlns:D="DAV:"> <D:defaulthistory limit=20/> </D:propfind> >>Response ... <D:multistatus> <D:response> <D:href>http://www.foobar.com/foo/bar.htm</D:href> <D:propstat> <D:prop> <D:revisionid>V3</D:revision> <D:revisioncomment>Update it</D:comment> </D:prop> </D:propstat> <D:status>HTTP/1.1 200 OK</D:status> </D:response> <D:response> <D:href>http://www.foobar.com/foo/bar.htm</D:href> <D:propstat> <D:prop> <D:revisionid>V1</D:revision> <D:revisioncomment>Update it</D:comment> </D:prop> </D:propstat> <D:status>HTTP/1.1 200 OK</D:status> </D:response> <D:response> <D:href>http://www.foobar.com/foo/bar.htm</D:href> <D:propstat> <D:prop> <D:revisionid>V2</D:revision> <D:revisioncomment>Update it</D:comment> </D:prop> </D:propstat> <D:status>HTTP/1.1 200 OK</D:status> </D:response> <D:response> <D:href>http://www.foobar.com/foo/bar.htm</D:href> <D:propstat> <D:prop> <D:revisionid>V1</D:revision> <D:revisioncomment>Update it</D:comment> </D:prop> </D:propstat> <D:status>HTTP/1.1 200 OK</D:status> </D:response> </D:multistatus> 5.3. Active Checkouts Clients can obtainalist of the active checkouts againstnull resource that is an internal member of a versioned collection whose target is a working resource, a new versioned resourceusing PROPFIND and DAV:activecheckouts. >>Request PROPFIND /foo/bar.htm HTTP/1.1 Host: www.foobar.com Revision-Id: VER:FHRJ494059 Depth: 0 Content-Type: text/xml Content-Length: xxxxx <?xml version="1.0" encoding="utf-8" ?> <D:propfind xmlns:D="DAV:"> <D:activecheckouts/> </D:propfind> >>Response HTTP/1.1 207 Multi-Status Content-Type: text/xml Content-Length: xxx <?xml version="1.0" encoding="utf-8" ?> <D:multistatus xmlns:D="DAV:"> <D:response> <D:href>http://www.foobar.com/foo/bar.htm</D:href> <D:propstat> <D:prop> <D:checkout> <D:owner>user-specified</D:owner> <D:revisionid>VER:FHER4949</D:revision> <D:href>http://www.foobar.com/foo/bar.htm</D:href> <D:workingcopy> <D:href>http://www.foobar.com/tmp/FHFH34949</D:href> </D:workingcopy> </D:checkout> </D:prop> </D:propstat> <D:status>HTTP/1.1 200 OK</D:status> </D:response> </D:multistatus> 5.4. Direct Lineage Resources SHOULD support the DAV:directlineage report. This enumeratesis created at thedirect parent revisionsrequest URL of theresource. Clients canPUT. When the target is a versioned collection revision, the PUT requestthatfails unless the revision has areport be based onDAV:auto-version property and no Target-Selector header has been specified. If DAV:auto-version is set, thenamespace entry specified, orversioned collection revision is checked out into theassociated DAV:vresourceid. Clients usedefault workspace, a new versioned resource is created as a member of thescope parameter to specify (name or id). Clients can specifyworking collection, and thelimit parameterworking collection is checked in. When a PUT is applied tolimit the number revisions returned. >>Requesta workspace, activity or history resource, it fails. 5.1.4 PROPFIND/foo/bar.htm HTTP/1.1 Host: www.foobar.com Depth: 0 Content-Type: text/xml Content-Length: xxxx <?xml version="1.0" encoding="utf-8" ?> <D:propfind xmlns:D="DAV:"> <D:directlineage scope="name"/> </D:propfind> >>Response ... <D:multistatus> <D:response> <D:href>http://www.foobar.com/foo/bar.htm</D:href> <D:propstat> <D:prop> <D:revisionid>V1</D:revision> <D:vresourceid>VER:FFHJE</D:vresource> <D:revisioncomment>Update it</D:comment> </D:prop> </D:propstat> <D:status>HTTP/1.1 200 OK</D:status> </D:response> <D:response> <D:href>http://www.foobar.com/foo/bar.htm</D:href> <D:propstat> <D:prop> <D:revisionid>V2</D:revision> <D:vresourceid>VER:FFHJE</D:vresource> <D:revisioncomment>Update it</D:comment> <D:derivedfrom>V1</D:derivedfrom> </D:prop> </D:propstat> <D:status>HTTP/1.1 200 OK</D:status> </D:response> <D:response> <D:href>http://www.foobar.com/foo/bar.htm</D:href> <D:propstat> <D:prop> <D:revisionid>V3</D:revision> <D:vresourceid>VER:FFHJE</D:vresource> <D:revisioncomment>Update it</D:comment> <D:derivedfrom>V3</D:derivedfrom> <D:revisionlabel>Test1</D:label> <D:mergedfrom>V2</D:mergedfrom> <D:mergedfrom>V1.2</D:mergedfrom> </D:prop> </D:propstat> <D:status>HTTP/1.1 200 OK</D:status> </D:response> </D:multistatus> 5.5. Full Lineage Resources SHOULD supportIf a DAV:property-resource-URL is specified under a DAV:prop element in a PROPFIND request body, theDAV:fulllineage report. This enumeratesproperty resource URL of that property will be returned in thefull graphPROPFIND response instead ofrevisionsthe default XML document forthis resource. Clients can requestthat property resource. If areport be based onDAV:property-resource-URL is specified directly under thenamespace entry specified, orDAV:propfind element, theassociated DAV:vresourceid. Clients useproperty resource URL will be returned for all of thescope parameterproperty resources in the PROPFIND response. 5.1.5 PROPPATCH When PROPPATCH is applied tospecify (name or id). Clients can specifya versioned resource, its behavior is similar to that of PUT. In particular, when PROPPATCH is applied to an immutable property of a revision, it MUST fail unless thelimit parameterrevision has a DAV:auto-version property. 5.1.6 DELETE When DELETE is applied tolimita versioned resource whose target is a revision, thenumber revisions returned. >>Request PROPFIND /foo/bar.htm HTTP/1.1 Host: www.foobar.com Depth: 0 Content-Type: text/xml Content-Length: xxxx <?xml version="1.0" encoding="utf-8" ?> <D:propfind xmlns:D="DAV:"> <D:fulllineage scope="name"/> </D:propfind> >>Response ... <D:multistatus> <D:response> <D:href>http://www.foobar.com/foo/bar.htm</D:href> <D:propstat> <D:prop> <D:revisionid>V1</D:revision> <D:vresourceid>VER:FFHJE</D:vresource> <D:revisioncomment>Update it</D:comment> </D:prop> </D:propstat> <D:status>HTTP/1.1 200 OK</D:status> </D:response> <D:response> <D:href>http://www.foobar.com/foo/bar.htm</D:href> <D:propstat> <D:prop> <D:revisionid>V2</D:revision> <D:vresourceid>VER:FFHJE</D:vresource> <D:revisioncomment>Update it</D:comment> <D:derivedfrom>V1</D:derivedfrom> </D:prop> </D:propstat> <D:status>HTTP/1.1 200 OK</D:status> </D:response> <D:response> <D:href>http://www.foobar.com/foo/bar.htm</D:href> <D:propstat> <D:prop> <D:revisionid>V3</D:revision> <D:vresourceid>VER:FFHJE</D:vresource> <D:revisioncomment>Update it</D:comment> <D:derivedfrom>V2</D:derivedfrom> <D:revisionlabel>Test1</D:label> <D:mergedfrom>V2</D:mergedfrom> <D:mergedfrom>V1.2</D:mergedfrom> </D:prop> </D:propstat> <D:status>HTTP/1.1 200 OK</D:status> </D:response> <D:response> <D:href>http://www.foobar.com/foo/bar.htm</D:href> <D:propstat> <D:prop> <D:revisionid>V1.1</D:revision> <D:vresourceid>VER:FFHJE</D:vresource> <D:revisioncomment>Update it</D:comment> <D:derivedfrom>V1</D:derivedfrom> <D:revisionlabel>Test2</D:label> </D:prop> </D:propstat> <D:status>HTTP/1.1 200 OK</D:status> </D:response> <D:response> <D:href>http://www.foobar.com/foo/bar.htm</D:href> <D:propstat> <D:prop> <D:revisionid>V1.2</D:revision> <D:vresourceid>VER:FFHJE</D:vresource> <D:revisioncomment>Update it</D:comment> <D:derivedfrom>V1.1</D:derivedfrom> <D:branchid>MyBranch</D:branchid> </D:prop> </D:propstat> <D:status>HTTP/1.1 200 OK</D:status> </D:response> <D:response> <D:href>http://www.foobar.com/foo/bar.htm</D:href> <D:propstat> <D:prop> <D:revisionid>V1.1.1</D:revision> <D:vresourceid>VER:FFHJE</D:vresource> <D:revisioncomment>Update it</D:comment> <D:derivedfrom>V1.1</D:derivedfrom> </D:prop> </D:propstat> <D:status>HTTP/1.1 200 OK</D:status> </D:response> </D:multistatus> 6. CONFIGURATION BASICS Many clients require more sophisticated management and organization of theirversioneddata. For this reason, configuration supportresource isdefined as part of this specification. Configuration managementdeleted from the collection that contains it, but the revision is unaffected. When DELETE is applied to alarge space. This specification addresses several typesworkspace, the workspace and all working resources ofconfigurations: - Dynamic: A dynamic configurationthat workspace are deleted. When DELETE is applied to acollectionmember ofspecific revisionsthe DAV:revisions collection ofselected versioned resources based on selection rules. This can be used for labels, floating labels, etc. - Workspace: A workspace configuration isamechanism for tracking and managing parallel changeshistory resource, it fails unless the All-Bindings header is specified. When DELETE is applied tomultiple resources. Configurations provideamechanism for organizing resourceshistory resource, the history resource andquick access to specific revisionsall members ofresources. Clients can access resources inthecontextDAV:revisions collection ofa configuration. By referencing a configuration, requeststhat history resource areautomatically mappeddeleted. 5.1.7 COPY When COPY is applied to a versioned resource, it is applied to thecorrect revisiontarget of the versioned resource.This allows configurations to be used as a reference mechanism without breaking URL hyperlinks. A configuration can be derived from another configuration.That is, only thenew configurationselected revision isbased on the versions incopied, not the"parent" configuration. Optionally, derived configurations can automatically inherit new versions infull version history. When a COPY request is applied to a workspace, activity, or history resource, it fails. 5.1.8 MOVE When MOVE is applied to a versioned resource, theparent configuration (assuming there are no conflicts). However,MOVE request MUST fail unless aconfigurationbinding to that versioned resource can bederived fromcreated atmost one other configuration. Clients can specify configuration ids wherever a revision id can be specified. This requests thatthedefault revision forDestination of thespecified configuration be used. Requests that include bothMOVE. When arevision id andMOVE request is applied to an activity or aconfiguration id MUST fail ifhistory resource, it fails. Any request to MOVE a specific revision, and not thespecified revisionversioned resource, MUST fail. 5.1.9 LOCK A write lock on a versioned resource isnot part ofapplied to thespecified configuration. Typically bothtarget of that versioned resource. A write lock on a revisionid andprevents unauthorized modifications to the properties of that revision. A write lock on aconfiguration id are not needed sinceworking resource prevents unauthorized changes to therevision URI is unique across all configurations. 6.1. Discovery Configuration support is optional. This example showsbody or properties of that working resource. A write lock on an activity prevents unauthorized modifications to the/somefolderproperties of that activity. A write lock on a history resourcesupports configurations. >> Request OPTIONS /somefolder/ HTTP/1.1 Host: www.foobar.com Content-Length: xxx Content-Type: text/xml <?xml version="1.0" encoding="utf-8" ?> <D:options xmlns:D="DAV:"> <D:verinfo/> </D:options> >> Response HTTP/1.1 200 OK Date: Tue, 20 Jan 1998 20:52:29 GMT Connection: close Accept-Ranges: none Allow: OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, COPY, MOVE, MKCOL, PROPFIND, PROPPATCH, LOCK, UNLOCK, MKREF, FREEZE, THAW, CHECKIN, CHECKOUT, UNCHECKOUT, BRANCH Public: OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, COPY, MOVE, MKCOL, PROPFIND, PROPPATCH, LOCK, UNLOCK, MKREF, FREEZE, THAW, CHECKIN, CHECKOUT, UNCHECKOUT, BRANCH Versioning: DAV:basicversioning Content-Type: text/xml Content-Length: xxx <?xml version="1.0" encoding="utf-8" ?> <D:options xmlns:D="DAV:"> <D:verinfo> <D:configroot> <D:href>http://www.foobar.com/cfgs/</D:href> </D:configroot> </D:verinfo> </D:options> 6.2. Creating Configurations Servers maintain configurations inplaces aprivate portionwrite lock on all revisions of that history resource. A write lock on a workspace prevents unauthorized modifications to thenamespace.properties of that workspace. 5.1.10 OPTIONS TherootOPTIONS method allows the client to discover the level ofthis namespace is determinedversioning support provided byexamining the OPTIONS extended reply. All configurations names MUST be unique ona server.UsingThe following defines theconfiguration namespace, clients can create and manage configurations. Clients createBNF for the Versioning header: Versioning := "Versioning" ":" Ver-type-list Ver-type-list := Ver-type | (Ver-type-list "," Ver-type) Ver-type := "Core" | "Activity" | "Merging" | "Configuration" | "Versioned-Collection" | "Baseline" 5.2 New Methods WebDAV versioning introduces two newconfigurations by issuingmethods, MKRESOURCE and REPORT, that are not specific to versioning but are needed to support theMKCONFIGversioning extensions. 5.2.1 MKRESOURCE The MKRESOURCE methodagainst the configuration namespace. Thisrequests theserver to create a new configuration. Whensimultaneous creation of aconfiguration is created, special tags can be used to defineresource, identified by thecharacteristicsRequest URI, andrelationships (e.g. derivations) for the configuration. The following table enumerates these tags. Tag Description <DAV:configurationtype> This tag definesinitialization of its properties. Creation of thetyperesource and initialization ofconfiguration: xxx DAV:Dynamicits properties MUST both occur, or</DAV:configurationtype> DAV:Workspace. <DAV:derivedfrom> This tag allowsneither occurs. The request message body of theclient "xxx" to specify a URI to </DAV:derivedfrom> identify another configuration from which this new configurationMKRESOURCE method isto be derived. <DAV:inheritancetype> The configuration automatically inherits DAV:Auto changes from its derived- </DAV:inheritancetype> from configuration. Conflicts are recordedthe same as for the PROPPATCH method, i.e. it MUST contain the DAV:propertyupdate XML element, defined inresolution queues (see later section). <DAV:inheritancetype>section 12.13 of [RFC2518]. Theconfiguration inherits changes from its derived- DAV:Manual from configuration, but </DAV:inheritancetype> they are not automatically inserted into the configuration. Instead they are recordedproperty update directives inresolution queues (see Tag Description later section). <DAV:inheritancetype> snapshotthe request message body provide the initial values of thecurrent DAV:None versions inproperties of thederived- DAV:inheritancetype> from configuration. Therenew resource. Theconfiguration is a is no inheritancetype ofchanges. This isthedefault type if no type is specified. <DAV:basetime>"xxx" The configurationcreated resource isbased </DAV:basetime> onspecified by thecurrent versions inDAV:resourcetype property, if present. If thederived-from configuration atDAV:resourcetype property is not specified, theindicated time. Note that use of this tagcreated resource isincompatible with DAV:Auto inheritance types and usage in this way MUST returnanerror. When a non-derived configuration is created, it contains no resources. Configurations that are derived from another configuration include the resourcesordinary (i.e. untyped) resource. Like PROPPATCH, instruction processing MUST occur in thederivedorder instructions are received (i.e. fromconfiguration at the specified timetop to bottom). Instructions MUST all be executed, orusing the default revisions. The example below illustrates creating a new configurationnone executed. If MKRESOURCE is applied to an existing resource, that resource isderived from, and auto-inherits another configuration. For this example, the rootdeleted prior to MKRESOURCE processing. The behavior of MKRESOURCE on an existing resource can be explicitly controlled through use of theconfiguration namespace has been determined toOverwrite header. MKRESOURCE can be/cfgs. >>Request MKCONFIG /cfgs/ HTTP/1.1 Host: www.foobar.com Content-Type: text/xml Content-Length: xxxx <?xml version="1.0" encoding="utf-8" ?> <D:createconfiguration xmlns:D="DAV:"> <D:configurationtype>DAV:Workspace</D:configurationtype> <D:derivedfrom>http://www.foobar.com/cfgs/DDEJRJ445</D:derivedfrom> <D:inherit>Auto</D:inherit> </D:createconfiguration> >>Response HTTP/1.1 201 Created Location: http://www.foobar.com/cfgs/RYURUS99009 Content-Length: 0 6.3. Access Using Configurations Configurations are maintained asused to create aspecialnew activity in a repository DAV:activities collection.Configurations maintain referential membersWhen MKRESOURCE is used toall revisions that are partcreate a repository from an existing versionable collection, every member of that versionable collection is also placed under version control as a history resource in that repository. Status Codes: 201 (Created) - The new resource has successfully been created. 207 (Multi-Status) - If any error was encountered in theconfiguration. Consequently, one approach to enumerating the contentscreation ofa configurationthe resource, this response istogenerated. Status codes defined for usePROPFINDwith PROPPATCH (defined in section 8.2.1 of [RFC2518]) SHOULD be used todiscoverrepresent error cases in setting thecontentsvalue ofthe collection. Alternatively, clients can request a specificproperties. TBD - Explain effect on existing resourcefromtypes TBD - Give request/response example 5.2.2 REPORT The REPORT request is an extensible mechanism for obtaining information about aconfiguration.resource. Thisapproach allows clients to usediffers from OPTIONS because theURL they are familiar with. If a client requests a resource thatinformation is notpart of a configuration, then an errorstatic. That is, it isreturned. >>Request GET /foo/bar.htm HTTP/1.1 Host: www.foobar.com Configuration-Id: /cfgs/DFEE2034 Content-Length: 0 6.4. Deleting Configurations To deletetypically aconfiguration, use the location returned from the configuration creation. Note that configurations SHOULD NOT allow delete if other configurations are derived from them. >>Request DELETE /cfgs/RYURUS99009 HTTP/1.1 Host: www.foobar.com Content-Length: 0 6.5. Resolution Queues There are times when an operation cannot be blockedreport thatwill resultrequires server processing ina stateorder to generate. The REPORT method takes an XML body document thatrequires user action. For example, when configurations inherit, therespecifies the type of report. If no report is requested, thepotential for conflicts. Resolution queues provide a mechanism for discovering these conditions. Configurations track and maintainmethod returns a list ofissues that needavailable reports. TBD - More details on error codes TBD - Give request/response example 5.3 New Versioning Methods WebDAV versioning introduces three new methods to support the checkout/checkin versioning model. 5.3.1 CHECKOUT A CHECKOUT request can only beresolved as a result of actions. These lists are referredapplied toas resolution queues. Clients cana versioned resource. When a CHECKOUT requestthe resolution issues and react accordingly. The configuration will continueis applied toreport the condition until ita versioned resource whose target isresolved. The resolution queuea revision, a new working resource is created that isobtained by obtaining the DAV:resolutionqueue property from the configuration. This property contains all of the identified issues. >>Request PROPFIND /cfgs/FDJE4949 HTTP/1.1 Host: www.foobar.com Content-Type: text/xml Content-Length: xxxxx <?xml version="1.0" encoding="utf-8" ?> <D:propfind xmlns:D="DAV:"> <D:prop> <D:resolutionqueue/> </D:prop> </D:propfind> >>Response HTTP/1.1 207 Multi-Status Content-Type: text/xml Content-Length: xxx <?xml version="1.0" encoding="utf-8" ?> <D:multistatus xmlns:D="DAV:"> <D:response> <D:href>http://www.foobar.com/cfgs/FDJE4949</D:href> <D:propstat> <D:prop> <D:resolutionqueue> <D:resolutionitem xmlns:D="DAV:"> <D:resolutiontype><D:conflict/></D:resolutiontype> <D:resource>http:/foo/bar.htm</D:resource> <D:newversion>DAV:FDFEE55544</D:newversion> </D:resolutionitem> </D:resolutionqueue> </D:prop> </D:propstat> </D:response> </D:multistatus> Onceaclient has resolved an issue it will automatically be removed fromcopy of theresolution queue. 6.6. Configuration Properties The standard PROPFINDrevision, andPROPPATCH methods can be used ontheconfigurationDAV:predecessor of the working resourceto get andis setproperties on a configuration. Configurations MUST provide configuration properties if configurations are supported. The following list identifies pre-defined properties that MUSTto besupported: DAV:configurationtype - The type ofthat revision. If theconfiguration. Configurations can choose to make thisDAV:predecessor has aread-only property. DAV:derivedfrom - The configuration from which the configurationDAV:single-checkout property and isderived. Configurations can choose to make thisalready checked out into aread-only property. DAV:inheritancetype -workspace, the CHECKOUT request fails. ThetypeDAV:workspace ofinheritance fortheconfiguration. Configurations can choose to make this a read-only property. DAV:basetime - The base time usedworking resource is set tocreatebe theconfiguration. Configurations can choose to make this a read-only property. DAV:defaultconfiguration - This property onworkspace specified in theconfiguration root identifiesTarget-Selector header. If thedefaultTarget-Selector is not a workspaceconfiguration to useor ifonethere isnot specified. DAV:resolutionqueue - A list of identified issues that require client attention. 6.7. Headers To support configurations, two new headers are introducedno Target-Selector header, the DAV:workspace for that working resource is allocated by the server. The body of the CHECKOUT request can be usedwith a varietyto initialize the DAV:checkin-policy of theDAV and HTTP methods. The following list identifies these headers: Configuration-Id - This headerworking resource. When a CHECKOUT request isusedapplied toidentifya versioned resource whose target is a working resource, theconfiguration thatCHECKOUT request MUST fail. On CHECKOUT, the DAV:activity of the new working resource is set to beused when performing an operation. For workspace configurations, this can be specified to set default revisions per-configuration, enumerationthe DAV:activity ofcheckouts/checkins againstthe current workspace. If DAV:activity is not set, aspecific configuration, orserver with activity support automatically assigns an activity toestablish locks specificthe new working resource. The CHECKOUT request fails if neither DAV:activity nor DAV:label is set. TBD - Failures must include "policy not supported" TBD - More details on error codes TBD - Give request/response example 5.3.2 CHECKIN When a CHECKIN request is applied to aconfiguration. If a configurationversioned resource whose target isnot specified,a working resource, a copy of thedefault workspace configurationworking resource isused. All servers havemade adefault workspace where resources reside.new revision of that versioned resource and the working resource is deleted. Theconfiguration "*" can be specified with PROPFINDnew revision is added tolocate properties irrespectivethe DAV:successors collection ofconfiguration. Configuration-Id := "Configuration-Id" ":" (URL | "*") Note thattheconfiguration id can be used in placeDAV:predecessor ofa revision id. In this case,therevision selected isnew revision, and thedefault revisionworkspace of theversionedworking resourcewithin the specified configuration. Target-Configuration - This headerisused to specifydeleted from the DAV:working-resources collection of the DAV:predecessor. The body of atarget configuration when dealing with cross-configuration operations. For example, resourcesCHECKIN request can becopied from one configurationused toanother usingoverride theConfiguration-Id and Target-Configuration headers withcurrent DAV:checkin-policy values of theCOPY method. Note that resources CANNOT be MOVEd from one configuration to another. Target-Configuration := "Target-Configuration" ":" URL 7. CONFIGURATION REPORTS Revision history and configuration dependency graphs are accessed via PROPFIND. Note that configurations MAY support multiple stylesworking resource. The effect ofhistory and dependency. To enumerateDAV:checkin-policy on a CHECKIN request is described in thesupported history graphs, clients use PROPFIND anddefinition of the<DAV:availablereports>DAV:checkin-policy property.The results indicate the different graphs and reports, which can, themselves, be requested via PROPFIND. >>Request PROPFIND /cfgs/FHJRH3994 HTTP/1.1 Host: www.foobar.com Depth: 0 Content-Type: text/xml Content-Length: xxxx <?xml version="1.0" encoding="utf-8" ?> <D:propfind xmlns:D="DAV:"> <D:prop> <D:enumreport/> </D:prop> </D:propfind> >>Response ... <D:multistatus> <D:response> <D:href>http://www.foobar.com/cfgs/FHJRH3994</D:href> <D:propstat> <D:prop> <D:enumreport> <D:report>DAV:configurationderivation</D:report> <D:report>DAV:configurationmerge</D:report> </D:enumreport> </D:prop> </D:propstat> <D:status>HTTP/1.1 200 OK</D:status> </D:response> </D:multistatus> ...Whenclients issue PROPFIND requeststhe CHECKIN method is applied toobtain reports, they may include other properties ina resource that is versionable, but not currently versioned, therequest. These propertiesresource is put under version control. If a versionable collection is put under version control, all members of that collection arereturned for each report item. 7.1. Configuration Derivation Configurations MUST support the DAV:configurationderivation report. This enumeratesput under version control as well. TBD - More details on error codes TBD - Explain effect on existing resource types TBD - Give request/response example 5.3.3 UNCHECKOUT When an UNCHECKOUT request is applied to a versioned resource whose target is a working resource, thefull derivationDAV:workspace ofa configuraiton. Notethat working resource is deleted from thelimit parameter can be specified to limit the numberDAV:working-resources collection ofitems returned. By definitiontheorderDAV:revision of theconfigurations is immediate predecessor. >>Request PROPFIND /cfgs/BHFR59593 HTTP/1.1 Host: www.foobar.com Depth: 0 Content-Type: text/xml Content-Length: xxxx <?xml version="1.0" encoding="utf-8" ?> <D:propfind xmlns:D="DAV:"> <D:configurationderivation limit=100/> </D:propfind> >>Response ... <D:multistatus> <D:response> <D:href>http:/www.foobar.com/cfgs/234</D:href> <D:status>HTTP/1.1 200 OK</D:status> </D:response> <D:response> <D:href>http:/www.foobar.com/cfgs/345</D:href> <D:status>HTTP/1.1 200 OK</D:status> </D:response> </D:multistatus> ... 7.2. Configuration Merge Graph Configurations SHOULD supportworking resource, and theDAV:configurationmerge report.working resource is deleted. Thisenumerateseffectively cancels thederivation of a configuration including merges from one configuration to another. >>Request PROPFIND /cfgs/BHFR59593 HTTP/1.1 Host: www.foobar.com Depth: 0 Content-Type: text/xml Content-Length: xxxx <?xml version="1.0" encoding="utf-8" ?> <D:propfind xmlns:D="DAV:"> <D:configurationmerge/> </D:propfind> >>Response ... <D:multistatus> <D:response> <D:href>http:/www.foobar.com/cfgs/234</D:href> <D:status>HTTP/1.1 200 OK</D:status> </D:response> <D:response> <D:href>http:/www.foobar.com/cfgs/3FF</D:href> <D:status>HTTP/1.1 200 OK</D:status> </D:response> </D:multistatus> ... 8. DYNAMIC CONFIGURATIONS Dynamic configurations provide a mechanism to identify all revisions that match specific criteria. For example, "all revisionsCHECKOUT request thathaveproduced thelabel Beta1".working resource. TBD - More details on error codes TBD - Explain effect on existing resource types TBD - Give request/response example 5.4 New Versioning Headers 5.4.1 Target-Selector Thedynamic configuration isTarget-Selector header contains aview onto the resources andworkspace URL or a revision name. The Target-Selector header isupdated automatically as resources and revisions are created, deleted, and modified. All dynamic configurations support the DAV:rsrtypes property. This identifies the different styles of dynamic configurationsused to specify which working resource or revision of a versioned resource should besupported. This specification definesits target. If asingle common type, DAV:basicrsr. >>Request PROPFIND /cfgs/FHHE49495 HTTP/1.1 Host: www.foobar.com Content-Type: text/xml Content-Length: xxxxx <?xml version="1.0" encoding="utf-8" ?> <D:propfind xmlns:D="DAV:"> <D:prop> <D:rsrtypes/> </D:prop> </D:propfind> >>Response HTTP/1.1 207 Multi-Status Content-Type: text/xml Content-Length: xxx <?xml version="1.0" encoding="utf-8" ?> <D:multistatus xmlns:D="DAV:"> <D:response> <D:href>http://www.foobar.com/cfgs/FHHE49495</D:href> <D:propstat> <D:prop> <D:rsrtypes> <D:basicrsr/> </D:rsrtypes> </D:prop> </D:propstat> </D:response> </D:multistatus> Clients establishTarget-Selector header is omitted in aselection criteria by setting the DAV:selectionrule property. Once set, the dynamic configuration collection contains references to the matching resources. >>Request PROPPATCH /cfgs/FHHE49495 HTTP/1.1 Host: www.foobar.com Content-Type: text/xml Content-Length: xxxxx <?xml version="1.0" encoding="utf-8" ?> <D:propertyupdate xmlns:D="DAV:"> <D:set> <D:prop> <D:selectionrule> <D:basicdynamicconfig> ... </D:basicdynamicconfig> </D:selectionrule> </D:prop> </D:set> </D:propertyupdate> The DAV:basicrsr tag groupsrequest on a versioned resource, theselection criteria that aredefault workspace is implicitly usedto populateas thedynamic configuration. TheTarget- Selector. 6 THE DAV VERSIONING XML ELEMENTS 6.1 Revision Selection Rule Elements A revision selectioncriteriarule document isspecified as a setthe value oftags where nesting representstheexpressional ordering. The following tags are available: - DAV:and - The included tags MUST allDAV:revision-selection-rule property of a workspace. Semantically, a revision selection rule (or RSR) element can betrueapplied to an arbitrary versioned resource, and will either select- DAV:or - Anya particular revision of that versioned resource or select no revision of that versioned resource. If it selects a particular revision, it may also detect a conflict (e.g. when there were multiple candidates for selection). A document describing theincluded tags MUST be true to select - DAV:not - The include tag should be inverted (logically) - DAV:href - The resource URL MUSTconflicts can be obtained through a conflict REPORT request. 6.1.1 DAV:rsr-configuration A DAV:rsr-configuration element contains theincludedURL- DAV:label - Aof a configuration. If the configuration contains a revisionMUST haveof thespecified label - DAV:tip - The "tip"versioned resource, that revision is selected- DAV:revisionid - The specifiedby the DAV:rsr- configuration element; otherwise, no revision isselected - DAV:configurationid - The configuration MUST beselected. A DAV:rsr-configuration element never generates a conflict. 6.1.2 DAV:rsr-activity-latest A DAV:rsr-activity-latest element contains thespecified value - DAV:branchid - The branch MUST beURL of an activity. If thespecified value - DAV:depth - Used with DAV:href to indicate a recursive match TBD - provide full DTD The following example illustrates a selection rule that includes allDAV:revisions collection of the activity contains one or more revisionsinof the/Foo/Bar folder (and below)versioned resource, then the latest revision in thathave been labeled as "Beta1". <?xml version="1.0" encoding="utf-8" ?> <D:basicrsr xmlns:D="DAV:"> <D:and> <D:href>http:/www.foobar.com/Foo/Bar/<D:depth>infinity</D:depth>< /D:href> <D:label>Beta1</D:label> </D:and> </D:basicrsr> 9. WORKSPACE CONFIGURATIONS Branching providesactivity is selected. The semantics of activities ensures that there always is amechanismunique latest revision forparallel changes toan activity. If the activity contains no revisions of a versioned resource, the DAV:rsr-activity-latest element selects no revisions of that versioned resource.A workspace configurationIf the DAV:needed-activities collection of an activity is non- empty, then the DAV:rsr-activity element acts like amechanism for parallel changes of multiple resources. For example, /MySite/ might contain allDAV:rsr-merge element that contains that activity and each of theWeb pages for V1 of my companies e-commerce site. These have been put inDAV:needed- activities. A DAV:rsr-activity-latest element can generate conflicts only if theV1 workspace.DAV:needed-activities collection is non- empty. 6.1.3 DAV:rsr-label Ateam responsible for developing V2DAV:rsr-label element contains a label. If a revision of thesite would create a new workspace configuration based on V1. The V2 workspaceversioned resource has that label, that revision ispopulated withselected by theV1 versions, but these resources can be versioned independently. Essentially all resources have been "branched" in a coordinated fashion. Since thisDAV:rsr-label element; otherwise, no revision is selected. A DAV:rsr-label element never generates abranch, bothconflict. 6.1.4 DAV:rsr-revision-id A DAV:rsr-revision-id element contains a revision id. If a revision of theV1 andversioned resource has that revision id, that revision is selected by theV2 revisions refer toDAV:rsr-revision-id element; otherwise, no revision is selected. A DAV:rsr-revision-id element never generates a conflict. 6.1.5 DAV:rsr-latest A DAV:rsr-latest element selects thesamerevision of that versionedresource. This allows history and reports to be generated across workspaces. 9.1. Managing Configuration Content Clients need to be able to access and manageresource with thecontentslatest DAV:creationdate. A DAV:rsr-latest element never generates a conflict. 6.1.6 DAV:rsr-or A DAV:rsr-or element contains a sequence of RSR elements. The behavior of aconfiguration. ThisDAV:rsr-or element isdone using several different DAV methods. The COPY method can be usedidentical tocopythe behavior of the first element in this sequence that selects aspecificrevision of the versioned resource. If no element selects a revision, then the DAV:rsr-or element selects no revision of that versioned resource.However, this results6.1.7 DAV:rsr-merge A DAV:rsr-merge element contains a sequence of RSR elements. If one of the elements in this sequence selects anew versioned resource being created. Resources are added to and removed from workspace configurations usingrevision that is theMKREF and DELREF methods defined bydescendent of all of theDAV Advanced Collections Working Group. Noteother revisions selected by elements in this sequence, then thatdirect references are required. Clients can obtainrevision is selected by thecontents ofDAV:rsr-merge element. If no selected revision is aconfiguration using PROPFIND to enumeratedescendent of all thehierarchy underother selected revisions, then theconfiguation's collection. As well, as stated above, clients can useresult of theConfiguration-Id header as described previously. 9.2. Default Workspace Configurations Clients can establish a default workspace configuration thatDAV:rsr-merge isto be used, for all clients, if they do not specifyaworkspace configuration. To do this, use the SETDEFAULT method against the configuration root identifying"conflict". A conflicts REPORT request can be used to identify thedefault configuration. >>Request SETDEFAULT /cfgs/ HTTP/1.1 Host: www.foobar.com Content-Type: text/xml Content-Length: xxx <?xml version="1.0" encoding="utf-8" ?> <D:setdefault xmlns:D="DAV:"> <D:href>http://www.foobar.com/cfgs/CHFH49594/</D:href> </D:setdefault> >>Response HTTP/1.1 200 OK Content-Length: 0 10. CHECKIN SETS Clients may desireconflicts. 6.2 Report Elements 6.2.1 Conflicts Report A conflicts report describes theability to track a set of changes asconflicts in aunit. That is, createspecified workspace for agrouping of related changes. This is achieved usingspecified resource or for all theMKCHECKINSET method to createmembers of aspecialspecified versioned collection.Clients refer to6.2.1.1 DAV:conflicts-report-request A DAV:conflicts-report-request contains thecheckin set on all checkin (or change) requests. The server automatically createsURL of a"share" toworkspace and the URL of a versioned resource. 6.2.1.2 DAV:conflicts-report-response A DAV:conflicts-report-response contains a DAV:conflict element for each versioned resource for which thenewly createdrevision selection rule specified in theidentified collection. Checkin sets are specific toDAV:conflicts-report-request produced aconfiguration and are created using the MKCHECKINSET method.conflict. TheDAV:checkinsetroot property onDAV:conflict element identifies the versioned resource which generated aconfiguration specifiesconflict, as well as information about how to resolve the conflict (such as the revisions that would need to be merged). 6.2.1.3 DAV:conflict The DAV:conflict element contains the URL of acollection where checkin setsversioned resource for which theconfiguration exist. This can be used for discovery or creation. Ifrevision selection rule generated aconfiguration doesn't support checkin sets, then this property will be empty. Clients create checkin sets using MKCHECKINSET. The response includesconflict, a DAV:common-ancestor for thelocation ofconflict, and two or more DAV:contributor elements for thenew checkin set. >>Request MKCHECKINSET /cs/244 HTTP/1.1 Host: www.foobar.com Content-Length: 0 >>Response HTTP/1.1 201 CREATED Host: www.foobar.com Location: http://www.foobar.com/cs/244 Content-Length: 0conflict. 6.2.1.4 DAV:common-ancestor Thefollowing example illustrates useDAV:common-ancestor element identifies a revision that is a common ancestor ofcheckin sets. >>Request CHECKIN /foo/bar HTTP/1.1 Host: www.foobar.com Lock-Token: <opaquelocktoken:rejrei-43343-rereffre> Checkin-Set: /cs/244 Content-Type: text/html Content-Length: xxxx <D:checkin> ... </D:checkin> The following properties MUST be supported onallcheckin set collections: DAV:closed - This isthe DAV:contributor elements for atrue (1) / false (0) property that indicates if this checkin set can be referenced in CHECKIN requests. Whenparticular conflict. 6.2.1.5 DAV:contributor The DAV:contributor element identifies acheckin set is created, this propertyrevision that isdefaulted to 0. Noteselected by an element of the revision selection rule but that is not an ancestor of any of the other revisions selected by the revision selection rule. 6.2.2 Compare Report 6.2.2.1 DAV:compare-report-request A DAV:compare-report-request contains the URL's of two resourcesMAY choose to disallow clients from setting this property to 0 once a client has set itof the same type. 6.2.2.2 DAV:compare-report-response A DAV:compare-report-response identifies the differences between two resources of the same type. These differences are indicated by appropriate DAV:added, DAV:deleted, and DAV:changed elements. In particular, if a DAV:compare-report-request is applied to1.two configuration revisions. Thefollowing properties MUST be supported on all resources: DAV:checkinid - This read-only property returnsDAV:compare-report-response contains thecheckin id associated with thisrevisions, needed-configurations, and activities that are selected by one configuration revisionofbut not theresource.other. 6.2.2.3 DAV:added AcheckinDAV:added element identifies something thatreferences a checkin set MUST be made toappears in theconfiguration associated withsecond resource but not in thecheckin set. 11. VERSION MAPPING This specification defines headers to specify configurations andfirst. 6.2.2.4 DAV:deleted A DAV:deleted element identifies something that appears in the first resourceversions. However, there are timesbut not in the second. 6.2.2.5 DAV:changed A DAV:changed element identifies something that is in both resources but that is in some way different in the two resources. For example, whenclients requiretwo configurations are being compared, asingle URI for when working againstDAV:changed element can identify a versioned resource, a versioned collection, or an activity. A versioned resource has changed if the configurations select different revisions of that versioned resource. A versioned collection has changed if the configurations select different revisions orversions. Version mapping support allows servers to create namespacesdifferent baselines of thatmap toversioned collection. An activity has changed if both configurationsand versions. Notecontain thatmappings are dynamic. That is, as resources are added, removed, and modified,activity but thechanges are reflected in any active maps.DAV:revisions or DAV:needed- activities of that activity were different when those configurations were created. 7 INTERNATIONALIZATION CONSIDERATIONS Todeletebe supplied. NOTE: If amapping, use DELETE against the URI specifiedrevision label contains a URL reserved character, that character is escaped in theMKMAP request. 11.1. Discovery Mapping support is optional and support is discovered using OPTIONSDAV:revision-labels name. 8 SECURITY CONSIDERATIONS To be supplied. 9 SCALABILITY To be supplied. 10 AUTHENTICATION Authentication mechanisms defined in WebDAV will also apply toverify if the MKMAP method is supported. UsingDAV Versioning. 11 IANA CONSIDERATIONS This document uses therequest bodynamespace defined by [RFC2518] for XML elements. All other IANA considerations mentioned in [RFC2518] also applicable to DAV Versioning. 12 INTELLECTUAL PROPERTY The following notice is copied from RFC 2026 [RFC2026], section 10.4, and describes theDAV:verinfo tag, clients can obtainposition of thesupported map styles. This example shows thatIETF concerning intellectual property claims made against this document. The IETF takes no position regarding the/cfgs/DFEE2034 configuration supports mappingvalidity or scope of any intellectual property or other rights that might be claimed to pertain to the/map/ rootimplementation or use other technology described in this document or thenamespace. >> Request OPTIONS /cfgs/DFEE2034 HTTP/1.1 Host: foobar.com Content-Type: text/xml Content-Length: xxx <?xml version="1.0" encoding="utf-8" ?> <D:options xmlns:D="DAV:"> <D:verinfo/> </D:options> >> Response HTTP/1.1 200 OK Date: Tue, 20 Jan 1998 20:52:29 GMT Connection: close Accept-Ranges: none Allow: OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, COPY, MOVE, MKCOL, PROPFIND, PROPPATCH, LOCK, UNLOCK, MKREF, FREEZE, THAW, CHECKIN, CHECKOUT, UNCHECKOUT, BRANCH Public: OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, COPY, MOVE, MKCOL, PROPFIND, PROPPATCH, LOCK, UNLOCK, MKREF, FREEZE, THAW, CHECKIN, CHECKOUT, UNCHECKOUT, BRANCH Versioning: DAV:versioning Content-Type: text/xml Content-Length: xxx <?xml version="1.0" encoding="utf-8" ?> <D:options xmlns:D="DAV:"> <D:verinfo> <D:mapstyles> <D:mapstyle>DAV:detailedmap </D:mapstyle> <D:mapstyle>DAV:branchmap </D:mapstyle> <D:mapstyle>DAV:nestedbranch </D:mapstyle> </D:mapstyles> </D:verinfo> </D:options> 11.2. Mapping Configurations The MKMAP method is used to create namespaces based on a configuration. When a configuration is mappedextent toa new namespace, all elements within the configuration canwhich any license under such rights might or might not bedirectly accessed within the namespace without requiringavailable; neither does it represent that it has made any effort to identify any such rights. Information on theconfigurationIETF's procedures with respect to rights in standards-track and standards-related documentation can beidentifiedfound inthe header. In the example below, a new namespace is createdBCP-11. Copies of claims of rights made available foraccessing the contentspublication and any assurances ofthe /cfgs/DFEE2034 configuration. >> Request MKMAP /maps/mymap HTTP/1.1 Host: foobar.com Configuration-Id: /cfgs/DFEE2034 Content-Type: text/xml Content-Length: xxxx <?xml version="1.0" encoding="utf-8" ?> <D:configurationmap xmlns:D="DAV:"/> >> Response HTTP/1.1 201 CREATED Context-Length: 0 11.3. Mapping Resource Versions The MKMAP method is also usedlicenses tocreate namespaces based on a resource's versions (i.e., its revision graph). When a resource is mapped, its revision history (revision graph) within the configuration isbe madeavailable without requiring the Revision-Id header. Withinavailable, or themapped namespace,result of an attempt made to obtain ahierarchy is createdgeneral license or permission for therevisions. However, there are different ways to map the history. Consider the following revision historyuse of such proprietary rights by implementers or users of this specification can be obtained from theversioned resource bar.htm: V1 -> V2 -> V3 (primary branch) | +-> V1.1 -> V1.2 ("test" branch)IETF Secretariat. Thefollowing diagrams illustrate possible mappings: (DAV:detailedmap) (DAV:branchmap) (DAV:nestedbranchmap) V1 Primary Test Primary | | | | +----+--------+ V1 V1.1 +------ Test | | | | | | | V2 bar.htm V1.1 V2 V1.2 V1 V1.1 | | | | | +----+ +-----+ V3 V2 V1.2 | | | | | V3 bar.htm V1.2 bar.htm V3 | | bar.htm bar.htm InIETF invites any interested party to bring to its attention any copyrights, patents or patent applications, or other proprietary rights which may cover technology that may be required to practice this standard. Please address theexample below, a new namespaceinformation to the IETF Executive Director. 13 ACKNOWLEDGEMENTS This protocol iscreated for accessingtheversionscollaborative product of the/foo/bar.htm resource in the /cfgs/DFEE2034 configuration. >> Request MKMAP /maps/mymap2 HTTP/1.1 Host: foobar.com Configuration-Id: /cfgs/DFEE2034 Content-Type: text/xml Content-Length: xxx <?xml version="1.0" encoding="utf-8" ?> <D:revisionmap xmlns:D="DAV:"> <D:href>/foo/bar.htm</D:href> <D:mapstyle>DAV:detailedmap</D:mapstyle> </D:revisionmap> >> Response HTTP/1.1 201 CREATED Context-Length: 0 Note that resources MAY support any mapping styles, however, if they support MKMAP, then it MUST support DAV:detailedmap as illustrated above. 12. THE DAV VERSIONING GRAMMAR To be supplied - DescribeDelta-V design team: Jim Amsden (IBM, DeltaV Chair), Geoffrey Clemm (Rational), Bruce Cragun (Novell), David Durand (INSO), Chris Kaler (Microsoft), Jeff McAffer (OTI), Bradley Sergeant (Merant), anddetail the DTDs 13. INTERNATIONALIZATION CONSIDERATIONS To be supplied. 14. SECURITY CONSIDERATIONS To be supplied. 15. SCALABILITY To be supplied. 16. AUTHENTICATION Authentication mechanisms defined in WebDAV will also applyJim Whitehead (UCI). We would like toDAV Versioning. 17. IANA CONSIDERATIONS This document usesacknowledge thenamespace defined by [WebDAV]foundation laid forXML elements. All other IANA considerations mentioned in [WebDAV] also applicable to DAV Versioning. 18. COPYRIGHT To be supplied. 19. INTELLECTUAL PROPERTYus 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. 14 INDEX To be supplied.20.15 REFERENCES[DAVVERREQ] TBD, "Requirements for DAV Versioning and Variant Authoring", October 1998, internet-draft, work-in-progress, draft- ietf-webdav-versionreqs-00.txt [Kaler] C. Kaler, "Versioning Extensions for WebDAV", September 1998, internet-draft, work-in-progress, draft-kaler-webdav- versioning-00.[RFC2068] R. Fielding, J. Gettys, J. C. Mogul, H. Frystyk, and T. Berners-Lee, "Hypertext Transfer Protocol -- HTTP/1.1", RFC 2068, U.C. Irvine, DEC, MIT/LCS, January 1997. [RFC2119] S. Bradner, "Key words for use in RFCs to Indicate Requirement Levels." RFC 2119, BCP 14. Harvard University. March, 1997.[WebDAV][RFC2518] Y. Goland, E.J. Whitehead, A. Faizi, S.R. Carter, D. Jenson,"Extensions"HTTP Extensions for Distributed Authoringon the World Wide Web", April. 1998, internet-draft, work-in-progress, draft-ietf- webdav-protocol-08. [White] E.J. Whitehead, "A Web Versioning Protocol", June 1998, internet-draft, work-in-progress, draft-whitehead-webdav- versioning-00. 21. AUTHOR'S- WEBDAV", RFC 2518, Microsoft, UCIrvine, Netscape, Novell, February. 1999. [AdvCol] http://www.ietf.org/internet-drafts/draft-ietf-webdav- collection-protocol-03.txt [VerGoal] http://www.ietf.org/internet-drafts/draft-ietf-webdav- version-goals-02.txt 16 AUTHORSĘ ADDRESSES Geoffrey Clemm Rational Software 20 Maguire Road Lexington MA 02421-3104 Email: geoffrey.clemm@rational.com ChristopherKaler, EditorKaler Microsoft One Microsoft Way RedmondWA,WA 9085-6933Email:ckaler@microsoft.com Jim Amsden IBM Email: jamsden@us.ibm.com Geoff Clemm Rational Email: gclemm@atria.com Bruce Cragun Novell Inc. 1555 N. Technology Way Orem, UT 84097 Email: bcragun@novell.com David Durand Email: dgd@cs.bu.edu Bradley Sergeant MicroFocusEmail:bradley_sergeant@intersolv.com E. James Whitehead, Jr. Dept. of Information and Computer Science University of California, Irvine Irvine, CA 92697-3425 Email: ejw@ics.uci.edu 22.ckaler@microsoft.com 17 OPEN ISSUES The following list identifies key open issues against this document:. Can you checkout a collection? What does it mean? . What tags do we want to use for resource/configuration report results? . What structure do we create for maps? . What additional resource branching support is needed? . Schema discovery is an issue. For example, how@ TODO: Add the appropriate DAV:resourcetype properties todiscover/change mutable/immutable properties? . There are several missingworkspace, history resource, activity, and configuration. @ TODO: Flush out details on methods: e.g., request/response examples/ replies that needneeded. @ TODO: DTDs and semantics of properties @ TODO: Lots of details @ ISSUE: How are policies discovered? @ ISSUE: Does Versioning have to bespecified. 23. CHANGE HISTORY Sep 28, 1998 Initial Draft based on [White] and [Kaler]. Oct 24, 1998 Incorporate feedback from October 01-02 working group meeting. Jan 20, 1999 Incorporate feedback from December 1998 working group meeting.a header, or can it be the body of the OPTIONS response? @ ISSUE: Couldn't MKRESOURCE be handled just by allowing PROPPATCH to be applied to a null resource?