Clone wiki

ontologies / Provenance

Use Case: Change the value of a statement about a format . Track its provenance Here is a use case of tracking a minimum changeset based on the OPMV ontology (which is a stripped-down version of the OPM, which TNA is planning to use). The OPM has a more complex representation of time (as duration vs. points) which doesn’t seem to fit our use case. The OPMV uses the W3C Time ontology which has defined an “instant” which we can use to define the point in time an event occurs. Even though we are using the term “Process”, we are flattening the time duration, so you can think of it more as an event.

Note that the main primitives are Artifact, Process , Agent and Time.

  • The Artifact is the RDF triple. It is represented by a name, its named graph.
  • The Process is the event that is occurring – insertion, deletion
  • The Agent is the user who interacts with the system
  • Time is represented as an instant, which marks when a Process occurs.

<In this example, I used the same URI to identify the format PDF. In practice, some may think it more appropriate to create a new URI to represent changed information. If we are using the UDFR ID as the main handle, perhaps it doesn’t matter what URI we have representing the Format (or any other entities in the model).

Joe erroneously enters “PDF developedBy MicrosoftCorporation”. Later in time, Bob fixes the error to state “PDF developedBy Adobe Systems”

ex:g1 { udfr:PDF udfr:developedBy udfr:Microsoft . }

<now we generate a provenance record by establishing that g1 is an artifact that was performed at a particular time by a particular agent> <not clear which graph this assertion should go in – a changeset / provenance graph? The advantage here would be that all the “audit” queries would be against a single graph. Not unlike our previous mySQL scenario. Note that it looks like the Process itself is a blank node. If we can’t deal with blank nodes, we may need to create a process as well.>

eg:prov { eg:g1 rdf:type , opmv:Artifact ; opmv:wasGeneratedAt eg:t1 ; opmv:wasGeneratedBy [ rdf:type opmv:Process ; opmv:wasPerformedBy eg:p1 ] .

eg:t1 rdf:type time:Instant ; time:inXSDDateTime "2011-04-12T14:51:00Z"xsd:dateTime ; .

eg:p1 rdf:type udfr:Agent ; skos:prefLabel “Joe”. } --- Now, we introduce a change. ex:g2 { udfr:PDF udfr:developedBy udfr:AdobeSystems . } Ex:prov { eg:g2 rdf:type , opmv:Artifact ; opmv:wasGeneratedAt eg:t2 ; opmv:wasGeneratedBy [ rdf:type opmv:Process ; opmv:wasPerformedBy eg:p2 ]; opmv:wasDerivedFrom eg:g1 .

eg:t2 rdf:type time:Instant ; time:inXSDDateTime "2011-05-05T15:11:00Z"xsd:dateTime ; .