<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<?rfc toc="yes"?>
<?rfc symrefs="yes"?>
<?rfc sortreferences="yes"?>
<rfc ipr="full2026" docName="draft-ietf-webdav-bindings-02">
	<front>
    	<title>WebDAV Bindings</title>
		<author initials="J." surname="Slein" fullname="J. Slein">
			<organization abbrev="Xerox">Xerox Corporation</organization>
			<address>
            	<postal>
            		<street>800 Phillips Road, 105-50C</street>
                	<city>Webster</city><region>NY</region><code>14580</code>
           		</postal>
				<email>jslein@crt.xerox.com</email>	
			</address>
		</author>
		<author initials="E.J." surname="Whitehead Jr." fullname="E. J. Whitehead Jr.">
			<organization abbrev="UC Irvine">Dept. of Information and Computer Science</organization>
			<address>
            	<postal>
                	<street />
            		<city>Irvine</city><region>CA</region><code>92697-3425</code>
           		</postal>
            	<email>ejw@ics.uci.edu</email>
          	</address>
		</author>
		<author initials="J." surname="Davis" fullname="J. Davis">
			<organization abbrev="CourseNet">CourseNet Systems</organization>
			<address>
            	<postal>
            		<street>170 Capp Street</street>
                	<city>San Francisco</city><region>CA</region><code>94110</code>
           		</postal>
	            <email>jrd3@alum.mit.edu</email>
           	</address>
		</author>
		<author initials="G." surname="Clemm" fullname="G. Clemm">
			<organization abbrev="Rational">Rational Software Corporation</organization>
			<address>
	    		<postal>
    	        	<street>20 Maguire Road</street>
        	        <city>Lexington</city><region>MA</region><code>02173-3104</code>
           		</postal>
            	<email>gclemm@rational.com</email>
			</address>
		</author>
		<author initials="C." surname="Fay" fullname="C. Fay">
			<organization abbrev="FileNet">FileNet Corporation</organization>
			<address>
            	<postal>
            		<street>3565 Harbor Boulevard</street>
					<city>Costa Mesa</city><region>CA</region><code>92626-1420</code>
           		</postal>
            	<email>cfay@filenet.com</email>
			</address>
        </author>
		<author initials="J." surname="Crawford" fullname="J. Crawford">
			<organization abbrev="IBM">IBM Research</organization>
            <address>
				<postal>
        	    	<street>P.O. Box 704</street>
            	    <city>Yorktown Heights</city><region>NY</region><code>10598</code>
           		</postal>
	            <email>ccjason@us.ibm.com</email>
           	</address>
		</author>
        <date month="December" year="1999" />
		<workgroup>WEBDAV Working Group</workgroup>
        <abstract><t>
This is one of a pair of specifications that extend the WebDAV 
Distributed Authoring Protocol to enable clients to create new access 
paths to existing resources.  The two protocol extensions have very 
different characteristics that make them useful for different sorts of 
applications.
        </t>
		<t>
The present specification defines bindings, and the BIND method for 
creating them.  Creating a new binding to a resource indirectly creates 
one or more new URIs mapped to that resource, which can then be used to 
access it.  Servers are required to insure the integrity of any bindings 
that they allow to be created.
        </t>
		<t>
The related specification, RFC xxxx, defines redirect reference 
resources.  A redirect reference resource is a resource whose default 
response is an HTTP/1.1 302 (Found) status code, redirecting the client 
to a different resource, the target resource.  A redirect reference 
makes it possible to access the target resource indirectly, through any 
URI mapped to the redirect reference resource.  There are no integrity 
guarantees associated with redirect reference resources.
        </t>
		<t>
Distribution of this document is unlimited. Please send comments to the 
Distributed Authoring and Versioning (WebDAV) working group at <eref target="mailto:w3c-dist-auth@w3.org">w3c-dist-auth@w3.org</eref>, which may be joined by sending a message with subject 
"subscribe" to <eref target="mailto:w3c-dist-auth-request@w3.org?subject=subscribe">w3c-dist-auth-request@w3.org</eref>.
		</t><t>
Discussions of the WEBDAV working group are archived at URL: 
<eref target="http://lists.w3.org/Archives/Public/w3c-dist-auth/">http://lists.w3.org/Archives/Public/w3c-dist-auth/</eref>.               
       	</t> 
</abstract>
	</front>

  <middle>


<section title="Notational Conventions">
<t>
Since this document describes a set of extensions to the WebDAV 
Distributed Authoring Protocol <xref target="WebDAV"/>, itself an extension to the 
HTTP/1.1 protocol, the augmented BNF used here to describe protocol 
elements is exactly the same as described in Section 2.1 of <xref target="HTTP"/>.  
</t>
<t>
Since this augmented BNF uses the basic production rules provided in 
Section 2.2 of <xref target="HTTP"/>, these rules apply to this document as well.
</t>
<t>
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 <xref target="RFC2119"/>.
</t>
</section>

<section title="Introduction">
<t>
This is one of a pair of specifications that extend the WebDAV 
Distributed Authoring Protocol to enable clients to create new access 
paths to existing resources.  This capability is useful for several 
reasons:
</t>
<t>
URIs of WebDAV-compliant resources are hierarchical and correspond to a 
hierarchy of collections in resource space.  The WebDAV Distributed 
Authoring Protocol makes it possible to organize these resources into 
hierarchies, placing them into groupings, known as collections, which 
are more easily browsed and manipulated than a single flat collection.  
However, hierarchies require categorization decisions that locate 
resources at a single location in the hierarchy, a drawback when a 
resource has multiple valid categories. For example, in a hierarchy of 
vehicle descriptions containing collections for cars and boats, a 
description of a combination car/boat vehicle could belong in either 
collection. Ideally, the description should be accessible from both. 
Allowing clients to create new URIs that access the existing resource 
lets them put that resource into multiple collections.
</t>
<t>
Hierarchies also make resource sharing more difficult, since resources 
that have utility across many collections are still forced into a single 
collection. For example, the mathematics department at one university 
might create a collection of information on fractals that contains 
bindings to some local resources, but also provides access to some 
resources at other universities.  For many reasons, it may be 
undesirable to make physical copies of the shared resources on the local 
server: to conserve disk space, to respect copyright constraints, or to 
make any changes in the shared resources visible automatically. Being 
able to create new access paths to existing resources in other 
collections or even on other servers is useful for this sort of case.
</t>
<t>
The BIND method defined here provides a mechanism for allowing clients 
to create alternative access paths to existing WebDAV resources. HTTP 
and WebDAV methods are able to work because there are mappings between 
URIs and resources.  A method is addressed to a URI, and the server 
follows the mapping from that URI to a resource, applying the method to 
that resource.  Multiple URIs may be mapped to the same resource, but 
until now there has been no way for clients to create additional URIs 
mapped to existing resources.  
</t>
<t>
BIND lets clients associate a new URI with an existing WebDAV resource, 
and this URI can then be used to submit requests to the resource.  Since 
URIs of WebDAV resources are hierarchical, and correspond to a hierarchy 
of collections in resource space, the BIND method also has the effect of 
adding the resource to a collection.  As new URIs are associated with 
the resource, it appears in additional collections.
</t>
<t>
The companion specification, RFC xxxx, defines redirect reference 
resources, a different mechanism for creating alternative access paths 
to existing resources.  A redirect reference is a resource in one 
collection whose purpose is to forward requests to another resource (its 
target), usually in a different collection.  In this way, it provides 
access to the target resource from another collection.  It redirects 
most requests to the target resource using the HTTP 302 (Moved 
Temporarily) status code, thereby providing a form of mediated access to 
the target resource.
</t>
<t>
Bindings and redirect reference resources have very different 
characteristics:
</t>
<t>
A BIND request does not create a new resource, but simply makes 
available a new URI for submitting requests to an existing resource.  
The new URI is indistinguishable from any other URI when submitting a 
request to a resource.  Only one round trip is needed to submit a 
request to the intended target.  Servers are required to enforce the 
integrity of the relationships between the new URIs and the resources 
associated with them.  Consequently, it may be very costly for servers 
to support BIND requests that cross server boundaries.
</t>
<t>
A redirect reference is a resource, and so can have properties of its 
own.  Properties of the redirect reference can contain such information 
as who created the reference, when, and why.  Since redirect references 
are implemented using HTTP 302 responses, it generally takes two round 
trips to submit a request to the intended resource.  Servers are not 
required to enforce the integrity of redirect references.  Redirect 
references work equally well for local resources and for resources that 
reside on a different server from the reference.
</t>
<t>
The remainder of this specification is organized as follows.  Section 3 
defines terminology used in the rest of the specification, while Section 
4 briefly overviews bindings.  Section 5 specifies the BIND method, used 
to create bindings.  Sections 6 through 9 discuss the relationships 
between bindings and other HTTP and WebDAV methods.  Sections 10 and 11 
define mechanisms for tracking bindings.  Sections 12 through 14 define 
the new status codes, properties, and XML elements needed to support 
bindings.  Section 15 discusses compliance and capability discovery.  
Security concerns, internationalization issues, and IANA considerations 
are described in Sections 16 through 18.  The remaining sections provide 
other supporting information.
</t>
</section>  

<section title="Terminology">
<t>
The terminology used here follows and extends that in the WebDAV 
Distributed Authoring Protocol specification <xref target="WebDAV"/>. Definitions of 
the terms resource, Uniform Resource Identifier (URI), and Uniform 
Resource Locator (URL) are provided in <xref target="URI" />.
</t>
<t>URI Mapping
  <list>
    <t>
     A relation between an absolute URI and a resource.  For an 
     absolute URI U and the resource it identifies R, the URI mapping 
     can be thought of as (U => R).  Since a resource can represent 
     items that are not network retrievable, as well as those that are, 
     it is possible for a resource to have zero, one, or many URI 
     mappings. Mapping a resource to an "http" scheme URL makes it 
     possible to submit HTTP protocol requests to the resource using 
     the URL.
    </t>
  </list>
</t>
<t>Path Segment
  <list>
    <t>
     Informally, the characters found between slashes ("/") in a URI.  
     Formally, as defined in section 3.3 of <xref target="URI" />.
    </t>
  </list>
</t>
<t>Binding
  <list>
    <t>
     A relation between a single path segment (in a collection) and a 
     resource.  A binding is part of the state of a collection.  If two 
     different collections contain a binding between the same path 
     segment and the same resource, these are two distinct bindings.  
     So for a collection C, a path segment S, and a resource R, the 
     binding can be thought of as C:(S -> R). Bindings create URI 
     mappings, and hence allow requests to be sent to a single resource 
     from multiple locations in a URI namespace.  For example, given 
    <list style="symbols">
      <t>collection C, accessible through the URI http://www.srv.com/coll/,</t> 
      <t>path segment S, equal to "foo.html", and</t> 
      <t>resource R,</t>
    </list>
     creating the binding C: (S -> R) makes it possible to use the URI 
     http://www.srv.com/coll/foo.html to access R.
    </t>
    <t>
     The following figure illustrates a more complex example of how 
     bindings create URI mappings.
    <figure anchor="fig.urimapping"><artwork>
                +-----------------------------+
                | root collection             |
                |-----------------------------|
                | bindings:                   |
                |                             |
                | Coll1   Coll2   Coll3       |
                |   |       |       \         |
                +---|-------|--------\--------+
                    |       |         \
                    |       |          \
          +-------------------+   +----------------------+
          | collection C1     |   | collection C2        |
          |-------------------|   |----------------------|
          | bindings:         |   | bindings:            |
          |                   |   |                      |
          | foo   bar         |   | foo                  |
          |  |     \          |   |  /                   |
          +--|------\---------+   +-/--------------------+
             |       \             /
             |        \           /
             |         \         /
             |          \       /
     +--------------+   +---------------+
     | resource R1  |   | resource R2   |
     +--------------+   +---------------+
    </artwork></figure>
     Since there are two bindings in the root collection, Coll1 and 
     Coll2, to collection C1, the single binding C1:(foo -> R1) between 
     foo and resource R1 in collection C1 creates two URI mappings, 
     /Coll1/foo and /Coll2/foo, to resource R1.  Each of these URI 
     mappings can be used to submit requests to R1.  The binding 
     C1:(bar -> R2) between bar and resource R2 in collection C1 and 
     the binding C2:(foo -> R2) between foo and resource R2 in 
     collection C2 create altogether 3 URI mappings to resource R2: 
     /Coll1/bar, /Coll2/bar, and /Coll3/foo.  All 3 URI mappings can be 
     used to submit requests to resource R2.         
    </t>
  </list>
</t>
<t>Collection
  <list>
    <t>
     A resource that contains, as part of its state, a set of bindings 
     that identify member resources.
    </t>
  </list>
</t>
<t>Internal Member URI
  <list>
    <t>
     Informally, the complete set of URLs by which a collection member 
     is known. Formally, the URI U of a URI mapping (U => R), created 
     by a binding that is contained in a collection. The following 
     figure illustrates the relationship between bindings and internal 
     member URIs in a collection:
    <figure anchor="fig.internal-member-URI"><artwork>
                +-----------------------------+
                | root collection             |
                |-----------------------------|
                | internal member URIs:       |
                |                             |
                | /Coll1/                     |
                | /Coll2/                     |
                | /Coll3/                     |
                |-----------------------------|
                | bindings:                   |
                |                             |
                | Coll1   Coll2   Coll3       |
                |   |       |       \         |
                +---|-------|--------\--------+
                    |       |         \
                    |       |          \
          +----------------------+   +----------------------+
          | collection C1        |   | collection C2        |
          |----------------------|   |----------------------|
          | internal member URIs:|   | internal member URIs:|
          |                      |   |                      |
          | /Coll1/foo           |   | /Coll3/foo           |
          | /Coll2/foo           |   |----------------------|
          | /Coll1/bar           |   | bindings:            |
          | /Coll2/bar           |   |                      |
          |----------------------|   | foo                  |
          | bindings:            |   |  /                   |
          |                      |   +-/--------------------+
          | foo   bar            |    /
          |  |     \             |   /
          +--|------\------------+  /
             |       \             /
             |        \           /
             |         \         /
             |          \       /
     +--------------+   +---------------+
     | resource R1  |   | resource R2   |
     +--------------+   +---------------+
    </artwork></figure>
     The URIs of all URI mappings created by a collection's bindings 
     are internal member URIs of the collection.
    </t>
    <t>
     However, for a given request, only the URIs from those URI 
     mappings that incorporate the Request-URI are treated as internal 
     member URIs. This is done to prevent large amounts of duplicate 
     information from being returned for operations on collections.  
     The problem would occur if a PROPFIND on a collection to which 
     there are multiple URI mappings returned information for every URI 
     mapping.
    </t>
    <t>
     For example, in <xref target="fig.internal-member-URI"/> above, if a PROPFIND request with "Depth 
     infinity" is submitted to collection C1 using the Request-URI 
     /Coll1/, only the URI mappings starting with the Request-URI would 
     be listed as internal member URIs.  The response would include 
     only /Coll1/ itself and the internal member URIs /Coll1/foo and 
     /Coll1/bar.  It would not include /Coll2/, /Coll2/foo, or 
     /Coll2/bar, even though the URI /Coll2/ does map to the 
     collection, and /Coll2/foo and /Coll2/bar are internal member URIs 
     of the collection.
    </t>
    <t>
     In <xref target="WebDAV"/>, a collection is defined as containing a list of 
     internal member URIs, where an internal member URI is the URI of 
     the collection, plus a single path segment.  This definition 
     combines the two concepts of binding and URI mapping that are 
     separated in this specification.  As a result, this specification 
     redefines a collection's state to be a set of bindings, and 
     redefines an internal member URI to be the URI of a URI mapping 
     derived from a binding. After this redefinition, an internal 
     member URI can be used when reading <xref target="WebDAV"/> without loss of 
     meaning. For purposes of interpretation, when <xref target="WebDAV"/> discusses a 
     collection "containing" an internal member URI, this should be 
     read as the collection containing a binding whose mapping to a URI 
     creates an internal member URI, in this sense "containing" the 
     internal member URI.  The authors of this specification anticipate 
     and recommend that future revisions of <xref target="WebDAV"/> perform a full 
     reconciliation of terms between these two specifications.
    </t>
  </list>
</t>

<section title="Rationale for Distinguishing Bindings from URI Mappings">
<t>
Consider again collection C1 in <xref target="fig.internal-member-URI"/>.  If we had only the notion of 
URI mappings, we would be forced to say that C1's membership was defined 
by the list of internal member URIs. If these URIs identify the 
membership, and are part of the state of the collection, then the act of 
making the collection available via a new URI has the effect of changing 
the collection's membership, hence changing the collection's state. This 
is undesirable, since ideally a collection's membership should remain 
the same, if suddenly a new URI can be used to access the collection. 
What is needed is a way to separate the final segment of a URI from the 
collection's URI contribution.
</t><t>
The notion of binding is introduced to separate the final segment of a 
URI from its parent collection's contribution. This done, a collection 
can be defined as containing a set of bindings, thus permitting new 
mappings to a collection without modifying its membership. We introduce 
the concept of URI mapping to combine together the collection's URI and 
a binding's segment to create a full URI that can be used in protocol 
requests.  Finally, the internal member URI, first defined in <xref target="WebDAV"/>, 
is redefined here to maintain backward compatibility with that 
specification.
</t>
</section>

</section>

<section title="Overview of Bindings">
<t>
Bindings are part of the state of a collection. In general, there is a 
one-to-many correspondence between a collection's bindings and its 
internal member URIs, as illustrated in <xref target="fig.internal-member-URI"/> above.  The URI segment 
associated with a resource by one of a collection's bindings is also the 
final segment of one or more of the collection's internal member URIs.  
The final segment of each internal member URI identifies one of the 
bindings that is part of the collection's state.
</t><t>
Bindings are not unique to advanced collections, although the BIND 
method for explicitly creating bindings is introduced here.  Existing 
methods that create resources, such as PUT, MOVE, COPY, and MKCOL, 
implicitly create bindings.  There is no difference between implicitly 
created bindings and bindings created with BIND.
</t><t>
The identity of a binding C:(S -> R) is determined by the URI segment 
(in its collection) and the resource that the binding associates.  If 
the resource goes out of existence (as a result of some out-of-band 
operation), the binding also goes out of existence.  If the URI segment 
comes to be associated with a different resource, the original binding 
ceases to exist and another binding is created.
</t><t>
It would be very undesirable if one binding could be destroyed as a side 
effect of operating on the resource through a different binding.  It is 
not acceptable for moving a resource through one binding to disrupt 
another binding, turning that binding into a dangling path segment.  Nor 
is it acceptable for a server, after removing one binding, to reclaim 
the system resources associated with its resource while other bindings 
to the resource remain.  Implementations MUST ensure the integrity of 
bindings.
</t>

</section>


<section title="BIND Method">

<section title="Overview of BIND">
<t>
The BIND method creates a new binding between the resource identified by 
the Request-URI and the final segment of the Destination header (minus 
any trailing slash).  This binding is added to the collection identified 
by the Destination header minus its trailing slash (if present) and 
final segment.  The Destination header is defined in Section 9.3 of 
<xref target="WebDAV"/>.
</t><t>
If a server cannot guarantee the binding behavior specified here, 
including the guarantee of the integrity of the binding, the BIND 
request MUST fail.
</t><t>
Note: It is especially difficult to maintain the integrity of cross-server
bindings.  Unless the server where the resource resides knows 
about all bindings on all servers to that resource, it may unwittingly 
destroy the resource or move it without notifying another server that 
manages a binding to the resource.  For example, if server A permits 
creation of a binding to a resource on server B, server A must notify 
server B about its binding and must have an agreement with B that B will 
not destroy the resource while A's binding exists.  Otherwise server B 
may receive a DELETE request that it thinks removes the last binding to 
the resource and destroy the resource while A's binding still exists. 
Status code 507 (Cross-server Binding Forbidden) is defined in Section 
12.2 for cases where servers must fail cross-server BIND requests 
because they cannot guarantee the integrity of cross-server bindings.
</t><t>
If the Destination header does not contain a path segment (i.e., it 
consists simply of a slash "/"), the BIND operation MUST fail and report 
a 400 (Bad Request) status code.  A binding consists of a (collection, 
segment, resource) triple, and the Destination header is required to 
specify the collection and segment of this triple.  
</t><t>
If the Destination header minus its final path segment does not identify 
a collection, the BIND operation MUST fail and report a 400 (Bad 
Request) status code.
</t><t>
Note: Section 5.1 of <xref target="WebDAV"/> defines a consistent namespace to be one 
such that "for every URL in the HTTP hierarchy there exists a collection 
that contains that URL as an internal member," but <xref target="WebDAV"/> does not 
require namespaces to be consistent.  There can exist URIs that map to 
resources, but do not depend on the existence of collections for the 
mapping.  For example, the URI http://www.svr.com/x/y.html may map to 
resource R even if the URI http://www.svr.com/x/ does not map to any 
resource.  This specification does not support the creation of such URI 
mappings.  The BIND method can be used only in consistent sections of a 
namespace.
</t><t>
After successful processing of a BIND request, it MUST be possible for 
clients to use the URI in the Destination header to submit requests to 
the resource identified by the Request-URI.
</t><t>
By default, if the Destination header identifies an existing binding, 
the new binding replaces the existing binding. This default binding 
replacement behavior can be overridden using the Overwrite header 
defined in Section 9.6 of <xref target="WebDAV"/>. 
</t>
</section>

<section title="Bindings to Collections">
<t>
Bindings to collections can result in loops.  If a server wants to 
prevent a loop from being created, it MAY fail the BIND request with a 
403 (Forbidden) status code.  If a server allows a loop to be created, 
it MUST detect the loop when processing "Depth: infinity" requests that 
encounter the loop.  It is sometimes possible to complete an operation 
in spite of the presence of a loop.  However, the 506 (Loop Detected) 
status code is defined in Section 12.1 for use in contexts where an 
operation is terminated because a loop was encountered.  
</t><t>
Creating a new binding to a collection makes each resource associated 
with a binding in that collection accessible via a new URI, and thus 
creates new URI mappings to those resources but no new bindings.
</t><t>
For example, suppose a new binding COLLX is created for collection C1 in 
the figure below.  It immediately becomes possible to access resource R1 
using the URI /COLLX/x.gif and to access resource R2 using the URI 
/COLLX/y.jpg, but no new bindings for these child resources were 
created.  This is because bindings are part of the state of a 
collection, and associate a URI that is relative to that collection with 
its target resource.  No change to the bindings in Collection C1 is 
needed to make its children accessible using /COLLX/x.gif and 
/COLLX/y.jpg.
</t>
<figure anchor="fig.3"><artwork>
+-------------------------+
| Root Collection         |
| (properties)            |
|  bindings:              |
|  coll1          COLLX   |
+-------------------------+
    |            /           
    |           / 
    |          / 
+------------------+   
| Collection C1    |   
| (properties)     |   
| bindings:        |
| x.gif     y.jpg  |   
+------------------+   
    |          \                
    |           \                
    |            \               
+-------------+   +-------------+
| Resource R1 |   | Resource R2 |
+-------------+   +-------------+ 
</artwork></figure>
</section>

<section title="URI Mappings Created by a BIND">
<t>
Suppose a BIND request causes a binding from "Binding-Name" to resource 
R to be added to a collection, C.  Then if C-MAP is the set of URI's 
that were mapped to C before the BIND request, then for each URI "C-URI" 
in C-MAP, the URI "C-URI/Binding-Name" is mapped to resource R following 
the BIND request.
</t><t>
Note that if R is a collection, additional URI mappings are created to 
the descendents of R.  Also note that if a binding is made in collection 
C to C itself (or to a parent of C), an infinite number of mappings is 
introduced.
</t>
</section>


<section title="Example: URI Mappings Created by a BIND">
<t>
For example, if a binding from "foo.html" to R is added to a collection 
C, and if the following URI's are mapped to C:
</t>
<figure><artwork>
   http://www.fuzz.com/A/1
   http://fuzz.com/A/one
</artwork></figure>
<t>
then the following new mappings to R are introduced:
</t>
<figure><artwork>
   http://www.fuzz.com/A/1/foo.html
   http://fuzz.com/A/one/foo.html
</artwork></figure>
<t>
If a binding from "myself" to C is then added to C, the following 
infinite number of additional mappings to C are introduced:
</t>
<figure><artwork>
   http://www.fuzz.com/A/1/myself
   http://www.fuzz.com/A/1/myself/myself
   ...
</artwork></figure>
<t>
and the following infinite number of additional mappings to R are 
introduced:
</t>
<figure><artwork>
   http://www.fuzz.com/A/1/myself/foo.html
   http://www.fuzz.com/A/1/myself/myself/foo.html
   ...
</artwork></figure>
</section>

<section title="BIND Status Codes">
<t>
201 (Created): The binding was successfully created.
</t><t>
400 (Bad Request): The client set an invalid value for the Destination 
header or Request-URI.
</t><t>
403 (Forbidden): This server has a policy that forbids creation of 
bindings that would result in loops.
</t><t>
412 (Precondition Failed): The Overwrite header is "F", and a binding 
already exists for the Destination header.
</t><t>
507 (Cross-Server Binding Forbidden): The server is unable to create the 
requested binding because it would bind a segment in a collection on one 
server to a resource on a different server.
</t>
</section>

<section title="Example: BIND">
<figure><preamble>
>> Request:
</preamble><artwork>
BIND /pub/i-d/draft-webdav-protocol-08.txt HTTP/1.1
Host: www.ics.uci.edu
Destination: http://www.ics.uci.edu/~whitehead/dav/spec08.txt
</artwork></figure>
<figure><preamble>
>> Response:
</preamble><artwork>
HTTP/1.1 201 Created
</artwork></figure>
<t>
The server created a new binding, associating "spec08.txt" with the 
resource identified by the URL "http://www.ics.uci.edu/pub/i-d/draft-
webdav-protocol-08.txt".  Clients can now use the URI in the Destination 
header, "http://www.ics.uci.edu/~whitehead/dav/spec08.txt", to submit 
requests to that resource.  As part of this operation, the server added 
the binding "spec08.txt" to collection /~whitehead/dav/.
</t>
</section>
</section>

<section title="DELETE and Bindings">
<t>
The DELETE method was originally defined in <xref target="HTTP"/>. This section 
redefines the behavior of DELETE in terms of bindings, an abstraction 
not available when writing <xref target="HTTP"/>. <xref target="HTTP"/> states that "the DELETE method 
requests that the origin server delete the resource identified by the 
Request-URI."  Because <xref target="HTTP"/> did not distinguish between bindings and 
resources, the intent of its definition of DELETE is unclear.  The 
definition presented here is a clarification of the definition in 
<xref target="HTTP"/>.
</t><t>
The DELETE method requests that the server remove the binding between 
the resource identified by the Request-URI and the binding name, the 
last path segment of the Request-URI. The binding MUST be removed from 
its parent collection, identified by the Request-URI minus its trailing 
slash (if present) and final segment. 
</t><t>
Once a resource is unreachable by any URI mapping, the server MAY 
reclaim system resources associated with that resource. If DELETE 
removes a binding to a resource, but there remain URI mappings to that 
resource, the server MUST NOT reclaim system resources associated with 
the resource.
</t><t>
Although <xref target="WebDAV"/> allows a DELETE to be a non-atomic operation, the 
DELETE operation defined here is atomic.  In particular, a DELETE on a 
hierarchy of resources is simply the removal of a binding to the 
collection identified by the Request-URI, and so is a single (and 
therefore atomic) operation. 
</t><t>
Section 8.6.1 of <xref target="WebDAV"/> states that during DELETE processing, a server 
"MUST remove any URI for the resource identified by the Request-URI from 
collections which contain it as a member."  Servers that support 
bindings MUST NOT follow this requirement.
</t>
</section>

<section title="COPY and Bindings">
<t>
As defined in Section 8.8 of <xref target="WebDAV"/>, COPY causes the resource 
identified by the Request-URI to be duplicated, and makes the new 
resource accessible using the URI specified in the Destination header.  
Upon successful completion of a COPY, a new binding is created between 
the last path segment of the Destination header, and the destination 
resource. The new binding is added to its parent collection, identified 
by the Destination header minus its trailing slash (if present) and 
final segment.
</t><t>
Figure 4 below shows an example: Suppose that a COPY is issued to URI 3 
for resource R (which is also mapped to URI 1 and URI 2), with the 
Destination header set to URIX.  After successful completion of the COPY 
operation, resource R is duplicated to create resource R', and a new 
binding has been created which creates at least the URI mapping between 
URIX and the new resource (although other URI mappings may also have 
been created).
</t>
<figure anchor="fig.4"><artwork>
 URI 1   URI 2    URI 3                             URIX
   |       |        |                                |
   |       |        |    &lt;---- URI Mappings ---->    |
   |       |        |                                |
+---------------------+                   +------------------------+
|     Resource R      |                   |     Resource R'        |
+---------------------+                   +------------------------+
</artwork></figure>
<t>
It might be thought that a COPY request with "Depth: 0" on a collection 
would duplicate its bindings, since bindings are part of the 
collection's state.  This is not the case, however.  The definition of 
Depth in <xref target="WebDAV"/> makes it clear that a "Depth: 0" request does not 
apply to a collection's members.  Consequently, a COPY with "Depth: 0" 
does not duplicate the bindings contained by the collection.
</t>
</section>

<section title="MOVE and Bindings">
<t>
The MOVE method has the effect of creating a new binding to a resource 
(at the Destination), and removing an existing binding (at the Request-
URI). The name of the new binding is the last path segment of the 
Destination header, and the new binding is added to its parent 
collection, identified by the Destination header minus its trailing 
slash (if present) and final segment.  
</t><t>
As an example, suppose that a MOVE is issued to URI 3 for resource R 
below (which is also mapped to URI 1 and URI 2), with the Destination 
header set to URIX.  After successful completion of the MOVE operation, 
a new binding has been created which creates at least the URI mapping 
between URIX and resource R (although other URI mappings may also have 
been created).  The binding corresponding to the final segment of URI 3 
has been removed, which also causes the URI mapping between URI 3 and R 
to be removed.
</t>
<figure anchor="fig.5"><artwork>
>> Before Request:

 URI 1   URI 2    URI 3
   |       |        |                                
   |       |        |      &lt;---- URI Mappings
   |       |        |
+---------------------+                   
|     Resource R      |
+---------------------+                   

>> After Request:

 URI 1   URI 2    URIX
   |       |        |                                
   |       |        |      &lt;---- URI Mappings
   |       |        |
+---------------------+                   
|     Resource R      |
+---------------------+                   
</artwork></figure>
<t>
Although <xref target="WebDAV"/> allows a MOVE on a collection to be a non-atomic 
operation, the MOVE operation defined here MUST be atomic.  Even when 
the Request-URI identifies a collection, the MOVE operation involves 
only removing one binding to that collection and adding another.  There 
are no operations on bindings to any of its children, so the case of 
MOVE on a collection is the same as the case of MOVE on a non-collection 
resource.  Both are atomic.
</t>
</section>

<section title="Bindings and Other Methods">
<t>
This section describes the interaction of bindings with those HTTP 
methods not yet explicitly discussed.  The semantics of the methods GET, 
HEAD, PUT, POST and OPTIONS are specified in <xref target="HTTP"/>.  The semantics of 
PROPFIND, PROPPATCH, and MKCOL are specified in <xref target="WebDAV"/>.
</t><t>
For these methods, no new complexities are introduced by allowing 
explicit creation of multiple bindings to the same resource.  When 
applied to static resources (that is, resources that are not CGI 
scripts, Active Server Pages, etc.), they obey the following rule: 
</t>
<t>
<list style="symbols">
<t>A method submitted through one URI mapping, on success, MUST produce 
  the same results as the same method, with the same headers and entity 
  body, submitted through any other URI mapping to the same resource.
</t>
</list>
</t>
<t>
When applied to dynamic resources, it is not possible to state any such 
rule.  For any method, a dynamic resource may be sensitive to the URI 
mapping used to access it.  The resource may produce different results 
depending upon which URI mapping was used to submit the request.
</t><t>
Nevertheless, servers MAY allow new bindings to dynamic resources to be 
created using BIND.
</t>
</section>

<section title="Determining Whether Two Bindings Are to the Same Resource">
<t>
It is useful to have some way of determining whether two bindings are to 
the same resource.  Two different resources might have identical 
contents and identical values for the properties defined in <xref target="WebDAV"/>.  
Although the DAV:bindings property defined in Section 13.1 provides this 
information, it is an optional property.
</t><t>
The REQUIRED DAV:resourceid property defined in Section 13.2 is a 
resource identifier, which MUST be unique across all resources for all 
time.  If the values of DAV:resourceid returned by PROPFIND requests 
through two bindings are identical, the client can be assured that the 
two bindings are to the same resource.
</t><t>
The DAV:resourceid property is created, and its value assigned, when the 
resource is created.  The value of DAV:resourceid MUST NOT be changed.  
Even after the resource is no longer accessible through any URI, that 
value MUST NOT be reassigned to another resource's DAV:resourceid 
property.
</t><t>
Any method that creates a new resource MUST assign a new, unique value 
to its DAV:resourceid property.  For example, a PUT that creates a new 
resource must assign a new, unique value to its DAV:resourceid property.  
A COPY, since it creates a new resource at the Destination URI, must 
assign a new, unique value to its DAV:resourceid property.
</t><t>
On the other hand, any method that affects an existing resource MUST NOT 
change the value of its DAV:resourceid property.  For example, a PUT 
that updates an existing resource must not change the value of its 
DAV:resourceid property.  A MOVE, since it does not create a new 
resource, but only changes the location of an existing resource, must 
not change the value of its DAV:resourceid property.
</t>

<section title="resourceid URI Scheme">
<t>
The value of DAV:resourceid is a URI and may use any URI scheme that 
guarantees the uniqueness of the value across all resources for all 
time.  The resourceid URI scheme defined here is an example of an 
acceptable URI scheme.
</t><t>
The resourceid URI scheme requires the use of the Universal Unique 
Identifier (UUID) mechanism, as described in <xref target="ISO-11578"/>.  UUID 
generators may choose between two methods of creating the identifiers.  
They can either generate a new UUID for every identifier they create or 
they can create a single UUID and then add extension characters.  If the 
second method is selected, then the program generating the extensions 
MUST guarantee that the same extension will never be used twice with the 
associated UUID.
</t><t>
resourceid-URI = "resourceid:" UUID [Extension] ; The UUID production is 
the string representation of a UUID, as defined in <xref target="ISO-11578"/>.  Note 
that white space (LWS) is not allowed between elements of this 
production.
</t><t>
Extension = path ; path is defined in Section 3.3 of <xref target="URI"/>.
</t>
</section>
</section>

<section title="Discovering the Bindings to a Resource">
<t>
An OPTIONAL DAV:bindings property on a resource provides a list of the 
bindings that associate URI segments with that resource.  If the 
DAV:bindings property exists on a given resource, it MUST contain a 
complete list of all bindings to that resource.  A PROPFIND requesting 
DAV:bindings MUST return only those bindings that the client is 
authorized to see.  By retrieving this property, a client can discover 
the bindings that point to the resource and the collections that contain 
bindings to the resource.  
</t><t>
Rationale: A number of scenarios require clients to navigate from a 
resource to the bindings that point to it, and to the collections that 
contain those bindings.  This capability is particularly important for 
Document Management Systems.  Their clients may need to determine, for 
any object in the DMS, what collections contain bindings to that object.  
This information can be used for upward navigation through a hierarchy 
or to discover related documents in other collections.
</t><t>
Risks: When deciding whether to support the DAV:bindings property, 
server implementers / administrators should balance the benefits it 
provides against the cost of maintaining the property and the security 
risks enumerated in Sections 16.4 and 16.5.
</t>
</section>

<section title="Status Codes">

<section title="506 Loop Detected">
<t>
The 506 (Loop Detected) status code indicates that the server terminated 
an operation because it encountered an infinite loop while processing a 
request with "Depth: infinity". 
</t><t>
When this status code is the top-level status code for the operation, it 
indicates that the entire operation failed.  
</t><t>
When this status code occurs inside a multistatus response, it indicates 
only that a loop is being terminated, but does not indicate failure of 
the operation as a whole.
</t><t>
For example, consider a PROPFIND request on the following collection:
</t>
<figure><artwork>
Coll-1 (bound to collection C)
	Foo (bound to resource R)
	Bar (bound to collection C)
</artwork></figure>
<figure><preamble>
>> Request:
</preamble><artwork>
PROPFIND /Coll-1/ HTTP/1.1
Host: www.somehost.com
Depth: infinity
Content-Type: text/xml; charset="utf-8"
Content-Length: xxx

&lt;?xml version="1.0" encoding="utf-8" ?>
&lt;D:propfind xmlns:D="DAV:">
   &lt;D:prop>
      &lt;D:displayname/>
   &lt;/D:prop>
&lt;/D:propfind>
</artwork></figure>
<figure><preamble>
>> Response:
</preamble><artwork>
HTTP/1.1 207 Multi-Status
Content-Type: text/xml; charset="utf-8"
Content-Length: xxx

&lt;?xml version="1.0" encoding="utf-8" ?>
&lt;D:multistatus xmlns:D="DAV:">
   &lt;D:response>
      &lt;D:href>http://www.somehost.com/Coll-1/&lt;/D:href>
      &lt;D:propstat>
         &lt;D:prop>
            &lt;D:displayname>Loop Demo&lt;/D:displayname>
         &lt;/D:prop>
         &lt;D:status>HTTP/1.1 200 OK&lt;/D:status>
      &lt;/D:propstat>
   &lt;/D:response>
   &lt;D:response>
      &lt;D:href>http://www.somehost.com/Coll-1/Foo&lt;/D:href>
      &lt;D:propstat>
         &lt;D:prop>
            &lt;D:displayname>Bird Inventory&lt;/D:displayname>
         &lt;&lt;/D:prop>
         &lt;D:status>HTTP/1.1 200 OK&lt;/D:status>
      &lt;/D:propstat>
   &lt;/D:response>
   &lt;D:response>
      &lt;D:href>http://www.somehost.com/Coll-1/Bar&lt;/D:href>
      &lt;D:propstat>
         &lt;D:prop>
            &lt;D:displayname/>
         &lt;/D:prop>
         &lt;D:status>HTTP/1.1 506 Loop Detected&lt;/D:status>
      &lt;/D:propstat>
   &lt;/D:response>
&lt;/D:multistatus>
</artwork></figure>
</section>

<section title="507 Cross-Server Binding Forbidden">
<t>
The server is unable to create the requested binding because it would 
bind a segment in a collection on one server to a resource on a 
different server.
</t>
</section>
</section>

<section title="Properties">

<section title="bindings Property">
<t>
<list style="hanging">
  <t hangText="Name:">bindings</t>
  <t hangText="Namespace:">DAV:</t>
  <t hangText="Purpose:">Enables clients to discover, for any resource, what bindings
            point to it and what collections contain those bindings.  
            This is an optional property.  If present on a given 
            resource, it is a read-only property, maintained by the 
            server, and contains a complete list of all bindings to that
            resource.</t>
  <t hangText="Value:">List of href / segment pairs for all of the bindings that 
            associate URI segments with the resource.  The href is an 
            absolute URI for one URI mapping of the collection 
            containing the binding.  Since there may be multiple URI 
            mappings for this collection, it is necessary to select one 
            (preferably the URI mapping contained in the Request-URI of 
            the BIND request) for use in the DAV:bindings property. The 
            segment is the URI segment that identifies the binding 
            within that collection.</t>
</list>
<figure><artwork>
&lt;!ELEMENT bindings ((href, segment)*)>
</artwork></figure>
</t>
</section>

<section title="resourceid Property">
<t>
<list style="hanging">
  <t hangText="Name:">resourceid</t>
  <t hangText="Namespace:">DAV:</t>
  <t hangText="Purpose:">Enables clients to determine whether two bindings are for       
            the same resource.</t>
  <t hangText="Value:">URI that is guaranteed unique across all resources for all 
            time.  It may be of the resourceid URI scheme   
            defined in Section 10.1 or any other URI scheme that 
            guarantees this uniqueness.</t>
</list>
<figure><artwork>
&lt;!ELEMENT resourceid (href)>
</artwork></figure>
</t>
</section>
</section>

<section title="XML Elements">
<section title="segment XML Element">
<t>
<list style="hanging">
  <t hangText="Name:">segment</t>
  <t hangText="Namespace:">DAV:</t>
  <t hangText="Purpose:">The segment that names a binding, used in the DAV:bindings 
            property.</t>
  <t hangText="Value:">segment  ; as defined in section 3.3 of <xref target="URI"/>.</t>
</list>
<figure><artwork>
&lt;!ELEMENT segment (#PCDATA)>
</artwork></figure>
</t>
</section>
</section>

<section title="Capability Discovery">
<t>
Sections 9.1 and 15 of <xref target="WebDAV"/> describe the use of compliance classes 
with the DAV header in responses to OPTIONS, to indicate which parts of 
the WebDAV Distributed Authoring protocol the resource supports. This 
specification defines an OPTIONAL extension to <xref target="WebDAV"/>.  It defines a 
new compliance class, called bindings, for use with the DAV header in 
responses to OPTIONS requests.  If a resource does support bindings, its 
response to an OPTIONS request may indicate that it does, by listing the 
new BIND method as one it supports, and by listing the new bindings 
compliance class in the DAV header.
</t><t>
When responding to an OPTIONS request, any type of resource can include 
bindings in the value of the DAV header.  Doing so indicates that the 
server permits a binding at the request URI.
</t>

<section title="Example: Discovery of Support for Bindings">
<figure><preamble>
>> Request:
</preamble><artwork>
OPTIONS /somecollection/someresource HTTP/1.1
HOST: somehost.org
</artwork></figure>
<figure><preamble>
>> Response:
</preamble><artwork>
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, BIND
Public: OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, COPY, MOVE, MKCOL, 
PROPFIND, PROPPATCH, LOCK, UNLOCK, BIND, MKREF, ORDERPATCH
DAV: 1, 2, bindings
</artwork></figure>
<t>
The DAV header in the response indicates that the resource 
/somecollection/someresource is level 1 and level 2 compliant, as 
defined in <xref target="WebDAV"/>.  In addition, /somecollection/someresource supports 
bindings.  The Allow header indicates that BIND requests can be 
submitted to /somecollection/someresource.  The Public header shows that 
other Request-URIs on the server support additional methods.
</t>
</section>
</section>


<section title="Security Considerations">
<t>
This section is provided to make WebDAV applications aware of the 
security implications of this protocol. 
</t><t>
All of the security considerations of HTTP/1.1 and the WebDAV 
Distributed Authoring Protocol specification also apply to this protocol 
specification.  In addition, bindings introduce several new security 
concerns and increase the risk of some existing threats.  These issues 
are detailed below.
</t>

<section title="Privacy Concerns">
<t>
In a context where cross-server bindings are supported, creating 
bindings on a trusted server may make it possible for a hostile agent to 
induce users to send private information to a target on a different 
server.
</t>
</section>

<section title="Redirect Loops">
<t>
Although redirect loops were already possible in HTTP 1.1, the 
introduction of the BIND method creates a new avenue for clients to 
create loops accidentally or maliciously.  If the binding and its target 
are on the same server, the server may be able to detect BIND requests 
that would create loops.  Servers are required to detect loops that are 
caused by bindings to collections during the processing of any requests 
with "Depth: infinity".
</t>
</section>

<section title="Bindings, and Denial of Service">
<t>
Denial of service attacks were already possible by posting URLs that 
were intended for limited use at heavily used Web sites.  The 
introduction of BIND creates a new avenue for similar denial of service 
attacks.  If cross-server bindings are supported, clients can now create 
bindings at heavily used sites to target locations that were not 
designed for heavy usage.
</t>
</section>

<section title="Private Locations May Be Revealed">
<t>
If the DAV:bindings property is maintained on a resource, the owners of 
the bindings risk revealing private locations.  The directory structures 
where bindings are located are available to anyone who has access to the 
DAV:bindings property on the resource.  Moving a binding may reveal its 
new location to anyone with access to DAV:bindings on its resource.
</t>
</section>

<section title="DAV:bindings and Denial of Service">
<t>
If the server maintains the DAV:bindings property in response to 
bindings created in other administrative domains, it is exposed to 
hostile attempts to make it devote resources to adding bindings to the 
list.
</t>
</section>
</section>

<section title="Internationalization Considerations">
<t>
This specification follows the practices of <xref target="WebDAV"/> in encoding all 
human-readable content using XML <xref target="XML"/> and in the treatment of names.  
Consequently, this specification complies with the IETF Character Set 
Policy <xref target="RFC2277"/>.
</t><t>
WebDAV applications MUST support the character set tagging, character 
set encoding, and the language tagging functionality of the XML 
specification.  This constraint ensures that the human-readable content 
of this specification complies with <xref target="RFC2277"/>.
</t><t>
As in <xref target="WebDAV"/>, names in this specification fall into three categories: 
names of protocol elements such as methods and headers, names of XML 
elements, and names of properties.  Naming of protocol elements follows 
the precedent of HTTP, using English names encoded in USASCII for 
methods and headers.  The names of XML elements used in this 
specification are English names encoded in UTF-8.
</t><t>
For error reporting, <xref target="WebDAV"/> follows the convention of HTTP/1.1 status 
codes, including with each status code a short, English description of 
the code (e.g., 423 Locked).  Internationalized applications will ignore 
this message, and display an appropriate message in the user's language 
and character set.
</t><t>
This specification introduces no new strings that are displayed to users 
as part of normal, error-free operation of the protocol.
</t><t>
For rationales for these decisions and advice for application 
implementors, see <xref target="WebDAV"/>.
</t>
</section>

<section title="IANA Considerations">
<t>
This document uses the namespaces defined by <xref target="WebDAV"/> for properties and 
XML elements.  All other IANA considerations mentioned in <xref target="WebDAV"/> also 
apply to this document.
</t><t>
In addition, this document defines the new resourceid URI Scheme in 
Section 10.1 and the new HTTP/1.1 status codes 506 and 507in Section 12.
</t>
</section>

<section title="Copyright">
<t>
To be supplied by the RFC Editor.
</t>
</section>

<section title="Intellectual Property">
<t>
To be supplied by the RFC Editor.
</t>
</section>

<section title="Acknowledgements">
<t>
This draft has benefited from thoughtful discussion by Jim Amsden, Peter 
Carlson, Steve Carter, Tyson Chihaya, Ken Coar, Ellis Cohen, Dan 
Connolly, Bruce Cragun, Spencer Dawkins, Mark Day, Rajiv Dulepet, David 
Durand, Roy Fielding, Yaron Goland, Fred Hitt, Alex Hopmann, James Hunt, 
Marcus Jager, Chris Kaler, Manoj Kasichainula, Rohit Khare, Daniel 
LaLiberte, Steve Martin, Larry Masinter, Jeff McAffer, Surendra Koduru 
Reddy, Max Rible, Sam Ruby, Bradley Sergeant, Nick Shelness, John 
Stracke, John Tigue, John Turner, Kevin Wiggen, and others.
</t>
</section>
</middle>

<back>
  <references>

<reference anchor='HTTP'>

<front>
<title abbrev='HTTP/1.1'>Hypertext Transfer Protocol -- HTTP/1.1</title>
<author initials='R.T.' surname='Fielding' fullname='Roy T. Fielding'>
<organization>University of California, Irvine, Information and Computer Science</organization>
<address>
<postal>
<street></street>
<city>Irvine</city>
<region>CA</region>
<code>92697-3425</code>
<country>US</country></postal>
<phone>+1 949 824 1715</phone>
<email>fielding@ics.uci.edu</email></address></author>
<author initials='J.' surname='Gettys' fullname='James Gettys'>
<organization>World Wide Web Consortium, MIT Laboratory for Computer Science</organization>
<address>
<postal>
<street>545 Technology Square</street>
<city>Cambridge</city>
<region>MA</region>
<code>02139</code>
<country>US</country></postal>
<phone></phone>
<facsimile>+1 617 258 8682</facsimile>
<email>jg@w3.org</email></address></author>
<author initials='J.C.' surname='Mogul' fullname='Jeffrey C. Mogul'>
<organization>Compaq Computer Corporation, Western Research Laboratory</organization>
<address>
<postal>
<street>250 University Avenue</street>
<city>Palo Alto</city>
<region>CA</region>
<code>94301</code>
<country>US</country></postal>
<phone></phone>
<email>mogul@wrl.dec.com</email></address></author>
<author initials='H.F.' surname='Nielsen' fullname='Henrik Frystyk Nielsen'>
<organization>World Wide Web Consortium, MIT Laboratory for Computer Science</organization>
<address>
<postal>
<street>545 Technology Square</street>
<city>Cambridge</city>
<region>MA</region>
<code>02139</code>
<country>US</country></postal>
<phone></phone>
<facsimile>+1 617 258 8682</facsimile>
<email>frystyk@w3.org</email></address></author>
<author initials='L.' surname='Masinter' fullname='Larry Masinter'>
<organization>Xerox Corporation</organization>
<address>
<postal>
<street>3333 Coyote Hill Road</street>
<city>Palo Alto</city>
<region>CA</region>
<code>94034</code>
<country>US</country></postal>
<phone></phone>
<email>masinter@parc.xerox.com</email></address></author>
<author initials='P.J.' surname='Leach' fullname='Paul J. Leach'>
<organization>Microsoft Corporation</organization>
<address>
<postal>
<street>1 Microsoft Way</street>
<city>Redmond</city>
<region>WA</region>
<code>98052</code>
<country>US</country></postal>
<phone></phone>
<email>paulle@microsoft.com</email></address></author>
<author initials='T.' surname='Berners-Lee' fullname='Tim Berners-Lee'>
<organization>World Wide Web Consortium, MIT Laboratory for Computer Science</organization>
<address>
<postal>
<street>545 Technology Square</street>
<city>Cambridge</city>
<region>MA</region>
<code>02139</code>
<country>US</country></postal>
<phone>+1 617 258 8682</phone>
<facsimile></facsimile>
<email>timbl@w3.org</email></address></author>
<date month='June' year='1999'></date>
<abstract>
<t>The Hypertext Transfer Protocol (HTTP) is an application-level protocol for distributed, collaborative, hypermedia information systems. It is a generic, stateless, protocol which can be used for many tasks beyond its use for hypertext, such as name servers and distributed object management systems, through extension of its request methods, error codes and headers. A feature of HTTP is the typing and negotiation of data representation, allowing systems to be built independently of the data being transferred.</t>
<t>HTTP has been in use by the World-Wide Web global information initiative since 1990. This specification defines the protocol referred to as "HTTP/1.1", and is an update to RFC 2068.</t></abstract></front>

<seriesInfo name='RFC' value='2616' />
</reference>

<reference anchor="ISO-11578">
<front>
<title abbrev="ISO 11578">ISO/IEC 11578:1996. Information technology - Open
                   Systems Interconnection - Remote Procedure Call
                   (RPC)</title>
<author>
<organization>International Organization for Standardization</organization>
<address><uri>http://www.iso.ch</uri></address>
</author>
<date year="1996" month="???"/>
</front>
</reference>

<reference anchor='RFC2119'>

<front>
<title abbrev='RFC Key Words'>Key words for use in RFCs to Indicate Requirement Levels</title>
<author initials='S.' surname='Bradner' fullname='Scott Bradner'>
<organization>Harvard University</organization>
<address>
<postal>
<street>1350 Mass. Ave.</street>
<street>Cambridge</street>
<street>MA 02138</street></postal>
<phone>- +1 617 495 3864</phone>
<email>-</email></address></author>
<date month='March' year='1997'></date>
<area>General</area>
<keyword>keyword</keyword>
<abstract>
<t>
   In many standards track documents several words are used to signify
   the requirements in the specification.  These words are often
   capitalized.  This document defines these words as they should be
   interpreted in IETF documents.  Authors who follow these guidelines
   should incorporate this phrase near the beginning of their document:

<list>
<t>
      The key words &quot;MUST&quot;, &quot;MUST NOT&quot;, &quot;REQUIRED&quot;, &quot;SHALL&quot;, &quot;SHALL
      NOT&quot;, &quot;SHOULD&quot;, &quot;SHOULD NOT&quot;, &quot;RECOMMENDED&quot;,  &quot;MAY&quot;, and
      &quot;OPTIONAL&quot; in this document are to be interpreted as described in
      RFC 2119.
</t></list></t>
<t>
   Note that the force of these words is modified by the requirement
   level of the document in which they are used.
</t></abstract></front>

<seriesInfo name='BCP' value='14' />
<seriesInfo name='RFC' value='2119' />
</reference>


<reference anchor='RFC2277'>

<front>
<title abbrev='Charset Policy'>IETF Policy on Character Sets and Languages</title>
<author initials='H.T.' surname='Alvestrand' fullname='Harald Tveit Alvestrand'>
<organization>UNINETT</organization>
<address>
<postal>
<street>P.O.Box 6883 Elgeseter</street>
<street>N-7002 TRONDHEIM</street>
<country>NORWAY</country></postal>
<phone>+47 73 59 70 94</phone>
<email>Harald.T.Alvestrand@uninett.no</email></address></author>
<date month='January' year='1998'></date>
<area>Applications</area>
<keyword>Internet Engineering Task Force</keyword>
<keyword>character encoding</keyword></front>

<seriesInfo name='BCP' value='18' />
<seriesInfo name='RFC' value='2277' />
</reference>


<reference anchor='URI'>

<front>
<title abbrev='URI Generic Syntax'>Uniform Resource Identifiers (URI): Generic Syntax</title>
<author initials='T.' surname='Berners-Lee' fullname='Tim Berners-Lee'>
<organization>World Wide Web Consortium</organization>
<address>
<postal>
<street>MIT Laboratory for Computer Science, NE43-356</street>
<street>545 Technology Square</street>
<city>Cambridge</city>
<region>MA</region>
<code>02139</code></postal>
<facsimile>+1(617)258-8682</facsimile>
<email>timbl@w3.org</email></address></author>
<author initials='R.T.' surname='Fielding' fullname='Roy T. Fielding'>
<organization>Department of Information and Computer Science</organization>
<address>
<postal>
<street>University of California, Irvine</street>
<city>Irvine</city>
<region>CA</region>
<code>92697-3425</code></postal>
<facsimile>+1(949)824-1715</facsimile>
<email>fielding@ics.uci.edu</email></address></author>
<author initials='L.' surname='Masinter' fullname='Larry Masinter'>
<organization>Xerox PARC</organization>
<address>
<postal>
<street>3333 Coyote Hill Road</street>
<city>Palo Alto</city>
<region>CA</region>
<code>94034</code></postal>
<facsimile>+1(415)812-4333</facsimile>
<email>masinter@parc.xerox.com</email></address></author>
<date month='August' year='1998'></date>
<area>Applications</area>
<keyword>uniform resource</keyword>
<keyword>URI</keyword>
<abstract>
<t>

   A Uniform Resource Identifier (URI) is a compact string of characters

   for identifying an abstract or physical resource.  This document

   defines the generic syntax of URI, including both absolute and

   relative forms, and guidelines for their use; it revises and replaces

   the generic definitions in RFC 1738 and RFC 1808.
</t>
<t>



   This document defines a grammar that is a superset of all valid URI,

   such that an implementation can parse the common components of a URI

   reference without knowing the scheme-specific requirements of every

   possible identifier type.  This document does not define a generative

   grammar for URI; that task will be performed by the individual

   specifications of each URI scheme.
</t></abstract>
<note title='IESG Note'>
<t>

   This paper describes a "superset" of operations that can be applied

   to URI.  It consists of both a grammar and a description of basic

   functionality for URI.  To understand what is a valid URI, both the

   grammar and the associated description have to be studied.  Some of

   the functionality described is not applicable to all URI schemes, and

   some operations are only possible when certain media types are

   retrieved using the URI, regardless of the scheme used.
</t></note></front>

<seriesInfo name='RFC' value='2396' />
</reference>

<reference anchor='WebDAV'>

<front>
<title>HTTP Extensions for Distributed Authoring -- WEBDAV</title>
<author initials='Y.' surname='Goland' fullname='Y. Goland'>
  <organization>Microsoft Corporation</organization>
  <address><email>yarong@microsoft.com</email></address>
</author>
<author initials="E." surname="Whitehead" fullname="E. J. Whitehead, Jr.">
  <organization abbrev="UC Irvine">Dept. Of Information and Computer Science, University of California, Irvine</organization>
	<address><email>ejw@ics.uci.edu</email></address>
</author>
<author initials="A." surname="Faizi" fullname="A. Faizi">
  <organization abbrev="Netscape">Netscape</organization>
  <address><email>asad@netscape.com</email></address>
</author>
<author initials="S.R." surname="Carter" fullname="S. R. Carter">
  <organization abbrev="Novell">Novell</organization>
  <address><email>srcarter@novell.com</email></address>
</author>
<author initials="D." surname="Jensen" fullname="D. Jensen">
  <organization abbrev="Novell">Novell</organization>
  <address><email>dcjensen@novell.com</email></address>
</author>
<date month='February' year='1999'></date></front>

<seriesInfo name='RFC' value='2518' />
</reference>

<reference anchor="XML" target="http://www.w3.org/TR/1998/REC-xml-19980210">
<front>
<title>Extensible Markup Language (XML) 1.0</title>
<author>
<organization abbrev="W3C">World Wide Web Consortium</organization>
<address>
<postal>
<street>MIT Laboratory for Computer Science</street>
<street>545 Technology Square</street>
<city>Cambridge</city> <region>MA</region> <code>02139</code>
<country>US</country>
</postal>
<phone>+ 1 617 253 2613</phone>
<facsimile>+ 1 617 258 5999</facsimile>
<email>timbl@w3.org</email>
<uri>http://www.w3c.org</uri>
</address>
</author>
<date month="February" year="1998" />
</front>
<seriesInfo name="W3C" value="XML" />
</reference>

  </references>
  
<section title="Extensions to the WebDAV Document Type Definition">
<figure><artwork>
&lt;!--============= XML Elements from Section 14 ================-->
&lt;!ELEMENT segment (#PCDATA)>
&lt;!--============= Property Elements from Section 13 ===========-->
&lt;!ELEMENT bindings ((href, segment)*)>
&lt;!ELEMENT resourceid (href)>
</artwork></figure>
</section>


  </back>

</rfc>


