ProtegeReasonerAPI

From Protege Wiki
Revision as of 12:40, November 17, 2007 by TaniaTudorache (talk | contribs)

Jump to: navigation, search

Protege-OWL Reasoning API

This page describes the Protege-OWL Reasoner API that provides programmatic access to a direct or a DIG-compliant reasoner. It provides methods for consistency checking, classification, etc. of an ontology as well as methods for getting the inferred information for a particular OWL entity.

A new plugin type, the reasoner plugin, has been added that allows the integration of other reasoners into Protege. A reasoner implementing the reasoner plugin interface will be accessible through the Protege user interface the same way that the built-in reasoners are.

This Reasoner API is available since Protege 3.4 beta 120. The old Reasoner API described here has been deprecated and should not be used anymore.


If you want to use the Reasoner API with a previous version of Protege than 3.4 beta 120 (from 2007/11/17), please refer to this page.



The Reasoning API

The following sections provide a rough outline of how to use the Protégé-OWL reasoning API. The examples use an ontology that describes pizzas, which can be downloaded from here.


The inference Package

The reasoning API is encapsulated in the edu.stanford.smi.protegex.owl.inference package. The main classes that will be used are the ReasonerManager (used to obtain a reasoner) and ProtegeReasoner (an interface to the direct or DIG reasoner).

The Reasoner Manager

In general, the first step when using the reasoning API is to obtain an instance of ProtegeReasoner for an OWL model. This instance of the reasoner can then be used to obtain inferred information about the model such as inferred superclasses, inferred equivalent classes, and inferred types for individuals. The ProtegeReasoner manages communication with the direct or DIG reasoner, ensuring that it is always properly synchronized with the internal Protégé-OWL model.

In order to get an instance of ProtegeReasoner for an OWL model, the ReasonerManager, which is found in the edu.stanford.smi.protegex.owl.inference.protegeowl package, must be used. The ReasonerManager is a singleton class (a class with only one instance), whose instance can be obtained by using the static method getInstance() .

To obtain an instance of a reasoner, the method createProtegeReasoner(OWLModel owlModel, Class reasonerJavaClass) should be used. The second argument, reasonerJavaCode, is the Java class of the reasoner for which you would like to obtain an instance.


The Protege full installation comes with three reasoner implementations:

  • DefaultProtegeDIGReasoner : provides a connection to an external DIG compliant reasoner
  • ProtegePelletJenaReasoner: provides a direct connection to the Pellet reasoner accessed through the Jena API
  • ProtegePelletOWLAPIReasoner: provides a direct connection to the Pellet reasoner accessed through the OWL-API


Each of the above reasoner implement the ProtegeReasoner interface. If you would like to use a direct connection to Pellet in your application, it is recommended that you use the ProtegePelletOWLAPIReasoner.

In the following we will provide some code snippets that show how to obtain reasoner instances for the reasoners mentioned above.


Getting a DIG reasoner instance

The following code snippet shows how to get a DIG reasoner instance:

public DefaultProtegeDIGReasoner createDIGReasoner(OWLModel owlModel) {
 	final String REASONER_URL = "http://localhost:8081";

	// Get the reasoner manager instance
	ReasonerManager reasonerManager = ReasonerManager.getInstance();

	DefaultProtegeDIGReasoner reasoner = (DefaultProtegeDIGReasoner) reasonerManager.createProtegeReasoner(owlModel, reasonerManager.getDefaultDIGReasonerClass());			 

	// Set the reasoner URL and test the connection
	reasoner.setURL(REASONER_URL);

	if (!reasoner.isConnected()) {
		System.out.println("Reasoner not connected!");		
	}

	return reasoner;
}


Getting a Pellet reasoner instance (accessed through Jena)

The ProtegePelletJenaReasoner implementation converts a Protege-OWL model into a Jena model and then it uses the existing Pellet reasoner connection available in Jena for the inference.

The following code snippet shows how to get a Pellet reasoner instance that is accessed through Jena:

public ProtegeReasoner createPelletJenaReasoner(OWLModel owlModel) {

	// Get the reasoner manager instance
	ReasonerManager reasonerManager = ReasonerManager.getInstance();

	//Get an instance of the Protege Pellet reasoner
	ProtegeReasoner reasoner = reasonerManager.createProtegeReasoner(owlModel, ProtegePelletJenaReasoner.class);

	return reasoner;
}


Getting a Pellet reasoner instance (accessed through OWL-API)

The ProtegePelletOWLAPIReasoner implementation converts a Protege-OWL model into an OWL-API model and then it uses the existing Pellet reasoner connection available in OWL-API for the inference.

The following code snippet shows how to get a Pellet reasoner instance that is accessed through OWL-API:

public ProtegeReasoner createPelletOWLAPIReasoner(OWLModel owlModel) {

	// Get the reasoner manager instance
	ReasonerManager reasonerManager = ReasonerManager.getInstance();

	//Get an instance of the Protege Pellet reasoner
	ProtegeReasoner reasoner = reasonerManager.createProtegeReasoner(owlModel, ProtegePelletOWLAPIReasoner.class);

	return reasoner;
}


--- TO BE CONTINUED ---