I am currently trying to find out what meaning they want to tell me with the Crop Ontology and in the process learn something about Ontologies and OWL (I’m quite new to this topic). In there, owl:someValuesFrom
restriction is used a lot to link terms together by some relationship like method_of
, scale_of
. I do not see why they do not just link classes by object properties.
As a concrete example, I have added an excerpt of the Crop Ontology for Rice. Please help me understand what kind of meaning I would communicate if I would just link the mentioned classes by object properties. I have attached below my research attempts and excerpts from the Rice Ontology
The OWL help page says about those restrictions:
n other words, it defines a class of individuals x for which there is at least one y (either an instance of the class description or value of the data range) such that the pair (x,y) is an instance of P.
…which I cannot really understand. A Stack Overflow search for “OWL sameValueAs object property” did not yield any results.
In the excerpt, the Rice Ontology defines roughly:
- Method -> … -> Yield measurement
- Trait -> … -> Grain yield
- Variable -> … -> GrYld_Comp_kgha1
- Scale -> … -> kg_per_ha
1 probably a Computation/Extrapolation from other yield parameters, from harvest of a small plot
and
kg_per_ha -[scale_of]-> Yield measurement -[method_of]-> Grain yield
GrYld_Comp_kgha -[variable_of]-> { Grain yield, Yield measurement, kg_per_ha }
Initial definitions
@prefix : <https://cropontology.org/rdf/> .
@prefix prl: <http://purl.org/dc/terms/> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@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#> .
@base <https://cropontology.org/rdf/> .
:Method rdf:type owl:Class . ## <https://cropontology.org/rdf/Method>
:Computation rdf:type owl:Class ; ## <https://cropontology.org/rdf/Computation>
rdfs:subClassOf :Method .
:Scale rdf:type owl:Class . ## <https://cropontology.org/rdf/Scale>
:Numerical rdf:type owl:Class ; ## <https://cropontology.org/rdf/Numerical>
rdfs:subClassOf :Scale .
:Trait rdf:type owl:Class .
:Agronomic rdf:type owl:Class ;
rdfs:subClassOf :Trait .
:Variable rdf:type owl:Class . ## <https://cropontology.org/rdf/Variable>
:scale_of rdf:type owl:ObjectProperty . ## <https://cropontology.org/rdf/scale_of>
:variable_of rdf:type owl:ObjectProperty . ## <https://cropontology.org/rdf/variable_of>
:Grain_yield rdf:type owl:Class ; ## <https://cropontology.org/rdf/CO_320:0000073>
rdfs:subClassOf :Agronomic ;
skos:definition "Amount of grain (weight) produced per area"@en ;
Definition of Grain_yield, Yield_measurement and GrYld_Comp_kgha using restrictions
:Yield_measurement rdf:type owl:Class ; ## <https://cropontology.org/rdf/CO_320:0000469>
rdfs:subClassOf :Computation ,
[
rdf:type owl:Restriction ;
owl:onProperty :method_of ;
owl:someValuesFrom :Grain_yield
] ;
rdfs:label "Yield measurement"@en ;
skos:definition "Harvest grain from at least 5 m2/plot, discarding at least three border rows. Thresh, dry the rough (paddy) rice to 14% moisture content, and weigh."@en .
:kg_per_ha rdf:type owl:Class ; ### https://cropontology.org/rdf/CO_320:0000470
rdfs:subClassOf :Numerical ,
[
rdf:type owl:Restriction ;
owl:onProperty :scale_of ;
owl:someValuesFrom :Yield_measurement
] ;
rdfs:label "kg per ha"@en .
:GrYld_Comp_kgha rdf:type owl:Class ; ## <https://cropontology.org/rdf/CO_320:0000745>
rdfs:subClassOf :Variable ,
[ rdf:type owl:Restriction ;
owl:onProperty :variable_of ;
owl:someValuesFrom :Grain_yield .
] ,
[ rdf:type owl:Restriction ;
owl:onProperty :variable_of ;
owl:someValuesFrom :Yield_measurement
] ,
[ rdf:type owl:Restriction ;
owl:onProperty :variable_of ;
owl:someValuesFrom :kg_per_ha .
] ;
prl:contributor "IRRI" , "Jeffrey Detras" ;
rdfs:label "GrYld_Comp_kgha"@en ;
skos:altLabel "GrYld_Comp_kgha"@en .
Why can’t I just do instead:
:Yield_measurement rdf:type owl:Class ;
rdfs:subClassOf :Computation ;
:method_of :Grain_yield;
skos:definition "Harvest grain from at least 5 m2/plot, discarding at least three border rows. Thresh, dry the rough (paddy) rice to 14% moisture content, and weigh."@en .
kg_per_ha rdf:type owl:Class ;
rdfs:subClassOf :Numerical ;
:scale_of :Yield_measurement;
rdfs:label "kg per ha"@en .
:GrYld_Comp_kgha rdf:type owl:Class ;
rdfs:subClassOf :Variable ,
:variable_of :Grain_yield,
:Yield_measurement,
:kg_per_ha ;
rdfs:label "GrYld_Comp_kgha"@en .
:Yield_measurement rdf:type owl:Class ;
rdfs:subClassOf :Computation ;
:method_of :Grain_yield;
In this example you’re trying to represent a class the same way it would be represented in a class diagram. But properties in OWL don’t work like that: in an object oriented view, attributes can’t be used independently of the class where they’re defined, while in OWL properties can exist without any classes around.
owl:someValuesFrom is an existential restriction: it defines a class whose elements all have at least one property instance associated to them, whether stated or not in the ontology (Open World Assumption plays a role there). The closes in an object oriented view would be an attribute that cannot be null, even if its value is not currently known.
1