Advanced Collections with Bindings

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