-
Notifications
You must be signed in to change notification settings - Fork 13
/
wfdesc.owl
427 lines (264 loc) · 19.6 KB
/
wfdesc.owl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
<?xml version="1.0"?>
<!DOCTYPE rdf:RDF [
<!ENTITY ro "http://purl.org/wf4ever/ro#" >
<!ENTITY parrot "http://vocab.ctic.es/parrot#" >
<!ENTITY owl "http://www.w3.org/2002/07/owl#" >
<!ENTITY wfdesc "http://purl.org/wf4ever/wfdesc#" >
<!ENTITY xsd "http://www.w3.org/2001/XMLSchema#" >
<!ENTITY rdfs "http://www.w3.org/2000/01/rdf-schema#" >
<!ENTITY rdf "http://www.w3.org/1999/02/22-rdf-syntax-ns#" >
]>
<rdf:RDF xmlns="http://purl.org/wf4ever/wfdesc"
xml:base="http://purl.org/wf4ever/wfdesc"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:ro="http://purl.org/wf4ever/ro#"
xmlns:wfdesc="http://purl.org/wf4ever/wfdesc#"
xmlns:parrot="http://vocab.ctic.es/parrot#"
xmlns:owl="http://www.w3.org/2002/07/owl#"
xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<owl:Ontology rdf:about="http://purl.org/wf4ever/wfdesc">
<rdfs:comment xml:lang="en">This ontology ("wfdesc") describes an abstract workflow description structure, which on the top level is defined as a wfdesc:Workflow.
A wfdesc:Workflow contains several wfdesc:Process instances, associated using the wfdesc:hasSubProcess property. Each of these (and the workflow itself) wfdesc:hasInput and wfdesc:hasOutput some wfdesc:Parameter (wfdesc:Input or wfdesc:Output). An wfdesc:Artifact is associated with a wfdesc:Parameter using wfdesc:hasArtifact. The wfdesc:Workflow also wfdesc:hasDataLink several wfdesc:DataLink instances, which forms the connection between parameters.
Thus this ontology allows the description a direct acyclic graph, or a dataflow.
This ontology is meant as an upper ontology for more specific workflow definitions, and as a way to express abstract workflows. The wfprov ontology shows how to link these descriptions to a provenance trace of a workflow execution.</rdfs:comment>
<parrot:hasPrologue rdf:resource="http://purl.org/wf4ever/index.html#ro"/>
<owl:versionIRI rdf:resource="https://raw.github.com/wf4ever/ro/master/wfdesc.owl"/>
</owl:Ontology>
<!--
///////////////////////////////////////////////////////////////////////////////////////
//
// Annotation properties
//
///////////////////////////////////////////////////////////////////////////////////////
-->
<owl:AnnotationProperty rdf:about="&rdfs;comment"/>
<!--
///////////////////////////////////////////////////////////////////////////////////////
//
// Datatypes
//
///////////////////////////////////////////////////////////////////////////////////////
-->
<!--
///////////////////////////////////////////////////////////////////////////////////////
//
// Object Properties
//
///////////////////////////////////////////////////////////////////////////////////////
-->
<!-- http://purl.org/wf4ever/wfdesc#hasArtifact -->
<owl:ObjectProperty rdf:about="&wfdesc;hasArtifact">
<rdfs:comment xml:lang="en">This property associates a wfdesc:Parameter with an wfdesc:Artifact which can describe the artifact which would be used/generated on execution of the workflow.</rdfs:comment>
<rdfs:range rdf:resource="&wfdesc;Artifact"/>
<rdfs:domain rdf:resource="&wfdesc;Parameter"/>
<rdfs:subPropertyOf rdf:resource="&owl;topObjectProperty"/>
</owl:ObjectProperty>
<!-- http://purl.org/wf4ever/wfdesc#hasConfiguration -->
<owl:ObjectProperty rdf:about="&wfdesc;hasConfiguration">
<rdfs:comment xml:lang="en">This object property is used to specify the wfdesc:Configuration parameter of a given wfdesc:Process.</rdfs:comment>
<rdfs:range rdf:resource="&wfdesc;Configuration"/>
<rdfs:domain rdf:resource="&wfdesc;Process"/>
</owl:ObjectProperty>
<!-- http://purl.org/wf4ever/wfdesc#hasDataLink -->
<owl:ObjectProperty rdf:about="&wfdesc;hasDataLink">
<rdfs:comment xml:lang="en">This property is used to specify the wfdesc:DataLink instances of a given wfdesc:Workflow.</rdfs:comment>
<rdfs:range rdf:resource="&wfdesc;DataLink"/>
<rdfs:domain rdf:resource="&wfdesc;Workflow"/>
<rdfs:subPropertyOf rdf:resource="&owl;topObjectProperty"/>
</owl:ObjectProperty>
<!-- http://purl.org/wf4ever/wfdesc#hasImplementation -->
<owl:ObjectProperty rdf:about="&wfdesc;hasImplementation">
<rdfs:comment xml:lang="en">The implementation that is invoked when running the wfdesc:Process, like a wf4ever:Script or wf4ever:WebService. </rdfs:comment>
<rdfs:domain rdf:resource="&wfdesc;Process"/>
<rdfs:range rdf:resource="&wfdesc;ProcessImplementation"/>
</owl:ObjectProperty>
<!-- http://purl.org/wf4ever/wfdesc#hasInput -->
<owl:ObjectProperty rdf:about="&wfdesc;hasInput">
<rdfs:comment xml:lang="en">This object property is used to specify the wfdesc:Input parameter of a given wfdesc:Process.</rdfs:comment>
<rdfs:range rdf:resource="&wfdesc;Input"/>
<rdfs:domain rdf:resource="&wfdesc;Process"/>
</owl:ObjectProperty>
<!-- http://purl.org/wf4ever/wfdesc#hasOutput -->
<owl:ObjectProperty rdf:about="&wfdesc;hasOutput">
<rdfs:comment xml:lang="en">This object property is used to specify the wfdesc:Output parameter of a given wfdesc:Process.
</rdfs:comment>
<rdfs:range rdf:resource="&wfdesc;Output"/>
<rdfs:domain rdf:resource="&wfdesc;Process"/>
</owl:ObjectProperty>
<!-- http://purl.org/wf4ever/wfdesc#hasSink -->
<owl:ObjectProperty rdf:about="&wfdesc;hasSink">
<rdfs:comment xml:lang="en">This property is used to specify the wfdesc:Input parameter that acts as a sink from a given wfdesc:DataLink, consuming data from the link.</rdfs:comment>
<rdfs:domain rdf:resource="&wfdesc;DataLink"/>
<rdfs:range rdf:resource="&wfdesc;Input"/>
<rdfs:subPropertyOf rdf:resource="&owl;topObjectProperty"/>
</owl:ObjectProperty>
<!-- http://purl.org/wf4ever/wfdesc#hasSource -->
<owl:ObjectProperty rdf:about="&wfdesc;hasSource">
<rdfs:comment xml:lang="en">This property is used to specify the wfdesc:Output parameter that acts as a source to a given wfdesc:DataLink, providing data into the link.</rdfs:comment>
<rdfs:domain rdf:resource="&wfdesc;DataLink"/>
<rdfs:range rdf:resource="&wfdesc;Output"/>
<rdfs:subPropertyOf rdf:resource="&owl;topObjectProperty"/>
</owl:ObjectProperty>
<!-- http://purl.org/wf4ever/wfdesc#hasSubProcess -->
<owl:ObjectProperty rdf:about="&wfdesc;hasSubProcess">
<rdfs:comment xml:lang="en">This object property is used to specify that the given workflow contains the given process as part of its definition.
Although not a requirement, such sub processes should have wfdesc:DataLink within the containing workflow connecting their parameters with parameters of the containing workflow, or with parameters other contained wfdesc:Process instances.
A specialialisation of sub process is wfdesc:hasSubWorkflow where the sub process is a nested wfdesc:Workflow.</rdfs:comment>
<rdfs:range rdf:resource="&wfdesc;Process"/>
<rdfs:domain rdf:resource="&wfdesc;Workflow"/>
</owl:ObjectProperty>
<!-- http://purl.org/wf4ever/wfdesc#hasSubWorkflow -->
<owl:ObjectProperty rdf:about="&wfdesc;hasSubWorkflow">
<rdfs:comment xml:lang="en">This object property is used to associate a wfdesc:Workflow description to another wfdesc:Workflow, specifying that the first workflow has the given sub-workflow as a contained process.
This is a specialisation of wfdesc:hasSubProcess.</rdfs:comment>
<rdfs:domain rdf:resource="&wfdesc;Workflow"/>
<rdfs:range rdf:resource="&wfdesc;Workflow"/>
<rdfs:subPropertyOf rdf:resource="&wfdesc;hasSubProcess"/>
</owl:ObjectProperty>
<!-- http://purl.org/wf4ever/wfdesc#hasWorkflowDefinition -->
<owl:ObjectProperty rdf:about="&wfdesc;hasWorkflowDefinition">
<rdfs:comment xml:lang="en">The definition of this workflow, typically a file natively understood by the wfdesc:WorkflowEngine.</rdfs:comment>
<rdfs:domain rdf:resource="&wfdesc;Workflow"/>
<rdfs:range rdf:resource="&wfdesc;WorkflowDefinition"/>
<rdfs:subPropertyOf rdf:resource="&wfdesc;hasImplementation"/>
</owl:ObjectProperty>
<!--
///////////////////////////////////////////////////////////////////////////////////////
//
// Classes
//
///////////////////////////////////////////////////////////////////////////////////////
-->
<!-- http://purl.org/wf4ever/wfdesc#Artifact -->
<owl:Class rdf:about="&wfdesc;Artifact">
<rdfs:subClassOf rdf:resource="&wfdesc;Description"/>
<rdfs:comment xml:lang="en">wfdesc:Artifact is used to provide information about a class of artifacts. For example, it can be used to specify the datatype of a dataset or the structure of a document.
An wfdesc:Artifact is associated with a wfdesc:Parameter using wfdesc:hasArtifact.
The distinction between a parameter and artifact is that the parameter can be customized to describe the particular role the artifact plays with regards to the process (and can be linked using wfdesc:DataLink) - while the wfdesc:Artifact can describe the syntactic and semantic datatype.</rdfs:comment>
</owl:Class>
<!-- http://purl.org/wf4ever/wfdesc#Configuration -->
<owl:Class rdf:about="&wfdesc;Configuration">
<rdfs:subClassOf rdf:resource="&wfdesc;Parameter"/>
<owl:disjointWith rdf:resource="&wfdesc;Output"/>
<rdfs:comment xml:lang="en">A configuration is a kind of parameter to a wfdesc:Process (linked using wfdesc:hasConfiguration) to indicate a setting, flag or customization which somewhat modifies or controls the behaviour of the wfdesc:Process.
Different workflow systems have stronger or weaker differentiation between inputs and configurations, so a wfdesc:Configuration MAY also be a wfdesc:Input in the case of a dynamic configuration provided by the workflow itself.
Note that attributes which define or specify the process to invoke, like a wf4ever:script, or a wf4ever:serviceURI of a wf4ever:WebService, are not normally considered Configurations.</rdfs:comment>
</owl:Class>
<!-- http://purl.org/wf4ever/wfdesc#DataLink -->
<owl:Class rdf:about="&wfdesc;DataLink">
<rdfs:subClassOf rdf:resource="&wfdesc;Description"/>
<rdfs:comment xml:lang="en">wfdesc:DataLink is used to represent data dependencies between wfdesc:Process descriptions. It means that the artifact generated at an wfdesc:Output (identified using wfdesc:hasSource) will be used by a wfdescInput (identified using wfdesc:hasSink).
The wfdesc:Processes that owns the wfdesc:Parameter instances which are the source and sink of a wfdesc:DataLink must be wfdesc:hasSubProcess of a the same wfdesc:Workflow which wfdesc:hasDataLink the data link, or be be parameters of that same workflow.
Thus links can only be made within a wfdesc:Workflow - although ports owned by the workflow itself appear both inside and outside the workflow (in opposite roles).</rdfs:comment>
</owl:Class>
<!-- http://purl.org/wf4ever/wfdesc#Description -->
<owl:Class rdf:about="&wfdesc;Description"/>
<!-- http://purl.org/wf4ever/wfdesc#Input -->
<owl:Class rdf:about="&wfdesc;Input">
<rdfs:subClassOf rdf:resource="&wfdesc;Parameter"/>
<rdfs:comment xml:lang="en">wfdesc:Input represents an input parameter to a wfdesc:Process. This can be compared to a function parameter, command line argument, files read, or parameter set by a user interface.
It is out of scope of wfdesc to define the nature or classification of the parameter, such as giving it a name, position or data type. This can be done with subclasses and/or subproperties.</rdfs:comment>
</owl:Class>
<!-- http://purl.org/wf4ever/wfdesc#Output -->
<owl:Class rdf:about="&wfdesc;Output">
<rdfs:subClassOf rdf:resource="&wfdesc;Parameter"/>
<rdfs:comment xml:lang="en">wfdesc:Output represents an output parameter from a wfdesc:Process. This can be compared to functional return values, stdout/stdin, files written, or results shown in a user interface.
It is out of scope of wfdesc to define the nature or classification of the parameter, such as giving it a name, position or data type. This can be done with subclasses and/or subproperties.</rdfs:comment>
</owl:Class>
<!-- http://purl.org/wf4ever/wfdesc#Parameter -->
<owl:Class rdf:about="&wfdesc;Parameter">
<owl:equivalentClass>
<owl:Class>
<owl:unionOf rdf:parseType="Collection">
<rdf:Description rdf:about="&wfdesc;Configuration"/>
<rdf:Description rdf:about="&wfdesc;Input"/>
<rdf:Description rdf:about="&wfdesc;Output"/>
</owl:unionOf>
</owl:Class>
</owl:equivalentClass>
<rdfs:subClassOf rdf:resource="&wfdesc;Description"/>
<rdfs:comment xml:lang="en">This class represent a parameter of a wfdesc:Process. A wfdesc:Parameter must be a wfdesc:Input, a wfdesc:Output, or a wfdesc:Configuration.
Note that a parameter MAY be both an wfdesc:Input and wfdesc:Output when it is used on both sides of a subworkflow - see wfdesc:Workflow and wfdesc:DataLink for details.
A wfdesc:Configuration MAY also be a wfdesc:Input, indicating that the configuration is of a dynamic nature, decided by the workflow.</rdfs:comment>
</owl:Class>
<!-- http://purl.org/wf4ever/wfdesc#Process -->
<owl:Class rdf:about="&wfdesc;Process">
<rdfs:subClassOf rdf:resource="&wfdesc;Description"/>
<rdfs:comment xml:lang="en">A wfdesc:Process is used to describe a class of actions that when enacted give rise to processes. A process can have 0 or more wfdesc:Parameter instances associated using wfdesc:hasInput and wfdesc:hasOutput, signifying what kind of parameters the process will require and return.
It is out of scope for wfdesc to classify or specify the nature of the process, this should be done by subclassing and additional subproperties, for instance ex:perlScript or ex:restServiceURI</rdfs:comment>
</owl:Class>
<!-- http://purl.org/wf4ever/wfdesc#ProcessImplementation -->
<owl:Class rdf:about="&wfdesc;ProcessImplementation">
<rdfs:subClassOf rdf:resource="&wfdesc;Description"/>
<rdfs:comment xml:lang="en">The implementation that is invoked when running the wfdesc:Process, like a wf4ever:Script or wf4ever:WebService.
The process specifies the implementation using wfdesc:hasImplementation.</rdfs:comment>
</owl:Class>
<!-- http://purl.org/wf4ever/wfdesc#Workflow -->
<owl:Class rdf:about="&wfdesc;Workflow">
<rdfs:subClassOf rdf:resource="&wfdesc;Process"/>
<rdfs:comment xml:lang="en">A wfdesc:Workflow is a directed graph in which the nodes are wfdesc:Process instances and the edges (wfdesc:DataLink instances) represent data dependencies between the constituent wfdesc:Process descriptions.
The resource that contains the wfdesc:WorkflowDefinition (say the XML file saved from a workflow designer tool) can be specified with wfdesc:hasWorkflowDefinition. Research objects might aggregate a wfdesc:Workflow, a wfdesc:WorkflowDefinition, or (recommended) both.
A wfdesc:Workflow defines associated wfdesc:Process using wfdesc:hasSubProcess. A specialisation of this property is wfdesc:hasSubWorkflow, signifying that the process is a wfdesc:Workflow itself, which is further described in a similar fashion.
As a subclass of wfdesc:Process a wfdesc:Workflow can also define wfdesc:hasInput/wfdesc:hasOutput parameters - these would be inputs taken at workflow execution time, and final outputs of the workflow. (Note: Not all dataflow systems have this concept of workflow parameters)
wfdesc:Parameter descriptions are linked using wfdesc:DataLink descriptions associated with the wfdesc:Workflow using wfdesc:hasDataLink.
A wfdesc:Parameter defined with wfdesc:hasInput on a wfdesc:Workflow is considered an wfdesc:Input "outside" the workflow (ie. if it is a subworkflow), but an wfdesc:Output "inside" the workflow (where it can be connected to a wfdesc:Input of a wfdesc:Process). Thus such parameters can be linked "through" the workflow without having a "mirrored" port inside.
Example:
##
@prefix wfdesc: <http://purl.org/wf4ever/wfdesc#> .
:outerWorkflow a wfdesc:Workflow ;
wfdesc:hasSubWorkflow :innerWorkflow ;
wfdesc:hasSubProcess :procA, :procC .
:procA a wfdesc:Process ;
wfdesc:hasOutput :param1 .
:procC a wfdesc:Process ;
wfdesc:hasInput :param2 ;
wfdesc:hasOutput :param3 .
:innerWorkflow a wfdesc:Workflow ;
wfdesc:hasInput :param4 ;
wfdesc:hasOutput :param5 ;
wfdesc:hasProcess :procB .
:procB a wfdesc:Process ;
wfdesc:hasInput :param6 ;
wfdesc:hasOutput :param7 .
:innerWorkflow wfdesc:hasDataLink
[ wfdesc:hasSource :param4; wfdesc:hasSink :param6 ],
[ wfdesc:hasSource :param7; wfdesc:hasSink :param5 ] .
:outerWorkflow wfdesc:hasDataLink
[ wfdesc:hasSource :param1; wfdesc:hasSink :param4 ],
[ wfdesc:hasSource :param5; wfdesc:hasSink :param2 ] .
##
In this example :param1 is the output of :procA. :param1 is the source in a datalink that goes to the input :param4 of the :innerWorkflow. :param4 is however also the source of an inner datalink, going to input :param6 of the nested :procB.
From this :param4 is both an wfdesc:Input and wfdesc:Output (which is why these two classes are not disjoint)</rdfs:comment>
</owl:Class>
<!-- http://purl.org/wf4ever/wfdesc#WorkflowDefinition -->
<owl:Class rdf:about="&wfdesc;WorkflowDefinition">
<rdfs:subClassOf rdf:resource="&wfdesc;ProcessImplementation"/>
<rdfs:comment xml:lang="en">The definition of this workflow, typically a file natively understood by the wfdesc:WorkflowEngine. Examples include .t2flow XML files from Taverna 2 and Galaxy workflows saved as JSON.
A wfdesc:Workflow description can specify its wfdesc:WorkflowDefinition using wfdesc:hasWorkflowDefinition. This is typically only done for the top-level workflow - subworkflows without a wfdesc:hasWorkflowDefinition are assumed to be embedded within the definition of the parent workflow, except where the sub-workflows are included in the parent by reference, in which case they would have a different wfdesc:hasWorkflowDefinition.</rdfs:comment>
</owl:Class>
<!-- http://purl.org/wf4ever/wfdesc#WorkflowInstance -->
<owl:Class rdf:about="&wfdesc;WorkflowInstance">
<rdfs:subClassOf rdf:resource="&wfdesc;Workflow"/>
<rdfs:comment xml:lang="en">A wfdesc:WorkflowInstance is a specialisation of a wfdesc:Workflow description which defines all data/parameters/settings that are required to form a wfprov:WorkflowRun.</rdfs:comment>
</owl:Class>
<!-- http://purl.org/wf4ever/wfdesc#ProcessImplementation -->
<rdf:Description rdf:about="&wfdesc;ProcessImplementation">
<rdfs:seeAlso rdf:resource="&wfdesc;hasImplementation"/>
</rdf:Description>
<!-- http://purl.org/wf4ever/wfdesc#Workflow -->
<rdf:Description rdf:about="&wfdesc;Workflow">
<rdfs:seeAlso rdf:resource="&wfdesc;WorkflowDefinition"/>
</rdf:Description>
<!--
///////////////////////////////////////////////////////////////////////////////////////
//
// Annotations
//
///////////////////////////////////////////////////////////////////////////////////////
-->
<rdf:Description rdf:about="&wfdesc;WorkflowDefinition">
<rdfs:seeAlso rdf:resource="&wfdesc;hasWorkflowDefinition"/>
</rdf:Description>
</rdf:RDF>
<!-- Generated by the OWL API (version 3.3.1957) http://owlapi.sourceforge.net -->