# wfdesc ontology
# https://w3id.org/ro/wfdesc
# Wf4Ever Research Object Model 1.0
# https://w3id.org/ro/
#
# (c) 2011-2014
#   Stian Soiland-Reyes, University of Manchester
#   Sean Bechhofer, University of Manchester
#   Khalid Belhajjame, University of Manchester
#   Graham Klyne, University of Oxford
#   Daniel Garijo, UPM
#   Oscar Corcho, UPM
#   Esteban García Cuesta, iSOCO
#   Raul Palma, PSNC
#
# Licensed under a Creative Commons Attribution 3.0 License.
# http://creativecommons.org/licenses/by/3.0/
#
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix parrot: <http://vocab.ctic.es/parrot#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix wfdesc: <http://purl.org/wf4ever/wfdesc#> .
@prefix xml: <http://www.w3.org/XML/1998/namespace> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@base <http://purl.org/wf4ever/wfdesc> .

<http://purl.org/wf4ever/wfdesc> rdf:type owl:Ontology ;
                                 
                                 rdfs:comment """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."""@en ;
                                 
                                 owl:versionIRI <https://raw.github.com/wf4ever/ro/master/wfdesc.owl> ;
                                 
                                 parrot:hasPrologue <index.html#ro> .


#################################################################
#
#    Annotation properties
#
#################################################################


rdfs:comment rdf:type owl:AnnotationProperty .





#################################################################
#
#    Datatypes
#
#################################################################




#################################################################
#
#    Object Properties
#
#################################################################


###  http://purl.org/wf4ever/wfdesc#hasArtifact

wfdesc:hasArtifact rdf:type owl:ObjectProperty ;
                   
                   rdfs:comment "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."@en ;
                   
                   rdfs:range wfdesc:Artifact ;
                   
                   rdfs:domain wfdesc:Parameter ;
                   
                   rdfs:subPropertyOf owl:topObjectProperty .



###  http://purl.org/wf4ever/wfdesc#hasDataLink

wfdesc:hasDataLink rdf:type owl:ObjectProperty ;
                   
                   rdfs:comment "This property is used to specify the wfdesc:DataLink instances of a given wfdesc:Workflow."@en ;
                   
                   rdfs:range wfdesc:DataLink ;
                   
                   rdfs:domain wfdesc:Workflow ;
                   
                   rdfs:subPropertyOf owl:topObjectProperty .



###  http://purl.org/wf4ever/wfdesc#hasInput

wfdesc:hasInput rdf:type owl:ObjectProperty ;
                
                rdfs:comment "This object property is used to specify the wfdesc:Input parameter of a given wfdesc:Process."@en ;
                
                rdfs:range wfdesc:Input ;
                
                rdfs:domain wfdesc:Process .



###  http://purl.org/wf4ever/wfdesc#hasOutput

wfdesc:hasOutput rdf:type owl:ObjectProperty ;
                 
                 rdfs:comment """This object property is used to specify the wfdesc:Output parameter of a given wfdesc:Process.
"""@en ;
                 
                 rdfs:range wfdesc:Output ;
                 
                 rdfs:domain wfdesc:Process .



###  http://purl.org/wf4ever/wfdesc#hasSink

wfdesc:hasSink rdf:type owl:ObjectProperty ;
               
               rdfs:comment "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."@en ;
               
               rdfs:domain wfdesc:DataLink ;
               
               rdfs:range wfdesc:Input ;
               
               rdfs:subPropertyOf owl:topObjectProperty .



###  http://purl.org/wf4ever/wfdesc#hasSource

wfdesc:hasSource rdf:type owl:ObjectProperty ;
                 
                 rdfs:comment "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."@en ;
                 
                 rdfs:domain wfdesc:DataLink ;
                 
                 rdfs:range wfdesc:Output ;
                 
                 rdfs:subPropertyOf owl:topObjectProperty .



###  http://purl.org/wf4ever/wfdesc#hasSubProcess

wfdesc:hasSubProcess rdf:type owl:ObjectProperty ;
                     
                     rdfs:comment """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."""@en ;
                     
                     rdfs:range wfdesc:Process ;
                     
                     rdfs:domain wfdesc:Workflow .



###  http://purl.org/wf4ever/wfdesc#hasSubWorkflow

wfdesc:hasSubWorkflow rdf:type owl:ObjectProperty ;
                      
                      rdfs:comment """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."""@en ;
                      
                      rdfs:domain wfdesc:Workflow ;
                      
                      rdfs:range wfdesc:Workflow ;
                      
                      rdfs:subPropertyOf wfdesc:hasSubProcess .





#################################################################
#
#    Data properties
#
#################################################################


###  http://www.w3.org/2000/01/rdf-schema#label

rdfs:label rdf:type owl:DatatypeProperty .





#################################################################
#
#    Classes
#
#################################################################


###  http://purl.org/wf4ever/wfdesc#Artifact

wfdesc:Artifact rdf:type owl:Class ;
                
                rdfs:subClassOf wfdesc:Description ;
                
                rdfs:comment """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."""@en .



###  http://purl.org/wf4ever/wfdesc#DataLink

wfdesc:DataLink rdf:type owl:Class ;
                
                rdfs:subClassOf wfdesc:Description ;
                
                rdfs:comment """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)."""@en .



###  http://purl.org/wf4ever/wfdesc#Description

wfdesc:Description rdf:type owl:Class ;
                   
                   rdfs:subClassOf [ rdf:type owl:Restriction ;
                                     owl:onProperty rdfs:label ;
                                     owl:someValuesFrom xsd:string
                                   ] .



###  http://purl.org/wf4ever/wfdesc#Input

wfdesc:Input rdf:type owl:Class ;
             
             rdfs:subClassOf wfdesc:Parameter ;
             
             rdfs:comment """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."""@en .



###  http://purl.org/wf4ever/wfdesc#Output

wfdesc:Output rdf:type owl:Class ;
              
              rdfs:subClassOf wfdesc:Parameter ;
              
              rdfs:comment """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."""@en .



###  http://purl.org/wf4ever/wfdesc#Parameter

wfdesc:Parameter rdf:type owl:Class ;
                 
                 owl:equivalentClass [ rdf:type owl:Class ;
                                       owl:unionOf ( wfdesc:Input
                                                     wfdesc:Output
                                                   )
                                     ] ;
                 
                 rdfs:subClassOf wfdesc:Description ;
                 
                 rdfs:comment """This class represent a parameter of a wfdesc:Process. A wfdesc:Parameter must be a wfdesc:Input, a wfdesc:Output, or both. 

A parameter is 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."""@en .



###  http://purl.org/wf4ever/wfdesc#Process

wfdesc:Process rdf:type owl:Class ;
               
               rdfs:subClassOf wfdesc:Description ;
               
               rdfs:comment """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"""@en .



###  http://purl.org/wf4ever/wfdesc#Workflow

wfdesc:Workflow rdf:type owl:Class ;
                
                rdfs:subClassOf wfdesc:Process ;
                
                rdfs:comment """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.

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)"""@en .



###  http://purl.org/wf4ever/wfdesc#WorkflowInstance

wfdesc:WorkflowInstance rdf:type owl:Class ;
                        
                        rdfs:subClassOf wfdesc:Workflow ;
                        
                        rdfs:comment "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."@en .




###  Generated by the OWL API (version 3.2.3.1824) http://owlapi.sourceforge.net

