Draft: Universal Document Identifiers

Clifford Neuman (bcn@isi.edu)
Thu, 27 Feb 92 10:52:44 PST


Date: Thu, 27 Feb 92 10:52:44 PST
Message-Id: <9202271852.AA05956@tgo.isi.edu>
From: bcn@isi.edu (Clifford Neuman)
To: timbl@nxoc01.cern.ch
Cc: chi-arch@uccvms.bitnet, www-talk@nxoc01.cern.ch, wais-talk@think.com,
In-Reply-To: Tim Berners-Lee's message of Thu, 27 Feb 92 17:22:44 GMT+0100 <9202271622.AA09065@ nxoc01.cern.ch >
Subject: Draft: Universal Document Identifiers

I have glanced through your document on universal directory
identifiers, and you seem to have left out Prospero.

Prospero is a little different in that it does late binding of the
access method.  In particular, a Prospero link consists of two parts,
a host name, and a name of the object on that host.  The latter part
is usually a path name, but in reality, it can be any string,
including simply a unique ID.  Thus, a Prospero link might look like

TGO.ISI.EDU /a/b/c  or   GUM.ISI.EDU 27

A Prospero link has a few other fields as well, but perhaps less
important.  There is a type field for the hostname.  It indicates
whether the hostname is an Internet name or address, or perhaps some
other kind of name or address.  Only one type is presently supported
(INTERNET-D) though, and that type includes Internet host names or
addresses, with or without an optional Internet UDP port.

  examples: TGO.ISI.EDU, TGO.ISI.EDU(191), 128.9.224.123, or 128.9.224.123(191)

Only a single type is used for all four types of Internet addresses
since they are not syntactically ambiguous.

The name relative to the host is also typed.  Presently, the only type
supported is ASCII, but the type field is there just in case.

Three other fields are a version number, a unique ID, and a type.  The
meaning of the version number should be fairly obvious.  A version
number of 0 matches the most recent version.  At present, most objects
don't have version numbers, but I felt it was important to include in
in the link data.  The purpose of the unique ID is less obvious.  It
is there to provide a mechanism for detecting when an object has been
deleted and replaced with an object of the same name.  In some cases,
it might be important to note that the object being retrieved is not
the same as the one to which the original link was made.  I will talk
about the type field later since it is not what you might think.

So, that is a Prospero link.  Note, that it does not specify the
access method.  Binding to an access method is accomplished by sending
a message to the Prospero server at the address in the link, and
requesting the access method for the named object.  The response
includes a sequence of tokens, the first identifies the access method,
and the remainder identify the information specific to the access
method (beyond that which already is part of the link).  If you
understand the access method, then you also know how to interpret the
remaining tokens.

For example, a response indicating access by anonymous FTP might be

  ANONYMOUS-FTP /pub/pfs/guest/README BINARY

Note that the host name is not specified since the hostname from the
link is assumed.  If the host name were different than that in the
link, then it would be specified in the response.  The path is
specified, however, because the path to be passed to the FTP program
is different than that in the link (in this case, the link included
the prefix /homes/june/ftp.

Similar responses are supported for other methods, and a response
might include more than one access method, in which case the
application choose the method that best suits its needs.

Now, back to the type field.  One of the shortcomings of the approach
as described so far is that it requires a Prospero server to run on
the system storing the object to be referenced.  This shortcoming is
addressed by the external link.  The type field in a Prospero link
provides information on what can be done with the link.  The three
common types are FILE, DIRECTORY, and EXTERNAL.  The links described
above were of type FILE.  If a links type is directory, its contents
can be listed by contacting the Prospero server (i.e. the links in the
directory can be returned).  If a links type is EXTERNAL, it means
that the object should be accessed without contacting a Prospero
server to obtain the access method (usually because a Prospero server
is not running on the target site).  Instead, the access information
that would otherwise have been returned is encoded as part of the
type.  Thus for example the type of an external link to the file
mentioned above would be.

  EXTERNAL(AFTP,BINARY)

Note that for external links using the AFTP or FTP method, the name
field of the link contains the path name to be passed to FTP.  For
other access methods, the meaning of the field is defined by the
particular access method to be used.

Anyway, I hope this adequate explains the form of Prospero
identifiers, and I hope that you can fit it in to your proposed
format. 

	~ Cliff