using attribute-value pairs uniformly
authorLuc Moreau <l.moreau@ecs.soton.ac.uk>
Fri, 11 Nov 2011 09:37:20 +0000
changeset 875 32e766f7f4dc
parent 874 16412d0152f1
child 876 5f4e65cb11ce
using attribute-value pairs uniformly
model/ProvenanceModel.html
--- a/model/ProvenanceModel.html	Thu Nov 10 22:03:27 2011 -0500
+++ b/model/ProvenanceModel.html	Fri Nov 11 09:37:20 2011 +0000
@@ -217,9 +217,10 @@
 
 <p><a href="#data-model-concepts">Section 5</a> provides the normative definition of PROV-DM and the notation PROV-ASN.</p>
 
+<p><a href="#prov-dm-shortcuts-and-abbreviations">Section 7</a> consists of common domain-independent shortcuts and abbreviations such as collection-related concepts and common relations.</p>
+
 <p><a href="#extensibility-section">Section 6</a> summarizes PROV-DM extensibility points.</p>
 
-<p><a href="#prov-dm-extensions">Section 7</a> consists of common domain-independent extensions such as collection-related concepts and common relations.</p>
 
 <p><a href="#resource-section">Section 8</a> discusses how the PROV-DM can be applied to the notion of resource.</p>
 
@@ -411,22 +412,26 @@
       <strong>wasComplementOf</strong> relationship is used to denote that two <samp>entities</samp> <em>complement</em> each other, in the sense that they each represent a partial, but mutually compatible characterization of the same thing.</li>
   
   <li>An <strong>Activity Record </strong>(noted <samp>activity</samp> in the diagram) represents an activity that has an effect on entities, namely it either <em>generates</em> or <em>uses</em> one or more entities. Use and generation are modelled by means of the <strong>used</strong> and the <strong>wasGeneratedBy</strong> relationships. Additionally, one can use the <strong>hadParticipant</strong> relation to indicate participation of an <samp>entity</samp> in a <samp>activity</samp>.  Activities may include not only computations, but also any other type of activity that can be described in terms of their effect on <samp>entities</samp>.
-Note that multiple <samp>activity</samp>s may <em>use</em> the same <samp>entity</samp>, and each may use multiple <samp>entities</samp>. Finally, entities can be derived from other entities, and this is specified using the <strong>wasDerivedFrom</strong> relation.</li>
+Note that multiple <samp>activities</samp> may <em>use</em> the same <samp>entity</samp>, and each may use multiple <samp>entities</samp>. Finally, entities can be derived from other entities, and this is specified using the <strong>wasDerivedFrom</strong> relation.</li>
   
   <li>An  <strong>Agent Record</strong> represent a particular <samp>entity</samp> that can be associated to activities, meaning it is capable of controlling <samp>activitys</samp>.
   Agents have a rather generic connotation: their  association with an activity, represented by the <strong>controlledBy</strong> relationship, can take up various meanings (attribution, responsibility, supervision, management, etc.), which are not individually specified in the model.</li>
   </ul>
 
-
-The model includes two additional elements: <strong>qualifiers</strong> and <strong>annotations</strong>. These are both structured as sets of attribute-value pairs.
- <ul><li> Qualifiers can be associated to relations, namely <strong>use</strong> and <strong>wasGeneratedBy</strong>, in order to further characterize their nature. <strong>Role</strong> is a pre-defined qualifier.</li>
-<li>  Annotations are used to provide additional, "free-form" information regarding <strong>any</strong> identifiable construct of the model, with no prescribed meaning. The difference between attributes and annotations is further clarified <a href="#record-annotation">here</a>. </li>
-</ul>
+<p> Set of attribute-value pairs can be associated to relations,
+namely <strong>used</strong>, <strong>wasGeneratedBy</strong>
+and <strong>wasControlledBy</strong>, in order to further characterize
+their nature. <strong>Role</strong> is a pre-defined attribute.</li>
+</p>
+
+<p>
+The model includes a further additional elements: <strong>annotations</strong>. These are also structured as sets of attribute-value pairs.  Annotations are used to provide additional, "free-form" information regarding <strong>any</strong> identifiable construct of the model, with no prescribed meaning. The difference between attributes in  annotation attributes and the other attributes is further clarified <a href="#record-annotation">here</a>. 
+</p>
+   
+<p> 
+Attributes and annotations are the main <strong>extensibility points</strong> in the model: individual interest groups  are expected to extend PROV-DM by introducing new sets of attributes and annotations as needed to address applications-specific provenance modelling requirements. </p>
     
-Attributes, qualifiers,  and annotation are the main <strong>extensibility points</strong> in the model: individual interest groups  are expected to extend PROV-DM by introducing new sets of attributes, qualifiers, and annotations as needed to address applications-specific provenance modelling requirements. 
-    
-
-    </section> 
+</section> 
 
 
     <section class="informative" id="prov-dm-example"> 
@@ -532,16 +537,16 @@
 
 
 <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. To describe the modalities according to which the various entities are generated by a given activity, a qualifier  (described in <a href="#record-qualifier">Section Qualifier</a>) is introduced.  The interpretation of qualifiers is application specific. Illustrations of such qualifiers for the scenario are: no qualifier is provided for <span class="name">e0</span>;
+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>
 <pre>
-wasGeneratedBy(e0, pe0, qualifier())
-wasGeneratedBy(e1, pe0, qualifier(ex:fct="create"))
-wasGeneratedBy(e2, pe1, qualifier(ex:fct="save"))     
-wasGeneratedBy(e3, pe3, qualifier(ex:fct="save"))     
-wasGeneratedBy(e4, pe2, qualifier(ex:port="smtp", ex:section="attachment"))  
-wasGeneratedBy(e5, pe4, qualifier(ex:port="smtp", ex:section="attachment"))    
-wasGeneratedBy(e6, pe5, qualifier(ex:file="stdout"))
+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"])
 </pre>
 
 
@@ -549,24 +554,24 @@
 <p>
 Records of type <strong>UsedRecords</strong> (described in <a href="#record-Use">Section Use</a>) represent the event by which a file is read by an activity. 
 
-Likewise, to describe the modalities according to which the various entities are used by activities, a qualifier  (construct described in <a href="#record-qualifier">Section Qualifier</a>) is introduced.  Illustrations of such qualifiers are: 
+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>
 <pre>
-used(pe1,e1,qualifier(ex:fct="load"))
-used(pe3,e2,qualifier(ex:fct="load"))
-used(pe2,e2,qualifier(ex:fct="attach"))
-used(pe4,e3,qualifier(ex:fct="attach"))
-used(pe5,e3,qualifier(ex:file="stdin"))
+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"])
 </pre>
 
 
 <p>
-Derivation Records (described in <a href="#record-Derivation">Section Derivation</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 qualifiers qualifying the use and generation of entities.</p>
+Derivation Records (described in <a href="#record-Derivation">Section Derivation</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 use and generation of entities.</p>
 <pre>
 wasDerivedFrom(e2,e1)
 wasDerivedFrom(e3,e2)
-wasDerivedFrom(e4,e2,pe2,qualifier(ex:port="smtp", ex:section="attachment"),qualifier(ex:fct="attach"))
-wasDerivedFrom(e5,e3,pe4,qualifier(ex:port="smtp", ex:section="attachment"),qualifier(ex:fct="attach"))
+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"])
 </pre>
 
 
@@ -604,13 +609,13 @@
 
 
 <p>
-Control Records (described in <a href="#record-Control">Section Control</a>): the influence of an agent over an activity is expressed as control, and the nature of this influence is described by qualifier  (construct described in <a href="#record-qualifier">Section Qualifier</a>).  Illustrations of such qualifiers include the role of the participating agent, as creator, author and communicator.</p>
+Control Records (described in <a href="#record-Control">Section Control</a>): the influence of an agent over an activity is expressed as control, and the nature of this influence 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>
-wasControlledBy(pe0,a1, qualifier(prov:role="creator"))
-wasControlledBy(pe1,a2, qualifier(prov:role="author"))
-wasControlledBy(pe2,a3, qualifier(prov:role="communicator"))
-wasControlledBy(pe3,a4, qualifier(prov:role="author"))
-wasControlledBy(pe4,a5, qualifier(prov:role="communicator"))
+wasControlledBy(pe0,a1, [prov:role="creator"])
+wasControlledBy(pe1,a2, [prov:role="author"])
+wasControlledBy(pe2,a3, [prov:role="communicator"])
+wasControlledBy(pe3,a4, [prov:role="author"])
+wasControlledBy(pe4,a5, [prov:role="communicator"])
 </pre>
 </section> 
 
@@ -884,7 +889,7 @@
 <pre class="example">
 entity(e1, [employee="1234", name="Alice"])  and agent(e1)
 
-entity(e2) and wasControlledBy(pe,e2,qualifier(prov:role="author"))
+entity(e2) and wasControlledBy(pe,e2,[prov:role="author"])
 </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>
@@ -903,7 +908,7 @@
       
 <h4>Annotation Record</h4>
 
-<p>An <dfn id="dfn-annotation">annotation record</dfn> is a set of name-value pairs, whose meaning is application specific. It may or may not be a representation of something in the world.</p> 
+<p>An <dfn id="dfn-annotation">annotation record</dfn> is a set of attribute-value pairs, whose meaning is application specific. It may or may not be a representation of something in the world.</p> 
 
 <p>In PROV-ASN, an annotation record's text matches the <span class="nonterminal">annotationRecord</span> production of the grammar defined in this specification document.
 </p>
@@ -915,17 +920,9 @@
 <span class="name">(</span>
 <span class="nonterminal">identifier</span>
 <span class="name">,</span>
-<span class="nonterminal">name-values</span>
+<span class="nonterminal">attribute-values</span>
 <span class="name">)</span><br/>
 <!-- -->
-<span class="nonterminal">name-values</span>&nbsp;:=  
-<span class="nonterminal">name-value</span>
-| <span class="nonterminal">name-value</span> <span class="name">,</span> <span class="nonterminal">name-values</span>
-<br/>
-<span class="nonterminal">name-value</span>&nbsp;:=  
-<span class="nonterminal">name</span>
-<span class="name">=</span>
-<span class="nonterminal">Literal</span>
 </div>
 
 <p>A separate PROV-DM record is used to associate an annotation with a record (see <a href="#record-annotationAssociation">Section on annotation association</a>). A given annotation may be associated with multiple records.
@@ -935,17 +932,17 @@
 <p>
 The following annotation record</p>
 <pre class="example">
-annotation(ann1,[color="blue", screenX=20, screenY=30])
+annotation(ann1,[ex:color="blue", ex:screenX=20, ex:screenY=30])
 </pre>
-<p>consists of a list of application-specific name-value pairs, intended
+<p>consists of a set of application-specific attribute-value pairs, intended
 to help the rendering of the record it is associated with, by
 specifying its color and its position on the screen.  In this example,
-these name-value pairs do not constitute a representation of something
+these attribute-value pairs do not constitute a representation of something
 in the world; they are just used to help render provenance.
 </p>
 
 <p>
-Name-value pairs occurring in annotations differ from attribute-value pairs (occurring in entity records and activity records).  Attribute-value pairs MUST be a representation of something in the world, which remain constant for the duration of the characterization interval (for entity record) or the activity duration (for activity records). It is OPTIONAL for name-value pairs to be representations  of something in the world. If they are a representation of something in the world, then it MAY change value for the corresponding duration. If name-value pairs are a representation of something in the world that does not change, they are not regarded as determining characteristics of an entity or activity, for the purpose of provenance. 
+Attribute-value pairs occurring in annotations differ from attribute-value pairs occurring in entity records and activity records.  In entity and activity records, attribute-value pairs MUST be a representation of something in the world, which remain constant for the duration of the characterization interval (for entity record) or the activity duration (for activity records). In annotation records, it is OPTIONAL for attribute-value pairs to be representations  of something in the world. If they are a representation of something in the world, then it MAY change value for the corresponding duration. If attribute-value pairs of an annotation record are a representation of something in the world that does not change, they are not regarded as determining characteristics of an entity or activity, for the purpose of provenance. 
 </p>
 
 
@@ -977,7 +974,7 @@
 <span class="name">,</span>
 <span class="nonterminal">identifier</span>
 <span class="name">,</span>
-<span class="nonterminal">generationQualifier</span>
+<span class="nonterminal">attribute-values</span>
 [<span class="name">,</span>
 <span class="nonterminal">time</span>]
 <span class="name">)</span><br/>
@@ -985,12 +982,12 @@
 
 
 
-<p>A generation record, written <span class="name">wasGeneratedBy(e,pe,q,t)</span> in PROV-ASN:</p>
+<p>A generation record, written <span class="name">wasGeneratedBy(e,pe,attrs,t)</span> in PROV-ASN:</p>
 <ul>
 <li> contains an identifier <span class="name">e</span> identifying an entity record that represents the entity that is created; </li>
 <li> contain an identifier <span class="name">pe</span> identifying an activity record that represents the activity that creates the entity;</li>
 
-<li> contains a <a href="#record-qualifier">generationQualifier</a> <span class="name">q</span> that describes the modalities of generation of this entity by this activity;</li>
+<li> contains a set of attribute-value pairs <span class="name">attrs</span> that describes the modalities of generation of this entity by this activity;</li>
 
 <li> MAY contain a "generation time" <span class="name">t</span>, the time at which the entity was created.</li>
 </ul>
@@ -1000,8 +997,8 @@
 <p>
 The following generation assertions</p>
 <pre class="example">
-  wasGeneratedBy(e1,pe1,qualifier(ex:port="p1", ex:order=1),t1)
-  wasGeneratedBy(e2,pe1,qualifier(ex:port="p1", ex:order=2),t2)
+  wasGeneratedBy(e1,pe1,[ex:port="p1", ex:order=1),t1)
+  wasGeneratedBy(e2,pe1,[ex:port="p1", ex:order=2),t2)
 </pre>
 <p>state the existence of two events in the world (with respective times <span class="name">t1</span> and <span class="name">t2</span>), at which new entities, represented by entity records identified by <span class="name">e1</span> and <span class="name">e2</span>, are created by an activity, itself represented by an activity record identified by <span class="name">pe1</span>.
 The first one is available as the first value on port p1, whereas the other is the second value on port p1.  The semantics of <span class="name">port</span> and <span class="name">order</span> in these records are application specific.
@@ -1012,18 +1009,18 @@
 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 qualifiers <span class="name">q1</span> and <span class="name">q2</span>,
-<span class='conditional'>if</span> the records <span class="name">wasGeneratedBy(e,pe1,q1)</span> and <span class="name">wasGeneratedBy(e,pe2,q2)</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">q1</span>=<span class="name">q2</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">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> 
 
 
 A generation event SHOULD have some visibility on the attributes of the generated entity, as expressed by the following constraint.
 
 
-<div class='deprecatedconstraint' id='generation-affects-attributes'>Given an identifier <span class="name">pe</span> for an activity record, an identifier <span class="name">e</span> for an entity record, qualifier <span class="name">q</span>, and optional time <span class="name">t</span>,
+<div class='deprecatedconstraint' id='generation-affects-attributes'>Given an identifier <span class="name">pe</span> for an activity record, an identifier <span class="name">e</span> for an entity record, a set of attribute-value pairs <span class="name">attrs</span>, and optional time <span class="name">t</span>,
 <span class='conditional'>if</span> the assertion <span class="name">wasGeneratedBy(e,pe,p)</span>
-or <span class="name">wasGeneratedBy(e,pe,q,t)</span> holds, <span class='conditional'>then</span> the values of <em>some</em> of <span class="name">e</span>'s
+or <span class="name">wasGeneratedBy(e,pe,attrs,t)</span> holds, <span class='conditional'>then</span> the values of <em>some</em> of <span class="name">e</span>'s
 attributes are determined by the activity represented by activity record identified by <span class="name">pe</span> and the
 entity records used by <span class="name">pe</span>.
 Only some (possibly none) of the attributes values  may be determined
@@ -1037,7 +1034,7 @@
 The assertion of a generation event implies ordering of events in the world.
 
 
-<div class='interpretation' id='generation-pe-ordering'><span class='conditional'>If</span> an assertion <span class="name">wasGeneratedBy(x,pe,q)</span> or <span class="name">wasGeneratedBy(x,pe,q,t)</span>, <span class='conditional'>then</span> generation of the entity denoted by <span class="name">x</span> precedes the end
+<div class='interpretation' id='generation-pe-ordering'><span class='conditional'>If</span> an assertion <span class="name">wasGeneratedBy(x,pe,attrs)</span> or <span class="name">wasGeneratedBy(x,pe,attrs,t)</span>, <span class='conditional'>then</span> generation of the entity denoted by <span class="name">x</span> precedes the end
 of <span class="name">pe</span> and follows the beginning of <span class="name">pe</span>. 
 </div> 
 
@@ -1067,7 +1064,7 @@
 <span class="name">,</span>
 <span class="nonterminal">identifier</span>
 <span class="name">,</span>
-<span class="nonterminal">useQualifier</span>
+<span class="nonterminal">attribute-values</span>
 [<span class="name">,</span>
 <span class="nonterminal">time</span>]
 <span class="name">)</span><br/>
@@ -1075,25 +1072,25 @@
 </div>
 
 
-<p>A use record, written <span class="name">used(pe,e,q,t)</span> in PROV-ASN:</p>
+<p>A use record, written <span class="name">used(pe,e,attrs,t)</span> in PROV-ASN:</p>
 <ul>
 <li> refers to an activity record identified by <span class="name">pe</span>, which represents the consuming activity;</li>
 <li> refers to an entity record identified by <span class="name">e</span>, which represents the entity that is consumed;</li>
-<li> contains a <a href="#record-qualifier">useQualifier</a> <span class="name">q</span>, which describes the modalities of use of this entity by this activity;</li>
+<li> contains a set of attribute-value pairs <span class="name">attrs</span> that describe the modalities of use of this entity by this activity;</li>
 <li> MAY contain a "use time" <span class="name">t</span>, the time at which the entity was used.</li>
 </ul>
 
 
 <p>The following use assertions</p>
 <pre class="example">
-  used(pe1,e1,qualifier(ex:parameter="p1"),t1)
-  used(pe1,e2,qualifier(ex:parameter="p2"),t2)
+  used(pe1,e1,[ex:parameter="p1"),t1)
+  used(pe1,e2,[ex:parameter="p2"),t2)
 </pre>
 <p>state that the activity, represented by the activity record identified by <span class="name">pe1</span>, consumed two entities, represented by entity records identified by <span class="name">e1</span> and <span class="name">e2</span>, at times <span class="name">t1</span> and  <span class="name">t2</span>, respectively; the first one was found as the value of parameter <span class="name">p1</span>, whereas the second was found as value of parameter <span class="name">p2</span>.  The semantics of <span class="name">parameter</span> in these records is application specific.</p>
 
 
 <p>A reference to a given entity record MAY appear in multiple use records that share
- a given activity record identifier. If one wants to annotate a use edge record or if one wants to express a <a href="#pe-linked-derivationRecord"><span class='nonterminal'>pe-linked-derivationRecord</span></a> referring to this entity and activity records, the qualifier occuring in this use assertion MUST be unique among the qualifiers qualifiying use records for this  activity record.
+ a given activity record identifier. If one wants to annotate a use record or if one wants to express a <a href="#pe-linked-derivationRecord"><span class='nonterminal'>pe-linked-derivationRecord</span></a> referring to this entity and activity records, the attributes occuring in this use assertion MUST be unique among the attributes of other use records for this  activity
 </p>
 
 <!-- Luc, should we write a constraint for this? It's not clear the
@@ -1102,8 +1099,8 @@
 
 
 <div class='deprecatedconstraint' id='use-attributes'>
-Given an activity record identified by <span class="name">pe</span>, an entity record identified by <span class="name">e</span>, a qualifier <span class="name">q</span>, and optional time <span class="name">t</span>, <span class='conditional'>if</span>
- assertion <span class="name">used(pe,e,q)</span> or <span class="name">used(pe,e,q,t)</span> holds, 
+Given an activity record identified by <span class="name">pe</span>, an entity record identified by <span class="name">e</span>, a set of attribute-value pairs <span class="name">attrs</span>, and optional time <span class="name">t</span>, <span class='conditional'>if</span>
+ assertion <span class="name">used(pe,e,attrs)</span> or <span class="name">used(pe,e,attrs,t)</span> holds, 
 <span class='conditional'>then</span> the existence of an attribute-value pair in the entity record identified by <span class="name">e</span> is a
 pre-condition for the termination of the activity represented by the activity record identified by <span class="name">pe</span>.
 </div>
@@ -1113,8 +1110,8 @@
 
 
 
-<div class='interpretation' id='use-pe-ordering'>Given an activity record identified by <span class="name">pe</span>, an entity record identified by <span class="name">e</span>, a qualifier <span class="name">q</span>, and optional time <span class="name">t</span>, <span class='conditional'>if</span>
- assertion <span class="name">used(pe,e,q)</span> or <span class="name">used(pe,e,q,t)</span> holds, <span class='conditional'>then</span> 
+<div class='interpretation' id='use-pe-ordering'>Given an activity record identified by <span class="name">pe</span>, an entity record identified by <span class="name">e</span>, a set of attribute-value pairs <span class="name">attrs</span>, and optional time <span class="name">t</span>, <span class='conditional'>if</span>
+ assertion <span class="name">used(pe,e,attrs)</span> or <span class="name">used(pe,e,attrs,t)</span> holds, <span class='conditional'>then</span> 
  the use of the entity represented by entity record identified by <span class="name">e</span> precedes the end of activity represented by record identified by <span class="name">pe</span> and follows its beginning. Furthermore,  the generation of the entity denoted by entity record identified by <span class="name">e</span> always precedes
 its use.
 </div>
@@ -1152,10 +1149,12 @@
 [<span class="name">,</span>
 <span class="nonterminal">identifier</span>
 <span class="name">,</span>
-<span class="nonterminal">generationQualifier</span>
+<span class="nonterminal">generationAttributeValues</span>
 <span class="name">,</span>
-<span class="nonterminal">useQualifier</span>]
+<span class="nonterminal">useAttributesValues</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">pe-independent-derivationRecord</span>:=  
 <span class="name">wasEventuallyDerivedFrom</span>
@@ -1182,13 +1181,13 @@
 
 <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,q2,q1)</span> in PROV-ASN:</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>
 <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 qualifier <span class="name">q2</span>, which qualifies the generation record pertaining to <span class="name">e2</span> and <span class="name">pe</span>;</li>
-<li> contains a qualifier <span class="name">q1</span>, which qualifies in the use record pertaining to <span class="name">e1</span> and <span class="name">pe</span>.</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 use record pertaining to <span class="name">e1</span> and <span class="name">pe</span>.</li>
 </ul>
 
 
@@ -1205,7 +1204,7 @@
 
 <p>The following derivation assertions</p>
 <pre class="example">
-wasDerivedFrom(e5,e3,pe4,qualifier(ex:channel="out"),qualifier(ex:channel="in"))
+wasDerivedFrom(e5,e3,pe4,[ex:channel="out"),[ex:channel="in"])
 wasDerivedFrom(e3,e2)
 </pre>
 <p>
@@ -1214,13 +1213,13 @@
 using the entity denoted by <span class="name">e3</span> obtained on the <span class="name">in</span> channel
  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 qualifiers implicit. The meaning of "channel" is application specific.
+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.
 </p>
 
 
 <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>, qualifiers <span class="name">q1</span> and <span class="name">q2</span>, the assertion <span class="name">wasDerivedFrom(e2,e1,pe,q2,q1)</span>
+<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>
 or <span class="name">wasDerivedFrom(e2,e1)</span> holds <span class='conditional'>if and only if</span>
  the values of some attributes of the entity record identified by
  <span class="name">e2</span> are partly or fully determined by the values of some
@@ -1229,7 +1228,7 @@
 <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>, qualifiers <span class="name">q1</span> and <span class="name">q2</span>, <span class='conditional'>if</span> the assertion <span class="name">wasDerivedFrom(e2,e1,pe,q2,q1)</span>
+<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>
 or <span class="name">wasDerivedFrom(e2,e1)</span> holds, <span class='conditional'>then</span>
 the use
 of entity denoted by <span class="name">e1</span> precedes the generation of
@@ -1242,8 +1241,8 @@
 </p>
 
 <div class="constraint" id='derivation-events'>
-<span class='conditional'>If</span> <span class="name">wasDerivedFrom(e2,e1,pe,q2,q1)</span> holds, <span class='conditional'>then</span>
-  <span class="name">wasGeneratedBy(e2,pe,q2)</span> and <span class="name">used(pe,e1,q1)</span> also
+<span class='conditional'>If</span> <span class="name">wasDerivedFrom(e2,e1,pe,attrs2,attrs1)</span> holds, <span class='conditional'>then</span>
+  <span class="name">wasGeneratedBy(e2,pe,attrs2)</span> and <span class="name">used(pe,e1,attrs1)</span> also
   hold.
 </div>
 
@@ -1254,9 +1253,9 @@
 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 qualifiers <span class="name">q1</span>,<span class="name">q2</span>,
+<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>,
 such that:
-  <span class="name">wasGeneratedBy(e2,pe,q2)</span> and <span class="name">used(pe,e1,q1)</span>. 
+  <span class="name">wasGeneratedBy(e2,pe,attrs2)</span> and <span class="name">used(pe,e1,attrs1)</span>. 
 </div>
 
 
@@ -1265,10 +1264,10 @@
 
 <p>
 Note that inferring derivation from use and generation does not hold
-in general. Indeed, when a generation <span class="name">wasGeneratedBy(e2,pe,q2)</span>
-precedes <span class="name">used(pe,e1,q1)</span>, for
-some <span class="name">e1</span>, <span class="name">e2</span>, <span class="name">q1</span>, <span class="name">q2</span>, and <span class="name">pe</span>, one
-cannot infer derivation <span class="name">wasDerivedFrom(e2,e1,pe,q2,q1)</span>
+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
 of <span class="name">e1</span>, given the creation of <span class="name">e2</span> precedes the use
@@ -1278,9 +1277,9 @@
 
 <p>A further inference is permitted from the compact version of derivation record: </p>
 <div class='constraint' id='derivation-use'>
-<p>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>, and qualifier <span class="name">q2</span>,
-<span class='conditional'>if</span> <span class="name">wasDerivedFrom(e2,e1)</span> and <span class="name">wasGeneratedBy(e2,pe,q2)</span> hold, <span class='conditional'>then</span> there exists a qualifier <span class="name">q1</span>,
-such that <span class="name">used(pe,e1,q1)</span> also holds.
+<p>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>, and set of attribute-value pairs <span class="name">attrs2</span>,
+<span class='conditional'>if</span> <span class="name">wasDerivedFrom(e2,e1)</span> and <span class="name">wasGeneratedBy(e2,pe,attrs2)</span> hold, <span class='conditional'>then</span> there exists a set of attribute-value pairs <span class="name">attrs1</span>,
+such that <span class="name">used(pe,e1,attrs1)</span> also holds.
 </div>
 <p>This inference is justified by the fact that the entity represented by entity record identified by <span class="name">e2</span> is generated by at most one activity in a given account (see <a href="#generation-unicity">generation-unicity</a>). Hence,  this activity record is also the one referred to in the use record of <span class="name">e1</span>. 
 </p>
@@ -1289,7 +1288,7 @@
 
 <p>We note that the "symmetric" inference, does not hold.
 From <span class="name">wasDerivedFrom(e2,e1)</span> and <span class="name">used(pe,e1)</span>, one cannot
-derive <span class="name">wasGeneratedBy(e2,pe,q2)</span> because identifier <span class="name">e1</span> may occur in use records referring to 
+derive <span class="name">wasGeneratedBy(e2,pe,attrs2)</span> because identifier <span class="name">e1</span> may occur in use records referring to 
 many activity records, but they may not be referred to in generation records containing identifier <span class="name">e2</span>.</p>
 
 
@@ -1333,7 +1332,7 @@
 contains or implies the existence of an activity record. Hence, from
 the former, we can infer the latter.</p>
 <div class='constraint' id='derivation-linked-independent'>
-Given two entity records denoted by <span class="name">e1</span> and <span class="name">e2</span>, <span class='conditional'>if</span> the assertion <span class="name">wasDerivedFrom(e2,e1)</span> or <span class="name">wasDerivedFrom(e2,e1,pe,q12,q1)</span>
+Given two entity records denoted by <span class="name">e1</span> and <span class="name">e2</span>, <span class='conditional'>if</span> the assertion <span class="name">wasDerivedFrom(e2,e1)</span> or <span class="name">wasDerivedFrom(e2,e1,pe,attrs2,attrs1)</span>
  holds, <span class='conditional'>then</span> the record <span class="name">wasEventuallyDerivedFrom(e2,e1)</span> also holds.
   </div>
 
@@ -1371,7 +1370,7 @@
 
 <div class='constraint' id='transitive-derivation'>
 <ul> 
-<li><span class='conditional'>If</span> <span class="name">wasDerivedFrom(e2,e1)</span> or <span class="name">wasDerivedFrom(e2,e1,pe,q2,q1)</span> holds, <span class='conditional'>then</span> <span class="name">dependedOn(e2,e1)</span> holds.</li>
+<li><span class='conditional'>If</span> <span class="name">wasDerivedFrom(e2,e1)</span> or <span class="name">wasDerivedFrom(e2,e1,pe,attrs2,attrs1)</span> holds, <span class='conditional'>then</span> <span class="name">dependedOn(e2,e1)</span> holds.</li>
 <li><span class='conditional'>If</span> <span class="name">wasEventuallyDerivedFrom(e2,e1)</span> holds, <span class='conditional'>then</span> <span class="name">dependedOn(e2,e1)</span> holds.</li>
 <li><span class='conditional'>If</span> <span class="name">dependedOn(e3,e2)</span> and <span class="name">dependedOn(e2,e1)</span> hold, <span class='conditional'>then</span> <span class="name">dependedOn(e3,e1)</span> holds.</li>
 </ul>
@@ -1408,7 +1407,7 @@
 <section id="record-Control">
 <h3>Control Record</h3>
 
-<p> A <dfn id="dfn-Control">control record</dfn> is a representation of the involvement of entity (represented as an agent record or an entity record) in an activity, which is represented by an activity record; a control qualifier qualifies this involvement.</p>
+<p> A <dfn id="dfn-Control">control record</dfn> is a representation of the involvement of entity (represented as an agent record or an entity record) in an activity, which is represented by an activity record; attributes describe this involvement.</p>
 
 <p>In PROV-ASN, a control record's text matches the <span class="nonterminal">controlRecord</span> production of the grammar defined in this specification document.
 </p>
@@ -1420,25 +1419,25 @@
 <span class="name">(</span>
 <span class="nonterminal">identifier</span>,
 <span class="nonterminal">identifier</span>,
-<span class="nonterminal">controlQualifier</span>
+<span class="nonterminal">attribute-values</span>
 <span class="name">)</span>
 </div>
 
 
-<p>A control record, written <span class="name">wasControlledBy(pe,ag,q)</span> in PROV-ASN:</p>
+<p>A control record, written <span class="name">wasControlledBy(pe,ag,attrs)</span> in PROV-ASN:</p>
 <ul>
 <li> contains an identifier <span class="name">pe</span> denoting an activity record, representing the controlled activity;
 <li> refers to an agent record or an entity record identified by <span class="name">ag</span>, representing the controlling entity;
-<li> contains a qualifier <span class="name">q</span>, qualifying the involvement of the entity in the activity.
+<li> contains a set of attribute-value pairs <span class="name">attrs</span>, describing the involvement of the entity in the activity.
 </ul>
 
 
 <p>
 The following control assertion</p>
 <pre class="example">
-wasControlledBy(pe3,a4,qualifier(prov:role="author"))
+wasControlledBy(pe3,a4,[prov:role="author"])
 </pre>
-<p>states that the activity, represented by the activity record denoted by <span class="name">pe3</span> saw the involvement of an entity, represented by entity record denoted by  <span class="name">a4</span> in the capacity of author. This specification reserves the qualifier name <span class="name">role</span> (see Section <a href="#record-qualifier">Qualifier</a>) to denote the function of an entity with respect to an activity.
+<p>states that the activity, represented by the activity record denoted by <span class="name">pe3</span> saw the involvement of an entity, represented by entity record denoted by  <span class="name">a4</span> in the capacity of author. This specification reserves the attribute <span class="name">role</span> (see Section <a href="#extensibility-section">Extensibility Section</a>) to denote the function of an entity with respect to an activity.
 </p>
 
 </section>
@@ -1598,8 +1597,8 @@
 <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>
 holds, <span class='conditional'>if and only if</span>
- there is an entity record identified by <span class="name">e</span> and qualifiers <span class="name">q1</span> and <span class="name">q2</span>,
-such that <span class="name">wasGeneratedBy(e,pe1,q1)</span> and <span class="name">used(pe2,e,q2)</span> hold.
+ 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.
 </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
@@ -1632,9 +1631,9 @@
  the record <span class="name">wasScheduledAfter(pe2,pe1)</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,qualifier(prov:role="end"))</span> and <span class="name">wasControlledBy(pe2,e2,qualifier(prov:role="start"))</span> and <span class="name">wasDerivedFrom(e2,e1)</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>.
 </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 qualifier <span class="name">qualifier(prov:role="end")</span>) the first activity, and the second agents initiates (control qualifier <span class="name">qualifier(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">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>
 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>
@@ -1643,8 +1642,8 @@
 activity(pe2,long-workflow,t3,t4,[host="server2.example.org"])
 entity(e1,[type="scheduler",state=1])
 entity(e2,[type="scheduler",state=2])
-wasControlledBy(pe1,e1,qualifier(prov:role="end"))
-wasControlledBy(pe2,e2,qualifier(prov:role="start"))
+wasControlledBy(pe1,e1,[prov:role="end"])
+wasControlledBy(pe2,e2,[prov:role="start"])
 wasDerivedFrom(e2,e1)
 wasScheduledAfter(pe2,pe1)
 </pre>
@@ -1799,9 +1798,9 @@
 <span class="name">,</span>
 <span class="nonterminal">identifier</span>
 <span class="name">,</span>
-<span class="nonterminal">qualifier</span>
+<span class="nonterminal">attribute-values</span>
 [<span class="name">,</span>
-<span class="nonterminal">qualifier</span>
+<span class="nonterminal">attribute-values</span>
 ]
 <span class="name">)</span>
 </div>
@@ -1817,15 +1816,15 @@
 entity(e1,[type="document"])
 entity(e2,[type="document"])
 activity(pe,transform,t1,t2,[])
-used(pe,e1,qualifier(prov:file="stdin"))
-wasGeneratedBy(e2, pe, qualifier(prov:file="stdout"))
+used(pe,e1,[prov:file="stdin"])
+wasGeneratedBy(e2, pe, [prov:file="stdout"])
 
 annotation(ann1,[icon="doc.png"])
 hasAnnotation(e1,ann1)
 hasAnnotation(e2,ann1)
 
 annotation(ann2,[style="dotted"])
-hasAnnotation(relation(pe,e1,qualifier(prov:file="stdin")),ann2)
+hasAnnotation(relation(pe,e1,[prov:file="stdin"]),ann2)
 </pre>
 <p>assert the existence of two  documents in the world  (attribute-value pair: <span class="name">type="document"</span>) represented by entity records identified by <span class="name">e1</span> and <span class="name">e2</span>, and annotate these records with an annotation indicating that the icon (an application specific way of rendering provenance) is <span class="name">doc.png</span>. It also asserts an activity, its use of the first entity, and its generation of the second entity. The <span class="name">used</span> relation is annotated with a style (an application specific way of rendering this edge graphically).
 </p>
@@ -1893,9 +1892,9 @@
           ...
           activity(pe0,create-file,t)
           ...
-          wasGeneratedBy(e0,pe0,qualifier())     
+          wasGeneratedBy(e0,pe0,[])     
           ...
-          wasControlledBy(pe4,a5, qualifier(prov:role="communicator"))  )
+          wasControlledBy(pe4,a5, [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>
@@ -1946,7 +1945,7 @@
           ...
           activity(pe1,create-file,t1)
           ...
-          wasGeneratedBy(e0,pe1,qualifier(ex:fct="create"))     
+          wasGeneratedBy(e0,pe1,[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>
@@ -1960,12 +1959,12 @@
         http://example.org/asserter1, 
           entity(e0, [ type="File", location="/shared/crime.txt", creator="Alice" ])
           activity(pe0,create-file,t)
-          wasGeneratedBy(e0,pe0,qualifier())  
+          wasGeneratedBy(e0,pe0,[])  
           account(acc4,
                  http://example.org/asserter2,
                  entity(e1, [ type="File", location="/shared/crime.txt", creator="Alice", content="" ])
                  activity(pe0,copy-file,t)
-                 wasGeneratedBy(e1,pe0,qualifier(ex:fct="create"))
+                 wasGeneratedBy(e1,pe0,[ex:fct="create"])
                  isComplement(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.
@@ -2033,80 +2032,7 @@
 
 This section specifies the productions of further terms in PROV-DM records.
 
-<section id="record-qualifier">
-<h4>Qualifier</h4>
-
-<p>A <dfn id="dfn-qualifier">qualifier</dfn> is a set of name-value pairs, used to qualify use records, generation records and control records. </p>
-
-<p>In PROV-ASN, a qualifier's text matches the <span class="nonterminal">qualifier</span> production of the grammar defined in this specification document.</p>
-
-
-<div class='grammar'>
-<span class="nonterminal">useQualifier</span>&nbsp;:=  
-<span class="nonterminal">qualifier</span> <br/>
-<span class="nonterminal">generationQualifier</span>&nbsp;:=  
-<span class="nonterminal">qualifier</span> <br/>
-<span class="nonterminal">controlQualifier</span>&nbsp;:=  
-<span class="nonterminal">qualifier</span> <br/>
-<br/>
-<span class="nonterminal">qualifier</span>&nbsp;:=  
-<span class="name">qualifier</span>
-<span class="name">(</span>
-<span class="nonterminal">name-values</span> <span class="name">)</span> <br/>
-<!--   -->
-<span class="nonterminal">name-values</span>&nbsp;:=  
-<span class="nonterminal">name-value</span>
-| <span class="nonterminal">name-value</span> <span class="name">,</span> <span class="nonterminal">name-values</span>
-<br/>
-<span class="nonterminal">name-value</span>&nbsp;:=  
-<span class="nonterminal">name</span>
-<span class="name">=</span>
-<span class="nonterminal">Literal</span>
-</div>
-
-
-<p>Use, generation, and control records MUST contain a qualifier. A qualifier's sequence of name-value pairs MAY be empty. </p>
-
-<div class="note">aren't these two sentences contradictory></div>
-
-<p>The interpretation of a  qualifier is specific to the activity record it occurs in, which means that a same qualifier may appear in two different activity records with different interpretations.   
-From this specification's viewpoint, a qualifier's interpretation is out of
-scope.</p>
-
-
-
-<p> 
-By definition, a use  (resp. generation, control) record does not contain an identifier.
-If one wants to annotate a use  (resp. generation, control) record, this record MUST be identifiable from its constituents, i.e. its source's identifier, its destination's identifier, and its qualifier.</p> 
-
-<p> To be able to annotate  use  (resp. generation, control) records that refer to a given activity identifier, 
- any  qualifier occuring in use records (resp. generation, control) with this identifier and a given entity record identifier MUST be unique.</p>
-
-<div class='note'>It may seem strange that we do not require use records to have an identifier. Mandating the presence of identifiers in use records would facilitate their annotation. However, this would make it difficult for use records to be encoded as properties in OWL2.
-</div>
-
-<p>Qualifiers are used in determining the exact source and destination  of a <span class="nonterminal">pe-linked-derivationRecord</span>. Hence,
-if one wants to express a <span class="nonterminal">pe-linked-derivationRecord</span> referring to an entity record and an activity record, then:</p>
-<ul>
-<li>the useQualifier MUST be unique among the qualifiers occuring in use records for this activity record;
-<li>the generationQualifier MUST be unique among the qualifiers occuring in generation records for this activity record.
-</ul>
-
-
-<p>The PROV data model introduces the qualifier <span class="name">role</span> in the <a href="#prov-dm-namespace">PROV-DM namespace</a> to denote the function of an entity with respect to an activity, in the context of a use/generation/control relation. The value associated with a <span class="name">role</span> attribute MUST be conformant with  <span class="nonterminal">Literal</span>. </p>
-
-
-<p>
-The following control record qualifies the role of the agent  identified by <span class="name">a5</span> in this control relation. </p>
-<pre class="example">
-          wasControlledBy(pe4,a5, qualifier(prov:role="communicator"))
-</pre>
-
-
-
-
-
-</section>
+
 
 <section id="record-attribute">
 <h4>Attribute</h4>
@@ -2118,27 +2044,54 @@
 <em>a qualified name</em></div>
 
 <p>If a namespace prefix occurs in the qualified name, it refers to a namespace declared in the record container.</p>
-</section>
-
-
-<section id="record-name">
-<h4>Name</h4>
-
-
-<p>A <dfn id="dfn-name">name</dfn> is a finite sequence of characters. (Exact production TBD).</p>
-
-<div class='grammar'>
-<span class="nonterminal">name</span>&nbsp;:=  
-<em>a qualified name</em></div>
-<p>If a namespace prefix occurs in the qualified name, it refers to a namespace declared in the record container.</p>
-
-<div class='note'>Proposed to adopt the abbreviatedIRI definition of OWL2 [[!OWL2-SYNTAX]]
-(see section <a href="http://www.w3.org/TR/2009/REC-owl2-syntax-20091027/#IRIs">IRIs</a>).
+
+
+<p>The PROV data model introduces the attribute <span class="name">role</span> in the <a href="#prov-dm-namespace">PROV-DM namespace</a> to denote the function of an entity with respect to an activity, in the context of a use/generation/control relation. The value associated with a <span class="name">role</span> attribute MUST be conformant with  <span class="nonterminal">Literal</span>. </p>
+
+
+<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>
+<pre class="example">
+          wasControlledBy(pe4,a5, [prov:role="communicator"])
+</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> 
+By definition, a use  (resp. generation, control) record does not contain an identifier.
+If one wants to annotate a use  (resp. generation, control) record, this record MUST be identifiable from its constituents, i.e. its source's identifier, its destination's identifier, and its attributes.</p> 
+
+<p> To be able to annotate  use  (resp. generation, control) records that refer to a given activity identifier, 
+ any  attribute-value set occurring in use records (resp. generation, control) with this identifier and a given entity record identifier MUST be unique.</p>
+
+<div class='note'>It may seem strange that we do not require use records to have an identifier. Mandating the presence of identifiers in use records would facilitate their annotation. However, this would make it difficult for use records to be encoded as properties in OWL2.
+</div>
+
+<p>Attribute-value are used in determining the exact source and destination  of a <span class="nonterminal">pe-linked-derivationRecord</span>. Hence,
+if one wants to express a <span class="nonterminal">pe-linked-derivationRecord</span> referring to an entity record and an activity record, then:</p>
+<ul>
+<li>the set of attribute-values of a use record MUST be unique among the set of attribute-values occurring in use records for this activity;
+<li>the set of attribute-values of a generation record MUST be unique among the set of attribute-values occurring in generation records for this activity.
+</ul>
+
+
+
+
+
+
+
 </section>
 
+
+
 <section id="record-identifier">
 <h4>Identifier</h4>
 
@@ -2152,7 +2105,7 @@
 <span class="nonterminal">identifier</span>&nbsp;:=  
 <em>?????</em></div>
 
-<div class='note'>We are going to introduce a notion of qualified identifier, which allows us to refer to an identifier in the scope of a given account. Given that accounts may be nested, a qualifier identifier will be prefixed by a sequence of account identifiers, and then followed by an identifier, local to the innermost account.
+<div class='note'>We are going to introduce a notion of qualified identifier, which allows us to refer to an identifier in the scope of a given account. Given that accounts may be nested, a qualified identifier will be prefixed by a sequence of account identifiers, and then followed by an identifier, local to the innermost account.
 </div>
 
 
@@ -2313,42 +2266,9 @@
 
 </section>
 
-    <section id="extensibility-section"> 
-<h2>PROV-DM Extensibility Points</h2>
-
-
-<p>The PROV data model provides several extensibility points that allow designers to specialize it to specific applications or domains. We summarize these extensibility points here:
-
-<ul>
-<li> Attributes are constructs of the data model that allow representations of aspects of the world's entities and activities to be expressed.  Applications are free to introduce application-specific attributes, according to their perspective on the world.  Attributes for a given application can be distinguished by qualifying them with a prefix denoting a namespace declared in a namespace declaration.
-
-<p>The <a href="#prov-dm-namespace">PROV-DM namespace</a> declares a set of reserved attributes: <span class="name">type</span>, <span class="name">location</span>.</li>
-
-<li>Annotation records allow arbitrary metadata to be associated with identifiable records of PROV-DM. Annotation records consist of name-value pairs. Like attributes, names are qualified by a namespace.</li>
-
-<li> Qualifiers offer a mechanism to
-describe modalities of use, generation, and control  
-They consist of a set of name-value pairs. Such names
-are also qualified by namespaces.
-
-<p>The <a href="#prov-dm-namespace">PROV-DM namespace</a> declares a reserved qualifier: <span class="name">role</span>.</p></li>
-
-<li>Namespaces allow attributes and names to be qualified. </li>
-
-<li>Subtyping is allowed by means of the reserved attribute <span class="name">type</span>.</li>
-
-<li>Domain specific values can be expressed by means of typed literals. </li>
-</ul>
-
-<p>The PROV data model is designed to be application and technology independent, but specializations of PROV-DM are welcome and encouraged.  To ensure inter-operability, specializations of the PROV data model that exploit the extensibility points summarized in this section MUST preserve the semantics specified in this document. For instance, a qualified attribute on a domain specific entity record MUST represent an aspect of an entity and this aspect MUST remain unchanged during the characterization's interval of this entity record.</p>
-
-
-
-    </section> 
-
-
-    <section id="prov-dm-extensions"> 
-<h2>PROV-DM extensions</h2>
+
+    <section id="prov-dm-shortcuts-and-abbreviations"> 
+<h2>PROV-DM Shortcuts and Abbreviations</h2>
 
 
 <section id="record-Collection">
@@ -2495,11 +2415,11 @@
 <span class="name">e</span> and <span class="name">ag</span>,  
 <span class='conditional'>then</span> there exists an activity identified by <span class="name">pe</span> such that the following statements hold:
 <pre>
-activity(pe,recipe,t1,t2,attr)
+activity(pe,recipe,t1,t2,attr1)
 wasGenerateBy(e,pe)
-wasControlledBy(pe,ag,q)
+wasControlledBy(pe,ag,attr2)
 </pre>
-for some attribute-value pairs <span class="name">attr</span>, time <span class="name">t1</span>, <span class="name">t2</span>,  and qualifier <span class="name">q</span>. 
+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>
 </section>
 
@@ -2508,7 +2428,6 @@
 <h3>Quotation Record</h3>
 
 
-
 <p> A quotation record is a representation of the repeating or copying of some part of an entity, compatible with 
 the <span class="nonterminal">quotationRecord</span> production.</p>
 
@@ -2612,6 +2531,43 @@
 </section> 
 </section>
 
+    <section id="extensibility-section"> 
+<h2>PROV-DM Extensibility Points</h2>
+
+
+<p>The PROV data model provides several extensibility points that allow designers to specialize it to specific applications or domains. We summarize these extensibility points here:
+
+<ul>
+<li> Attributes are constructs of the data model that allow representations of aspects of the world's entities and activities to be expressed.  Applications are free to introduce application-specific attributes, according to their perspective on the world.  Attributes for a given application can be distinguished by qualifying them with a prefix denoting a namespace declared in a namespace declaration.
+
+<p>The <a href="#prov-dm-namespace">PROV-DM namespace</a> declares a set of reserved attributes: <span class="name">type</span>, <span class="name">location</span>.</li>
+
+
+<li> Sets of Attribute-value pairs offer a mechanism to
+describe modalities of use, generation, and control  
+Such attributes are also qualified by namespaces.
+
+<p>The <a href="#prov-dm-namespace">PROV-DM namespace</a> declares a reserved attribute: <span class="name">role</span>.</p></li>
+
+
+<li>Annotation records allow arbitrary metadata to be associated with identifiable records of PROV-DM. Annotation records consist of name-value pairs. Like attributes, names are qualified by a namespace.</li>
+
+
+<li>Namespaces allow attributes and names to be qualified. </li>
+
+<li>Subtyping is allowed by means of the reserved attribute <span class="name">type</span>.</li>
+
+<li>Domain specific values can be expressed by means of typed literals. </li>
+</ul>
+
+<p>The PROV data model is designed to be application and technology independent, but specializations of PROV-DM are welcome and encouraged.  To ensure inter-operability, specializations of the PROV data model that exploit the extensibility points summarized in this section MUST preserve the semantics specified in this document. For instance, a qualified attribute on a domain specific entity record MUST represent an aspect of an entity and this aspect MUST remain unchanged during the characterization's interval of this entity record.</p>
+
+
+
+    </section> 
+
+
+
 <section id="resource-section">
 <h2>Resources, URIs, Entities, Identifiers, and Scope</h2> 
 
@@ -2711,6 +2667,8 @@
 <section class="appendix"> 
       <h2>Changes Since Previous Version</h2> 
 <ul>
+<li>11/11/11: Swapped sections 6 and 7.</li>
+<li>11/11/11: Use attribute-value pairs uniformly, instead of qualifiers and name-value pairs.</li>
 <li>11/08/11: Renamed 'provenance container' into 'record container'.</li>
 <li>11/07/11: Addressed ISSUE-143 (qualifiers as a set of name value pairs).</li>
 <li>11/07/11: Added a section on Literals (ISSUE-142).</li>