Search code examples
owlontologyprotege

Protege: How to express an axiom stating that class A is related to class B that has data value X?


I'm trying to express an axiom of the following kind:

"Water has some physical quantity called melting temperature, which has a value of 100.0"

I've tried definig the following class expression:

Water SubClassOf (hasPhysicalQuality some (MeltingTemperature and hasValue value 100.0f))

And I have the following assertions:

Water               Type                 owl:Class
hasPhysicalQuality  Type                 owl:ObjectProperty
hasValue            Type                 owl:DataProperty

this_water          Type                 Water
this_temperature    Type                 MeltingTemperature
this_water          hasPhysicalQuality   this_temperature
this_temperature    hasValue             50.0f

When I ran the Pellet reasoner, I was expecting to find inconsistency since the melting temperature (this_temperature) related to this_water has a value of 50.0f, not 100.0f. However, the reasoner did not indicate any inconsistency.

What am I doing wrong here?

EDIT: The correct axioms required were:

Water SubClassOf (hasPhysicalQuantity exactly 1 MeltingTemperature)
Water SubClassOf (hasPhysicalQuanlity some (MeltingTemperature and (hasValue value 100.0f)
hasValue Type owl:FunctionalProperty

Solution

  • You should make your data property functional - or, as you say in the comments, apply a cardinality restriction.