INTERNET-DRAFTChristopherChris Kaler,draft-ietf-webdav-versioning-00.txt MicrosoftMicrosoft, Editor draft-ietf-webdav-versioning-01.txt Jim Amsden, IBM Goeff Clemm, Rational Bruce Cragun, Novell David Durand, BU Bradley Sergeant, Microfocus Jim Whitehead, UC Irvine ExpiresApril 26,June 20, 1999 January 20, 1999October 26, 1998Versioning Extensions to WebDAV Status of this Memo This document is an Internet draft. Internet drafts are working documents of the Internet Engineering Task Force (IETF), its areas and its working groups. Note that other groups may also distribute working information as Internet drafts. Internet Drafts are draft documents valid for a maximum of six months and can be updated, replaced or obsoleted by other documents at any time. It is inappropriate to use Internet drafts as reference material or to cite them as other than as "work in progress". To learn the current status of any 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 IETF can be found at URL: http://www.ietf.org/ Distribution of this document is unlimited. Please send comments to the mailing list at <ietf-dav-versioning@w3.org>, which may be joined by sending a message with subject "subscribe" to <ietf-dav- versioning-request@w3.org>. Discussions of the list are archived at <URL:http://www.w3.org/Archives/Public/ietf-dav-versioning/>. Abstract This document specifies a set of methods, headers, and content- types composing DAV Versioning extensions, an application of the HTTP/1.1 protocol to version DAV resources. Table of Contents VERSIONING EXTENSIONS TOWEBDAV...........................1WEBDAV ...........................1 TABLE OFCONTENTS.........................................2 1.INTRODUCTION...........................................4 1.1. DAV Versioning......................................4 1.2. RelationshipCONTENTS .........................................2 1. INTRODUCTION ..........................................4 1.1.DAV Versioning ........................................4 1.2.Relationship toDAV.................................4 1.3. Terms...............................................4 1.4. Definitions.........................................4 1.5. Notational Conventions..............................5 2.BASIC VERSIONING.......................................5 2.1. Discovery...........................................5 2.2. ImmutableDAV ...................................4 1.3.Terms .................................................4 1.4.Definitions ...........................................4 1.5.Notational Conventions ................................5 2. BASIC VERSIONING ......................................5 2.1.Discovery .............................................6 2.2.Immutable and MutableProperties....................6 2.3. Automatic Versioning................................7 2.4.Properties ......................7 2.3.Versioning a ResourceProperties.................................7 2.5..................................8 2.4.Immutable and Mutable Revisions .......................8 2.5.Versioning and COPY/MOVE ..............................9 2.6.Sharing ...............................................9 2.7.Default Revision .....................................10 2.8.Collection Versioning ................................11 2.9.Basic Revision Properties ............................11 2.10. Basic VersioningHeaders............................8 2.5.1.Versioning-Support................................8 2.5.2.Revision-Id.......................................8 2.5.3.Merged-From.......................................9 2.6. Checking Out/In Resources...........................9 2.6.1.Checkout..........................................9 2.6.2.Branching Resources..............................11 2.6.3.Checkin..........................................12 2.6.4.Undo Checkout....................................13 2.6.5.Enumeration......................................13 2.7. Default Revision...................................13 2.8. Sharing............................................14 2.9. Collection Versioning..............................15 2.9.1.Default Revisions................................16 2.9.2.Headers..........................................16 2.9.3.Properties.......................................16 2.10.Resource Reports...................................17 2.10.1.Example.........................................17 2.10.2.Default History.................................18 2.10.3.Direct Lineage..................................19 2.10.4.Full Lineage....................................20 3.CONFIGURATIONS........................................21 3.1. Discovery..........................................22 3.2. Creating Configurations............................22 3.3. Configuration Properties...........................24 3.4. Headers............................................25 3.5. Deleting Configurations............................25 3.6. Managing Configuration Content.....................25 3.6.1.AccessHeaders ...........................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. RESOURCE REPORTS .....................................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 UsingConfigurations......................26 3.6.2.Adding Resources to a Configuration..............26 3.6.3.Removing Resources from a Configuration..........26 3.7. Workspace Configurations...........................27 3.7.1.Default Workspace Configurations.................27 3.7.2.Synchronizing Worksapce Configurations...........27 3.7.3.Condensing Workspace Configurations..............29 3.8. Configuration Reports..............................29 3.8.1.Configuration Derivation.........................30 3.8.2.ConfigurationConfigurations ..........................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 MergeGraph........................31 3.9. Resolution Queues..................................31 3.9.1.Discovery........................................32 3.9.2.Obtaining Resolutions............................32 3.9.3.Processing Resolution Items......................32 3.10.Checkin Sets.......................................33 3.10.1.Discovery.......................................33 3.10.2.Usage...........................................34 4.VERSION MAPPING.......................................34 4.1. Discovery..........................................35 4.2.Graph ............................34 8. DYNAMIC CONFIGURATIONS ...............................35 9. WORKSPACE CONFIGURATIONS .............................37 9.1.Managing Configuration Content .......................37 9.2.Default Workspace Configurations .....................38 10. CHECKIN SETS .........................................38 11. VERSION MAPPING ......................................39 11.1. Discovery ..........................................40 11.2. MappingConfigurations.............................35 4.3.Configurations .............................41 11.3. Mapping ResourceVersions..........................36 5.MISCELLANEOUS FUNCTIONS...............................37 5.1. Destroy............................................37 5.1.1.Discovery........................................37 5.1.2.Usage............................................37 5.1.3.Headers..........................................38 5.1.4.Properties.......................................38 6.THEVersions ..........................41 12. THE DAV VERSIONINGGRAMMAR............................38 7.INTERNATIONALIZATION CONSIDERATIONS...................38 8.SECURITY CONSIDERATIONS...............................38 9.SCALABILITY...........................................38 10. AUTHENTICATION......................................38 11. IANA CONSIDERATIONS.................................38 12. COPYRIGHT...........................................39GRAMMAR ...........................42 13.INTELLECTUAL PROPERTY...............................39INTERNATIONALIZATION CONSIDERATIONS ..................42 14.REFERENCES..........................................39SECURITY CONSIDERATIONS ..............................43 15.AUTHOR'S ADDRESSES..................................39SCALABILITY ..........................................43 16.OPEN ISSUES.........................................39AUTHENTICATION .......................................43 17. IANA CONSIDERATIONS ..................................43 18. COPYRIGHT ............................................43 19. INTELLECTUAL PROPERTY ................................43 20. REFERENCES ...........................................43 21. AUTHOR'S ADDRESSES ...................................44 22. OPEN ISSUES ..........................................44 23. CHANGEHISTORY......................................40HISTORY .......................................45 1. INTRODUCTION 1.1. DAV Versioning This document defines DAV Versioning extensions, an application of HTTP/1.1 for handling resource versioning in a DAV environment. [DAVVERREQ] 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 for HTTP/1.1-based clients, - Basic versioning for DAV Versioning-aware clients, - File branching for basic parallel development, and - Configuration support for sophisticated parallel development. 1.2. Relationship to DAV 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 and histories. 1.3. Terms This draft uses the terms defined in [RFC2068], [WebDAV], and [DAVVERREQ]. 1.4. Definitions The section defines several terms that are used throughout the document specific to DAV versioning. Versioned Resource - This refers to a resource that is subject to versioning (independent of any specific version) Revision - This refers to a specific version of a versioned resource Revision History - This refers to the set of changes to a versioned resource Working Resource - This refers to a resource that is an intermediate revision of a versioned resource. That is, the versioned resource has been "checked out" and this is where changes are made until it is ready to be "checked in". Note that working resources are not versioned. Revision Thread - This refers to a sequence of revisions that have been branched for a specific purpose. Line of Descent - This refers to the sequence of revisions that have occurred from the initial revision to a specified revision. 1.5. 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 VERSIONING The base level of versioning support defined by this specification includes both automatic versioning and the basic versioning properties defined for all resources. To support basic versioning, resources MUST allow for versioning to occur automatically on selected resources whenever immutable aspects are changed, and support the properties defined in this section. Resources that support DAV:versioning MUST also provide additional versioning semantics for versioning-aware clients. This section describes these new semantics which include enhancements to existing DAV methods, new headers, andanew versioning-specificmethod.methods. Although the semantics can vary, most versioning systems support the notion of indicating intent to modify a document (check-out) and then submission of the modified version (check-in). Typically this involves some form of locking (either shared or exclusive). As well, many systems support the ability to cancel a check-out or undo a recent check-in. These options are available to the owner or to the Administrator. Users can generally enumerate the current check-outs although they may not be able to determine the user in all cases. Likewise, users can review check-ins to see the change history. Most systems allow users to select different versions from the change history and present a comparison of the versions. Note that locks are not covered in this specification as they are addressed by [WebDAV]. 2.1. Discovery The OPTIONS method allows the client to discover if a resource supports versioning. Theclient issues the OPTIONS method against a resource named by the Request-URI. This is a normal invocationpresence ofOPTIONS definedVersioning in[RFC2068] with an extension. If the client includes the Verify- Extension header, thenthereply includes additional information beyond that which is defined in [RFC2068]. Using thisresponse headerwith the extension DAV:versioning, clients can determine what versioningindicates supportis available.for DAV versioning. This header indicates the level of support. The following defines the BNF for theVerify-ExtensionVersioning header:Verify-ExtensionVersioning :="Verify-Extension""Versioning" ":"URI-list URI-list :=URI| (URI-list "," URI)The valid values of the URI are: - DAV:basicversioning - TBD This example shows that the /somefolder resource supports versioning. >> Request OPTIONS /somefolder/ HTTP/1.1Verify-Extension: DAV:versioningHost: 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,PIN, MKREFMKREF, FREEZE, THAW, CHECKIN, CHECKOUT, UNCHECKOUT, BRANCH Public: OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, COPY, MOVE, MKCOL, PROPFIND, PROPPATCH, LOCK, UNLOCK,PIN, MKREF Verify-Extension: DAV:versioning Versioning-Support:MKREF, FREEZE, THAW, CHECKIN, CHECKOUT, UNCHECKOUT, BRANCH Versioning: DAV:basicversioning Content-Length: 0The Verify-Extension header in the reply indicates that the server understood theSince some aspects of DAV versioning require clients to know additional information, clients can include a requestwith Verify-Extension andbody thatDAV:versioning is supported. As well, the Versioning-Support header indicates the level ofspecifies that DAV versioningsupport provided.information is desired. TheBNF for this headerinformation isprovided laterreturned 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 of the tags returned are described throughout thisdocument.specification. 2.2. Immutable and Mutable Properties An immutable property is defined as a property that, when changed, causes a new revision of a versioned resource to be created. Likewise, a mutable property is a property that can be changed without having a new revision created. Resources can support both mutable and immutable properties although there MAY be restrictions that the mutability is consistent across all resources. This specificationdoesnÆtdoesn't cover the discovery or management of property mutability. 2.3.AutomaticVersioning a Resource By default, a resource may not be subject to versioning. This can be discovered by examining the DAV:isversioned property. To place a non-versioned resource under version control, clients use the VERSION method and specify the URI of the resource to version. Note that if the specified resource is a collection, then the Depth header is used to identify the scope of the operation. A depth of infinity is assumed by default. TheDAV:autoversionDAV:isautoversioned property indicates if a resource is automatically versioned when any immutable aspect of it is changed. Resources with automatic versioning allow HTTP/1.1 clients to have changes versioned without explicit versioning commands.Automatic versioning includes the following methods: - Updates viaThis applies to any method that modifies a resource (e.g., PUT, MKCOL, COPY, MOVE,or DELETE - Immutable properties updates via PROPPATCH 2.4. Resource Properties For resources that support versioning, they MUST supportDELETE, PROPPATCH, ...) Using thefollowing properties usingDAV:versioningenabled and DAV:autoversioning tags, clients can establish the"DAV:" namespace. Note that 0/1 is used as a FALSE (0) / TRUE (1) indicator. DAV:isversioned - 0/1 to indicate ifversioning 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, theresource is versionable. Note that this can be implemented ascontents of aread-only property. DAV:autoversion - 0/1 to indicate if the resourcerevision are immutable. That is, once a revision isautomatically versioned when modified. Note that this cancreated, it cannot beimplementedaltered. However, in many document management systems thisas a read-only property. DAV:revisionid - Thisisa read-only propertynot the case. To address these scenarios, the THAW/FREEZE methods are introduced. Note thatreturns a server determined idsupport forthis specificTHAW 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 methods can alter the immutable aspects of the resource.Every revision of a resource willThe FREEZE method indicates that all changes havea unique DAV:revisionid. Abeen made and the revisionid mayshould be marked immutable again. The DAV:canthaw property indicates if aURI or it mayrevision can bean arbitrary server-defined string. However, it cannot containthawed. Similarly, the"," character. Because it is not required to beDAV:hasthawed property indicates if aURI,revision has ever been thawed. Finally, theDAV:revisionuriDAV:isthawed propertyis required to obtain a URI forspecifies if thespecificrevisionof the resource. DAV:vresourceid - Thisisa read-only property that returns a server determined id forcurrently thawed (frozen if not). The following example shows theversioned resource. That is, all revisionsuse ofthe resource have the same DAV:vresourceid. This MUST be preserved over MOVE requests. DAV:previousversionids - ThisTHAW 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. Versioning and COPY/MOVE When a COPY method is issued against aread-only property that returns the server defined id forversioned resource or revision, only theprevious"current" revision 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 as a comma-separated list. Note that this property returns previous revisions thatversioned resource or theserver determines.specified revision is copied to the specified destination. That is,this does not include user identified merged revisions. DAV:nextversionids - Thisthe entire history is NOT copied. When aread-only property that returns the server defined id for the next revision of the resource. An empty value indicates that thereMOVE method isno subsequent revision. Note that there could be multiple next revisions. If there are multiple revisions, they are returned asissued against acomma-separated list. Note that this property returns successor revisions thatversioned resource theserver determines."move" SHOULD be represented in the revision history. That is,this does not include user identified merged revisions. DAV:revisionuri - This isaread-only property that returnsMOVE operation CANNOT be represented as a delete and an add. A MOVE operation cannot be issued against aURI for thisspecific revision.DAV:revisiondisplayname - This is2.6. Sharing Many versioning systems today provide the ability to have aread-only property that returnsgiven resource visible in multiple parts of the namespace. In these situations, astring that clients may use to display this revision. Thisresource isoften a more user friendly string than DAV:revisionid. DAV:revisionlabel - This property allows the specification of textual names that refer to this version of the resource. If there are multiple labels, they are returned as a comma separated list. Labels MUST be unique for the versioned resource.shared. That is,no two revisions ofchanges to thesame versionedresourcecan have the same DAV:revisionlabel. As well, DAV:revisionlabel, DAV:revisionid, and DAV:vresourceidare visible to allshare the same namespace and there can be no duplicates. Servers MAY reserve specific portions ofversions. The WebDAV Advanced Collections working group addresses thisnamespace and return an error if a client usesneed with direct referential members. Support for direct referential members is required for DAV versioning. 2.7. Default Revision If areserved name asRevision-Id (or Branch-Id) header is not specified when referring to a resource, then the tip (latest) revisionlabel. This property MUST be mutable. DAV:mergedfrom - This property specifies(from the primary branch) is used, unless acomma separated list of revision ids from which thisdefault revisionis purported to be derived. This information is provided and managed by the client. DAV:revisioncomment - This property containshas been identified. To mark aclient-defined property associated with the revision. Thisspecified revision asa mutable property. 2.5. Basic Versioning Headers The following sub-sections describethenew version headersdefault revision, clients use the SETDEFAULT method. Note thatMUST be supported for resourcesPUT or CHECKIN will remove any default version. Also note thatsupport DAV:versioning. 2.5.1. Versioning-Support The Versioning-Support header specifiesbranching a resource has no effect on thetypedefault revision ofversioning thatthe resource, even if the default revision isavailable. The following BNF defines this header. Versioning-Support := "Versioning-Support" ":" URI-list To support versioning,branched. If theURI listdefault is removed, the default revision is the tip revision of the initial (primary) branch of the versioned resource. Setting the default revision to DAV:none cancels the default 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 a resource is shared, servers MUSTinclude DAV:basicversioning. Later sectionssupport the ability to set different default revisions at each point ofthis document specify other optional support. 2.5.2. Revision-Idthe share. Clients can determine the default revision by examining the DAV:revisionid from the default 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 Collections can be versioned just like non-collection resources, however, they are only versioned when a direct change is made to the collection. It is up to each collection resource to determine if it supports default versions. If it doesn't, then SETDEFAULT requests MUST fail. TheRevision-IdRevision-Path header is used to identifyaspecificrevisionrevisions that are part ofa versionedthe "path" to the resource. This header servers as an alternative to "URL munging". This header can be specified on all methods and qualifies the resource named in the method.As well, this header2.9. Basic Revision Properties For resources that support versioning, they MUST support the following properties using the "DAV:" namespace. Note that 0/1 isincluded in all repliesused as a FALSE (0) / TRUE (1) indicator. DAV:isversioned - 0/1 to indicate if therevision of the versionedresourceused or created. The BNF for this headeris versionable. Note that this can be implemented asfollows. Revision-Id := "Revision-Id" ":" RID RID := "*" | ANY Clientsa read-only property. DAV:autoversion - 0/1 to indicate if the resource is automatically versioned when modified. Note that this canspecifybe implemented this as a read-only property. DAV:revisionidor any of the DAV:revisionlabel values to refer to- This is a read-only property that returns a server determined id for this specific revision of the resource.The use of Revision-Id: * is only permitted with PROPFIND to obtain properties across all revisionsEvery revision of aversioned resource. 2.5.3. Merged-From When clients useresourcebranching, theywilllikely need to perform merge operations.have a unique DAV:revisionid. Amerge is the process by which changes from different versions are combined to producerevision id may be anew version. ItURL or it may be an arbitrary server-defined string. However, it cannot contain the "," character. Because it islikely that clients will wantnot required totrack this semantic information. Whenbe a URL, theMerged-From headerDAV:revisionurl property isspecified onrequired to obtain aPUT, UNLOCK, or PROPPATCH method, it indicatesURI for the specific revision(or revisions) from whichof thechangeresource. DAV:vresourceid - This isderived. Thea read-only property that returns a servertracks this information and makes it available indetermined id for theDAV:mergedfrom property. Merged-Item := ANY Merged-List := Merged-Item | (Merged-List "," Merged-Item) Merged-From := "Merged-From" ":" Merged-List >>Request PUT /foo/bar HTTP/1.1 Host: www.foobar.com Merged-From: VER:FDHJ43058 Content-Type: text/html Content-Length: xxxx ... >>Response HTTP/1.1 200 OK Content-Length: 0 2.6. Checking Out/In Resources For versioning-aware clients, more advanced requests allow them to perform specific versioning operations. These methods are directed at a specific URI andversioned resource. That is, all revisions of thebody contains XML indicatingresource have theaction to take. If a resource supports DAV:versioning then itsame DAV:vresourceid. This MUSTsupport the LOCK/UNLOCK extensions defined in this section. 2.6.1. Checkout Using the LOCK method, clients can request resources tobe"checked out".preserved over MOVE requests and should be globally unique. DAV:previousrevisionids - Thisinvolves creatingis aworking resourceread-only property thatis not automatically versioned. Checked out resources must be checked in or aborted, usingreturns theUNLOCK method. The diagram below illustrates this process: Revisions of foo.htm: V1 Checkout is performed: V1 | +-> Working Resource Checkin is performed: V1 -> V2 The body XML indicates an optional checkout comment, an optional user token, and locking actions. Clients specifyserver defined id for thecheckout lock in all update operations (e.g., PUT or PROPPATCH) to alterprevious revision of theworkingresource.The working resource will alwaysAn empty value indicates that there are no previous revisions. Note that there could beDAV:checkout locked. Clients can choose to make the appropriate scope (DAV:shared, DAV:exclusive, ...). Optionally, using the DAV:vresoucelockscope tag, clients can have the versioned resource DAV:checkout locked for a specified scope (DAV:shared, DAV:exclusive, ...).multiple previous versions. If there are multiple revisions, they are returned as aclient requests the versioned resource to be locked, and it cannot be, thencomma-separated list. Note that this property returns previous revisions that thelock operation MUST fail. The DAV:checkout lock state is equivalent toserver determines. That is, this does not include user identified merged revisions. DAV:distinguishedpredecessorid - This read-only property indicates theDAV:write lock state in terms of interoperability with other locks. Resources SHOULD allow clients to proposeprimary predecessor for aDAV:locktokenrevision in theLOCK request. If a resource does not acceptevent they are multiple predecessors. DAV:nextrevisionids - This is aclientÆs proposed lock token, it MUST failread-only property that returns theLOCK request. >>Request LOCK /foo/bar HTTP/1.1 Host: www.foobar.com Content-Type: text/xml Content-Length: xxxx <?xml version="1.0" encoding="utf-8" ?> <D:lockinfo xmlns:D="DAV:"> <D:locktype><D:checkout/></D:locktype> <D:comment>checkout comment</D:comment> <D:owner>client-defined token</D:owner> <D:lockscope><D:exclusive/></D:lockscope> <D:vresourcelockscope><D:shared/></D:vresourcelockscope> </D:lockinfo> >>Response HTTP/1.1 201 CREATED Content-Type: text/xml Content-Length: xxxx <?xml version="1.0" encoding="utf-8"?> <D:prop xmlns:D="DAV:"> <D:lockdiscovery> <D:activelock> <D:locktype><D:checkoutlock/></D:locktype> <D:lockscope><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> 2.6.2. Branching Resources For more sophisticated clients, basic resource branching is required. Resource branching means thatserver defined id fora given resource,thehistorynext revision of the resource. An empty value indicates that there isnot linear. That is,no subsequent revision. Note that there could be multiple next revisions. If there aredifferent lines of descent. The diagram below illustrates this. Revision history V1 -> V2 -> V3 Of foo.htm: | +-> V1.1 -> V1.2 | +-> V1.1.1 Individual resource branching is common in many versioning systems today. Project branching (configurations)multiple revisions, they aredescribed inreturned as alater section.comma-separated list. Note thatwhen a collectionthis property returns successor revisions that the server determines. That is, this does not include user identified merged revisions. DAV:revisionurl - This isbranched,a read-only property that returns a URL for this specific revision. DAV:revisionlabel - This property allows thedepthspecification ofthe branch is infinity. There is no waytextual names that refer tochange this.this version of the resource. If there are multiple labels, they are returned as aresource supports branching, itcomma separated list. Labels MUSTreturn DAV:resourcebranching inbe unique for theVersioning-Support header reply from OPTIONS. Aversioned resource. That is, no two revisions of the same versioned resourceis branched usingcan have theLOCK methodsame DAV:revisionlabel. As well, DAV:revisionlabel and DAV:revisionid properties share theDAV:checkout lock type. The resource tosame namespace and there can bebranched is specifiedno duplicates. Servers MAY reserve specific portions of this namespace and return an error if a client uses a reserved name asthe target URI for the method. Clients haveachoicerevision label. This property MUST be mutable. DAV:mergedfrom - This property specifies a comma separated list ofthree approaches to branchingrevision ids from whichare specified with specific tags inthis revision is purported to be derived. This information is provided and managed by therequest: - performclient. This is abranch <DAV:branchresource> - do not branch, error if necessary <DAV:dontbranchresource>mutable property. DAV:mergedto -branch if necessary <DAV:branchallowed> As well, clients can specifyThis property specifies abranch labelcomma separated list of revision ids from which this revision is purported toidentify a created branch usingbe merged into. This information is provided and managed by theDAV:branchlabel tag. The reply MUST includeclient. This is aBranch-Id header specifyingmutable property. DAV:mergedfromunion - This read-only property specified aresource defined branch id orcomma separated list of revision ids from which this revision is derived. This is a union of thespecified branch label ifDAV:mergedfrom and DAV:previousrevisionids properties. DAV:revisioncomment - This property contains abranchclient-defined property associated with the revision. This as a mutable property. This iscreated.a mutable property. DAV:author - Thelabel or idcreator of the revision. This is an arbitrary string. DAV:canthaw - This property indicates if the revision can bespecified in a Branch-Id or Revision-Id header to determineTHAWed for modification. Servers MAY implement this as read-only. DAV:hasthawed - This read-only property indicates if the revision has ever been thawed. DAV:isthawed - This read-only property indicates if the revisionto access. >>Request LOCK /foo/bar.htm HTTP/1.1 Host: www.foobar.com Content-Type: text/html Content-Length: xxxx <?xml version="1.0" encoding="utf-8" ?> <D:lockinfo xmlns:D="DAV:"> <D:branchresource/> <D:branchlabel>MyBranch</D:branchlabel> <D:locktype><D:checkout/></D:locktype> <D:comment>checkout comment</D:comment> <D:owner>client-defined token</D:owner> <D:lockscope><D:exclusive/></D:lockscope> <D:vrsourcelockscope><D:shared/></D:vresourcelockscope> </D:lockinfo> >>Response HTTP/1.1 201 CREATED Branch-Id: MyBranch Content-Type: text/xml Content-Length: xxxx <?xml version="1.0" encoding="utf-8" ?> <D:prop xmlns:D="DAV:"> <D:lockdiscovery> <D:activelock> <D:locktype><D:checkoutlock/></D:locktype> <D:lockscope><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> When a branchiscreated,currently thawed (or frozen if not). DAV:lastcheckin - This read-only property specifies thereplydate this revision was "checked in" in ISO8601 format. 2.10. Basic Versioning Headers The following sub-sections describe the new version headers that MUSTincludebe supported for resources that support DAV:versioning. 2.10.1. Revision-Id The Revision-Id header is used to identify a specific revision of a versioned resource. This header can be specified on all methods and qualifies the resource named in the method. As well, this header is included in all replies to indicate the revision of the versioned resource used or created. The BNF for this header is as follows. Revision-Id := "Revision-Id" ":" RID RID := "*" | Time-Ref | ANY Time-Ref := "Time" "(" ISO8601 ")" This property allows the specification of criteria that selects a specific revision of a resource. This includes a DAV:revisionid or any of the DAV:revisionlabel values to refer to a specific revision of the resource. As well, a configuration (described later) can be referenced here to select the default revision associated with the configuration. The use of the Time operator is to select the "current" revision as of the specified time. The use of Revision-Id: * is only permitted with PROPFIND to obtain properties across all revisions of a versioned resource. 2.10.2. Branch-Idheader.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 anywhere a revision-id is used. When specified, it indicates that the latest version of the indicated branch is to be selected as the revision to use for the operation.2.6.3. Checkin When2.10.3. Override-Checkin It is possible that theclient has completed changes tocheck-in operation will detect aresourceconflict. For example, version 5 was checked out shared, andwishesbefore itto become part of the revision history, the client must check in the resource. Thisisperformed usingchecked back in, version 6 was created. In these situations, theUNLOCK method againstcheck-in MUST fail indicating a conflict. Clients can choose to branch theversioned resource with special body tags and identification ofresource, merge on thecheckout lock inclient, or overwrite. To circumvent this check, clients can use the Override-Checkin header.>>Request UNLOCK /foo/bar.htm 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:unlockinfo xmlns:D="DAV:"> <D:comment>checkin comment</D:comment> </D:unlockinfo> >>Response HTTP/1.1 204 CREATED Revision-Id: VER:FREFRI49349 Content-Length: 0 The reply MUST includeThis specifies that theRevision-Id ofcheck-in operation SHOULD NOT fail (either thenewly created revision. 2.6.4. Undo Checkout If aclientchooseshas merged tocancel a checkout request,resolve theUNLOCK methodconflict, or desires an overwrite). The BNF isused with optional body tags and identificationas 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 than thecheckout lock.default 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 ")" >>RequestUNLOCKGET /foo/bar.htm HTTP/1.1 Host: www.foobar.comLock-Token: <opaquelocktoken:rejrei-43343-rereffre> Content-Type: text/xml Content-Length: xxxxx <?xml version="1.0" encoding="utf-8" ?> <D:unlockinfo xmlns:D="DAV:"> <D:cancelcheckout/> <D:comment>cancel checkout comment</D:comment> </D:unlockinfo> >>Response HTTP/1.1 200 OKRevision-Path: /foo;VER:HT58GHDW49/bar.htm Content-Length: 02.6.5. Enumeration Clients can enumerate the current checkouts toThe use of * for aresource using therevision is only permitted with PROPFINDmethod and standard lock discovery. All attributes specified in the lock request (e.g. DAV:comment) MUST be returned in lock discovery. 2.7. Default Revision Ifto obtain properties across all revisions of aRevision-Id (or Branch-Id) header is not specified when referringversioned resource. 3. CHECKING OUT/IN RESOURCES For versioning-aware clients, more advanced requests allow them to perform specific versioning operations. These methods are directed at a specific URI to alter. If aresource,resource supports DAV:versioning then it MUST support thetip (latest) revision (from the primary branch) is used, unless a default revision has been identified. To mark a specified revision asmethods defined in this section. 3.1. Checkout Using thedefault revision,CHECKOUT method, clientsuse the PIN method. Note that PUT or checkin will create new revisions which willcan request resources to bereturned unless a PIN is defined. When"checked out". This involves creating arevisionworking resource that isPINned, new revisions can be created with PUT or checkin, but they willnot automatically versioned. Checked out resources must bereturned unless they are referenced explicitly. Note that branching achecked in or cancelled. The diagram below illustrates this process: Revisions of foo.htm: V1 Checkout is performed: V1 | +-> Working Resource Checkin is performed: V1 -> V2 The body XML indicates an optional checkout comment, an optional user token, and locking actions. The response indicates the working resourcehas no effect onas well as any requested locks. The CHECKOUT method causes thedefault revisioncreation of theresource, even if the default revisionworking copy which isbranched. If unpinned,specified by thedefault revision isLocation header in thetip revisionresponse. Clients can optionally request locks to be taken as part of theinitial (primary) branch ofCHECKOUT operation. If theversioned resource. >>Request PIN /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:pin xmlns:D="DAV:">VER:HT58GHDW49</D:pin> >>Response HTTP/1.1 200 OK Content-Length: 0locks cannot be obtained, the CHECKOUT operation MUST fail. The following table identifies the different lock options: Lock Tags Used Description Target (DAV: assumed) working wrlocktype, Limits access to the newly created resource wrlockscope working resource revision revisionlockty Blocks CHECKOUT/INs against this pe, revision revisionlocksc ope branch branchlocktype Blocks CHECKOUT/INs against , revisions in this branch branchlockscop e versioned vrlocktype, Blocks CHECKOUT/INs against any resource vrlockscope revision of the versioned resource. The semantics of the tags match those of DAV:locktype and DAV:lockscope as specified for the LOCK method. >>RequestPIN /foo/bar.htmCHECKOUT /foo/bar HTTP/1.1 Host: www.foobar.com Content-Type: text/xml Content-Length:xxxxxxx <?xml version="1.0" encoding="utf-8" ?><D:unpin xmlns:D="DAV:"/><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.1200 OK201 CREATED Location: http://www.foobar.com/tmp/VRJHJWE3493409 Content-Type: text/xml Content-Length:0 It should be noted that setting a default revision may impact automatic versioning. If a client performs a PUT operation that is automatically versioned, itxxxx <?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 if aGET will not return the new version (possibly because of a PIN). 2.8. Sharing Many versioning systems today providebranch is required. 3.2. Checkin When theabilityclient has completed changes tohaveagivenresourcevisible in multiple partsand wishes it to become part of thenamespace. In these situations, a resource is shared. That is, changes torevision history, theresource are visible to all versions. The WebDAV advanced collections adds support for referential members, however, this is not sufficient for sharingclient must check ina versioning environment because of the requirement to establish default revisions. Indirect references cannot map to specific versions for down-level (e.g. HTTP/1.1) clients and direct references map directly tothesharedresource. Thisspecification introduces a new type of referential member, semi-direct. A semi-direct referenceislike a direct reference except that it can have attributes of its own or itperformed using the CHECKIN method against the working copy. The DAV:keepcheckedout tag canmap directlybe specified to indicate that theshared resource. By default, when a semi-direct reference is used in a request, it behaves like a direct reference. However, if the Pass-Through header is specified on the request withresource should remain checked out. That is, create avalue of "*", then the operation is performed against the semi-direct reference not the object it points to. This is an extension ofnew revision, but leave theWebDAV advanced collection specificationworking copy checked out. Using XML tags invalue and becausetheheader can be specified with anyrequestagainst a semi-direct reference. In the example below, a semi-direct reference is created.body, clients can specify optional checkin information. >>RequestMKREF /bing/bar.htmCHECKIN /tmp/VRJHJWE3493409 HTTP/1.1 Host: www.foobar.comRef-Target: /foo/bar.htm Ref-Integrity: DAV:semidirectLock-Token: <opaquelocktoken:rejrei-43343-rereffre> Content-Type: text/xml Content-Length:0xxx <?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... InRevision-Id: VER:FREFRI49349 Content-Length: 0 The reply MUST include theexample below,Revision-Id of the newly created revision. It is possible that the check-in operation will detect arequestconflict. Servers MUST fail this operation if a branch ismaderequired. The Override-Checkin header is used to resolve these conflicts. 3.3. Cancelling Checkout If asemi-direct reference. The object that the reference refersclient chooses tois returned. >>Request GET /bing/bar.htm HTTP/1.1 Host: www.foobar.com Content-Length: 0 Incancel a checkout request, theexample below,UNCHECKOUT method against thesemi-direct reference is PINnedworking copy. As well, optional XML body tags can be used toa specific revision.supply additional information. >>RequestPIN /foo/bar.htmUNCHECKOUT /tmp/VRJHJWE3493409 HTTP/1.1 Host: www.foobar.comPass-Through: *Lock-Token: <opaquelocktoken:rejrei-43343-rereffre> Content-Type: text/xml Content-Length:xxxxxxxx <?xml version="1.0" encoding="utf-8" ?><D:pin xmlns:D="DAV:">VER:HT58GHDW49</D:pin> 2.9. Collection Versioning Collections can be versioned just like non-collection resources, however, there are special situations that must be taken into account. Collections are versioned in the following ways: - DonÆt version the collection regardless of the changes. - Version the collection only if there is a direct change<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 to theresource. - Version the collection if there is a change anywhere under the collection (i.e., bubble of the changes). Each collectionResource Reports section for details on check-out enumeration. 4. BRANCHING RESOURCES For more sophisticated clients, basic resourceMAY choose the behavior it supports. The behaviorbranching isspecified through properties, which resources MAY choose to make read-only. The DAV:autoversion property indicates ifrequired. Resource branching means that for acollection resource supports versioning when changesgiven resource, the history is not linear. That is, there aremade to it.different lines of descent. TheDAV:autocollectionversion property indicates if the collectiondiagram below illustrates this. Revision history V1 -> V2 -> V3 Of foo.htm: | +-> V1.1 -> V1.2 | +-> V1.1.1 Individual resourcesupportsbranching is common in many versioningwhen changessystems today. Project branching (configurations) aremade anywheredescribed inthe namespace below it. 2.9.1. Default Revisions It is up to each collection resource to determine if it supports default versions. If it doesnÆt, then PIN requests MUST fail. Ifacollection resource doesnÆt support versioning, then is MUST also fail PIN requests. 2.9.2. Headers If collections are versioned, then clients may choose to access resourceslater section. Note thatare part of specific revisions. The Revision-Path headerwhen a collection isused to identify specific revisions that are partbranched, the depth of the"path"branch is infinity. There is no way to change this. A revision is branched using theresource. This header servers as an alternativeBRANCH method. The resource to"URL munging". This header canbe branched is specifiedon all methods and qualifiesas theresource named intarget URI for the method. As well, clients can specify a branch label to identify a created branch using the DAV:branchlabel tag. TheBNF for thisreply MUST include a Branch-Id headeris 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;VER:HT58GHDW49 Content-Length: 0 The use of * for a revision is only permitted with PROPFIND to obtain properties across all revisions ofspecifying aversioned resource. 2.9.3. Properties DAV:autocollectionversion - This propertyÆs value (0/1) specifiesresource defined branch id or the specified branch label if acollection is automatically versioned when its contents (anywhere under it) change. That is, if /foo/bar.htm is versioned,branch is/foo/ versioned as well. Resources MAY implement this ascreated. The label or id can be specified in aread-only property. DAV:canautocollectionversion - This propertyÆs value (0/1) specifies if the resource supportsBranch-Id or Revision-Id header to determine theabilityrevision toautomatically version collections whenaccess. >>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 acontained resource changes. Thisbranch is created, the reply MUST include aread-only property. 2.10. Resource ReportsBranch-Id header. 5. RESOURCE REPORTS Revision history graphs and other reports of a resource are accessed via PROPFIND. Note that resources MAY support multiple styles of history and reports. To enumerate the supported history graphs and reports, clients use PROPFIND and the<DAV:enumreport><DAV:availablereports> property. The results indicate a list of the different reports which can, themselves, be requested via PROPFIND.Note that clients can request properties to be included in reports by specifying the desired properties inside the DAV:enumreport tag.For the examples in this section, assume that the resource /foo.htm has the following revision graph: Revision history V1 -> V2 -> V3 Of foo.htm: | +-> V1.1 -> V1.2 | +-> V1.1.1 Clients have specified the following merge annotations: - V1.2 is a merge of V1.1 and V1.1.1 - V3 is a merge of V2 and V1.2 As well, the default revision history (those revisions marked as the default) is as follows: - V1 (the initial revision was created) - V2 (a new revision was 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".2.10.1. Example5.1. Available Reports Clients can obtain the available reports for a resource by obtaining 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:enumreport/><D:prop> <D:availablereports/> </D:prop> </D:propfind> >>Response ...<D:propfind><D:multistatus> <D:response> <D:href>http:/www.foobar.com/foo/bar.htm</D:href> <D:propstat> <D:prop><D:enumreport> <D:report><D:href>DAV:defaulthistory</D:href></D:report> <D:report><D:href>DAV:directlineage</D:href></D:report> <D:report><D:href>DAV:fulllineage</D:href></D:report> </D:enumreport><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:propfind></D:propstat> <D:status>HTTP/1.1 200 OK</D:status> </D:response> </D:multistatus> ... Note that the report styles MUST be specified as DAV:href values.2.10.2.When clients issue PROPFIND requests to obtain reports, they may include other properties in the request. These properties are returned for each report item. 5.2. Default History Resources MUST support the DAV:defaulthistory report. This enumerates the historical record of revisions that have been visible as the defaultrevision of the versioned resource.revision. Clients can specify the limit parameter to limit 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:enumreport type="DAV:defaulthistory"<D:defaulthistory limit=20/> </D:propfind> >>Response ...<D:propfind><D:multistatus> <D:response> <D:href>http://www.foobar.com/foo/bar.htm</D:href> <D:propstat> <D:prop><D:enumreport type="DAV:defaulthistory"> <D:revision id="V1" vresourceid="VER:FFHJE"><D:revisionid>V3</D:revision> <D:revisioncomment>Updateit</D:revisioncomment> </D:revision> <D:revision id="V2" vresourceid="VER:FFHJE"> <D:revisioncomment>Update it</D:revisioncomment> <D:revisionlabel>Test1</D:revisionlabel> </D:revision> <D:revision id="V1" vresourceid="VER:FFHJE"> <D:revisioncomment>Update it</D:revisioncomment> </D:revision> <D:revision id="V3" vresourceid="VER:FFHJE"> <D:revisioncomment>Update it</D:revisioncomment> </D:revision> </D:enumreport>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 obtain a list of the active checkouts against a resource using 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>2.10.3.>>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 ResourcesMUSTSHOULD support the DAV:directlineage report. This enumerates the direct parent revisions of theversionedresource.This report is from the default revision or the specified revision.Clients can request that a report be based on the namespace entry specified, or the associated DAV:vresourceid. Clients use the scope parameter to specify (name or id). Clients can specify the limit parameter to limit the number revisions returned. >>Request PROPFIND /foo/bar.htm HTTP/1.1 Host: www.foobar.comRevision-Id: V3Depth: 0 Content-Type: text/xml Content-Length: xxxx <?xml version="1.0" encoding="utf-8" ?> <D:propfind xmlns:D="DAV:"><D:enumreport type="DAV:directlineage"<D:directlineage scope="name"/> </D:propfind> >>Response ...<D:propfind><D:multistatus> <D:response> <D:href>http://www.foobar.com/foo/bar.htm</D:href> <D:propstat> <D:prop><D:enumreport type="DAV:directlineage" scope="name"> <D:revision id="V1" vresourceid="VER:FFHJE"><D:revisionid>V1</D:revision> <D:vresourceid>VER:FFHJE</D:vresource> <D:revisioncomment>Updateit</D:revisioncomment> <D:revision id="V2" vresourceid="VER:FFHJE">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>Updateit</D:revisioncomment> <D:revisionlabel>Test1</D:revisionlabel> <D:revision id="V3" vresourceid="VER:FFHJE">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>Updateit</D:revisioncomment> <D:merge id="V2" vresourceid="VER:FFHJE"/> <D:merge id="V1.2" vresourceid="VER:FFHJE"/> </D:revision> </D:revision> </D:revision> </D:enumreport>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:propfind> 2.10.4.</D:propstat> <D:status>HTTP/1.1 200 OK</D:status> </D:response> </D:multistatus> 5.5. Full Lineage ResourcesMUSTSHOULD support the DAV:fulllineage report. This enumerates the full graph of revisions for this resource. Clients can request that a report be based on the namespace entry specified, or the associated DAV:vresourceid. Clients use the scope parameter to specify (name or id). Clients can specify the limit parameter to limit the number revisions returned. >>Request PROPFIND /foo/bar.htm HTTP/1.1 Host: www.foobar.comRevision-Id: VER:FHJRH3994Depth: 0 Content-Type: text/xml Content-Length: xxxx <?xml version="1.0" encoding="utf-8" ?> <D:propfind xmlns:D="DAV:"><D:enumreport type="DAV:fulllineage"<D:fulllineage scope="name"/> </D:propfind> >>Response ...<D:propfind><D:multistatus> <D:response> <D:href>http://www.foobar.com/foo/bar.htm</D:href> <D:propstat> <D:prop><D:enumreport type="DAV:fulllineage" scope="name"> <D:revision id="V1" vresourceid="VER:FFHJE"><D:revisionid>V1</D:revision> <D:vresourceid>VER:FFHJE</D:vresource> <D:revisioncomment>Updateit</D:revisioncomment> <D:revision id="V2" vresourceid="VER:FFHJE">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>Updateit</D:revisioncomment> <D:revisionlabel>Test1</D:revisionlabel> <D:revision id="V3" vresourceid="VER:FFHJE">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>Updateit</D:revisioncomment> <D:merge id="V2" vresourceid="VER:FFHJE"/> <D:merge id="V1.2" vresourceid="VER:FFHJE"/> </D:revision> <D:revision id="V1.1" vresourceid="VER:FFHJE" branchid="MyBranch"> <D:revisionlabel>Test2, Good</D:revisionlabel>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>Updateit</D:revisioncomment> <D:revision id="V1.2" vresourceid="VER:FFHJE" branchid="MyBranch"> <D:revisionlabel>Tested</D:revisionlabel>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>Updateit</D:revisioncomment> <D:merge id="V1.1" vresourceid="VER:FFHJE"/> <D:merge id="V1.1.1" vresourceid="VER:FFHJE"/> </D:revision> <D:revision id="V1.1.1" vresourceid="VER:FFHJE">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>Updateit</D:revisioncomment> </D:revision> </D:revision> </D:revision> </D:revision> </D:enumreport>it</D:comment> <D:derivedfrom>V1.1</D:derivedfrom> </D:prop></D:propfind> 3. CONFIGURATIONS</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 their versioned data. For this reason, configuration support is defined as part of this specification. Configuration management is a large space. This specification addresses several types of configurations: -Label:Dynamic: Alabeldynamic configuration is a collection of specific revisions of selected versionedresources. Changes to the versionedresourcesdo not effect the contents of the label configuration.based on selection rules. This can be used for labels, floating labels, etc. -Floating Label:Workspace: Afloating labelworkspace configuration is acollection of the defaultmechanism for tracking and managing parallel changes to multiple resources. Configurations provide a mechanism for organizing resources and quick access to specific revisions ofselected versionedresources.WhenClients can access resources in thedefault revisioncontext of aselected resource changes,configuration. By referencing a configuration, requests are automatically mapped to thecontentscorrect revision of thefloating label configuration is updated automatically. Note that when aversionedresource is addedresource. This allows configurations toa floating level configuration, the Branch-Id header canbespecified. In this case, the floating label will contain the tip revision the specified branch. - Workspace: A workspace configuration is a collection of multiple revisions of selected versioned resources. As the selected versioned resources are changed, in the context of the workspace configuration, the workspace tracks the version history. Configurations provideused as a reference mechanismfor organizing resources and quick access to specific revisions of resources. Clients can access resources in the context of a configuration. By referencing a configuration, requests are automatically mapped to the correct revision of the versioned resource. Note that servers provide a default workspace configuration. This is were all resources exist. Clients can request other workspace configurations to be created and have operations performed within their context if workspace configurations are supported.without breaking URL hyperlinks. A configuration can be derived from another configuration. That is, the new configuration is based on the versions in the "parent" configuration. Optionally, derived configurations can automatically inherit new versions in the parent configuration (assuming there are no conflicts). However, a configuration can be derived from at most one other configuration. Clients can specify configuration ids wherever a revision id can be specified. This requests that the default revision for the specified configuration be used. Requests that include both a revision id and a configuration id MUST fail if the specified revision is not part of the specified configuration.3.1.Typically both a revision id and a configuration id are not needed since the revision URI is unique across all configurations. 6.1. Discovery Configuration support is optional. This example shows that the /somefolder resource supports configurations. >> Request OPTIONS /somefolder/ HTTP/1.1Verify-Extension: DAV:versioningHost:foobar.comwww.foobar.com Content-Length:0xxx 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,PIN, MKREFMKREF, FREEZE, THAW, CHECKIN, CHECKOUT, UNCHECKOUT, BRANCH Public: OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, COPY, MOVE, MKCOL, PROPFIND, PROPPATCH, LOCK, UNLOCK,PIN, MKREF Verify-Extension: DAV:versioning Versioning-Support: DAV:basicversioning, DAV:configurations Configuration-Types: DAV:Label, DAV:Floating, DAV:Workspace Configuration-Root: /cfgs/MKREF, FREEZE, THAW, CHECKIN, CHECKOUT, UNCHECKOUT, BRANCH Versioning: DAV:basicversioning Content-Type: text/xml Content-Length:0 The Configuration-Types header in the OPTIONS reply indicates the types of configurations supported. Presence of this header indicates support for configurations. The BNF for this header is: Configuration-Types := "Configuration-Types" ":" Ctypes CTypes := CType | (CTypes "," CType) CType := "Label" | "Floating" | "Workspace" | URI The Configuration-Root header in the OPTIONS reply indicates the root of the configuration namespace. Note that there could be multiple configuration roots. The BNF for this headers is: Configuration-Root := "Configuration-Root" ":" URI-List 3.2.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 in a private portion of the namespace. The root of this namespace is determined by examining the OPTIONS extended reply. All configurations names MUST be unique on a server. Using the configuration namespace, clients can create and manage configurations. Clients create new configurations by issuing theMKCOLMKCONFIG method against the configuration namespace. This requests the server to create a new configuration. When a configuration is created, special tags can be used to define the characteristics and relationships (e.g. derivations) for the configuration. The following table enumerates these tags. Tag Description <DAV:configurationtype> This tag defines the typexxxof configuration:</DAV:configurationtype> DAV:Label, DAV:Floating,xxx DAV:Dynamic or </DAV:configurationtype> DAV:Workspace. <DAV:derivedfrom> This tag allows the clientxxx"xxx" to specify a URI to </DAV:derivedfrom> identify another configuration from which this new configuration is to be derived. <DAV:inheritancetype> The configurationDAV:Autoautomatically inherits</DAV:inheritancetype>DAV:Auto changes from its derived- </DAV:inheritancetype> from configuration. Conflicts are recorded in resolution queues (see later section). <DAV:inheritancetype> The configuration inheritsDAV:Manualchanges from its derived-</DAV:inheritancetype>DAV:Manual from configuration, but </DAV:inheritancetype> they are not automatically inserted into the configuration. Instead they are recorded in resolution queues (see Tag Description later section). <DAV:inheritancetype>The configuration is a DAV:Nonesnapshot of the current</DAV:inheritancetype>DAV:None versions in the derived- DAV:inheritancetype> from configuration. There The configuration is a is no inheritance of changes. This is the default type if no type is specified. <DAV:basetime>"xxx" The configuration is based </DAV:basetime> on the current versions in the derived-from configuration at the indicated time. Note that use of this tag is incompatible with DAV:Auto inheritance types and usage in this way MUST return an error. When a non-derived configuration is created, it contains no resources. Configurations that are derived from another configuration include the resources in the derived fromconfiguration.configuration at the specified time or using the default revisions. The example below illustrates creating a new configuration that is derived from, and auto-inherits another configuration. For this example, the root of the configuration namespace has been determined to be /cfgs. >>RequestMKCOLMKCONFIG /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: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: 03.3. Configuration Properties The standard PROPFIND and PROPPATCH methods can be used on the configuration resource to get and set properties on a configuration.6.3. Access Using Configurations ConfigurationsMUST provide configuration properties if configurationsaresupported. The following list identifies pre-defined propertiesmaintained as a special collection. Configurations maintain referential members to all revisions thatMUST be supported: DAV:configurationtype - The typeare part of the configuration.Configurations can chooseConsequently, one approach tomake this a read-only property. DAV:derivedfrom - The configuration from whichenumerating the contents of a configuration isderived. Configurations can choosetomake this a read-only property. DAV:inheritancetype - The typeuse PROPFIND to discover the contents ofinheritance fortheconfiguration. Configurationscollection. Alternatively, clients canchoose to make thisrequest aread-only property. DAV:basetime - The base time used to create the configuration. Configurations can choose to make thisspecific resource from aread-only property. DAV:configurationame - A user-defined display name for theconfiguration.DAV:defaultconfiguration -Thisproperty on the configuration root identifies the default workspace configurationapproach allows clients to useif onethe URL they are familiar with. If a client requests a resource that is notspecified. 3.4. Headerspart of a configuration, then an error is returned. >>Request GET /foo/bar.htm HTTP/1.1 Host: www.foobar.com Configuration-Id: /cfgs/DFEE2034 Content-Length: 0 6.4. Deleting Configurations Tosupport configurations, two new headers are introduced that can be used withdelete avariety ofconfiguration, use theDAV and HTTP methods. The following list identifies these headers: Configuration-Id - This header is used to identifylocation returned from the configurationthat is to be used when performing an operation. For workspace configurations, this can be specified to set default revisions per-configuration, enumeration of checkouts/checkins against a specific configuration, or to establish locks specific to a configuration. If a configuration is not specified, the default workspace configuration is used. All servers have a default workspace where resources reside. The configuration "*" can be specified with PROPFIND to locate properties irrespective of configuration. Configuration-Id := "Configuration-Id" ":" (URL | "*") Note that the configuration id can be used in place of a revision id. In this case, the revision selected is the default revision of the versioned resource within the specified configuration. Target-Configuration - This header is used to specify a target configuration when dealing with cross-configuration operations. For example, resources can be copied from one configuration to another using the Configuration-Id and Target-Configuration headers with the COPY method. Target-Configuration := "Target-Configuration" ":" URL 3.5. Deleting Configurations To delete a configuration, use the location returned from the configuration creation. Notecreation. 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: 03.6. Managing Configuration Content Clients need to6.5. Resolution Queues There are times when an operation cannot beable to access and manage the contents ofblocked that will result in aconfiguration. Thisstate that requires user action. For example, when configurations inherit, there isdone usingtheGET, COPY, and DELETE methods. 3.6.1. Access Using Configurations Configurations are maintained aspotential for conflicts. Resolution queues provide aspecial collection.mechanism for discovering these conditions. Configurations track and maintainreferential members to all revisions that are parta list ofthe configuration. Consequently, one approachissues that need toenumerating the contents of a configuration is to use PROPFIND to discover the contents of the collection. Alternatively, clients can request a specific resource from a configuration. This approach allows clients to use the URL they are familiar with. If a client requestsbe resolved as aresource that is not partresult ofa configuration, then an error is returned. >>Request GET /foo/bar.htm HTTP/1.1 Host: www.foobar.com Configuration-Id: /cfgs/DFEE2034 Version-Id: VER:JKGRKJ9094 Content-Length: 0 3.6.2. Adding Resources to a Configuration Resourcesactions. These lists areaddedreferred toa configuration usingas resolution queues. Clients can request theCOPY method. A special body tag is usedresolution issues and react accordingly. The configuration will continue toindicate thatreport theresourcecondition until it isbeing added toresolved. The resolution queue is obtained by obtaining the DAV:resolutionqueue property from the configuration. This property contains all of the identified issues. >>RequestCOPY /foo/bar.htmPROPFIND /cfgs/FDJE4949 HTTP/1.1 Host: www.foobar.comDepth: infinity Configuration-Id: /cfgs/DFEE2034 Target-Configuration: /cfgs/ERRJ3440Content-Type: text/xml Content-Length:xxxxxxxxx <?xml version="1.0" encoding="utf-8" ?><D:updateconfiguration xmlns:D="DAV:"/> If a specific revision is not specified, then the default revision is copied. Note that clients can also create referential members within the configuration collection to add them to the collection. 3.6.3. Removing Resources from<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> Once aConfiguration Resources areclient has resolved an issue it will automatically be removed froma configuration usingtheDELETE.resolution queue. 6.6. Configuration Properties Thetarget URI indicatesstandard PROPFIND and PROPPATCH methods can be used on the configuration resource todeleteget andthe Configuration- Id header to identify theset properties on a configuration. Configurations MUST provide configuration properties if configurations are supported. TheDepth header canfollowing list identifies pre-defined properties that MUST beused to remove collection contents. A special tag is used to indicate that the resource is being removed fromsupported: DAV:configurationtype - The type of theconfiguration (not deleted). >>Request DELETE /foo/bar.htm HTTP/1.1 Host: www.foobar.com Depth: infinity Configuration-Id: /cfgs/DFEE2034 Content-Type: text/xml Content-Length: xxxx <?xml version="1.0" encoding="utf-8" ?> <D:updateconfiguration xmlns:D="DAV:"/> Note that clientsconfiguration. Configurations canalso delete referential members within the configuration collectionchoose toremove themmake this a read-only property. DAV:derivedfrom - The configuration from which thecollection. 3.7. Workspaceconfiguration is derived. ConfigurationsWorkspace configurations provide the abilitycan choose totrack multiple revisions ofmake this aresource independent of the resource in other workspace configurations. This section describes aspectsread-only property. DAV:inheritancetype - The type of inheritance for theprotocol specific to workspace configurations. 3.7.1. Default Workspaceconfiguration. ConfigurationsClientscanestablish a default workspace configuration that ischoose tobe used, for all clients, if they do not specifymake this aworkspaceread-only property. DAV:basetime - The base time used to create the configuration.To do this, clients setConfigurations can choose to make this a read-only property. DAV:defaultconfiguration - This property on the configurationnamespacerootcollection identifyingidentifies the default workspaceconfiguration. >>Request PROPPATCH /cfgs/ HTTP/1.1 Host: www.foobar.com Content-Type: text/xml Content-Length: xxxx <?xml version="1.0" encoding="utf-8" ?> <D:propertyupdate xmlns:D="DAV:"> <D:set> <D:prop> <D:defaultconfiguration>/cfgs/RYURUS99009 </D:defaultconfiguration> </D:prop> </D:set> </D:propertyupdate> 3.7.2. Synchronizing Worksapce Configurations In some scenarios, clients are working on separate workspace configurations to keep themselves isolated from other team members. However, they occasionally need to synchronize their workspace configuration with the derived-from workspaceconfigurationso that they donÆt get too far outto use if one is not specified. DAV:resolutionqueue - A list ofsynchronization. As well, changes (or entire configurations)identified issues that require client attention. 6.7. Headers To support configurations, two new headers are introduced that can becopied from one workspace configuration to another. Both operations are performed usingused with a variety of theCOPY methodDAV andspecial body tags. Clients can requestHTTP methods. The following list identifies these headers: Configuration-Id - This header is used to identify the configuration that is to be used when performing an operation. For workspace configurations, this can be specified to set default revisions per-configuration, enumeration of checkouts/checkins against a specificresources are copied by including the resource tag.configuration, or to establish locks specific to a configuration. Ifno resources are specified, then all resources are copied. Note that configurations MAY fail requests that doa configuration is notfully synchronize. The example below showsspecified, thesynchronization of onedefault workspace configurationagainst another.is used. All servers have a default workspace where resourcesare synchronized. >>Request COPY /cfgs/DHFHR99392 HTTP/1.1 Host: www.foobar.com Destination: http://www.foobar.com/cfgs/RRURU329049 Content-Type: text/xml Content-Length: xxx <?xml version="1.0" encoding="utf-8" ?> <D:configurationsync xmlns:D="DAV:"/>reside. Theexample below shows the synchronization of oneconfigurationagainst another. The"*" can be specifiedresources are synchronizedwith PROPFIND to locate properties irrespective of configuration. Configuration-Id := "Configuration-Id" ":" (URL | "*") Note that theindicated time. >>Request COPY /cfgs/DHFHR99392 HTTP/1.1 Host: www.foobar.com Destination: http://www.foobar.com/cfgs/RRURU329049 Content-Type: text/xml Content-Length: xxx <?xml version="1.0" encoding="utf-8" ?> <D:configurationsync xmlns:D="DAV:"> <D:resource>/foo/bar.htm</resource> <D:resource>/bing/bop.htm</resource> <D:basetime>...</D:basetime> </D:configurationsync> A synchronization request could resultconfiguration id can be used inconflicts. By default, if conflicts exist,place of a revision id. In this case, thesynchronization fails andrevision selected is theconflicts are returned (as shown below). To override, clients should includedefault revision of the<DAV:override/> tag. This tag indicates thatversioned resource within thesynchronization should do as much as possible and return any conflicts. >>Response TBDspecified configuration. Target-Configuration -show failure response ... <D:multistatus> <D:response> <D:href> http://www.foobar.com/foo/bar.htm</D:href> <D:conflict> <D:conflictid>VER:DJHFH443</D:conflictid> <D:baseversion>VER:DJHFH443</D:baseversion> <D:newversion>VER:FDFEE55544</D:newversion> </D:conflict> <D:response> ... </D:multistatus> ... The sample response above shows that each conflict includes an ID and a reference to the resource in conflict. A configuration MAY choose to restrict operations until conflicts have been resolved. To inform the configuration that a conflict has been resolved, clients should include a Conflict-IDThis headeron PUT, PROPPATCH, etc. methods specifying the ID returned in the synchronization response. Conflict-ID := "Conflict-ID" ":" URI Itispermitted for serversused torefuse (fail) synchronization requests that do not originate at the root. That is, arbitrary resources. 3.7.3. Condensing Workspace Configurations Condensingspecify a target configurationmeans reducing the number of revisions in a configuration. That is, collapse the changes into a single revision. This is performed by extending the DELETE method. In the example below, all but the latest three versions are condensed into a single revision. >>Request DELETE /cfgs/BHFR59593 HTTP/1.1 Host: www.foobar.com Content-Type: text/xml Content-Length: xxxx <?xml version="1.0" encoding="utf-8" ?> <D:condense xmlns:D="DAV:"> <D:resource>/foo/bar.htm<D:keep>3</D:keep></D:resource> </D:condense> Note that the DAV:maxrevisions propertywhen dealing with cross-configuration operations. For example, resources can beusedcopied from one configuration toset the maximum number of revisions that are maintained for a versioned resource. If the DAV:revisionid header is specified,another using thecondensing startsConfiguration-Id and Target-Configuration headers with thespecified revision. This means that if a versioned resource has 10 revisions, revisions 3-6 can be condensed. Servers MUST fail this request if there are dependencies on revisionsCOPY method. Note thatwillresources CANNOT beeliminated. 3.8. Configuration ReportsMOVEd 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 styles of history and dependency. To enumerate the supported history graphs, clients use PROPFIND and the<DAV:enumreport><DAV:availablereports> property. The results indicate the different graphs andreportsreports, 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:propfind><D:multistatus> <D:response> <D:href>http://www.foobar.com/cfgs/FHJRH3994</D:href> <D:propstat> <D:prop> <D:enumreport><D:report><D:href>DAV:configurationderivation</D:href> </D:report> <D:report><D:href>DAV:configurationmerge</D:href></D:report><D:report>DAV:configurationderivation</D:report> <D:report>DAV:configurationmerge</D:report> </D:enumreport> </D:prop></D:propfind></D:propstat> <D:status>HTTP/1.1 200 OK</D:status> </D:response> </D:multistatus> ...Note thatWhen clients issue PROPFIND requests to obtain reports, they may include other properties in the request. These properties are returned for each reportstyles MUST be specified as DAV:href values. 3.8.1.item. 7.1. Configuration Derivation Configurations MUST support the DAV:configurationderivation report. This enumerates the full derivation of a configuraiton. Note that the limit parameter can be specified to limit the number of items returned. By definition the order of the configurations 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:enumreport type="DAV:configurationderivation"<D:configurationderivation limit=100/> </D:propfind> >>Response ...<D:propfind> <D:prop> <D:enumreport type="DAV:configurationderivation" limit=100> <D:configuration id="VER:KJFJ444"/> <D:configuration id="VER:KJFJ445"/> </D:enumreport> </D:prop> </D:propfind><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> ...3.8.2.7.2. Configuration Merge Graph Configurations SHOULD support the DAV:configurationmerge report. This enumerates the derivation 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:enumreport type="DAV:configurationmerge"/><D:configurationmerge/> </D:propfind> >>Response ...<D:propfind> <D:prop> <D:enumreport type="DAV:configurationmerge"> <D:revision id="V1" vresourceid="VER:FFHJE" configurationid="VER:FJJR344"> <D:revision id="V2" vresourceid="VER:FFHJE" configurationid="VER:FJJR344"> <D:revision id="V3" vresourceid="VER:FFHJE" configurationid="VER:FJJR344"> <D:merge id="V2" vresourceid="VER:FFHJE" configurationid="VER:FJJR344"/> <D:merge id="V1.2" vresourceid="VER:FFHJE" configurationid="VER:FJJR344"/> </D:revision> </D:revision> </D:revision> </D:enumreport> </D:prop> </D:propfind><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> ...3.9. Resolution Queues When8. DYNAMIC CONFIGURATIONS Dynamic configurationsinherit, there is the potential for conflicts. Configurations have the optionprovide a mechanism tohelp clients manage these conflicts. However, if they do not, then configurations MUST return an error ifidentify all revisions that match specific criteria. For example, "all revisions that have theoperation would result inlabel Beta1". The dynamic configuration is aconflict. Configurations that help resolve conflicts trackview onto the resources andmaintain listsis updated automatically as resources and revisions are created, deleted, and modified. All dynamic configurations support the DAV:rsrtypes property. This identifies the different styles ofissues that needdynamic configurations to beresolved assupported. This specification defines aresult of actions. These lists are referred to as resolution queues.single 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> Clientscan requestestablish a selection criteria by setting theresolution issues and react accordingly. Note thatDAV:selectionrule property. Once set, the dynamic configurationonly manages the list. That is, the client is responsible for resolvingcollection contains references to theissue (or deciding not to) and then removingmatching 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 groups theresolution item. 3.9.1. Discovery Resolution queue support is optional for configurations. Support for resolution queues is determined by examiningselection criteria that are used to populate theDAV:resolutionqueue property on adynamic configuration.If this propertyThe selection criteria isnot blank, then the configuration supports a resolution queue at thespecifiedURL. If this property is blank, then it doesnÆt support resolution queues. 3.9.2. Obtaining Resolutions Conflicts can arise against any resource, however, they are always associated withas aconfiguration. Pending resolutions items are obtained by examiningset of tags where nesting represents theresolution queue for a configuration.expressional ordering. Theresolution queue is actually a configuration-specific collection infollowing tags are available: - DAV:and - The included tags MUST all be true to select - DAV:or - Any of theDAV namespace.included tags MUST be true to select - DAV:not - The include tag should be inverted (logically) - DAV:href - Thecollectionresourceidentifying the resolution queue for a configuration is obtained via the DAV:resolutionqueue property on the configuration. To enumerateURL MUST be thepending resolutions, clients use PROPFIND to obtainincluded URL - DAV:label - A revision MUST have theresources withinspecified label - DAV:tip - The "tip" revision is selected - DAV:revisionid - The specified revision is selected - DAV:configurationid - The configuration MUST be thecollection. Each resource withinspecified value - DAV:branchid - The branch MUST be thecollection represents a separate resolution queue item and are named such thatspecified value - DAV:depth - Used with DAV:href to indicate astandard ANSI sort on the resource name will ensure correct temporal ordering. 3.9.3. Processing Resolution Items Clients can GET the contents ofrecursive match TBD - provide full DTD The following example illustrates aresolution item. This is an XML documentselection rule thatdescribesincludes all revisions in theaction/Foo/Bar folder (and below) thatcaused the resolution item to be created. For example:have been labeled as "Beta1". <?xml version="1.0" encoding="utf-8" ?><D:resolutionitem<D:basicrsr xmlns:D="DAV:"><D:resolutionid>http://foobar.com/reso/ZZZZ3493</D:resolutionid> <D:resource>http:/foo/bar.htm</D:resource> <D:newversion>DAV:FDFEE55544</D:newversion> </D:resolutionitem> Once<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 provides aclient has resolved an issue (or decidedmechanism for parallel changes toignore it), the clienta resource. A workspace configuration isresponsiblea mechanism forcanceling the resolution item. This is done using the DELETE method onparallel changes of multiple resources. For example, /MySite/ might contain all of theresolution item. >>Request DELETE http://foobar.com/reso/ZZZZ3493 HTTP/1.1 Host: www.foobar.com Content-Type: text/xml Content-Length: 0 3.10. Checkin Sets Clients may desireWeb pages for V1 of my companies e-commerce site. These have been put in theability to track a setV1 workspace. A team responsible for developing V2 ofchanges as a unit. That is,the site would create agrouping of related changes. Thisnew workspace configuration based on V1. The V2 workspace isachieved usingpopulated with theMKCOL method to createV1 versions, but these resources can be versioned independently. Essentially all resources have been "branched" in aspecial collection. Clientscoordinated fashion. Since this is a branch, both the V1 and the V2 revisions refer to thecheckin set on all checkin (or change) requests. The server automatically creates a "share"same versioned resource. This allows history and reports tothe newly created revision in the identified collection. 3.10.1. Discovery Servers may choosebe generated across workspaces. 9.1. Managing Configuration Content Clients need torestrict where checkin sets canbecreated inable to access and manage thenamespace. Clients can discover thiscontents of a configuration. This is done usingOPTIONS.several different DAV methods. TheCheckin-Sets-Root header identifies valid portions in the namespace. Each header (thereCOPY method can bemultiple specified) identifyused to copy aroot andspecific revision of adepth. The BNF forresource. However, thisheader is: Checkin-Sets-Root:= "Checkin-Sets-Root" ":" URL "," Depth Depth := "inifinity" | number Note that if a resourceÆs parentresults inthe namespace hasa new versioned resource being created. Resources are added to and removed from workspace configurations using the MKREF and DELREF methods definedcheckin set root,by theresource CANNOT defineDAV Advanced Collections Working Group. Note that direct references are required. Clients can obtain the contents of aseparate root for itself. This example shows howconfiguration using PROPFIND todiscoverenumerate thecheckin set root forhierarchy under the/somefolder resource. >> Request OPTIONS /somefolder/ HTTP/1.1 Verify-Extension: DAV:versioning 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, PIN, MKREF Public: OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, COPY, MOVE, MKCOL, PROPFIND, PROPPATCH, LOCK, UNLOCK, PIN, MKREF Verify-Extension: DAV:versioning Versioning-Support: DAV:basicversioning, DAV:configurations, DAV:checkinsets Checkin-Sets-Root: /, infinity Content-Length: 0 3.10.2. Usageconfiguation's collection. As well, as stated above, clients can use the Configuration-Id header as described previously. 9.2. Default Workspace Configurations Clientscreate checkin sets using MKCOL and specifycan establish aspecial body tag to indicatedefault workspace configuration thata checkin set collectionisbeing created.to be used, for all clients, if they do not specify a workspace configuration. To do this, use the SETDEFAULT method against the configuration root identifying the default configuration. >>RequestMKCOL /cs/244SETDEFAULT /cfgs/ HTTP/1.1 Host: www.foobar.com Content-Type: text/xml Content-Length:xxxxxxx <?xml version="1.0" encoding="utf-8" ?><D:checkinset xmlns:D="DAV:"/><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 desire the ability to track a set of changes as a unit. That is, create a grouping of related changes. This is achieved using the MKCHECKINSET method to create a special collection. Clients refer tothisthe checkin set on all checkin (or change) requests. The server automatically creates a "share" to the newly created revision in the identified collection. Checkin sets are specific to a configuration and are created using theCheckin-Set header.MKCHECKINSET method. TheBNFDAV:checkinsetroot property on a configuration specifies the URL of a collection where checkin sets for the configuration exist. This can be used for discovery or creation. If a configuration doesn't support checkin sets, then thisheader is as follows: Checkin-Set := "Checkin-Set" ":" URIproperty will be empty. Clients create checkin sets using MKCHECKINSET. The response includes the location of the new 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: 0 The following example illustrates use of checkin sets. >>RequestUNLOCKCHECKIN /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:unlockinfo><D:checkin> ...</D:unlockinfo></D:checkin> The following properties MUST be supported on all checkin set collections: DAV:closed - This is a true (1) / false (0) property that indicates if this checkin set can be referenced in CHECKIN requests. When a checkin set is created, this property is defaulted to 0. Note that resources MAY choose to disallow clients from setting this property to 0 once a client has set it to 1. The following properties MUST be supported on all resources: DAV:checkinid - This read-only property returns the checkin id associated with this revision of the resource.4.A checkin that references a checkin set MUST be made to the configuration associated with the checkin set. 11. VERSION MAPPING This specification defines headers to specify configurations and resource versions. However, there are times when clients require a single URI for when working against configurations or versions. Version mapping support allows servers to create namespaces that map to configurations and versions. Note that mappings are dynamic. That is, as resources are added, removed, and modified, the changes are reflected in any active maps.4.1.To delete a mapping, use DELETE against the URI specified in the MKMAP request. 11.1. DiscoveryVersion mappingMapping support isoptional.optional and support is discovered using OPTIONS to verify if the MKMAP method is supported. Using the request body and the DAV:verinfo tag, clients can obtain the supported map styles. This example shows that the /cfgs/DFEE2034 configuration supports mapping to the /map/ root in the namespace. >> Request OPTIONS /cfgs/DFEE2034 HTTP/1.1Verify-Extension: DAV:versioningHost: foobar.com Content-Type: text/xml Content-Length:0xxx <?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,PIN, MKREFMKREF, FREEZE, THAW, CHECKIN, CHECKOUT, UNCHECKOUT, BRANCH Public: OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, COPY, MOVE, MKCOL, PROPFIND, PROPPATCH, LOCK, UNLOCK,PIN, MKREF Verify-Extension:MKREF, FREEZE, THAW, CHECKIN, CHECKOUT, UNCHECKOUT, BRANCH Versioning: DAV:versioningVersioning-Support: DAV:basicversioning, DAV:mapping Mapping-Root: /map/ Mapping-Styles: DAV:detailedmap, DAV:branchmap, DAV:nestedbranchContent-Type: text/xml Content-Length:0 The BNF for this OPTIONS header is as follows: Mapping-Root := "Mapping-Root" ":" URL Mapping-Styles := "Mapping-Styles" ":" URL-List Note that multiple Mapping-Root headers is permitted. 4.2.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 TheMKCOLMKMAP method is used to create namespaces based on a configuration. When a configuration is mapped to a new namespace, all elements within the configuration can be directly accessed within the namespace without requiring the configuration to be identified in the header. In the example below, a new namespace is created for accessing the contents of the /cfgs/DFEE2034 configuration. >> RequestMKCOL /map/mymapMKMAP /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: 04.3.11.3. Mapping Resource Versions TheMKCOLMKMAP method is also used to create namespaces based on aresourceÆsresource's versions (i.e., its revision graph). When a resource is mapped, its revision history (revision graph) within the configuration is made available without requiring the Revision-Id header. Within the mapped namespace, a hierarchy is created for the revisions. However, there are different ways to map the history. Consider the following revision history of the versioned resource bar.htm: V1 -> V2 -> V3 (primary branch) | +-> V1.1 -> V1.2 ("test" branch) The following diagrams illustrate possible mappings: (DAV:detailedmap) (DAV:branchmap) (DAV:nestedbranchmap) V1 Primary Test Primary | | | | +----+--------+ V1 V1.1+------Test+------ 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 In the example below, a new namespace is created for accessing the versions of the /foo/bar.htm resource in the /cfgs/DFEE2034 configuration. >> RequestMKCOL /map/mymap2MKMAP /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 supportDAV:detailedmap, DAV:branchmap, or DAV:nestedbranchmap, they must mapMKMAP, then it MUST support DAV:detailedmap as illustrated above.5. MISCELLANEOUS FUNCTIONS The following sub-sections detail miscellaneous versioning functions. 5.1. Destroy Many version management systems use tombstones to note deleted items. These systems also support the ability to permanently destroy tombstones for an object. The DESTROY method provides this functionality and resources SHOULD support it, but resources are not required to implement it. Resources MUST return an error for DESTROY requests that are not honored. 5.1.1. Discovery Discovery of this feature is determined by seeing if the resource options include the DESTROY method. 5.1.2. Usage The DESTROY method is used against a specific resource to permanently remove it. This is a namespace level-operation. That is, all resources matching the specified URI are destroyed. >>Request DESTROY /foo/bar/x.cpp HTTP/1.1 Host: www.foobar.com Content-Type: text/xml Content-Length: xxxx Note that this request can be qualified by a configuration. Requests to DESTROY resources that are in use by other configurations MAY fail or delay the destruction until all references are removed. 5.1.3. Headers Clients may chose to display deleted but not destroyed objects however they choose. The header keyword Show-Deleted is used to indicate if deleted items should be included in the GET request. By default, they are not. Inclusion of "Show-Deleted: Y" indicates that deleted resources should be included. Using "Show-Deleted: O" indicates that only resources that have been deleted should be returned. Using "Show-Deleted: N" indicates that deleted resources shouldnÆt be returned. Show-Deleted := "Show-Deleted" ":" ("Y" | "N" | "O") 5.1.4. Properties DAV:isdeleted - A 0/1 property where 1 indicates that the resource has been deleted. 6.12. THE DAV VERSIONING GRAMMAR To be supplied - Describe and detail the DTDs7.13. INTERNATIONALIZATION CONSIDERATIONS To be supplied.8.14. SECURITY CONSIDERATIONS To be supplied.9.15. SCALABILITY To be supplied.10.16. AUTHENTICATION Authentication mechanisms defined in WebDAV will also apply to DAV Versioning.11.17. IANA CONSIDERATIONS This document uses the namespace defined by [WebDAV] for XML elements. All other IANA considerations mentioned in [WebDAV] also applicable to DAV Versioning.12.18. COPYRIGHT To be supplied.13.19. INTELLECTUAL PROPERTY To be supplied.14.20. REFERENCES [DAVVERREQ] TBD, "Requirements for DAV Versioning and Variant Authoring", October 1998, internet-draft, work-in-progress,draft-ietf-webdav- versionreqs-00.txtdraft- 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] Y. Goland, E.J. Whitehead, A. Faizi, S.R. Carter, D. Jenson, "Extensions for Distributed Authoring on the World Wide Web",OctoberApril. 1998, internet-draft, work-in-progress, draft-ietf-webdav-protocol-09.webdav-protocol-08. [White] E.J. Whitehead, "A Web Versioning Protocol", June 1998, internet-draft, work-in-progress, draft-whitehead-webdav- versioning-00.15.21. AUTHOR'S ADDRESSES Christopher Kaler, Editor Microsoft One Microsoft Way Redmond WA, 9085-6933 Email: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 MicroFocus Email: 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.eduTBD - list all members of the working group 16.22. 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 time format should we use? - Should PIN be a method or a property? -. What additional resource branching support is needed?-. Schema discovery is an issue. For example, how to discover/change mutable/immutable properties?-. There are several missing examples / replies that need to be specified.17.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.