TimBL, Ian, and I spent some time talking about this issue yesterday.
Specifically, we spent a couple of hours in front of a whiteboard
talking about it.
What follows is a first-pass brain dump of what I gleaned from that
meeting. I am specifically not speaking for TimBL, but I am going to
try to present a line of argument that I think he would agree with (if
he doesn't, I'm sure he'll say so :-) For the record, I'm not sure I
agree with all of it, but at least I think I understand it better
today.
Definition: a URI identifies a resource that is amenable to
unambiguous interpretation by recursive application of a finite set of
specifications, beginning with the specification that governs the
scheme of the URI.
n
What that means is that if I'm handed a URI reference of the form
"http://example.com/foo#bar", I can proceed in the following way:
1. Start with the scheme component of the URI reference. That tells me what it is.
2. If it can be retrieved, I can try to retrieve it.
3. If I get a representation back, the MIME type of that representation
tells me how to interpret it.
4. The fragment identifier (if there is one) is interpreted according to
the rules specified by the MIME type.
I think the important part here is that there's a chain of specs that
tell me what I can do, and in what order I can do them, and I always
start with the URI scheme spec first.
Definition: the URI scheme tells you the range of resources that can be
addressed by that scheme.
Some schemes, like UUID explicitly say you can reference real world
objects. But others are more limiting. The mailbox: scheme, for
example, says you can reference mailboxes with it:
The mailto URL scheme is used to designate the Internet mailing
address of an individual or service.
One can argue, therefore, that it's wrong to assert that
mailto:fred@nwalsh.com is a URI reference that identifies my car. My car is not
"the Internet mailing address of an individual or service."
Similarly, the http: scheme says you can reference network resources with it:
The "http" scheme is used to locate network resources via the HTTP
protocol.
One can argue, therefore, that it's wrong to assert that
http://nwalsh.com/galaxies/andromeda is a URI reference that identifies the
Andromeda galaxy. The Andromeda galaxy is not a network resource. The
extent to which a person or a car is a network resource is perhaps
debatable, but one school of thought clearly says they aren't and that
"network resource" should really be read as "document".
So is it reasonable to assert that
http://nwalsh.com/galaxies#andromeda identifies the Andromeda galaxy?
Maybe. Because "andromeda" is a fragment identifier and its
interpretation is determined by the MIME type of the representation of
http://nwalsh.com/galaxies that I retrieved. If that spec says
fragment identifiers can identify real world objects, so be it.
Definition: the MIME type tells you the range of fragment identifiers
used in conjunction with representations that have that content type.
A slight disconnect exists here because the URI identifies a resource
(which may have several representations) but the interpretation of the
fragment identifier is specific to the representation actually
retrieved. That leads to another principal that you shouldn't serve
representations that have differing fragid interpretations.
So http://nwalsh.com/myfavoritemovie#title could be either the element
with ID title (if the content-type is XHTML) or the abstract notion of
the title of the movie (if the content-type is, for example, RDF).
(With help from Ian),
norm
--
Norman.Walsh@Sun.COM | It is not failure of others to appreciate
XML Standards Architect | your abilities that should trouble you, but
Sun Microsystems, Inc. | rather your failure to appreciate
| theirs.--Confucius