Updated workflow examples to use Usage/Generation
authorStian Soiland-Reyes <soiland-reyes@cs.manchester.ac.uk>
Fri, 18 Nov 2011 16:45:13 +0000
changeset 971 b6b0933838bf
parent 959 80b39bcb394a
child 972 183561cff143
Updated workflow examples to use Usage/Generation
ontology/examples/ontology-extensions/workflow/workflow.rdf
ontology/examples/ontology-extensions/workflow/workflow.ttl
ontology/examples/ontology-extensions/workflow/workflowOntology.rdf
ontology/examples/ontology-extensions/workflow/workflowOntology.ttl
--- a/ontology/examples/ontology-extensions/workflow/workflow.rdf	Thu Nov 17 22:36:16 2011 +0000
+++ b/ontology/examples/ontology-extensions/workflow/workflow.rdf	Fri Nov 18 16:45:13 2011 +0000
@@ -1,194 +1,152 @@
-<rdf:RDF 
-    xmlns:cnt="http://www.w3.org/2011/content#"
+
+<!-- Processed by Id: cwm.py,v 1.197 2007/12/13 15:38:39 syosi Exp -->
+<!--     using base file:///home/stain/stuff/src/provenance-wg/prov/ontology/examples/ontology-extensions/workflow/workflow.ttl-->
+
+
+<rdf:RDF xmlns="http://www.example.com/scientific-workflow#"
     xmlns:foaf="http://xmlns.com/foaf/0.1/"
     xmlns:prov="http://www.w3.org/ns/prov-o/"
-    xmlns:time="http://www.w3.org/2006/time#"
     xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-    xmlns:wf="http://www.example.com/scientific-workflow#"
-    xmlns:run="http://www.example.com/run1#"
-    xmlns:base="http://www.example.com/run1#"
-    >
-
-    <prov:Agent rdf:about="#aUser">
-        <rdf:type rdf:resource="http://xmlns.com/foaf/0.1/Person"/>
-        <foaf:name>Stian Soiland-Reyes</foaf:name>
-    </prov:Agent>
-
-    <wf:WorkflowEngine rdf:about="#workflowEngine" />
-
-    <wf:FileValue rdf:about="#inputFile">
-        <wf:file>/tmp/myinput.txt</wf:file>
-        <wf:value>
-            <cnt:ContentAsText>
-                <cnt:characterEncoding>UTF-8</cnt:characterEncoding>
-                <cnt:chars>Steve</cnt:chars>
-            </cnt:ContentAsText>
-        </wf:value>
-    </wf:FileValue>
-
-    <wf:Value rdf:about="#input">
-        <wf:wasReadFrom rdf:resource="#inputFile"/>
-        <wf:value>
-            <cnt:ContentAsText>
-                <cnt:characterEncoding>UTF-8</cnt:characterEncoding>
-                <cnt:chars>Steve</cnt:chars>
-            </cnt:ContentAsText>
-        </wf:value>
-    </wf:Value>
-
-    <wf:Process rdf:about="#workflowRun">
-        <prov:used>
-            <wf:ValueAtPort>
-                <wf:sawValue rdf:resource="#input"/>
-                <wf:seenAtPort rdf:resource="http://www.example.com/workflow1#inName"/>
-                <prov:assumedRoleAt>
-                    <prov:Time>
-                        <time:inDateTimeXSD>2011-10-21T09:21:31Z</time:inDateTimeXSD>
-                    </prov:Time>
-                </prov:assumedRoleAt>
-            </wf:ValueAtPort>
-        </prov:used>
-        <wf:ranInWorkflowEngine rdf:resource="#workflowEngine"/>
-        <wf:wasLaunchedBy rdf:resource="#aUser"/>
-        <wf:wasDefinedBy rdf:resource="http://www.example.com/workflow1#workflow"/>
-        <prov:startedAt>
-            <prov:Time>
-                <time:inDateTimeXSD>2011-10-21T09:20:15Z</time:inDateTimeXSD>
-            </prov:Time>
-        </prov:startedAt>
-        <prov:endedAt>
-            <prov:Time>
-                <time:inDateTimeXSD>2011-10-21T09:23:32Z</time:inDateTimeXSD>
-            </prov:Time>
-        </prov:endedAt>
-    </wf:Process>
-
-    <wf:Process rdf:about="#constant">
-        <wf:wasSubProcessExecutionOf rdf:resource="#workflowRun"/>
-        <wf:wasDefinedBy
-        rdf:resource="http://www.example.com/workflow1#String_Constant"/>
-        <prov:startedAt>
-            <prov:Time rdf:about="#t0">
-                <time:inDateTimeXSD>2011-10-21T09:20:15Z</time:inDateTimeXSD>
-            </prov:Time>
-        </prov:startedAt>
-        <prov:endedAt rdf:resource="#t0" />
-    </wf:Process>
-
-    <wf:Value rdf:about="#hello">
-        <prov:wasGeneratedBy rdf:resource="#constant"/>
-        <prov:wasGeneratedAt rdf:resource="#t0"/>
-        <prov:endedAt rdf:resource="#t0" />
-        <wf:value>
-            <cnt:ContentAsText>
-                <cnt:chars>Hello, </cnt:chars>
-            </cnt:ContentAsText>
-        </wf:value>
-    </wf:Value>
-
-    <wf:ValueAtPort rdf:about="#helloValue">
-        <prov:wasGeneratedBy rdf:resource="#constant"/>
-        <wf:value>
-            <cnt:ContentAsText>
-                <cnt:chars>Hello, </cnt:chars>
-            </cnt:ContentAsText>
-        </wf:value>
-        <wf:sawEntity rdf:resource="#hello"/>
-    </wf:ValueAtPort>
+    xmlns:time="http://www.w3.org/2006/time#"
+    xmlns:wf="http://www.example.com/scientific-workflow#">
 
-    <wf:Process rdf:about="#combine">
-        <prov:used>
-          <wf:ValueAtPort>
-            <wf:sawValue rdf:resource="#hello"/>
-            <wf:seenAtPort rdf:resource="http://www.example.com/workflow1#catIn1"/>
-            <prov:assumedRoleAt>
-                <prov:Time>
-                    <time:inDateTimeXSD>2011-10-21T09:20:21Z</time:inDateTimeXSD>
-                </prov:Time>
-            </prov:assumedRoleAt>
-          </wf:ValueAtPort>
-        </prov:used>
-        <prov:used>
-          <wf:ValueAtPort>
-            <wf:sawValue rdf:resource="#input"/>
-            <wf:seenAtPort rdf:resource="http://www.example.com/workflow1#catIn2"/>
-            <prov:assumedRoleAt>
-                <prov:Time>
-                    <time:inDateTimeXSD>2011-10-21T09:20:23Z</time:inDateTimeXSD>
-                </prov:Time>
-            </prov:assumedRoleAt>
-          </wf:ValueAtPort>
-        </prov:used>
-        <wf:wasSubProcessExecutionOf rdf:resource="#workflowRun"/>
-        <wf:wasDefinedBy rdf:resource="http://www.example.com/workflow1#cat"/>
-        <prov:startedAt>
-            <prov:Time>
-                <time:inDateTimeXSD>2011-10-21T09:20:20Z</time:inDateTimeXSD>
-            </prov:Time>
+    <Process rdf:about="#workflowRun">
+        <ranInWorkflowEngine>
+            <WorkflowEngine rdf:about="#workflowEngine" />
+        </ranInWorkflowEngine>
+        <wasDefinedBy rdf:resource="http://www.example.com/workflow1#workflow"/>
+        <wasLaunchedBy>
+            <prov:Agent rdf:about="#aUser">
+                <rdf:type rdf:resource="http://xmlns.com/foaf/0.1/Person"/>
+                <foaf:name>Stian Soiland-Reyes</foaf:name>
+            </prov:Agent>
+        </wasLaunchedBy>
+        <prov:startedAt rdf:parseType="Resource">
+            <time:inDateTimeXSD>2011-10-21T09:20:15Z</time:inDateTimeXSD>
         </prov:startedAt>
-        <prov:endedAt>
-            <prov:Time>
-                <time:inDateTimeXSD>2011-10-21T09:20:25Z</time:inDateTimeXSD>
-            </prov:Time>
+        <prov:endedAt rdf:parseType="Resource">
+            <time:inDateTimeXSD>2011-10-21T09:23:32Z</time:inDateTimeXSD>
         </prov:endedAt>
-    </wf:Process>
-
-    <wf:Value rdf:about="#combined">
-        <prov:wasGeneratedBy rdf:resource="#combine"/>
-        <wf:value>
-            <cnt:ContentAsText>
-                <cnt:chars>Hello, Steve</cnt:chars>
-            </cnt:ContentAsText>
-        </wf:value>
-    </wf:Value>
+        <wf:usedValue>
+            <prov:Usage>
+                <sawValue>
+                    <Value rdf:about="#input">
+                        <value>Steve</value>
+                        <wasReadFrom>
+                            <FileValue rdf:about="#inputFile">
+                                <file>/tmp/myinput.txt</file>
+                                <value>Steve</value>
+                            </FileValue>
+                        </wasReadFrom>
+                    </Value>
+                </sawValue>    
+                <seenAtPort rdf:resource="http://www.example.com/workflow1#inName"/>
+                <prov:hadTemporalValue rdf:parseType="Resource">
+                    <time:inDateTimeXSD>2011-10-21T09:21:31Z</time:inDateTimeXSD>
+                </prov:hadTemporalValue>
+            </prov:Usage>
+        </wf:usedValue>
+        <wf:generatedValue>
+            <prov:Generation>
+                <sawValue>
+                    <Value rdf:about="#sha1FromWorkflow">
+                        <value>a33d1fb1658d4fbf017de59ab67437a3eb5ff50d</value>
+                        <wf:sameValueAs rdf:resource="#sha1"/>
+                    </Value>
+                </sawValue>    
+                <wasSeenAt rdf:resource="http://www.example.com/workflow1#sha1"/>
+            </prov:Generation>
+        </wf:generatedValue>
+    </Process>
 
-    <wf:Process rdf:about="#shasum">
-        <prov:used rdf:resource="#combined"/>
-        <wf:wasSubProcessExecutionOf rdf:resource="#workflowRun"/>
-        <wf:wasDefinedBy rdf:resource="http://www.example.com/workflow1#shasum"/>
+    <Process rdf:about="#constant">
+        <wasDefinedBy rdf:resource="http://www.example.com/workflow1#String_Constant"/>
+        <wasSubProcessExecutionOf rdf:resource="#workflowRun"/>
         <prov:startedAt>
-            <prov:Time>
-                <time:inDateTimeXSD>2011-10-21T09:20:30Z</time:inDateTimeXSD>
-            </prov:Time>
+            <time:Instant rdf:about="#t0">
+                <time:inDateTimeXSD>2011-10-21T09:20:15Z</time:inDateTimeXSD>
+            </time:Instant>
         </prov:startedAt>
-        <prov:endedAt>
-            <prov:Time>
-                <time:inDateTimeXSD>2011-10-21T09:21:00Z</time:inDateTimeXSD>
-            </prov:Time>
-        </prov:endedAt>
-    </wf:Process>
 
-    <wf:Value rdf:about="#sha1">
-        <wf:value>
-            <cnt:ContentAsText>
-                <cnt:characterEncoding>UTF-8</cnt:characterEncoding>
-                <cnt:chars>a33d1fb1658d4fbf017de59ab67437a3eb5ff50d</cnt:chars>
-            </cnt:ContentAsText>
-        </wf:value>
-    </wf:Value>
+        <prov:endedAt rdf:resource="#t0"/>
+        <wf:generatedValue>
+            <prov:Generation>
+                <sawValue rdf:resource="http://www.example.com/workflow1#String_Constant_value"/>
+                <prov:hadQualifiedEntity>
+                    <Value rdf:about="#hello">
+                        <value>Hello, </value>
+                    </Value>
+                </prov:hadQualifiedEntity>
+                <prov:hadTemporalValue rdf:resource="#t0"/>
+            </prov:Generation>
+        </wf:generatedValue>
+    </Process>
 
-    <wf:ValueAtPort rdf:about="#sha1OutputFromShasum">
-        <prov:wasGeneratedBy rdf:resource="#shasum"/>
-        <wf:value>
-            <cnt:ContentAsText>
-                <cnt:characterEncoding>UTF-8</cnt:characterEncoding>
-                <cnt:chars>a33d1fb1658d4fbf017de59ab67437a3eb5ff50d</cnt:chars>
-            </cnt:ContentAsText>
-        </wf:value>
-        <wf:sawValue rdf:resource="#sha1"/>
-        <wf:wasSeenAt rdf:resource="http://www.example.com/workflow1#shaOut"/>
-    </wf:ValueAtPort>
+    <Process rdf:about="#combine">
+        <wasDefinedBy rdf:resource="http://www.example.com/workflow1#cat"/>
+        <wasSubProcessExecutionOf rdf:resource="#workflowRun"/>
+        <prov:startedAt rdf:parseType="Resource">
+            <time:inDateTimeXSD>2011-10-21T09:20:20Z</time:inDateTimeXSD>
+        </prov:startedAt>
+        <prov:endedAt rdf:parseType="Resource">
+            <time:inDateTimeXSD>2011-10-21T09:20:25Z</time:inDateTimeXSD>
+        </prov:endedAt>
+        <wf:usedValue>
+            <prov:Usage>
+                <seenAtPort rdf:resource="http://www.example.com/workflow1#catIn1"/>
+                <prov:hadQualifiedEntity rdf:resource="#hello"/>
+                <prov:hadTemporalValue rdf:parseType="Resource">
+                    <time:inDateTimeXSD>2011-10-21T09:20:21Z</time:inDateTimeXSD>
+                </prov:hadTemporalValue>
+            </prov:Usage>
+        </wf:usedValue>
+        <wf:usedValue>
+            <prov:Usage>
+                <sawValue rdf:resource="#input"/>
+                <seenAtPort rdf:resource="http://www.example.com/workflow1#catIn2"/>
+                <prov:hadTemporalValue rdf:parseType="Resource">
+                    <time:inDateTimeXSD>2011-10-21T09:20:23Z</time:inDateTimeXSD>
+                </prov:hadTemporalValue>
+            </prov:Usage>
+        </wf:usedValue>
+        <wf:generatedValue>
+            <prov:Generation>
+                <sawValue>
+                    <Value rdf:about="#combined">
+                        <value>Hello, Steve</value>
+                    </Value>
+                </sawValue>    
+                <seenAtPort rdf:resource="http://www.example.com/workflow1#catOut"/>
+            </prov:Generation>
+        </wf:generatedValue>
+    </Process>
 
-    <wf:ValueAtPort rdf:about="#sha1OutputFromWorkflow">
-        <prov:wasGeneratedBy rdf:resource="#workflowRun"/>
-        <wf:value>
-            <cnt:ContentAsText>
-                <cnt:characterEncoding>UTF-8</cnt:characterEncoding>
-                <cnt:chars>a33d1fb1658d4fbf017de59ab67437a3eb5ff50d</cnt:chars>
-            </cnt:ContentAsText>
-        </wf:value>
-        <wf:sawValue rdf:resource="#sha1"/>
-        <wf:wasSeenAt rdf:resource="http://www.example.com/workflow1#sha1"/>
-    </wf:ValueAtPort>
+
+
+
+
+
+
+
+    <Process rdf:about="#shasum">
+        <wasDefinedBy rdf:resource="http://www.example.com/workflow1#shasum"/>
+        <wasSubProcessExecutionOf rdf:resource="#workflowRun"/>
+        <prov:startedAt rdf:parseType="Resource">
+            <time:inDateTimeXSD>2011-10-21T09:20:30Z</time:inDateTimeXSD>
+        </prov:startedAt>
+        <prov:endedAt rdf:parseType="Resource">
+            <time:inDateTimeXSD>2011-10-21T09:21:00Z</time:inDateTimeXSD>
+        </prov:endedAt>
+        <wf:generatedValue>
+            <prov:Generation>
+                <sawValue>
+                    <Value rdf:about="#sha1">
+                        <value>a33d1fb1658d4fbf017de59ab67437a3eb5ff50d</value>
+                    </Value>
+                </sawValue>
+                <wasSeenAt rdf:resource="http://www.example.com/workflow1#shaOut"/>
+            </prov:Generation>
+        </wf:generatedValue>
+    </Process>
 
 </rdf:RDF>
--- a/ontology/examples/ontology-extensions/workflow/workflow.ttl	Thu Nov 17 22:36:16 2011 +0000
+++ b/ontology/examples/ontology-extensions/workflow/workflow.ttl	Fri Nov 18 16:45:13 2011 +0000
@@ -3,140 +3,96 @@
 @prefix time: <http://www.w3.org/2006/time#> .
 @prefix run: <http://www.example.com/run1#> .
 @prefix foaf: <http://xmlns.com/foaf/0.1/> .
-@prefix cnt: <http://www.w3.org/2011/content#> .
 @prefix wf: <http://www.example.com/scientific-workflow#> .
+@base <http://example.com/aWorkflow> .
 
 
-:workflowEngine     a wf:WorkflowEngine .
+:workflowEngine a wf:WorkflowEngine .
 
-:aUser     a prov:Agent,
-            foaf:Person;
+:aUser a prov:Agent, foaf:Person;
      foaf:name "Stian Soiland-Reyes" .
 
-:inputFile     a wf:FileValue;
+:inputFile a wf:FileValue;
      wf:file "/tmp/myinput.txt";
-     wf:value  [
-         a cnt:ContentAsText;
-         cnt:characterEncoding "UTF-8";
-         cnt:chars "Steve" ] .
+     wf:value "Steve" .
 
-:input     a wf:Value;
-     wf:value  [
-         a cnt:ContentAsText;
-         cnt:characterEncoding "UTF-8";
-         cnt:chars "Steve" ];
+:input a wf:Value;
+     wf:value "Steve" ;
      wf:wasReadFrom :inputFile .
 
-:workflowRun     a wf:Process;
+:workflowRun a wf:Process;
      wf:ranInWorkflowEngine :workflowEngine;
      wf:wasDefinedBy <http://www.example.com/workflow1#workflow>;
      wf:wasLaunchedBy :aUser;
-     prov:startedAt  [
-         a prov:Time;
-         time:inDateTimeXSD "2011-10-21T09:20:15Z" ];
-     prov:endedAt  [
-         a prov:Time;
-         time:inDateTimeXSD "2011-10-21T09:23:32Z" ];
-     prov:used  [
-         a wf:ValueAtPort;
+     prov:startedAt  [ time:inDateTimeXSD "2011-10-21T09:20:15Z" ];
+     prov:endedAt  [ time:inDateTimeXSD "2011-10-21T09:23:32Z" ];
+     wf:usedValue  [ a prov:Usage ;
          wf:sawValue :input;
          wf:seenAtPort <http://www.example.com/workflow1#inName>;
-         prov:assumedRoleAt  [
-             a prov:Time;
-             time:inDateTimeXSD "2011-10-21T09:21:31Z" ] 
-         ] .
+         prov:hadTemporalValue [ time:inDateTimeXSD "2011-10-21T09:21:31Z" ] 
+     ] ;
+     wf:generatedValue [ a prov:Generation ;
+        wf:sawValue :sha1FromWorkflow ;
+        wf:wasSeenAt <http://www.example.com/workflow1#sha1>;
+     ] .
 
-:t0     a prov:Time;
+:t0 a time:Instant;
      time:inDateTimeXSD "2011-10-21T09:20:15Z" .
 
-:constant     a wf:Process;
-     <endedAt> :t0;
-     wf:wasDefinedBy <http://www.example.com/workflow1#String_Constant>;
-     wf:wasSubProcessExecutionOf :workflowRun;
-     prov:startedAt :t0 .
 
-:hello     a wf:Value;
-     wf:value  [
-         a cnt:ContentAsText;
-         cnt:chars "Hello, " ];
+:constant a wf:Process;
+     wf:wasDefinedBy <http://www.example.com/workflow1#String_Constant> ;
+     wf:wasSubProcessExecutionOf :workflowRun ;
+     prov:startedAt :t0 ;
      prov:endedAt :t0;
-     prov:wasGeneratedAt :t0;
-     prov:wasGeneratedBy :constant .
+     wf:generatedValue [ a prov:Generation ;
+        prov:hadQualifiedEntity :hello ;
+        prov:hadTemporalValue :t0 ;
+        wf:sawValue <http://www.example.com/workflow1#String_Constant_value>
+     ] .
 
-:helloValue     a wf:ValueAtPort;
-     wf:sawEntity :hello;
-     wf:value  [
-         a cnt:ContentAsText;
-         cnt:chars "Hello, " ];
-     prov:wasGeneratedBy :constant .
+:hello a wf:Value;
+     wf:value  "Hello, ".
 
 
-:combine     a wf:Process;
+:combine a wf:Process;
      wf:wasDefinedBy <http://www.example.com/workflow1#cat>;
      wf:wasSubProcessExecutionOf :workflowRun;
-     prov:endedAt  [
-         a prov:Time;
-         time:inDateTimeXSD "2011-10-21T09:20:25Z" ];
-     prov:startedAt  [
-         a prov:Time;
-         time:inDateTimeXSD "2011-10-21T09:20:20Z" ];
-     prov:used  [
-         a wf:ValueAtPort;
-         wf:sawValue :hello;
+     prov:endedAt  [ time:inDateTimeXSD "2011-10-21T09:20:25Z" ];
+     prov:startedAt  [ time:inDateTimeXSD "2011-10-21T09:20:20Z" ];
+     wf:usedValue [ a prov:Usage ;
+         prov:hadQualifiedEntity :hello;
          wf:seenAtPort <http://www.example.com/workflow1#catIn1>;
-         prov:assumedRoleAt  [
-             a prov:Time;
-             time:inDateTimeXSD "2011-10-21T09:20:21Z" ] 
-       ], [
-         a wf:ValueAtPort;
+         prov:hadTemporalValue [ time:inDateTimeXSD "2011-10-21T09:20:21Z" ] 
+       ], [ a prov:Usage ;
          wf:sawValue :input;
          wf:seenAtPort <http://www.example.com/workflow1#catIn2>;
-         prov:assumedRoleAt  [
-             a prov:Time;
-             time:inDateTimeXSD "2011-10-21T09:20:23Z" ] 
-       ] .
+         prov:hadTemporalValue [ time:inDateTimeXSD "2011-10-21T09:20:23Z" ] 
+       ] ;
+     wf:generatedValue [ a prov:Generation ;
+        wf:sawValue :combined ;
+        wf:seenAtPort <http://www.example.com/workflow1#catOut>;
+     ] .  
 
-:combined     a wf:Value;
-     wf:value  [
-         a cnt:ContentAsText;
-         cnt:chars "Hello, Steve" ];
-     prov:wasGeneratedBy :combine .
+:combined a wf:Value;
+     wf:value "Hello, Steve".
 
-:shasum     a wf:Process;
+:shasum a wf:Process;
      wf:wasDefinedBy <http://www.example.com/workflow1#shasum>;
      wf:wasSubProcessExecutionOf :workflowRun;
-     prov:startedAt  [
-         a prov:Time;
-         time:inDateTimeXSD "2011-10-21T09:20:30Z" ];
-     prov:endedAt  [
-         a prov:Time;
-         time:inDateTimeXSD "2011-10-21T09:21:00Z" ];
-     prov:used :combined .
-
-
-:sha1     a wf:Value;
-     wf:value  [
-         a cnt:ContentAsText;
-         cnt:characterEncoding "UTF-8";
-         cnt:chars "a33d1fb1658d4fbf017de59ab67437a3eb5ff50d" ] .
+     prov:startedAt  [ time:inDateTimeXSD "2011-10-21T09:20:30Z" ];
+     prov:endedAt  [ time:inDateTimeXSD "2011-10-21T09:21:00Z" ];
+     wf:generatedValue [ a prov:Generation ;
+         wf:sawValue :sha1;
+         wf:wasSeenAt <http://www.example.com/workflow1#shaOut>;
+     ] .
 
-:sha1OutputFromShasum     a wf:ValueAtPort;
-     wf:sawValue :sha1;
-     wf:value  [
-         a cnt:ContentAsText;
-         cnt:characterEncoding "UTF-8";
-         cnt:chars "a33d1fb1658d4fbf017de59ab67437a3eb5ff50d" ];
-     wf:wasSeenAt <http://www.example.com/workflow1#shaOut>;
-     prov:wasGeneratedBy :shasum .
+:sha1 a wf:Value;
+     wf:value "a33d1fb1658d4fbf017de59ab67437a3eb5ff50d" .
 
-:sha1OutputFromWorkflow     a wf:ValueAtPort;
-     wf:sawValue :sha1;
-     wf:value  [
-         a cnt:ContentAsText;
-         cnt:characterEncoding "UTF-8";
-         cnt:chars "a33d1fb1658d4fbf017de59ab67437a3eb5ff50d" ];
-     wf:wasSeenAt <http://www.example.com/workflow1#sha1>;
-     prov:wasGeneratedBy :workflowRun .
+:sha1FromWorkflow a wf:Value;
+     wf:value "a33d1fb1658d4fbf017de59ab67437a3eb5ff50d";
+     wf:sameValueAs :sha1 .
 
 
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ontology/examples/ontology-extensions/workflow/workflowOntology.rdf	Fri Nov 18 16:45:13 2011 +0000
@@ -0,0 +1,151 @@
+#Processed by Id: cwm.py,v 1.197 2007/12/13 15:38:39 syosi Exp 
+        #    using base file:///home/stain/stuff/src/provenance-wg/prov/ontology/examples/ontology-extensions/workflow/workflowOntology.ttl
+        
+#  Notation3 generation by
+#       notation3.py,v 1.200 2007/12/11 21:18:08 syosi Exp
+
+#   Base was: file:///home/stain/stuff/src/provenance-wg/prov/ontology/examples/ontology-extensions/workflow/workflowOntology.ttl
+     @prefix : <http://www.example.com/scientific-workflow#> .
+    @prefix owl: <http://www.w3.org/2002/07/owl#> .
+    @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
+    @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+    
+    <http://www.example.com/scientific-workflow>     a owl:Ontology;
+         rdfs:comment """An example ontology for describing workflow
+    provenance.
+    
+    Classes wf:ProcessDefinition, wf:Port, wf:Input, wf:Output and
+    properties wf:linksTo, wf:definesSubProcess, wf:definesInput,
+    wf:definesOutput allows the definition of an abstract dataflow structure.
+    The specialisation wf:Constant and wf:Command are examples of
+    workflow activities. 
+
+    The rest of the ontology shows how to customize the PROV-O ontology
+    to form a more specific workflow provenance ontology - 
+    with links back to the workflow definitions from processes, usage
+    and generation."""@en;
+         owl:imports <http://www.w3.org/ns/prov-o/> .
+    
+    :Command     a owl:Class;
+         rdfs:subClassOf :ProcessorDefinition .
+    
+    :Constant     a owl:Class;
+         rdfs:subClassOf :ProcessorDefinition .
+    
+    :FileValue     a owl:Class;
+         rdfs:subClassOf :Value,
+                <http://www.w3.org/ns/prov-o/Entity>;
+         owl:has_key  (
+        :file
+        :value ) .
+    
+    :Input     a owl:Class;
+         rdfs:subClassOf :Port .
+    
+    :Output     a owl:Class;
+         rdfs:subClassOf :Port .
+    
+    :Port     a owl:Class .
+    
+    :Process     a owl:Class;
+         rdfs:subClassOf <http://www.w3.org/ns/prov-o/Agent>,
+                <http://www.w3.org/ns/prov-o/ProcessExecution> .
+    
+    :ProcessDefinition     a owl:Class;
+         rdfs:subClassOf <http://www.w3.org/ns/prov-o/Recipe> .
+    
+    :Value     a owl:Class;
+         rdfs:subClassOf <http://www.w3.org/ns/prov-o/Entity> .
+    
+    :ValueAtPort     a owl:Class;
+         rdfs:subClassOf <http://www.w3.org/ns/prov-o/QualifiedInvolvement> .
+    
+    :WorkflowEngine     a owl:Class;
+         rdfs:subClassOf <http://www.w3.org/ns/prov-o/Agent> .
+    
+    :command     a owl:DatatypeProperty;
+         rdfs:domain :Command .
+    
+    :constant     a owl:DatatypeProperty;
+         rdfs:domain :Command .
+    
+    :definesInput     a owl:ObjectProperty;
+         rdf:domain :Input;
+         rdfs:range :ProcessDefinition .
+    
+    :definesOutput     a owl:ObjectProperty;
+         rdf:domain :Output;
+         rdfs:range :ProcessDefinition .
+    
+    :definesSubProcess     a owl:ObjectProperty;
+         rdf:domain :ProcessDefinition;
+         rdfs:range :ProcessDefinition .
+    
+    :file     a owl:DatatypeProperty;
+         rdfs:domain :FileValue .
+    
+    :generatedValue     a owl:ObjectProperty;
+         rdfs:domain :Process;
+         rdfs:range :ValueAtPort;
+         rdfs:subPropertyOf <http://www.w3.org/ns/prov-o/hadQualifiedGeneration> .
+    
+    :linksTo     a owl:ObjectProperty;
+         rdfs:domain :Output;
+         rdfs:range :Input .
+    
+    :ranInWorkflowEngine     a owl:ObjectProperty;
+         rdfs:domain :Process;
+         rdfs:range :WorkflowEngine;
+         rdfs:subPropertyOf <http://www.w3.org/ns/prov-o/wasControlledBy> .
+    
+    :sameValueAs     a owl:ObjectProperty;
+         rdfs:domain :Value;
+         rdfs:range :Value;
+         rdfs:subPropertyOf <http://www.w3.org/ns/prov-o/wasComplementOf>,
+                <http://www.w3.org/ns/prov-o/wasDerivedFrom> .
+    
+    :sawValue     a owl:FunctionalProperty,
+                owl:ObjectProperty;
+         rdfs:domain :ValueAtPort;
+         rdfs:range :Value;
+         rdfs:subPropertyOf <http://www.w3.org/ns/prov-o/hadQualifiedEntity>;
+         <http://www.w3.org/ns/prov-o/minCardinality> 1 .
+    
+    :seenAtPort     a owl:ObjectProperty;
+         rdfs:domain :ValueAtPort;
+         rdfs:range :Port;
+         rdfs:subPropertyOf <http://www.w3.org/ns/prov-o/hadRole>;
+         <http://www.w3.org/ns/prov-o/minCardinality> 1 .
+    
+    :usedValue     a owl:ObjectProperty;
+         rdfs:domain :Process;
+         rdfs:range :ValueAtPort;
+         rdfs:subPropertyOf <http://www.w3.org/ns/prov-o/hadQualifiedUsage> .
+    
+    :value     a owl:DatatypeProperty,
+                owl:FunctionalProperty;
+         rdfs:domain :Value;
+         rdfs:subPropertyOf rdf:value .
+    
+    :wasDefinedBy     a owl:FunctionalProperty,
+                owl:ObjectProperty;
+         rdfs:domain :ProcessDefinition;
+         rdfs:range :Process;
+         rdfs:subPropertyOf <http://www.w3.org/ns/prov-o/hadRecipe> .
+    
+    :wasLaunchedBy     a owl:ObjectProperty;
+         rdfs:domain :Process;
+         rdfs:range <http://www.w3.org/ns/prov-o/Agent>;
+         rdfs:subPropertyOf <http://www.w3.org/ns/prov-o/wasControlledBy> .
+    
+    :wasReadFrom     a owl:ObjectProperty;
+         rdfs:domain :Value;
+         rdfs:range :FileValue;
+         rdfs:subPropertyOf <http://www.w3.org/ns/prov-o/wasDerivedFrom> .
+    
+    :wasSubProcessExecutionOf     a owl:ObjectProperty;
+         rdfs:domain :Process;
+         rdfs:range :Process;
+         rdfs:subPropertyOf <http://www.w3.org/ns/prov-o/wasControlledBy> .
+    
+#ENDS
--- a/ontology/examples/ontology-extensions/workflow/workflowOntology.ttl	Thu Nov 17 22:36:16 2011 +0000
+++ b/ontology/examples/ontology-extensions/workflow/workflowOntology.ttl	Fri Nov 18 16:45:13 2011 +0000
@@ -4,66 +4,105 @@
 @prefix cnt: <http://www.w3.org/2011/content#> .
 
 @prefix prov: <http://www.w3.org/ns/prov-o/> .
-# Not yet in the official OWL
-@prefix prov2: <http://www.w3.org/2011/prov/new#> .
 
 # Domain-specific ontologies
 @prefix wf: <http://www.example.com/scientific-workflow#> .
 
+<http://www.example.com/scientific-workflow> a owl:Ontology ;
+    rdfs:comment """An example ontology for describing workflow
+    provenance.
+    
+    Classes wf:ProcessDefinition, wf:Port, wf:Input, wf:Output and
+    properties wf:linksTo, wf:definesSubProcess, wf:definesInput,
+    wf:definesOutput allows the definition of an abstract dataflow structure.
+    The specialisation wf:Constant and wf:Command are examples of
+    workflow activities. 
+
+    The rest of the ontology shows how to customize the PROV-O ontology
+    to form a more specific workflow provenance ontology - 
+    with links back to the workflow definitions from processes, usage
+    and generation."""@en ;
+    owl:imports <http://www.w3.org/ns/prov-o/> .
+
+
+wf:ProcessDefinition a owl:Class ;
+    rdfs:subClassOf prov:Recipe .
+
+wf:Port a owl:Class .
+wf:Input a owl:Class ;
+    rdfs:subClassOf wf:Port .
+wf:Output a owl:Class ;
+    rdfs:subClassOf wf:Port  .
+
+wf:linksTo a owl:ObjectProperty ;
+    rdfs:domain wf:Output ;    
+    rdfs:range wf:Input .
+
+wf:definesSubProcess a owl:ObjectProperty ;
+    rdfs:range wf:ProcessDefinition ;
+    rdf:domain wf:ProcessDefinition .
+
+wf:definesInput a owl:ObjectProperty ;
+    rdfs:range wf:ProcessDefinition ;
+    rdf:domain wf:Input .
+
+wf:definesOutput a owl:ObjectProperty ;
+    rdfs:range wf:ProcessDefinition ;
+    rdf:domain wf:Output .
+
+wf:Constant a owl:Class ;
+    rdfs:subClassOf wf:ProcessorDefinition .
+wf:constant a owl:DatatypeProperty ;
+    rdfs:domain wf:Command .
+
+wf:Command a owl:Class ;
+    rdfs:subClassOf wf:ProcessorDefinition .
+wf:command a owl:DatatypeProperty ;
+    rdfs:domain wf:Command .
+
+
+
 wf:WorkflowEngine a owl:Class ;
     rdfs:subClassOf prov:Agent .
 
 wf:Process a owl:Class ;
     rdfs:subClassOf prov:Agent, prov:ProcessExecution .
 
-wf:ProvenanceExport a owl:Class ;
-    rdfs:subClassOf prov:Agent, prov:ProcessExecution .
 
-wf:ProcessDefinition a owl:Class ;
-    rdfs:subClassOf prov:Recipe .
+wf:Value a owl:Class ;
+    rdfs:subClassOf prov:Entity .
+wf:value a owl:DatatypeProperty, owl:FunctionalProperty ;
+    rdfs:domain wf:Value ;
+    rdfs:subPropertyOf rdf:value .
+
+
+wf:FileValue a owl:Class ;
+    owl:has_key ( wf:file wf:value ) ;
+    rdfs:subClassOf prov:Entity, wf:Value .
+wf:file a owl:DatatypeProperty ;
+    rdfs:domain wf:FileValue .
+
+wf:ValueAtPort a owl:Class ;
+    rdfs:subClassOf prov:QualifiedInvolvement .
+
+wf:seenAtPort a owl:ObjectProperty ;
+    rdfs:domain wf:ValueAtPort ;
+    rdfs:range wf:Port ;    
+    rdfs:subPropertyOf prov:hadRole ;
+    prov:minCardinality 1 .
+
+wf:sawValue a owl:ObjectProperty, owl:FunctionalProperty ;
+    rdfs:domain wf:ValueAtPort ;
+    rdfs:range wf:Value ;    
+    rdfs:subPropertyOf prov:hadQualifiedEntity ;
+    prov:minCardinality 1 .
+
 
 wf:wasDefinedBy a owl:ObjectProperty, owl:FunctionalProperty ;
     rdfs:subPropertyOf prov:hadRecipe ;
     rdfs:range wf:Process ;
     rdfs:domain wf:ProcessDefinition .
 
-wf:Value a owl:Class ;
-    # For simplicity, but in real workflow systems two identical values 
-    # can have different identities because they have different
-    # origin/generation
-    owl:has_key ( wf:value ) ;
-    rdfs:subClassOf prov:Entity .
-
-wf:value a owl:ObjectProperty, owl:FunctionalProperty ;
-    rdfs:range wf:Value ;
-    rdfs:domain cnt:Content .
-
-
-wf:Port a owl:Class .
-wf:Input a owl:Class ;
-    rdfs:subClassOf wf:Port .
-wf:Output a owl:Class ;
-    rdfs:subClassOf wf:Port  .
-
-wf:ValueAtPort a owl:Class, [
-        a owl:Restriction ;
-        owl:onProperty wf:seenAtPort ;
-        owl:cardinality 1 
-    ] ;
-    rdfs:subClassOf wf:Value, prov:EntityInRole .
-
-wf:seenAtPort a owl:ObjectProperty ;
-    rdfs:domain wf:ValueAtPort ;
-    rdfs:range wf:Port ;    
-    rdfs:subPropertyOf prov2:assumedRole.
-
-
-wf:linksTo a owl:ObjectProperty ;
-    # Not distinguishing between input/output here, to allow the duality of
-    # workflow ports
-    rdfs:domain wf:Port ;    
-    rdfs:range wf:Port .
-
 wf:wasLaunchedBy a owl:ObjectProperty ;
     rdfs:domain wf:Process ;
     rdfs:range prov:Agent ;
@@ -79,49 +118,23 @@
     rdfs:range wf:Process ;
     rdfs:subPropertyOf prov:wasControlledBy .
 
-
-
-wf:definesSubProcess a owl:ObjectProperty ;
-    rdfs:range wf:ProcessDefinition ;
-    rdf:domain wf:ProcessDefinition .
-
-wf:definesInput a owl:ObjectProperty ;
-    rdfs:range wf:ProcessDefinition ;
-    rdf:domain wf:Input .
-
-wf:definesOutput a owl:ObjectProperty ;
-    rdfs:range wf:ProcessDefinition ;
-    rdf:domain wf:Output .
+wf:wasReadFrom a owl:ObjectProperty ;
+    rdfs:domain wf:Value ;
+    rdfs:range wf:FileValue ;
+    rdfs:subPropertyOf prov:wasDerivedFrom .
 
 
-# Example engine implementation extending the general workflow ontology
-@prefix impl: <http://company.example.org/engine-implementation#> .
-
-impl:WorkflowEngine a owl:Class ;
-    rdfs:subClassOf wf:WorkflowEngine .
-
-impl:FileValue a owl:Class ;
-    owl:has_key ( impl:file wf:value ) ;
-    rdfs:subClassOf prov:Entity, wf:Value .
-
-impl:file a owl:DataProperty ;
-    rdfs:domain impl:FileValue .
+wf:generatedValue a owl:ObjectProperty ;
+    rdfs:subPropertyOf prov:hadQualifiedGeneration ;
+    rdfs:domain wf:Process ;
+    rdfs:range wf:ValueAtPort .
 
-impl:Workflow a owl:Class ;
-    rdfs:subClassOf wf:ProcessDefinition .    
-
-impl:Constant a owl:Class ;
-    rdfs:subClassOf wf:ProcessorDefinition .
-impl:constant a owl:DataProperty ;
-    rdfs:domain impl:Command .
+wf:usedValue a owl:ObjectProperty ;
+    rdfs:subPropertyOf prov:hadQualifiedUsage ;
+    rdfs:domain wf:Process ;
+    rdfs:range wf:ValueAtPort .
 
-impl:Command a owl:Class ;
-    rdfs:subClassOf wf:ProcessorDefinition .
-
-impl:command a owl:DataProperty ;
-    rdfs:domain impl:Command .
-
-impl:wasReadFrom a owl:ObjectProperty ;
-    rdfs:domain wf:Value ;
-    rdfs:range impl:FileValue ;
-    rdfs:subPropertyOf prov:wasDerivedFrom .
+wf:sameValueAs a owl:ObjectProperty ;
+    rdfs:subPropertyOf prov:wasComplementOf, prov:wasDerivedFrom;
+    rdfs:domain wf:Value;
+    rdfs:range wf:Value .