Author: enridaga
Date: Fri Aug 19 14:48:32 2011
New Revision: 1159654

URL: http://svn.apache.org/viewvc?rev=1159654&view=rev
Log:
Implementation of the abstract OWLAPi reasoning services (STANBOL-185).

Added:
    incubator/stanbol/branches/jena-reasoners/reasoners/owlapi/pom.xml   (with 
props)
    incubator/stanbol/branches/jena-reasoners/reasoners/owlapi/src/
    incubator/stanbol/branches/jena-reasoners/reasoners/owlapi/src/main/
    incubator/stanbol/branches/jena-reasoners/reasoners/owlapi/src/main/java/
    
incubator/stanbol/branches/jena-reasoners/reasoners/owlapi/src/main/java/org/
    
incubator/stanbol/branches/jena-reasoners/reasoners/owlapi/src/main/java/org/apache/
    
incubator/stanbol/branches/jena-reasoners/reasoners/owlapi/src/main/java/org/apache/stanbol/
    
incubator/stanbol/branches/jena-reasoners/reasoners/owlapi/src/main/java/org/apache/stanbol/reasoners/
    
incubator/stanbol/branches/jena-reasoners/reasoners/owlapi/src/main/java/org/apache/stanbol/reasoners/owlapi/
    
incubator/stanbol/branches/jena-reasoners/reasoners/owlapi/src/main/java/org/apache/stanbol/reasoners/owlapi/AbstractOWLApiReasoningService.java
    
incubator/stanbol/branches/jena-reasoners/reasoners/owlapi/src/main/java/org/apache/stanbol/reasoners/owlapi/InconsistentInputException.java
    
incubator/stanbol/branches/jena-reasoners/reasoners/owlapi/src/main/java/org/apache/stanbol/reasoners/owlapi/OWLApiReasoningService.java
    
incubator/stanbol/branches/jena-reasoners/reasoners/owlapi/src/main/java/org/apache/stanbol/reasoners/owlapi/OWLApiReasoningServiceException.java
    incubator/stanbol/branches/jena-reasoners/reasoners/owlapi/src/test/
    incubator/stanbol/branches/jena-reasoners/reasoners/owlapi/src/test/java/
    
incubator/stanbol/branches/jena-reasoners/reasoners/owlapi/src/test/resources/
Modified:
    incubator/stanbol/branches/jena-reasoners/reasoners/owlapi/   (props 
changed)

Propchange: incubator/stanbol/branches/jena-reasoners/reasoners/owlapi/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Fri Aug 19 14:48:32 2011
@@ -0,0 +1,3 @@
+.settings
+.classpath
+.project

Added: incubator/stanbol/branches/jena-reasoners/reasoners/owlapi/pom.xml
URL: 
http://svn.apache.org/viewvc/incubator/stanbol/branches/jena-reasoners/reasoners/owlapi/pom.xml?rev=1159654&view=auto
==============================================================================
--- incubator/stanbol/branches/jena-reasoners/reasoners/owlapi/pom.xml (added)
+++ incubator/stanbol/branches/jena-reasoners/reasoners/owlapi/pom.xml Fri Aug 
19 14:48:32 2011
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";
+       xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
+       <parent>
+               <artifactId>stanbol-parent</artifactId>
+               <groupId>org.apache.stanbol</groupId>
+               <version>0.9.0-incubating-SNAPSHOT</version>
+               <relativePath>../../../trunk/parent</relativePath>
+       </parent>
+       <modelVersion>4.0.0</modelVersion>
+       <artifactId>org.apache.stanbol.reasoners.owlapi</artifactId>
+       <packaging>bundle</packaging>
+       <name>Apache Stanbol Reasoners: OWLApi</name>
+       <version>0.1</version>
+
+       <description>API to use an OWLApi based reasoner</description>
+       <build>
+               <!-- make it an OSGi bundle -->
+               <plugins>
+                       <plugin>
+                               <groupId>org.apache.felix</groupId>
+                               <artifactId>maven-scr-plugin</artifactId>
+                       </plugin>
+                       <plugin>
+                               <groupId>org.apache.felix</groupId>
+                               <artifactId>maven-bundle-plugin</artifactId>
+                               <extensions>true</extensions>
+                               <configuration>
+                                       <instructions>
+                                               <Import-Package>
+                                               
org.semanticweb.owlapi.apibinding.*,
+                                               org.semanticweb.owlapi.model.*,
+                                               
org.semanticweb.owlapi.reasoner.*,
+                                               org.semanticweb.owlapi.util.*,
+                                               org.slf4j.*
+                                               </Import-Package>
+                                       </instructions>
+                               </configuration>
+                       </plugin>
+               </plugins>
+       </build>
+
+       <dependencies>
+
+               <!-- Diagnostic dependencies -->
+               <dependency>
+                       <groupId>org.slf4j</groupId>
+                       <artifactId>slf4j-log4j12</artifactId>
+                       <scope>runtime</scope>
+               </dependency>
+               <dependency>
+                       <groupId>log4j</groupId>
+                       <artifactId>log4j</artifactId>
+                       <scope>runtime</scope>
+               </dependency>
+
+               <!-- Dependencise for testing -->
+               <dependency>
+                       <groupId>junit</groupId>
+                       <artifactId>junit</artifactId>
+                       <scope>test</scope>
+               </dependency>
+
+               <dependency>
+                       <groupId>org.osgi</groupId>
+                       <artifactId>org.osgi.core</artifactId>
+                       <scope>provided</scope>
+               </dependency>
+               <dependency>
+                       <groupId>org.apache.felix</groupId>
+                       
<artifactId>org.apache.felix.scr.annotations</artifactId>
+                       <scope>provided</scope>
+               </dependency>
+               <dependency>
+                       <groupId>org.osgi</groupId>
+                       <artifactId>org.osgi.compendium</artifactId>
+                       <scope>provided</scope>
+               </dependency>
+               <!--dependency>
+                       <groupId>owlapi</groupId>
+                       <artifactId>owlapi</artifactId>
+                       <type>jar</type>
+                       <scope>provided</scope>
+               </dependency-->
+
+               <!-- Stanbol dependencies -->
+               <dependency>
+                       <groupId>org.apache.stanbol</groupId>
+                       <artifactId>org.apache.stanbol.owl</artifactId>
+               </dependency>
+       </dependencies>
+</project>

Propchange: incubator/stanbol/branches/jena-reasoners/reasoners/owlapi/pom.xml
------------------------------------------------------------------------------
    svn:executable = *

Added: 
incubator/stanbol/branches/jena-reasoners/reasoners/owlapi/src/main/java/org/apache/stanbol/reasoners/owlapi/AbstractOWLApiReasoningService.java
URL: 
http://svn.apache.org/viewvc/incubator/stanbol/branches/jena-reasoners/reasoners/owlapi/src/main/java/org/apache/stanbol/reasoners/owlapi/AbstractOWLApiReasoningService.java?rev=1159654&view=auto
==============================================================================
--- 
incubator/stanbol/branches/jena-reasoners/reasoners/owlapi/src/main/java/org/apache/stanbol/reasoners/owlapi/AbstractOWLApiReasoningService.java
 (added)
+++ 
incubator/stanbol/branches/jena-reasoners/reasoners/owlapi/src/main/java/org/apache/stanbol/reasoners/owlapi/AbstractOWLApiReasoningService.java
 Fri Aug 19 14:48:32 2011
@@ -0,0 +1,299 @@
+package org.apache.stanbol.reasoners.owlapi;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.semanticweb.owlapi.apibinding.OWLManager;
+import org.semanticweb.owlapi.model.OWLAxiom;
+import org.semanticweb.owlapi.model.OWLOntology;
+import org.semanticweb.owlapi.model.OWLOntologyCreationException;
+import org.semanticweb.owlapi.model.OWLOntologyManager;
+import org.semanticweb.owlapi.model.SWRLRule;
+import org.semanticweb.owlapi.reasoner.InconsistentOntologyException;
+import org.semanticweb.owlapi.reasoner.OWLReasoner;
+import org.semanticweb.owlapi.util.InferredAxiomGenerator;
+import org.semanticweb.owlapi.util.InferredClassAssertionAxiomGenerator;
+import 
org.semanticweb.owlapi.util.InferredDataPropertyCharacteristicAxiomGenerator;
+import org.semanticweb.owlapi.util.InferredDisjointClassesAxiomGenerator;
+import org.semanticweb.owlapi.util.InferredEquivalentClassAxiomGenerator;
+import 
org.semanticweb.owlapi.util.InferredEquivalentDataPropertiesAxiomGenerator;
+import 
org.semanticweb.owlapi.util.InferredEquivalentObjectPropertyAxiomGenerator;
+import 
org.semanticweb.owlapi.util.InferredInverseObjectPropertiesAxiomGenerator;
+import 
org.semanticweb.owlapi.util.InferredObjectPropertyCharacteristicAxiomGenerator;
+import org.semanticweb.owlapi.util.InferredOntologyGenerator;
+import org.semanticweb.owlapi.util.InferredPropertyAssertionGenerator;
+import org.semanticweb.owlapi.util.InferredSubClassAxiomGenerator;
+import org.semanticweb.owlapi.util.InferredSubDataPropertyAxiomGenerator;
+import org.semanticweb.owlapi.util.InferredSubObjectPropertyAxiomGenerator;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * This abstract class implements basic methods for a reasoning service based 
on
+ * OWLApi
+ */
+public abstract class AbstractOWLApiReasoningService implements
+               OWLApiReasoningService {
+       private final Logger log = LoggerFactory.getLogger(getClass());
+
+       private OWLOntologyManager manager = null;
+
+       /**
+        * A unique instance of OWLOntologyManager to be used to place a target
+        * ontology. We don't want to use the manager bound to the input 
ontologies
+        * for that, we don't want to interfere with it.
+        * 
+        * Other {@see OWLApiReasoningService}s may want to change this.
+        * 
+        * @return
+        */
+       protected OWLOntologyManager getOWLOntologyManager() {
+               // We want a single instance here
+               if (manager == null) {
+                       manager = OWLManager.createOWLOntologyManager();
+               }
+               return manager;
+       }
+
+       /**
+        * Method to be implemented by subclasses.
+        * 
+        * @param ontology
+        * @return
+        */
+       protected abstract OWLReasoner getReasoner(OWLOntology ontology);
+
+       /**
+        * Generic method for running the reasoner
+        * 
+        * @param input
+        * @param generators
+        * @return
+        */
+       public Set<OWLAxiom> run(OWLOntology input,
+                       List<InferredAxiomGenerator<? extends OWLAxiom>> 
generators)
+                       throws OWLApiReasoningServiceException, 
InconsistentInputException {
+               try {
+                       // Get the manager
+                       OWLOntologyManager manager = getOWLOntologyManager();
+
+                       // Get the reasoner
+                       OWLReasoner reasoner = getReasoner(input);
+                       log.debug("Running {} reasoner on {} ", 
reasoner.getClass(),
+                                       input.getOntologyID());
+
+                       // To generate inferred axioms
+                       InferredOntologyGenerator inferred = new 
InferredOntologyGenerator(
+                                       reasoner, generators);
+
+                       // We fill an anonymous ontology with the result, the 
return the
+                       // axiom
+                       // set
+                       Set<OWLAxiom> axioms = new HashSet<OWLAxiom>();
+                       try {
+                               OWLOntology output = manager.createOntology();
+                               inferred.fillOntology(manager, output);
+                               log.debug("Temporary ID is {}", 
output.getOntologyID());
+                               axioms = 
manager.getOntology(output.getOntologyID())
+                                               .getAxioms();
+                               // We remove the ontology from the manager
+                               manager.removeOntology(output);
+                       } catch (OWLOntologyCreationException e) {
+                               log.error("An exception have been thrown when 
instantiating the ontology");
+                       }
+
+                       return axioms;
+               } catch (InconsistentOntologyException inconsistent) {
+                       /**
+                        * TODO Add report. Why it is inconsistent?
+                        */
+                       throw new InconsistentInputException();
+               } catch (Exception exception) {
+                       log.error("An exception have been thrown while 
executing method run()");
+                       throw new OWLApiReasoningServiceException();
+               }
+       }
+
+       /**
+        * Merges the SWRL rules in the input ontology, then calls
+        * run(OWLOntology,List<InferredAxiomGenerator<? extends OWLAxiom>>)
+        * 
+        * @param ontology
+        * @param rules
+        * @param generators
+        * @return
+        */
+       public Set<OWLAxiom> run(OWLOntology ontology, List<SWRLRule> rules,
+                       List<InferredAxiomGenerator<? extends OWLAxiom>> 
generators)
+                       throws OWLApiReasoningServiceException, 
InconsistentInputException {
+               log.debug("Called method run(OWLOntology,List<SWRLRule>,List)");
+               OWLOntologyManager manager = getOWLOntologyManager();
+               try {
+                       log.debug("Create a input ontology to merge rules in.");
+                       OWLOntology input = manager.createOntology();
+                       Set<SWRLRule> ruleSet = new HashSet<SWRLRule>();
+                       ruleSet.addAll(rules);
+                       manager.addAxioms(input, ruleSet);
+                       input = manager.getOntology(input.getOntologyID());
+                       log.debug("Created ontology: {}", input);
+                       log.debug("Calling the run method.");
+                       return run(input, generators);
+               } catch (OWLOntologyCreationException e) {
+                       log.error(
+                                       "An error have been thrown while 
attempting to create ontology. Message was: {}",
+                                       e.getLocalizedMessage());
+                       // TODO Add explanation of this exception
+                       throw new OWLApiReasoningServiceException();
+               }
+       }
+
+       /**
+        * {@see InferredAxiomGenerator}s to use for the classify() reasoning
+        * method.
+        * 
+        * Subclasses may want to change this.
+        * 
+        * @return
+        */
+       protected List<InferredAxiomGenerator<? extends OWLAxiom>> 
getClassifyAxiomGenerators() {
+               List<InferredAxiomGenerator<? extends OWLAxiom>> gens = new 
ArrayList<InferredAxiomGenerator<? extends OWLAxiom>>();
+               gens.add(new InferredClassAssertionAxiomGenerator());
+               gens.add(new InferredSubClassAxiomGenerator());
+               gens.add(new InferredEquivalentClassAxiomGenerator());
+               gens.add(new InferredDisjointClassesAxiomGenerator());
+               return gens;
+       }
+
+       /**
+        * {@see InferredAxiomGenerator}s to use for the enrich() reasoning 
method.
+        * 
+        * Subclasses may want to change this.
+        * 
+        * @return
+        */
+       protected List<InferredAxiomGenerator<? extends OWLAxiom>> 
getEnrichAxiomGenerators() {
+               List<InferredAxiomGenerator<? extends OWLAxiom>> gens = new 
ArrayList<InferredAxiomGenerator<? extends OWLAxiom>>();
+               // Classes
+               gens.add(new InferredClassAssertionAxiomGenerator());
+               gens.add(new InferredSubClassAxiomGenerator());
+               gens.add(new InferredEquivalentClassAxiomGenerator());
+               gens.add(new InferredDisjointClassesAxiomGenerator());
+               // data properties
+               gens.add(new 
InferredDataPropertyCharacteristicAxiomGenerator());
+               gens.add(new InferredEquivalentDataPropertiesAxiomGenerator());
+               gens.add(new InferredSubDataPropertyAxiomGenerator());
+               // object properties
+               gens.add(new InferredEquivalentObjectPropertyAxiomGenerator());
+               gens.add(new InferredInverseObjectPropertiesAxiomGenerator());
+               gens.add(new 
InferredObjectPropertyCharacteristicAxiomGenerator());
+               gens.add(new InferredSubObjectPropertyAxiomGenerator());
+               // individuals
+               gens.add(new InferredClassAssertionAxiomGenerator());
+               gens.add(new InferredPropertyAssertionGenerator());
+               return gens;
+       }
+
+       /**
+        * Classify, returns only axioms about classes and instances
+        * 
+        * @param ontology
+        * @return
+        */
+       public Set<OWLAxiom> classify(OWLOntology ontology)
+                       throws OWLApiReasoningServiceException, 
InconsistentInputException {
+               return run(ontology, getClassifyAxiomGenerators());
+       }
+
+       /**
+        * Classify, merge SWRL rules in the input ontology, before
+        * 
+        * @param ontology
+        * @param rules
+        * @return
+        * @throws InconsistentInputException
+        * @throws OWLApiReasoningServiceException
+        */
+       public Set<OWLAxiom> classify(OWLOntology ontology, List<SWRLRule> 
rules)
+                       throws OWLApiReasoningServiceException, 
InconsistentInputException {
+               log.debug("Calling classify(OWLOntology ontology, 
List<SWRLRule> rules) ");
+               return run(ontology, rules, getClassifyAxiomGenerators());
+       }
+
+       /**
+        * Enrich, return all inferences
+        * 
+        * @param ontology
+        * @return
+        * @throws OWLApiReasoningServiceException
+        * @throws InconsistentInputException
+        */
+       public Set<OWLAxiom> enrich(OWLOntology ontology)
+                       throws OWLApiReasoningServiceException, 
InconsistentInputException {
+               return run(ontology, getEnrichAxiomGenerators());
+       }
+
+       /**
+        * Enrich, merge SWRL rules and return all inferences
+        * 
+        * @param ontology
+        * @param rules
+        * @return
+        * @throws OWLApiReasoningServiceException
+        * @throws InconsistentInputException
+        */
+       public Set<OWLAxiom> enrich(OWLOntology ontology, List<SWRLRule> rules)
+                       throws OWLApiReasoningServiceException, 
InconsistentInputException {
+               log.debug("Calling enrich(OWLOntology ontology, List<SWRLRule> 
rules) ");
+               return run(ontology, rules, getEnrichAxiomGenerators());
+       }
+
+       /**
+        * Only check consistency
+        * 
+        * @param ontology
+        * @return
+        * @throws OWLApiReasoningServiceException 
+        */
+       public boolean isConsistent(OWLOntology ontology) throws 
OWLApiReasoningServiceException {
+               try{
+               return getReasoner(ontology).isConsistent();
+               }catch(Exception e){
+                       log.error(
+                                       "An error have been thrown while 
attempting to check consistency. Message was: {}",
+                                       e.getLocalizedMessage());
+                       // TODO Add explanation of this exception
+                       throw new OWLApiReasoningServiceException();            
        
+               }
+       }
+
+       /**
+        * Only check consistency
+        * 
+        * @param ontology
+        * @param rules
+        * @return
+        * @throws OWLApiReasoningServiceException 
+        */
+       public boolean isConsistent(OWLOntology ontology, List<SWRLRule> rules) 
throws OWLApiReasoningServiceException {
+               log.debug("Create a input ontology to merge rules in.");
+               OWLOntology input;
+               try {
+                       input = manager.createOntology();
+                       Set<SWRLRule> ruleSet = new HashSet<SWRLRule>();
+                       ruleSet.addAll(rules);
+                       manager.addAxioms(input, ruleSet);
+                       input = manager.getOntology(input.getOntologyID());
+                       log.debug("Created ontology: {}", input);
+                       return getReasoner(ontology).isConsistent();
+
+               } catch (OWLOntologyCreationException e) {
+                       log.error(
+                                       "An error have been thrown while 
attempting to create ontology. Message was: {}",
+                                       e.getLocalizedMessage());
+                       // TODO Add explanation of this exception
+                       throw new OWLApiReasoningServiceException();
+               }
+       }
+}

Added: 
incubator/stanbol/branches/jena-reasoners/reasoners/owlapi/src/main/java/org/apache/stanbol/reasoners/owlapi/InconsistentInputException.java
URL: 
http://svn.apache.org/viewvc/incubator/stanbol/branches/jena-reasoners/reasoners/owlapi/src/main/java/org/apache/stanbol/reasoners/owlapi/InconsistentInputException.java?rev=1159654&view=auto
==============================================================================
--- 
incubator/stanbol/branches/jena-reasoners/reasoners/owlapi/src/main/java/org/apache/stanbol/reasoners/owlapi/InconsistentInputException.java
 (added)
+++ 
incubator/stanbol/branches/jena-reasoners/reasoners/owlapi/src/main/java/org/apache/stanbol/reasoners/owlapi/InconsistentInputException.java
 Fri Aug 19 14:48:32 2011
@@ -0,0 +1,11 @@
+package org.apache.stanbol.reasoners.owlapi;
+
+public class InconsistentInputException extends
+               Exception {
+
+       /**
+        * 
+        */
+       private static final long serialVersionUID = -476188659298166685L;
+
+}

Added: 
incubator/stanbol/branches/jena-reasoners/reasoners/owlapi/src/main/java/org/apache/stanbol/reasoners/owlapi/OWLApiReasoningService.java
URL: 
http://svn.apache.org/viewvc/incubator/stanbol/branches/jena-reasoners/reasoners/owlapi/src/main/java/org/apache/stanbol/reasoners/owlapi/OWLApiReasoningService.java?rev=1159654&view=auto
==============================================================================
--- 
incubator/stanbol/branches/jena-reasoners/reasoners/owlapi/src/main/java/org/apache/stanbol/reasoners/owlapi/OWLApiReasoningService.java
 (added)
+++ 
incubator/stanbol/branches/jena-reasoners/reasoners/owlapi/src/main/java/org/apache/stanbol/reasoners/owlapi/OWLApiReasoningService.java
 Fri Aug 19 14:48:32 2011
@@ -0,0 +1,5 @@
+package org.apache.stanbol.reasoners.owlapi;
+
+public interface OWLApiReasoningService {
+
+}

Added: 
incubator/stanbol/branches/jena-reasoners/reasoners/owlapi/src/main/java/org/apache/stanbol/reasoners/owlapi/OWLApiReasoningServiceException.java
URL: 
http://svn.apache.org/viewvc/incubator/stanbol/branches/jena-reasoners/reasoners/owlapi/src/main/java/org/apache/stanbol/reasoners/owlapi/OWLApiReasoningServiceException.java?rev=1159654&view=auto
==============================================================================
--- 
incubator/stanbol/branches/jena-reasoners/reasoners/owlapi/src/main/java/org/apache/stanbol/reasoners/owlapi/OWLApiReasoningServiceException.java
 (added)
+++ 
incubator/stanbol/branches/jena-reasoners/reasoners/owlapi/src/main/java/org/apache/stanbol/reasoners/owlapi/OWLApiReasoningServiceException.java
 Fri Aug 19 14:48:32 2011
@@ -0,0 +1,10 @@
+package org.apache.stanbol.reasoners.owlapi;
+
+public class OWLApiReasoningServiceException extends Exception {
+
+       /**
+        * 
+        */
+       private static final long serialVersionUID = 4981739689429988435L;
+
+}


Reply via email to