Reviewing Web Architecture: Identification
January 7, 2004
In the previous XML-Deviant column ("Reviewing Web Architecture") I discussed the first section of Architecture of the World Wide Web (AWWW), the first real deliverable from the W3C's Technical Architecture Group (TAG). In this column I continue that discussion, this time focusing on the first of the Web's three building blocks.
Infosystem Resources and Addressing Schemes
As I said in the previous column, the technology which instantiates this first building block -- the identification of resources -- is, of course, the URI (specified by RFC 2396, which merged RFCs 1738 and 1808; RFCs 1630, 1736, and 1737 are also relevant; finally, the AWWW refers [normatively, near as I can tell] to Roy Fielding's draft revision of RFC 2396, draft-fielding-uri-rfc2396bis-03). The URI has had, as long-time webheads know, a curious history. Recall that we used to talk about URLs, URNs, and URIs; but mostly about URLs.
Before examining AWWW's discussion of resource identification, I want to point out how utterly mundane, in fact, this whole business of resources and identifiers really is. By "mundane" what I mean is that it's a little difficult to see how else one might go about establishing something with properties such that it could credibly be called a global information system. In any information system (or so it seems to me, but maybe I'm too influenced by the Web itself) one needs some concept roughly analogous to a resource; and thus one needs some way of identifying, naming, and locating those resources.
Of course the devil as ever lives a strange, terrible existence in the details; but it's interesting in this regard to do a bit of demystifying of the Web and of URIs. Compare, for instance, the Web and the URI to Unix and its file system paths, and to the international telephone system and to telephone numbers. Each of these is an information system, even as they differ in scope. Each of these information systems contains resources which are named, identified, and located, conceptually, by means of a regular addressing scheme. And each of these information systems, though perhaps I don't really need to point this out explicitly, tends to take a kind of totalizing view of the resources it makes possible.
For example, Unix, as is well known, wants to treat resources of all kinds -- including sockets, system devices, kernel data structures, and so on -- as much like regular files as possible. This unification of disparate resources behind a single interface finds its most vigorous expression in the Unix super-derivative Plan 9. Or consider the universality of the telephone system's way of addressing resources: an addressing scheme that, near as I can tell, collapses the identify-name-locate troika into a single scheme. Modulo contextualizing shortcuts, which can be accomplished analogously via DNS tricks for the Web, I identify-name-locate telephone resources in the same way as everyone else and in the same way no matter where they are, or where I am.
I make these analogizing moves for two reasons. First, I think it's a good thing to demythologize the Web, the URI, perhaps even Sir Tim Berners-Lee. These systems and the people who conceived and built them are fascinating enough in their most unvarnished form without any mystification. But, second, and more seriously, I think it's good to demythologize the Web and URIs because they have precursors, analogues, and family resemblance members -- all of which help us, if we will attend to them carefully, understand the past, engineer the present, and plot the future of the web itself.
It's well and good to demythologize the Web by comparing it to other information systems, but what about the widespread belief that the Web or its addressing scheme is especially powerful or unique? I have spent no little energy in the past few years trying to debunk that view, since I'm not particularly impressed by its truth, and I tend to think it hurts more than helps, independent of whether it's true or false. What can we say about the Web as distinct from other information systems? I think we can say that the Web is an information-system encompassing information system. In other words, the Web more readily encompasses other information systems, like Unix file systems and telephone systems, than it is encompassed by them. I think that's a fair, modest rendering of what makes the Web distinct.
It's within the context formed by these remarks that I want to look at the AWWW's discussion of resource identification. The first point the AWWW makes is what it calls a constraint, that is, that one identifies resources in the Web by providing a URI for the resource. The motivation here is that, in the absence of a URI, user agents are unable to do anything with (interaction -- AWWW's second principle) representations (AWWW's third principle) of the state of a resource. The necessary, but not sufficient, condition of a user agent interacting with a resource by means of the Web is for that resource to have a URI. The user agent is able to retrieve a representation of the state of that resource by means of the scheme encoded in the URI -- a detail which will concern us in the next two columns.
The AWWW further claims that "when a representation uses a URI (instead of a local identifier) as an identifier, then it gains great power from the vastness of the choice of resources to which it can refer". I don't want to over-quibble with the TAG or the AWWW, but this is a rather infelicitous way of putting the point, for it is ambiguous between two readings: first, that representations are better off when they point to resources via URIs rather than local identifiers (generously glossing "to which it can refer" as "to which the representation can link"); second, that representations may themselves be identified either by a URI or by a local identifier, such that there is some value in being identified by a URI (again, generously glossing "to which it can refer" as "to which it is itself the representation of the state thereof").
I'm interested here in, on the one hand, pointing out a rather kludged bit of text in the AWWW, in the hopes that it will be clarified before Last Call ends; and, on other hand, in exploring the second reading in some detail. I suspect that the TAG does not intend the second reading, since it involves a rather serious misconstrual of things, but it's an interesting misconstrual at any rate.
The problem with the second reading is that it reverses the conceptual priority of resources and their representations. Before you object that talk of conceptual priority is too abstruse for the Web, consider what the AWWW says just two sentences later: "Resources exist before URIs; a resource may be identified by zero URIs" -- another exceedingly infelicitous expression, but one which nonetheless clearly makes a claim about the conceptual priority of resources to URIs. So, for those not keeping score at home, we have two implied claims: representations are conceptually prior to resources which are in turn conceptually prior to URIs.
But that's wrong, of course. The problem with the sentence about "great power" is that URIs are, conceptually, identifiers of resources and not identifiers of representations of the state thereof. The operational semantics -- as semi-formalized by REST -- of dereferencing a URI is that a user agent retrieves the representation of the state of a resource. A resource, pace the claim about zero URIs, only exists as a resource of the Web by having a URI. It may well exist in some other way without a URI, but a resource just isn't a web resource without a URI.
Thus this section should be reworked, if it is going to talk about conceptual priority at all, to reflect the fact that resources may well exist prior to them being given URIs, but they exist as resources of the Web if, and only if, they've been given URIs. Resources simpliciter are conceptually prior to URIs, but web resources and URIs are, we might say, conceptually coincident. You can't have a web resource without a URI and every URI identifies at least one web resource. Finally, web resources, which are identified by URIs, may have state; and user agents, when they dereference a URI, interact with a representation of the state of a web resource. Thus, representations are conceptually antecedent, both to URIs and to the web resources the states of which they represent.
The next constraint, together with a good practice, is that resources may be identified by one or more URIs, and it is perverse to arbitrarily coin many URIs for one and the same resource. One may not infer, then, that two different URIs are not identifiers of the same web resource. One may, however, conclude that agents or representations are each referring to the same resource if they are using identical URIs.
This last inference contains a bit of a poison pill, actually. It means that the connection between resources and URIs is in some sense timeless and static. Once a URI has been coined to identify a given resource, it can only ever identify precisely that resource. If I make assertions about a URI, intending of course to make assertions about the resource it identifies, and then subsequently the relevant authority changes the resource which that URI identifies, my assertions have been rendered meaningless or, in some cases, even worse. Consider the difference between saying "I'm gonna blow this up!" while placing your laptop on the x-ray machine's conveyor belt, and saying "I'm gonna blow this up!" while holding a party balloon at a coffee shop adjacent to the airport. The former may be an illegal act, while the latter isn't.
Given the changed context and referent, those two utterances aren't really the same speech act. Sometimes you can't say the same thing by saying the same thing. Imagine what life would be like if powerful space aliens were to transport you, instantaneously, from the coffee shop to the x-ray machine, replacing the party balloon in your hand with a laptop, just as you utter the crucially ambiguous phrase. In a sense more real than figurative, URI owners, like powerful space aliens, are perfectly free, even if conventionally discouraged, to arbitrarily change the meaning of other people's assertions (by changing the resource which various URIs identify). The AWWW addresses the underlying issue in section 2.2, URI Ownership; but none of the techniques discussed solves the arbitrary-change problem.
Also in XML-Deviant
The good practice about refraining from the needless propagation of URIs, each of which identifies the same resource, is perhaps a bit too strict. The example given is telling. "...the parties responsible for weather.example.com", the AWWW assures us, "should not use both 'http://weather.example.com/Oaxaca' and 'http://weather.example.com/oaxaca' to refer to the same resource". Why not? Because "agents will not detect the equivalence relationship by following specifications". Well, human agents probably will, but of course caches, proxy intermediaries, semantic agents and the like will not (unless they are permissively designed to use a URI-sensitive "do what I mean" matching algorithm, which it would be good to have as web standard). So what about common misspellings? Institutions and persons already do something like this when they register the canonical form of a domain as well as commonly misspelled or mistyped forms of the "same" domain. (This point would likely be conceded by the AWWW authors, but getting the balance of strictness and permissiveness with regard to good practices is not easy.)
Next week I'll finish up with the last few principles regarding resource identification (URI schemes and opacity) since they are less knotty than some of the others, and then I'll examine section 3 on interaction.