--- a/model/prov-dm.html Sat Jun 09 18:14:31 2012 +0100
+++ b/model/prov-dm.html Mon Jun 11 09:23:00 2012 +0100
@@ -999,7 +999,8 @@
<h2>Collections</h2>
<p>
-<span class="glossary-ref" data-ref="glossary-collection" data-withspan="true"></span> This concept allows for the provenance of the collection itself to be expressed in addition to that of the members. Many different types of collections exist, such as a <em>sets</em>, <em>dictionaries</em>, or <em>lists</em>, all of which involve a membership relationship between the constituents and the collection. </p>
+<span class="glossary-ref" data-ref="glossary-collection" data-withspan="true"></span> Many different types of collections exist, such as a <em>sets</em>, <em>dictionaries</em>, or <em>lists</em>.
+Using Collections, one can express the provenance of the collection itself in addition to that of the members. The provenance of the collection is the history of all insertions into and deletions from the collection. This may be complemented by explicit membership statements which enumerate the contents of the collection. </p>
<div class="anexample conceptexample" id="collection-example">
<p>
@@ -1430,11 +1431,12 @@
<tr class="component6-color"><td class="provType"><a>Collection</a></td><td><a title="collection">... prov:type='prov:Collection' ...</a></td><td rowspan="6"><a href="#component6">Component 6: Collections</a></td></tr>
+<tr class="component6-color"><td><a>Collection Membership</a></td><td><a title="memberOf">memberOf(c, {e_1, ..., e_n})</a></td></tr>
<tr class="component6-color"><td class="provType"><a>Dictionary</a></td><td><a title="dictionary">... prov:type='prov:Dictionary' ...</a></td></tr>
<tr class="component6-color"><td class="provType"><a title="empty dictionary">EmptyDictionary</a></td><td><a title="empty dictionary">... prov:type='prov:EmptyDictionary' ...</a></td></tr>
<tr class="component6-color"><td><a>Insertion</a></td><td><a title="derivedByInsertionFrom">derivedByInsertionFrom(id; c2, c1, {(key_1, e_1), ..., (key_n, e_n)}, attrs)</a></td></tr>
<tr class="component6-color"><td><a>Removal</a></td><td><a title="derivedByRemovalFrom">derivedByRemovalFrom(id; c2, c1, {key_1, ... key_n}, attrs)</a></td></tr>
-<tr class="component6-color"><td><a>Membership</a></td><td><a title="memberOf">memberOf(c, {(key_1, e_1), ..., (key_n, e_n)})</a></td></tr>
+<tr class="component6-color"><td><a>Dictionary Membership</a></td><td><a title="memberOf">memberOf(d, {(key_1, e_1), ..., (key_n, e_n)})</a></td></tr>
</table>
</div>
@@ -2873,7 +2875,7 @@
<h3>Component 6: Collections</h3>
<p>The sixth component of PROV-DM is concerned with the notion of collections.
-A collection is an entity that has some members. The members are themselves entities, and therefore their provenance can be expressed. Some applications need to be able to express the provenance of the collection itself: e.g. who maintains the collection, which members it contains as it evolves, and how it was assembled. The purpose of Component 6 is to define the types and relations that are useful to express the provenance of collections. In PROV, the concept of Collection is implemented by means of dictionaries, which we introduce in this section. </p>
+A collection is an entity that has some members. The members are themselves entities, and therefore their provenance can be expressed. Some applications need to be able to express the provenance of the collection itself: e.g. who maintains the collection (attribution), which members it contains as it evolves, and how it was assembled. The purpose of Component 6 is to define the types and relations that are useful to express the provenance of collections. In PROV, the concept of Collection is implemented by means of dictionaries, which we introduce in this section. </p>
<p><a href="#figure-component6">Figure 10</a> depicts
the sixth component with four new classes (Collection, Dictionary, EmptyDictionary, and Pair) and three associations (insertion, removal, and memberOf).
@@ -2890,24 +2892,72 @@
</div>
-<p>The intent of these relations and types is to express the <em>history of changes that occurred to a dictionary</em>.
-Changes to dictionaries are about the insertion of entities in dictionaries and the removal of members from dictionaries.
-Indirectly, such history provides a way to reconstruct the contents of a dictionary.</p>
+<p>The intent of these relations and types is to express the <em>history of changes that occurred to a collection</em>.
+Changes to collections are about the insertion of entities into, and the removal of entities from the collection.
+Indirectly, such history provides a way to reconstruct the contents of the collection.</p>
<section id="term-collection">
<h3>Collection</h3>
<span class="glossary-ref" data-ref="glossary-collection"></span>
-<p>In PROV, the concept of Collection is provided as an extensibility point for other kinds of collections. Collections are implemented by means of dictionaries, which are introduced next. </p>
+<p/>A collection is a multiset of entities (it is a multiset, rather than a set, because it may not be possible to verify that two distinct entity identitifiers do not denote, in fact, the same entity).
+
+<span class="glossary-ref" data-ref="glossary-empty-collection"></span>
+
+
+<p>PROV-DM defines the following types related to collections:</p>
+
+<ul>
+ <li> <span class="name">prov:Collection</span> denotes an entity of type Collection, i.e. an entity that can participate in relations amongst collections;
+
+ <li><span class="name">prov:EmptyCollection</span> denotes an empty collection.
+</ul>
+
+
+<div class="anexample">
+<pre class="codeexample">
+entity(c0, [prov:type='prov:EmptyCollection' ]) // c0 is an empty collection
+entity(c1, [prov:type='prov:Collection' ]) // c1 is a collection, with unknown content
+</pre>
+</div>
+
+A <strong>collection membership</strong> relation is defined, to allow stating the members of a Collection. <p/>
+
+<span class="glossary-ref" data-ref="glossary-collection-membership"></span>
+
+
+<p>
+<div class="attributes" id="attributes-memberOf">
+ A <dfn title="memberOf">membership</dfn> relation, written <span class="pnExpression">memberOf(id; c, {e_1, ..., e_n}, cplt, attrs)</span>, has:
+<ul>
+<li><span class='attribute' id="membership.id">id</span>: an OPTIONAL identifier identifying the relation;</li>
+<li><span class='attribute' id="membership.collection">collection</span>: an identifier (<span class="name">c</span>) for the collection whose members are asserted; </li>
+<li><span class='attribute' id="membership.entity-set">entity-set</span>: a set of entities <span class="name">e_1</span>, ..., <span class="name">e_n</span> that are members of the collection;</li>
+<li><span class='attribute' id="membership.complete">complete</span>: an OPTIONAL boolean
+<a title="value">Value</a> (<span class="name">cplt</span>). It is interpreted as follows:
+<ul>
+<li>if it is present and set to true, then c is believed to include all and only the members specified in the entity-set;
+<li>if it is present and set to false, then c is believed to include more members in addition to those specified in the entity-set;
+<li>if it is not present, then c is believed to include all the members specified in the entity-set, and it MAY include more.
+</ul>
+
+<li><span class='attribute' id="membership.attributes">attributes</span>: an OPTIONAL set (<span class="name">attrs</span>) of attribute-value pairs representing additional information about this relation.</li>
+</ul>
+
+</div>
+
+<p id="complete-attribute-note">
+Note that the attribute <a href="#membership.complete">complete</a> indicates that the <a title="memberOf">membership</a> relation provides a complete description of the collection membership. It is possible for different provenance descriptions to provide different membership statements regarding the same collection. The resolution of any potential conflict amongst such membership statements is defined by applications.</p>
+
+<p>In PROV, the concept of Collection is provided as an extensibility point for specialized kinds of collections. One of these, Dictionary, is defined next. </p>
</section>
<section id="term-dictionary">
<h3>Dictionary</h3>
-
-<p>PROV-DM defines a specific type of collection, a dictionary, specified as follows.</p>
+<p>PROV-DM defines a specific type of collection, specified as follows.</p>
<span class="glossary-ref" data-ref="glossary-dictionary"></span>
@@ -2915,28 +2965,22 @@
<p>Conceptually, a dictionary has a logical structure consisting of key-entity pairs. This structure is often referred to as a <em>map</em>, and is a generic indexing mechanism that can abstract commonly used data structures, including associative lists, relational tables, ordered lists, and more. The specification of such specialized structures in terms of key-value pairs is out of the scope of this document.</p>
<p>A given dictionary forms a given structure for its members. A different structure (obtained either by insertion or removal of members) constitutes a different dictionary. Hence,
- for the purpose of provenance, a dictionary entity is viewed as a snapshot of a structure. Insertion and removal operations result in new snapshots, each snapshot forming an identifiable dictionary entity. It is also useful to describe a dictionary as empty.</p>
-
-
+ for the purpose of provenance, a dictionary entity is viewed as a snapshot of a structure. Insertion and removal operations result in new snapshots, each snapshot forming an identifiable dictionary entity.</p>
+
+<!--
<span class="glossary-ref" data-ref="glossary-empty-dictionary"></span>
-
-
-<p>PROV-DM defines the following types related to dictionaries:</p>
+-->
+
+
+<p>Following the earlier definition for generic collections, PROV-DM defines the following types related to dictionaries:</p>
<ul>
- <li> <span class="name">prov:Dictionary</span> denotes an entity of type dictionary, i.e. an entity that can participate in relations amongst dictionaries;
-
- <li><span class="name">prov:EmptyDictionary</span> denotes an empty dictionary.
+ <li> <span class="name">prov:Dictionary</span> is a subtype of <span class="name">prov:Collection</span>. It denotes an entity of type dictionary, i.e. an entity that can participate in relations amongst dictionaries;
+
+ <li><span class="name">prov:EmptyDictionary</span> is a subtype of <span class="name">prov:EmptyCollection</span>. It denotes an empty dictionary.
</ul>
-
-
-
-<!--
-In addition, the attribute <span class="name">prov:content</span> is introduced to allow the explicit specification of the dictionary's content. The example below illustrates the syntax.
--->
-
<div class="anexample">
<pre class="codeexample">
entity(d0, [prov:type='prov:EmptyDictionary' ]) // d0 is an empty dictionary
@@ -2944,20 +2988,73 @@
</pre>
</div>
-
-
</section> <!-- end of dictionary-types -->
+<section id="term-dictionary-membership">
+<h3>Dictionary Membership</h3>
+
+
+<span class="glossary-ref" data-ref="glossary-dictionary-membership"></span>
+
+The <strong>dictionary membership</strong> is a specialization of the <a href="#term-collection">collection membership</a> relation, which applies to entities having <span class="name">prov:type = "prov:Dictionary"</span>. It allows stating the members of a Dictionary.
+
+<!--
+<p>
+The insertion and removal relations make insertions and removals explicit as part of the history of a dictionary. This, however, requires explicit reference to the dictionary that existed prior to each operation. The membership relation removes this need, allowing the membership of a dictionary to be expressed without having to introduce a prior dictionary.</p>
+-->
+
+<p>
+<div class="attributes" id="attributes-memberOf">
+ A <dfn title="memberOf-d">membership</dfn> relation, written <span class="pnExpression">memberOf(id; c, {(key_1, e_1), ..., (key_n, e_n)}, cplt, attrs)</span>, has:
+<ul>
+<li><span class='attribute' id="membership-d.id">id</span>: an OPTIONAL identifier identifying the relation;</li>
+<li><span class='attribute' id="membership-d.collection">collection</span>: an identifier (<span class="name">c</span>) for the dictionary whose members are asserted; </li>
+<li><span class='attribute' id="membership-d.key-entity-set">key-entity-set</span>: a set of key-entity pairs <span class="name">(key_1, e_1)</span>, ..., <span class="name">(key_n, e_n)</span> that are members of the dictionary;</li>
+<li><span class='attribute' id="membership-d.complete">complete</span>: an OPTIONAL boolean
+<a title="value">Value</a> (<span class="name">cplt</span>). It is interpreted as follows:
+<ul>
+<li>if it is present and set to true, then c is believed to include all and only the members specified in the key-entity-set;
+<li>if it is present and set to false, then c is believed to include more members in addition to those specified in the key-entity-set;
+<li>if it is not present, then c is believed to include all the members specified in the key-entity-set, and it MAY include more.
+</ul>
+
+<!-- if true, it indicates that no other member belongs to the dictionary; if false, it indicates that other members belong to the dictionary; if unspecified, other members MAY belong to the dictionary; -->
+<li><span class='attribute' id="membership-d.attributes">attributes</span>: an OPTIONAL set (<span class="name">attrs</span>) of attribute-value pairs representing additional information about this relation.</li>
+</ul>
+
+</div>
+
+<p id="complete-attribute-note">
+The attribute <a href="#membership.complete">complete</a> is interpreted as for the general <a href="#term-collection">collection membership</a> relation.
+
+<div class="anexample">
+<pre class="codeexample">
+entity(d1, [prov:type='prov:Dictionary' ]) // d1 is a dictionary, with unknown content
+entity(d2, [prov:type='prov:Dictionary' ]) // d2 is a dictionary, with unknown content
+
+entity(e1)
+entity(e2)
+
+memberOf(d1, {("k1", e1), ("k2", e2)} )
+memberOf(d2, {("k1", e1), ("k2", e2)}, true)
+
+</pre>
+From these descriptions, we conclude:
+<ul>
+<li> <span class="name">d1</span> has the following pairs as members: <span class="name">("k1", e1), ("k2", e2)</span>, and may contain others.
+<li> <span class="name">d2</span> exactly has the following pairs as members: <span class="name">("k1", e1), ("k2", e2)</span>, and does not contain any other.
+</ul>
+<p> Thus, the membership of <span class="name">d1</span> is only partially known.</p>
+</div>
+
+</section> <!-- Membership -->
+
<section id="term-dictionary-insertion">
-<h3>Insertion</h3>
+<h3>Dictionary Insertion</h3>
<span class="glossary-ref" data-ref="glossary-insertion"></span>
-
-
-
-
<p><div class="attributes" id="attributes-derivedByInsertionFrom">
<p>An <dfn title="derivedByInsertionFrom">Insertion</dfn> relation<span class="withPn">, written <span class="pnExpression">derivedByInsertionFrom(id; d2, d1, {(key_1, e_1), ..., (key_n, e_n)}, attrs)</span>,</span> has:</p>
<ul>
@@ -2976,10 +3073,6 @@
following the insertion of pairs <span class="name">(key_1, e_1)</span>, ..., <span class="name">(key_n, e_n)</span> into dictionary <span class="name">d1</span>.</p>
-
-
-
-
<div class="anexample">
<pre class="codeexample">
entity(d0, [prov:type='prov:EmptyDictionary' ]) // d0 is an empty dictionary
@@ -3028,13 +3121,11 @@
<section id="term-dictionary-removal">
-<h3>Removal</h3>
+<h3>Dictionary Removal</h3>
<span class="glossary-ref" data-ref="glossary-removal"></span>
-
-
<p>
<div class="attributes" id="attributes-derivedByRemovalFrom">
<p> A <dfn title="derivedByRemovalFrom">Removal</dfn> relation, written <span class="pnExpression">derivedByRemovalFrom(id; d2, d1, {key_1, ... key_n}, attrs)</span>, has:</p>
@@ -3076,83 +3167,6 @@
</section> <!-- removal -->
-<section id="term-dictionary-membership">
-<h3>Membership</h3>
-
-
-<span class="glossary-ref" data-ref="glossary-membership"></span>
-
-<p>
-The insertion and removal relations make insertions and removals explicit as part of the history of a dictionary. This, however, requires explicit reference to the dictionary that existed prior to each operation. The membership relation removes this need, allowing the membership of a dictionary to be expressed without having to introduce a prior dictionary.</p>
-
-<p>
-<div class="attributes" id="attributes-memberOf">
- A <dfn title="memberOf">membership</dfn> relation, written <span class="pnExpression">memberOf(id; c, {(key_1, e_1), ..., (key_n, e_n)}, cplt, attrs)</span>, has:
-<ul>
-<li><span class='attribute' id="membership.id">id</span>: an OPTIONAL identifier identifying the relation;</li>
-<li><span class='attribute' id="membership.collection">collection</span>: an identifier (<span class="name">c</span>) for the dictionary whose members are asserted; </li>
-<li><span class='attribute' id="membership.key-entity-set">key-entity-set</span>: a set of key-entity pairs <span class="name">(key_1, e_1)</span>, ..., <span class="name">(key_n, e_n)</span> that are members of the dictionary;</li>
-<li><span class='attribute' id="membership.complete">complete</span>: an OPTIONAL boolean
-<a title="value">Value</a> (<span class="name">cplt</span>). It is interpreted as follows:
-<ul>
-<li>if it is present and set to true, then c is believed to include all and only the members specified in the key-entity-set;
-<li>if it is present and set to false, then c is believed to include more members in addition to those specified in the key-entity-set;
-<li>if it is not present, then c is believed to include all the members specified in the key-entity-set, and it MAY include more.
-</ul>
-
-<!-- if true, it indicates that no other member belongs to the dictionary; if false, it indicates that other members belong to the dictionary; if unspecified, other members MAY belong to the dictionary; -->
-<li><span class='attribute' id="membership.attributes">attributes</span>: an OPTIONAL set (<span class="name">attrs</span>) of attribute-value pairs representing additional information about this relation.</li>
-</ul>
-
-</div>
-
-<p id="complete-attribute-note">
-Note that the attribute <a href="#membership.complete">complete</a> indicates that the <a title="memberOf">membership</a> relation provides a complete description of the dictionary membership. It is possible for different provenance descriptions to provide different membership statements regarding the same collection. The resolution of any potential conflict amongst such membership statements is defined by applications.</p>
-
-
-<p>The description <span class="name">memberOf(c, {(key_1, e_1), ..., (key_n, e_n)})</span> states that <span class="name">c</span> is known to include <span class="name">(key_1, e_1)</span>, ..., <span class="name">(key_n, e_n)}</span>, without having to introduce a previous dictionary. </p>
-
-<div class="anexample">
-<pre class="codeexample">
-entity(d1, [prov:type='prov:Dictionary' ]) // d1 is a dictionary, with unknown content
-entity(d2, [prov:type='prov:Dictionary' ]) // d2 is a dictionary, with unknown content
-
-entity(e1)
-entity(e2)
-
-memberOf(d1, {("k1", e1), ("k2", e2)} )
-memberOf(d2, {("k1", e1), ("k2", e2)}, true)
-
-entity(e3)
-entity(d3, [prov:type='prov:Dictionary' ])
-
-derivedByInsertionFrom(d3, d1, {("k3", e3)})
-</pre>
-From these descriptions, we conclude:
-<ul>
-<li> <span class="name">d1</span> has the following pairs as members: <span class="name">("k1", e1), ("k2", e2)</span>, and may contain others.
-<li> <span class="name">d2</span> exactly has the following pairs as members: <span class="name">("k1", e1), ("k2", e2)</span>, and does not contain any other.
-<li> <span class="name">d3</span> has the following pairs as members: <span class="name">("k1", e1), ("k2", e2), ("k3", v3)</span>, and may contain others.
-</ul>
-<p> Thus, the membership of <span class="name">d1</span> and <span class="name">d3</span> is only partially known.</p>
-</div>
-
-<!-- To go to part 2
-
-
- Note that the following one cannot have at the same time an empty dictionary and membership relations for it, i.e., the following example is invalid:
-<pre class="codeexample">
- <span class="name"> entity(c, [prov:type="EmptyDictionary"])</span>
- memberOf(c, {("k1", e1), ("k2", v2)} )
- </pre>
-
-
--->
-
-</section> <!-- Membership -->
-
-
-
<p>Further considerations: </p>
<ul>