# wf4ever ontology
# https://w3id.org/ro/wf4ever
# 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 wfprov: <http://purl.org/wf4ever/wfprov#> .
@prefix wf4ever: <http://purl.org/wf4ever/wf4ever#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix ore: <http://www.openarchives.org/ore/terms/> .
@prefix : <http://purl.org/wf4ever/wf4ever#> .
@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#> .
@prefix ro: <http://purl.org/wf4ever/ro#> .
@base <http://purl.org/wf4ever/wf4ever> .

<http://purl.org/wf4ever/wf4ever> rdf:type owl:Ontology ;
                                  
                                  rdfs:comment """The wf4ever ontology.
                                  This is based on the wf4ever ontologies ro, wf and wfdesc- but adds custom classes like wf4ever:Image and wf4ever:WebServiceProcess"""@en ;
                                  
                                  owl:imports <http://purl.org/wf4ever/ro> ,
                                              <http://purl.org/wf4ever/wfdesc> ,
                                              <http://purl.org/wf4ever/wfprov> ;
                                  
                                  owl:versionIRI <https://raw.github.com/wf4ever/ro/master/wf4ever.owl> .


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




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




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


###  http://purl.org/wf4ever/wf4ever#command

wf4ever:command rdf:type owl:DatatypeProperty ;
                
                rdfs:domain wf4ever:CommandLineTool ;
                
                rdfs:range xsd:string .



###  http://purl.org/wf4ever/wf4ever#script

wf4ever:script rdf:type owl:DatatypeProperty ;
               
               rdfs:domain wf4ever:Script ;
               
               rdfs:range xsd:string .



###  http://purl.org/wf4ever/wf4ever#serviceURI

wf4ever:serviceURI rdf:type owl:DatatypeProperty ;
                   
                   rdfs:domain wf4ever:WebService ;
                   
                   rdfs:range xsd:anyURI .



###  http://purl.org/wf4ever/wf4ever#wsdlOperationName

wf4ever:wsdlOperationName rdf:type owl:DatatypeProperty ;
                rdfs:domain wf4ever:SOAPService .



###  http://purl.org/wf4ever/wf4ever#wsdlPortName

wf4ever:wsdlPortName rdf:type owl:DatatypeProperty ;
                rdfs:domain wf4ever:SOAPService .



###  http://purl.org/wf4ever/wf4ever#wsdlURI

wf4ever:wsdlURI rdf:type owl:DatatypeProperty ;
                
                rdfs:domain wf4ever:SOAPService ;
                

                rdfs:subPropertyOf wf4ever:serviceURI .

wf4ever:rootURI rdf:type owl:DatatypeProperty ;
                rdfs:comment """The root of the service. This is not
                necessarily the 'base' of the service, but should
                more predictably be accessible for HTTP HEAD.
                
                Example: if the REST service template is
                <http://kronos.ifs.tuwien.ac.at:8080/fex/featureExtractionREST?voucher={voucher}&music={mp3Base64}>
                then the wf4ever:rootURI is
                <http://kronos.ifs.tuwien.ac.at:8080/>.  """@en ;
                rdfs:domain wf4ever:WebService;
                rdfs:range xsd:anyURI .



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


###  http://purl.org/wf4ever/wf4ever#BeanshellScript

wf4ever:BeanshellScript rdf:type owl:Class ;
                        
                        rdfs:subClassOf wf4ever:Script .



###  http://purl.org/wf4ever/wf4ever#CommandLineTool

wf4ever:CommandLineTool rdf:type owl:Class ;
                        
                        rdfs:subClassOf wfdesc:Process .



###  http://purl.org/wf4ever/wf4ever#Dataset

wf4ever:Dataset rdf:type owl:Class ;
                
                rdfs:subClassOf wfprov:Artifact .



###  http://purl.org/wf4ever/wf4ever#Document

wf4ever:Document rdf:type owl:Class ;
                 
                 rdfs:subClassOf wfprov:Artifact .



###  http://purl.org/wf4ever/wf4ever#File

wf4ever:File rdf:type owl:Class ;
             
             rdfs:subClassOf wfprov:Artifact .



###  http://purl.org/wf4ever/wf4ever#Image

wf4ever:Image rdf:type owl:Class ;
              
              rdfs:subClassOf wfprov:Artifact .



###  http://purl.org/wf4ever/wf4ever#RESTService

wf4ever:RESTService rdf:type owl:Class ;
                    
                    rdfs:subClassOf wf4ever:WebService ;
                    
                    rdfs:comment "A RESTful web service"@en .



###  http://purl.org/wf4ever/wf4ever#RScript

wf4ever:RScript rdf:type owl:Class ;
                
                rdfs:subClassOf wf4ever:Script .



###  http://purl.org/wf4ever/wf4ever#SOAPService

wf4ever:SOAPService rdf:type owl:Class ;
                    
                    rdfs:subClassOf wf4ever:WebService ;
                    
                    rdfs:comment """A SOAP service is typically described in a WSDL 1.1 or WSDL 2.0

TODO: Do we need to distinguish between WSDL and SOAP? WSDL 1.1 and WSDL 2.0? RPC/Encoded vs.Wrapped Document/Literal?"""@en .



###  http://purl.org/wf4ever/wf4ever#Script

wf4ever:Script rdf:type owl:Class ;
               
               rdfs:subClassOf wfdesc:Process .



###  http://purl.org/wf4ever/wf4ever#WebService

wf4ever:WebService rdf:type owl:Class ;
                   
                   rdfs:subClassOf wfdesc:Process ;
                   
                   rdfs:comment "WebServiceProcess is a wfdesc:Process description, the enactment of which gives rise to a web service call." .



###  http://purl.org/wf4ever/wf4ever#WorkflowResearchObject

wf4ever:WorkflowResearchObject rdf:type owl:Class ;
                               
#                               owl:equivalentClass [ rdf:type owl:Class ;
#                                                     owl:intersectionOf ( ro:ResearchObject
#                                                                          [ rdf:type owl:Restriction ;
#                                                                            owl:onProperty ore:aggregates ;
#                                                                            owl:someValuesFrom wfdesc:Workflow
#                                                                          ]
#                                                                        )
#                                                   ] ;
                               
                               rdfs:comment "A workflow research object is a research object that contains at least one workflow description." .




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

