new agent, first cut
authorLuc Moreau <l.moreau@ecs.soton.ac.uk>
Wed, 16 Nov 2011 23:53:28 +0000
changeset 932 9a361e88b4c7
parent 931 0860cc8444ba
child 933 d33518376aee
new agent, first cut
model/ProvenanceModel.html
--- a/model/ProvenanceModel.html	Wed Nov 16 22:46:55 2011 +0000
+++ b/model/ProvenanceModel.html	Wed Nov 16 23:53:28 2011 +0000
@@ -317,6 +317,13 @@
 etc.</p>
 
 
+<p>An <dfn id="concept-agent">agent</dfn> as a type of entity that takes an active role in an activity such that it can be assigned some degree of responsibility for the activity taking place.
+This definition intentionally stays away from using concepts such as enabling, causing, initiating, affecting, etc, because any entities also enable, cause, initiate, and affect in some way the activities.  So the notion of having some degree of responsibility is really what makes an agent. </p>
+
+<p> Even software agents can be assigned some responsibility for the effects they have in the world, so for example if one is using a Text Editor and one's laptop crashes then one would say that the Text Editor was responsible for crashing the laptop.  If one invokes a service to buy a book, that service can be considered responsible for drawing funds from one's bank to make the purchase (the company that runs the service and the web site would also be responsible, but the point here is that we assign some measure of responsibility to software as well).  So when someone models software as an agent for an activity in our model they mean the agent has some responsibility for that activity.
+</p>
+
+
 <p>In our conceptualization of the world, instantaneous events, or <dfn id="concept-event">events</dfn> for short, happen in the world, which mark changes in the world, in its activities, and in its entities.  This specification assumes that a partial order exists between events. How practically such order is realized is beyond the scope of this specification. Possible implementations of that ordering include a single global notion of time and Lamport's style clocks.</p>
 
 <p> In this specification, the qualifier 'identifiable' is implicit whenever a reference is made to an activity or an entity.</p>
@@ -607,19 +614,19 @@
 <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>
-entity(a1, [ prov:type="Person", name="Alice" ])
+entity(a1, [ prov:type="Person", ex:name="Alice" ])
 agent(a1)
 
-entity(a2, [ prov:type="Person", name="Bob" ])
+entity(a2, [ prov:type="Person", ex:name="Bob" ])
 agent(a2)
 
-entity(a3, [ prov:type="Person", name="Charles" ])
+entity(a3, [ prov:type="Person", ex:name="Charles" ])
 agent(a3)
 
-entity(a4, [ prov:type="Person", name="David" ])
+entity(a4, [ prov:type="Person", ex:name="David" ])
 agent(a4)
 
-entity(a5, [ prov:type="Person", name="Edith" ])
+entity(a5, [ prov:type="Person", ex:name="Edith" ])
 agent(a5)
 </pre>
 
@@ -875,8 +882,21 @@
 
 
 
-<p>An <dfn id="dfn-Agent">agent record</dfn> is a representation of an entity capable of
-activity.</p> 
+<p>An <dfn id="dfn-Agent">agent record</dfn> is a representation of an agent, which is an entity that can be assigned some degree of responsibility for an activity taking place.</p>
+
+<p>Many agents can have an association with a given activity.  An agent may do the ordering of the activity, another agent may do its design, another agent may push the button to start it, another agent may run it, etc.  As many agents as one wishes to mention in the provenance record if it is important to indicate that they were associated with the activity. </p>
+
+<p>
+From an inter-operability perspective, it is useful to define some basic categories of agents since
+it will improve the use of provenance records by applications.  
+There should be very few of these basic categories to keep the model simple and accessible. 
+There are three types of agents in the model:
+<ul>
+<li><span class="name">Person</span>: agents of type Person are people. (This type is equivalent to a "foaf:person" [[FOAF]])</li> 
+<li><span class="name">Organization</span>: agents of type Organization are social institutions such as companies, societies etc. (This type is equivalent to a "foaf:organization" [[FOAF]])</li> 
+<li><span class="name">SoftwareAgent</span>: a software agent is a piece of software. </li>
+</ul>
+<p>These types are mutually exclusive, though they do not cover all kinds of agent. </p>
 
 <p>In PROV-ASN, an agent record's text matches the <span class="nonterminal">agentRecord</span> production of the grammar defined in this specification document.
 </p>
@@ -887,6 +907,10 @@
 <span class="name">agent</span>
 <span class="name">(</span>
 <span class="nonterminal">identifier</span>
+<span class="name">,</span>
+<span class="name">[</span>
+<span class="nonterminal">attribute-values</span>
+<span class="name">]</span>
 <span class="name">)</span>
 </div>
 
@@ -896,7 +920,7 @@
  refers to an entity record denoted by identifier <span class="name">e</span> and representing the entity capable of activity.
 </p>
 
-<p>For an entity, one can assert an agent record or alternatively, one can infer an agent record
+<p>One can assert an agent record or alternatively, one can infer an agent record
 by involvement in an activity represented by an activity record.  </p>
 
 
@@ -904,21 +928,23 @@
 <div class="anexample">
 <p>With the following assertions,</p>
 <pre class="codeexample">
-entity(e1, [ex:employee="1234", ex:name="Alice"])  and agent(e1)
-
-entity(e2) and wasControlledBy(pe,e2,[prov:role="author"])
+agent(e1, [ex:employee="1234", ex:name="Alice", prov:type="prov:Person" %% xsd:anyURI])
+
+entity(e2) and wasStartedBy(a1,e2,[prov:role="author"])
+
+entity(e3) and wasAssociatedWith(a1,e3,[prov:role="sponsor"])
 </pre>
-<p>the entity record identified by <span class="name">e1</span> is accompanied by an explicit assertion of an agent record, and this assertion holds irrespective of activities it may be involved in. On the other hand, from the entity record identified  by <span class="name">e2</span>, one can infer an agent record, as per the following inference.</p>
+<p>the agent record identified by <span class="name">e1</span> is an explicit agent assertion that holds irrespective of activities it may be associated with. On the other hand, from the entity records identified  by <span class="name">e2</span> and <span class="name">e3</span>, one can infer agent records, as per the following inference.</p>
 </div>
 
 <div class='constraint' id='control-agent'>
-<span class='conditional'>If</span> the records
-  <span class="name">entity(e,av)</span>
+<span class='conditional'>If</span> the records <span class="name">entity(e,av)</span>
 and
 <span class="name">wasControlledBy(pe,e)</span> hold for some identifiers 
 <span class="name">pe</span>, <span class="name">e</span>, and attribute-values <span class="name">av</span>, then
 the record <span class="name">agent(e)</span> also holds.
 </div>
+<div class="note">TO update with new relations.</div>
 </section>
 
    <section id="record-annotation"> 
@@ -1440,6 +1466,82 @@
 <section id="activity-agent-relation">
 <h3>Activity-Agent Relation</h3>
 
+<section id="record-ActivityAssociation">
+<h4>Activity Association Record</h4>
+
+<p>The key purpose of agents in prov-dm is to assign responsibility
+for activities.  It is important to reflect that there is a degree in
+the responsibility of agents, and that is a major reason for
+distinguishing among all the agents that have some association with an
+activity and determine which ones are really the originators of the
+entity.  For example, a programmer and a researcher could both be
+associated with running a workflow, but it may not matter what
+programmer clicked the button to start the workflow while it would
+matter a lot what researcher told the programmer to do so.  Another
+example: 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, and it may not matter what
+student published a web page but it matters a lot that the department
+told the student to put up the web page.  So there is some notion of
+responsibility that needs to be captured. </p>
+
+<p>To promote take-up, PROV-DM offers a mild version of responsibility
+in the form of a relation to represent when an agent acted on another
+agent's behalf.  So in the example of someone running a mail program,
+the program is an agent of that activity and the person is also an
+agent of the activity, but we would also add that the mail software
+agent is running on the person's behalf.  In the other example, the
+student acted on behalf of his supervisor, who acted on behalf of the
+department chair, who acts on behalf of the university, and all those
+agents are responsible in some way for the activity to take place but
+we don't say explicitly who bears responsibility and to what
+degree. </p>
+
+<p>We could also say that an agent can act on behalf of several other
+agents (a group of agents).  This would also make possible to
+indirectly reflect chains of responsibility.  This also indirectly
+reflects control without requiring that control is explicitly
+indicated.  In some contexts there will be a need to represent
+responsibility explicitly, for example to indicate legal
+responsibility, and that could be added as an extension to this core
+model.  Similarly with control, since in particular contexts there
+might be a need to define specific aspects of control that various
+agents exert over a given activity.</p>
+
+<p>An activity association record, written <span class="name">wasAssociatedWith(a,ag1,ags2,attrs)</span> in PROV-ASN, has the following constituent:</p>
+<ul>
+<li><em>activity</em>: an identifier <span class="name">a</span> for an activity record;</li>
+<li><em>agent</em>: an identifier <span class="name">ag1</span> for an agent record, which represents the agent associated with the activity;</li>
+<li><em>onBehalfOf</em>: a set of identifiers <span class="name">ags2</span>, which represent the agents <span class="name">ag1</span> acts on behalf of in the context of activity <span class="name">a</span>;
+<li><em>attributes</em>: a set of attribute-value pairs <span class="name">attrs</span> that describe the modalities of usage of this entity by this activity.</li>
+</ul>
+
+
+
+<div class='grammar'>
+<span class="nonterminal">activityAssociationRecord</span>&nbsp;:= 
+<span class="name">wasAssociatedWith</span>
+<span class="name">(</span>
+<span class="nonterminal">identifier</span>,
+<span class="nonterminal">identifier</span>,
+<span class="nonterminal">identifiers</span>,
+<span class="nonterminal">attribute-values</span>
+<span class="name">)</span>
+</div>
+
+<div class="anexample">
+<pre class="codeexample">
+activity(a,[prov:type="workflow"])
+entity(e1,[prov:type="programmer"]
+entity(e2,[prov:type="researcher"]
+wasAssociatedWith(a,e1,e2)
+</pre>
+</div>
+
+
+
+</section>
+
 <section id="record-Control">
 <h4>Control Record</h4>
 
@@ -2708,8 +2810,9 @@
 <section class="appendix"> 
       <h2>Changes Since Previous Version</h2> 
 <ul>
+<li>11/16/11: New version of agent/wasAssociatedWith.</li>
 <li>11/16/11: Introduced class anexample.</li>
-<li>11/16/11: Change presentation of entity and activity.</li>
+<li>11/16/11: Changed presentation of entity and activity.</li>
 <li>11/16/11: Updated examples for usage and generation record.</li>
 <li>11/16/11: Renamed use record into usage record.</li>
 <li>11/16/11: Removed constraint generation-affects-attributes.</li>