* Added draft of typing summary table
authorJames Cheney <jcheney@inf.ed.ac.uk>
Thu, 16 Aug 2012 15:23:19 +0100
changeset 4341 aae9c125b746
parent 4340 a5c4eb9f3eb1
child 4342 7c2676a77460
* Added draft of typing summary table
model/prov-constraints.html
--- a/model/prov-constraints.html	Thu Aug 16 13:28:13 2012 +0100
+++ b/model/prov-constraints.html	Thu Aug 16 15:23:19 2012 +0100
@@ -777,6 +777,206 @@
 
 </section>
 
+<section id="typing">
+<h2>Types</h2>
+
+<p> As set out in other specifications, the identifiers used in PROV
+documents have associated type information.  An identifier can have
+more than one type, reflecting subtyping or allowed overlap between
+types, and so we define a set of types of each identifier, $<typeof(id)>$.  Some types are, however,
+required not to overlap (for example, no identifier can describe both
+an entity and an activity).
+In addition, an identifier cannot be used to identify both an object
+(that is, an entity, activity or agent) and a property (that is, a
+named event such as usage, generation, or a relationship such as
+attribution.)
+This specification includes disjointness and typing constraints that
+check these requirements.  Here, we merely
+summarize the type constraints in <a href="#typing-table">Table 1</a>.
+</p>
+
+
+    <table id="typing-table" border="1" class="thinborder" style="margin-left: auto; margin-right: auto; border-color: black;">
+<caption id="typing-table-caption">Table 1: Summary of Typing Constraints</caption>
+<tr><td style="border-width: 0px; "></td><td style="border-width: 0px; "></td><td style="border-width: 0px; "></td></tr>
+      <tr>
+	<th>Relation</th>
+	<th>Identifier </th>
+	<th>Types</th>
+      </tr>
+      <tr>
+	<td class="name">entity(e,attrs)</td>
+	<td class="name">e</td>
+	<td class="name">'entity'</td>
+      </tr>
+      <tr>
+	<td class="name">activity(a,t1,t2,attrs)</td>
+	<td class="name">a</td>
+	<td class="name">'activity'</td>
+      </tr>
+      <tr>
+	<td class="name">agent(ag,attrs)</td>
+	<td class="name">ag</td>
+	<td class="name">'agent'</td>
+      </tr>      <tr>
+	<td rowspan="2" class="name">used(id; a,e,t,attrs)</td>
+	<td class="name">e</td>
+	<td class="name">'entity'</td>
+     </tr>
+     <tr>
+	<td class="name">a</td>
+	<td class="name">'activity'</td>
+      </tr>
+     <tr >
+	<td rowspan="2" class="name">wasGeneratedBy(id; e,a,t,attrs)</td>
+	<td class="name">e</td>
+	<td class="name">'entity'</td>
+      </tr>
+     <tr>
+	<td class="name">a</td>
+	<td class="name">'activity'</td>
+    </tr>
+      <tr>
+	<td rowspan="2" class="name">wasInformedBy(id; a2,a1,attrs)</td>
+	<td class="name">a1</td>
+	<td class="name">'activity'</td>
+      </tr>
+      <tr>
+	<td class="name">a2</td>
+	<td class="name">'activity'</td>
+      </tr>
+    <tr>
+	<td rowspan=3 class="name">wasStartedBy(id; a2,e,a1,t,attrs)</td>
+	<td class="name">a2</td>
+	<td class="name">'activity'</td>
+      </tr>
+      <tr>
+	<td class="name">e</td>
+	<td class="name">'entity'</td>
+      </tr>
+      <tr>
+	<td class="name">a1</td>
+	<td class="name">'activity'</td>
+      </tr>
+      <tr>
+	<td rowspan="3" class="name">wasEndedBy(id; a2,e,a1,t,attrs)</td>
+	<td class="name">a2</td>
+	<td class="name">'activity'</td>
+      </tr>
+      <tr>
+	<td class="name">e</td>
+	<td class="name">'entity'</td>
+      </tr>
+      <tr>
+	<td class="name">a1</td>
+	<td class="name">'activity'</td>
+      </tr>
+      <tr>
+	<td rowspan="2" class="name">wasInvalidatedBy(id; e,a,t,attrs)</td>
+	<td class="name">a</td>
+	<td class="name">'activity'</td>
+      </tr>
+      <tr>
+	<td class="name">a</td>
+	<td class="name">'activity'</td>
+      </tr>
+      <tr>
+	<td rowspan="3" class="name">wasDerivedFrom(id; e2,e1,a,g,u,attrs)</td>
+	<td class="name">e2</td>
+	<td class="name">'entity'</td>
+     </tr>
+      <tr>
+	<td class="name">e1</td>
+	<td class="name">'entity'</td>
+     </tr>
+      <tr>
+	<td class="name">a</td>
+	<td class="name">'activity'</td>
+     </tr>
+     <tr>
+	<td rowspan="2" class="name">wasAttributedTo(id; e,ag,attr)</td>
+	<td class="name">e</td>
+	<td class="name">'entity'</td>
+     </tr>
+      <tr>
+	<td class="name">ag</td>
+	<td class="name">'agent'</td>
+     </tr>
+     <tr>
+	<td rowspan="3" class="name">wasAssociatedWith(id; a,ag,pl,attrs)</td>
+	<td class="name">a</td> 
+	<td class="name">'activity'</td>
+     </tr>
+      <tr>
+	<td class="name">ag</td> 
+	<td class="name">'agent'</td>
+     </tr>
+      <tr>
+	<td class="name">pl</td> 
+	<td class="name">'entity'</td>
+     </tr>
+      <tr>
+	<td  rowspan="3" class="name">actedOnBehalfOf(id; ag2,ag1,a,attrs)</td>
+    	<td class="name">ag2</td> 
+	<td class="name">'agent'</td>
+     </tr>
+     <tr>
+       <td class="name">ag1</td> 
+       <td class="name">'agent'</td>
+     </tr>
+      <tr>
+	<td class="name">a</td> 
+	<td class="name">'activity'</td>
+      </tr>
+      <tr>
+	<td  rowspan="2" class="name">alternateOf(e1,e2)</td>
+    	<td class="name">e1</td> 
+	<td class="name">'entity'</td>
+     </tr>
+     <tr>
+       <td class="name">e2</td> 
+       <td class="name">'entity'</td>
+     </tr>
+      <tr>
+	<td  rowspan="2" class="name">specializationOf(e1,e2)</td>
+    	<td class="name">e1</td> 
+	<td class="name">'entity'</td>
+     </tr>
+     <tr>
+       <td class="name">e2</td> 
+       <td class="name">'entity'</td>
+     </tr>
+      <tr>
+	<td  rowspan="3" class="name">mentionOf(e1,e2,b)</td>
+    	<td class="name">e1</td> 
+	<td class="name">'entity'</td>
+     </tr>
+     <tr>
+       <td class="name">e2</td> 
+       <td class="name">'entity'</td>
+     </tr>
+     <tr>
+       <td class="name">b</td> 
+       <td class="name">'entity'</td>
+     </tr>
+           <tr>
+	<td rowspan="2" class="name">hadMember(c,e)</td>
+    	<td class="name">c</td> 
+	<td class="name">'entity'<br /> 'prov:Collection'</td>
+     </tr>
+     <tr>
+       <td class="name">e</td> 
+       <td class="name">'entity'</td>
+     </tr>
+     <tr>
+	<td class="name">entity(c,[prov:type='prov:EmptyCollection,...])</td>
+    	<td class="name">c</td> 
+	<td class="name">'entity'<br /> 'prov:Collection' <br /> 'prov:EmptyCollection'</td>
+     </tr>
+ </table>
+    </div>
+
+</section>
 <section>
 <h4>Validation Process Overview</h4>
 
@@ -1078,7 +1278,7 @@
 <section>
 <h4>Summary of constraints and inferences</h4>
 
-<p><a href="">Table 1</a> summarizes the definitions, inferences, and
+<p><a href="">Table 2</a> summarizes the definitions, inferences, and
 constraints of this document.
 </p>
 
@@ -1086,7 +1286,7 @@
 
 <div id="prov-constraints-fig" style="text-align: left;">
 <table  class="thinborder" style="margin-left: auto; margin-right: auto; border-color: #0;">
-<caption id="prov-constraints">Table 1: Summary of definitions, constraints, and inferences for PROV Types and Relations</caption>
+<caption id="prov-constraints">Table 2: Summary of definitions, constraints, and inferences for PROV Types and Relations</caption>
 <tr><td><a><b>Type or Relation Name</b></a></td><td><b>
   Inferences and Constraints</b></td><td><b>Component</b></td></tr>
 <tr><td style="border-width: 0px; "></td><td style="border-width: 0px; "></td><td style="border-width: 0px; "></td></tr>
@@ -1382,7 +1582,7 @@
   All figures are for illustration purposes
   only.  Information in tables is normative if it appears in a
   normative section; specifically, <a
-  href="#expandable-parameters-fig">Table 2</a> is normative.  Text in appendices and
+  href="#expandable-parameters-fig">Table 3</a> is normative.  Text in appendices and
 in boxes labeled "Remark" is informative.  Where there is any apparent
   ambiguity between the descriptive text and the formal text in a
   "definition", "inference" or "constraint" box, the formal text takes
@@ -1642,7 +1842,7 @@
    expandable parameter is one that can be omitted using the
    placeholder <span class="name">-</span>, and if so, it is
    to be replaced by a fresh existential identifier.
-  <a href="#expandable-parameters-fig">Table 2</a> defines the <a>expandable
+  <a href="#expandable-parameters-fig">Table 3</a> defines the <a>expandable
     parameter</a>s of the properties of PROV, needed in <a class="rule-ref"
 href="#optional-placeholders"><span>TBD</span></a>.  For emphasis, the four optional parameters
     that are not <a title="expandable parameter">expandable</a> are
@@ -1652,7 +1852,7 @@
    href="#optional-identifiers"><span>TBD</span></a>, are not listed.</p>
   <div id="expandable-parameters-fig">
     <table id="expandable-parameters" border="1" class="thinborder" style="margin-left: auto; margin-right: auto; border-color: black;">
-<caption id="expandable-parameters">Table 2: Expandable and
+<caption id="expandable-parameters">Table 3: Expandable and
     Non-Expandable Parameters</caption>
 <tr><td style="border-width: 0px; "></td><td style="border-width: 0px; "></td><td style="border-width: 0px; "></td></tr>
       <tr>
@@ -1737,7 +1937,7 @@
 <p> <a class="rule-ref"
   href="#optional-placeholders"><span>TBD</span></a> states how parameters are to be expanded,
     using the expandable parameters defined in   <a
-  href="#expandable-parameters-fig">Table 2</a>.  The last two parts
+  href="#expandable-parameters-fig">Table 3</a>.  The last two parts
   indicate how to handle expansion of parameters for
   <span class="name">wasDerivedFrom</span> expansion, which is only allowed for the
   generation and use parameters when the activity is specified.  A
@@ -1780,7 +1980,7 @@
     }, if the <span class="name">i</span>th parameter
     of <span class="name">r</span> is an <a>expandable parameter</a>
     of <span class="name">r</span>
-    as specified in <a href="#expandable-parameters-fig">Table 2</a>
+    as specified in <a href="#expandable-parameters-fig">Table 3</a>
 then the following definition holds:
     <p> <span class="name">r(a<sub>0</sub>;...,a<sub>i-1</sub>, -, a<sub>i+1</sub>, ...,a<sub>n</sub>) </span> <span class="conditional">IF AND ONLY IF</span> there exists <span class="name">a'</span>
     such that <span class="name">r(a<sub>0</sub>;...,a<sub>i-1</sub>,a',a<sub>i+1</sub>,...,a<sub>n</sub>)</span>.
@@ -3623,14 +3823,6 @@
 <ol>
 <li>
 <span class='conditional'>IF</span> 
-   <span class='name'>wasGeneratedBy(gen; e,a,t,attrs)</span>  
-<span class='conditional'>THEN</span> 
-<span class="name">'entity' &isin; typeOf(e)</span> AND
-<span class="name">'activity' &isin; typeOf(a)</span>.
-
-
-<li>
-<span class='conditional'>IF</span> 
    <span class='name'>entity(e,attrs)</span>  
 <span class='conditional'>THEN</span> 
 <span class="name">'entity' &isin; typeOf(e)</span>.
@@ -3654,6 +3846,12 @@
 <span class="name">'activity' &isin; typeOf(a)</span> AND
 <span class="name">'entity' &isin; typeOf(e)</span>.
 
+<li>
+<span class='conditional'>IF</span> 
+   <span class='name'>wasGeneratedBy(gen; e,a,t,attrs)</span>  
+<span class='conditional'>THEN</span> 
+<span class="name">'entity' &isin; typeOf(e)</span> AND
+<span class="name">'activity' &isin; typeOf(a)</span>.
 
 <li>