Suppose I have the classes:
> Element
> ElementProperty
With the subclasses of elementProperty
being:
> AtomicNumber
> AtomicMass
Also consider the following object properties and their domains and ranges:
> hasElementProperty
Domain:Element
Range:ElementProperty
Where hasElementProperty
has the following sub-properties:
> hasAtomicNumber
Domain:Element
Range:AtomicNumber
> hasAtomicMass
Domain:Element
Range:AtomicMass
So this way when I say :Lithium :hasAtomicNumber :3
the triple :Lithium :hasElementProperty :3
will be inferred, where :3
is an instance of the AtomicNumber
class.
Okay so now consider the case where I have the data property hasElementName
and I also want it so that when I have the triple :Lithium :hasElementName "Lithium"
the triple :Lithium :hasElementProperty "Lithium"
is inferred. This isn't possible with the way I have it set up now as hasElementName
is a data property and thus cannot be a sub-property of the object property hasElementProperty
.
I have tried using Literal Reification (see Literal Reification) with success, but I feel like there may be a better way to do this as literal reification's purpose is so one can use literals as objects, and that's not what I need to do.
Any ideas would be greatly appreciated.
Thanks
This is not possible in OWL 2 DL, only in OWL 2 FULL - which means reasoners and tools might complain about your ontology, or you might get unexpected results.
If collecting all values under the same property is necessary to your application, I would keep using literal reification - seems to be the simplest way to achieve the desired result.