@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix dcterms: <http://purl.org/dc/elements/1.1/> .
@prefix schema: <https://schema.org/> .
@prefix ops: <https://w3id.org/ops#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix vann: <http://purl.org/vocab/vann/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

<https://w3id.org/ops>
    dcterms:creator <https://www.researchgate.net/profile/Anna_Wagner13> ;
    dcterms:description """The OPS serves as a connector ontology for parametric systems. To obtain the flexibility to chose how the parametric constraints are described, the OPS does not consider the definition of constraints, but suggests to link to RDF-based or non-RDF constraint descriptions. To allow the evaluation of parametric systems in accordance to the Constraint Satisfaction Problem (CSP) approach, the OPS introduces concepts for variables, variable boundaries and systems of constraints that have to hold true at the same time.

  This work is part of the research project Semantic Construction Project Engineering (www.projekt-bpo.de), founded by the German Federal Ministry for Economic Affairs and Energy (BMWi)."""@en ;
    dcterms:issued "2019-03-02"^^xsd:date ;
    dcterms:license <https://creativecommons.org/licenses/by/4.0/> ;
    dcterms:modified "2020-03-23"^^xsd:date ;
    dcterms:title "Ontology for Parametric Systems"@en ;
    vann:preferredNamespacePrefix "ops" ;
    vann:preferredNamespaceUri <https://w3id.org/ops#> ;
    a owl:Ontology ;
    owl:versionInfo "1.1" .

ops:Constant
    a owl:Class ;
    rdfs:comment "A constant is a parameter with a static value that is not part of the non-parametric description, e.g. properties of the parametric product. The constant's value cannot be changed by the constraint solutions." ;
    rdfs:label "constant"@en ;
    rdfs:subClassOf ops:Parameter, [
        a owl:Restriction ;
        owl:cardinality "1"^^xsd:nonNegativeInteger ;
        owl:onProperty schema:value
    ] ;
    owl:disjointWith ops:Variable .

ops:Constraint
    a owl:Class ;
    rdfs:comment "The constraint class represents singular constraints, e.g. of a constraint solution problem. A constraint can be a formal definition of valid value combinations of the variables that are considered in the constraint or defined as mathematical equation or inequation, respectively." ;
    rdfs:label "constraint"@en ;
    rdfs:subClassOf owl:Thing, [
        a owl:Restriction ;
        owl:minCardinality "2"^^xsd:nonNegativeInteger ;
        owl:onProperty ops:hasParameter
    ] ;
    owl:disjointWith ops:Parameter, ops:System, ops:VariableBoundary .

ops:Parameter
    a owl:Class ;
    rdfs:comment "A parameter is a generalised term that can represent both variables and constants that are part of constraints and parametric systems. A parameter can be described with its symbol that is used in constraint descriptions that are not based on RDF, e.g. MathML snippets or files." ;
    rdfs:label "parameter"@en ;
    rdfs:subClassOf owl:Thing, [
        a owl:Restriction ;
        owl:maxCardinality "1"^^xsd:nonNegativeInteger ;
        owl:onProperty ops:hasParameterSymbol
    ] ;
    owl:disjointWith ops:Constraint, ops:System, ops:VariableBoundary .

ops:System
    a owl:Class ;
    rdfs:comment "A parametric system groups all relevant constraints for a certain configuration problem, e.g. constraint solution problem. It exist in addition to the non-parametric description(s), e.g. product and geometry descriptions." ;
    rdfs:label "system"@en ;
    rdfs:subClassOf owl:Thing, [
        a owl:Restriction ;
        owl:minCardinality "1"^^xsd:nonNegativeInteger ;
        owl:onProperty ops:includesConstraint
    ] ;
    owl:disjointWith ops:Constraint, ops:Parameter, ops:VariableBoundary .

ops:Variable
    a owl:Class ;
    rdfs:comment "A variable is a parameter with a value that originates from the non-parametric description, e.g. properties of a parametric product or geometry description. Depending on the relation between a constraint and variable, the variable value may be changed by the constraint solution or has to be treated as a fixed value, similar to a constant value." ;
    rdfs:label "variable"@en ;
    rdfs:subClassOf ops:Parameter, [
        a owl:Class ;
        owl:intersectionOf ([
                a owl:Restriction ;
                owl:maxCardinality "1"^^xsd:nonNegativeInteger ;
                owl:onProperty ops:isBoundBy
            ]
            [
                a owl:Restriction ;
                owl:maxCardinality "1"^^xsd:nonNegativeInteger ;
                owl:onProperty ops:representsIndividual
            ]
            [
                a owl:Restriction ;
                owl:maxCardinality "1"^^xsd:nonNegativeInteger ;
                owl:onProperty ops:representsProperty
            ]
            [
                a owl:Restriction ;
                owl:maxCardinality "1"^^xsd:nonNegativeInteger ;
                owl:onProperty ops:prefersValue
            ]
            [
                a owl:Restriction ;
                owl:maxCardinality "1"^^xsd:nonNegativeInteger ;
                owl:onProperty ops:toleratesDeviation
            ]
        )
    ] ;
    owl:disjointWith ops:Constant .

ops:VariableBoundary
    a owl:Class ;
    rdfs:comment "A variable boundary defines the acceptable range of a variable in terms of minimum and maximum values as well as a group of distinct acceptable values." ;
    rdfs:label "variable boundary"@en ;
    rdfs:subClassOf owl:Thing, [
        a owl:Class ;
        owl:intersectionOf ([
                a owl:Restriction ;
                owl:maxCardinality "1"^^xsd:nonNegativeInteger ;
                owl:onProperty ops:bindsMaxValue
            ]
            [
                a owl:Restriction ;
                owl:maxCardinality "1"^^xsd:nonNegativeInteger ;
                owl:onProperty ops:bindsMinValue
            ]
        )
    ] ;
    owl:disjointWith ops:Constraint, ops:Parameter, ops:System .

ops:bindsMaxValue
    a rdf:Property ;
    rdfs:comment "The binds maximum value property defines the maximum value of a variable boundary in case the variable value is continuous." ;
    rdfs:domain ops:VariableBoundary ;
    rdfs:label "binds maximum value"@en ;
    rdfs:subPropertyOf schema:maxValue .

ops:bindsMinValue
    a rdf:Property ;
    rdfs:comment "The binds minimum value property defines the minimum value of a variable boundary in case the variable value is continuous." ;
    rdfs:domain ops:VariableBoundary ;
    rdfs:label "binds minimum value"@en ;
    rdfs:subPropertyOf schema:minValue .

ops:hasAdjustableVariable
    a owl:ObjectProperty ;
    rdfs:comment "With the has adjustable variable, variables can be linked to constraints with the additional information that the variable value may be changed by the constraints' solution, i.e. the variable value is not fixed." ;
    rdfs:label "has adjustable variable"@en ;
    rdfs:range ops:Variable ;
    rdfs:subPropertyOf ops:hasParameter .

ops:hasComplexConstraintDefinition
    a owl:InverseFunctionalProperty, owl:ObjectProperty ;
    rdfs:comment "The has complex constraint definition property attaches an RDF-based constraint definition to a constraint node, e.g. in form of a formal definition of allowable value combinations or a technical definition of a mathematical equation/inequation. Due to the property's generic nature, the property may range to any RDF-based description for constraints. Since a constraint represents exactly one situation, this property is modelled to be inverse functional." ;
    rdfs:domain ops:Constraint ;
    rdfs:label "has comlex constraint definition"@en .

ops:hasConstant
    a owl:ObjectProperty ;
    rdfs:comment "The has constant property links a constraint to a constant that is considered within the constraint definition." ;
    rdfs:label "has constant"@en ;
    rdfs:range ops:Constant ;
    rdfs:subPropertyOf ops:hasParameter .

ops:hasFixedVariable
    a owl:ObjectProperty ;
    rdfs:comment "The has fixed variable property establishes a link between a constraint and a variable that is considered within the constraint's definition but cannot be changed in its value by the constraint's solution. To define a variable not to be adjustable, this property must be applied, as not specifically defined variables are assumed to be adjustable." ;
    rdfs:label "has fixed variable"@en ;
    rdfs:range ops:Variable ;
    rdfs:subPropertyOf ops:hasParameter .

ops:hasParameter
    a owl:ObjectProperty ;
    rdfs:comment "The has parameter property is a generic property to establish a link between a constraint and any parameters, i.e. constants and variables, that are considered by the constraint. This property does not give insights on the adjustability of the related variables, per default it is to be assumed that a variable may be changed in its value." ;
    rdfs:domain ops:Constraint ;
    rdfs:label "has parameter"@en ;
    rdfs:range ops:Parameter .

ops:hasParameterSymbol
    a owl:DatatypeProperty ;
    rdfs:comment "The has parameter symbol property adds the symbol of a parameter with which the parameter is represented in a (non-RDF) constraint description." ;
    rdfs:domain ops:Parameter ;
    rdfs:label "has parameter symbol"@en .

ops:hasSimpleConstraintDefinition
    a owl:DatatypeProperty ;
    rdfs:comment "The has simple constraint definition property attaches an non-RDF constraint definition to a constraint node, e.g. in form of a formal definition of allowable value combinations or a technical definition of a mathematical equation/inequation (MathML snippet or file)." ;
    rdfs:domain ops:Constraint ;
    rdfs:label "has simple constraint definition"@en .

ops:includesConstraint
    a owl:ObjectProperty ;
    rdfs:comment "The includes constraint property can be applied to relate a parametric system to constraints that are part of the overall system." ;
    rdfs:domain ops:System ;
    rdfs:label "includes constraint"@en ;
    rdfs:range ops:Constraint .

ops:includesValue
    a rdf:Property ;
    rdfs:comment "The includes value property can be applied to variable boundaries to attach valid variable values to the boundary in case the variable value is discrete." ;
    rdfs:domain ops:VariableBoundary ;
    rdfs:label "includes value"@en .

ops:isBoundBy
    a owl:InverseFunctionalProperty, owl:ObjectProperty ;
    rdfs:comment "With the is bound by property, a variable can be related to a variable boundary to define the variable's acceptable value range. As a functional property is dedicated to describe the acceptable value range of one singular variable, this property is modelled to be inverse functional." ;
    rdfs:domain ops:Variable ;
    rdfs:label "is bound by"@en ;
    rdfs:range ops:VariableBoundary .

ops:prefersValue
    a owl:DatatypeProperty ;
    rdfs:comment "The prefers value property defines the ideal value of a variable to enable constraint optimisation problems. A preferred variable value is -- in contrast to a variable boundary -- not restricting the range of acceptable values but serves to optimise the solution output." ;
    rdfs:domain ops:Variable ;
    rdfs:label "prefers value"@en .

ops:representsIndividual
    a owl:ObjectProperty ;
    rdfs:comment "The represents individual property creates a link between a variable and the individual of the non-parametric description, e.g. a product or geometry description, that is the domain of the variable's considered property. Together with the represents individual property, the represents property property can be used in a SPARQL query to extract the given value that is represented by the variable, which serves as a default value, in case the variable is adjustable." ;
    rdfs:domain ops:Variable ;
    rdfs:label "representy individual"@en ;
    rdfs:range owl:NamedIndividual .

ops:representsProperty
    a owl:ObjectProperty ;
    rdfs:comment "With the represents property property, a variable can be related to the datatype property that points to the considered value of the non-parametric description, e.g. product or geometry description. Together with the represents individual property, the represents property property can be used in a SPARQL query to extract the given value that is represented by the variable, which serves as a default value, in case the variable is adjustable." ;
    rdfs:domain ops:Variable ;
    rdfs:label "representy property"@en ;
    rdfs:range owl:DatatypeProperty .

ops:representsValueAtIndex
    a owl:DatatypeProperty ;
    rdfs:comment "In case the corresponding value of a variable is part of an ordered list, the represents value at index property can be applied to define the index of the corresponding value within its list." ;
    rdfs:domain ops:Variable ;
    rdfs:label "represents value at index" ;
    rdfs:range xsd:nonNegativeInteger .

ops:toleratesDeviation
    a owl:DatatypeProperty ;
    rdfs:comment "The tolerates deviation property defines how far the variable value may deviate from the defined preferred variable value before a penalty is given to the system's solution, e.g. in form of weights. While the tolerated deviation of individual variables may vary, the assigned weight for overstepping the tolerance is uniform throughout the system. The penalty should be given for every multiple of the tolerance that has been overstepped. E.g. if the preferred value is defined to be '3' and the toleratable deviation is '1', a solution with a value of '4' may get one penalty, while a solution with a value of '6' may get three penalties." ;
    rdfs:domain ops:Variable ;
    rdfs:label "tolerates deviation"@en .

