generic URI
where at any moment in time the current version of the resource is accessible. The Memento protocol refers to
the resource identified by the generic URI
as the original resource
.version URI
for each resource version. The Memento protocol refers to
a resource identified by a version URI
as a Memento
.http://www.w3.org/TR/webarch/
is the generic URI
for that specification;http://www.w3.org/TR/2004/REC-webarch-20041215/
is the version URI
for the current version of that specification;http://www.w3.org/TR/2004/PR-webarch-20041105/
is the version URI
for the previous version of that specification;http://www.w3.org/TR/2004/WD-webarch-20040816/
is the version URI
for the version before that as indicated
on top of the previous version of the specification.generic URI
.
Hence, a version resource is a Memento as defined in the Memento specification,
and the appropriate Memento HTTP headers can be applied. The headers are used
to express the version datetime, to relate a version URI
to the corresponding generic URI
, and to support
navigation between versions. In essence, they are introduced to convey the version information that is
provided on top of the W3C specification in a machine-actionable manner.
Memento-Datetime
header can be used
to express the time beyond which the version resource will no longer change, typically the date/time of publication of the version.
Using http://www.w3.org/TR/2004/PR-webarch-20041105/
as an example version URI
, the
response to a HTTP HEAD/GET request against that URI would be:
Last-Modified
and Memento-Datetime
headers are the same.
Cases exist in which the date provided in the Last-Modified
header is older or more recent than
the date in Memento-Datetime
; see the blog post
Memento-Datetime is not Last-Modified
for details.
Essentially, the Last-Modified
header does not entail a promise that the the version resource will no longer change;
the Memento-Datetime
header does.
version URI
to its corresponding generic URI
: A special relation exists
between the resource versions, each identified by their dedicated version URI
, and the original resource
identified by the generic URI
. This relation can be expressed by including an HTTP Link
header
in the response to a HTTP HEAD/GET request on a version URI
. The Link
header contains a
link with the original
relation type pointing at the generic URI
.
Again, using http://www.w3.org/TR/2004/PR-webarch-20041105/
as an example version URI
, the
response to a HTTP HEAD/GET request against that URI becomes:
Link
header in responses to HTTP HEAD/GET requests against a version URI
.
This header includes links with relation types such as
prev
, next
, predecessor-version
, successor-version
,
first
, last
as detailed in
RFC5988 and RFC5829.
However, these links do not convey that each of the interlinked versions are Mementos, frozen in time, nor do they
provide the datetime at which the versions were frozen. This missing information can be provided by using additional links
that have the memento
relation type.
version URI
http://www.w3.org/TR/2004/PR-webarch-20041105/
becomes:
version URI
and version date
of all resource versions as well as the associated generic URI
.
In essence, a TimeMap is very similar to the calendar view the Wayback Machine provides of Mementos it holds for a certain resource,
with a TimeMap providing the information in a machine-actionable manner.
The below picture shows
the Wayback's calendar view for Mementos of the W3C specification..
Link
headers are used throughout the Memento protocol, the default serialization of a TimeMap
is the same as that of the content of the HTTP Link
header, defined in RFC5988.
Its media type is application/link-format
, defined in RFC6690.
A JSON format for TimeMaps is currently under consideration.
http://www.w3.org/TR/timemap/webarch/
and the response to a HTTP GET
on that URI would be:
timemap
relation type
provided in the Link
header in responses to HTTP HEAD/GET requests
against each version URI
as well as the generic URI
.
Using http://www.w3.org/TR/2004/PR-webarch-20041105/
as an example version URI
, the
response to a HTTP HEAD/GET request against that URI, omitting links among versions for brevity, becomes:
generic URI
, including
an Accept-Datetime
request header that conveys the datetime of the resource version that is desired by the client.
Through the intermediation of a TimeGate that has access to the version
history of the original resource, the client will be led to the resource version (and hence the version URI
)
that was the current one at the datetime expressed by the client.
generic URI
of this resource,
and that request includes Accept-Datetime
request header it will be redirected (302 Found
status code)
to the version URI
that was current at the time specified in the Accept-Datetime
request header. Details for the ongoing example are
here.Accept-Datetime
request header,
against the generic URI
of this resource, the response will contain an HTTP Link
header that includes a link
with the timegate
relation type that points at the TimeGate associated with the original resource.
The client then proceeds to issue an HTTP HEAD/GET request that includes the Accept-Datetime
request header against the
URI of the TimeGate associated with the original resource. As a result of this, the client will be redirected (302 Found
status code)
to the version URI
that was current at the time specified in the Accept-Datetime
request header.
Details for the ongoing example are
here.generic URI
http://www.w3.org/TR/webarch/
. Lets assume a client wants to access the
version of the specification that was current on September 11 2004. In order to do so, the client issues the following HTTP HEAD (or GET) request
against the specification's generic URI
http://www.w3.org/TR/webarch/
:
version URI
http://www.w3.org/TR/2004/WD-webarch-20040816/
,
which was the current version between August 16 2008 and November 5 2008. Note the use of the Vary
header to indicate
the resource supports datetime negotiation. Note also the Link
header that indicates that the original resource coincides
with its TimeGate. It also includes a link to the previously discussed TimeMap.
version URI
http://www.w3.org/TR/2004/WD-webarch-20040816/
. The response to that request
includes the Memento-Datetime
header and all previously discussed links:
generic URI
and could, for example, be exposed at http://www.w3.org/TR/timegate/webarch/
.
Lets again assume a client wants to access the
version of the specification that was current on September 11 2004. In order to do so, the client issues the following HTTP HEAD (or GET) request
against the specification's generic URI
http://www.w3.org/TR/webarch/
:
http://www.w3.org/TR/timegate/webarch/
associated with the original resource http://www.w3.org/TR/webarch/
:
http://www.w3.org/TR/timegate/webarch/
including the Accept-Datetime
header:
version URI
http://www.w3.org/TR/2004/WD-webarch-20040816/
,
which was the current version between August 16 2008 and November 5 2008. Note the use of the Vary
header to indicate
the resource supports datetime negotiation. Note also the Link
header that points to the original resource and
to the previously discussed TimeMap.
version URI
http://www.w3.org/TR/2004/WD-webarch-20040816/
. The response to that request
includes the Memento-Datetime
header and all previously discussed links:
https://twitter.com/hvdsomp/status/401134723210416128
posted on
November 14 2013 at 4:49 PM Mountain Time.
Memento-Datetime
HTTP header in responses to HTTP HEAD/GET requests on the resource URI. The value of this header is the date/time the resource became stable.
This header sends a much stronger message about the stability of a
resource than the provision of a Last-Modified
header,
which does not entail a promise that the resource will no longer change past the provided date.
Memento-Datetime
header
can be included in a response to a HTTP HEAD/GET on the URI of the tweet. The value of the header is in this case equal to the publication time
and is expressed in Greenwich Mean Time. Note that Twitter sets the value of the Last-Modified
header equal to that of the
Date
header, which expresses the response time. This is another example of Last-Modified
being more recent than
Memento-Datetime
as described in
Memento-Datetime is not Last-Modified.
Link
header
in responses to HTTP HEAD/GET requests on the resource URI. This header contains a link with the
original
relation type pointing at the original URI.
Providing these links helps to distinguish these "in situ" frozen resources from
resources that are frozen at a URI that is different from their original URI, as is the case for snapshots in
web archives and version resources in content management systems.