Re: Version identifier in URL

Fabio Vitali (vitali@cis.njit.edu)
Tue, 11 Jun 1996 14:35:00 -0500


>There are two scenarios possible in a "hierarchical version
>space":
>
>	http://host/prefix/VERSION/suffix
>
>and
>
>	http://host/prefix/suffix/VERSION
>
>The former has the advantage that, in the general case, we can
>specify a version for a subtree, which lets us "surf into the
>past" for free.  The latter has the advantage that, in a sense,
>different versions of a particular node in the heirarchy are
>subordinate to it.
>
>Unfortunately, neither option addresses the practical concern
>that the server has to have some way of determining
><strong>when</> a URL contains a version. I mean, the path
>
>	http://host/foo/1.5/bar.html
>
>could easily reference a page discussing the history of the "bar"
>facility in Lisp 1.5.

You have to be extremely forgiving with me, but, maybe because english is
not my first language, maybe - probably - because I'm dense to this
arguments and simply stupid, in those cases when one is presenting a
paradox he should always give both sides, so as to make it exactly clear
that it is indeed a paradox.

Now your example here definitely looks like a paradox for the way it is
phrased and the implicit sentences: "could easily reference XXX [and we
obviously don't want that]" or "could easily reference XXX [as well as YYY,
and this is ambiguous]". And, in your example, I'm missing something. I
really don't see the problem. No paradox for me.

In my view, the server never can have any problem in determining whether a
URL contains a version or not, except for that damn example of the Thoth
operating system that has me here in Sardinia tending stupid goats. The URL
is opaque to the client, not to the server. Since it is the server that
provide the rules to build a URL (e.g. the directory path, the home
directory, etc.), it also has to provide a rule to decode it. And to use

>	http://host/prefix/VERSION/suffix

or

>	http://host/prefix/suffix/VERSION

is a policy decision of the server, that we are not in the position to rule
about. Indeed, I would appreciate a system that provides both, so that I
can use either one in my client: the first syntax to use relative URLs to
"surf into the past" (i.e. to get the correct versions of the documents and
images associated to "suffix"), the second syntax to use relative URLs to
"surf *across* the past" (i.e. access different versions of document
"suffix" - for comparison, merge, or whatever), both extremely valid and
justifiable requirements.

The point for the server therefore is not how can the *server* know about
versions, but what kind of "surfing" is the server going to provide ("into"
or "across") by using relative URLs.

The problem on the other hand is how an aware *CLIENT* can know about
version information. This is a tough one. So we have two cases:

a) The client is version-unaware, and therefore any kind of version-related
operations must be dealt with by the user manually or by existing and
acceptable
techniques (e.g. relative URLs). In this case it is necessary that the user
understands, possibly at a glance, about the policies used by the VCS at
the server, so that she can directly create URLs for related resources
(across or into the past) and ask for them in the "Goto:" field.

b) The client is version-aware, and therefore can deal with version-related
operations autonomously. In this cases: we have two additional issues: if
there is a single acceptable policy, then a version-aware client could use
different VCS systems (for example, in different HTTP servers) without
modification to the code. Otherwise, if no single policy has been found, it
is necessary that either the client is VCS-specific, or has code for
managing all the different VCSs at the servers.

Since having a single acceptable policy implies not just agreeing on how to
store version information in the URL, but also on how to deduce the URL of
the resource returned by the existing VCS operations (e.g. previous
version, next version, latest version in which Bill provided a
modification, etc.), I would think that this is, currently, an overly
optimistic goal.

To summarize, the hierarchical specification is not a problem neither for
the server, nor for unaware clients, in my view, but only for version-aware
clients that have to deal with several different policies. This leads, most
probably, to specialized clients aware of only one specific policy, i.e.
working in an aware manner with only one VCS. I personally do not see a way
out of this.

Fabio