<?xml version="1.0"?>


<!DOCTYPE rdf:RDF [
    <!ENTITY prov "http://www.w3.org/ns/prov#" >
    <!ENTITY owl  "http://www.w3.org/2002/07/owl#" >
    <!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.dataone.org/provone/2015/01/15/ontology#"
     xml:base="http://purl.dataone.org/provone/2015/01/15/ontology#"
     xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
     xmlns:prov="http://www.w3.org/ns/prov#"
     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.dataone.org/provone/2015/01/15/ontology#">
        <owl:ontologyIRI rdf:resource="http://purl.dataone.org/provone/2015/01/15/ontology#" />
        <owl:versionIRI rdf:resource="http://purl.dataone.org/provone/2015/01/15/ontology#" />
        <rdfs:label>DataONE PROV Extension for Scientific Workflow Provenance</rdfs:label>
        <rdfs:seeAlso>http://www.w3.org/ns/prov</rdfs:seeAlso>
        <prov:specializationOf>http://www.w3.org/ns/prov-o</prov:specializationOf>
        <owl:versionInfo>Version 1.0</owl:versionInfo>
        <rdfs:comment>This document describes an extension of the W3C PROV standard for scientific workflow provenance.  It represents a potential standard published publicly for evaluation and possible adoption.  However, it is not associated with and is not supported by any standards organization.</rdfs:comment>
        <owl:imports rdf:resource="http://www.w3.org/ns/prov#"/>
    </owl:Ontology>
    


    <!-- 
    ///////////////////////////////////////////////////////////////////////////////////////
    //
    // Object Properties
    //
    ///////////////////////////////////////////////////////////////////////////////////////
     -->

    


    <!-- http://purl.dataone.org/provone/2015/01/15/ontology#controls -->

    <owl:ObjectProperty rdf:about="http://purl.dataone.org/provone/2015/01/15/ontology#controls">
        <rdfs:label>controls</rdfs:label>
        <prov:category>Relates a Controller to its destination Program.</prov:category>
        <prov:category>workflow-specification</prov:category>
        <rdfs:range rdf:resource="http://purl.dataone.org/provone/2015/01/15/ontology#Program"/>
        <rdfs:domain rdf:resource="http://purl.dataone.org/provone/2015/01/15/ontology#Controller"/>
    </owl:ObjectProperty>
    


    <!-- http://purl.dataone.org/provone/2015/01/15/ontology#connectsTo -->

    <owl:ObjectProperty rdf:about="http://purl.dataone.org/provone/2015/01/15/ontology#connectsTo">
        <rdfs:label>connectsTo</rdfs:label>
        <rdfs:comment>Specifies the Channel that the given Port connects to, 
          typically with an output Port connected to an input Port.</rdfs:comment>
        <prov:category>workflow-specification</prov:category>
        <rdfs:domain rdf:resource="http://purl.dataone.org/provone/2015/01/15/ontology#Port"/>
        <rdfs:range rdf:resource="http://purl.dataone.org/provone/2015/01/15/ontology#Channel"/>
    </owl:ObjectProperty>
        


    <!-- http://purl.dataone.org/provone/2015/01/15/ontology#hasDefaultParam -->

    <owl:ObjectProperty rdf:about="http://purl.dataone.org/provone/2015/01/15/ontology#hasDefaultParam">
        <rdfs:label>hasDefaultParam</rdfs:label>
        <prov:category>workflow-specification</prov:category>
        <rdfs:comment>Specifies that a given Port (likely a semantically typed input port via hasInPort) has a certain Entity item (usually Data) as a default parameter. This enables Workflow instances to be configured.</rdfs:comment>
        <rdfs:domain rdf:resource="http://purl.dataone.org/provone/2015/01/15/ontology#Port"/>
        <rdfs:range rdf:resource="&prov;Entity"/>
    </owl:ObjectProperty>
    


    <!-- http://purl.dataone.org/provone/2015/01/15/ontology#hasInPort -->

    <owl:ObjectProperty rdf:about="http://purl.dataone.org/provone/2015/01/15/ontology#hasInPort">
        <rdfs:label>hasInPort</rdfs:label>
        <rdfs:comment>Enables the specification of a Port as an input port of a particular Program.</rdfs:comment>
        <prov:category>workflow-specification</prov:category>
        <rdfs:range rdf:resource="http://purl.dataone.org/provone/2015/01/15/ontology#Port"/>
        <rdfs:domain rdf:resource="http://purl.dataone.org/provone/2015/01/15/ontology#Program"/>
    </owl:ObjectProperty>
    


    <!-- http://purl.dataone.org/provone/2015/01/15/ontology#hasOutPort -->

    <owl:ObjectProperty rdf:about="http://purl.dataone.org/provone/2015/01/15/ontology#hasOutPort">
        <rdfs:label>hasOutPort</rdfs:label>
        <prov:category>workflow-specification</prov:category>
        <rdfs:comment>Enables the specification of a Port as an output port of a particular Program.</rdfs:comment>
        <rdfs:domain rdf:resource="http://purl.dataone.org/provone/2015/01/15/ontology#Program"/>
        <rdfs:range rdf:resource="http://purl.dataone.org/provone/2015/01/15/ontology#Port"/>
    </owl:ObjectProperty>
    


    <!-- http://purl.dataone.org/provone/2015/01/15/ontology#hadInPort -->

    <owl:ObjectProperty rdf:about="http://purl.dataone.org/provone/2015/01/15/ontology#hadInPort">
        <rdfs:label>hadInPort</rdfs:label>
        <rdfs:comment>Enables the specification of a Port as an input port of a particular Usage. This allows for further qualification of the prov:used property in the context of an Execution.</rdfs:comment>
        <prov:category>workflow-specification</prov:category>
        <rdfs:domain rdf:resource="&prov;Usage"/>
        <rdfs:range rdf:resource="http://purl.dataone.org/provone/2015/01/15/ontology#Port"/>
    </owl:ObjectProperty>
    


    <!-- http://purl.dataone.org/provone/2015/01/15/ontology#hadOutPort -->

    <owl:ObjectProperty rdf:about="http://purl.dataone.org/provone/2015/01/15/ontology#hadOutPort">
        <rdfs:label>hadOutPort</rdfs:label>
        <prov:category>trace-specification</prov:category>
        <rdfs:comment>Enables the specification of a Port as an output port of a particular Generation. This allows for further qualification of the prov:wasGeneratedBy property in the context of an Execution.</rdfs:comment>
        <rdfs:domain rdf:resource="&prov;Generation"/>
        <rdfs:range rdf:resource="http://purl.dataone.org/provone/2015/01/15/ontology#Port"/>
    </owl:ObjectProperty>
    


    <!-- http://purl.dataone.org/provone/2015/01/15/ontology#hadEntity -->

    <owl:ObjectProperty rdf:about="http://purl.dataone.org/provone/2015/01/15/ontology#hadEntity">
        <rdfs:label>hadEntity</rdfs:label>
        <prov:category>trace-specification</prov:category>
        <rdfs:comment>Enables the specification of an Entity used by a particular Usage or generated by a particular Generation. This allows for further qualification of the prov:used and prov:wasGeneratedBy properties in the context of an Execution.</rdfs:comment>
        <rdfs:domain rdf:resource="&prov;Usage"/>
        <rdfs:domain rdf:resource="&prov;Generation"/>
        <rdfs:range rdf:resource="&prov;Entity"/>
    </owl:ObjectProperty>
    


    <!-- http://www.w3.org/ns/prov#qualifiedUsage -->

    <owl:ObjectProperty rdf:about="&prov;qualifiedUsage">
        <rdfs:label>qualifiedUsage</rdfs:label>
        <prov:category>trace-specification</prov:category>
        <rdfs:comment>Enables the specification of a particular Usage by a particular Execution. This allows for further qualification of the prov:used property in the context of an Execution.</rdfs:comment>
        <rdfs:domain rdf:resource="http://purl.dataone.org/provone/2015/01/15/ontology#Execution"/>
        <rdfs:range rdf:resource="&prov;Usage"/>
    </owl:ObjectProperty>
    


    <!-- http://www.w3.org/ns/prov#qualifiedGeneration -->

    <owl:ObjectProperty rdf:about="&prov;qualifiedGeneration">
        <rdfs:label>qualifiedGeneration</rdfs:label>
        <prov:category>trace-specification</prov:category>
        <rdfs:comment>Enables the specification of a particular Generation by a particular Execution. This allows for further qualification of the prov:wasGeneratedBy property in the context of an Execution.</rdfs:comment>
        <rdfs:domain rdf:resource="http://purl.dataone.org/provone/2015/01/15/ontology#Execution"/>
        <rdfs:range rdf:resource="&prov;Generation"/>
    </owl:ObjectProperty>
    


    <!-- http://www.w3.org/ns/prov#qualifiedAssociation -->

    <owl:ObjectProperty rdf:about="&prov;qualifiedAssociation">
        <rdfs:label>qualifiedAssociation</rdfs:label>
        <prov:category>trace-specification</prov:category>
        <rdfs:comment>Enables the specification of a particular Association by a particular Execution. This allows for further qualification of the prov:wasAssociatedWith property in the context of an Execution.</rdfs:comment>
        <rdfs:domain rdf:resource="http://purl.dataone.org/provone/2015/01/15/ontology#Execution"/>
        <rdfs:range rdf:resource="&prov;Association"/>
    </owl:ObjectProperty>
    


    <!-- http://www.w3.org/ns/prov#agent -->
    <owl:ObjectProperty rdf:about="&prov;agent">
        <rdfs:label>agent</rdfs:label>
        <prov:category>trace-specification</prov:category>
        <rdfs:comment>Enables the specification of a particular User in a particular Association. This allows for further qualification of the prov:wasAssociatedWith property in the context of an Execution.</rdfs:comment>
        <rdfs:domain rdfs:resource="&prov;Association"/> 
        <rdfs:range rdfs:resource="http://purl.dataone.org/provone/2015/01/15/ontology#User"/> 
    </owl:ObjectProperty>
    
    
    
    <!-- http://www.w3.org/ns/prov#hadPlan -->
    <owl:ObjectProperty rdf:about="&prov;agent">
        <rdfs:label>hadPlan</rdfs:label>
        <prov:category>trace-specification</prov:category>
        <rdfs:comment>Enables the specification of a particular Program as a Plan in a particular Association. This allows for further qualification of the prov:wasAssociatedWith property in the context of an Execution.</rdfs:comment>
        <rdfs:domain rdfs:resource="&prov;Association"/> 
        <rdfs:range rdfs:resource="http://purl.dataone.org/provone/2015/01/15/ontology#Program"/> 
    </owl:ObjectProperty>
    
    
    
    <!-- http://purl.dataone.org/provone/2015/01/15/ontology#hadSubProgram -->

    <owl:ObjectProperty rdf:about="http://purl.dataone.org/provone/2015/01/15/ontology#hasSubProgram">
        <rdfs:label>hasSubProgram</rdfs:label>
        <prov:category>workflow-specification</prov:category>
        <rdfs:comment>Specifies the recursive composition of Programs, where a parent Program includes a child Program as part of its specification.</rdfs:comment>
        <rdfs:domain rdf:resource="http://purl.dataone.org/provone/2015/01/15/ontology#Program"/>
        <rdfs:range rdf:resource="http://purl.dataone.org/provone/2015/01/15/ontology#Program"/>
    </owl:ObjectProperty>
        


    <!-- http://purl.dataone.org/provone/2015/01/15/ontology#wasPartOf -->

    <owl:ObjectProperty rdf:about="http://purl.dataone.org/provone/2015/01/15/ontology#wasPartOf">
        <rdfs:label>wasPartOf</rdfs:label>
        <prov:category>trace-specification</prov:category>
        <rdfs:comment>Specifies the structure of Execution instances, where a parent Execution (associated with a Workflow) had child Executions (associated with Programs and subworkflows).</rdfs:comment>
        <rdfs:range rdf:resource="http://purl.dataone.org/provone/2015/01/15/ontology#Execution"/>
        <rdfs:domain rdf:resource="http://purl.dataone.org/provone/2015/01/15/ontology#Execution"/>
    </owl:ObjectProperty>
    


    <!-- http://purl.dataone.org/provone/2015/01/15/ontology#controlledBy -->

    <owl:ObjectProperty rdf:about="http://purl.dataone.org/provone/2015/01/15/ontology#controlledBy">
        <rdfs:label>controlledBy</rdfs:label>
        <prov:category>workflow-specification</prov:category>
        <rdfs:comment>Relates a Program to the controller it is controlled by.</rdfs:comment>
        <rdfs:domain rdf:resource="http://purl.dataone.org/provone/2015/01/15/ontology#Program"/>
        <rdfs:range rdf:resource="http://purl.dataone.org/provone/2015/01/15/ontology#Controller"/>
    </owl:ObjectProperty>
    


    <!-- http://www.w3.org/ns/prov#used -->
    <rdf:Description rdf:about="&prov;used">
        <rdfs:domain rdf:resource="http://purl.dataone.org/provone/2015/01/15/ontology#Execution"/>
        <rdfs:range rdf:resource="&prov;Entity"/>
    </rdf:Description>


    <!-- http://www.w3.org/ns/prov#wasAssociatedWith -->
    <rdf:Description rdf:about="&prov;wasAssociatedWith">
        <rdfs:domain rdf:resource="http://purl.dataone.org/provone/2015/01/15/ontology#Execution"/>
        <rdfs:range rdf:resource="http://purl.dataone.org/provone/2015/01/15/ontology#User"/>
    </rdf:Description>


    <!-- http://www.w3.org/ns/prov#wasDerivedFrom -->
    <rdf:Description rdf:about="&prov;wasDerivedFrom">
        <rdfs:domain rdf:resource="&prov;Entity"/>
        <rdfs:range rdf:resource="&prov;Entity"/>
        <rdfs:domain rdf:resource="http://purl.dataone.org/provone/2015/01/15/ontology#Program"/>
        <rdfs:range rdf:resource="http://purl.dataone.org/provone/2015/01/15/ontology#Program"/>
    </rdf:Description>


    <!-- http://www.w3.org/ns/prov#wasGeneratedBy -->
    <rdf:Description rdf:about="&prov;wasGeneratedBy">
        <rdfs:domain rdf:resource="&prov;Entity"/>
        <rdfs:range rdf:resource="http://purl.dataone.org/provone/2015/01/15/ontology#Execution"/>
    </rdf:Description>


    <!-- http://www.w3.org/ns/prov#wasInformedBy -->
    <rdf:Description rdf:about="&prov;wasInformedBy">
        <rdfs:domain rdf:resource="http://purl.dataone.org/provone/2015/01/15/ontology#Execution"/>
        <rdfs:range rdf:resource="http://purl.dataone.org/provone/2015/01/15/ontology#Execution"/>
    </rdf:Description>


    <!-- 
    ///////////////////////////////////////////////////////////////////////////////////////
    //
    // Classes
    //
    ///////////////////////////////////////////////////////////////////////////////////////
     -->

    


    <!-- http://purl.dataone.org/provone/2015/01/15/ontology#Data -->

    <owl:Class rdf:about="http://purl.dataone.org/provone/2015/01/15/ontology#Data">
        <rdfs:label>Data</rdfs:label>
        <rdfs:subClassOf rdf:resource="&prov;Entity"/>
        <rdfs:comment>A Data item represents the basic unit of information consumed and produced by a Program. Multiple Data items may be grouped into a Collection.</rdfs:comment>
        <prov:category>data-specification</prov:category>
    </owl:Class>
    


    <!-- http://purl.dataone.org/provone/2015/01/15/ontology#Visualization -->

    <owl:Class rdf:about="http://purl.dataone.org/provone/2015/01/15/ontology#Visualization">
        <rdfs:label>Visualization</rdfs:label>
        <rdfs:subClassOf rdf:resource="&prov;Entity"/>
        <rdfs:comment>A Visualization represents a visual product produced by a Program.</rdfs:comment>
        <prov:category>data-specification</prov:category>
    </owl:Class>
    


    <!-- http://purl.dataone.org/provone/2015/01/15/ontology#Document -->

    <owl:Class rdf:about="http://purl.dataone.org/provone/2015/01/15/ontology#Document">
        <rdfs:label>Document</rdfs:label>
        <rdfs:subClassOf rdf:resource="&prov;Entity"/>
        <rdfs:comment>A Document represents a scientific work that was created as a result of one or more Executions.  This may be a published journal article, a government report, etc.</rdfs:comment>
        <prov:category>data-specification</prov:category>
    </owl:Class>
    


    <!-- http://purl.dataone.org/provone/2015/01/15/ontology#Port -->

    <owl:Class rdf:about="http://purl.dataone.org/provone/2015/01/15/ontology#Port">
        <rdfs:label>Port</rdfs:label>
        <rdfs:subClassOf rdf:resource="&prov;Entity"/>
        <prov:category>A Port enables a Program to send and receive Entities (Data, Visualizations, etc.).  When used in a role as an input port, default parameters may be configured for the Port.</prov:category>
        <prov:category>workflow-specification</prov:category>
    </owl:Class>
    


    <!-- http://purl.dataone.org/provone/2015/01/15/ontology#Program -->

    <owl:Class rdf:about="http://purl.dataone.org/provone/2015/01/15/ontology#Program">
        <rdfs:label>Program</rdfs:label>
        <rdfs:subClassOf rdf:resource="&prov;Entity"/>
        <rdfs:subClassOf rdf:resource="&prov;Plan"/>
        <prov:definition>A Program represents a computational task that consumes and produces data through its input and output ports, respectively. It can be atomic or composite, the latter case represented by a possibly nested Program. It is also subject to versioning by prov:wasDerivedFrom.</prov:definition>
        <prov:category>workflow-specification</prov:category>
    </owl:Class>
    


    <!-- http://purl.dataone.org/provone/2015/01/15/ontology#Channel -->    
    <owl:Class rdf:about="http://purl.dataone.org/provone/2015/01/15/ontology#Channel">
        <rdfs:label>Channel</rdfs:label>
        <rdfs:subClassOf rdf:resource="&prov;Entity" />
        <rdfs:comment>A Channel provides a connection between Ports that are defined for Programs. Typically, a Program
        with an output Port defined using the provone:hasOutPort object property connects to a Program with an input
        Port defined using the provone:hasInPort object property. The two Ports are connected using a Channel with the
        provone:connectsTo object property.</rdfs:comment>
    </owl:Class>
    
    

    <!-- http://purl.dataone.org/provone/2015/01/15/ontology#Execution -->

    <owl:Class rdf:about="http://purl.dataone.org/provone/2015/01/15/ontology#Execution">
        <rdfs:label>Execution</rdfs:label>
        <rdfs:subClassOf rdf:resource="&prov;Activity"/>
        <rdfs:comment>An Execution represents the execution of a Program. If the Program in question is a Workflow, then the Execution represents a trace of its execution.</rdfs:comment>
        <prov:category>trace-specification</prov:category>
    </owl:Class>
    


    <!-- http://purl.dataone.org/provone/2015/01/15/ontology#Controller -->

    <owl:Class rdf:about="http://purl.dataone.org/provone/2015/01/15/ontology#Controller">
        <rdfs:label>Controller</rdfs:label>
        <rdfs:subClassOf rdf:resource="&prov;Entity"/>
        <prov:category>A Controller specifies a control link between two Programs, and defines the model of computation for the Program.  Some models will implement sequential flow control, others will implement parallel flow control, etc.  Each model of computation can be implemented by subclassing the Controller class.</prov:category>
        <prov:category>workflow-specification</prov:category>
    </owl:Class>
    


    <!-- http://purl.dataone.org/provone/2015/01/15/ontology#User -->

    <owl:Class rdf:about="http://purl.dataone.org/provone/2015/01/15/ontology#User">
        <rdfs:label>User</rdfs:label>
        <rdfs:subClassOf rdf:resource="&prov;Agent"/>
        <prov:category>trace-specification</prov:category>
        <prov:definition>A User is the person responsible for the execution of a Program, which in turn can be a Workflow. Its specification serves attribution and accountability purposes.</prov:definition>
    </owl:Class>
    


    <!-- http://purl.dataone.org/provone/2015/01/15/ontology#Workflow -->

    <owl:Class rdf:about="http://purl.dataone.org/provone/2015/01/15/ontology#Workflow">
        <rdfs:label>Workflow</rdfs:label>
        <rdfs:subClassOf rdf:resource="http://purl.dataone.org/provone/2015/01/15/ontology#Program"/>
        <prov:category>workflow-specification</prov:category>
        <prov:definition>A Workflow is a distinguished Program, which indicates that is meant to represent the computational experiment in its entirety. It is also subject to versioning by prov:wasDerivedFrom through its super-class provone:Program.</prov:definition>
    </owl:Class>
</rdf:RDF>



<!-- Generated by the OWL API (version 3.4.2) http://owlapi.sourceforge.net -->

