@prefix bg: <https://bg-rdf.org/ontologies/bondgraph#> .
@prefix bgf: <https://bg-rdf.org/ontologies/bondgraph-framework#> .
@prefix bpc: <https://bg-rdf.org/ontologies/block-port-connector#> .
@prefix cdt: <https://w3id.org/cdt/> .
@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

@base <https://bg-rdf.org/ontologies/bondgraph-framework> .

<https://bg-rdf.org/ontologies/bondgraph-framework>
    a owl:Ontology ;
    owl:versionInfo "2026-04-12" ;
    owl:versionIRI <https://bg-rdf.org/ontologies/versioned/bondgraph-framework/2026-04-12-ontology.ttl> ;
    owl:priorVersion
        <https://bg-rdf.org/ontologies/versioned/bondgraph-framework/2026-01-21-ontology.html> ,
        <https://bg-rdf.org/ontologies/versioned/bondgraph-framework/2026-01-21-ontology.ttl> ;
    dcterms:title "A Framework for Bond-Graph Modelling" .

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

bgf:PhysicalDomain
    a owl:Class ;
    dcterms:description "A physical domain in which energy is carried by some quantity." .

bgf:Flow
    a owl:Class ;
    dcterms:description "The rate of change of a physical domain's quantity; the energy gradient with respect to momentum in a physical domain." .

bgf:Potential
    a owl:Class ;
    dcterms:description "The rate of change of a physical domain's momentum; the energy gradient with respect to quantity in a physical domain." .

bgf:Effort
    a owl:Class ;
    owl:equivalentClass bgf:Potential ;
    dcterms:description "And alternative name for the energy gradient with respect to quantity in a physical domain." .

bgf:Momentum
    a owl:Class ;
    dcterms:description "A carrier of potential energy in a physical domain." .

bgf:Quantity
    a owl:Class ;
    dcterms:description "A carrier of flow energy in a physical domain." .

#################################################################
#################################################################

bgf:BondgraphModel
    a owl:Class ;
    rdfs:subClassOf bg:BondGraph .

bgf:BondElement
    a owl:Class ;
    rdfs:subClassOf bg:BondElement .

bgf:JunctionStructure
    a owl:Class ;
    rdfs:subClassOf bg:JunctionStructure .

bgf:PowerBond
    a owl:Class ;
    dcterms:description "A connection between two PowerPorts over which power is transfered." ;
    rdfs:subClassOf bg:PowerBond .

bgf:PowerPort
    a owl:Class ;
    dcterms:description "A port of a BondElement or JunctionStructure through which power is transfered." ;
    rdfs:subClassOf bg:PowerPort .

bgf:SignalBond
    a owl:Class ;
    dcterms:description "A connection in which no power flows, used to convey state information." .

#################################################################

bgf:CompositeElement
    a owl:Class ;
    dcterms:description "A composite of a bgf:BondElement and a bgf:JunctionStructure, for example a bgf:bgf:ZeroStorageNode." .

#################################################################
#################################################################

bgf:QuantityStore
    a owl:Class ;
    rdfs:subClassOf bgf:BondElement ;
    rdfs:label "Static energy store" ;
    dcterms:description "An element which stores static energy as the amount of some quantity." .

bgf:FlowStore
    a owl:Class ;
    rdfs:subClassOf bgf:BondElement ;
    rdfs:label "Dynamic energy store" ;
    dcterms:description "An element which stores dynamic energy as the amount of some momentum." .

bgf:Dissipator
    a owl:Class ;
    rdfs:subClassOf bgf:BondElement ;
    rdfs:label "Dissipative element" ;
    dcterms:description "An element which dissipates energy." .

bgf:PotentialSource
    a owl:Class ;
    rdfs:subClassOf bgf:BondElement ;
    rdfs:label "Potential source" ;
    dcterms:description "A source of potential energy." .

bgf:FlowSource
    a owl:Class ;
    rdfs:subClassOf bgf:BondElement ;
    rdfs:label "Flow source" ;
    dcterms:description "A source of dynamic energy." .

#################################################################

bgf:Reaction
    a owl:Class ;
    rdfs:subClassOf bgf:Dissipator ;
    rdfs:label "Reaction element" ;
    dcterms:description "A dissipator with two power ports through which quantities are exchanged." .

bgf:Resistance
    a owl:Class ;
    rdfs:subClassOf bgf:Dissipator ;
    rdfs:label "Resistive element" ;
    dcterms:description "A dissipator with a single power port." .

#################################################################

bgf:OneNode
    a owl:Class ;
    rdfs:subClassOf bgf:JunctionStructure ;
    rdfs:label "One node" ;
    dcterms:description "Total potential at node is zero." .

bgf:TransformNode
    a owl:Class ;
    rdfs:subClassOf bgf:JunctionStructure ;
    rdfs:label "Transform node" ;
    dcterms:description "Transform potential and flow." .

bgf:ZeroNode
    a owl:Class ;
    rdfs:subClassOf bgf:JunctionStructure ;
    rdfs:label "Zero node" ;
    dcterms:description "Total flow at node is zero." .

#################################################################
#################################################################

bgf:OneStorageNode
    a owl:Class, bgf:CompositeElement ;
    rdfs:subClassOf bgf:FlowStore ;
    rdfs:subClassOf bgf:OneNode ;
    rdfs:label "One flow store node" ;
    dcterms:description "A flow store element with one associated One Nodes" .

bgf:OneReactionNode
    a owl:Class, bgf:CompositeElement ;
    rdfs:subClassOf bgf:Reaction ;
    rdfs:subClassOf bgf:OneNode ;
    rdfs:label "One reaction node" ;
    dcterms:description "A dissipator with two associated One Nodes" .

bgf:OneResistanceNode
    a owl:Class, bgf:CompositeElement ;
    rdfs:subClassOf bgf:Resistance ;
    rdfs:subClassOf bgf:OneNode ;
    rdfs:label "One resistance node" ;
    dcterms:description "A dissipator with one associated One Node" .

bgf:ZeroStorageNode
    a owl:Class, bgf:CompositeElement ;
    rdfs:subClassOf bgf:QuantityStore ;
    rdfs:subClassOf bgf:ZeroNode ;
    rdfs:label "Zero storage node" ;
    dcterms:description "A storage element with one associated Zero Node" .

#################################################################
#################################################################

bgf:ElementTemplate
    a owl:Class .

bgf:CompositeTemplate
    a owl:Class .

bgf:Constant
    a owl:Class .

bgf:Value
    a owl:Class .

bgf:Variable
    a owl:Class .

#################################################################
#    Port directions
#################################################################

bgf:InwardPort
    a owl:Class .

bgf:OutwardPort
    a owl:Class .

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

bgf:latex
    a rdfs:Datatype ;
    rdfs:subClassOf xsd:string .

bgf:mathml
    a rdfs:Datatype ;
    rdfs:subClassOf rdf:XMLLiteral .

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

bgf:usesTemplate
    a owl:DatatypeProperty ;
    rdfs:domain bgf:BondgraphModel .

bgf:hasBlock
    a owl:DatatypeProperty ;
    rdfs:domain bgf:BondgraphModel ;
    rdfs:range xsd:string .

#################################################################

bgf:bondCount
    a owl:DatatypeProperty, owl:FunctionalProperty ;
    dcterms:description "The number of bonds represented in a connection between two Power Ports." ;
    rdfs:range xsd:positiveInteger .

bgf:constitutiveRelation
    a owl:DatatypeProperty, owl:FunctionalProperty ;
    rdfs:domain bgf:ElementTemplate ;
    rdfs:range bgf:mathml .

bgf:hasDomain
    a owl:DatatypeProperty, owl:FunctionalProperty ;
    rdfs:domain bgf:PowerPort ;
    rdfs:range bgf:PhysicalDomain .

bgf:portId
    a owl:DatatypeProperty ;
    dcterms:description "The identity of each port when a Bond Element or Junction Structure has more than a single Power Port." ;
    rdfs:range xsd:Name .

bgf:hasSymbol
    a owl:DatatypeProperty, owl:FunctionalProperty ;
    rdfs:domain bgf:Value ;
    rdfs:range xsd:Name .

bgf:hasUnits
    a owl:DatatypeProperty, owl:FunctionalProperty ;
    rdfs:domain bgf:Variable ;
    rdfs:range cdt:ucumunit .

bgf:hasValue
    a owl:DatatypeProperty, owl:FunctionalProperty ;
    rdfs:range cdt:ucum .

bgf:varName
    a owl:DatatypeProperty, owl:FunctionalProperty ;
    dcterms:description "A name to identify a variable, for both when it is declared and when it is given a value." ;
    rdfs:range xsd:Name .

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

bgf:hasBondElement
    a owl:ObjectProperty ;
    rdfs:domain bgf:BondgraphModel ;
    rdfs:range bgf:BondElement .

bgf:hasJunctionStructure
    a owl:ObjectProperty ;
    rdfs:domain bgf:BondgraphModel ;
    rdfs:range bgf:JunctionStructure .

bgf:hasPowerBond
    a owl:ObjectProperty ;
    rdfs:domain bgf:BondgraphModel ;
    rdfs:range bgf:PowerBond .

bgf:hasSignalBond
    a owl:ObjectProperty ;
    rdfs:domain bgf:BondgraphModel ;
    rdfs:range bgf:SignalBond .

#################################################################

bgf:direction
    a owl:ObjectProperty, owl:FunctionalProperty ;
    dcterms:description "The inward or outward direction of a power port of a multi-port Bond Element." .

bgf:hasConstant
    a owl:ObjectProperty, owl:FunctionalProperty ;
    rdfs:domain bgf:PhysicalDomain ;
    rdfs:range bgf:Variable .

bgf:hasPort
    a owl:ObjectProperty, owl:FunctionalProperty ;
    rdfs:domain bgf:ElementTemplate .

bgf:hasParameter
    a owl:ObjectProperty, owl:FunctionalProperty ;
    dcterms:description "A parameter for the constitutive relation of a Bond Element." ;
    rdfs:domain bgf:ElementTemplate ;
    rdfs:range bgf:Variable .

bgf:hasVariable
    a owl:ObjectProperty, owl:FunctionalProperty ;
    dcterms:description "A non-parameter variable in the constitutive relation of a Bond Element that could be assigned a value." ;
    rdfs:domain bgf:ElementTemplate ;
    rdfs:range bgf:Variable .

#################################################################

bgf:parameterValue
    a owl:ObjectProperty, owl:FunctionalProperty ;
    dcterms:description "A value to assign to a parameter of a bond element" ;
    rdfs:domain bgf:BondElement ;
    rdfs:range bgf:Value .

bgf:variableValue
    a owl:ObjectProperty, owl:FunctionalProperty ;
    dcterms:description "A value to assign to a non-parameter variable in the constitutive relation of a bond element." ;
    rdfs:domain bgf:BondElement ;
    rdfs:range bgf:Value .

#################################################################

bgf:hasSource
    a owl:ObjectProperty, owl:FunctionalProperty ;
    rdfs:domain bgf:PowerBond ;
    rdfs:range bgf:PowerPort .

bgf:hasTarget
    a owl:ObjectProperty, owl:FunctionalProperty ;
    rdfs:domain bgf:PowerBond ;
    rdfs:range bgf:PowerPort .

#################################################################

bgf:hasPotential
    a owl:ObjectProperty, owl:FunctionalProperty ;
    rdfs:domain bgf:PhysicalDomain ;
    rdfs:range bgf:Variable .

bgf:hasFlow
    a owl:ObjectProperty, owl:FunctionalProperty ;
    rdfs:domain bgf:PhysicalDomain ;
    rdfs:range bgf:Variable .

bgf:hasQuantity
    a owl:ObjectProperty, owl:FunctionalProperty ;
    rdfs:domain bgf:PhysicalDomain ;
    rdfs:range bgf:Variable .

#################################################################
#    Annotation Properties
#################################################################

bgf:hasLocation
    a owl:ObjectProperty ;
    dcterms:description "The location of an element or junction in the physical system described by the bond graph." .

bgf:hasPhysics
    a owl:ObjectProperty ;
    dcterms:description "A real world physical continuant, occurrent, or property that can be observed and analyzed by the methods of classical physics." .

bgf:hasSpecies
    a owl:ObjectProperty ;
    dcterms:description "The entity which an element or junction represents in the physical system described by the bond graph." .

#################################################################
#################################################################

bgf:elementTemplate
    a owl:ObjectProperty, owl:FunctionalProperty ;
    rdfs:domain bgf:CompositeTemplate ;
    rdfs:range bgf:ElementTemplate .

bgf:junctionStructure
    a owl:ObjectProperty, owl:FunctionalProperty ;
    rdfs:domain bgf:CompositeTemplate ;
    rdfs:range bgf:JunctionStructure .

#################################################################
#################################################################
