collection without dictionary
authorLuc Moreau <l.moreau@ecs.soton.ac.uk>
Sun, 24 Jun 2012 11:09:59 -0700
changeset 3440 0bc745f5631a
parent 3439 120efb4c6e36
child 3441 9dd4dfcb6585
collection without dictionary
model/prov-dm.html
--- a/model/prov-dm.html	Sun Jun 24 08:26:42 2012 -0700
+++ b/model/prov-dm.html	Sun Jun 24 11:09:59 2012 -0700
@@ -1518,12 +1518,7 @@
 
 
 <tr class="component6-color"><td class="provType"><a>Collection</a></td><td><a title="collection">... prov:type='prov:Collection' ...</a></td><td  rowspan="7"><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>Dictionary Membership</a></td><td><a title="memberOf-d">memberOf(d, {(key_1, e_1), ..., (key_n, e_n)})</a></td></tr>
+<tr class="component6-color"><td><a>Collection Membership</a></td><td><a title="memberOf">memberOf(id; c, {e_1, ..., e_n}, cplt, attrs)</a></td></tr>
 </table>
 </div>
 
@@ -1925,14 +1920,14 @@
 but the BBC news home page on the next day did not.
 <pre class="codeexample">
 entity(ex:bbcNews2012-04-03)
-memberOf(ex:bbcNews2012-04-03, {("item1", bbc:news/uk-17595024)})
+memberOf(ex:bbcNews2012-04-03, {bbc:news/uk-17595024})
 wasGeneratedBy  (ex:bbcNews2012-04-03, -, 2012-04-03T00:00:01)
 wasInvalidatedBy(ex:bbcNews2012-04-03, -, 2012-04-03T23:59:59)
 </pre>
 
 We refer to example
 <a href="#anexample-specialization" class="anexample-ref"><span>Example REF</span></a>
- for further descriptions of the BBC Web site, and to  <a href="#term-dictionary-membership">Section 5.6.5</a> for a description of the relation <a title="memberOf-d">memberOf</a>.
+ for further descriptions of the BBC Web site, and to  <a href="#term-dictionary-membership">Section 5.6.5</a> for a description of the relation <a title="memberOf">memberOf</a>.
 </div>
 
 
@@ -2987,14 +2982,13 @@
 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).
+the sixth component with a  new classe (Collection) and one association (memberOf).
 </p>
 
 
 <div style="text-align: center;">
 <figure>
-<!-- <img src="images/Dictionaries.png" alt="dictionaries"/> -->
-<img src="uml/component6.png" alt="dictionaries"/>
+<img src="uml/component6.png" alt="collection"/>
 
 <figcaption id="figure-component6">Figure 10: Collections Component Overview</figcaption>
 </figure>
@@ -3031,7 +3025,6 @@
 </pre>
 </div>
 
-<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>
 
@@ -3069,232 +3062,10 @@
 
 </section>
 
-<section id="term-dictionary">
-<h3>Dictionary</h3>
-
-<p>PROV-DM defines a specific type of collection, specified as follows.</p>
-
-
-<span class="glossary-ref" data-ref="glossary-dictionary"></span>
-
-<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.</p>
-
-<!--
-<span class="glossary-ref" data-ref="glossary-empty-dictionary"></span>
--->
-
-
-<p>Following the earlier definitions for generic collections,  PROV-DM defines the following types related to dictionaries:</p>
-
-<ul>
-  <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>
-
-
-<div class="anexample">
-<pre class="codeexample">
-entity(d0, [prov:type='prov:EmptyDictionary' ])  // d0 is an empty dictionary
-entity(d1, [prov:type='prov:Dictionary'  ])      // d1 is a dictionary, with unknown content
-</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> has the same purpose as the <a href="#term-collection-membership">collection membership</a> relation, but it 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-d">
- 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.dictionary">dictionary</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-d">
-The attribute <a href="#membership-d.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>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>
-<li><span class='attribute' id="insertion.id">id</span>:  an OPTIONAL identifier identifying the relation;</li>
-<li><span class='attribute' id="insertion.after">after</span>: an identifier (<span class="name">d2</span>) for the dictionary <em>after</em> insertion; </li>
-<li><span class='attribute' id="insertion.before">before</span>: an identifier (<span class="name">d1</span>) for the dictionary <em>before</em> insertion;</li>
-<li><span class='attribute' id="insertion.key-entity-set">key-entity-set</span>: the inserted key-entity pairs <span class="name">(key_1, e_1)</span>, ..., <span class="name">(key_n, e_n)</span> in which each <span class="name">key_i</span> is a <a>value</a>, and <span class="name">e_i</span> is an identifier  for the entity that has been inserted with the key;
- each <span class="name">key_i</span> is expected to be unique for the key-entity-set;
-</li>
-<li><span class='attribute' id="insertion.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>
-An Insertion relation <span class="name">derivedByInsertionFrom(id; d2, d1,  {(key_1, e_1), ..., (key_n, e_n)})</span> states that  <span class="name">d2</span> is the dictionary
-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
-entity(e1)
-entity(e2)
-entity(e3)
-entity(d1, [prov:type='prov:Dictionary' ])
-entity(d2, [prov:type='prov:Dictionary' ])
-
-derivedByInsertionFrom(d1, d0, {("k1", e1), ("k2", e2)})       
-derivedByInsertionFrom(d2, d1, {("k3", e3)})    
-</pre>
-From this set of descriptions, we conclude:
-<ul>
-<li>   <span class="name">d0</span> is the set <span class="name">{  }</span>
-<li>   <span class="name">d1</span> is the set <span class="name">{ ("k1", e1), ("k2", e2) }</span>
-<li>   <span class="name">d2</span> is the set <span class="name">{ ("k1", e1), ("k2", e2), ("k3", e3) }</span>
-</ul>
-</div>
-
-<p>Insertion provides an "update semantics" for the keys that are already present in a dictionary,
-since a new pair replaces an existing pair with the same key in the new dictionary. This is illustrated by the following example.</p>
-
-<div class="anexample">
-<pre class="codeexample">
-entity(d0, [prov:type='prov:EmptyDictionary' ])    // d0 is an empty dictionary
-entity(e1)
-entity(e2)
-entity(e3)
-entity(d1, [prov:type='prov:Dictionary' ])
-entity(d2, [prov:type='prov:Dictionary' ])
-
-derivedByInsertionFrom(d1, d0, {("k1", e1), ("k2", e2)})       
-derivedByInsertionFrom(d2, d1, {("k1", e3)})    
-</pre>
-   This is a case of <em>update</em> of <span class="name">e1</span> to <span class="name">e3</span> for the same key, <span class="name">"k1"</span>. <br/>
-  From this set of descriptions, we conclude:
-<ul>
-<li>   <span class="name">d0</span> is the set <span class="name">{  }</span>
-<li>   <span class="name">d1</span> is the set <span class="name">{ ("k1", e1), ("k2", e2) }</span>
-<li>   <span class="name">d2</span> is the set <span class="name">{ ("k1", e3), ("k2", e2) }</span>
-</ul>
-</div>
-
-</section>  <!-- insertion -->
-
-
-<section id="term-dictionary-removal">
-<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>
-<ul>
-<li><span class='attribute' id="removal.id">id</span>:  an OPTIONAL identifier identifying the relation;</li>
-<li><span class='attribute' id="removal.after">after</span>: an identifier (<span class="name">d2</span>) for the dictionary  <em>after</em> the deletion; </li>
-<li><span class='attribute' id="removal.before">before</span>: an identifier (<span class="name">d1</span>)  for the dictionary <em>before</em> the deletion;</li>
-<li><span class='attribute' id="removal.key-set">key-set</span>: a set of deleted keys  <span class="name">key_1</span>, ..., <span class="name">key_n</span>, for which each <span class="name">key_i</span> is a <a>value</a>;</li>
-<li><span class='attribute' id="removal.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>A Removal relation <span class="name">derivedByRemovalFrom(id; d2,d1, {key_1, ..., key_n})</span> states that  <span class="name">d2</span> is  the  dictionary following the removal of the set of pairs corresponding to keys  <span class="name">key_1...key_n</span> from  <span class="name">d1</span>.
-
-<div class="anexample">
-<pre class="codeexample">
-entity(d0, [prov:type="prov:EmptyDictionary"])    // d0 is an empty dictionary
-entity(e1)
-entity(e2)
-entity(e3)
-entity(d1, [prov:type="prov:Dictionary"])
-entity(d2, [prov:type="prov:Dictionary"])
-
-derivedByInsertionFrom(d1, d0, {("k1", e1), ("k2",e2)})       
-derivedByInsertionFrom(d2, d1, {("k3", e3)})
-derivedByRemovalFrom(d3, d2, {"k1", "k3"})   
-</pre>
-From this set of descriptions, we conclude:
-<ul>
-<li><span class="name">d0</span> is the set <span class="name">{  }</span>
-<li><span class="name">d1</span> is the set <span class="name">{ ("k1", e1), ("k2", e2)  }</span>
-<li><span class="name">d2</span> is the set <span class="name">{ ("k1", e1), ("k2", e2), ("k3", e3) }</span>
-<li><span class="name">d3</span> is the set <span class="name">{ ("k2", e2) }</span>
-</ul>
+
 
   
-</div>
-
-</section>  <!-- removal -->
-
-
-<p>Further considerations: </p>
-
-<ul>
-
-<!--
-<li>The state of a dictionary (i.e., the set of key-entity pairs it contains) at a given point in a sequence of operations is never stated explicitly. Rather, it can be obtained by querying the chain of derivations involving insertions and removals. Entity type <span class="name">emptyDictionary</span> can be used in this context as it marks the start of a sequence of dictionary operations.</li>
--->
-
-<li>The representation of a dictionary through these relations makes no assumption regarding the underlying data structure used to store and manage dictionaries. In particular, no assumptions are needed regarding the mutability of a data structure that is subject to updates. Entities, however, are immutable and this applies  to those entities that represent dictionaries. This is reflected in the constraints listed in [[PROV-CONSTRAINTS]].  </li>
-</ul>
-
-  
-</section>   <!-- end dictionaries-->
+</section>   <!-- end collections-->