Re: Version identifier in URL

Daniel W. Connolly (connolly@beach.w3.org)
Wed, 29 May 1996 18:30:10 -0400


In message <2.2.32.19960529070838.00710f78@pop-server.austin.sar.slb.com>, "Rob
ert C. Pettengill" writes:
>
>It isn't clear to me that it is necessary to standardize the syntax of
>version identifiers across all servers.

Not necessary, and terribly ill-advised.

>The proposal in http://www.w3.org/pub/WWW/MarkUp/Resource/Specification
>seems to be pretty heavy weight.

Fair criticism. Shorthand syntaxes can be developed.

>  I can't simply have a URL to a specific
>document in the "version space", I need to define a resource and then
>provide a URL to that resource which seems more than a little awkward.

No? I think you can.

The point is: you can't tell the relationship between address A1
and address A2 just by looking at their syntax: you need explicit
information that says one is a version of the other. The Resource
element is one such syntax.

>Why not allow link attributes to be specified in the anchor, e.g.
><A HREF="mumble/foo" VERSION="x">?

That might be a reasonable short-hand, as long as we're clear on
how it expands into a full <resource> description; i.e. if
the above markup is found in a document at A1, then we have:

        link(A1, mumble/foo, version-specific)
and
        meta(mumble/foo, version, x)

i.e.
        <resource href="mumble/foo">
                <meta name=version content=x>
                <link rev=version-specific href="A1">
        </resource>


>It might be worthwhile discussing the requirements for versioned links
>before discussing the syntax.  Some questions that occur to me are:
>
>Is the versioning model constrained to be single threaded?  (i.e. unique
>answers to the queries below)
>
>Fetch the version previous to URL(x).
>Fetch the version subsequent to URL(x).

These are a matter of finding the address p and s such that:
        link(x, p, preceeds)
        link(s, x, preceeds)

Then GET p and s. A convention for finding those addresses might
be handy. But the convention can't be just a syntactic manipulation.

>Fetch the version of URL(x) current at time t.

That's trickier. It's a matter of finding c such that:

        meta(c, last-modified, t1)
        link(c, r1, preceeds)
        meta(r1, last-modified, t2)
        link(c, r2, preceeds)
                ...
        link(c, rn, preceeds)
        link(rn, x, preceeds)


such that t1 <= t <= t2.

>Fetch the version of URL(x) current as of the creation time of URL(y)
>Fetch the most recent version of URL(y)

One way to this sort of thing in general is:
        * Each response regarding a versioned resource has a
        link to its full version history in an HTTP header:

                Link: rel=revision-history href=/foo/bar/history

        * To find a certain revision of x, Client does GET (or HEAD)
        for x, and follows revision-history link

        * content of target revision-history gives links to each
        revision, along with information about last-modified dates.

        * client searches revision history to satisfy query

Another approach is to move some of the processing to the server.
Then it's a question of what queries to support, and how to
express them. URL forms syntax? Hmmm...


Dan