--- a/model/ProvenanceModel.html Thu Nov 17 17:15:44 2011 +0000
+++ b/model/ProvenanceModel.html Thu Nov 17 17:16:19 2011 +0000
@@ -420,6 +420,9 @@
<section id="prov-dm-overview">
<h2>PROV-DM Overview </h2>
+<div class="note"> Figure and text in this section needs to be adapted to the new relations between activity and agent. The term "characterizing attribute" needs also to be removed from the figure.
+</div>
+
<p>
The following ER diagram provides a high level overview of the <strong>structure of PROV-DM assertions</strong>. Examples of provenance assertions that conform to this schema are provided in the next section (note: cardinality constraints on the associations are 0..* unless otherwise stated)</p>
@@ -477,22 +480,22 @@
<p>
-Event evt1: Alice creates (pe0) an empty file in /share/crime.txt. We denote this e1.
+Event evt1: Alice creates (a0) an empty file in /share/crime.txt. We denote this e1.
</p>
<p>
-Event evt2: Bob appends (pe1) the following line to /share/crime.txt:</p>
+Event evt2: Bob appends (a1) the following line to /share/crime.txt:</p>
<pre>
There was a lot of crime in London last month.
</pre>
<p>We denote this e2.</p>
-<p>Event evt3: Charles emails (pe2) the contents of /share/crime.txt, as an
+<p>Event evt3: Charles emails (a2) the contents of /share/crime.txt, as an
attachment, which we refer to as e4. (We specifically refer to a copy of the file that is uploaded on the mail server.)
</p>
<p>
-Event evt4: David edits (pe3) file /share/crime.txt as follows.</p>
+Event evt4: David edits (a3) file /share/crime.txt as follows.</p>
<pre>
There was a lot of crime in London and New-York last month.
</pre>
@@ -500,10 +503,10 @@
We denote this e3.
</p>
-<p>Event evt5: Edith emails (pe4) the contents of /share/crime.txt as an attachment, referred to as e5.
+<p>Event evt5: Edith emails (a4) the contents of /share/crime.txt as an attachment, referred to as e5.
</p>
-<p>Event evt6: between events evt4 and evt5, someone (unspecified) runs a spell checker (pe5) on the file /share/crime.txt.
+<p>Event evt6: between events evt4 and evt5, someone (unspecified) runs a spell checker (a5) on the file /share/crime.txt.
The file after spell checking is referred to as e6.
</p>
@@ -517,12 +520,12 @@
Entity Records (described in <a href="#record-Entity">Section Entity</a>). The file in its various forms and its copies are modelled as entity records, corresponding to multiple characterizations, as per scenario. The entity records are identified by <span class="name">e0</span>, ..., <span class="name">e6</span>.</p>
<pre>
entity(e0, [ prov:type="File", ex:path="/shared/crime.txt", ex:creator="Alice" ])
-entity(e1, [ prov:type="File", ex:path="/shared/crime.txt", ex:creator="Alice", content="" ])
-entity(e2, [ prov:type="File", ex:path="/shared/crime.txt", ex:creator="Alice", content="There was a lot of crime in London last month."])
-entity(e3, [ prov:type="File", ex:path="/shared/crime.txt", ex:creator="Alice", content="There was a lot of crime in London and New York last month."])
+entity(e1, [ prov:type="File", ex:path="/shared/crime.txt", ex:creator="Alice", ex:content="" ])
+entity(e2, [ prov:type="File", ex:path="/shared/crime.txt", ex:creator="Alice", ex:content="There was a lot of crime in London last month."])
+entity(e3, [ prov:type="File", ex:path="/shared/crime.txt", ex:creator="Alice", ex:content="There was a lot of crime in London and New York last month."])
entity(e4, [ ])
entity(e5, [ ])
-entity(e6, [ prov:type="File", ex:path="/shared/crime.txt", ex:creator="Alice", content="There was a lot of crime in London and New York last month.", spellchecked="yes"])
+entity(e6, [ prov:type="File", ex:path="/shared/crime.txt", ex:creator="Alice", ex:content="There was a lot of crime in London and New York last month.", ex:spellchecked="yes"])
</pre>
@@ -546,26 +549,26 @@
<p>
Activity Records (described in <a href="#record-Activity">Section Activity</a>) represent activities in the scenario.</p>
<pre>
-activity(pe0,create-file,t,,[])
-activity(pe1,add-crime-in-london,t+1,,[])
-activity(pe2,email,t+2,,[])
-activity(pe3,edit-London-New-York,t+3,,[])
-activity(pe4,email,t+4,,[])
-activity(pe5,spellcheck,,,[])
+activity(a0, create-file, 2011-11-16T16:00:00,,[])
+activity(a1, add-crime-in-london, 2011-11-16T16:05:00,,[])
+activity(a2, email, 2011-11-16T17:00:00,,[])
+activity(a3, edit-London-New-York, 2011-11-17T09:00:00,,[])
+activity(a4, email, 2011-11-17T09:30:00,,[])
+activity(a5, spellcheck,,,[])
</pre>
<p>
Generation Records (described in <a href="#record-Generation">Section Generation</a>) represent the event at which a file is created in a specific form. Attributes are used to describe the modalities according to which a given entity is generated by a given activity. The interpretation of attributes is application specific. Illustrations of such attributes for the scenario are: no attribute is provided for <span class="name">e0</span>;
-<span class="name">e2</span> was generated by the editor's save function; <span class="name">e4</span> can be found on the smtp port, in the attachment section of the mail message; <span class="name">e6</span> was produced on the standard output of <span class="name">pe5</span>.</p>
+<span class="name">e2</span> was generated by the editor's save function; <span class="name">e4</span> can be found on the smtp port, in the attachment section of the mail message; <span class="name">e6</span> was produced on the standard output of <span class="name">a5</span>. Two identifiers <span class="name">g1</span> and <span class="name">g2</span> identify the generation records referenced in derivations introduced below.</p>
<pre>
-wasGeneratedBy(e0, pe0, [])
-wasGeneratedBy(e1, pe0, [ex:fct="create"])
-wasGeneratedBy(e2, pe1, [ex:fct="save"])
-wasGeneratedBy(e3, pe3, [ex:fct="save"])
-wasGeneratedBy(e4, pe2, [ex:port="smtp", ex:section="attachment"])
-wasGeneratedBy(e5, pe4, [ex:port="smtp", ex:section="attachment"])
-wasGeneratedBy(e6, pe5, [ex:file="stdout"])
+wasGeneratedBy(e0, a0, [])
+wasGeneratedBy(e1, a0, [ex:fct="create"])
+wasGeneratedBy(e2, a1, [ex:fct="save"])
+wasGeneratedBy(e3, a3, [ex:fct="save"])
+wasGeneratedBy(g1, e4, a2, [ex:port="smtp", ex:section="attachment"])
+wasGeneratedBy(g2, e5, a4, [ex:port="smtp", ex:section="attachment"])
+wasGeneratedBy(e6, a5, [ex:file="stdout"])
</pre>
@@ -574,23 +577,23 @@
Usage Records (described in <a href="#record-Usage">Section Usage</a>) represent the event by which a file is read by an activity.
Likewise, attributes describe the modalities according to which the various entities are used by activities. Illustrations of such attributes are:
-<span class="name">e1</span> is used in the context of <span class="name">pe1</span>'s <span class="name">load</span> functionality; <span class="name">e2</span> is used by <span class="name">pe2</span> in the context of its attach functionality; <span class="name">e3</span> is used on the standard input by <span class="name">pe5</span>. </p>
+<span class="name">e1</span> is used in the context of <span class="name">a1</span>'s <span class="name">load</span> functionality; <span class="name">e2</span> is used by <span class="name">a2</span> in the context of its attach functionality; <span class="name">e3</span> is used on the standard input by <span class="name">a5</span>. Two identifiers <span class="name">u1</span> and <span class="name">u2</span> identify the Usage records referenced in derivations introduced below.</p>
<pre>
-used(pe1,e1,[ex:fct="load"])
-used(pe3,e2,[ex:fct="load"])
-used(pe2,e2,[ex:fct="attach"])
-used(pe4,e3,[ex:fct="attach"])
-used(pe5,e3,[ex:file="stdin"])
+used(a1,e1,[ex:fct="load"])
+used(a3,e2,[ex:fct="load"])
+used(u1,a2,e2,[ex:fct="attach"])
+used(u2,a4,e3,[ex:fct="attach"])
+used(a5,e3,[ex:file="stdin"])
</pre>
<p>
-Derivation Records (described in <a href="#Derivation-Relation">Section Derivation Relation</a>) express that an entity is derived from another. The first two are expressed in their compact version, whereas the following two are expressed in their full version, including the activity underpinning the derivation, and relevant attribute describing the usage and generation of entities.</p>
+Derivation Records (described in <a href="#Derivation-Relation">Section Derivation Relation</a>) express that an entity is derived from another. The first two are expressed in their compact version, whereas the following two are expressed in their full version, including the activity underpinning the derivation, and associated usage (<span class="name">u1</span>, <span class="name">u2</span>) and generation (<span class="name">g1</span>, <span class="name">g2</span>) records.</p>
<pre>
wasDerivedFrom(e2,e1)
wasDerivedFrom(e3,e2)
-wasDerivedFrom(e4,e2,pe2,[ex:port="smtp", ex:section="attachment"],[ex:fct="attach"])
-wasDerivedFrom(e5,e3,pe4,[ex:port="smtp", ex:section="attachment"],[ex:fct="attach"])
+wasDerivedFrom(e4,e2,a2,g1,u2)
+wasDerivedFrom(e5,e3,a4,g2,u2)
</pre>
@@ -609,15 +612,15 @@
<p>
Agent Records (described at <a href="#record-Agent">Section Agent</a>): the various users are represented as agents, themselves being a type of entity.</p>
<pre>
-agent(a1, [ prov:type="prov:Person", ex:name="Alice" ])
-
-agent(a2, [ prov:type="prov:Person", ex:name="Bob" ])
-
-agent(a3, [ prov:type="prov:Person", ex:name="Charles" ])
-
-agent(a4, [ prov:type="prov:Person", ex:name="David" ])
-
-agent(a5, [ prov:type="prov:Person", ex:name="Edith" ])
+agent(ag1, [ prov:type="prov:Person", ex:name="Alice" ])
+
+agent(ag2, [ prov:type="prov:Person", ex:name="Bob" ])
+
+agent(ag3, [ prov:type="prov:Person", ex:name="Charles" ])
+
+agent(ag4, [ prov:type="prov:Person", ex:name="David" ])
+
+agent(ag5, [ prov:type="prov:Person", ex:name="Edith" ])
</pre>
@@ -625,11 +628,11 @@
<p>
Activity Assocation Records (described in <a href="#record-ActivityAssociation">Section Activity Association</a>): the association of an agent with an activity is expressed with , and the nature of this association is described by attributes. Illustrations of such attributes include the role of the participating agent, as creator, author and communicator (role is a reserved attribute in PROV-DM).</p>
<pre>
-wasAssociatedWith(pe0,a1, [prov:role="creator"])
-wasAssociatedWith(pe1,a2, [prov:role="author"])
-wasAssociatedWith(pe2,a3, [prov:role="communicator"])
-wasAssociatedWith(pe3,a4, [prov:role="author"])
-wasAssociatedWith(pe4,a5, [prov:role="communicator"])
+wasAssociatedWith(a0, ag1, [prov:role="creator"])
+wasAssociatedWith(a1, ag2, [prov:role="author"])
+wasAssociatedWith(a2, ag3, [prov:role="communicator"])
+wasAssociatedWith(a3, ag4, [prov:role="author"])
+wasAssociatedWith(a4, ag5, [prov:role="communicator"])
</pre>
</section>
@@ -840,9 +843,9 @@
<p>
The following activity assertion</p>
<pre class="codeexample">
-activity(pe1,add-crime-in-london,t+1,t+1+epsilon,[ex:host="server.example.org",prov:type="app:edit"])
+activity(a1,add-crime-in-london,2011-11-16T16:05:00,2011-11-16T16:06:00,[ex:host="server.example.org",prov:type="app:edit"])
</pre>
-<p>identified by identifier <span class="name">id</span>, states the existence of an activity with recipe link <span class="name">add-crime-in-london</span>, start time <span class="name">t+1</span>, and end time <span class="name">t+1+epsilon</span>, running on host <span class="name">server.example.org</span>, and of type <span class="name">edit</span> (declared in some namespace with prefix <span class="name">app</span>). The attribute <span class="name">host</span> is application specific, but MUST hold for the duration of activity. The attribute <span class="name">type</span> is a reserved attribute of PROV-DM, allowing for subtyping to be expressed.</p>
+<p>identified by identifier <span class="name">id</span>, states the existence of an activity with recipe link <span class="name">add-crime-in-london</span>, start time <span class="name">2011-11-16T16:05:00</span>, and end time <span class="name">2011-11-16T16:06:00</span>, running on host <span class="name">server.example.org</span>, and of type <span class="name">edit</span> (declared in some namespace with prefix <span class="name">app</span>). The attribute <span class="name">host</span> is application specific, but MUST hold for the duration of activity. The attribute <span class="name">type</span> is a reserved attribute of PROV-DM, allowing for subtyping to be expressed.</p>
</div>
<p>The mere existence of an activity assertion entails some event ordering in the world, since the start event precedes the end event. This is expressed by constraint <a href="#start-precedes-end">start-precedes-end</a>.</p>
@@ -998,7 +1001,7 @@
<tr><td></td><td>Entity</td><td>Activity</td><td>Agent</td><td>Note</td></tr>
<tr><td>Entity</td><td>wasComplementOf</td><td>wasGeneratedBy</td><td>-</td><td>hasAnnotation</td></tr>
<tr><td>Activity</td><td>used</td><td>-</td><td>wasStartedBy<br>wasEndedBy<br>wasAssociatedWith</td><td>hasAnnotation</td></tr>
-<tr><td rowspan="2">Agent</td><td rowspan="2">-</td><td colspan="2">actedOnBehalfOf</td><td rowspan="2">hasAnnotation</td></tr>
+<tr><td rowspan="2">Agent</td><td rowspan="2">-</td><td colspan="2" border="0">actedOnBehalfOf</td><td rowspan="2">hasAnnotation</td></tr>
<tr><td>-</td><td>wasComplementOf</td></tr>
<tr><td>Note</td><td>-</td><td>-</td><td>-</td><td>hasAnnotation</td></tr>
<caption>PROV-DM Relation Summary</caption>
@@ -1081,9 +1084,9 @@
The rationale for this constraint is as follows.
If two activities sequentially set different values to some attribute by means of two different generate events, then they generate distinct entities. Alternatively, for two activities to generate an entity simultaneously, they would require some synchronization by which they agree the entity is released for use; the end of this synchronization would constitute the actual generation of the entity, but is performed by a single activity. This unicity constraint is formalized as follows.
-<div class='constraint' id='generation-unicity'>Given an entity record denoted by <span class="name">e</span>, two activity records denoted by <span class="name">pe1</span> and <span class="name">pe2</span>, and two sets of attribute-value pairs <span class="name">attrs1</span> and <span class="name">attrs2</span>,
-<span class='conditional'>if</span> the records <span class="name">wasGeneratedBy(e,pe1,attrs1)</span> and <span class="name">wasGeneratedBy(e,pe2,attrs2)</span> exist in the scope of a given account,
-<span class='conditional'>then</span> <span class="name">pe1</span>=<span class="name">pe2</span> and <span class="name">attrs1</span>=<span class="name">attrs2</span>.
+<div class='constraint' id='generation-unicity'>Given an entity record denoted by <span class="name">e</span>, two activity records denoted by <span class="name">a1</span> and <span class="name">a2</span>, and two sets of attribute-value pairs <span class="name">attrs1</span> and <span class="name">attrs2</span>,
+<span class='conditional'>if</span> the records <span class="name">wasGeneratedBy(e,a1,attrs1)</span> and <span class="name">wasGeneratedBy(e,a2,attrs2)</span> exist in the scope of a given account,
+<span class='conditional'>then</span> <span class="name">a1</span>=<span class="name">a2</span> and <span class="name">attrs1</span>=<span class="name">attrs2</span>.
</div>
<div class='note'>TODO: Introduce the well-formed-ness constraint in a entirely separate section.</div>
@@ -1223,10 +1226,10 @@
In the following example, a programmer and a researcher agents are asserted to be associated with an activity.
<pre class="codeexample">
activity(a,[prov:type="workflow"])
-agent(e1,[prov:type="programmer"]
-agent(e2,[prov:type="researcher"]
-wasAssociatedWith(a,e1,[prov:role="loggedInUser"])
-wasAssociatedWith(a,e1,[prov:role="designer"])
+agent(ag1,[prov:type="programmer"]
+agent(ag2,[prov:type="researcher"]
+wasAssociatedWith(a,ag1,[prov:role="loggedInUser", ex:how="webapp"])
+wasAssociatedWith(a,ag2,[prov:role="designer", ex:context="phd"])
</pre>
</div>
@@ -1401,13 +1404,16 @@
</div>
<div class="anexample">
-In the following example, a programmer and a researcher agents are asserted. The porgrammer is associated with a workflow activity, as the logged-in user. The programmer acts on behalf of the research, encoding the commands specified by the researcher.
+In the following example, a programmer, a researcher and a funder agents are asserted. The porgrammer and researcher are associated with a workflow activity. The programmer acts on behalf of the researcher (delegation) encoding the commands specified by the researcher; the researcher acts on behalf of the funder, who has an contractual agreement with the researcher.
<pre class="codeexample">
activity(a,[prov:type="workflow"])
-agent(e1,[prov:type="programmer"]
-agent(e2,[prov:type="researcher"]
-wasAssociatedWith(a,e1,[prov:role="loggedInUser"])
-actedOnBehalfOf(e1,e2,a)
+agent(ag1,[prov:type="programmer"]
+agent(ag2,[prov:type="researcher"]
+agent(ag3,[prov:type="funder"]
+wasAssociatedWith(a,ag1,[prov:role="loggedInUser"])
+wasAssociatedWith(a,ag2)
+actedOnBehalfOf(ag1,ag2,a,[prov:type="delegation"])
+actedOnBehalfOf(ag2,ag3,a,[prov:type="contract"])
</pre>
</div>
@@ -1543,12 +1549,12 @@
[<span class="name">,</span>
<span class="nonterminal">identifier</span>
<span class="name">,</span>
-<span class="nonterminal">generationAttributeValues</span>
+<span class="nonterminal">generationIdentifier</span>
<span class="name">,</span>
-<span class="nonterminal">useAttributesValues</span>]
+<span class="nonterminal">usageIdentifier</span>]
<span class="name">)</span><br/>
-<span class="nonterminal">generationAttributeValues</span>:= <span class="nonterminal">attributeValues</span><br/>
-<span class="nonterminal">useAttributeValues</span>:= <span class="nonterminal">attributeValues</span><br/>
+<span class="nonterminal">generationIdentifier</span>:= <span class="nonterminal">identifier</span><br/>
+<span class="nonterminal">usageIdentifier</span>:= <span class="nonterminal">usage</span><br/>
<span class="nonterminal">pe-independent-derivationRecord</span>:=
<span class="name">wasEventuallyDerivedFrom</span>
@@ -1573,15 +1579,16 @@
<section id="pe-linked-derivationRecord">
<h4>Activity Linked Derivation Record</h4>
-<p>an activity linked derivation record, which, by definition of a derivation record, is a representation that some entity is transformed from, created from, or affected by another entity, also entails the existence of an activity record that represents an activity that transforms, creates or affects this entity.</p>
-
-<p>In its full form, a activity linked derivation record, written <span class="name">wasDerivedFrom(e2,e1,pe,attrs2,attrs1)</span> in PROV-ASN:</p>
+<p>An activity linked derivation record, which, by definition of a derivation record, is a representation that some entity is transformed from, created from, or affected by another entity, also entails the existence of an activity record that represents an activity that transforms, creates or affects this entity.</p>
+
+<p>In its full form, an activity linked derivation record, written <span class="name">wasDerivedFrom(id, e2,e1,a,g2,u1)</span> in PROV-ASN, contains:</p>
<ul>
-<li> refers to an entity record identified by <span class="name">e2</span>, which is a representation of the generated entity;</li>
-<li> refers to an entity record identified by <span class="name">e1</span>, which is a representation of the used entity;</li>
-<li> refers to an activity record identified by <span class="name">pe</span>, which is a representation of the activity using and generating the above entities;</li>
-<li> contains a set of attribute-value pairs <span class="name">attrs2</span>, which describes the generation record pertaining to <span class="name">e2</span> and <span class="name">pe</span>;</li>
-<li> contains a set of attribute-value pairs <span class="name">attrs1</span>, which describes the usage record pertaining to <span class="name">e1</span> and <span class="name">pe</span>.</li>
+<li><em>id</em>: an OPTIONAL identifier <span class="name">id</span> identifying the derivation record;</li>
+<li><em>generatedEntity</em>: the identifier <span class="name">e2</span> of an entity record, which is a representation of the generated entity;</li>
+<li><em>usedEntity</em>: the identifier <span class="name">e1</span> of an entity record, which is a representation of the used entity;</li>
+<li><em>activity</em>: an identifier <span class="name">a</span> of an activity record, which is a representation of the activity using and generating the above entities;</li>
+<li><em>generation</em>: an identifier <span class="name">g2</span> of the generation record pertaining to <span class="name">e2</span> and <span class="name">a</span>;</li>
+<li><em>usage</em>: an identifier <span class="name">u1</span> of the usage record pertaining to <span class="name">e1</span> and <span class="name">a</span>;</li>
</ul>
@@ -1598,20 +1605,20 @@
<div class="anexample">
<p>The following derivation assertions</p>
<pre class="codeexample">
-wasDerivedFrom(e5,e3,pe4,[ex:channel="out"],[ex:channel="in"])
+wasDerivedFrom(e5,e3,a4,g2,u2)
wasDerivedFrom(e3,e2)
</pre>
<p>
state the existence of activity-linked derivations;
-the first expresses that the activity represented by the activity <span class="name">pe4</span>, by
-using the entity denoted by <span class="name">e3</span> obtained on the <span class="name">in</span> channel
+the first expresses that the activity represented by the activity <span class="name">a4</span>, by
+using the entity denoted by <span class="name">e3</span> obtained during use documented by usage record <span class="name">u2</span>
derived the
-entity denoted by <span class="name">e5</span> and generated it on
-channel <span class="name">out</span>. The second is similar for <span class="name">e3</span> and <span class="name">e2</span>, but it leaves the activity record and associated attributes implicit. The meaning of "channel" is application specific.
+entity denoted by <span class="name">e5</span> and generated it according to generation record
+ <span class="name">g2</span>. The second is similar for <span class="name">e3</span> and <span class="name">e2</span>, but it leaves the activity record and associated attributes implicit.
</p>
</div>
-
+<!--
<p>If a derivation record holds for <span class="name">e2</span> and <span class="name">e1</span>, then it means that the entity represented by the entity record identified by <span class="name">e1</span> has an influence on the entity represented by the entity record identified by <span class="name">e2</span>, which is captured by a dependency between their attribute values; it also implies temporal ordering. These are specified as follows:</p>
<div class='deprecatedconstraint' id='derivation-attributes'>Given an activity record denoted by <span class="name">pe</span>, entity records denoted by <span class="name">e1</span> and <span class="name">e2</span>, set of attribute-value pairs <span class="name">attrs1</span> and <span class="name">attrs2</span>, the assertion <span class="name">wasDerivedFrom(e2,e1,pe,attrs2,attrs1)</span>
@@ -1621,6 +1628,7 @@
attributes of the entity record identified by <span class="name">e1</span>. </div>
<div class='note'>The WG has approved that this constraint should be dropped. It and others had some influence on derivation transitivity. They will be removed from the documents once the proposal on derivation has been approved. </div>
+-->
<div class='interpretation' id='derivation-use-generation-ordering'>Given an activity record identified by <span class="name">pe</span>, entity records identified by <span class="name">e1</span> and <span class="name">e2</span>, sets of attribute-value pairs <span class="name">attrs1</span> and <span class="name">attrs2</span>, <span class='conditional'>if</span> the assertion <span class="name">wasDerivedFrom(e2,e1,pe,attrs2,attrs1)</span>
@@ -1630,7 +1638,7 @@
the entity denoted by <span class="name">e2</span>.
</div>
-
+<!-- If there is a generation/usage record, then this is now trivial!
<p>
The following inference rule states that a generation and usage event can be inferred from an activity linked derivation record.
</p>
@@ -1640,6 +1648,7 @@
<span class="name">wasGeneratedBy(e2,pe,attrs2)</span> and <span class="name">used(pe,e1,attrs1)</span> also
hold.
</div>
+-->
<p>The compact version has the same meaning as the fully formed
@@ -1647,10 +1656,15 @@
record is known to exist, though it does not need to be
asserted. This is formalized by the following inference rule,
referred to as <em>activity introduction</em>:</p>
-<div class='constraint' id="derivation-activity">
-<span class='conditional'>If</span> <span class="name">wasDerivedFrom(e2,e1)</span> holds, <span class='conditional'>then</span> there exists an activity record identified by <span class="name">pe</span>, and sets of attribute-value pairs <span class="name">attrs1</span>,<span class="name">attrs2</span>,
+<div class='constraint' id="activity-introduction">
+<span class='conditional'>If</span> <span class="name">wasDerivedFrom(e2,e1)</span> holds, <span class='conditional'>then</span> there exist an activity record identified by <span class="name">a</span>, a usage record identified by <span class="name">u</span>, and a generation record identified by <span class="name">g</span>
such that:
- <span class="name">wasGeneratedBy(e2,pe,attrs2)</span> and <span class="name">used(pe,e1,attrs1)</span>.
+<pre class="codeexample">
+activity(a,attrs)
+wasGeneratedBy(g,e2,a,gAttrs)
+used(u,a,e1,uAttrs)
+</pre>
+for sets of attribute-value pairs <span class="name">gAttrs</span>, <span class="name">uAttrs</span>, and <span class="name">attrs</span>.
</div>
@@ -1659,12 +1673,12 @@
<p>
Note that inferring derivation from usage and generation does not hold
-in general. Indeed, when a generation <span class="name">wasGeneratedBy(e2,pe,attrs2)</span>
-precedes <span class="name">used(pe,e1,attrs1)</span>, for
-some <span class="name">e1</span>, <span class="name">e2</span>, <span class="name">attrs1</span>, <span class="name">attrs2</span>, and <span class="name">pe</span>, one
-cannot infer derivation <span class="name">wasDerivedFrom(e2,e1,pe,attrs2,attrs1)</span>
-or <span class="name">wasDerivedFrom(e2,e1)</span> since the values of attributes
-of <span class="name">e2</span> cannot possibly be determined by the values of attributes
+in general. Indeed, when a generation <span class="name">wasGeneratedBy(g, e2, a, attrs2)</span>
+precedes <span class="name">used(u, a, e1, attrs1)</span>, for
+some <span class="name">e1</span>, <span class="name">e2</span>, <span class="name">attrs1</span>, <span class="name">attrs2</span>, and <span class="name">a</span>, one
+cannot infer derivation <span class="name">wasDerivedFrom(e2, e1, a, g, u)</span>
+or <span class="name">wasDerivedFrom(e2,e1)</span> since
+of <span class="name">e2</span> cannot possibly be determined by
of <span class="name">e1</span>, given the creation of <span class="name">e2</span> precedes the use
of <span class="name">e1</span>.
</p>
@@ -1686,7 +1700,9 @@
derive <span class="name">wasGeneratedBy(e2,pe,attrs2)</span> because identifier <span class="name">e1</span> may occur in usage records referring to
many activity records, but they may not be referred to in generation records containing identifier <span class="name">e2</span>.</p>
-
+<div class="note">This property holds for account where
+generation-unicity applies. Maybe move it to separate section with all
+related material. </div>
</section>
@@ -1734,8 +1750,6 @@
<p>Hence, an activity independent derivation record can be directly asserted or can be inferred (by means of <a href="#derivation-linked-independent">derivation-linked-independent</a>).</p>
-<div class='note'>Should we link wasEventuallyDerivedFrom to attributes as we did for wasDerivedFrom? If so, this type of inference should be presented upfront, for both.</div>
-
@@ -1910,11 +1924,11 @@
...
wasDerivedFrom(e2,e1)
...
- activity(pe0,create-file,t)
+ activity(a0,create-file,t)
...
- wasGeneratedBy(e0,pe0,[])
+ wasGeneratedBy(e0,a0,[])
...
- wasAssociatedWith(pe4,a5, [prov:role="communicator"]) )
+ wasAssociatedWith(a4, ag5, [prov:role="communicator"]) )
</pre>
<p>contains the set of provenance records of section <a href="#example-prov-asn-encoding">example-prov-asn-encoding</a>, is asserted by agent <span class="name">http://example.org/asserter</span>, and is identified by identifier <span class="name">acc0</span>.
</p>
@@ -1965,12 +1979,12 @@
http://example.org/asserter2,
entity(e0, [ prov:type="File", ex:path="/shared/crime.txt", ex:creator="Alice" ])
...
- activity(pe1,create-file,t1)
+ activity(a1,create-file,t1)
...
- wasGeneratedBy(e0,pe1,[ex:fct="create"])
+ wasGeneratedBy(e0,a1,[ex:fct="create"])
... )
</pre>
-<p>with identifier <span class="name">acc2</span>, containing assertions by asserter by <span class="name">http://example.org/asserter2</span> stating that the entity represented by entity record identified by <span class="name">e0</span> was generated by an activity represented by activity record identified by <span class="name">pe1</span> instead of <span class="name">pe0</span> in the previous account <span class="name">acc0</span>. If accounts <span class="name">acc0</span> and <span class="name">acc2</span> are merged together, the resulting set of records violates <a href="#generation-unicity">generation-unicity</a>.</p>
+<p>with identifier <span class="name">acc2</span>, containing assertions by asserter by <span class="name">http://example.org/asserter2</span> stating that the entity represented by entity record identified by <span class="name">e0</span> was generated by an activity represented by activity record identified by <span class="name">a1</span> instead of <span class="name">a0</span> in the previous account <span class="name">acc0</span>. If accounts <span class="name">acc0</span> and <span class="name">acc2</span> are merged together, the resulting set of records violates <a href="#generation-unicity">generation-unicity</a>.</p>
</div>
<p>Account records constitute a scope for identifiers. Since accounts can be nested, their scope can also be nested; thus, the scope of identifiers should be understood in the context of such nested scopes. When a record with an identifier occurs directly within an account, then its identifier denotes this record in the scope of this account, except in sub-accounts where records with the same identifier occur. </p>
@@ -1982,16 +1996,16 @@
account(acc3,
http://example.org/asserter1,
entity(e0, [ prov:type="File", ex:path="/shared/crime.txt", ex:creator="Alice" ])
- activity(pe0,create-file,t)
- wasGeneratedBy(e0,pe0,[])
+ activity(a0,create-file,t)
+ wasGeneratedBy(e0,a0,[])
account(acc4,
http://example.org/asserter2,
- entity(e1, [ prov:type="File", ex:path="/shared/crime.txt", ex:creator="Alice", content="" ])
- activity(pe0,copy-file,t)
- wasGeneratedBy(e1,pe0,[ex:fct="create"])
- isComplement(e1,e0)))
+ entity(e1, [ prov:type="File", ex:path="/shared/crime.txt", ex:creator="Alice", ex:content="" ])
+ activity(a0,copy-file,t)
+ wasGeneratedBy(e1,a0,[ex:fct="create"])
+ wasComplementOf(e1,e0)))
</pre>
-<p>Alternatively, an activity record identified by <span class="name">pe0</span> occurs in each of the two accounts. Therefore, each activity record is asserted in a separate scope, and therefore may represent different activities in the world.
+<p>Alternatively, an activity record identified by <span class="name">a0</span> occurs in each of the two accounts. Therefore, each activity record is asserted in a separate scope, and therefore may represent different activities in the world.
</p>
</div>
@@ -2077,19 +2091,15 @@
<p>
-The following control record describes the role of the agent identified by <span class="name">a5</span> in this control relation with activity <span class="name">pe4</span>. </p>
+The following start record describes the role of the agent identified by <span class="name">ag</span> in this start relation with activity <span class="name">a</span>. </p>
<pre class="example">
- wasControlledBy(pe4,a5, [prov:role="communicator"])
+ wasStartedBy(a,ag, [prov:role="program-operator"])
</pre>
<p>From this specification's viewpoint, an the interpretation of an attribute declared in a namespace other than prov-dm is out of
scope.</p>
-<div class='note'>The following text needs to find a home. It is proposed to introduce optional identifiers for relations, and this will be largely redundant.
-</div>
-
-
<p>
@@ -2298,7 +2308,6 @@
<div class='issue'>There are a number of commonly used provenance relations in particular for the web that are not in the model. For practical use and uptake, it would be good to have definitions of these in the provenance model. These concepts should be defined in terms of the already existing "core" concepts. This is <a href="http://www.w3.org/2011/prov/track/issues/44">ISSUE-44</a>.</div>
-<div class='note'>Revision and participation should probably be moved here. </div>
<div class='note'>The types of these relations need to be made explicit.</div>
@@ -2411,7 +2420,8 @@
<div class="note">Proposal to change the name to "Dependencies amongst Activities" to avoid ambiguities</div>
-<p>PROV-DM allows two forms of temporal relationships between activities to be expressed.
+<p>PROV-DM allows temporal relationships between activities to be expressed.
+
An <dfn id="InformationFlowOrdering">information flow ordering record</dfn> is a representation that an entity was generated by an activity, before it was used by another activity.
A <dfn id="ControlOrdering">control ordering record</dfn> is a representation that the end of
an activity precedes the start of another activity.
@@ -2448,69 +2458,72 @@
<p>
A information flow ordering record, written as
-<span class="name">wasInformedBy(pe2,pe1)</span> in PROV-ASN:
+<span class="name">wasInformedBy(a2,a1)</span> in PROV-ASN:
<ul>
-<li> refers to an activity record identified by <span class="name">pe2</span>;
-<li> refers to an activity record identified by <span class="name">pe1</span>
+<li> refers to an activity record identified by <span class="name">a2</span>;
+<li> refers to an activity record identified by <span class="name">a1</span>
</ul>
and states information flow ordering between the activities represented by these records, specified as follows.
-<div class='constraint' id='wasInformedBy'>Given two activity records identified by <span class="name">pe1</span> and <span class="name">pe2</span>,
- the record <span class="name">wasInformedBy(pe2,pe1)</span>
+<div class='constraint' id='wasInformedBy'>Given two activity records identified by <span class="name">a1</span> and <span class="name">a2</span>,
+ the record <span class="name">wasInformedBy(a2,a1)</span>
holds, <span class='conditional'>if and only if</span>
there is an entity record identified by <span class="name">e</span> and sets of attribute-value pairs <span class="name">attrs1</span> and <span class="name">attrs2</span>,
-such that <span class="name">wasGeneratedBy(e,pe1,attrs1)</span> and <span class="name">used(pe2,e,attrs2)</span> hold.
+such that <span class="name">wasGeneratedBy(e,a1,attrs1)</span> and <span class="name">used(a2,e,attrs2)</span> hold.
</div>
-<p>The relationship <span class="name">wasInformedBy</span> is not transitive. Indeed, consider the records <span class="name">wasInformedBy(pe2,pe1)</span> and <span class="name">wasInformedBy(pe3,pe2)</span>, the record
-<span class="name">wasInformedBy(pe3,pe1)</span>, may not necessarily hold, as illustrated by the following event line.
+<p>The relationship <span class="name">wasInformedBy</span> is not transitive. Indeed, consider the records <span class="name">wasInformedBy(a2,a1)</span> and <span class="name">wasInformedBy(a3,a2)</span>, the record
+<span class="name">wasInformedBy(a3,a1)</span>, may not necessarily hold, as illustrated by the following event line.
<pre>
- ------ pe1
+ ------ a1
|
e1
|
- ------- pe2
+ ------- a2
|
e2
|
- ----- pe3
+ ----- a3
</pre>
-<p>The end in activity record identified by <span class="name">pe3</span> precedes the start in activity record identified by <span class="name">pe1</span>, while interval for activity record <span class="name">pe2</span> overlaps with each interval for <span class="name">pe1</span> and <span class="name">pe3</span>, allowing information to flow (<span class="name">e1</span> and <span class="name">e2</span>, respectively).</p>
-
-
+<p>The end in activity record identified by <span class="name">a3</span> precedes the start in activity record identified by <span class="name">a1</span>, while interval for activity record <span class="name">a2</span> overlaps with each interval for <span class="name">a1</span> and <span class="name">a3</span>, allowing information to flow (<span class="name">e1</span> and <span class="name">e2</span>, respectively).</p>
+
+
+<div class="note">
+This relation to be simplified using wasStartedBy/wasEndedBy.
+</div>
<p>
A control ordering record, written as
-<span class="name">wasScheduledAfter(pe2,pe1)</span> in PROV-ASN: </p>
+<span class="name">wasScheduledAfter(a2,a1)</span> in PROV-ASN: </p>
<ul>
-<li> refers to an activity record identified by <span class="name">pe2</span>;
-<li> refers to an activity record identified by <span class="name">pe1</span>,
+<li> refers to an activity record identified by <span class="name">a2</span>;
+<li> refers to an activity record identified by <span class="name">a1</span>,
</ul>
-<p>and states control ordering between <span class="name">pe2</span> and <span class="name">pe1</span>, specified as follows.</p>
-
-<div class='constraint' id='wasScheduledAfter'>Given two activity records identified by <span class="name">pe1</span> and <span class="name">pe2</span>,
- the record <span class="name">wasScheduledAfter(pe2,pe1)</span>
+<p>and states control ordering between <span class="name">a2</span> and <span class="name">a1</span>, specified as follows.</p>
+
+<div class='constraint' id='wasScheduledAfter'>Given two activity records identified by <span class="name">a1</span> and <span class="name">a2</span>,
+ the record <span class="name">wasScheduledAfter(a2,a1)</span>
holds, <span class='conditional'>if and only if</span>
there are two entity records identified by <span class="name">e1</span> and <span class="name">e2</span>,
-such that <span class="name">wasControlledBy(pe1,e1,[prov:role="end"])</span> and <span class="name">wasControlledBy(pe2,e2,[prov:role="start"])</span> and <span class="name">wasDerivedFrom(e2,e1)</span>.
+such that <span class="name">wasControlledBy(a1,e1,[prov:role="end"])</span> and <span class="name">wasControlledBy(a2,e2,[prov:role="start"])</span> and <span class="name">wasDerivedFrom(e2,e1)</span>.
</div>
-<p>This definition assumes that the activities represented by activity records identified by <span class="name">pe1</span> and <span class="name">pe2</span> are controlled by some agents (with identifiers <span class="name">e1</span> and <span class="name">e2</span>), where the first agent terminates (control attribute <span class="name">[prov:role="end")</span>) the first activity, and the second agents initiates (control attribute <span class="name">[prov:role="start")</span>) the second activity. The second agent being "derived" from the first enforces temporal ordering. </p>
+<p>This definition assumes that the activities represented by activity records identified by <span class="name">a1</span> and <span class="name">a2</span> are controlled by some agents (with identifiers <span class="name">e1</span> and <span class="name">e2</span>), where the first agent terminates (control attribute <span class="name">[prov:role="end")</span>) the first activity, and the second agents initiates (control attribute <span class="name">[prov:role="start")</span>) the second activity. The second agent being "derived" from the first enforces temporal ordering. </p>
<p>
-In the following assertions, we find two activity records, identified by <span class="name">pe1</span> and <span class="name">pe2</span>, representing two activities, which took place on two separate hosts.</p>
+In the following assertions, we find two activity records, identified by <span class="name">a1</span> and <span class="name">a2</span>, representing two activities, which took place on two separate hosts.</p>
<pre class="example">
-activity(pe1,long-workflow,t1,t2,[host="server1.example.org"])
-activity(pe2,long-workflow,t3,t4,[host="server2.example.org"])
+activity(a1,long-workflow,t1,t2,[host="server1.example.org"])
+activity(a2,long-workflow,t3,t4,[host="server2.example.org"])
entity(e1,[prov:type="scheduler",state=1])
entity(e2,[prov:type="scheduler",state=2])
-wasControlledBy(pe1,e1,[prov:role="end"])
-wasControlledBy(pe2,e2,[prov:role="start"])
+wasControlledBy(a1,e1,[prov:role="end"])
+wasControlledBy(a2,e2,[prov:role="start"])
wasDerivedFrom(e2,e1)
-wasScheduledAfter(pe2,pe1)
+wasScheduledAfter(a2,a1)
</pre>
-<p>The one identified by <span class="name">pe2</span> is said to be
-scheduled after the one identified by <span class="name">pe1</span>
-because the scheduler terminated the activity (represented by activity identified by <span class="name">pe1</span>) to relocate it
+<p>The one identified by <span class="name">a2</span> is said to be
+scheduled after the one identified by <span class="name">a1</span>
+because the scheduler terminated the activity (represented by activity identified by <span class="name">a1</span>) to relocate it
to the new host.
</p>
@@ -2615,7 +2628,7 @@
<pre>
activity(pe,recipe,t1,t2,attr1)
wasGenerateBy(e,pe)
-wasControlledBy(pe,ag,attr2)
+wasAssociatedWith(pe,ag,attr2)
</pre>
for some sets of attribute-value pairs <span class="name">attr1</span> and <span class="name">attr2</span>, time <span class="name">t1</span>, and <span class="name">t2</span>.
</div>
@@ -2864,6 +2877,8 @@
<section class="appendix">
<h2>Changes Since Previous Version</h2>
<ul>
+<li>11/17/11: Updated wasDerivedFrom to refer to generation/usage record ids.</li>
+<li>11/17/11: Simplified hasAnnotation mechanism, now requiring to-be-annotated record to had id.</li>
<li>11/17/11: Renamed annotation into note.</li>
<li>11/17/11: Introduced wasStartedBy, wasEndedBy, and actedOnBehalfOf.</li>
<li>11/16/11: New version of agent/wasAssociatedWith.</li>