--- 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' ∈ typeOf(e)</span> AND
-<span class="name">'activity' ∈ 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' ∈ typeOf(e)</span>.
@@ -3654,6 +3846,12 @@
<span class="name">'activity' ∈ typeOf(a)</span> AND
<span class="name">'entity' ∈ 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' ∈ typeOf(e)</span> AND
+<span class="name">'activity' ∈ typeOf(a)</span>.
<li>