Protégé OWL Debugger
This document illustrates the use of the debugger with an example taken from an ontology about pizzas.
Installing Debugger
You must have installed
-
The very latest version of Protégé (3.2 or late)
-
The latest version of the Protégé-OWL plugin
- Any DIG compliant reasoner
To install OWL Debugger, simply unzip the download into the plugins folder, which will create folder named ‘uk.ac.man.cs.mig.coode.debugger’ containing the necessary jar files.
Using the OWL Debugger
We typically use the domain of pizzas as it is easily understood but rich enough to illustrate key principles and common errors (details). The details of the pizza ontology are discussed in here. The ontology used in the document can be downloaded here. The latest version of pizza ontology is also available online.
Before running the debugger, start the Protégé and OWL reasoner (E.g. RACER or FaCT++), and open the pizza.owl file. The pizza ontology contains the class hierarchy shown in Figure 1.
Figure 1: Classes Hierarchy
The ontology also contains the property hasTopping, which has a domain of Pizza. An OWL class IceCreamWithChocolateSauce has been defined as shown in figure 2.
Figure 2: The definition of class IceCreamWithChocolateSauce
When the ontology is classified, it is found that the class IceCreamWithChocolateSauce is unsatisfiable (Figure 3).
Figure 3: The class IceCreamWithChocolateSauce is inconsistent
In order to debug this class, the debugger is started, the debugged class is selected by doing follows.
-
From the Tools menu on the Protégé menu bar select "Start Debugger"
-
Select "IceCreamWithChocolateSauce" class from the debugging widget (figure 4).
-
Click the "Debug" button
Figure 4: Debugger Widget
With the debugger running, the user is lead through the steps shown in Figure 5. The debugging result widget contains two parts. The upper part explains the cause of the unsatisfiability. In the lower part, the debugger presents a tree of conditions, which represent the conditions that instances of the class being debugged must fulfill – the parent child relationships in the tree are is-generated-from. The contradicted conditions have been highlighted.

Figure 5 The Debugger result Widget - with explanation of the inconsistency
and highlighting of the conditions that cause this.
In this case, the debugger told us that the reason the class IceCreamWithChocolateSauce is inconsistent is that all instances of IceCreamWithChocolateSauce must also be instances of Pizza, which was generated from hasTopping only ChocolateSauce due to the fact that Pizza is in the range of the inverse property of the hasTopping property -- isToppingOf. Conditions that cause an unsatisfiability are boxed in red, and an explanation is generated.
In this case the conditions hasTopping some ChocolateSauce and hasTopping only PizzaTopping contradict each other – the explanation being “The universal restriction means that all relationships along hasTopping must be to individuals that are members of PizzaTopping. However, the existential restriction means that there must be at least one relationship to an individual from ChocolateSauce, which is disjoint from PizzaTopping.”

Figure 6 The debugger suggests the possible next debugging options
After pressing the Continue button, the debugger suggests that the next step is to determine why PizzaTopping and ChocolateSauce are disjoint from each other (figure 6). At the end of this final step the debugger explains that the classes PizzaTopping and ChocolateSauce are disjoint from each other because PizzaTopping is disjoint with DessertTopping which is an ancestor class of ChocolateSauce – the explanation being “The two classes ChocolateSauce and PizzaTopping are disjoint from each other. DessertTopping, which is an ancestor class of ChocolateSauce, has been asserted to be disjoint with PizzaTopping” (figure 7).

Figure 7 The debugger explains why the 2 classes are disjoint
The debugger session can be stopped by click the Finish button.
Back to the debugger download page.
