August 2009: CO-ODE has now officially finished
You should still find most of what you are looking for on the site.
But also see here for ongoing OWL work @ Manchester

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

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.


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.