...
An alternate design might be to serialize the each memento into a binary resource and have that contained by the LDPCv. The key thing is to figure out how you store the archival date of each memento and retrieve that info to produce the TimeMap. Should it be in the memento itself? In the LDPCv? If so, how is that stored?
Here's an example of a LDPRv - what signifies that it is a LDPRv is that a request on the LDPRv returns memento related 'Link' headers in the reponse (and possibly a VersionedResource (spec issue 233) header as well) . These 'Link' headers point to the TimeMap and TimeGate for this resource . The current behavior is that a 'hasVersions' triple is returned when a LDPR is requested.
Code Block | ||||
---|---|---|---|---|
| ||||
$ curl http://localhost:8080/rest/xyz HTTP/1.1 200 OK Date: Mon, 18 Sep 2017 14:58:26 GMT Link: <http://localhost:8080/rest/xyz>; rel="original timegate" Link: <http://localhost:8080/rest/xyz/fcr:versions>; rel="timemap"; from="Fri, 8 Sep 2017 21:35:19 GMT"; until="Mon, 1123 Sep 2017 15:41:04 GMT"; @prefix premis: <http://www.loc.gov/premis/rdf/v1#> . @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . @prefix fedora: <http://fedora.info/definitions/v4/repository#> . @prefix ldp: <http://www.w3.org/ns/ldp#> . <http://localhost:8080/rest/xyz> rdf:type fedora:Container ; rdf:type fedora:Resource ; rdf:type ldp:RDFSource ; rdf:type ldp:Container ; fedora:lastModifiedBy "bypassAdmin"^^<http://www.w3.org/2001/XMLSchema#string> ; fedora:createdBy "bypassAdmin"^^<http://www.w3.org/2001/XMLSchema#string> ; fedora:lastModified "2017-09-18T20:01:33.501Z"^^<http://www.w3.org/2001/XMLSchema#dateTime> ; fedora:created "2017-09-15T21:19:49.731Z"^^<http://www.w3.org/2001/XMLSchema#dateTime> ; fedora:writable "true"^^<http://www.w3.org/2001/XMLSchema#boolean> ; fedora:hasParent <http://localhost:8080/rest> ; ldp:contains <http://localhost:8080/rest/xyz/abc> ; |
...
LDPCv - Memento Container (TimeMap)
The key here is that the memento container be able to return the necessary TimeMap information. Below Below were just a few initial thoughts on what the internal structure of a LDPCv & LDPRm might look like.
...
Code Block |
---|
HTTP/1.1 200 OK Date: Thu, 21 Jan 2010 00:06:50 GMT Server: Apache Content-Length: 4883 Content-Type: application/link-format Connection: close <http://a.example.org>;rel="original", <http://arxiv.example.net/timemap/http://a.example.org> ; rel="self";type="application/link-format" ; from="Tue, 20 Jun 2000 18:02:59 GMT" ; until="Wed, 09 Apr 2008 20:30:51 GMT", <http://arxiv.example.net/timegate/http://a.example.org> ; rel="timegate", <http://arxiv.example.net/web/20000620180259/http://a.example.org> ; rel="first memento";datetime="Tue, 20 Jun 2000 18:02:59 GMT" ; license="http://creativecommons.org/publicdomain/zero/1.0/", <http://arxiv.example.net/web/20091027204954/http://a.example.org> ; rel="last memento";datetime="Tue, 27 Oct 2009 20:49:54 GMT" ; license="http://creativecommons.org/publicdomain/zero/1.0/", <http://arxiv.example.net/web/20000621011731/http://a.example.org> ; rel="memento";datetime="Wed, 21 Jun 2000 01:17:31 GMT" ; license="http://creativecommons.org/publicdomain/zero/1.0/", <http://arxiv.example.net/web/20000621044156/http://a.example.org> ; rel="memento";datetime="Wed, 21 Jun 2000 04:41:56 GMT" ; license="http://creativecommons.org/publicdomain/zero/1.0/", ... |
A possible LDPCv is below. The issues One issue to work through is that the LDPCv might have an ACL that applies to it, and then perhaps there is a separate ALC that applies to all the mementos. How do you indicate that other ACL? Check out the section on the algorithm for finding an ACL. You may end up deciding on a simplier authorization setup.
Note that there is no memento ontology - we may want to make one up...?
Code Block | ||||
---|---|---|---|---|
| ||||
@prefix acl: <http://www.w3.org/ns/auth/acl#> .
@prefix iana: <http://www.iana.org/assignments/relation/> .
@prefix ldp: <http://www.w3.org/ns/ldp#> .
@prefix memento: <http://example.com/memento#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix time: <http://www.w3.org/2006/time#> .
</path/to/resource/xyz/fcr:versions> a ldp:Container ;
acl:hasAccessControl </path/to/acls> ; # this is for the LDPCv itself, for the TimeMap retrieval
prov:startedAtTime "2017-09-08T21:35:19Z"^^xsd:dateTime ; # first memento
prov:endedAtTime "2017-09-11T15:41:04Z"^^xsd:dateTime ; # last memento
memento:hasAccessControl </path/to/acls> ;
memento:hasOriginalResource </path/to/orig/resource/xyz> ; # how else can we represent this? is this a given based on url?
memento:hasTimeGate </path/to/orig/resource/xyz> ; # how else can we represent this? is this a given based on url?
iana:first </path/to/resource/xyz/fcr:versions/12344> ;
iana:last </path/to/resource/xyz/fcr:versions/12347> ;
ldp:contains </path/to/resource/xyz/fcr:versions/12344>, </path/to/resource/xyz/fcr:versions/12345>,
</path/to/resource/xyz/fcr:versions/12347>, </path/to/resource/xyz/fcr:versions/12346> . |
...
. |
...
LDPRm - Memento
The timemap needs to have the archival time in it - so that needs to be stored some where. One thought was to store that data in the memento (not returned to useras a hidden property that the user doesn't know about). Not sure if that's a good idea or not. Also, should the memento returned contain information about the next / prev memento? Does it still qualify as a memento if the resource has that data in it?
Code Block | ||||
---|---|---|---|---|
| ||||
@prefix acl: <http://www.w3.org/ns/auth/acl#> . @prefix iana: <http://www.iana.org/assignments/relation/> . @prefix ldp: <http://www.w3.org/ns/ldp#> . @prefix memento: <http://example.com/memento#> . @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . @prefix time: <http://www.w3.org/2006/time#> . </path/to/resource/xyz/fcr:versions/12345> a ldp:RDFSource , prov:InstantaneousEvent; prov:atTime "2012-04-30T20:40:40"^^xsd:dateTime; memento:hasTimegate </path/to/orig/resource/xyz> ; # how else can we represent this? is this this a given based on url? memento:hasOriginalResource </path/to/orig/resource/xyz> ; # how else can we represent this? Is this a given based on url? iana:next </path/to/xyz/fcr:versions/12346> ; # to memento iana:prev </path/to/xyz/fcr:versions/12344> ; # to memento ... triples from original resource at the time of versioning... or, if weone decided to put the mememento one more layer down to keep themit totally separate, it might look like this (as in this LDPRm really just wraps the actual resource): (I'm not clear on how a binary and it's metadata would be represented) ldp:contains </path/to/xyz/fcr:versions/12345/version> , </path/to/xyz/fcr:versions/12345/version/fcr:metadata> ; |
...