Internet Draft K. Ota, NTT K. Takahashi, NTT K. Sekiya, NTT Software Expires May 1997 November 06, 1996 Version management with meta-level links via HTTP/1.1 Status of 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 obsoleted by other documents at any time. It is inappropriate to use Internet- Drafts as reference material or to cite them other than as ``work in progress.'' 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), ds.internic.net (US East Coast), or ftp.isi.edu (US West Coast). Distribution of this document is unlimited. Please send comments to Kenji Ota, NTT (ota@nttlabs.com), Kenji Takahashi (kt@nttlabs.com), or Kazuchika Sekiya (sekiya@ntts.com). Abstract This draft describes version management of the resources with some extensions to HTTP/1.1. The main point of our approach is to use meta-level links, which is not an anchor of HTML format, but an attribute of the resource. So, the contents need not to be an HTML format. 1. Introduction Conventionally, most resources are linked each other with links described in HTML files. This mechanism is not useful in version management, because HTML files have to be edited in order to manipulate the links between the versions of a resource. This document describes a mechanism for version management of resources, which uses meta-level links. A meta-level link relates two resources outside the contents of resources. So, the contents need not to be an HTML format. This document also describes the classification of the PUT method. It is used for the server to distinguish between normal resources and versioned resources. The locking mechanism is also described. It prevents multiple clients from editing the same resource at one time. So, our policy of locking is similar to RCS. 2. Meta-level links A meta-level link, that is meta-information of resources, relates two resources outside the contents of resources. It is independent from the contents of resource. So, the content of the resource needs not to be HTML format. The draft specification of HTTP/1.1[1] specifies "Link:" header field in the appendices chapter. The LINK and UNLINK methods manipulate the meta-level links. These methods are also specified in the appendices chapter of HTTP/1.1 specification. If the GET or HEAD request sends to the server, the server returns the "Link:" header in the response. If the PUT request sends to the server with the "Link:" header, the server establishes the links between the resource specified by Request-URI and resources specified in the "Link:" header. The meta-level links can be used to manage the versions of the resources. The chapter 5 describes details of version management using this meta-level links. The meta-level links themselves are so generic as to used for other purposes than version management. For example, annotations to some web contents can be linked by using this. 3. Locking mechanism We propose LOCK/UNLOCK method for locking a resource. Locking a resource means that the server excludes the other requests for update to the same resource, in order to make sure that only one user can update a resource while the resource being locked. We also propose "X-Lock:" header field. It is assumed that the client and the server have some authentication functions. This document does not refer to it. 3.1. LOCK/UNLOCK The LOCK method requests that the server lock the resource identified by the Request-URI. The UNLOCK method requests that the server cancel the lock status of the resource identified by the Request-URI. Only the user who has locked a resource can request PUT, POST, LOCK or UNLOCK to it. Any users, however, can always request GET, HEAD and LINK. 3.2. X-Lock: header field The "X-Lock:" is a header in the server response that represents the information about locking status of a requested resource. When the client sends a GET, HEAD or LOCK request to the locked resource, the server returns the response including the "X-Lock:" header. Then, the client can show the information to the users. The followings are BNF and an example of this header. X-Lock = "X-Lock" ":" "user=" user_name ";" "date=" HTTP-date user_name = 1*8(ALPHA | DIGIT) ex. X-Lock: user="sekiya"; date="Thu, 15 Feb 1996 23:44:20 GMT" 4. Creation and modification of web resources via HTTP 4.1. "X-PUT-Class" header field We propose "X-PUT-Class" header field for the PUT method. It specifies a type of a resource when the resource is created. The server decides how to handle to the resource according to the value of its field. The strings of "File", "Mkdir" or "VersionedFile" are allowed as its value. The value of the header field is stored as an attribute of the resource. BNF is as follows, PUT-Class = "X-PUT-Class" : PUT_type PUT_type = ("File" | "Mkdir" | "VersionedFile") The meaning of each values is as follows. - "File" The resource specified by the Request-URI is created as a normal file. The PUT request to this type of resource requests that the server overwrite the contents with the new entity. - "VersionedFile" The resource specified by the Request-URI is created as a versioned file. The PUT request to this type of an existing resource means that the server creates a new version of resource with the received entity. - "Mkdir" The resource specified by the Request-URI is created as an identifier of a collection of resources, such a directory, that manages the name for some resources under it. 5. Versioning We have decided our naming scheme based on the following: (1) accessibility from existing browsers (e.g. Netscape) (2) easy manipulation in existing directory-based file systems (e.g. UNIX file system) (3) ability of representing "composite" versions (e.g. version 2 of composite resource that consists of version 5 of X, a component resource, and version 3 of Y, another component resource) 5.1. Naming Scheme A series of versions of a resource is identified by a unique directory name in a file system as a "representative" URL. Each version of a resource is placed under the directory and represented as follows: representative_URL "/" version_number For example, version 3 of "http://www.nttlabs.com/project1/x.html" is represented as follows: http://www.nttlabs.com/project1/x.html/3 The latest version is referred by the representative URL and specific version can be referred by the representative URL + "/version_number". (Figure 1.) In this way, users can access any version by existing browsers and easily manipulate it in existing file systems. 5.2. Versioning by using Link mechanism Each time a version of a resource has been revised, a new version is created and given a new URL based on the naming scheme described above. In the same time, the original and new versions are linked bidirectionally with meta-level links. A link named "new" is established from the original to new versions and a link named "old" is established from the new to original versions. For example, Figure 1. illustrates links between versions of a resource (http://host/some/resource). http://host/some/resource --------+ | ------------------------------------------------- | -------- | V /1 /2 /3 /4 +----------+ +----------+ +----------+ +----------+ |+--------+| |+--------+| |+--------+| |+--------+| || new ||-->|| new ||-->|| new ||-->|| new || || ||<--|| old ||<--|| old ||<--|| old || |+--------+| |+--------+| |+--------+| |+--------+| |+--------+| |+--------+| |+--------+| |+--------+| || || || || || || || || || || || || || || || || || || || || || || || || |+--------+| |+--------+| |+--------+| |+--------+| +----------+ +----------+ +----------+ +----------+ latest version Figure 1. Links between versions of a resource A particular version of a resource can be transmitted via HTTP by specified by the "Content-Version:" field of HTTP headers, or according to the naming scheme when using existing clients. The following is an example of two type of specifying some version of a certain resource. http://www.nttlabs.com/project1/x.html/3 or http://www.nttlabs.com/project1/x.html Content-Version: "3" 5.3. Examples of HTTP interactions 5.3.1. Create a new resource [request] PUT http://server/path/resource X-PUT-Class: VersionedFile (contents of initial version) [response] 201 Created http://server/path/resource Content-Version: "1" 5.3.2. Retrieve latest version [request] GET http://server/path/resource (Retreive the latest version automatically) [response] 200 OK Content-Version: "5" Link: ; rel="old" (contents of version 5) 5.3.3. Retrieve a particular version [request] GET http://server/path/resource Content-Version: "3" or GET http://server/path/resource/3 [response] 200 OK Content-Version: "3" Link: ; rel="old" Link: ; rel="new" (contents of version 3) 5.3.4. Update an existing (versioned) resource [request] PUT http://server/path/resource (changed contents) [response] 201 Created (Resource for new version are created, and establish links between created version and its new/old version) References [1] R. Fielding, J. Gettys, J. C. Mogul, H. Frystyk and T. Berners-Lee, "Hypertext Transfer Protocol -- HTTP/1.1," Internet Draft, Work in Progress, August 1996 [2] E. J. Whitehead, Jr., "Requirements on HTTP for Distributed Content Editing," Internet Draft, Work in Progress, September 1996 [3] T. Berners-Lee, L. Masinter, M. McCahill. "Uniform Resource Locators (URL)." RFC 1738, CERN, Xerox PARC, University of Minnesota, December 1994. Author Address Kenji Ota NTT Software Laboratories 250 Cambridge Avenue, #205 Palo Alto, CA 94306, USA Email: ota@nttlabs.com Kenji Takahashi NTT Multimedia Communications Laboratories 250 Cambridge Avenue, #205 Palo Alto, CA 94306, USA Email: kt@nttlabs.com Kazuchika Sekiya NTT Software Corporation 250 Cambridge Avenue, #205 Palo Alto, CA 94306, USA Email: sekiya@ntts.com