I am currently writing my master's thesis on ontology-based knowledge bases in academic libraries. For this purpose, I am trying to model the domain knowledge of a specialised music library as an ontology into which the domain knowledge can later be transferred. I use Protégé (version 5.6.1) as a tool for this. However, I think I lack a certain basic understanding in some points. The question is whether disjoint classes can have common data properties.
An example: I have two classes: Library and Library Team. The class "Library" has, among other things, the data property "Phone number", which refers to the general service telephone number. The class "Library team" has, among other things, the data properties "Last name" and "First name", both of which are individual for this class. At the same time, there is also the data property "Telephone number", but this time it refers to the individual telephone numbers of the team members. The two classes are disjoint. This means that no individual of the Team member class can be an individual of the Library class at the same time. Nevertheless, the classes in my modelling currently share the Phone number property.
The question now is: Is this procedure permissible from an ontological point of view? Or would I have to model the "phone number" property separately for both classes?
I have used the two reasoners HermiT (version 1.4.3) and Pellet as a test, both of which issue an error when I create an individual of the "Library Team" class with the corresponding properties. I assume this is related to the disjointness of the classes, which a quick double check has confirmed. Nevertheless, it seems to me to make more sense to reuse properties of classes in other classes if possible instead of redefining them. If this is indeed not possible, I will have to restructure my entire ontology and right now I hope that this is not necessary.
Long story short: Can anyone explain my errors in reasoning?
Thanks in advance, Vera
Disjoint classes can share object and/or data properties.
You seem to come from a programming object oriented background. In programming classes have attributes (or properties). However, in OWL (the ontology language) properties do not belong to classes, but are used to express relations between classes (object properties) or to express relations between classes and data types (data properties). I talk in some detail about the difference between OO and OWL here.
There can be many reasons for inconsistencies and without seeing your ontology it is difficult to know their cause exactly. A guess is that you have domain and/or range restrictions on a property that is causing the issue.
Say you have the class Library
and Team
, which are disjoint and you have a data property telephone
and you have defined them as follows:
DataProperty: telephone
Class: Library
SubClassOf:
telephone some xsd:string
Class: Team
DisjointWith: Library
SubClassOf:
telephone some xsd:string
This by itself will not cause an inconsistency. However, when you define telephone
as follows, it will cause an inconsistency:
DataProperty: telephone
Domain: Library, Team
What the Domain: Library, Team
axiom tells the reasoner is, whenever an individual is linked via telephone
to another individual, it must infer that the first individual is of type Library
and of type Team
. Hence the inconsistency.
There are 2 possible solutions:
Remove the Domain: Library, Team
axiom. This is by far the most common way to deal with it.
In some cases I have found it useful to create a TelephoneDomain
class which is defined to be equivalent to Library or Team
. Then telephone
is defined as follows:
DataProperty: telephone
Domain: TelephoneDomain
The main advantage of having using (a) Domain: TelephoneDomain
rather than (b)Domain: Library or Team
is (a) will give me inferences but (b) will not because Library or Team
is an anonymous class. See my StackOverflow answer wrt anonymous classes.