[URN] Re: Relative URLs and URNs
Daniel LaLiberte <[email protected]>
| Newsgroups | gmane.ietf.url |
|---|---|
| Message-ID | <[email protected]> |
Keith Moore writes: > > Keith, you make a good point that relative URIs are limited in > > persistence to the persistence of the two URIs. > > I don't know which two URIs you're talking about. The two URIs are something like an http URL and a URN of some kind. A relative URI could be relative to either kind of absolute URI. Of course, if the scheme of an absolute URI does not support relative URIs, the URI could not be used as the base URI of a document. > The persistence problem, as I see it, comes from wiring > non-persistent information into the URI -- in this case, the > grouping of subsets of URI space -- and depending on that > information to be persistent. Relative URIs may or may not wire non-persistent information depending on how your resolution service works. The grouping of subsets of a URI space is a grouping of the *identifiers*, but that does not necessarily mean that the *resources themselves* are similarly grouped. A redirection can be returned by the resolution service for any part of the group pointing the client off to where the resource currently lives (or closer to it anyway). In fact, a hierarchical subdivision of the group can make it even easier for the resolution service to provide that redirection, and more importantly, for the client to (more scalably) remember the redirection for a whole subdivision. All this and a bit more is supported by the path scheme resolution mechanism. Keith, you seem to be arguing not only against relative URNs but against any hierarchical structuring of the URN space. The two issues are closely related since once you have hierarchical structuring, you can also easily have relative identifiers. What is the difference between always using absolute URNs such as urn://path/A/B/C/D.doc urn://path/A/B/C/E.doc and using relative URNs such as C/D.doc C/E.doc within a document having a base URN of urn://path/A/B/index.doc It might be the case that for some resolution mechanisms, you resolve the relative part by itself in a different way than you resolve the corresponding absolute URI. So you might not be able to resolve urn://path/A/B/C/D.doc directly but instead, after resolving urn://path/A/B/, you find out about some different kind of service (say an HTTP server) that you request C/D.doc from. > Tim B.L. said: > > But Dan La L was right too in pointing out that the relative URI > > may in fact be longer lived than the absolute. So it is not a > > clear case. > > Unless I misunderstood his argument, it seemed to be predicated on > the idea that old name spaces will go away and need to be changed. > But since the URN framework is specifically designed so that old name > spaces do not need to be changed, I don't accept the premise. The old name space may live forever with no problem - we only have to guarantee that the names are never used again - no problem (even for human-meaningful names). The real problem is in finding a resolution service that will resolve the old names. Say a name space is created in such a way that it is really difficult to actually resolve identifiers in a scalable way. One way to solve this problem is to create a new name space with better resolution mechanisms. The relative URIs in the documents could remain unchanged if both the old and new name spaces supported relative URIs. (Footnote: Another different kind of problem for finding a resolution service could occur if hardly anyone cares about the resources any more, no matter how scalable the resolution service might be. The problem might be to find a cheap enough resolution service.) (Footnote: Finding (looking up) a resolution service is an essential part of the resolution process. You have to have a specific place (location/address) to start the lookup process. That's what makes a name logically the same as an address, but we are not allowed to talk about that on the URN list - email me replies on that.) > As far as I can tell, if we're going to have persistent relative URNs > (or equivalently, URNs that reference portions of a single resource) > we're going to need a level of indirection for relative URNs just like > we have for normal URNs. Yes, and providing that indirection is no more of a problem for relative URNs than for absolute URNs, depending on how your resolution service works. If you are thinking only of resolution services that work with flat name spaces, then indeed relative URNs will be a problem. Obviously, document writers will not be able to use URNs in non-hierarchical name spaces as base URIs. > That is, > > given a resource a1 with URN "A1" and a similar resource a2 with URN "A2", > (for some meaning of "similar"), it's not reasonable to assume that > the portion of a1 named by "A1/foo" is similar to the portion of > a2 named by "A2/foo". Correct. It would be an error to assume that. Relative URNs can not be directly compared for equivalence without prepending the context of the base URN that makes them absolute. If you know that A1 and A2 are alternative (equivalent) URNs for the same resource, then you *do* know that "A1/foo" is equivalent to "A2/foo", otherwise you do not know they are equivalent. The same is true of absolute and relative URLs, by the way. > My view is that since persistence is an important property of URNs, > we should not define relative URNs (or URNs that specify portions of > documents) until we understand how to define them without diluting > the persistence of URNs. Relative URNs do not dilute the persistence of URNs any more than hierarchically structured URNs are non-persistent. > If we disallow unencoded '/' within URNs for now, we can always add > relative URNs later when we understand them better. True, but you would also be disallowing hierarchical name spaces such as the path scheme defines. Understanding relative URNs is a good idea, but I don't understand why it is so difficult to understand them. Earlier, regarding locations within a resource, you said, > Even then, I'm not sure what it means to talk about references > relative to a "Base URN" ...because this assumes that the "Base URN" > will need to change while the intra-resource reference names > need to stay the same. Important difference: The base URN *may* change (e.g. to a newer better name space), while the intra-resource (or inter-resource - same can of worms) relative identifiers *need not* change. All this talk of hierarchy should be extended to also include Tim's matrix space with relative URIs of the form ";name=value;name=value". John Mallery has suggested a URN scheme that is entirely matrix based. John, it might be useful for you to briefly describe it now. I need to give it more thought myself, to figure out how to make the resolution scalable. -- Daniel LaLiberte ([email protected]) National Center for Supercomputing Applications http://union.ncsa.uiuc.edu/~liberte/