Adding Events to an External Triplestore
Events that happen outside of the repository can be added directly to an external triplestore. The triples used to describe them should be the same as internal events, except they should have rdf:type audit:ExternalEvent:
@prefix audit: <http://fedora.info/definitions/v4/audit#> . @prefix premis: <http://www.loc.gov/premis/rdf/v1#> . @prefix prov: <http://www.w3.org/ns/prov#> . @prefix xsd: <http://www.w3.org/2001/XMLSchema#> . <event1> a prov:InstantaneousEvent, premis:Event, audit:ExternalEvent ; premis:hasEventRelatedAgent "jquser"^^xsd:string, "ImageMagick 6.8.8-9"^^xsd:string, "thumbnail-generator.example.edu"^^xsd:string ; premis:hasEventType audit:derivativeCreation ; premis:hasEventRelatedObject <http://localhost:8080/rest/55/59/ec/05/5559ec05-6ab1-4d61-905a-a5f3da360b23> ; premis:hasEventDateTime "2012-04-30T20:40:40"^^xsd:dateTime .
Posting them to a triplestore will be basically the same for different triplestores, with only the triplestore URL changing:
curl -X POST -H "Content-Type: text/turtle" --data-binary @event1.ttl http://localhost:3030/test/data
curl -X POST -H "Content-Type: text/turtle" --data-binary @event1.ttl http://localhost:8081/openrdf-sesame/repositories/test/statements
Adding with SPARQL Update
The SPARQL Update command to insert event triples will be similar to:
prefix audit: <http://fedora.info/definitions/v4/audit#> prefix premis: <http://www.loc.gov/premis/rdf/v1#> prefix premisEvent: <http://id.loc.gov/vocabulary/preservation/eventType/> prefix prov: <http://www.w3.org/ns/prov#> prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> prefix xsd: <http://www.w3.org/2001/XMLSchema#> insert data { <http://example.org/event2> rdf:type prov:InstantaneousEvent . <http://example.org/event2> rdf:type premis:Event . <http://example.org/event2> rdf:type audit:ExternalEvent . <http://example.org/event2> premis:hasEventRelatedAgent "jquser"^^xsd:string . <http://example.org/event2> premis:hasEventRelatedAgent "rsync 2.6.9"^^xsd:string . <http://example.org/event2> premis:hasEventRelatedAgent "backup-repository.example.edu"^^xsd:string . <http://example.org/event2> premis:hasEventType premisEvent:rep . <http://example.org/event2> premis:hasEventRelatedObject <http://localhost:8080/rest/55/59/ec/05/5559ec05-6ab1-4d61-905a-a5f3da360b23> . <http://example.org/event2> premis:hasEventDateTime "2012-04-30T20:40:40"^^xsd:dateTime . }
The command to execute the SPARQL Update vary somewhat more depending on the triplestore used, since some triplestores require form-encoding of SPARQL Update commands and others accept them directly:
curl -X POST -H "Content-Type: application/sparql-update" -d @event2.sparql http://localhost:3030/test/update
curl -X POST -H "Accept-Encoding: identity" -H "Accept: */*" -H "Content-Type: application/x-www-form-urlencoded" -d update=`cat event2.sparql` http://localhost:8081/openrdf-sesame/repositories/test/statements
Adding Events to an LDP Container
External audit events can be added to an LDP Container in a repository resource. For each object, create an LDP Container that manages the audit event relationship automatically:
curl -X PUT --data-binary @audit_container.ttl -H "Content-type: text/turtle" http://localhost:8080/fcrepo4/rest/foo/audit
@prefix ldp: <http://www.w3.org/ns/ldp#> . @prefix premis: <http://www.loc.gov/premis/rdf/v1#> <> a ldp:DirectContainer; ldp:membershipResource <http://localhost:8080/fcrepo4/rest/foo>; ldp:hasMemberRelation premis:hasEvent .
Then, for each event, post the RDF for the event to the audit container:
curl -X POST --data-binary @audit_event.ttl -H "Content-type: text/turtle" http://localhost:8080/fcrepo4/rest/foo/audit
@prefix audit: <http://fedora.info/definitions/v4/audit#> . @prefix premis: <http://www.loc.gov/premis/rdf/v1#> . @prefix prov: <http://www.w3.org/ns/prov#> . @prefix xsd: <http://www.w3.org/2001/XMLSchema#> . <> a prov:InstantaneousEvent, premis:Event, audit:ExternalEvent ; premis:hasEventRelatedAgent "jquser"^^xsd:string, "ImageMagick 6.8.8-9"^^xsd:string, "thumbnail-generator.example.edu"^^xsd:string ; premis:hasEventType audit:derivativeCreation ; premis:hasEventRelatedObject <http://localhost:8080/rest/foo> ; premis:hasEventDateTime "2012-04-30T20:40:40"^^xsd:dateTime .