@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix bibo: <http://purl.org/ontology/bibo/> .
@prefix dc: <http://purl.org/dc/terms/> .
@prefix ev: <http://purl.org/NET/c4dm/event.owl#> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix ibis: <https://vocab.methodandstructure.com/ibis#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix pm: <https://vocab.methodandstructure.com/process-model#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix vann: <http://purl.org/vocab/vann/> .
@prefix xhv: <http://www.w3.org/1999/xhtml/vocab#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

<http://doriantaylor.com/person/dorian-taylor#me>
    foaf:name "Dorian Taylor"@en .

<https://vocab.methodandstructure.com/process-model>
    a bibo:Webpage .

<https://vocab.methodandstructure.com/process-model#>
    dc:title "A Process Model Ontology"@en ;
    bibo:uri <https://vocab.methodandstructure.com/process-model#> ;
    vann:preferredNamespacePrefix "pm" ;
    a owl:Ontology ;
    rdfs:comment "This vocabulary encodes a model for expressing generic business processes. Its purpose is to provide a language and exchange format for software applications designed to facilitate project management."@en ;
    rdfs:isDefinedBy <https://vocab.methodandstructure.com/process-model#> ;
    owl:imports <http://purl.org/NET/c4dm/event.owl#>, <http://www.w3.org/2004/02/skos/core#>, <https://vocab.methodandstructure.com/ibis#> .

pm:ABORTED
    a pm:State ;
    rdfs:comment "The task is aborted."@en ;
    rdfs:isDefinedBy <https://vocab.methodandstructure.com/process-model#> ;
    rdfs:label "ABORTED"@en .

pm:Action
    a owl:Class ;
    rdfs:comment "An Action specializes an Event in that it is performed by (at least one) real, living Person."@en ;
    rdfs:isDefinedBy <https://vocab.methodandstructure.com/process-model#> ;
    rdfs:label "Action"@en ;
    rdfs:subClassOf ev:Event ;
    owl:disjointWith pm:State .

pm:COMPLETE
    a pm:State ;
    rdfs:comment "The task is complete."@en ;
    rdfs:isDefinedBy <https://vocab.methodandstructure.com/process-model#> ;
    rdfs:label "COMPLETE"@en .

pm:Goal
    a owl:Class ;
    rdfs:comment "A Goal extends a State by way of being explicitly desired by an Agent."@en ;
    rdfs:isDefinedBy <https://vocab.methodandstructure.com/process-model#> ;
    rdfs:label "Goal"@en ;
    rdfs:subClassOf ibis:Issue, pm:State ;
    skos:note "A Goal is not actionable itself, although Tasks, which are Actions, must achieve at least one Goal. At the time of observation, a Goal, like its superclass, State, is either true or false. This entails that a Goal is not expressed in terms of quantitative results or deadlines. That is the job of a Target."@en .

pm:IN-PROGRESS
    a pm:State ;
    rdfs:comment "The task is in progress."@en ;
    rdfs:isDefinedBy <https://vocab.methodandstructure.com/process-model#> ;
    rdfs:label "IN-PROGRESS"@en .

pm:Method
    a owl:Class ;
    rdfs:comment "A method specifies an abstract sequence of events."@en ;
    rdfs:isDefinedBy <https://vocab.methodandstructure.com/process-model#> ;
    rdfs:label "Method"@en ;
    rdfs:subClassOf pm:Action ;
    owl:disjointWith pm:State ;
    skos:editorialNote "This class is provisional. It isn't entirely clear that we need a distinct Method class, since Tasks and the like could be appropriated as prototypes of methods."@en .

pm:STALLED
    a pm:State ;
    rdfs:comment "The task is stalled."@en ;
    rdfs:isDefinedBy <https://vocab.methodandstructure.com/process-model#> ;
    rdfs:label "STALLED"@en .

pm:State
    a owl:Class ;
    rdfs:comment "A State can be understood as a snapshot of a system at a given time, such as before or after an event."@en ;
    rdfs:isDefinedBy <https://vocab.methodandstructure.com/process-model#> ;
    rdfs:label "State"@en ;
    rdfs:subClassOf skos:Concept ;
    skos:note "A State is distinct from a particular instant, but it is analogous to it. At the time of observation, a State is either true or false."@en .

pm:Target
    a owl:Class ;
    rdfs:comment "A Target connects an abstract Goal to a specific Task, budget and deadline."@en ;
    rdfs:isDefinedBy <https://vocab.methodandstructure.com/process-model#> ;
    rdfs:label "Target"@en ;
    rdfs:subClassOf pm:Goal ;
    skos:note "The logical separation of a Target from a Goal makes it possible to speak of a Goal in abstract terms, and generate several equivalent candidate Tasks, each with one or more candidate Methods, which may achieve it."@en .

pm:Task
    a owl:Class ;
    rdfs:comment "A Task specializes an Action in that it has one or more Goals, and connects a Method of execution with a responsible Person who will carry it out."@en ;
    rdfs:isDefinedBy <https://vocab.methodandstructure.com/process-model#> ;
    rdfs:label "Task"@en ;
    rdfs:subClassOf ibis:Position, pm:Action ;
    skos:usageNote "Since pm:Task is a descendant of ev:Event, we can use the ev:time relation to specify a time:Interval to record the time taken to complete a task."@en .

pm:achieves
    a owl:ObjectProperty ;
    rdfs:comment "The purpose of a task is to achieve a goal. All tasks specified in this vocabulary must also specify the goal they are intended to achieve."@en ;
    rdfs:domain pm:Task ;
    rdfs:isDefinedBy <https://vocab.methodandstructure.com/process-model#> ;
    rdfs:label "achieves"@en ;
    rdfs:range pm:Goal ;
    rdfs:subPropertyOf pm:outcome .

pm:anchors
    a owl:ObjectProperty ;
    rdfs:comment "By anchoring a Goal to a Target, we give it a concrete budget and deadline."@en ;
    rdfs:domain pm:Target, pm:Task ;
    rdfs:isDefinedBy <https://vocab.methodandstructure.com/process-model#> ;
    rdfs:label "anchors"@en ;
    rdfs:range pm:Goal ;
    rdfs:subPropertyOf ibis:specializes .

pm:budget
    a owl:DatatypeProperty ;
    rdfs:comment "All Targets require a quantitative budget."@en ;
    rdfs:domain pm:Target, pm:Task ;
    rdfs:isDefinedBy <https://vocab.methodandstructure.com/process-model#> ;
    rdfs:label "budget"@en ;
    rdfs:range xsd:decimal ;
    owl:cardinality 1 ;
    skos:editorialNote "It is not clear, prior to implementation, if we should keep the budget as a raw quantity, or create some kind of resource envelope object."@en .

pm:context
    a owl:ObjectProperty ;
    rdfs:comment "The context of an Action is a State."@en ;
    rdfs:domain pm:Action ;
    rdfs:isDefinedBy <https://vocab.methodandstructure.com/process-model#> ;
    rdfs:label "context"@en ;
    rdfs:range pm:State ;
    rdfs:subPropertyOf ev:factor ;
    skos:usageNote "The pm:context and pm:outcome properties can be used to chain pm:Actions together."@en .

pm:dependency
    a owl:ObjectProperty ;
    rdfs:comment "A State the Action depends on to be actionable."@en ;
    rdfs:domain pm:Action ;
    rdfs:isDefinedBy <https://vocab.methodandstructure.com/process-model#> ;
    rdfs:label "dependency"@en ;
    rdfs:range pm:State ;
    rdfs:subPropertyOf <https://vocab.methodandstructure.com/ontology/ibis/1#suggests> .

pm:desires
    a owl:ObjectProperty ;
    rdfs:comment "A foaf:Agent may desire a Goal."@en ;
    rdfs:domain foaf:Agent ;
    rdfs:isDefinedBy <https://vocab.methodandstructure.com/process-model#> ;
    rdfs:label "desires"@en ;
    rdfs:range pm:Goal ;
    rdfs:subPropertyOf ibis:endorses .

pm:due
    a owl:DatatypeProperty ;
    rdfs:comment "All Targets must have a due date."@en ;
    rdfs:domain pm:Target, pm:Task ;
    rdfs:isDefinedBy <https://vocab.methodandstructure.com/process-model#> ;
    rdfs:label "due"@en ;
    rdfs:range xsd:dateTime ;
    owl:cardinality 1 .

pm:initiates
    a owl:FunctionalProperty, owl:ObjectProperty ;
    rdfs:comment "A valid target must initiate exactly one task to carry it out."@en ;
    rdfs:domain pm:Target ;
    rdfs:isDefinedBy <https://vocab.methodandstructure.com/process-model#> ;
    rdfs:label "initiates"@en ;
    rdfs:range pm:Task ;
    owl:cardinality 1 .

pm:method
    a owl:ObjectProperty ;
    rdfs:comment "All Tasks must identify an associated Method which will be used to complete them."@en ;
    rdfs:domain pm:Task ;
    rdfs:isDefinedBy <https://vocab.methodandstructure.com/process-model#> ;
    rdfs:label "method"@en ;
    rdfs:range pm:Method .

pm:outcome
    a owl:ObjectProperty ;
    rdfs:comment "All Actions have an outcome, which is some kind of State."@en ;
    rdfs:domain pm:Action ;
    rdfs:isDefinedBy <https://vocab.methodandstructure.com/process-model#> ;
    rdfs:label "outcome"@en ;
    rdfs:range pm:State ;
    rdfs:subPropertyOf ev:product .

pm:performer
    a owl:ObjectProperty ;
    rdfs:comment "A performer is a real, live (at the time of performance) person who performs a task."@en ;
    rdfs:domain pm:Action ;
    rdfs:isDefinedBy <https://vocab.methodandstructure.com/process-model#> ;
    rdfs:label "performer"@en ;
    rdfs:range foaf:Person ;
    rdfs:subPropertyOf ev:agent .

pm:recipient
    a owl:ObjectProperty ;
    rdfs:comment "A recipient of a task is a (real, live at the time of receipt) person who receives and approves its product or products."@en ;
    rdfs:domain pm:Task ;
    rdfs:isDefinedBy <https://vocab.methodandstructure.com/process-model#> ;
    rdfs:label "recipient"@en ;
    rdfs:range foaf:Person .

pm:responsible
    a owl:ObjectProperty ;
    rdfs:comment "The person responsible for a task may not be the one performing it, but they are the one accountable for its completion."@en ;
    rdfs:domain pm:Task ;
    rdfs:isDefinedBy <https://vocab.methodandstructure.com/process-model#> ;
    rdfs:label "responsible"@en ;
    rdfs:range foaf:Person ;
    rdfs:subPropertyOf ev:agent .

pm:status
    a owl:ObjectProperty ;
    rdfs:comment "The status of a Task at any instant is a State."@en ;
    rdfs:domain pm:Task ;
    rdfs:isDefinedBy <https://vocab.methodandstructure.com/process-model#> ;
    rdfs:label "status"@en ;
    rdfs:range pm:State .

pm:subtask
    a owl:ObjectProperty ;
    rdfs:comment "This property narrows the domain and range of ev:sub_event to Tasks."@en ;
    rdfs:domain pm:Task ;
    rdfs:isDefinedBy <https://vocab.methodandstructure.com/process-model#> ;
    rdfs:label "subtask"@en ;
    rdfs:range pm:Task ;
    rdfs:subPropertyOf ev:sub_event .

pm:variant
    a owl:ObjectProperty ;
    rdfs:comment "A variant is an alternate method of performing the same action."@en ;
    rdfs:domain pm:Action ;
    rdfs:isDefinedBy <https://vocab.methodandstructure.com/process-model#> ;
    rdfs:label "variant"@en ;
    rdfs:range pm:Action ;
    rdfs:subPropertyOf ev:sub_event .

[]
    xhv:role xhv:note .

[]
    xhv:role xhv:note .

[]
    xhv:role xhv:note .

[]
    xhv:role xhv:note .

[]
    xhv:role xhv:note .

[]
    xhv:role xhv:note .

