--- a/mention/prov-mention.html Mon Nov 26 13:00:38 2012 +0100
+++ b/mention/prov-mention.html Mon Nov 26 13:01:20 2012 +0100
@@ -2,16 +2,19 @@
>
<html><head>
- <title>prov-links: linking across provenance bundles</title>
+ <title>Linking Across Provenance Bundles</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <!--
- === NOTA BENE ===
- For the three scripts below, if your spec resides on dev.w3 you can check them
- out in the same tree and use relative links so that they'll work offline,
- -->
-<!-- see http://www.somacon.com/p141.php for table configuration -->
- <style type="text/css">
+<script src="../model/prov-magic.js" class="remove"></script>
+
+<script src="../model/grammar/ll.js" class="remove"></script>
+<script src="../model/provbib.js" class="remove"></script>
+<script src="../model/glossary.js" class="remove"></script>
+
+<script src="http://dev.w3.org/2009/dap/ReSpec.js/js/respec.js" class="remove"></script>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" class="remove"></script>
+
+<style type="text/css">
.note { font-size:small; margin-left:50px }
.entity {
@@ -128,23 +131,6 @@
background: #fff;
}
-/* .inference[id]::before { */
-/* content: "Inference: " attr(id); */
-/* width: 380px; /\* How can we compute the length of "Constraint: " attr(id) *\/ */
-/* } */
-
-
-/* .inference::before { */
-/* content: "Inference"; */
-/* display: block; */
-/* width: 150px; */
-/* margin: -1.5em 0 0.5em 0; */
-/* font-weight: bold; */
-/* border: 1px solid #f00; */
-/* background: #fff; */
-/* padding: 3px 1em; */
-/* } */
-
.syntax {
padding: 1em;
margin: 1em 0em 0em;
@@ -204,24 +190,6 @@
background: #fff;
}
-/* .constraint[id]::before { */
-/* content: "Constraint: " attr(id); */
-/* width: 380px; /\* How can we compute the length of "Constraint: " attr(id) *\/ */
-/* } */
-
-
-/* .constraint::before { */
-/* content: "Constraint"; */
-/* display: block; */
-/* width: 150px; */
-/* margin: -1.5em 0 0.5em 0; */
-/* font-weight: bold; */
-/* border: 1px solid #00f; */
-/* background: #fff; */
-/* padding: 3px 1em; */
-/* } */
-
-
.interpretation {
padding: 1em;
@@ -261,24 +229,6 @@
background: #fff;
}
-/* .definition[id]::before { */
-/* content: "Definition: " attr(id); */
-/* width: 380px; */
-/* } */
-
-
-/* .definition::before { */
-/* content: "Definition"; */
-/* display: block; */
-/* width: 150px; */
-/* margin: -1.5em 0 0.5em 0; */
-/* font-weight: bold; */
-/* border: 1px solid #000; */
-/* background: #fff; */
-/* padding: 3px 1em; */
-/* } */
-
-
.deprecatedconstraint {
padding: 1em;
margin: 1em 0em 0em;
@@ -365,22 +315,6 @@
padding: 3px 1em;
}
-/*
-.anexample[count]::before {
- content: "Example " attr(count) ;
- font-family: sans-serif;
- font-size: 1.6ex;
- font-weight: bold;
-}
-
-.anexample:before {
- content: "Example:";
- font-family: sans-serif;
- font-size: 1.6ex;
- font-weight: bold;
-}
-
-*/
.anexample {
margin-top: 1ex;
@@ -592,11 +526,7 @@
</style>
- <script src="../model/grammar/ll.js" class="remove"></script>
- <script src="../model/provbib.js" class="remove"></script>
- <script src="http://dev.w3.org/2009/dap/ReSpec.js/js/respec.js" class="remove"></script>
- <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" class="remove"></script>
<script type="text/javascript">
/*
@@ -652,192 +582,9 @@
}
}
</script>
- <script src="../model/glossary.js" class="remove"></script>
-
- <script class="remove">
-function insertProductionDefinition(doc, content, name) {
-
- var xml=$.parseXML(content);
-
- var segment = $(xml).find('a[name~="' + name + '"]').parents("tbody")[0];
-
-// return doc._esc((new XMLSerializer()).serializeToString(segment));
- return (new XMLSerializer()).serializeToString(segment);
-}
-
-function insertProductionGeneration(doc, content) { return insertProductionDefinition(doc,content,'prod-prov_n_LL-generationExpression'); }
-
- </script>
- <script class="remove">
- function updateGlossaryRefs() {
- $('.glossary-ref').each(function(index) {
- var ref=$(this).attr('data-ref');
- var span=$(this).attr('data-withspan')
- $(this).removeAttr('data-withspan');
- $(this).removeAttr('data-ref');
-
- $('#'+ref+'.glossary').contents().clone().appendTo($(this));
-// $(this).attr("prov:hadOriginalSource",glossary_hg);
- if (span) {
- $(this).children('dfn').replaceWith(function(){return $('<span>').addClass('dfn').append($(this).contents())});
- }
- });
- }
-
- // function to replace figcaption since not allowed by prov rules, and not transformed by respec.js
- function updateFigCaptions() {
- var figureCount=1;
-
- $('figcaption').each(function(index) {
-
- var myid=$(this).attr('id');
- var mycount=figureCount++;
-
- $(this).replaceWith(function(){return $('<span>').addClass('figcaption').attr('data-count', mycount).attr('id',myid).append("Figure " + mycount)
-.append($('<sup>').append($('<a>').addClass('internalDFN').attr('href','#'+myid).append($('<span>').addClass('diamond').append(" ◊:")))).append(" ")
-.append($(this).contents())});
- });
- }
-
- // function to update caption with linkable diamond
- function updateCaptions() {
- var tableCount=1;
-
- $('caption').each(function(index) {
-
- var myid=$(this).attr('id');
- var mycount=tableCount++;
-
- $(this).attr('data-count', mycount)
-.prepend($('<span>').append("Table " + mycount)
- .append($('<sup>').append($('<a>').addClass('internalDFN').attr('href','#'+myid).append($('<span>').addClass('diamond').append(" ◊:")))).append(" "))
- });
- }
-
- // function to replace figure since not allowed by prov rules, and not transformed by respec.js
- function updateFigures() {
- $('figure').each(function(index) {
-
- var myid=$(this).attr('id');
- var mystyle=$(this).attr('style');
-
- console.log( "figure " + myid + " " + $(this).contents());
-
- $(this).replaceWith(function(){
- var aNewElement=$('<span>').addClass('figure').append($(this).contents());
- if (myid) {
- aNewElement.attr('id',myid)
- }
- if (mystyle) {
- aNewElement.attr('style',mystyle)
- }
- return aNewElement });
-
- // $(this).replaceWith(function(){return $('<span>').addClass('figure').attr('id',myid).attr('style',mystyle).append($(this).contents())});
- console.log( "figure " + myid);
- });
- }
-
- function updateExamples() {
- var count=1;
- $('.anexample').each(function(index) {
-
- var myid=$(this).attr('id');
- var mycount=count++;
-
- if (myid==undefined) {
- myid='example_' + mycount;
- $(this).attr('id',myid);
- }
-
-
- $(this).attr('data-count', mycount).prepend($('<div>').addClass('anexampleTitle')
- //.append($('<a>').addClass('internalDFN').attr('href','#'+myid).append("Example " + mycount))
- .append("Example " + mycount)
- .append($('<sup>').append($('<a>').addClass('internalDFN').attr('href','#'+myid).append($('<span>').addClass('diamond').append(" ◊"))))
- );
-
-
- //console.log( "example for " + myid + " " + mycount);
-
- });
- }
-
-
-
- function updateDfn() {
- var count=1;
- $('dfn').each(function(index) {
-
- var myid=$(this).addClass('internalDFN').attr('id');
-
- $(this).after($('<sup>').append($('<a>').addClass('internalDFN').attr('href','#'+myid).append($('<span>').addClass('diamond').append(" ◊")))); //◊//♦
-
-// console.log( "dfn for " + myid + " ");
-
- });
- }
-
-
- function updateExamplesRefs() {
- $('.anexample-ref').each(function(index) {
-
- myhref=$(this).attr('href');
-
- //console.log( "example ref for " + myhref);
-
- mycount=$(myhref).attr('data-count');
-
- //console.log( "example ref for " + myhref + " " + mycount);
-
- $(this).children('span').replaceWith(function(){return $('<span>').append("Example " + mycount)});
-
- });
-
- $('.anexample').each(function(index) {
- $(this).removeAttr('data-count');
- });
-
- $('caption').each(function(index) {
- $(this).removeAttr('data-count');
- });
-
- $('.figcaption').each(function(index) {
- $(this).removeAttr('data-count');
- });
-
- }
-
-
- function updateSectionRefs() {
-
- $('.section-ref').each(function(index) {
-
- myhref=$(this).attr('href');
-
- console.log( "section ref for " + myhref);
-
- if (myhref.startsWith("#")) {
-
-
- //Problem, this returns all span.secno elements, and concatenates their text
- // I shoul just get the first one
- mysectionNumber=$(myhref).find('span.secno').first().text().trim();
-
-
-
-
- console.log( "section ref for " + myhref + " " + mysectionNumber);
-
- $(this).children('span').replaceWith(function(){return $('<span>').append("Section " + mysectionNumber)});
-
- }
-
- });
- }
-
+ <script type="text/javascript" class="remove">
$(document).ready(function(){
@@ -1039,7 +786,7 @@
which provenance of provenance can be expressed.</p>
<p>
-In applications where provenance is created by multiple parties over time, it is useful for provenance descriptions of one party to link to provenance descriptions of another party. To address this issue, this document introduces a relation allowing an entity description to be linked to another entity description occurring in another bundle.
+In applications where provenance is created by multiple parties over time, it is useful for provenance descriptions created by one party to link to provenance descriptions created by another party. To address this issue, this document introduces a relation allowing an entity description to be linked to another entity description occurring in another bundle.
</p>
<p>The <a href="http://www.w3.org/TR/2012/WD-prov-overview-20121211/">PROV Document Overview</a> describes the overall state of PROV, and should be read before other PROV documents.</p>
@@ -1080,8 +827,59 @@
- <section id="introduction">
- <h2>Introduction</h2>
+<section id="introduction">
+<h2>Introduction</h2>
+
+<p>
+<a href="http://www.w3.org/TR/2012/CR-prov-dm-20121211/">Provenance</a>
+is a record that describes the people, institutions, entities, and
+activities involved in producing, influencing, or delivering a piece
+of data or a thing. The specifications [[!PROV-O]], [[!PROV-DM]],
+[[!PROV-N]], and [[PROV-XML]] have respectively defined the PROV
+ontology, the PROV conceptual model, the PROV notation, and the PROV
+XML schema, allowing provenance descriptions to be expressed,
+represented in various representations, and interchanged between systems across the Web.
+</p>
+
+<p>The provenance of information is crucial in deciding whether information is to be trusted, how it should be integrated with other diverse information sources, and how to give credit to its originators when reusing it. To support this, provenance should be trusted, and therefore, provenance of provenance is itself a critical aspect of an information infrastructure such as the Web. To this end, PROV introduces the concept of <a href="http://www.w3.org/TR/2012/CR-prov-dm-20121211/#concept-bundle">Bundle</a>: defined as a set of provenance descriptions, it is a mechanism by which provenance of provenance can be expressed (see also <a href="http://www.w3.org/TR/2012/CR-prov-o-20121211/#Bundle">Bundle</a> [[!PROV-O]] and <a href="http://www.w3.org/TR/2012/WD-prov-xml-20121211/#term-Bundle">Bundle</a> [[PROV-XML]]). With bundles, blobs of provenance descriptions can be given names and can itself be regarded as entities, whose provenance can be described using PROV. </p>
+
+
+<p>In a distributed environment, it is common to encounter applications that involve multiple parties, where some party creates data and its provenance, whereas another party consumes the data and its provenance.
+
+<verbatim>
+the key aspect of mention of is that you name the entity and the bundle in which the entity is described. The Bundle IS the specialization. ←
+… without mention, you can still link the entities, but you lose the ability to mention the bundle. ←
+
+Timothy Lebo: mentionOf's power comes in when you don't have control over the entire system. ←
+
+ a lab with multiple documents and multiple people. You just want to mention it, not repeat the provenance. ←
+… it's interesting to provide your own view on the entity that you're using. ←
+
+… as a primary producer, I wont' use mention of, but for anyone that wants to augment my Entiteis, they need mentionOf to do it. ←
+
+Curt Tilmes: when yoiu do your own provenance, you ond't need it, but metnionOf lets you "reach into" someone else's bundle. ←
+
+Hook Hua: having it formally in DM would uniformly manifest implementations in different encodigns. we're not relying on serializations to do the linking. ←
+
+
+Graham Klyne: in IETF, "experimental track", mention of is in this. ←
+
+Curt Tilmes: the key is not provenance expression/represtionation, ti's for analysis. ←
+
+
+Hook Hua: it is very important. ←
+
+… each bundle is handled by different institutions, gov entities. ←
+
+… interop is key here. ←
+
+Curt Tilmes: we have a lot of cases where data is processed, then next org processes. each uses their own bundles. ←
+
+… each needs a way to reference across those bundles. ←
+
+… seems that mentionOf provides a capability that will be needed at some point. ←
+
+</verbatim>
</section>
@@ -1095,7 +893,7 @@
<p>An entity <span class="name">e1</span> may be mentioned in a bundle <span class="name">b</span>, which contains some
descriptions about this entity <span class="name">e1</span>: how <span class="name">e1</span> was generated and used, which activities <span class="name">e1</span> is involved with, the agents <span class="name">e1</span> is attributed to, etc. Other bundles may contain other descriptions about the same entity <span class="name">e1</span>.
Some applications may want to interpret
-this entity <span class="name">e1</span> with respect to the descriptions found in the bundle <span class="name">b</span> it occurs in. To this end, PROV allows a new entity <span class="name">e2</span> to be created, which is a specialization of the preceding entity <span class="name">e1</span>, and which presents an additional aspect: the bundle <span class="name">b</span> containing some descriptions of <span class="name">e1</span>. With this relation, applications that process <span class="name">e2</span>
+the latter descriptions of entity <span class="name">e1</span> with respect to the descriptions found in the bundle <span class="name">b</span> it occurs in. To this end, PROV allows a new entity <span class="name">e2</span> to be created, which is a specialization of the preceding entity <span class="name">e1</span>, and which presents an additional aspect: the bundle <span class="name">b</span> containing some descriptions of <span class="name">e1</span>. With this relation, applications that process <span class="name">e2</span>
can know that the attributes of <span class="name">e2</span> may have been computed according to the descriptions of <span class="name">e1</span> in <span class="name">b</span>.</p>
--- a/paq/prov-aq.html Mon Nov 26 13:00:38 2012 +0100
+++ b/paq/prov-aq.html Mon Nov 26 13:01:20 2012 +0100
@@ -84,11 +84,16 @@
"<a href=\"http://doi.acm.org/10.1145/1349026.1349043\">http://doi.acm.org/10.1145/1349026.1349043</a>, "+
"<a href=\"http://dig.csail.mit.edu/2008/06/info-accountability-cacm-weitzner.pdf\">http://dig.csail.mit.edu/2008/06/info-accountability-cacm-weitzner.pdf</a> (alt)",
- "VOiD":
+ "VoID":
"Keith Alexander, Richard Cyganiak, Michael Hausenblas, Jun Zhao. "+
"<a href=\"http://www.w3.org/TR/void/\"><cite>Describing Linked Datasets with the VoID Vocabulary</cite></a>, "+
"W3C Interest Group Note 03 March 2011, "+
- "<a href=\"http://www.w3.org/TR/void/\">http://www.w3.org/TR/void/</a>"
+ "<a href=\"http://www.w3.org/TR/void/\">http://www.w3.org/TR/void/</a>",
+
+ "RDF-CONCEPTS11":
+ "Richard Cyganiak; David Wood; eds. " +
+ "<a href=\"http://www.w3.org/TR/rdf11-concepts/\"><cite>RDF 1.1 Concepts and Abstract Syntax</cite></a>. Working Draft. "+
+ "URL: <a href=\"http://www.w3.org/TR/rdf11-concepts/\">http://www.w3.org/TR/rdf11-concepts/</a>",
};
var respecConfig = {
@@ -373,6 +378,9 @@
<p>
When publishing provenance information, a corresponding <a class="internalDFN">provenance-URI</a> or <a class="internalDFN">service-URI</a> should be discoverable using one or more of the mechanisms described in <a href="#locating-provenance-information" class="sectionRef"></a>.
</p>
+ <p>
+ Provenance may be presented as a <a href="/TR/prov-dm/#component4" class="externalRef">bundle</a>, which <cite>is a named set of provenance descriptions, and is itself an entity, so allowing provenance of provenance to be expressed</cite> [[PROV-DM]]. There is no requirement that a bundle identifier can be dereferenced to access the corresponding provenance, but where practical it is RECOMMENDED that matters be arranged so this is possible. One possible realization of a bundle is that it is published as part of an RDF Dataset [[RDF-CONCEPTS11]] or similar composite structure. To access such a bundle would require accessing the RDF Dataset and then extracting the identified component; this in turn would require knowing a URI or some other way to retrieve the dataset. This specification does not describe a specific mechanism for this; we anticipate that the W3C Linked Data Platform group (<a href="http://www.w3.org/2012/ldp/" class="externalRef">www.w3.org/2012/ldp/</a>) may address this topic in due course.
+ </p>
<!--
<p>
Some alternative practices for accessing provenance information are discussed in <a href="#best-practice" class="sectionRef"></a>
@@ -638,7 +646,7 @@
To facilitate service discovery, we recommend that RDF publication of dataset and service descriptions use the property <code>prov:hasProvenanceService</code> and the provenance service type <code>prov:ProvenanceService</code> as appropriate (see the appendix <a href="#prov-namespace" class="sectionRef"></a>).
</p>
<p>
- For example, a VOiD description [[VOiD]] of a dataset might indicate a provenance service providing information about that dataset, and by extension the resources it contains:
+ For example, a VoID description [[VoID]] of a dataset might indicate a provenance service providing information about that dataset:
</p>
<pre class="pattern">
<http://example.org/dataset/> a void:Dataset ;
@@ -674,8 +682,8 @@
which might result in an HTTP request for provenance looking like this:
</p>
<pre class="pattern">
-GET /provenance/service?<b>target</b>=http://www.example.com/entity&<b>steps</b>=2 HTTP/1.1
-Host: example.com</pre>
+ GET /provenance/service?<b>target</b>=http://www.example.com/entity&<b>steps</b>=2 HTTP/1.1
+ Host: example.com</pre>
<p>
Note that in this case, a "level 3" URI template feature is used [[URI-template]].
</p>
@@ -690,7 +698,7 @@
<section>
<h2>Forward provenance</h2>
<p>
- The mechanisms discussed in previous sections are primarily concerned with accessing historical provenance information, dealing with question such as:
+ The mechanisms discussed in previous sections are primarily concerned with how consumers access historical provenance information from publishers, dealing with questions such as:
</p>
<ul>
<li>what was this resource based upon?</li>
@@ -699,7 +707,7 @@
<li>when was it made?</li>
</ul>
<p>
- These questions can be turned around to consider the forward-looking use of a resource, with questions like:
+ These questions can be turned around to consider a publishers forward-looking use of a resource, like:
</p>
<ul>
<li>what new resources are based on this resource?</li>
@@ -708,22 +716,27 @@
<li><i>etc.</i></li>
</ul>
<p>
- Answering such questions is assumed to be based on cooperation of other parties who actually use a rsource (or maybe of search engines that can discover such usage). To facilitate such cooperation, a resource may have an associated "ping-back" URI which can be presented with forward provenance information about how the resource has been used. The ping-back URI is associated with a resource using mechanisms similar to those used for presenting a <a class="internalDFN">provenance-URI</a>, but using a <code>provPingback</code> link relation instead of <code>hasProvenance</code>. When the resource is used, and new provenance information created that refers to it, the user may perform an HTTP POST operation to the pingback URI where the POST request body contains the new provenance information in one of the recognized provenance formats. The for interoperability, ping-back receiving service SHOULD be able to accept al least PROV-O provenance presented as RDF/XML or Turtle.
+ The ability to answer forward-looking questions requires some cooperation among the parties who use a resource; for example, a consumer could report use directly to the publisher, or a search engine could discover and report such downstream resource usage. To facilitate such cooperation, a publisher may implement a "ping-back" capability.
</p>
<p>
- For example, consider a resource that is published by acme.example.com, and is subsequently used by wile-e.example.org in the construction of some new artifact; we might see an exchange along the following lines. We start with wile-e.example.org retrieving a copy of acme.example.org's resource:
+ A resource may have an associated "ping-back" URI which can be presented with PROV assertions about the resource. The ping-back URI is associated with a resource using mechanisms similar to those used for presenting a <a class="internalDFN">provenance-URI</a>, but using a <code>provPingback</code> link relation instead of <code>hasProvenance</code>. A consumer of the resource, or some other system, may perform an HTTP POST operation to the pingback URI where the POST request body contains new provenance information in one of the recognized provenance formats. For interoperability, ping-back receiving service SHOULD be able to accept al least PROV-O provenance presented as RDF/XML or Turtle.
+ </p>
+ <p>
+ For example, consider a resource that is published by acme.example.com, and is subsequently used by wile-e.example.org in the construction of some new entity; we might see an exchange along the following lines. We start with wile-e.example.org retrieving a copy of acme.example.org's resource:
</p>
<pre class="pattern">
C: GET /super-widget HTTP/1.1
C: Host: acme.example.org
S: 200 OK
- S: Link: <http://acme.example.org/provenance/super-widget>; rel=http://www.w3.org/ns/prov#hasProvenance
- S: Link: <http://acme.example.org/pingback/super-widget>; rel=http://www.w3.org/ns/prov#provPingback
+ S: Link: <http://acme.example.org/provenance/super-widget>;
+ rel=http://www.w3.org/ns/prov#hasProvenance
+ S: Link: <http://acme.example.org/pingback/super-widget>;
+ rel=http://www.w3.org/ns/prov#provPingback
:
(super-widget resource data)</pre>
<p>
- The first of the links in the response is the proveance-URI that has been described previously. The second is a separate resource that exists to receive provenance pingbacks. Later, when a new resource has been created or action performed based upon the acme.example.org/super-widget, new provenance information may be submitted to the pingback thus:
+ The first of the links in the response is the provenance-URI that has been described previously. The second is a distinct resource that exists to receive provenance pingbacks. Later, when a new resource has been created or action performed based upon the acme.example.org/super-widget, new provenance information may be submitted to the pingback thus:
</p>
<pre class="pattern">
C: POST /pingback/super-widget HTTP/1.1
@@ -731,19 +744,22 @@
C: Content-type: text/turtle
:
C:
- C: <http://wile-e.example.org/contraption> prov:tracedTo <http://acme.example.org/super-widget> .
+ C: <http://wile-e.example.org/contraption>
+ C: prov:wasDerivedFrom <http://acme.example.org/super-widget> .
- S: 200 Thanks!
- S: Link: <http://acme.example.org/provenance/super-widget>; rel=http://www.w3.org/ns/prov#hasProvenance;
+ S: 200 OK
+ S: Link: <http://acme.example.org/provenance/super-widget>;
+ rel=http://www.w3.org/ns/prov#hasProvenance;
anchor=http://acme.example.org/super-widget
- S: Link: <http://acme.example.org/pingback/super-widget>; rel=http://www.w3.org/ns/prov#provPingback;
+ S: Link: <http://acme.example.org/pingback/super-widget>;
+ rel=http://www.w3.org/ns/prov#provPingback;
anchor=http://acme.example.org/super-widget</pre>
<p>
- There is no required server response to a pingback POST request.
- In this example the pingback service responds with links to provenance and pingback for the original resource (note that the <code>Link:</code> headers returned contain explicit <code>anchor</code> parameters with the URI of the original resource; without these, the links would relate the indicated URIs to the POST request URI.
+ There is no required information in the server response to a pingback POST request.
+ In this example the pingback service responds with links to provenance and pingback for the original resource (note that the <code>Link:</code> headers returned contain explicit <code>anchor</code> parameters with the URI of the original resource; without these, the links would relate the indicated URIs to the POST request URI <code>http://acme.example.org/pingback/super-widget</code>).
</p>
<p>
- The only defined operation for a pingback resource is a POST, which is required to provide some provenance information that possible to the original resource with which the pingback is associated. A pingback service MAY respond to other requests, but no requirements are imposed on how it responds to such operations. In particular, it is not specified here how a pingback service should respond to an HTTP GET request.
+ The only defined operation for a pingback resource is a POST, which provides a PROV assertion about the original resource with which it is associated. A pingback service MAY respond to other requests, but no requirements are imposed on how it responds to such operations. In particular, it is not specified here how a pingback resource should respond to an HTTP GET request. This leaves open a possibility that the pingback resource MAY have the same URI as the original resource, provided that the original does not respond to POST in some different way.
</p>
</section>
@@ -766,6 +782,9 @@
</p>
<p>Provenance information may be used by audits to establish accountability for information use [[INFO-ACC]] and to verify use of proper processes in information processing activities. Thus, provenance management systems can provide mechanisms to support auditing and enforcement of information handling policies. In such cases, provenance information itself may be a valuable target for attack by malicious agents, and care must be taken to ensure it is stored securely and in a fashion that resists attempts to tamper with it.
</p>
+ <p>
+ The pingback service described in <a href="#forward-provenance" class="sectionRef"></a> might be abused for "link spamming" (similar to the way that weblog ping-backs have been used to direct viewers to spam sites). As with many such services, an application needs to find a balance between maintaining ease of submission for useful information and blocking unwanted information. We have no easy solutions for this problem, and the caveats noted above about establishing integrity of provenance information apply similarly to information provided by ping-back calls.
+ </p>
</section>
<!-- ===================================================================================== -->
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/example_10_association.txt Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,4 @@
+Examples of association between an activity and an agent are:
+ creation of a web page under the guidance of a designer;
+ various forms of participation in a panel discussion, including audience member, panelist, or panel chair;
+ a public event, sponsored by a company, and hosted by a museum;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/example_11_delegation.txt Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,1 @@
+A student publishing a web page describing an academic department could result in both the student and the department being agents associated with the activity. It may not matter which actual student published a web page, but it may matter significantly that the department told the student to put up the web page.
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/example_12_association.txt Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,1 @@
+An example of association between an activity and an agent involving a plan is: an XSLT transform (an activity) launched by a user (an agent) based on an XSL style sheet (a plan).
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/example_13_identification.txt Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,1 @@
+A service may read a same configuration file on two different occasions. Each usage can be identifed by its own identifier, allowing them to be distinguished.
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/example_14_bundle.txt Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,1 @@
+In a decision making situation, decision makers may be presented with the same piece of knowledge, issued by multiple sources. In order to validate this piece of knowledge, decision makers can consider its provenance, but also the provenance of its provenance, which may help determine whether it can be trusted.
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/example_15_collection.txt Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,1 @@
+An example of collection is an archive of documents. Each document has its own provenance, but the archive itself also has some provenance: who maintained it, which documents it contained at which point in time, how it was assembled, etc.
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/example_16_provenance_notation.txt Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,18 @@
+ An activity with identifier a1 and an attribute type with value createFile.
+
+activity(a1, [ prov:type="createFile" ])
+
+Two entities with identifiers e1 and e2.
+
+entity(e1)
+entity(e2)
+
+The activity a1 used e1, and e2 was generated by a1.
+
+used(a1, e1)
+wasGeneratedBy(e2, a1)
+
+The same descriptions, but with an explicit identifier u1 for the usage, and the syntactic marker '-' to mark the absence of identifier in the generation. Both are followed by ';'.
+
+used(u1; a1, e1)
+wasGeneratedBy(-; e2, a1)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/example_17_entity.txt Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,7 @@
+The following expression
+
+ entity(tr:WD-prov-dm-20111215, [ prov:type="document", ex:version="2" ])
+
+states the existence of an entity, denoted by identifier tr:WD-prov-dm-20111215, with type document and version number 2. The attribute ex:version is application specific, whereas the attribute type (see Section 5.7.4.4) is reserved in the PROV namespace.
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/example_18_acivity.txt Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,8 @@
+The following expression
+
+ activity(a1, 2011-11-16T16:05:00, 2011-11-16T16:06:00,
+ [ ex:host="server.example.org", prov:type='ex:edit' ])
+
+states the existence of an activity with identifier a1, start time 2011-11-16T16:05:00, and end time 2011-11-16T16:06:00, running on host server.example.org, and of type edit. The attribute host is application specific (declared in some namespace with prefix ex). The attribute type is a reserved attribute of PROV-DM, allowing for sub-typing to be expressed (see Section 5.7.4.4).
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/example_19_generation.txt Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,8 @@
+ The following expressions
+
+ wasGeneratedBy(e1, a1, 2001-10-26T21:32:52, [ ex:port="p1" ])
+ wasGeneratedBy(e2, a1, 2001-10-26T10:00:00, [ ex:port="p2" ])
+
+state the existence of two generations (with respective times 2001-10-26T21:32:52 and 2001-10-26T10:00:00), at which new entities, identified by e1 and e2, were created by an activity, identified by a1. The first one was available on port p1, whereas the other was available on port p2. The semantics of port are application specific.
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/example_1_entity.txt Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,1 @@
+An entity may be the document at IRI http://www.bbc.co.uk/news/science-environment-17526723, a file in a file system, a car, or an idea.
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/example_20_generation.txt Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,5 @@
+In some cases, we may want to record the time at which an entity was generated without having to specify the activity that generated it. To support this requirement, the activity element in generation is optional. Hence, the following expression indicates the time at which an entity is generated, without naming the activity that did it.
+
+ wasGeneratedBy(e, -, 2001-10-26T21:32:52)
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/example_21_usage.txt Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,7 @@
+The following usages
+
+ used(a1, e1, 2011-11-16T16:00:00, [ ex:parameter="p1" ])
+ used(a1, e2, 2011-11-16T16:00:01, [ ex:parameter="p2" ])
+
+state that the activity identified by a1 used two entities identified by e1 and e2, at times 2011-11-16T16:00:00 and 2011-11-16T16:00:01, respectively; the first one was found as the value of parameter p1, whereas the second was found as value of parameter p2. The semantics of parameter is application specific.
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/example_22_communication.txt Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,7 @@
+Consider two activities a1 and a2, the former performed by a government agency, and the latter by a driver caught speeding.
+
+activity(a1, [ prov:type="traffic regulations enforcing" ])
+activity(a2, [ prov:type="fine paying" ])
+wasInformedBy(a2, a1)
+
+The last line indicates that some implicit entity was generated by a1 and used by a2; this entity may be a traffic ticket that had a notice of fine, amount, and payment mailing details.
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/example_23_start.txt Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,19 @@
+The following example contains the description of an activity a1 (a discussion), which was started at a specific time, and was triggered by an email message e1.
+
+entity(e1, [ prov:type="email message"] )
+activity(a1, [ prov:type="Discuss" ])
+wasStartedBy(a1, e1, -, 2011-11-16T16:05:00)
+
+Furthermore, if the message is also an input to the activity, this can be described as follows:
+
+used(a1, e1, -)
+
+Alternatively, one can also describe the activity that generated the email message.
+
+activity(a0, [ prov:type="Write" ])
+wasGeneratedBy(e1, a0)
+wasStartedBy(a1, e1, a0, 2011-11-16T16:05:00)
+
+If e1 is not known, it would also be valid to write:
+
+wasStartedBy(a1, -, a0, 2011-11-16T16:05:00)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/example_24_start.txt Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,7 @@
+In the following example, a race is started by a bang, and responsibility for this trigger is attributed to an agent ex:Bob.
+
+activity(ex:foot_race)
+entity(ex:bang)
+wasStartedBy(ex:foot_race, ex:bang, -, 2012-03-09T08:05:08-05:00)
+agent(ex:Bob)
+wasAttributedTo(ex:bang, ex:Bob)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/example_25_start.txt Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,11 @@
+In this example, filling the fuel tank was started as a consequence of observing low fuel. The trigger entity is unspecified, it could for instance have been the low fuel warning light, the fuel tank indicator needle position, or the engine not running properly.
+
+activity(ex:filling-fuel)
+activity(ex:observing-low-fuel)
+
+agent(ex:driver, [ prov:type='prov:Person' )
+wasAssociatedWith(ex:filling-fuel, ex:driver)
+wasAssociatedWith(ex:observing-low-fuel, ex:driver)
+
+wasStartedBy(ex:filling-fuel, -, ex:observing-low-fuel, -)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/example_26_end.txt Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,5 @@
+The following example is a description of an activity a1 (editing) that was ended following an approval document e1.
+
+entity(e1, [ prov:type="approval document" ])
+activity(a1, [ prov:type="Editing" ])
+wasEndedBy(a1, e1)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/example_27_invalidation.txt Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,7 @@
+The Painter, a Picasso painting, is known to have been destroyed in a plane accident.
+
+entity(ex:The-Painter)
+agent(ex:Picasso)
+wasAttributedTo(ex:The-Painter, ex:Picasso)
+activity(ex:crash)
+wasInvalidatedBy(ex:The-Painter, ex:crash, 1998-09-03T01:31:00, [ ex:circumstances="plane accident" ])
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/example_28_invalidation.txt Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,8 @@
+The BBC news home page on 2012-04-03 ex:bbcNews2012-04-03 contained a reference to a given news item bbc:news/uk-17595024, but the BBC news home page on the next day did not.
+
+entity(ex:bbcNews2012-04-03)
+hadMember(ex:bbcNews2012-04-03, bbc:news/uk-17595024)
+wasGeneratedBy (ex:bbcNews2012-04-03, -, 2012-04-03T00:00:01)
+wasInvalidatedBy(ex:bbcNews2012-04-03, -, 2012-04-03T23:59:59)
+
+We refer to example Example 43 for further descriptions of the BBC Web site, and to Section 5.6.2 for a description of the relation hadMember.
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/example_29_invalidation.txt Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,24 @@
+In this example, the "buy one beer, get one free" offer expired at the end of the happy hour.
+
+entity(buy_one_beer_get_one_free_offer_during_happy_hour)
+wasAttributedTo(buy_one_beer_get_one_free_offer_during_happy_hour, proprietor)
+wasInvalidatedBy(buy_one_beer_get_one_free_offer_during_happy_hour,
+ -,2012-03-10T18:00:00)
+
+In contrast, in the following descriptions, Bob redeemed the offer 45 minutes before it expired, and got two beers.
+
+entity(buy_one_beer_get_one_free_offer_during_happy_hour)
+wasAttributedTo(buy_one_beer_get_one_free_offer_during_happy_hour, proprietor)
+activity(redeemOffer)
+entity(twoBeers)
+
+wasAssociatedWith(redeemOffer, bob)
+used(redeemOffer,
+ buy_one_beer_get_one_free_offer_during_happy_hour,
+ 2012-03-10T17:15:00)
+wasInvalidatedBy(buy_one_beer_get_one_free_offer_during_happy_hour,
+ redeemOffer,
+ 2012-03-10T17:15:00)
+wasGeneratedBy(twoBeers,redeemOffer)
+
+We see that the offer was both used to be converted into twoBeers and invalidated by the redeemOffer activity: in other words, the combined usage and invalidation indicate consumption of the offer.
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/example_2_activity.txt Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,1 @@
+An activity may be the publishing of a document on the Web, sending a twitter message, extracting metadata embedded in a file, driving a car from Boston to Cambridge, assembling a data set based on a set of measurements, performing a statistical analysis over a data set, sorting news items according to some criteria, running a SPARQL query over a triple store, or editing a file.
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/example_30_derivation.txt Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,12 @@
+The following descriptions are about derivations between e2 and e1, but no information is provided as to the identity of the activity (and usage and generation) underpinning the derivation. In the second line, a type attribute is also provided.
+
+wasDerivedFrom(e2, e1)
+wasDerivedFrom(e2, e1, [ prov:type="physical transform" ])
+
+The following description expresses that activity a, using the entity e1 according to usage u1, derived the entity e2 and generated it according to generation g2. It is followed by descriptions for generation g2 and usage u1.
+
+wasDerivedFrom(e2, e1, a, g2, u1)
+wasGeneratedBy(g2; e2, a, -)
+used(u1; a, e1, -)
+
+With such a comprehensive description of derivation, a program that analyzes provenance can identify the activity underpinning the derivation, it can identify how the preceding entity e1 was used by the activity (e.g. for instance, which argument it was passed as, if the activity is the result of a function invocation), and which output the derived entity e2 was obtained from (say, for a function returning multiple results).
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/example_31_revision.txt Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,7 @@
+Revisiting the example of Section 4.2, we can now state that the report tr:WD-prov-dm-20111215 was a revision of the report tr:WD-prov-dm-20111018.
+
+entity(tr:WD-prov-dm-20111215, [ prov:type='rec54:WD' ])
+entity(tr:WD-prov-dm-20111018, [ prov:type='rec54:WD' ])
+wasDerivedFrom(tr:WD-prov-dm-20111215,
+ tr:WD-prov-dm-20111018,
+ [ prov:type='prov:Revision' ])
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/example_32_quotation.txt Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,15 @@
+The following paragraph is a quote from one of the author's blogs.
+
+ "During the workshop, it became clear to me that the consensus based models (which are often graphical in nature) can not only be formalized but also be directly connected to these database focused formalizations. I just needed to get over the differences in syntax. This could imply that we could have nice way to trace provenance across systems and through databases and be able to understand the mathematical properties of this interconnection."
+
+If wp:thoughts-from-the-dagstuhl-principles-of-provenance-workshop/ denotes the original blog by agent ex:Paul, and dm:bl-dagstuhl denotes the above paragraph, then the following descriptions express that the above paragraph was copied by agent ex:Luc from a part of the blog, attributed to the agent ex:Paul.
+
+entity(wp:thoughts-from-the-dagstuhl-principles-of-provenance-workshop/)
+entity(dm:bl-dagstuhl)
+agent(ex:Luc)
+agent(ex:Paul)
+wasDerivedFrom(dm:bl-dagstuhl,
+ wp:thoughts-from-the-dagstuhl-principles-of-provenance-workshop/,
+ [ prov:type='prov:Quotation' ])
+wasAttributedTo(dm:bl-dagstuhl, ex:Luc)
+wasAttributedTo(wp:thoughts-from-the-dagstuhl-principles-of-provenance-workshop/, ex:Paul)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/example_33_primary_source.txt Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,7 @@
+Let us consider Charles Joseph Minard's flow map of Napoleon's March in 1812, which was published in 1869. Although the map is not a primary source, Minard probably used the journal of Pierre-Irénée Jacob, pharmacist to Napoleon's army during the Russian campaign. This primary source relation can be encoded as follows.
+
+entity(ex:la-campagne-de-Russie-1812-1813, [ prov:type="map" ])
+entity(ex:revue-d-Histoire-de-la-Pharmacie-t-XVIII, [ prov:type="journal" ])
+wasDerivedFrom(ex:la-campagne-de-Russie-1812-1813,
+ ex:revue-d-Histoire-de-la-Pharmacie-t-XVIII,
+ [ prov:type='prov:PrimarySource' ])
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/example_34_agent.txt Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,5 @@
+The following expression is about an agent identified by e1, which is a person, named Alice, with employee number 1234.
+
+agent(e1, [ex:employee="1234", ex:name="Alice", prov:type='prov:Person' ])
+
+It is optional to specify the type of an agent. When present, it is expressed using the prov:type attribute.
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/example_35_attribution.txt Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,7 @@
+Revisiting the example of Section 4.1, we can ascribe tr:WD-prov-dm-20111215 to some agents without an explicit activity.
+
+agent(ex:Paolo, [ prov:type='prov:Person' ])
+agent(ex:Simon, [ prov:type='prov:Person' ])
+entity(tr:WD-prov-dm-20111215, [ prov:type='rec54:WD' ])
+wasAttributedTo(tr:WD-prov-dm-20111215, ex:Paolo, [ prov:type="editorship" ])
+wasAttributedTo(tr:WD-prov-dm-20111215, ex:Simon, [ prov:type="authorship" ])
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/example_36_association.txt Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,12 @@
+In the following example, a designer agent and an operator agent are associated with an activity. The designer's goals are achieved by a workflow ex:wf, described as an entity of type plan.
+
+activity(ex:a, [ prov:type="workflow execution" ])
+agent(ex:ag1, [ prov:type="operator" ])
+agent(ex:ag2, [ prov:type="designer" ])
+wasAssociatedWith(ex:a, ex:ag1, -, [ prov:role="loggedInUser", ex:how="webapp" ])
+wasAssociatedWith(ex:a, ex:ag2, ex:wf, [ prov:role="designer", ex:context="project1" ])
+entity(ex:wf, [ prov:type='prov:Plan' ,
+ ex:label="Workflow 1",
+ prov:location="http://example.org/workflow1.bpel" %% xsd:anyURI ])
+
+Since the workflow ex:wf is itself an entity, its provenance can also be expressed in PROV: it can be generated by some activity and derived from other entities, for instance.
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/example_37_association.txt Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,9 @@
+In some cases, one wants to indicate a plan was followed, without having to specify which agent was involved.
+
+activity(ex:a, [ prov:type="workflow execution" ])
+wasAssociatedWith(ex:a, -, ex:wf)
+entity(ex:wf, [ prov:type='prov:Plan',
+ ex:label="Workflow 1",
+ ex:url="http://example.org/workflow1.bpel" %% xsd:anyURI])
+
+In this case, it is assumed that an agent exists, but it has not been specified.
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/example_38_delegation.txt Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,11 @@
+The following fragment describes three agents: a programmer, a researcher, and a funder. The programmer and researcher are associated with a workflow activity. The programmer acts on behalf of the researcher (line-management) encoding the commands specified by the researcher; the researcher acts on behalf of the funder, who has a contractual agreement with the researcher. The terms 'line-management' and 'contract' used in this example are domain specific.
+
+activity(a,[ prov:type="workflow" ])
+agent(ag1, [ prov:type="programmer" ])
+agent(ag2, [ prov:type="researcher" ])
+agent(ag3, [ prov:type="funder" ])
+wasAssociatedWith(a, ag1, [ prov:role="loggedInUser" ])
+wasAssociatedWith(a, ag2)
+wasAssociatedWith(a, ag3)
+actedOnBehalfOf(ag1, ag2, a, [ prov:type="line-management" ])
+actedOnBehalfOf(ag2, ag3, a, [ prov:type="contract" ])
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/example_39_influence.txt Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,7 @@
+We refer to the example of Section 4.2, and specifically to Figure 3. We could have expressed that the influence of w3:Consortium on tr:WD-prov-dm-20111215.
+
+ wasInfluencedBy(tr:WD-prov-dm-20111215, w3:Consortium)
+
+Instead, it is recommended to express the more specific description:
+
+ wasAttributedTo(tr:WD-prov-dm-20111215, w3:Consortium)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/example_3_usage.txt Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,1 @@
+Examples of generation are the completed creation of a file by a program, the completed creation of a linked data set, and the completed publication of a new version of a document.
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/example_40_bundle.txt Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,40 @@
+Let us consider two entities ex:report1 and ex:report2.
+
+
+entity(ex:report1, [ prov:type="report", ex:version=1 ])
+wasGeneratedBy(ex:report1, -, 2012-05-24T10:00:01)
+entity(ex:report2, [ prov:type="report", ex:version=2])
+wasGeneratedBy(ex:report2, -, 2012-05-25T11:00:01)
+wasDerivedFrom(ex:report2, ex:report1)
+
+Let us assume that Bob observed the creation of ex:report1. A first bundle can be expressed.
+
+
+bundle bob:bundle1
+ entity(ex:report1, [ prov:type="report", ex:version=1 ])
+ wasGeneratedBy(ex:report1, -, 2012-05-24T10:00:01)
+endBundle
+
+In contrast, Alice observed the creation of ex:report2 and its derivation from ex:report1. A separate bundle can also be expressed.
+
+
+bundle alice:bundle2
+ entity(ex:report1)
+ entity(ex:report2, [ prov:type="report", ex:version=2 ])
+ wasGeneratedBy(ex:report2, -, 2012-05-25T11:00:01)
+ wasDerivedFrom(ex:report2, ex:report1)
+endBundle
+
+The first bundle contains the descriptions corresponding to Bob observing the creation of ex:report1. Its provenance can be described as follows.
+
+
+entity(bob:bundle1, [ prov:type='prov:Bundle' ])
+wasGeneratedBy(bob:bundle1, -, 2012-05-24T10:30:00)
+wasAttributedTo(bob:bundle1, ex:Bob)
+
+In contrast, the second bundle is attributed to Alice who observed the derivation of ex:report2 from ex:report1.
+
+
+entity(alice:bundle2, [ prov:type='prov:Bundle' ])
+wasGeneratedBy(alice:bundle2, -, 2012-05-25T11:15:00)
+wasAttributedTo(alice:bundle2, ex:Alice)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/example_41_bundle.txt Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,19 @@
+A provenance aggregator could merge two bundles, resulting in a novel bundle, whose provenance is described as follows.
+
+
+bundle agg:bundle3
+ entity(ex:report1, [ prov:type="report", ex:version=1 ])
+ wasGeneratedBy(ex:report1, -, 2012-05-24T10:00:01)
+
+ entity(ex:report2, [ prov:type="report", ex:version=2 ])
+ wasGeneratedBy(ex:report2, -, 2012-05-25T11:00:01)
+ wasDerivedFrom(ex:report2, ex:report1)
+endBundle
+
+entity(agg:bundle3, [ prov:type='prov:Bundle' ])
+agent(ex:aggregator01, [ prov:type='ex:Aggregator' ])
+wasAttributedTo(agg:bundle3, ex:aggregator01)
+wasDerivedFrom(agg:bundle3, bob:bundle1)
+wasDerivedFrom(agg:bundle3, alice:bundle2)
+
+The new bundle is given a new identifier agg:bundle3 and is attributed to the ex:aggregator01 agent.
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/example_42_alternate.txt Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,1 @@
+User Alice writes an article. In its provenance, she wishes to refer to the precise version of the article with a date-specific IRI, as she might edit the article later. Alternatively, user Bob refers to the article in general, independently of its variants over time.
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/example_43_specialization.txt Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,5 @@
+The BBC news home page on 2012-03-23 ex:bbcNews2012-03-23 is a specialization of the BBC news page in general bbc:news/. This can be expressed as follows.
+
+specializationOf(ex:bbcNews2012-03-23, bbc:news/)
+
+We have created a new qualified name, ex:bbcNews2012-03-23, in the namespace ex, to identify the specific page carrying this day's news, which would otherwise be the generic bbc:news/ page.
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/example_44_alternate.txt Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,8 @@
+A given news item on the BBC News site bbc:news/science-environment-17526723 for desktop is an alternate of a bbc:news/mobile/science-environment-17526723 for mobile devices.
+
+entity(bbc:news/science-environment-17526723,
+ [ prov:type="a news item for desktop"])
+entity(bbc:news/mobile/science-environment-17526723,
+ [ prov:type="a news item for mobile devices"])
+alternateOf(bbc:news/science-environment-17526723,
+ bbc:news/mobile/science-environment-17526723)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/example_45_alternate.txt Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,7 @@
+Considering again the two versions of the technical report tr:WD-prov-dm-20111215 (second working draft) and tr:WD-prov-dm-20111018 (first working draft). They are alternates of each other.
+
+entity(tr:WD-prov-dm-20111018)
+entity(tr:WD-prov-dm-20111215)
+alternateOf(tr:WD-prov-dm-20111018, tr:WD-prov-dm-20111215)
+
+They are both specialization of the page http://www.w3.org/TR/prov-dm/.
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/example_46_collection.txt Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,2 @@
+entity(c0, [ prov:type='prov:EmptyCollection' ]) // c0 is an empty collection
+entity(c1, [ prov:type='prov:Collection' ]) // c1 is a collection, with unknown content
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/example_47_membership.txt Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,10 @@
+In this example, c is a collection known to have e0, e1, and e2 as members, and may have other members.
+
+entity(e0)
+entity(e1)
+entity(e2)
+
+entity(c, [prov:type='prov:Collection' ]) // c is a collection, with unknown content
+hadMember(c, e0)
+hadMember(c, e1)
+hadMember(c, e2)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/example_48_label_attribute.txt Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,5 @@
+The following entity is provided with a label attribute.
+ entity(ex:e1, [ prov:label="This is a human-readable label" ])
+
+The following entity has two label attributes, in French and English.
+ entity(ex:car01, [ prov:label="Voiture 01"@fr, prov:label="Car 01"@en ])
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/example_49_location_attribute.txt Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,5 @@
+The following expression describes entity Mona Lisa, a painting, with a location attribute.
+ entity(ex:MonaLisa, [ prov:location="Le Louvre, Paris", prov:type="StillImage" ])
+
+The following expression describes a cell, at coordinates (5,5), with value 10.
+ entity(ex:cell, [ prov:location="(5,5)", prov:value="10" %% xsd:integer ])
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/example_4_usage.txt Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,1 @@
+Usage examples include a procedure beginning to consume an argument, a service starting to read a value on a port, a program beginning to read a configuration file, or the point at which an ingredient, such as eggs, is being added in a baking activity. Usage may entirely consume an entity (e.g. eggs are no longer available after being added to the mix); in contrast, the same entity may be used multiple times, possibly by different activities (e.g. a file on a file system can be read indefinitely).
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/example_50_role_attribute.txt Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,5 @@
+The following activity is associated with an agent acting as the operator.
+ wasAssociatedWith(a, ag, [ prov:role="operator" ])
+
+In the following expression, the activity ex:div01 used entity ex:cell in the role of divisor.
+ used(ex:div01, ex:cell, [ prov:role="divisor" ])
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/example_51_type_attribute.txt Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,2 @@
+The following describes an agent of type software agent.
+ agent(ag, [ prov:type='prov:SoftwareAgent' ])
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/example_52_value_attribute.txt Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,8 @@
+The following example illustrates the provenance of the number 4 obtained by an activity that computed the length of an input string "abcd". The input and the output are expressed as entities ex:in and ex:out, respectively. They each have a prov:value attribute associated with the corresponding value.
+
+entity(ex:in, [ prov:value="abcd" ])
+entity(ex:out, [ prov:value=4 ])
+activity(ex:len, [ prov:type="string-length" ])
+used(ex:len, ex:in)
+wasGeneratedBy(ex:out, ex:len)
+wasDerivedFrom(ex:out, ex:in)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/example_53_value_attribute.txt Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,9 @@
+Example 52 illustrates an entity with a given value 4. This examples shows that another entity with the same value may be computed differently (by an addition).
+
+entity(ex:in1, [ prov:value=3 ])
+entity(ex:in2, [ prov:value=1 ])
+entity(ex:out2, [ prov:value=4 ]) // ex:out2 also has value 4
+activity(ex:add1, [ prov:type="addition" ])
+used(ex:add1, ex:in1)
+used(ex:add1, ex:in2)
+wasGeneratedBy(ex:out2, ex:add1)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/example_54_value.txt Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,10 @@
+The following examples respectively are the string "abc", the integer number 1, and the IRI "http://example.org/foo".
+ "abc"
+ "1" %% xsd:integer
+ "http://example.org/foo" %% xsd:anyURI
+
+The following example shows a value of type prov:QUALIFIED_NAME (see prov:QUALIFIED_NAME [PROV-N]). The prefix ex must be bound to a namespace declared in a namespace declaration.
+ "ex:value" %% prov:QUALIFIED_NAME
+
+Alternatively, the same value can be expressed using the following convenience notation.
+ 'ex:value'
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/example_55_value_time_instant.txt Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,2 @@
+In the following example, the generation time of entity e1 is expressed according to xsd:dateTime [XMLSCHEMA11-2].
+ wasGeneratedBy(e1,a1, 2001-10-26T21:32:52)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/example_56_extensibility_points.txt Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,2 @@
+In the following example, e2 is a translation of e1, expressed as a sub-type of derivation.
+ wasDerivedFrom(e2,e1, [prov:type='ex:Translation' ])
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/example_57_extensibility_points.txt Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,2 @@
+In the following example, e is described as a Car, a type of entity.
+ entity(e, [prov:type='ex:Car' ])
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/example_58_extensibility_points.txt Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,7 @@
+In the following example, two computers ex:laptop4 and ex:desktop9 are used in different roles in a work activity.
+
+ activity(ex:work)
+ entity(ex:laptop4)
+ entity(ex:desktop9)
+ used(ex:work, ex:laptop4, [prov:role="day-to-day machine"])
+ used(ex:work, ex:desktop9, [prov:role="backup machine"])
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/example_5_usage.txt Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,1 @@
+Let us consider the activity of driving a car from Boston to Cambridge. One might reasonably ask what entities are used and generated by this activity. This is answered by considering that a single artifact may correspond to several entities; in this case, a car in Boston may be a different entity from the same car in Cambridge. Thus, among other things, an entity "car in Boston" would be used, and a new entity "car in Cambridge" would be generated by this activity of driving. The provenance trace of the car might include: designed in Japan, manufactured in Korea, shipped to Boston USA, purchased by customer, driven to Cambridge, serviced by engineer in Cambridge, etc., all of which might be important information when deciding whether or not it represents a sensible second-hand purchase. Or some of it might alternatively be relevant when trying to determine the truth of a web page reporting a traffic violation involving that car. This breadth of provenance allows descriptions of interactions between physical and digital artifacts.
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/example_6_communication.txt Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,1 @@
+The activity of writing a celebrity article was informed by (a communication instance) the activity of intercepting voicemails.
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/example_7_derivation.txt Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,1 @@
+Examples of derivation include the transformation of a relational table into a linked data set, the transformation of a canvas into a painting, the transportation of a work of art from London to New York, and a physical transformation such as the melting of ice into water.
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/example_8_agent.txt Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,1 @@
+Software for checking the use of grammar in a document may be defined as an agent of a document preparation activity; one can also describe its provenance, including for instance the vendor and the version history. A site selling books on the Web, the services involved in the processing of orders, and the companies hosting them are also agents.
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/example_9_attribution.txt Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,1 @@
+A blog post can be attributed to an author, a mobile phone to its manufacturer.
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/example_author_view.txt Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,17 @@
+There was a document tr:WD-prov-dm-20111215, which from the author's perspective was a document in its second version.
+ entity(tr:WD-prov-dm-20111215, [ prov:type="document", ex:version="2" ])
+
+There was an editing activity.
+ activity(ex:edit1, [ prov:type="edit" ])
+
+The document was generated by the editing activity: this was a Generation. Its time is not specified, hence, the marker '-'.
+ wasGeneratedBy(tr:WD-prov-dm-20111215, ex:edit1, -)
+
+There were some agents.
+ agent(ex:Paolo, [ prov:type='prov:Person' ])
+ agent(ex:Simon, [ prov:type='prov:Person' ])
+
+Agents were assigned various responsibilities in the editing activity: contributor and editor. The plan the agent relied upon is not specified, hence, the marker '-'.
+ wasAssociatedWith(ex:edit1, ex:Paolo, -, [ prov:role="editor" ])
+ wasAssociatedWith(ex:edit1, ex:Simon, -, [ prov:role="contributor" ])
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/example_process_view.txt Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,19 @@
+There was a document, a working draft (rec54:WD), which is an entity so that we can describe its provenance. Similar descriptions exist for all entities.
+ entity(tr:WD-prov-dm-20111215, [ prov:type='rec54:WD' ])
+
+There was a publication activity.
+ activity(ex:act2, [ prov:type="publish" ])
+
+The document was generated by the publication activity: this was a Generation. Its time is not specified, hence, the marker '-'.
+ wasGeneratedBy(tr:WD-prov-dm-20111215, ex:act2, -)
+
+The second draft of the document was derived from the first draft: this was a Derivation.
+ wasDerivedFrom(tr:WD-prov-dm-20111215, tr:WD-prov-dm-20111018)
+
+The activity required a publication request: this was a Usage. Its time is not specified, hence, the marker '-'.
+ used(ex:act2, email:2011Dec/0111, -)
+
+The activity was associated with the Consortium agent, and proceeded according to its publication policy: this is an Association.
+ wasAssociatedWith(ex:act2, w3:Consortium, process:rec-advance)
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/example_provenance_attribution.txt Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,29 @@
+PROV-DM offers a construct to name a bundle of provenance descriptions (full details: ex:author-view).
+
+bundle ex:author-view
+
+ agent(ex:Paolo, [ prov:type='prov:Person' ])
+ agent(ex:Simon, [ prov:type='prov:Person' ])
+
+
+...
+
+endBundle
+
+Likewise, the process view can be expressed as a separate named bundle (full details: ex:process-view).
+
+bundle ex:process-view
+
+ agent(w3:Consortium, [ prov:type='prov:Organization' ])
+
+...
+
+endBundle
+
+To express their respective provenance, these bundles must be seen as entities, and all PROV constructs are now available to express their provenance. In the example below, ex:author-view is attributed to the agent ex:Simon, whereas ex:process-view to w3:Consortium.
+
+entity(ex:author-view, [ prov:type='prov:Bundle' ])
+wasAttributedTo(ex:author-view, ex:Simon)
+
+entity(ex:process-view, [ prov:type='prov:Bundle' ])
+wasAttributedTo(ex:process-view, w3:Consortium)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/prov-dm-ex22-PASS.provn Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,9 @@
+bundle
+
+prefix ex <http://example.org/>
+
+activity(ex:a1, [ prov:type="traffic regulations enforcing" ])
+activity(ex:a2, [ prov:type="fine paying" ])
+wasInformedBy(ex:a2, ex:a1)
+
+endBundle
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/prov-dm-ex22-PASS.provx Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<prov:document xmlns:prov="http://www.w3.org/ns/prov#" xmlns:ns2="http://openprovenance.org/collection#" xmlns:ns3="http://openprovenance.org/validation#" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:prim="http://openprovenance.org/primitives#" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pc1="http://www.ipaw.info/pc1/">
+ <prov:activity xmlns:ex="http://example.org/" prov:id="ex:a1">
+ <prov:type xsi:type="xsd:string">traffic regulations enforcing</prov:type>
+ </prov:activity>
+ <prov:activity xmlns:ex="http://example.org/" prov:id="ex:a2">
+ <prov:type xsi:type="xsd:string">fine paying</prov:type>
+ </prov:activity>
+ <prov:wasInformedBy>
+ <prov:effect xmlns:ex="http://example.org/" prov:ref="ex:a2"/>
+ <prov:cause xmlns:ex="http://example.org/" prov:ref="ex:a1"/>
+ </prov:wasInformedBy>
+</prov:document>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/prov-dm-ex22-PASS.ttl Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,14 @@
+@prefix prov: <http://www.w3.org/ns/prov#> .
+@prefix prim: <http://openprovenance.org/primitives#> .
+@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
+@prefix ex: <http://example.org/> .
+@prefix xsi: <http://www.w3.org/2001/XMLSchema-instance> .
+@prefix pc1: <http://www.ipaw.info/pc1/> .
+
+
+ex:a1 a prov:Activity ;
+ prov:type "traffic regulations enforcing"^^xsd:string .
+
+ex:a2 a prov:Activity ;
+ prov:type "fine paying"^^xsd:string ;
+ prov:wasInformedBy ex:a1 .
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/w3c-publication1-PASS.provn Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,39 @@
+bundle
+
+prefix ex <http://example.org/>
+prefix w3 <http://www.w3.org/>
+prefix tr <http://www.w3.org/TR/2011/>
+
+entity(tr:WD-prov-dm-20111215, [ prov:type="document", ex:version="2" ])
+
+agent(ex:Luc, [ prov:type='prov:Person' ])
+agent(ex:Paolo, [ prov:type='prov:Person' ])
+agent(ex:Khalid, [ prov:type='prov:Person' ])
+agent(ex:Stephen, [ prov:type='prov:Person' ])
+agent(ex:Yolanda, [ prov:type='prov:Person' ])
+agent(ex:Ryan, [ prov:type='prov:Person' ])
+agent(ex:Paul, [ prov:type='prov:Person' ])
+agent(ex:Graham, [ prov:type='prov:Person' ])
+agent(ex:Jim, [ prov:type='prov:Person' ])
+agent(ex:Simon, [ prov:type='prov:Person' ])
+agent(ex:James, [ prov:type='prov:Person' ])
+agent(ex:Satya, [ prov:type='prov:Person' ])
+
+activity(ex:edit1,[prov:type="edit"])
+
+wasGeneratedBy(tr:WD-prov-dm-20111215, ex:edit1)
+
+wasAssociatedWith(ex:edit1, ex:Luc, -, [prov:role="editor"])
+wasAssociatedWith(ex:edit1, ex:Paolo, -, [prov:role="editor"])
+wasAssociatedWith(ex:edit1, ex:Khalid, -, [prov:role="contributor"])
+wasAssociatedWith(ex:edit1, ex:Stephen, -, [prov:role="contributor"])
+wasAssociatedWith(ex:edit1, ex:Yolanda, -, [prov:role="contributor"])
+wasAssociatedWith(ex:edit1, ex:Ryan, -, [prov:role="contributor"])
+wasAssociatedWith(ex:edit1, ex:Paul, -, [prov:role="contributor"])
+wasAssociatedWith(ex:edit1, ex:Graham, -, [prov:role="contributor"])
+wasAssociatedWith(ex:edit1, ex:Jim, -, [prov:role="contributor"])
+wasAssociatedWith(ex:edit1, ex:Simon, -, [prov:role="contributor"])
+wasAssociatedWith(ex:edit1, ex:James, -, [prov:role="contributor"])
+wasAssociatedWith(ex:edit1, ex:Satya, -, [prov:role="contributor"])
+
+endBundle
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/w3c-publication1-PASS.provx Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,106 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<prov:document xmlns:prov="http://www.w3.org/ns/prov#" xmlns:ns2="http://openprovenance.org/collection#" xmlns:ns3="http://openprovenance.org/validation#" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:prim="http://openprovenance.org/primitives#" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pc1="http://www.ipaw.info/pc1/">
+ <prov:entity xmlns:tr="http://www.w3.org/TR/2011/" prov:id="tr:WD-prov-dm-20111215">
+ <prov:type xsi:type="xsd:string">document</prov:type>
+ <ex:version xmlns:ex="http://example.org/" xsi:type="xsd:string">2</ex:version>
+ </prov:entity>
+ <prov:agent xmlns:ex="http://example.org/" prov:id="ex:Luc">
+ <prov:type xsi:type="xsd:QName">prov:Person</prov:type>
+ </prov:agent>
+ <prov:agent xmlns:ex="http://example.org/" prov:id="ex:Paolo">
+ <prov:type xsi:type="xsd:QName">prov:Person</prov:type>
+ </prov:agent>
+ <prov:agent xmlns:ex="http://example.org/" prov:id="ex:Khalid">
+ <prov:type xsi:type="xsd:QName">prov:Person</prov:type>
+ </prov:agent>
+ <prov:agent xmlns:ex="http://example.org/" prov:id="ex:Stephen">
+ <prov:type xsi:type="xsd:QName">prov:Person</prov:type>
+ </prov:agent>
+ <prov:agent xmlns:ex="http://example.org/" prov:id="ex:Yolanda">
+ <prov:type xsi:type="xsd:QName">prov:Person</prov:type>
+ </prov:agent>
+ <prov:agent xmlns:ex="http://example.org/" prov:id="ex:Ryan">
+ <prov:type xsi:type="xsd:QName">prov:Person</prov:type>
+ </prov:agent>
+ <prov:agent xmlns:ex="http://example.org/" prov:id="ex:Paul">
+ <prov:type xsi:type="xsd:QName">prov:Person</prov:type>
+ </prov:agent>
+ <prov:agent xmlns:ex="http://example.org/" prov:id="ex:Graham">
+ <prov:type xsi:type="xsd:QName">prov:Person</prov:type>
+ </prov:agent>
+ <prov:agent xmlns:ex="http://example.org/" prov:id="ex:Jim">
+ <prov:type xsi:type="xsd:QName">prov:Person</prov:type>
+ </prov:agent>
+ <prov:agent xmlns:ex="http://example.org/" prov:id="ex:Simon">
+ <prov:type xsi:type="xsd:QName">prov:Person</prov:type>
+ </prov:agent>
+ <prov:agent xmlns:ex="http://example.org/" prov:id="ex:James">
+ <prov:type xsi:type="xsd:QName">prov:Person</prov:type>
+ </prov:agent>
+ <prov:agent xmlns:ex="http://example.org/" prov:id="ex:Satya">
+ <prov:type xsi:type="xsd:QName">prov:Person</prov:type>
+ </prov:agent>
+ <prov:activity xmlns:ex="http://example.org/" prov:id="ex:edit1">
+ <prov:type xsi:type="xsd:string">edit</prov:type>
+ </prov:activity>
+ <prov:wasAssociatedWith>
+ <prov:activity xmlns:ex="http://example.org/" prov:ref="ex:edit1"/>
+ <prov:agent xmlns:ex="http://example.org/" prov:ref="ex:Luc"/>
+ <prov:role xsi:type="xsd:string">editor</prov:role>
+ </prov:wasAssociatedWith>
+ <prov:wasAssociatedWith>
+ <prov:activity xmlns:ex="http://example.org/" prov:ref="ex:edit1"/>
+ <prov:agent xmlns:ex="http://example.org/" prov:ref="ex:Paolo"/>
+ <prov:role xsi:type="xsd:string">editor</prov:role>
+ </prov:wasAssociatedWith>
+ <prov:wasAssociatedWith>
+ <prov:activity xmlns:ex="http://example.org/" prov:ref="ex:edit1"/>
+ <prov:agent xmlns:ex="http://example.org/" prov:ref="ex:Khalid"/>
+ <prov:role xsi:type="xsd:string">contributor</prov:role>
+ </prov:wasAssociatedWith>
+ <prov:wasAssociatedWith>
+ <prov:activity xmlns:ex="http://example.org/" prov:ref="ex:edit1"/>
+ <prov:agent xmlns:ex="http://example.org/" prov:ref="ex:Stephen"/>
+ <prov:role xsi:type="xsd:string">contributor</prov:role>
+ </prov:wasAssociatedWith>
+ <prov:wasAssociatedWith>
+ <prov:activity xmlns:ex="http://example.org/" prov:ref="ex:edit1"/>
+ <prov:agent xmlns:ex="http://example.org/" prov:ref="ex:Yolanda"/>
+ <prov:role xsi:type="xsd:string">contributor</prov:role>
+ </prov:wasAssociatedWith>
+ <prov:wasAssociatedWith>
+ <prov:activity xmlns:ex="http://example.org/" prov:ref="ex:edit1"/>
+ <prov:agent xmlns:ex="http://example.org/" prov:ref="ex:Ryan"/>
+ <prov:role xsi:type="xsd:string">contributor</prov:role>
+ </prov:wasAssociatedWith>
+ <prov:wasAssociatedWith>
+ <prov:activity xmlns:ex="http://example.org/" prov:ref="ex:edit1"/>
+ <prov:agent xmlns:ex="http://example.org/" prov:ref="ex:Paul"/>
+ <prov:role xsi:type="xsd:string">contributor</prov:role>
+ </prov:wasAssociatedWith>
+ <prov:wasAssociatedWith>
+ <prov:activity xmlns:ex="http://example.org/" prov:ref="ex:edit1"/>
+ <prov:agent xmlns:ex="http://example.org/" prov:ref="ex:Graham"/>
+ <prov:role xsi:type="xsd:string">contributor</prov:role>
+ </prov:wasAssociatedWith>
+ <prov:wasAssociatedWith>
+ <prov:activity xmlns:ex="http://example.org/" prov:ref="ex:edit1"/>
+ <prov:agent xmlns:ex="http://example.org/" prov:ref="ex:Jim"/>
+ <prov:role xsi:type="xsd:string">contributor</prov:role>
+ </prov:wasAssociatedWith>
+ <prov:wasAssociatedWith>
+ <prov:activity xmlns:ex="http://example.org/" prov:ref="ex:edit1"/>
+ <prov:agent xmlns:ex="http://example.org/" prov:ref="ex:Simon"/>
+ <prov:role xsi:type="xsd:string">contributor</prov:role>
+ </prov:wasAssociatedWith>
+ <prov:wasAssociatedWith>
+ <prov:activity xmlns:ex="http://example.org/" prov:ref="ex:edit1"/>
+ <prov:agent xmlns:ex="http://example.org/" prov:ref="ex:James"/>
+ <prov:role xsi:type="xsd:string">contributor</prov:role>
+ </prov:wasAssociatedWith>
+ <prov:wasAssociatedWith>
+ <prov:activity xmlns:ex="http://example.org/" prov:ref="ex:edit1"/>
+ <prov:agent xmlns:ex="http://example.org/" prov:ref="ex:Satya"/>
+ <prov:role xsi:type="xsd:string">contributor</prov:role>
+ </prov:wasAssociatedWith>
+</prov:document>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/w3c-publication1-PASS.ttl Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,159 @@
+@prefix prov: <http://www.w3.org/ns/prov#> .
+@prefix prim: <http://openprovenance.org/primitives#> .
+@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
+@prefix ex: <http://example.org/> .
+@prefix tr: <http://www.w3.org/TR/2011/> .
+@prefix xsi: <http://www.w3.org/2001/XMLSchema-instance> .
+@prefix pc1: <http://www.ipaw.info/pc1/> .
+
+
+tr:WD-prov-dm-20111215 a prov:Entity ;
+ prov:type "document"^^xsd:string ;
+ ex:version "2"^^xsd:string .
+
+ex:Luc a prov:Agent ;
+ prov:type "prov:Person"^^xsd:QName .
+
+ex:Paolo a prov:Agent ;
+ prov:type "prov:Person"^^xsd:QName .
+
+ex:Khalid a prov:Agent ;
+ prov:type "prov:Person"^^xsd:QName .
+
+ex:Stephen a prov:Agent ;
+ prov:type "prov:Person"^^xsd:QName .
+
+ex:Yolanda a prov:Agent ;
+ prov:type "prov:Person"^^xsd:QName .
+
+ex:Ryan a prov:Agent ;
+ prov:type "prov:Person"^^xsd:QName .
+
+ex:Paul a prov:Agent ;
+ prov:type "prov:Person"^^xsd:QName .
+
+ex:Graham a prov:Agent ;
+ prov:type "prov:Person"^^xsd:QName .
+
+ex:Jim a prov:Agent ;
+ prov:type "prov:Person"^^xsd:QName .
+
+ex:Simon a prov:Agent ;
+ prov:type "prov:Person"^^xsd:QName .
+
+ex:James a prov:Agent ;
+ prov:type "prov:Person"^^xsd:QName .
+
+ex:Satya a prov:Agent ;
+ prov:type "prov:Person"^^xsd:QName .
+
+ex:edit1 a prov:Activity ;
+ prov:type "edit"^^xsd:string .
+
+_:node17chb2nssx1 a prov:Association ;
+ prov:agent ex:Luc .
+
+ex:edit1 prov:qualifiedAssociation _:node17chb2nssx1 .
+
+_:node17chb2nssx1 prov:role "editor"^^xsd:string .
+
+ex:edit1 prov:wasAssociatedWith ex:Luc .
+
+_:node17chb2nssx2 a prov:Association ;
+ prov:agent ex:Paolo .
+
+ex:edit1 prov:qualifiedAssociation _:node17chb2nssx2 .
+
+_:node17chb2nssx2 prov:role "editor"^^xsd:string .
+
+ex:edit1 prov:wasAssociatedWith ex:Paolo .
+
+_:node17chb2nssx3 a prov:Association ;
+ prov:agent ex:Khalid .
+
+ex:edit1 prov:qualifiedAssociation _:node17chb2nssx3 .
+
+_:node17chb2nssx3 prov:role "contributor"^^xsd:string .
+
+ex:edit1 prov:wasAssociatedWith ex:Khalid .
+
+_:node17chb2nssx4 a prov:Association ;
+ prov:agent ex:Stephen .
+
+ex:edit1 prov:qualifiedAssociation _:node17chb2nssx4 .
+
+_:node17chb2nssx4 prov:role "contributor"^^xsd:string .
+
+ex:edit1 prov:wasAssociatedWith ex:Stephen .
+
+_:node17chb2nssx5 a prov:Association ;
+ prov:agent ex:Yolanda .
+
+ex:edit1 prov:qualifiedAssociation _:node17chb2nssx5 .
+
+_:node17chb2nssx5 prov:role "contributor"^^xsd:string .
+
+ex:edit1 prov:wasAssociatedWith ex:Yolanda .
+
+_:node17chb2nssx6 a prov:Association ;
+ prov:agent ex:Ryan .
+
+ex:edit1 prov:qualifiedAssociation _:node17chb2nssx6 .
+
+_:node17chb2nssx6 prov:role "contributor"^^xsd:string .
+
+ex:edit1 prov:wasAssociatedWith ex:Ryan .
+
+_:node17chb2nssx7 a prov:Association ;
+ prov:agent ex:Paul .
+
+ex:edit1 prov:qualifiedAssociation _:node17chb2nssx7 .
+
+_:node17chb2nssx7 prov:role "contributor"^^xsd:string .
+
+ex:edit1 prov:wasAssociatedWith ex:Paul .
+
+_:node17chb2nssx8 a prov:Association ;
+ prov:agent ex:Graham .
+
+ex:edit1 prov:qualifiedAssociation _:node17chb2nssx8 .
+
+_:node17chb2nssx8 prov:role "contributor"^^xsd:string .
+
+ex:edit1 prov:wasAssociatedWith ex:Graham .
+
+_:node17chb2nssx9 a prov:Association ;
+ prov:agent ex:Jim .
+
+ex:edit1 prov:qualifiedAssociation _:node17chb2nssx9 .
+
+_:node17chb2nssx9 prov:role "contributor"^^xsd:string .
+
+ex:edit1 prov:wasAssociatedWith ex:Jim .
+
+_:node17chb2nssx10 a prov:Association ;
+ prov:agent ex:Simon .
+
+ex:edit1 prov:qualifiedAssociation _:node17chb2nssx10 .
+
+_:node17chb2nssx10 prov:role "contributor"^^xsd:string .
+
+ex:edit1 prov:wasAssociatedWith ex:Simon .
+
+_:node17chb2nssx11 a prov:Association ;
+ prov:agent ex:James .
+
+ex:edit1 prov:qualifiedAssociation _:node17chb2nssx11 .
+
+_:node17chb2nssx11 prov:role "contributor"^^xsd:string .
+
+ex:edit1 prov:wasAssociatedWith ex:James .
+
+_:node17chb2nssx12 a prov:Association ;
+ prov:agent ex:Satya .
+
+ex:edit1 prov:qualifiedAssociation _:node17chb2nssx12 .
+
+_:node17chb2nssx12 prov:role "contributor"^^xsd:string .
+
+ex:edit1 prov:wasAssociatedWith ex:Satya .
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/w3c-publication2-PASS.provn Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,42 @@
+bundle
+
+prefix ex <http://example.org/>
+
+prefix w3 <http://www.w3.org/>
+prefix tr <http://www.w3.org/TR/2011/>
+prefix process <http://www.w3.org/2005/10/Process-20051014/tr.html#>
+prefix email <https://lists.w3.org/Archives/Member/w3c-archive/>
+prefix chairs <https://lists.w3.org/Archives/Member/chairs/>
+prefix trans <http://www.w3.org/2005/08/01-transitions.html#>
+prefix rec54 <http://www.w3.org/2001/02pd/rec54#>
+
+
+ entity(tr:WD-prov-dm-20111018, [ prov:type='rec54:WD' ])
+ entity(tr:WD-prov-dm-20111215, [ prov:type='rec54:WD' ])
+ entity(process:rec-advance, [ prov:type='prov:Plan' ])
+
+
+ entity(chairs:2011OctDec/0004, [ prov:type='trans:transreq' ])
+ entity(email:2011Oct/0141, [ prov:type='trans:pubreq' ])
+ entity(email:2011Dec/0111, [ prov:type='trans:pubreq' ])
+
+
+ wasDerivedFrom(tr:WD-prov-dm-20111215, tr:WD-prov-dm-20111018)
+
+
+ activity(ex:act1,-,-,[prov:type="publish"])
+ activity(ex:act2,-,-,[prov:type="publish"])
+
+ wasGeneratedBy(tr:WD-prov-dm-20111018, ex:act1, -)
+ wasGeneratedBy(tr:WD-prov-dm-20111215, ex:act2, -)
+
+ used(ex:act1, chairs:2011OctDec/0004, -)
+ used(ex:act1, email:2011Oct/0141, -)
+ used(ex:act2, email:2011Dec/0111, -)
+
+ agent(w3:Consortium, [ prov:type='prov:Organization' ])
+
+ wasAssociatedWith(ex:act1, w3:Consortium, process:rec-advance)
+ wasAssociatedWith(ex:act2, w3:Consortium, process:rec-advance)
+
+endBundle
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/w3c-publication2-PASS.provx Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<prov:document xmlns:prov="http://www.w3.org/ns/prov#" xmlns:ns2="http://openprovenance.org/collection#" xmlns:ns3="http://openprovenance.org/validation#" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:prim="http://openprovenance.org/primitives#" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pc1="http://www.ipaw.info/pc1/">
+ <prov:entity xmlns:tr="http://www.w3.org/TR/2011/" prov:id="tr:WD-prov-dm-20111018">
+ <prov:type xmlns:rec54="http://www.w3.org/2001/02pd/rec54#" xsi:type="xsd:QName">rec54:WD</prov:type>
+ </prov:entity>
+ <prov:entity xmlns:tr="http://www.w3.org/TR/2011/" prov:id="tr:WD-prov-dm-20111215">
+ <prov:type xmlns:rec54="http://www.w3.org/2001/02pd/rec54#" xsi:type="xsd:QName">rec54:WD</prov:type>
+ </prov:entity>
+ <prov:entity xmlns:process="http://www.w3.org/2005/10/Process-20051014/tr.html#" prov:id="process:rec-advance">
+ <prov:type xsi:type="xsd:QName">prov:Plan</prov:type>
+ </prov:entity>
+ <prov:entity xmlns:chairs="https://lists.w3.org/Archives/Member/chairs/" prov:id="chairs:2011OctDec/0004">
+ <prov:type xmlns:trans="http://www.w3.org/2005/08/01-transitions.html#" xsi:type="xsd:QName">trans:transreq</prov:type>
+ </prov:entity>
+ <prov:entity xmlns:email="https://lists.w3.org/Archives/Member/w3c-archive/" prov:id="email:2011Oct/0141">
+ <prov:type xmlns:trans="http://www.w3.org/2005/08/01-transitions.html#" xsi:type="xsd:QName">trans:pubreq</prov:type>
+ </prov:entity>
+ <prov:entity xmlns:email="https://lists.w3.org/Archives/Member/w3c-archive/" prov:id="email:2011Dec/0111">
+ <prov:type xmlns:trans="http://www.w3.org/2005/08/01-transitions.html#" xsi:type="xsd:QName">trans:pubreq</prov:type>
+ </prov:entity>
+ <prov:wasDerivedFrom>
+ <prov:generatedEntity xmlns:tr="http://www.w3.org/TR/2011/" prov:ref="tr:WD-prov-dm-20111215"/>
+ <prov:usedEntity xmlns:tr="http://www.w3.org/TR/2011/" prov:ref="tr:WD-prov-dm-20111018"/>
+ </prov:wasDerivedFrom>
+ <prov:activity xmlns:ex="http://example.org/" prov:id="ex:act1">
+ <prov:type xsi:type="xsd:string">publish</prov:type>
+ </prov:activity>
+ <prov:activity xmlns:ex="http://example.org/" prov:id="ex:act2">
+ <prov:type xsi:type="xsd:string">publish</prov:type>
+ </prov:activity>
+ <prov:wasGeneratedBy>
+ <prov:entity xmlns:tr="http://www.w3.org/TR/2011/" prov:ref="tr:WD-prov-dm-20111018"/>
+ <prov:activity xmlns:ex="http://example.org/" prov:ref="ex:act1"/>
+ </prov:wasGeneratedBy>
+ <prov:wasGeneratedBy>
+ <prov:entity xmlns:tr="http://www.w3.org/TR/2011/" prov:ref="tr:WD-prov-dm-20111215"/>
+ <prov:activity xmlns:ex="http://example.org/" prov:ref="ex:act2"/>
+ </prov:wasGeneratedBy>
+ <prov:used>
+ <prov:activity xmlns:ex="http://example.org/" prov:ref="ex:act1"/>
+ <prov:entity xmlns:chairs="https://lists.w3.org/Archives/Member/chairs/" prov:ref="chairs:2011OctDec/0004"/>
+ </prov:used>
+ <prov:used>
+ <prov:activity xmlns:ex="http://example.org/" prov:ref="ex:act1"/>
+ <prov:entity xmlns:email="https://lists.w3.org/Archives/Member/w3c-archive/" prov:ref="email:2011Oct/0141"/>
+ </prov:used>
+ <prov:used>
+ <prov:activity xmlns:ex="http://example.org/" prov:ref="ex:act2"/>
+ <prov:entity xmlns:email="https://lists.w3.org/Archives/Member/w3c-archive/" prov:ref="email:2011Dec/0111"/>
+ </prov:used>
+ <prov:agent xmlns:w3="http://www.w3.org/" prov:id="w3:Consortium">
+ <prov:type xsi:type="xsd:QName">prov:Organization</prov:type>
+ </prov:agent>
+ <prov:wasAssociatedWith>
+ <prov:activity xmlns:ex="http://example.org/" prov:ref="ex:act1"/>
+ <prov:agent xmlns:w3="http://www.w3.org/" prov:ref="w3:Consortium"/>
+ <prov:plan xmlns:process="http://www.w3.org/2005/10/Process-20051014/tr.html#" prov:ref="process:rec-advance"/>
+ </prov:wasAssociatedWith>
+ <prov:wasAssociatedWith>
+ <prov:activity xmlns:ex="http://example.org/" prov:ref="ex:act2"/>
+ <prov:agent xmlns:w3="http://www.w3.org/" prov:ref="w3:Consortium"/>
+ <prov:plan xmlns:process="http://www.w3.org/2005/10/Process-20051014/tr.html#" prov:ref="process:rec-advance"/>
+ </prov:wasAssociatedWith>
+</prov:document>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testcases/prov-dm/w3c-publication2-PASS.ttl Mon Nov 26 13:01:20 2012 +0100
@@ -0,0 +1,71 @@
+@prefix prov: <http://www.w3.org/ns/prov#> .
+@prefix process: <http://www.w3.org/2005/10/Process-20051014/tr.html#> .
+@prefix chairs: <https://lists.w3.org/Archives/Member/chairs/> .
+@prefix prim: <http://openprovenance.org/primitives#> .
+@prefix w3: <http://www.w3.org/> .
+@prefix xsi: <http://www.w3.org/2001/XMLSchema-instance> .
+@prefix rec54: <http://www.w3.org/2001/02pd/rec54#> .
+@prefix ex: <http://example.org/> .
+@prefix email: <https://lists.w3.org/Archives/Member/w3c-archive/> .
+@prefix tr: <http://www.w3.org/TR/2011/> .
+@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
+@prefix pc1: <http://www.ipaw.info/pc1/> .
+@prefix trans: <http://www.w3.org/2005/08/01-transitions.html#> .
+
+
+tr:WD-prov-dm-20111018 a prov:Entity ;
+ prov:type "rec54:WD"^^xsd:QName .
+
+tr:WD-prov-dm-20111215 a prov:Entity ;
+ prov:type "rec54:WD"^^xsd:QName .
+
+process:rec-advance a prov:Entity ;
+ prov:type "prov:Plan"^^xsd:QName .
+
+<https://lists.w3.org/Archives/Member/chairs/2011OctDec/0004> a prov:Entity ;
+ prov:type "trans:transreq"^^xsd:QName .
+
+<https://lists.w3.org/Archives/Member/w3c-archive/2011Oct/0141> a prov:Entity ;
+ prov:type "trans:pubreq"^^xsd:QName .
+
+<https://lists.w3.org/Archives/Member/w3c-archive/2011Dec/0111> a prov:Entity ;
+ prov:type "trans:pubreq"^^xsd:QName .
+
+tr:WD-prov-dm-20111215 prov:wasDerivedFrom tr:WD-prov-dm-20111018 .
+
+ex:act1 a prov:Activity ;
+ prov:type "publish"^^xsd:string .
+
+ex:act2 a prov:Activity ;
+ prov:type "publish"^^xsd:string .
+
+tr:WD-prov-dm-20111018 prov:wasGeneratedBy ex:act1 .
+
+tr:WD-prov-dm-20111215 prov:wasGeneratedBy ex:act2 .
+
+ex:act1 prov:used <https://lists.w3.org/Archives/Member/chairs/2011OctDec/0004> , <https://lists.w3.org/Archives/Member/w3c-archive/2011Oct/0141> .
+
+ex:act2 prov:used <https://lists.w3.org/Archives/Member/w3c-archive/2011Dec/0111> .
+
+w3:Consortium a prov:Agent ;
+ prov:type "prov:Organization"^^xsd:QName .
+
+_:node17chbub73x1 a prov:Association ;
+ prov:agent w3:Consortium .
+
+ex:act1 prov:qualifiedAssociation _:node17chbub73x1 .
+
+process:rec-advance a prov:Plan .
+
+_:node17chbub73x1 prov:hadPlan process:rec-advance .
+
+ex:act1 prov:wasAssociatedWith w3:Consortium .
+
+_:node17chbub73x2 a prov:Association ;
+ prov:agent w3:Consortium .
+
+ex:act2 prov:qualifiedAssociation _:node17chbub73x2 .
+
+_:node17chbub73x2 prov:hadPlan process:rec-advance .
+
+ex:act2 prov:wasAssociatedWith w3:Consortium .