notes on URI implementations

hotlist for 9704 38th IETF: URLs etc.

ietf-url mailing list by thread
Uniform Resource Names
ietf-url BOF
IETF URN Working Group Discussion Space
Uniform Resource Names (URN) Progress Report
Montreal IETF URN BOF Information Page
Search the URN mailing list archives with WAIS
Uniform Resource Identifiers
Davenport Group meeting of 19-21 February 1997
Cache Now!
Search the URN mailing list archives with WAIS



 + emphasis on reliability

LIFN: "fully specific" resource, ala TimBL's PUT constraint
 (also read-only?)

	should be able to compute a LIFN from an artifact
		with high probability that you'll compute
		the same thing as somebody else
		(e.g. MD5)

Can RCDS work with dynamic data? (e.g. computation services?)
Thinking about it:
dynamic data

SONAR: status? WG? whence?
Does RCDS rely on ubiquity of SONAR?

"In most cases, the resolution process is expected to cost one extra
long-distance round-trip (to an RCDS server), and one extra local
round-trip (to a SONAR server), as compared to the name-to-address
lookup for a URL."

assertions: zoiks! This is PICS!

"the server keeps a copy of the last request id and the last result of
any update call from a particular client."

	Yikes! In stable storage? That looks like a BIG database!
	How long does it keep this stuff for? Can it throw
	them away after 4 minutes (or some multiple of the
	maximum lifetime of an IP packet?)

	How are clients identified? What about multiple clients
	going through a shared proxy?

shared secret/MD5 authentication... hmm... probably good enough.

``A states that, as of time , the attribute named N of the resource
named U had value V, and that this value is expected to be valid until
time .''

	space of attribute names? values?

Any concept of "volumes" or "collections"? or must each file
at a mirror be registered individually?

fault tolerance via reduncancy: check. But what about consistency?

I don't grok this:

RCDS servers are associated (via the URI resolution process) with a
particular subset of URI-space; it is assumed that the official RCDS
servers for a resource are maintained or authorized by the owner of
that resource. The owner or an authorized party must therefore provide
permission and authentication credentials to a party before it can add
assertions, certificates, or locations to an RCDS database. This
provides a mechanism to ensure that only authorized catalog
information or replicas are listed in the official servers. Nothing
prevents an unauthorized third party from establishing its own RCDS
servers, but (barring attack of the resolution system) those servers
must be explicitly configured by the user - they will not be found by
a normal URI resolution process.

data model
"No particular data model is assumed," not true: it's flat
name-value pairs.

"The RCDS testbed servers are being used to keep track of
widely-mirrored network resources, including the Linux operating
system and related software, the Internet RFC and Internet-Drafts
repositories, the netlib software repository, and others. This
provides a means to test the use of RCDS with resources that have
large numbers of replicas."



The NAPTR key mechanism: a NID doesn't stand so much for
a "naming authority" in the institutional sense as
a "naming convention" in the syntactic sense: it's a
REGEXP rule for translating arbitrary names into
domain names. Cool!

*** on the netscape urn: hack.

trivial http

2.0 General Approach:

The general approach used to encode resolution service requests in THTTP
is quite simple: 

    GET /uri-res/?  HTTP/1.0

For example, if we have the URN "urn:foo:12345-54321" and want a URL,
we would send the request:

    GET /uri-res/N2L?urn:foo:12345-54321 HTTP/1.0

3.5  N2C (URN to URC):

URCs (Uniform Resource Characteristics) are descriptions of other
resources. This request allows us to obtain a description of the
resource identified by a URN, as opposed to the resource itself.
The description might be a bibliographic citation, a digital signature,
a revision history, etc. This draft does not specify the content of
any response to a URC request. That content is expected to vary from
one resolver to another.

The format of any response to a N2C request MUST be communicated using the
ContentType header, as is standard HTTP practice. The Accept: header
SHOULD be honored.

Sample Query 

(For more complex queries and responses, see Appendix B.) 

Imagine a rating service, identified by the URL, which decides to run a label bureau to
dispense (at least) its own labels for documents. The following sample
request, made to the HTTP server, is illustrative (line
breaks are inserted for presentation purposes only):

GET /Ratings?opt=generic&

URN syntax

on case insensitivity: rather, specify the canonical
case, and deprecate the other.

URI data model:
	mailto: stuff

interface Resource{ /* Anchor? WebSpacePoint? */
	static Object parse(String uri, Interface if)

resource interfaces:

interface Value{
	/* aka immediate resources: all information is in the identifer
	(the data: URL)
	100% guaranteed quality of service for GET (0% for PUT/POST/etc.)
	this sort of resource is like the value returned from
		the lisp/scheme (quote) special form (it's typed) */

	/* no methods in this interface: the result of
	binding is the same as the result of GET */

	static Object get(URI i);

interface Artifact{
: functional relationship between i and GET(i)
	immutable. LIFNs, cid:
	theoretically, any answer to GET(i) is good
	operationally: consistency problem: what to do if different servers
		report different answers?
		(if there are lots of good replicas, forgery is
		easy to detect: just check against one or a few
		other replicas)

local storage: GET(i) is a function of the state of the local computation
	"local" refers to the trust/consistency boundary
	e.g. about:

remote procedure: GET(i) is a function of the state of a (possibly) remote
	file:, ftp:, http:
	cgi scripts

remote storage: 
	ala database "entity"

synchronized storage: GET(i) is a function of a globally synchronized clock
	adds Last-Modified, If-Modified-Since semantics

analogies to:
	C *p and func()
	lisp SYMBOL, eval SYMBOL, call (func),
		(let) and ?x=2&y=3
	scheme procedures
	smalltalk/C++/objective C/java object
	COM monikers, binding, streams, storage, persistance
	CORBA naming, binding, persistance
	files (open/read/write/seek/close)
	database records ("entities" from the literature)
	"firstness", transaction semantics
	publish/subscribe (apple, UNSENET, castanet?)
	knowledge base query

	poetry: influence of receiver context on message