I'm creating my first ontology with protege 5.2 and I'm running into some trouble.
Let's say I have the following Classes:
Gender
with subclasses Female
and Male
Human
with subclasses Patient
and Doctor
Disease
with subclass Cancer
with subclass Prostate_Cancer
and the properties:
hasDisease
(doman: Patient
, range: Disease
)
hasGender
(domain: Patient
, range: Gender
)
Now I want to specify that a Patient
who hasDisease
Prostate_Cancer
is a Patient
who also hasGender
Male
.
Is this possible without creating new classes?
In Protege you can achieve this by adding a general class axiom:
hasDisease some Prostate_Cancer SubClassOf: Male
Then whenever you have an individual with a disease that is prostate cancer, the reasoner will infer that the individual is a Male
.
You could model this as
hasDisease some Prostate_Cancer SubClassOf: hasGender some Male
as @StanislavKralin suggested, but then the reasoner will not infer that an individual is Male
whenever it has prostate cancer. The reason for this is two fold:
(1) Domain and range restrictions merely state that whenever two individuals are linked via that property, the the first individual will be of the type of whatever is specified in the domain and the second individual will be of whatever type is specified as the range.
(2) In reality an ontology has infinite many inferences. To be usable tools cannot provide infinite inferences. Hence, tools like Protege only provide inferences for which there are named classes, i.e. like Male
. Classes like hasGender some Male
is referred to as anonymous classes and are not displayed as inferences.