W3C home > Mailing lists > Public > xml-uri@w3.org > May 2000

Re: Injective Quality (Was: Re: URIs quack like a duck)

From: Tim Berners-Lee <timbl@w3.org>
Date: Tue, 30 May 2000 09:50:45 -0400
Message-ID: <00e501bfca3e$0e201570$a60a1712@col.w3.org>
To: "Clark C. Evans" <cce@clarkevans.com>, <michaelm@netsol.com>
Cc: <abrahams@acm.org>, <xml-uri@w3.org>

-----Original Message-----
From: Clark C. Evans <cce@clarkevans.com>
>Why do we need this injective quality?  Beacuse in our
>domain (namespaces), we wish the following conditional
>to be a tautology:
>  "If the name X and the name Y are different,
>   then we know the resource identified by X is
>   different from the resource identified by Y"

I disagree. In fact, I would say that you can't make a system
which scales globally in a decentralized way with that

[[Two problems with vocabulary, by the way:
(1) My definition of a resource is that exactly identified by a URI and so
URIs and resources are in 1:1 mapping. A resource is not a file.
A file may be a representation of a resource.
(2) When you talk about resources being "different" then
one can make a useful question out of it by writing
"not equivalent", and defining the operations for which
euqivalence is desired. I have discussed this earlier in
and made a defininition equivalence of namespaces in
http://lists.w3.org/Archives/Public/xml-uri/2000May/0734.html ]]

You have to build the web without this tautology.
This follows in general from the "anyone can say anything
about anything" maxim, but specifically, as different
parties use and control different parts of various
naming schemes, someone is at liberty to allocate one of their
names to something of yours.

You can't just legislate agianst this.  Discovery that two
names actually apply to the same object
(the Moning Star and the Evening Star, for example)
is part of the social process.

>The problem with URLs is that, in general, they
>lack this injective quality.  In other words,
>I can find N distinct URLs that identify
>(resolve to) the same resource.

That is life in the big city.   The problem is with the
big city, noteth URIs.   The goot news is that you
can do everything you need to do using

     u1 = u2 ==> R1 == R2

as I said in previous messages.

The only nasty bit for XML is that of the uniqueness of attributes.
It is the only time tha the DOM needs to compare namespaces.
It leads to the phenomenon of errors being discovered on the basis of new
Actually, I expect this to be a fairly rare problem in real XML documents,
so I think string comparison of absolute URIs will work fine for

If you really go  down the that road, though, of asking what would happen
in the case of attributes which have the same localname and are in
anamespaces which are in some way equivalent, you find that it is
more complicated than it fisrt seems at first.
After all, if an XML document is well-formed when and element has two
size attributes, one from SVG 1.0 and the other from SVG 2.0
it may still have problems at the application layer because the attributes
actually mean the same thing.  One attribute can be defined in the
text of a spec  to have the same *effect* as another, and well-formedness
checking isn't
going to catch that.  So upper layers are going to have to be able to watch
for that
anyway. Well-formedness checking can only ever meet a certian standard,
and string comparison of absolutie URIs seems to be a reasonable level IMHO.

To me the only questoin now is whether relative URIs should be absolutized
(which I originally preferred) or warned against (which I am coming around
as I see the wealth of ways in which they have been treated to date. Though
my plea for real documents which would break on absolutizing led to

>  "If the name X and the name Y are the same,
>   then we know the resource identified by X and
>   the resource identified by Y are the same."

This we do have.

>And, for reference, the "surjective" quality of
>the mapping described gives our domain this property:
>  "For any resource X, there is at least one
>   name X' such that X' identifies X."

This follows if you use my definition of resource of course.

If you mean, be resource, an HTTP entity body or a (mime type, bits) pair
then you can always generate a data:mime-type;body URI
for it in principle so while that might hold it isn't a sane operation
to use from the engineering point of view.

The web is a system of which no one has full knowledge,
so there are some global properties you could discuss for a closed
system which don't make sense on the web.

What we do have, is, "For any resource X,  I (an agent) can cook up a URI u
and define u to refer to X".

Tim Berners-Lee
Received on Tuesday, 30 May 2000 09:49:26 UTC

This archive was generated by hypermail 2.4.0 : Friday, 17 January 2020 23:13:59 UTC