to address http://www.w3.org/2011/prov/track/issues/262 :
authorTim L <lebot@rpi.edu>
Tue, 06 Mar 2012 15:35:08 -0500
changeset 1780 91e0b3623c0d
parent 1776 a488af865377
child 1781 d77f989a6b9c
to address http://www.w3.org/2011/prov/track/issues/262 :

removed prov:qualified
added qualifiedUsage and friends (and corresponding domains and ranges)
made qualifiedUsage and friends inverse functional.
removed prov:Element b/c it isn't being used in domains and ranges anymore and is distracting
added prov:agent to complete the set with prov:entity and prov:activity
prov:agent domain AgentInvolvement, range Agent
added prov:qualifiedForm and prov:unqualifiedForm annotation properties.
renamed Annotation property involvementClass to qualifiedForm
ontology/ProvenanceOntology.owl
--- a/ontology/ProvenanceOntology.owl	Tue Mar 06 11:10:19 2012 -0500
+++ b/ontology/ProvenanceOntology.owl	Tue Mar 06 15:35:08 2012 -0500
@@ -59,10 +59,16 @@
     </owl:AnnotationProperty>
     <owl:AnnotationProperty rdf:about="&rdfs;seeAlso"/>
     <owl:AnnotationProperty rdf:about="&prov;category"/>
+    <owl:AnnotationProperty rdf:about="&prov;unqualifiedForm">
+        <rdfs:subPropertyOf rdf:resource="&rdfs;seeAlso"/>
+    </owl:AnnotationProperty>
     <owl:AnnotationProperty rdf:about="&prov;involvementProperty">
         <rdfs:subPropertyOf rdf:resource="&rdfs;seeAlso"/>
     </owl:AnnotationProperty>
     <owl:AnnotationProperty rdf:about="&rdfs;label"/>
+    <owl:AnnotationProperty rdf:about="&prov;qualifiedForm">
+        <rdfs:subPropertyOf rdf:resource="&rdfs;seeAlso"/>
+    </owl:AnnotationProperty>
     <owl:AnnotationProperty rdf:about="&rdfs;comment"/>
     
 
@@ -91,7 +97,9 @@
         <rdfs:domain rdf:resource="&prov;Agent"/>
         <rdfs:range rdf:resource="&prov;Agent"/>
         <prov:involvementClass rdf:resource="&prov;Responsibility"/>
+        <prov:qualifiedForm rdf:resource="&prov;Responsibility"/>
         <rdfs:subPropertyOf rdf:resource="&prov;involved"/>
+        <prov:qualifiedForm rdf:resource="&prov;qualifiedResponsibility"/>
     </owl:ObjectProperty>
     
 
@@ -127,6 +135,16 @@
     
 
 
+    <!-- http://www.w3.org/ns/prov#agent -->
+
+    <owl:ObjectProperty rdf:about="&prov;agent">
+        <prov:category>qualified</prov:category>
+        <rdfs:range rdf:resource="&prov;Agent"/>
+        <rdfs:domain rdf:resource="&prov;AgentInvolvement"/>
+    </owl:ObjectProperty>
+    
+
+
     <!-- http://www.w3.org/ns/prov#alternateOf -->
 
     <owl:ObjectProperty rdf:about="&prov;alternateOf">
@@ -274,8 +292,6 @@
 prov:involved should not be used without also using the subproperty.
 
 Subproperties of prov:involved may also be asserted directly without being qualified.</rdfs:comment>
-        <rdfs:domain rdf:resource="&prov;Element"/>
-        <rdfs:range rdf:resource="&prov;Element"/>
         <prov:involvementClass rdf:resource="&prov;Involvement"/>
     </owl:ObjectProperty>
     
@@ -299,14 +315,182 @@
     
 
 
-    <!-- http://www.w3.org/ns/prov#qualified -->
+    <!-- http://www.w3.org/ns/prov#qualifiedAssociation -->
 
-    <owl:ObjectProperty rdf:about="&prov;qualified">
-        <rdfs:comment>This one property is used to associate a prov:Element (prov:Entity or prov:Activity) with an instance of any subclass of prov:Involvement, which will provide additional descriptions about the binary prov:involved relation. For example, :baking prov:used :pan, :egg; prov:wasAssociatedWith :baker; prov:generated :dirty_pan; prov:qualified [ a prov:Usage; prov:entity :egg; prov:role :ingredient], [ a prov:Association; prov:entity :baker; prov:role :leader ] .</rdfs:comment>
+    <owl:ObjectProperty rdf:about="&prov;qualifiedAssociation">
+        <rdf:type rdf:resource="&owl;InverseFunctionalProperty"/>
+        <rdfs:comment>If this Activity prov:wasAssociatedWith Agent :ag, then it can qualify the Association using prov:qualifiedAssociation [ a prov:Association;  prov:agent :ag; :foo :bar ].</rdfs:comment>
         <prov:category>qualified</prov:category>
-        <rdfs:comment>The subproperties here can be deleted without concern. For example, :element prov:qualified [ a prov:Usage ] handles the case of prov:hadQualifiedUsage . http://www.w3.org/2011/prov/track/issues/255</rdfs:comment>
-        <rdfs:domain rdf:resource="&prov;Element"/>
-        <rdfs:range rdf:resource="&prov;Involvement"/>
+        <rdfs:domain rdf:resource="&prov;Activity"/>
+        <rdfs:range rdf:resource="&prov;Agent"/>
+        <prov:unqualifiedForm rdf:resource="&prov;wasAssociatedWith"/>
+    </owl:ObjectProperty>
+    
+
+
+    <!-- http://www.w3.org/ns/prov#qualifiedAttribution -->
+
+    <owl:ObjectProperty rdf:about="&prov;qualifiedAttribution">
+        <rdf:type rdf:resource="&owl;InverseFunctionalProperty"/>
+        <prov:category>qualified</prov:category>
+        <rdfs:comment>If this Entity prov:wasAttributedTo Agent :ag, then it can qualify how it was  using prov:qualifiedAttribution [ a prov:Attribution;  prov:agent :ag; :foo :bar ].</rdfs:comment>
+        <rdfs:range rdf:resource="&prov;Agent"/>
+        <rdfs:domain rdf:resource="&prov;Entity"/>
+        <prov:unqualifiedForm rdf:resource="&prov;wasAttributedTo"/>
+    </owl:ObjectProperty>
+    
+
+
+    <!-- http://www.w3.org/ns/prov#qualifiedDerivation -->
+
+    <owl:ObjectProperty rdf:about="&prov;qualifiedDerivation">
+        <rdf:type rdf:resource="&owl;InverseFunctionalProperty"/>
+        <prov:category>qualified</prov:category>
+        <rdfs:comment>If this Entity prov:wasDerivedFrom Entity :e, then it can qualify how it was derived using prov:qualifiedDerivation [ a prov:Derivation;  prov:entity :e; :foo :bar ].</rdfs:comment>
+        <rdfs:range rdf:resource="&prov;Entity"/>
+        <rdfs:domain rdf:resource="&prov;Entity"/>
+        <prov:unqualifiedForm rdf:resource="&prov;wasDerivedFrom"/>
+    </owl:ObjectProperty>
+    
+
+
+    <!-- http://www.w3.org/ns/prov#qualifiedEnd -->
+
+    <owl:ObjectProperty rdf:about="&prov;qualifiedEnd">
+        <rdf:type rdf:resource="&owl;InverseFunctionalProperty"/>
+        <prov:category>qualified</prov:category>
+        <rdfs:comment>If this Activity prov:wasEndedBy Agent :ag, then it can qualify how it was ended using prov:qualifiedEnd [ a prov:End;  prov:agent :ag; :foo :bar ].</rdfs:comment>
+        <rdfs:domain rdf:resource="&prov;Activity"/>
+        <rdfs:range rdf:resource="&prov;Agent"/>
+        <prov:unqualifiedForm rdf:resource="&prov;wasEndedBy"/>
+    </owl:ObjectProperty>
+    
+
+
+    <!-- http://www.w3.org/ns/prov#qualifiedGeneration -->
+
+    <owl:ObjectProperty rdf:about="&prov;qualifiedGeneration">
+        <rdf:type rdf:resource="&owl;InverseFunctionalProperty"/>
+        <rdfs:comment>If this Activity prov:generated Entity :e, then it can qualify how it did performed the Generation using prov:qualifiedGeneration [ a prov:Generation;  prov:entity :e; :foo :bar ].</rdfs:comment>
+        <prov:category>qualified</prov:category>
+        <rdfs:range rdf:resource="&prov;Activity"/>
+        <rdfs:domain rdf:resource="&prov;Entity"/>
+        <prov:unqualifiedForm rdf:resource="&prov;wasGeneratedBy"/>
+    </owl:ObjectProperty>
+    
+
+
+    <!-- http://www.w3.org/ns/prov#qualifiedInform -->
+
+    <owl:ObjectProperty rdf:about="&prov;qualifiedInform">
+        <rdf:type rdf:resource="&owl;InverseFunctionalProperty"/>
+        <rdfs:comment>If this Activity prov:wasInformedBy Activity :a, then it can qualify how it was Inform[ed] using prov:qualifiedInform [ a prov:Inform;  prov:activity :a; :foo :bar ].</rdfs:comment>
+        <prov:category>qualified</prov:category>
+        <rdfs:domain rdf:resource="&prov;Activity"/>
+        <rdfs:range rdf:resource="&prov;Activity"/>
+        <prov:unqualifiedForm rdf:resource="&prov;wasInformedBy"/>
+    </owl:ObjectProperty>
+    
+
+
+    <!-- http://www.w3.org/ns/prov#qualifiedQuotation -->
+
+    <owl:ObjectProperty rdf:about="&prov;qualifiedQuotation">
+        <rdf:type rdf:resource="&owl;InverseFunctionalProperty"/>
+        <prov:category>qualified</prov:category>
+        <rdfs:comment>If this Entity prov:wasQuotedFrom Entity :e, then it can qualify how using prov:qualifiedQuotation [ a prov:Quotation;  prov:entity :e; :foo :bar ].</rdfs:comment>
+        <rdfs:range rdf:resource="&prov;Entity"/>
+        <rdfs:domain rdf:resource="&prov;Entity"/>
+        <prov:unqualifiedForm rdf:resource="&prov;wasQuotedFrom"/>
+    </owl:ObjectProperty>
+    
+
+
+    <!-- http://www.w3.org/ns/prov#qualifiedResponsibility -->
+
+    <owl:ObjectProperty rdf:about="&prov;qualifiedResponsibility">
+        <rdf:type rdf:resource="&owl;InverseFunctionalProperty"/>
+        <prov:category>qualified</prov:category>
+        <rdfs:comment>If this Agent prov:actedOnBehalfOf Agent :ag, then it can qualify how with prov:qualifiedResponsibility [ a prov:Responsibility;  prov:agent :ag; :foo :bar ].</rdfs:comment>
+        <rdfs:range rdf:resource="&prov;Agent"/>
+        <rdfs:domain rdf:resource="&prov;Agent"/>
+        <prov:unqualifiedForm rdf:resource="&prov;actedOnBehalfOf"/>
+    </owl:ObjectProperty>
+    
+
+
+    <!-- http://www.w3.org/ns/prov#qualifiedRevision -->
+
+    <owl:ObjectProperty rdf:about="&prov;qualifiedRevision">
+        <rdf:type rdf:resource="&owl;InverseFunctionalProperty"/>
+        <rdfs:comment>If this Entity prov:wasRevisionOf Entity :e, then it can qualify how it was  revised using prov:qualifiedRevision [ a prov:Revision;  prov:entity :e; :foo :bar ].</rdfs:comment>
+        <prov:category>qualified</prov:category>
+        <rdfs:domain rdf:resource="&prov;Entity"/>
+        <rdfs:range rdf:resource="&prov;Entity"/>
+        <prov:unqualifiedForm rdf:resource="&prov;wasRevisionOf"/>
+    </owl:ObjectProperty>
+    
+
+
+    <!-- http://www.w3.org/ns/prov#qualifiedSource -->
+
+    <owl:ObjectProperty rdf:about="&prov;qualifiedSource">
+        <rdf:type rdf:resource="&owl;InverseFunctionalProperty"/>
+        <prov:category>qualified</prov:category>
+        <rdfs:comment>If this Entity prov:hadOriginalSource Entity :e, then it can qualify how using prov:qualifiedSource [ a prov:Source; prov:entity :e; :foo :bar ].</rdfs:comment>
+        <rdfs:range rdf:resource="&prov;Entity"/>
+        <rdfs:domain rdf:resource="&prov;Entity"/>
+        <prov:unqualifiedForm rdf:resource="&prov;hadOriginalSource"/>
+    </owl:ObjectProperty>
+    
+
+
+    <!-- http://www.w3.org/ns/prov#qualifiedStart -->
+
+    <owl:ObjectProperty rdf:about="&prov;qualifiedStart">
+        <rdf:type rdf:resource="&owl;InverseFunctionalProperty"/>
+        <prov:category>qualified</prov:category>
+        <rdfs:comment>If this Activity prov:wasStartedBy Agent :ag, then it can qualify how it was started using prov:qualifiedStart [ a prov:Start;  prov:agent :ag; :foo :bar ].</rdfs:comment>
+        <rdfs:domain rdf:resource="&prov;Activity"/>
+        <rdfs:range rdf:resource="&prov;Agent"/>
+        <prov:unqualifiedForm rdf:resource="&prov;wasStartedBy"/>
+    </owl:ObjectProperty>
+    
+
+
+    <!-- http://www.w3.org/ns/prov#qualifiedStartByActivity -->
+
+    <owl:ObjectProperty rdf:about="&prov;qualifiedStartByActivity">
+        <rdf:type rdf:resource="&owl;InverseFunctionalProperty"/>
+        <prov:category>qualified</prov:category>
+        <rdfs:comment>If this Activity prov:wasStartedByActivity :a, then it can qualify how it was started using prov:qualifiedStart [ a prov:Start;  prov:activity :a; :foo :bar ].</rdfs:comment>
+        <rdfs:range rdf:resource="&prov;Activity"/>
+        <rdfs:domain rdf:resource="&prov;Activity"/>
+        <prov:unqualifiedForm rdf:resource="&prov;wasStartedByActivity"/>
+    </owl:ObjectProperty>
+    
+
+
+    <!-- http://www.w3.org/ns/prov#qualifiedTrace -->
+
+    <owl:ObjectProperty rdf:about="&prov;qualifiedTrace">
+        <rdf:type rdf:resource="&owl;InverseFunctionalProperty"/>
+        <prov:category>qualified</prov:category>
+        <rdfs:comment>If this prov:wasAttributedTo Entity :e, then it can qualify how using prov:qualifiedTrace [ a prov:Trace;  prov:entity :e; :foo :bar ]. If this prov:wasAttributedTo Activity :a, then it can qualify how using prov:qualifiedTrace [ a prov:Trace;  prov:activity :a; :foo :bar ].</rdfs:comment>
+        <prov:unqualifiedForm rdf:resource="&prov;tracedTo"/>
+    </owl:ObjectProperty>
+    
+
+
+    <!-- http://www.w3.org/ns/prov#qualifiedUsage -->
+
+    <owl:ObjectProperty rdf:about="&prov;qualifiedUsage">
+        <rdf:type rdf:resource="&owl;InverseFunctionalProperty"/>
+        <rdfs:comment>If this Activity prov:used Entity :e, then it can qualify how it used it using prov:qualifiedUsage [ a prov:Usage; prov:entity :e; :foo :bar ].</rdfs:comment>
+        <prov:category>qualified</prov:category>
+        <rdfs:domain rdf:resource="&prov;Activity"/>
+        <rdfs:range rdf:resource="&prov;Entity"/>
+        <prov:unqualifiedForm rdf:resource="&prov;used"/>
     </owl:ObjectProperty>
     
 
@@ -495,7 +679,6 @@
 
     <owl:ObjectProperty rdf:about="&prov;wasStartedBy">
         <rdfs:seeAlso rdf:resource="http://www.w3.org/2011/prov/wiki/ProvRDF#Starting"/>
-        <rdfs:range rdf:resource="&prov;Element"/>
         <prov:involvementClass rdf:resource="&prov;Start"/>
         <rdfs:subPropertyOf rdf:resource="&prov;wasAssociatedWith"/>
     </owl:ObjectProperty>
@@ -554,7 +737,7 @@
     <!-- http://www.w3.org/ns/prov#Activity -->
 
     <owl:Class rdf:about="&prov;Activity">
-        <rdfs:subClassOf rdf:resource="&prov;Element"/>
+        <rdfs:subClassOf rdf:resource="&owl;Thing"/>
         <owl:disjointWith rdf:resource="&prov;Entity"/>
         <prov:category>core</prov:category>
         <rdfs:comment xml:lang="en">Activity is defined to be &#39;an identifiable activity, which performs a piece of work.&#39;</rdfs:comment>
@@ -641,17 +824,6 @@
     
 
 
-    <!-- http://www.w3.org/ns/prov#Element -->
-
-    <owl:Class rdf:about="&prov;Element">
-        <rdfs:comment rdf:datatype="&rdfs;Literal">Element could be avoided if we could specify unions on domains and ranges.</rdfs:comment>
-        <rdfs:comment xml:lang="en">Element is the union of Activity and Entity, which are the principal topics of PROV.
-
-(Due to OWL-RL restriction this union is not specified here)</rdfs:comment>
-    </owl:Class>
-    
-
-
     <!-- http://www.w3.org/ns/prov#End -->
 
     <owl:Class rdf:about="&prov;End">
@@ -668,7 +840,7 @@
     <!-- http://www.w3.org/ns/prov#Entity -->
 
     <owl:Class rdf:about="&prov;Entity">
-        <rdfs:subClassOf rdf:resource="&prov;Element"/>
+        <rdfs:subClassOf rdf:resource="&owl;Thing"/>
         <rdfs:comment xml:lang="en">An identifiable characterized entity.</rdfs:comment>
         <prov:category>core</prov:category>
         <rdfs:seeAlso rdf:resource="http://www.w3.org/2011/prov/wiki/ProvRDF#Entity"/>
@@ -718,6 +890,7 @@
     <!-- http://www.w3.org/ns/prov#Involvement -->
 
     <owl:Class rdf:about="&prov;Involvement">
+        <rdfs:comment>TODO: For simplicity, the hierarchy &quot;stops&quot; at the primary Elements (Activity, Entity, Agent)</rdfs:comment>
         <rdfs:comment xml:lang="en">An instance of prov:Involvement is used to provide additional descriptions of a prov:qualifiable binary involvement. A description (via prov:Involvement) of the binary involvement implies the assertion of the binary involvement.</rdfs:comment>
         <prov:category>qualified</prov:category>
         <rdfs:seeAlso rdf:resource="http://www.w3.org/2011/prov/wiki/ProvRDF#Agent_Association"/>