INTERNET DRAFT E. J. Whitehead, Jr., UC Irvine Expires December, 1998 June 9, 1998 A Web Versioning Protocol 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 documents as Internet-Drafts. Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or made obsolete by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress". To learn the current status of any Internet-Draft, please check the "1id-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.ietf.org (US East Coast), or ftp.isi.edu (US West Coast). Distribution of this document is unlimited. Please send comments to the Distributed Authoring and Versioning (WEBDAV) working group at , which may be joined by sending a message with subject "subscribe" to . Discussions of the WEBDAV working group are archived at . Copyright Notice Copyright (C) The Internet Society (1998). All Rights Reserved. Abstract This document describes a set of methods, headers, and properties which extend the HTTP and WebDAV protocols to support versioning and variant authoring of Web resources. Operations are provided to support differencing two resources, applying a difference to a resource, checkin and checkout, along with creation, manipulation, and listing a version and variant history graph. draft-whitehead-webdav-versioning-00 [Page 1] INTERNET-DRAFT A Web Versioning Protocol June 9, 1998 Contents STATUS OF THIS MEMO...................................................1 COPYRIGHT NOTICE......................................................1 ABSTRACT..............................................................1 CONTENTS..............................................................2 1 INTRODUCTION .......................................................4 2 NOTATIONAL CONVENTIONS .............................................4 3 VGRAPH - VERSION AND VARIANT GRAPH .................................4 4 MAPPING A VGRAPH INTO A HTTP URL NAMESPACE .........................5 4.1 Vhandle and Vportal .............................................6 4.2 Example of Vhandle and Vportal ..................................6 4.3 An Example of Vhandle and Vportal for Only Variants .............8 4.4 Alternate Approaches Considered, But Not Followed ...............9 4.4.1 Client Controlled Versioning ................................9 4.4.2 Ordered Collections ........................................10 5 HTTP METHODS FOR VERSIONING AND VARIANT AUTHORING .................11 5.1 CREATE .........................................................11 5.1.1 Example - CREATE a Vhandle to Existing Vgraph ..............12 5.1.2 Example - CREATE a Vhandle and a new Vgraph ................12 5.1.3 Example - CREATE a Vhandle, Vportal, and Vgraph ............13 5.2 DIFF ...........................................................13 5.2.1 Example - DIFF of Two Unversioned text Resources ...........14 5.2.2 Example - DIFF of Two Versioned text Resources .............14 5.2.3 Example - DIFF of Two Unversioned image Resources ..........15 5.2.4 Example - DIFF between an image and text Resource ..........15 5.3 PATCH ..........................................................15 5.4 DEFSET .........................................................16 5.4.1 Example - DEFSET to an Exact Version Identifier ............16 5.4.2 Example - DEFSET to the Latest Version .....................17 5.5 GRAPHOP ........................................................17 5.5.1 Example - GRAPHOP to Create Arcs and Nodes .................18 5.6 GRAPHGET .......................................................20 5.7 CHECKOUT .......................................................20 5.7.1 Example - CHECKOUT .........................................21 5.8 CHECKIN ........................................................22 5.8.1 Example - CHECKIN ..........................................23 6 OPERATION OF EXISTING HTTP AND WEBDAV METHODS ON VHANDLE AND VPORTAL RESOURCES............................................................24 6.1 GET, HEAD ......................................................24 6.2 PUT ............................................................24 6.3 POST, TRACE ....................................................24 6.4 OPTIONS ........................................................24 6.5 DELETE .........................................................24 6.6 COPY ...........................................................24 6.7 MOVE ...........................................................24 draft-whitehead-webdav-versioning-00 [Page 2] INTERNET-DRAFT A Web Versioning Protocol June 9, 1998 6.8 PROPFIND/PROPPATCH .............................................25 6.9 LOCK/UNLOCK ....................................................25 6.10 MKCOL ..........................................................25 7 HTTP HEADERS FOR VERSIONING AND VARIANT AUTHORING .................25 7.1 Diff ...........................................................25 7.2 Videntifier ....................................................25 8 PROPERTIES ........................................................26 9 INTERNATIONALIZATION CONSIDERATIONS ...............................26 10 IANA CONSIDERATIONS .............................................26 11 SECURITY CONSIDERATIONS .........................................26 12 XML ELEMENT DEFINITIONS .........................................26 13 REFERENCES ......................................................26 14 AUTHOR'S ADDRESS ................................................27 draft-whitehead-webdav-versioning-00 [Page 3] INTERNET-DRAFT A Web Versioning Protocol June 9, 1998 1 Introduction Change is ubiquitous, nowhere more evident than in Web content. Whether to support collaborative authoring, tracking content deliveries, efficient retrieval of resources by requesting a delta, or retrieval of previous versions of a resource, versioning functionality is a key infrastructure for manipulating Web resources which change over time. In a global information system, one type of content does not suit all. People who use the Web typically prefer their content in a specific human language, character set, and media type. The Web currently supports retrieval of such resource variants via content negotiation, but provides limited support for authoring them. Variation and change are not orthogonal, since an abstract Web resource may have multiple versions, changing over time, and each version of the resource may have several variants, to satisfy many consumers. This document describes extensions to the WebDAV distributed authoring protocol [WebDAV], itself an extension of the HTTP 1.1 protocol [RFC2068], for manipulating versioned resources, variants of resources, and their combinations. 2 Notational Conventions Since this document describes a set of extensions to the HTTP/1.1 protocol, the augmented BNF used herein to describe protocol elements is exactly the same as described in section 2.1 of [RFC2068]. Since this augmented BNF uses the basic production rules provided in section 2.2 of [RFC2068], these rules apply to this document as well. The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC2119]. 3 Vgraph - Version and Variant Graph A Vgraph is a directed acyclic graph which models the versions and variants of one conceptual resource. A Vgraph consists of resources (nodes), and typed relationships (arcs). The "derived-from" relationship models a later resource as a revision of another resource. For example, a revision labeled "1.2" has a "derived-from" relationship to revision "1.1". The "variant-of" relationship models situations where one resource varies from another by human language, charset, media type, or content coding. A resource which is a German language variant has a "variant-of" relationship to the original English language resource. draft-whitehead-webdav-versioning-00 [Page 4] INTERNET-DRAFT A Web Versioning Protocol June 9, 1998 In this specification, every version and variant of a resource is itself a separate resource, with a separate URI. So, if there is a set of resources which are conceptually viewed as "hello.html", then versions 1 and 2 of hello.html would each have their own URIs, and the URI for version 1 would be different than the URI for version 2. If there was a German language variant of version 1 of hello.html, it would have a URI which is different than the URIs of English language versions 1 and 2 of hello.html. Nodes are referentially contained within a Vgraph, and are identified by their URI. Both nodes and arcs can have descriptive information associated with them, known as properties. Node descriptive information has a 1:1 correspondence with WebDAV properties, hence any property that can be retrieved from the Vgraph can be retrieved from a property on the resource, assuming the Vgraph and the resource are on the same server, and the resource supports WebDAV properties (e.g., an FTP resource would not). Relationships are binary only, corresponding directly to arcs in a graph. A Vgraph MUST have a globally unique identifier, which is a URI. No operations are supported on this URI by default (like a property name, it is just a unique identifier). Similarly, all elements of the Vgraph have globally unique identifiers; nodes are uniquely identified by their URI, and each arc MUST have a globally unique identifier, which is a URI. A Vgraph has sufficient expressiveness to represent version histories which span multiple servers, and can contain resources in multiple URI schemes. Since resources are not directly contained by a Vgraph, the same resource may participate in multiple Vgraphs. A Vgraph expresses derived-from and is-variant-of relationships between resources of any media type, and the media type may vary across resources in a Vgraph. 4 Mapping a Vgraph into a HTTP URL Namespace One of the siren calls for Web versioning is mandating a single mapping of a Vgraph into the HTTP URL namespace. A typical approach is to specify a convention for adding a version identifier to a URL, such as ",v{version id}". This approach has fatal drawbacks: - It adds semantics to URLs, making them non-opaque, and subject to namespace collisions with other such URL "munging" schemes. - It hard-codes derived-from relationships into version identifiers, limiting their expressiveness, for example, mandating "1.2" instead of "Jim's interim version". - Since a specific version's URL is constructed from a version identifier appended to a base URL, it requires all revisions of a draft-whitehead-webdav-versioning-00 [Page 5] INTERNET-DRAFT A Web Versioning Protocol June 9, 1998 resource to be located on the same server, and resources are limited to membership in just a single Vgraph. - The approach scales poorly for handling variants, since extra information must be added to the URL for representing variants of a specific version of a resource (e.g., ",v{version id},var{en,application/pdf}"). - It confuses the distinction between a single Web resource, and all of the resources contained within a Vgraph. A far more flexible approach is have no mapping of a Vgraph into the HTTP URL namespace, providing instead two abstractions, a Vhandle, and a Vportal. 4.1 Vhandle and Vportal A Vhandle is a location in the HTTP URL namespace which supports operations on one Vgraph. A Vhandle can be created anywhere in the HTTP URL namespace, and supports operations which manipulate the graph structure of its Vgraph. Operations such as checkout, checkin, add an arc, add a node, and retrieve graph contents are applied to a Vhandle. When a Vhandle is created, the Vgraph it operates upon is specified by the Vgraph's unique identifier. A Vportal is a location in the HTTP URL namespace which supports retrieval operations on one Vgraph. A Vportal can be created anywhere in the HTTP URL namespace. Operations such as retrieve a specific version, retrieve a specific variant (e.g., GET with Accept headers), set the default version/variant for unspecified retrieval (e.g. GET without content negotiation or a named version), and retrieving a difference between two versions are applied to a Vportal. When a Vportal is created, the Vgraph it operates upon is specified by the Vgraph's unique identifier. Any Vgraph MUST have at least 1 Vhandle, and MAY have more. There may be 0 or more Vportals for any Vgraph. While Vhandles and Vportals are distinct abstractions, a given URL MAY act as both a Vhandle and a Vportal simultaneously. 4.2 Example of Vhandle and Vportal In this example, there is a conceptual resource called "datasheet.html", which has three revisions where each revision has a Japanese language variant. The server which manages these resources, "www.specs.com", reserves an area of its HTTP namespace under "/vcache/" specifically for versions and variants of resources, and this area is separate from the area of its namespace, "/products/", where requests for information are made. This server has chosen a scheme where it assigns a unique numeric identifier to each version and variant of a resource, and so for draft-whitehead-webdav-versioning-00 [Page 6] INTERNET-DRAFT A Web Versioning Protocol June 9, 1998 this server version 1 of datasheet.html is located at "http://www.specs.com/vcache/52619.html" (52619 is a unique number generated by the server according to its server-specific naming scheme), version 2 is located at "http://www.specs.com/vcache/43687.html", and version 3 is located at "http://www.specs.com/vcache/68432.html". The Japanese language variant of version 1 of datasheet.html is located at "http://www.specs.com/vcache/59766.html", and the variants of versions 2 and 3 are located at "http://www.specs.com/vcache/12344.html" and "http://www.specs.com/vcache/87663.html". Like for versions 1 through 3, the server's specific naming policy for version and variants has been used to generate these names, and the semantics of the names are only meaningful to the server. The Vgraph has the unique URI, "vgraph:4A7F-52DE-5DFA29FE-12A0", and the following relationships: http://www.specs.com/vcache/68432.html derived-from http://www.specs.com/vcache/43687.html (That is, version 3 is derived from version 2.) http://www.specs.com/vcache/43687.html derived-from http://www.specs.com/vcache/52619.html (Version 2 is derived from version 1.) http://www.specs.com/vcache/59766.html is-variant-of http://www.specs.com/vcache/52619.html (The Japanese language variant of version 1.) http://www.specs.com/vcache/12344.html is-variant-of http://www.specs.com/vcache/43687.html (The Japanese language variant of version 2.) http://www.specs.com/vcache/87663.html is-variant-of http://www.specs.com/vcache/68432.html (The Japanese language variant of version 3.) There is one Vportal for this Vgraph, located at "http://www.specs.com/products/chips/6502". This Vportal has its default retrieval set to return version 3. The following HTTP 1.1 request: GET /products/chips/6502 HTTP/1.1 Host: www.specs.com Returns exactly the same entity as a GET (with no content negotiation) of http://www.specs.com/vcache/68432.html, i.e., it returns version 3. Adding language content negotiation to the request: draft-whitehead-webdav-versioning-00 [Page 7] INTERNET-DRAFT A Web Versioning Protocol June 9, 1998 GET /products/chips/6502 HTTP/1.1 Host: www.specs.com Accept-language: jp Returns exactly the same entity as a GET (with no content negotiation) of http://www.specs.com/vcache/87663.html, i.e., it returns the Japanese language variant of version 3. A specific version could be requested: GET /products/chips/6502 HTTP/1.1 Host: www.specs.com Videntifier: 2 This returns http://www.specs.com/vcache/43687.html, which is version 2. The Vgraph in this example has a single Vhandle, which has the same URL as the Vportal. 4.3 An Example of Vhandle and Vportal for Only Variants The example features a conceptual resource called "vino.html", located on server "http://www.vinomundial.com/", which is unversioned and has three language variants, German, French, and English, in addition to its Spanish source. This server uses the naming scheme of placing the language code of the variant in the URL. The Vgraph has the unique URI, "vgraph:6B9A-86BE-5EA47610-8876", and has the following relationships: http://www.vinomundial.com/vino.de.html is-variant-of http://www.vinomundial.com/vino.es.html (The German language variant is a variant of the Spanish language source.) http://www.vinomundial.com/vino.fr.html is-variant-of http://www.vinomundial.com/vino.es.html (The French language variant is a variant of the Spanish language source.) http://www.vinomundial.com/vino.en.html is-variant-of http://www.vinomundial.com/vino.es.html (The English language variant is a variant of the Spanish language source.) The Vportal for this Vgraph is located at http://www.vinomundial.com/vino.html, and is set so the default draft-whitehead-webdav-versioning-00 [Page 8] INTERNET-DRAFT A Web Versioning Protocol June 9, 1998 resource retrieved from this URL is the Spanish language variant, http://www.vinomundial.com/vino.es.html. An example retrieval with content negotiation from the portal URL is: GET /vino.html HTTP/1.1 Host: www.vinomundial.com Accept-language: de This returns the German language variant of the resource, i.e., the same entity returned by a GET without accept headers on http://www.vinomundial.com/vino.de.html. This site also maintains a German-only hierarchy at "http://www.vinomundial.com/de/" where all of the resources are in German. There is a second Vportal on the Vgraph located in this hierarchy, at "http://www.vinomundial.com/de/vino.html" This Vportal is set so the default resource retrieved from this URL is the German language variant, http://www.vinomundial.com/vino.de.html. This site also maintains a separate authoring section, at "http://www.vinomundial.com/authoring/", and the Vhandle for the Vgraph is located there, at "http://www.vinomundial.com/authoring/vino.html". Whereas the rest of the site is open to all requests, access to the authoring section of the site is protected using Digest authentication, and all access must be authenticated. 4.4 Alternate Approaches Considered, But Not Followed Two alternate approaches for mapping versioned resources into the HTTP URL space have been considered, but not used in this draft. However, a discussion of these alternate approaches, their strengths and deficiencies is useful to distinguish the approach presented here. 4.4.1 Client Controlled Versioning In this approach, the client controls the mapping of versioned resources into the HTTP URL space, and manages all versioning operations, as well as the consistency maintenance of the version/variant graph. The paper, "Version management with meta- level links via HTTP/1.1", by K. Ota, K. Takahashi, K. Sekiya (draft-http-ntt-version-00, expired, but available off http://www.ics.uci.edu/pub/ietf/webdav/), is an example of this approach. As an example of client controlled versioning, a checkout translates into operations to create a new resource, lock the resource, lock the predecessor, update the link information (stored in properties) draft-whitehead-webdav-versioning-00 [Page 9] INTERNET-DRAFT A Web Versioning Protocol June 9, 1998 on the predecessor to point to the checked-out resource, unlock the predecessor, add comment information to the new resource. Since the client is only using base WebDAV operations to perform the versioning, the server is completely unaware of any versioning -- all versioning semantics are provided by the client. The benefits of this approach are: 1) Versioning capability can be achieved with smarter clients working against WebDAV servers, so no new server technology is needed (except for programmatic access control). 2) Due to the flexibility of the approach, different versioning styles can easily be accommodated -- a new style requires a new client. However, interactions between versioning operation conventions for different versioning styles would need to be addressed. 3) Members of the version graph can be located anywhere in the HTTP URL space, and the version graph can span multiple HTTP servers, and could potentially span several protocols. There are several drawbacks to this approach: 1) The server is unable to provide consistency maintenance for the version graph. For example, if a client that is unaware of the versioning conventions deletes an intermediate member of a version graph, the graph will be inconsistent. 2) The server is unable to optimize the storage of versions by using delta-based compression mechanisms. 3) Since there is only one mapping of the members of the version graph into the HTTP URL hierarchy, it is difficult to provide a "retrieve default member" operation, e.g., a GET on URL XYZ always returns the most recent member of the version graph. 4) Either retrieval of the complete version graph is an expensive operation, requiring traversal of the graph, or the client is responsible for replicating is-derived-from links from the resource which contains the complete version graph, and to individual members of the version graph. Neither is desirable. 5) The technique does not handle versioning collections well. 4.4.2 Ordered Collections This technique linearizes the version graph, placing an order on the members of the graph, and then places all members of the version graph into a collection with this ordering. Limiting the graph to linear versioning simplifies this technique, since there then exists a simple temporal mapping of members of the version graph into the ordering maintained by the collection. Furthermore, in the linear versioning case, the version graph can be implicitly encoded into the ordering, and hence the server will automatically maintain the consistency of the version graph. draft-whitehead-webdav-versioning-00 [Page 10] INTERNET-DRAFT A Web Versioning Protocol June 9, 1998 So, using this technique, the versions of a resource called "hello.java" would be placed into an ordered collection called "hello.java", and the individual versions would be named following some naming convention, such as "hello.java,v1", "hello.java,v2", etc. So, to retrieve version 2 of hello.java, a GET would be performed on "hello.java/hello.java,v2". Retrieval of a default member of the collection is supported by creating a convention for the response of GET on the collection, e.g., a GET on "hello.java/" might always return the most recent member of the version graph/collection. A variation on this approach which uses non-ordered collections and permits non-linear version graphs is shown in the slide presentation at: . The benefits of this approach are: 1) A simple client can use the ordering characteristics of the collection to implicitly encode the version graph (linear versioning only). 2) The server will perform automatic consistency maintenance of the collection, hence version graph. 3) Supports retrieval of a default member of a collection. 4) Versioning can be supported by a simple client, and a relatively simple server. The drawbacks to this approach are: 1) If the version graph is implicitly stored in the ordering, it extends poorly to non-linear version graphs, or graphs which have variant relationships. 2) It extends poorly to versioning collections, that is, the technique only works for the leaves of a HTTP URL hierarchy. 3) A single resource cannot participate in multiple version graphs, (or conventions involving referential collection members must be created, with implications for consistency maintenance.) 4) Requires modifications to the existing HTTP URL hierarchy. Of these criticisms, the most telling is the inability to handle versioned collections, thus locking out a future mechanism for configuration management. 5 HTTP Methods for Versioning and Variant Authoring 5.1 CREATE The CREATE method is used to create a Vhandle, a Vportal, or a combination Vhandle and Vportal resource at the Request-URI. When CREATE is used to create a Vhandle, either the URI of an existing Vgraph MUST be given, or a new Vgraph will be created along with the Vhandle, and the Vhandle will point to the new Vgraph. draft-whitehead-webdav-versioning-00 [Page 11] INTERNET-DRAFT A Web Versioning Protocol June 9, 1998 5.1.1 Example - CREATE a Vhandle to Existing Vgraph CREATE /authoring/dav-handle HTTP/1.1 Host: www.ics.uci.edu Content-Length: xxx Content-Type: text/xml; charset="utf-8" vgraph:4A7F-52DE-5DFA29FE-12A0 HTTP/1.1 201 Created This example shows the creation of the Vhandle at URL http://www.ics.uci.edu/authoring/dav-handle/. This Vhandle permits operations on the Vgraph with the unique identifier, vgraph:4A7F- 52DE-5DFA29FE-12A0. 5.1.2 Example - CREATE a Vhandle and a new Vgraph CREATE /authoring/spec-handle HTTP/1.1 Host: www.ics.uci.edu Content-Length: xxx Content-Type: text/xml; charset="utf-8" HTTP/1.1 201 Created Content-Length: xxx Content-Type: text/xml; charset="utf-8" vgraph:5FDE-A43D-7865FDEA-7654 draft-whitehead-webdav-versioning-00 [Page 12] INTERNET-DRAFT A Web Versioning Protocol June 9, 1998 This example shows the creation of a new Vgraph, which has been assigned the unique name, vgraph:5FDE-A43D-7865FDEA-7654, and the creation of a new Vhandle for that Vgraph, at http://www.ics.uci.edu/authoring/spec-handle. 5.1.3 Example - CREATE a Vhandle, Vportal, and Vgraph CREATE /spec-sheets/widget.html HTTP/1.1 Host: www.prod.com Content-Length: xxx Content-Type: text/xml; charset="utf-8" HTTP/1.1 201 Created Content-Length: xxx Content-Type: text/xml; charset="utf-8" vgraph:A7D9-EAEA-54AFFDEA-7654 This example shows the creation of a new Vgraph, with the unique identifier, vgraph:A7D9-EAEA-54AFFDEA-7654, and a resource at http://www.prod.com/spec-sheets/wideget.html which simultaneously acts as both a Vhandle and a Vportal for the Vgraph. 5.2 DIFF The response from this method is the difference between two resources. Each of the two resources may be given as the URI of a non-versioned resource, or the URI of a Vportal resource combined with a version identifier. This supports differences between two arbitrary resources, two resources in the same Vgraph, resources from different Vgraphs, or between a versioned resource and a non- versioned resource. The first resource is specified by the Request-URI. If the Request- URI is the URL of a Vportal, then the version identifier of a draft-whitehead-webdav-versioning-00 [Page 13] INTERNET-DRAFT A Web Versioning Protocol June 9, 1998 specific member of the Vgraph may be specified with the Videntifier header. The second resource is specified by the Diff header. The entity response from DIFF represents the difference(s) between the two request resources. A server MAY return the difference in any format, however a server MUST minimally support the TBD difference format for all media types, and MUST perform Accept header processing of client diff format preferences. The server MUST minimally supply differences between two instances of the same media type, for all text media types encoded using the same charset. Ideally, servers will support differences between all media types, minimally providing an octet-level difference. The server SHOULD supply differences between different instances of the text media type, (e.g. text/html and text/xml), and MAY support differences between media types from different top-level trees. For example, supporting a difference between text/xml and application/xml is possible and meaningful, while a difference between text/xml and image/gif is not. *** Design Issue: which diff format should be required? 5.2.1 Example - DIFF of Two Unversioned text Resources DIFF /drafts/draft-01.txt HTTP/1.1 Host: www.npo.org Diff: HTTP/1.1 200 OK Content-type: zzz/dav-required-diff-format Content-length: xyx {.... diff entity here ...} In this example, two non-versioned resources, http://www.npo.org/drafts/draft-00.txt and http://www.npo.org/drafts/draft-01.txt, which are text/plain, charset="us-ascii", are differenced. Since the difference format is currently TBD, the exact difference between the two resources is not shown in this example. 5.2.2 Example - DIFF of Two Versioned text Resources DIFF /drafts/draft.txt HTTP/1.1 Videntifier: "1" Host: www.npo.org Diff: ; "0" draft-whitehead-webdav-versioning-00 [Page 14] INTERNET-DRAFT A Web Versioning Protocol June 9, 1998 HTTP/1.1 200 OK Content-type: zzz/dav-required-diff-format Content-length: xyx {... diff entity here ...} In this example, the URL http://www.npo.org/drafts/draft.txt identifies a Vportal, hence the two resources being differenced are the two members of the associated Vgraph with version identifiers "0" and "1". In this example, both resources are text/plain, charset="us-ascii". Since the difference format is currently TBD, the exact difference between the two resources is not shown in this example. 5.2.3 Example - DIFF of Two Unversioned image Resources DIFF /images/new-logo.gif HTTP/1.1 Host: www.corp.com Diff: HTTP/1.1 200 OK Content-type: zzz/dav-required-diff-format Content-length: xyx {... diff entity here ...} This example shows two non-versioned GIF images (image/gif) being compared, http://www.corp.com/images/new-logo.gif, and http://www.corp.com/iamges/old-logo.gif. 5.2.4 Example - DIFF between an image and text Resource DIFF /images/new-logo.gif HTTP/1.1 Host: www.corp.com Diff: ; "1.1" HTTP/1.1 409 Conflict This example shows two resources, one an unversioned GIF image at http://www.corp.com/images/new-logo.gif, the other a versioned HTML resource which has version "1.1" in the Vgraph associated with the Vportal http://www.corp.com/drafts/index.html. Since the server cann perform a diff between a text/html and an image/gif resource, it responds with a 409 Conflict status code. 5.3 PATCH draft-whitehead-webdav-versioning-00 [Page 15] INTERNET-DRAFT A Web Versioning Protocol June 9, 1998 The PATCH method is used to modify parts of the entity returned in the response to a GET method. The request entity of the PATCH method contains a list of differences between the resource identified by the Request-URI and the desired content of the resource after the PATCH action has been applied. The list of differences is in a format defined by the media type of the entity (e.g., "application/diff") and must include sufficient information to allow the server to convert the original version of the resource to the desired version. Processing performed by PATCH is atomic. Hence all changes MUST be successfully executed or the method fails. PATCH MUST fail executed on a non-existent resource; i.e., PATCH does not create a resource as a side effect. If the request appears (at least initially) to be acceptable, the server MUST transmit an interim 100 response message after receiving the empty line terminating the request headers and continue processing the request. Since the semantics of PATCH are non- idempotent, responses to this method are not cacheable. *** Design Issue: In what format should the patch be applied? There needs to be one patch format which all compliant applications must support. 5.4 DEFSET This method sets the default resource for the Vportal specified by the Request-URI. The default resource is specified by the Videntifier header, and identifies the resource which responds to HTTP GET and POST method invocations (without Accept headers) on the Vportal URI. 5.4.1 Example - DEFSET to an Exact Version Identifier DEFSET /drafts/pos-paper.html HTTP/1.1 Host: www.ics.uci.edu Videntifier: "1.3" HTTP/1.1 200 OK GET /drafts/pos-paper.html HTTP/1.1 Host: www.ics.uci.edu HTTP/1.1 200 OK Content-type: text/html Content-length: xyx { ... this is the entity body for version 1.3 of pos-paper.html ...} draft-whitehead-webdav-versioning-00 [Page 16] INTERNET-DRAFT A Web Versioning Protocol June 9, 1998 This example of DEFSET sets the default resource for the Vportal http://www.ics.uci.edu/drafts/pos-paper.html. The new default is version 1.3 of the Vgraph associated with the Vportal. The GET method invocation after the DEFSET shows that the Vportal http://www.ics.uci.edu/drafts/pos-paper.html will respond to a GET with no Accept headers by returning the entity body of the resource which is version 1.3 of the Vgraph associated with this Vportal. 5.4.2 Example - DEFSET to the Latest Version DEFSET /drafts/pos-paper.html HTTP/1.1 Host: www.ics.uci.edu Videntifier: latest HTTP/1.1 200 OK GET /drafts/pos-paper.html HTTP/1.1 Host: www.ics.uci.edu HTTP/1.1 200 OK Content-type: text/html Content-length: xyx { ... this is the entity body for the most recent member of the Vgraph associated with the Vportal http://www.ics.uci.edu/drafts/pos-paper.html ...} This example of DEFSET sets the default resource for the Vportal http://www.ics.uci.edu/drafts/pos-paper.html. The new default is the most recent member of the Vgraph associated with the Vportal. The GET method invocation after the DEFSET shows that the Vportal http://www.ics.uci.edu/drafts/pos-paper.html will respond to a GET with no Accept headers by returning the entity body of the resource which is the most recent member (of any branch) of the Vgraph associated with this Vportal. 5.5 GRAPHOP The GRAPHOP method processes instructions specified in the request body to add a node or remove a node or add an arc or remove an arc from the Vgraph associated with the Vhandle specified by the Request-URI. Instruction processing MUST occur in the order instructions are received (i.e., from top to bottom). Instructions MUST either all be executed, or none executed. Thus if any error occurs during processing all executed instructions MUST be undone and a proper error result returned. draft-whitehead-webdav-versioning-00 [Page 17] INTERNET-DRAFT A Web Versioning Protocol June 9, 1998 After all instruction processing has completed, the server MUST ensure the graph is consistent by removing all arcs which do not have a node at each endpoint, and all nodes which are not connected to at least one arc. *** Design issue: if an arc in the middle of a graph is removed, there could be multiple, disconnected graphs. Should these extra arcs be pruned? Since the Vgraph only contains nodes by-reference, and not by-value, if a node is removed from a Vgraph it does not imply the resource associated with that node is deleted. All servers MUST support the addarc and addnode processing instructions, and SHOULD support the delarc and delnode processing instructions. 5.5.1 Example - GRAPHOP to Create Arcs and Nodes GRAPHOP /project/src/Makefile HTTP/1.1 Host: www.code.com Content-type: text/xml; charset="utf-8" Content-length: xyx http://www.code.com/vcache/Makefile?v=1.0 http://www.code.com/vcache/Makefile?v=1.1 http://www.code.com/vcache/Makefile?v=1.2 http://www.code.com/vcache/Makefile?v=1.1 http://www.code.com/vcache/Makefile?v=1.0 http://www.code.com/vcache/Makefile?v=1.2 http://www.code.com/vcache/Makefile?v=1.1 HTTP/1.1 207 Multi-Status Content-Type: text/xml; charset="utf-8" Content-Length: zyz draft-whitehead-webdav-versioning-00 [Page 18] INTERNET-DRAFT A Web Versioning Protocol June 9, 1998 HTTP/1.1 200 OK http://www.code.com/vcache/Makefile?v=1.1 http://www.code.com/vcache/Makefile?v=1.0 arcid:4567-ae4f-78de54ad-6754 http://www.code.com/vcache/Makefile?v=1.2 http://www.code.com/vcache/Makefile?v=1.1 arcid:4567-de21-432156d8-ad31 HTTP/1.1 200 OK This example shows a Vgraph being populated with three nodes and two arcs. The following resources (which existed prior to the beginning of GRAPHOP processing) were successfully added to the Vgraph: http://www.code.com/vcache/Makefile?v=1.0 http://www.code.com/vcache/Makefile?v=1.1 http://www.code.com/vcache/Makefile?v=1.2 Two arcs were successfully added to the graph, and were assigned the following unique identifiers: http://www.code.com/vcache/Makefile?v=1.2 is-derived-from http://www.code.com/vcache/Makefile?v=1.1 unique identifier: arcid:4567-ae4f-78de54ad-6754 draft-whitehead-webdav-versioning-00 [Page 19] INTERNET-DRAFT A Web Versioning Protocol June 9, 1998 http://www.code.com/vcache/Makefile?v=1.1 is-derived-from http://www.code.com/vcache/Makefile?v=1.0 unique identifier: arcid:4567-de21-432156d8-ad31 Since the graph was consistent after adding these three nodes and two arcs, the server was not required to perform any additional processing to maintain the consistency of the Vgraph. 5.6 GRAPHGET The GRAPHGET method returns an entity body listing the contents of the Vgraph associated with the Vhandle specified by the Request-URI. *** Design issue: How should the Vgraph entity be returned? RDF is one solution, as is XML without RDF semantics. *** Design issue: should comment (arbitrary property) information be returned by GRAPHGET? 5.7 CHECKOUT The CHECKOUT method performs the following operations on the Vgraph associated with the Vportal at the Request-URI: 1) A new resource, known as the "working resource", is created at a location determined by the server. This resource is acted upon by authoring tools, accepting PUTs of intermediate and final results, and allowing properties to be read and set on it. 2) The initial contents of the working resource are identical to the resource whose version is given by the Videntifier header, if specified, or the default resource if not. 3) An "is-derived-from" relationship is added to the Vgraph between the working resource and the resource given by the Videntifier header, if specified, or the default resource if not. 4) The working resource is write locked, with the type of the write lock (exclusive or shared) determined by the server. By default, the lock SHOULD be an exclusive write lock. 5) Any check-out comments submitted in the request body are stored in the comments property on the working resource. 6) Access permissions MUST be set so the principal requesting the check-out has read and write permission to the working resource. All of these operations MUST be performed, or none are performed. Thus, if any error occurs during processing, all operations performed to that time MUST be undone and a proper error result returned. Since a lock is being created during normal CHECKOUT processing, the Timeout header (specified in [WebDAV]) MAY be submitted with a CHECKOUT method request, and is subject to normal Timeout header processing as described in [WebDAV]. draft-whitehead-webdav-versioning-00 [Page 20] INTERNET-DRAFT A Web Versioning Protocol June 9, 1998 *** Design Issue: What should be the behavior if the lock times out? *** Design Issue: Extending Checkout to work with Depth header to check out a collection hierarchy with one operation. A successful response to CHECKOUT will return a checkoutstat XML element which contains the URL of the working resource, and a lockdiscovery XML element that describes the lock created on the working resource. 5.7.1 Example - CHECKOUT >> Request CHECKOUT /reports/1998/q1.doc HTTP/1.1 Host: www.funcorp.com Content-type: text/xml; charset="utf-8" Content-length: xxyx Videntifier: "1.5" Timeout: Infinite Authorization: Digest username="craig.snider", realm="reports@www.funcorp.com", nonce="...", uri="/reports/1998/q1.doc", response="...", opaque="..." Checked-out to add new project expense numbers. Craig Snider >> Response HTTP/1.1 200 OK Content-Type: text/xml; charset="utf-8" Content-Length: zzyzx 0 Craig Snider Infinite draft-whitehead-webdav-versioning-00 [Page 21] INTERNET-DRAFT A Web Versioning Protocol June 9, 1998 opaquelocktoken:e5d7a3214-6da3-4432-5c39-fe98a34deaea http://www.mycorp.com/vcache/q1.doc?v1.6 This example shows a CHECKOUT being performed on the Vgraph associated with the Vportal at http://www.funcorp.com/reports/1998/q1.doc. The checkout was submitted with a Videntifier header of "1.5", meaning the checkout is occurring off of version 1.5 of q1.doc. A comment was submited with the checkout, giving rationale for the checkout operation, and owner information was also submitted for the lock created during checkout. A lock timeout value of "Infinite" was also requested, expressing a desire for a lock which never times out. The response from the CHECKOUT method lists the characteristics of the lock, and the location of the working resource. In this case, the lock is an exclusive write lock, that will never time out, and affects affects the working resource. The lock token for the lock is "opaquelocktoken:e5d7a3214-6da3-4432-5c39-fe98a34deaea", and the owner information from the request has been associated with the lock. The location of the working resource is "http://www.mycorp.com/vcache/q1.doc?v1.6". In this example, the nonce, response, and opaque fields have not been calculated in the Authorization request header. 5.8 CHECKIN The CHECKIN method performs the following operations on the Vgraph associated with the Vportal given by the Request-URI, and on the working resource specified in the request body. 1) The working resource is unlocked. 2) The access control for the working resource is set such that no principal has write access (i.e., it is frozen). 3) The server MAY set the version identifier for the working resource to the version identifier specified in the request body. All of these operations MUST be performed, or none are performed. Thus, if any error occurs during processing, all operations draft-whitehead-webdav-versioning-00 [Page 22] INTERNET-DRAFT A Web Versioning Protocol June 9, 1998 performed to that time MUST be undone and a proper error result returned. A valid CHECKIN request MUST include a Lock-Token header listing the lock token of the working resource's lock. 5.8.1 Example - CHECKIN >> Request CHECKIN /reports/1998/q1.doc HTTP/1.1 Host: www.funcorp.com Content-type: text/xml; charset="utf-8" Content-length: zxyzx Lock-Token: Authorization: Digest username="craig.snider", realm="reports@www.funcorp.com", nonce="...", uri="/reports/1998/q1.doc", response="...", opaque="..." Added project expense numbers, fixed Figure 5, made minor fixes from reviewer's feedback. http://www.mycorp.com/vcache/q1.doc?v1.6 Stable release 1 >> Response HTTP/1.1 200 OK Content-Type: text/xml; charset="utf-8" Content-Length: zxyzx Stable release 1 draft-whitehead-webdav-versioning-00 [Page 23] INTERNET-DRAFT A Web Versioning Protocol June 9, 1998 This example shows a CHECKIN method which checks-in the working resource "http://www.mycorp.com/vcache/q1.doc?v1.6" which is a member of the Vgraph associated with the Vportal http://www.funcorp.com/reports/1998/q1.doc. Comments have been submitted with the checkin, as has a suggested version identifier ("Stable release 1"). The response from CHECKIN gives the actual version identifier assigned by the server. In this case, the server accepted the version identifier submitted by the user agent. In this example, the nonce, response, and opaque fields have not been calculated in the Authorization request header. 6 Operation of Existing HTTP and WebDAV Methods on Vhandle and Vportal Resources [Ed note: This section needs to be fleshed-out. These are my initial views on how they should be defined.] 6.1 GET, HEAD GET and HEAD on a Vportal are redirected to the default member of the associated Vgraph. GET and HEAD on a Vhandle are not defined by this specification. 6.2 PUT PUT is not permitted to either a Vhandle or Vportal. 6.3 POST, TRACE Same as in RFC 2068. 6.4 OPTIONS Same as in RFC 2068 plus WebDAV extensions. 6.5 DELETE Operates on the Vhandle and Vportal. Deleting the last Vhandle to a Vgraph removes the Vgraph (and could leave dangling Vportals). 6.6 COPY Operates on the Vhandle and Vportal (i.e., duplicates the Vhandle or the Vportal in a new location in the namespace). 6.7 MOVE Operates on the Vhandle and Vportal (i.e., moves the Vhandle or the Vportal to a new location in the namespace). draft-whitehead-webdav-versioning-00 [Page 24] INTERNET-DRAFT A Web Versioning Protocol June 9, 1998 6.8 PROPFIND/PROPPATCH Operates on the properties of the Vhandle or the Vportal (i.e., both a Vhandle and a Vportal have properties for each instance). *** Design Issue: Since PROPFIND is used to list the members of a collection, if this approach is extended to handle versioned collections, there will need to be a way to pass the PROPFIND to the default member of the Vgraph for the versioned collection to afford a "list the members of the default member of the Vgraph for the versioned collection." 6.9 LOCK/UNLOCK A lock on a Vhandle affects the Vhandle and the Vgraph, but is not propagated to the individual members of the Vgraph (the reference is locked, not the actual resource). A lock on a Vportal affects only the Vportal, but not the Vgraph. 6.10 MKCOL Not allowed on a Vgraph or a Vportal. 7 HTTP Headers for Versioning and Variant Authoring 7.1 Diff Diff = "Diff" ":" Coded-url [";" version-id] ; Coded-url from Section 8.4 of [WebDAV] versiod-id = quoted-string The Diff header is used to specify one of the two URIs being differenced by the DIFF method. If the Coded-url is the URL of a Vportal, then the optional version-id specifies the version identifier of a specific member of the Vgraph. 7.2 Videntifier Videntifier = "Videntifier" ":" vspec vspec = version-id | "latest" [branch-id] branch-id = Coded-url If the Request URI is a Vportal, this header specifies a member of the Vgraph associated with that Vportal. The specification is either an exact version identifier, or the most recent member of the Vgraph ("latest"), or the most recent member of a branch of the Vgraph ("latest" along with a branch identifier URI). draft-whitehead-webdav-versioning-00 [Page 25] INTERNET-DRAFT A Web Versioning Protocol June 9, 1998 *** Design issue: Since version identifiers are human-readable fields, need to have i18n support. This implies that version identifiers should be marshalled in the request body. 8 Properties Need properties for comments, version graph info, and arcs leading to/from this node for all vgraphs the resource participates in (need to get root, default, pred., succ.) A Vportal and a Vhandle have properties associated with each instance of the Vportal or Vhandle. 9 Internationalization Considerations TBD. Fields in the protocol that are human-readable: - version identifier - comments submitted on checkout and checkin 10 IANA Considerations This protocol defines several new URI schemes: - vgraph:, for globally unique version graph identifiers - arcid:, for globally unique arc identifiers 11 Security Considerations TBD. 12 XML Element Definitions TBD. Some element definitions are reused from the WebDAV Distributed Authoring Protocol specification [WebDAV]. 13 References [RFC2068] R. Fielding, J. Gettys, J. Mogul, H. Frystyk, 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. Y. Goland, E. J. Whitehead, Jr., A. Faizi, S. R. Carter, D. Jensen, "Extensions for Distributed Authoring on the World Wide draft-whitehead-webdav-versioning-00 [Page 26] INTERNET-DRAFT A Web Versioning Protocol June 9, 1998 Web -- WEBDAV". Microsoft, U.C. Irvine, Netscape, Novell. Internet-draft, work-in-progress. 14 Author's Address E. James Whitehead, Jr. Dept. of Information and Computer Science University of California, Irvine Irvine, CA 92697-3425 Email: ejw@ics.uci.edu draft-whitehead-webdav-versioning-00 [Page 27]