Skip to content

Modeling patterns and/or gist updates for a magnitude range #1145

@rjyounes

Description

@rjyounes

We recommend the following two patterns for modeling a range of magnitudes. Note that the class gist:Magnitude is not used, because a magnitude represents an exact value, whereas a range is a specification.

Pattern 1

:_Specification_1 
    a gist:Specification ; 
    gist:hasAspect gistd:_Aspect_length ;
    gist:hasUnitOfMeasure gistd:_UnitOfMeasure_inch ;
    :valueGreaterThan 40 ;
    :valueLessThan 50 ;
    .

To implement this model, define in your own namespace the predicates you need for greater than, less than, greater than or equal to, less than or equal to, equal to. Note that gist:numericValue, which is used for actual amounts, should not be the superproperty of these properties, else a reasoner will generate the following false inferences from the triples above:

:_Specification_1 
   gist:numericValue 40 ;
   gist:numericValue 50 ;
.

While gist:numericValue is not formally defined as a functional property, it is typically used that way, and therefore these inferences would likely wreak havoc with your data.

You might consider defining a subclass of gist:Specification such as :SpecEntry, roughly as follows:

:SpecEntry a owl:Class ;
    owl:equivalentClass [
        a owl:Class ;
        owl:intersectionOf (
            gist:Specification ;
            [
                a owl:Restriction ;
                owl:onProperty gist:hasAspect ;
                owl:someValuesFrom gist:Aspect ;
            ]
            [
                a owl:Restriction ;
                owl:onProperty gist:hasUnitOfMeasure ;
                owl:someValuesFrom gist:UnitOfMeasure ;
            ]
            # If you have defined a superproperty above:
            [
                a owl:Restriction ;
                owl:onProperty :specifiedValue ;
                owl:someValuesFrom rdfs:Literal ; # or see the range of gist:numericValue
            ]
        )
    ] ;
.

Pattern 2

ex:_Specification_1 # or SpecEntry
   a gist:Specification ; # or SpecEntry  
   ops:hasValueGreaterThan :mag_1 ;
   ops:hasValueLessThan :mag_2 ;
.

:mag_1 a gist:Magnitude ;
   gist:hasAspect gistd:_Aspect_length ;
   gist:hasUnitOfMeasure gistd:_UnitOfMeasure_inch ;
   gist:numericValue 40 ;
.

:mag_1 a gist:Magnitude ;
   gist:hasAspect gistd:_Aspect_length ;
   gist:hasUnitOfMeasure gistd:_UnitOfMeasure_inch ;
   gist:numericValue 50 ;
.

This pattern uses predicates defined in Semantic Arts' Operators Ontology. Note that this ontology is entirely independent of gist and does not import it.

Pros and Cons

  • Pattern 1
    • Pro: Aspect and unit of measure are attributed to the specification and thus common to both amounts.
    • Con: Requires entirely new predicates defined in your namespace. (The Operators Ontology predicates are object properties and thus cannot be used here.)
  • Pattern 2
    • Con: Allows the aspect and unit of measure to differ between the two amounts.
    • Pro: Predicates are already defined in an Operators Ontology that can be imported. No additions to extension ontologies are required.

Introducing the SpecEntry class is already under consideration for gist 13.1.0. (Note that this issue is outdated, using old predicate names and the gist 12 and earlier definition of Magnitude. It would be updated to align with the current definition.)

We will also consider introducing into gist the datatype properties used in pattern 1. In this case we would consider renaming gist:numericValue to gist:valueEqualTo so that numericValue can become the superproperty. We would consider this a major change, despite no formal change to the definition, due to the shift in the meaning in the skos:definition and the use of the property in current implementations.

Pattern 2 is supported by gist out of the box along with the Operators Ontology.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions