- From: Geoffrey M. Clemm <gclemm@tantalum.atria.com>
- Date: Wed, 14 Apr 1999 16:35:56 -0400
- To: w3c-dist-auth@w3.org
This is an initial attempt at formalizing the "BIND" operation proposed by Jim Whitehead as an alternative to "direct references". This document is best read in conjunction with Jim's original "Proposal: BIND method" posting to this mailing list. In a followup message I will try to use these definitions to respond to the recent "forest of references" thread. Cheers, Geoff --------------------- - Advanced Collections and Bindings The state of an advanced collection includes a set of "bindings". A binding is an association of a name (a string) with a resource. A legal binding name must satisfy the constraints for a URL path segment, as defined by section 3.3 of RFC 2396. (Note: if the definition of "internal member name" is fixed in RFC 2518, we can just use that as the binding name). The bindings of a collection effectively enumerate the internal members of the collection. All operations that add or delete internal members of a collection modify the bindings of that collection. For example, suppose /path/ identifies collection resource R1, and /path/index.html does not identify a resource. Then: PUT http://host/path/index.html HTTP/1.1 creates a new resource, R2, and adds a binding in R1 of "index.html" with R2. - DELETE and MOVE of Advanced Collection Internal Members When a request-URI or Destination header URI identifies an internal member of an advanced collection, the request is usually applied to the resource identified by that URI. Three exceptions are DELETE, MOVE, and the new BIND method. For the request-URI of DELETE and MOVE, and for the Destination header URI of MOVE and BIND, the method is applied to the advanced collection itself. For example, suppose /path/ identifies a collection resource R1, R1 contains a binding of "index.html" with resource R2, /public/ identifies a collection resource R3, and R3 contains a binding of "test.html" with resource R4. Then: The request: DELETE http://host/public/test.html HTTP/1.1 modifies R3 by deleting the binding of "test.html" with R4. The request: MOVE http://host/path/index.html HTTP/1.1 Destination: http://host/public/foo.html logically deletes from R1 the binding of "index.html" with R2, and creates a new binding in R3 of "foo.html" with R2. If the binding with the existing resource cannot be made in the destination collection (such as when the destination collection is on another server), a server can achieve the effect of a MOVE by creating a new resource R5 which is a copy of R2, deleting the binding of "index.html" with R1, fixing up all other bindings with R1 to be bindings with R5, and then creating a new binding in R3 of "foo.html" with R4. With this approach, if the bindings cannot be fixed up, the MOVE request MUST fail. - The BIND method The new BIND method is provided to allow direct manipulation of bindings. In particular, BIND can be used to create a new binding to an existing resource, or to modify an existing binding (by associating it with a different resource). For example, suppose /path/ identifies a collection resource R1, R1 contains a binding of "index.html" with resource R2, /public/ identifies a collection resource R3, and R3 contains a binding of "test.html" with resource R4. Then the request: BIND http://host/path/index.html Destination: http://host/path/good-test.html will add to R3 a binding of "good-test.html" with R4. Note that this results in two bindings to the same resource in the same collection. Similarly, the request BIND http://host/path/index.html Destination: http://host/public/test.html will change R3 by deleting the binding of "test.html" with R4 and adding the binding of "test.html" with R2. - Bindings vs. URL-Mappings It is important to distinguish a "binding" provided by an advanced collection from a "URL-mapping" provided by a web server. In particular, a binding is the part of the state of an advanced collection that associates a a URL segment with a resource, while a URL-mapping is maintained by a server from a URL to the resource identified by that URL. The two concepts are intimately related in that bindings induce URL-mappings. In particular, if there is a URL-mapping from a URL to an advanced collection, then for each binding in that advanced collection, then for each binding in the collection, there is a URL-mapping from the URL extended by the binding name to the resource associated with the binding.
Received on Wednesday, 14 April 1999 16:35:59 UTC