I want to create an ontology with Protege that contains two classes, Animal and FatherAnimal, and the object property hasFather, with domain Animal and range FatherAnimal.
Also, I create two other classes: Son and Father which are linked with the same object property, hasFather. The problem here is that I'm not allowed to create multiple domain and range for the same object property. I'd really like to avoid creating a new object property. Is there any other solution?
It's not really clear what the problem is. You can add multiple domains and ranges to object properties, but the interpretation is the intersection. That means that you if say, for instance,
hasFather rdfs:domain Son
hasFather rdfs:domain Animal
whenever you have
X hasFather Y
you'll be able to infer
X rdf:type Son
X rdf:type Animal
which probably isn't what you want.
As I see it, you could do this:
If you want a bit more type inference available to you, then you could also add two subclass axioms:
Son SubClassOf (hasFather only Father)
Animal SubClassOf (hasFather only AnimalFather)
these axioms say that if something is a Son and it's related to something by the property hasFather, then that something is an instance of Father. Similiary, if something is an Animal and is related to something by the property hasFather, then that something is an instance of AnimalFather.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With