You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stanbol.apache.org by en...@apache.org on 2011/08/19 16:48:33 UTC
svn commit: r1159654 - in
/incubator/stanbol/branches/jena-reasoners/reasoners/owlapi: ./ src/
src/main/ src/main/java/ src/main/java/org/ src/main/java/org/apache/
src/main/java/org/apache/stanbol/
src/main/java/org/apache/stanbol/reasoners/ src/main/...
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;
+
+}