From: <sha...@us...> - 2012-05-07 14:13:07
|
Revision: 3695 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3695&view=rev Author: shadowtm Date: 2012-05-07 14:12:56 +0000 (Mon, 07 May 2012) Log Message: ----------- Cleaned up some of the reasoning code in the OWLAPIReasoner so that it depends on one type of KnowledgeSource (OWLOntologyKnowledgeSource) rather than the generic KnowlegeSource. Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/kb/OWLOntologyKnowledgeSource.java trunk/components-core/src/main/java/org/dllearner/kb/sparql/simple/JenaToOwlapiConverter.java trunk/components-core/src/main/java/org/dllearner/kb/sparql/simple/SparqlSimpleExtractor.java trunk/components-core/src/main/java/org/dllearner/reasoning/OWLAPIReasoner.java Modified: trunk/components-core/src/main/java/org/dllearner/kb/OWLOntologyKnowledgeSource.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/kb/OWLOntologyKnowledgeSource.java 2012-05-07 11:56:11 UTC (rev 3694) +++ trunk/components-core/src/main/java/org/dllearner/kb/OWLOntologyKnowledgeSource.java 2012-05-07 14:12:56 UTC (rev 3695) @@ -1,5 +1,6 @@ package org.dllearner.kb; +import org.dllearner.core.KnowledgeSource; import org.semanticweb.owlapi.model.OWLOntology; import org.semanticweb.owlapi.model.OWLOntologyManager; @@ -11,7 +12,7 @@ * * This interface represents objects which can return an OWLOntology representation of itself. */ -public interface OWLOntologyKnowledgeSource { +public interface OWLOntologyKnowledgeSource extends KnowledgeSource{ /** * Create an OWL Ontology associated with the specified manager. Modified: trunk/components-core/src/main/java/org/dllearner/kb/sparql/simple/JenaToOwlapiConverter.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/kb/sparql/simple/JenaToOwlapiConverter.java 2012-05-07 11:56:11 UTC (rev 3694) +++ trunk/components-core/src/main/java/org/dllearner/kb/sparql/simple/JenaToOwlapiConverter.java 2012-05-07 14:12:56 UTC (rev 3695) @@ -23,12 +23,14 @@ private static Logger log = LoggerFactory.getLogger(JenaToOwlapiConverter.class); /** - * - * @param model - * @return + * Convert a Jena Model to an OWL Ontology. + * + * @param model The model to convert + * @param manager The OWL Ontology Manager - this has to be passed in rather than using the default one in order to be thread safe. + * @return The converted OWL Ontology linked to the specified OWL Ontology Manager. */ - public OWLOntology convert(Model model) { - OWLOntologyManager manager = OWLManager.createOWLOntologyManager(); + public OWLOntology convert(Model model, OWLOntologyManager manager) { + OWLOntology ontology=null; try { StringWriter writer = new StringWriter(); Modified: trunk/components-core/src/main/java/org/dllearner/kb/sparql/simple/SparqlSimpleExtractor.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/kb/sparql/simple/SparqlSimpleExtractor.java 2012-05-07 11:56:11 UTC (rev 3694) +++ trunk/components-core/src/main/java/org/dllearner/kb/sparql/simple/SparqlSimpleExtractor.java 2012-05-07 14:12:56 UTC (rev 3695) @@ -11,9 +11,11 @@ import org.dllearner.core.ComponentInitException; import org.dllearner.core.KnowledgeSource; import org.dllearner.core.config.ConfigOption; +import org.dllearner.kb.OWLOntologyKnowledgeSource; import org.dllearner.utilities.JamonMonitorLogger; import org.dllearner.utilities.analyse.TypeOntology; import org.semanticweb.owlapi.model.OWLOntology; +import org.semanticweb.owlapi.model.OWLOntologyManager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -30,7 +32,7 @@ import com.jamonapi.MonitorFactory; @ComponentAnn(name = "efficient SPARQL fragment extractor", shortName = "sparqls", version = 0.1) -public class SparqlSimpleExtractor implements KnowledgeSource { +public class SparqlSimpleExtractor implements KnowledgeSource, OWLOntologyKnowledgeSource { @ConfigOption(name = "endpointURL", description = "URL of the SPARQL endpoint", required = true) private String endpointURL = null; @@ -52,7 +54,6 @@ @ConfigOption(name = "ontologySchemaUrls", description = "List of Ontology Schema URLs", required = true) private List<String> ontologySchemaUrls = null; - private OWLOntology owlOntology; private SchemaIndexer indexer; private static Logger log = LoggerFactory.getLogger(SparqlSimpleExtractor.class); @@ -214,8 +215,7 @@ log.debug("{}", model); } } - JenaToOwlapiConverter converter = new JenaToOwlapiConverter(); - owlOntology = converter.convert(this.model); + monIndexing.stop(); monComp.stop(); log.info("*******Simple SPARQL Extractor********"); @@ -286,13 +286,6 @@ this.recursionDepth = recursionDepth; } - /** - * @return - */ - public OWLOntology getOWLOntology() { - return owlOntology; - } - public List<String> getOntologySchemaUrls() { return ontologySchemaUrls; } @@ -308,4 +301,10 @@ public void setTboxfilter(String tboxfilter) { this.tboxfilter = tboxfilter; } + + @Override + public OWLOntology createOWLOntology(OWLOntologyManager manager) { + JenaToOwlapiConverter converter = new JenaToOwlapiConverter(); + return converter.convert(this.model,manager); + } } Modified: trunk/components-core/src/main/java/org/dllearner/reasoning/OWLAPIReasoner.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/reasoning/OWLAPIReasoner.java 2012-05-07 11:56:11 UTC (rev 3694) +++ trunk/components-core/src/main/java/org/dllearner/reasoning/OWLAPIReasoner.java 2012-05-07 14:12:56 UTC (rev 3695) @@ -227,71 +227,45 @@ if (source instanceof OWLOntologyKnowledgeSource) { ontology = ((OWLOntologyKnowledgeSource) source).createOWLOntology(manager); owlAPIOntologies.add(ontology); - } else if(source instanceof SparqlSimpleExtractor) { - ontology=((SparqlSimpleExtractor) source).getOWLOntology(); - manager=ontology.getOWLOntologyManager(); - owlAPIOntologies.add(ontology); + }else{ + //This reasoner requires an ontology to process + throw new ComponentInitException("OWL API Reasoner Requires an OWLKnowledgeSource. Received a KS of type: " + source.getClass().getName()); } - if (source instanceof OWLFile || source instanceof SparqlKnowledgeSource || source instanceof SparqlSimpleExtractor || source instanceof OWLAPIOntology) { + directImports.addAll(ontology.getImportsDeclarations()); - directImports.addAll(ontology.getImportsDeclarations()); - try { - // imports includes the ontology itself - //FIXME this line throws the strange error - Set<OWLOntology> imports = manager.getImportsClosure(ontology); - allImports.addAll(imports); + try { + // imports includes the ontology itself + //FIXME this line throws the strange error + Set<OWLOntology> imports = manager.getImportsClosure(ontology); + allImports.addAll(imports); // System.out.println(imports); - for (OWLOntology ont : imports) { - classes.addAll(ont.getClassesInSignature()); - owlObjectProperties.addAll(ont.getObjectPropertiesInSignature()); - owlDatatypeProperties.addAll(ont.getDataPropertiesInSignature()); - owlIndividuals.addAll(ont.getIndividualsInSignature()); - } - - } catch (UnknownOWLOntologyException uooe) { - logger.error("UnknownOWLOntologyException occured, imports were not loaded! This is a bug, which has not been fixed yet."); + for (OWLOntology ont : imports) { + classes.addAll(ont.getClassesInSignature()); + owlObjectProperties.addAll(ont.getObjectPropertiesInSignature()); + owlDatatypeProperties.addAll(ont.getDataPropertiesInSignature()); + owlIndividuals.addAll(ont.getIndividualsInSignature()); } - // if several knowledge sources are included, then we can only - // guarantee that the base URI is from one of those sources (there - // can't be more than one); but we will take care that all prefixes are - // correctly imported - OWLOntologyFormat format = manager.getOntologyFormat(ontology); - if (format instanceof PrefixOWLOntologyFormat) { - prefixes.putAll(((PrefixOWLOntologyFormat) format).getPrefixName2PrefixMap()); - baseURI = ((PrefixOWLOntologyFormat) format).getDefaultPrefix(); - prefixes.remove(""); - } + } catch (UnknownOWLOntologyException uooe) { + logger.error("UnknownOWLOntologyException occured, imports were not loaded! This is a bug, which has not been fixed yet."); + } - // all other sources are converted to KB and then to an - // OWL API ontology - } else { - - //KB Files - KB kb = ((AbstractKnowledgeSource)source).toKB(); - - if (!(source instanceof OWLOntologyKnowledgeSource)) { - //Not sure if this will ever get hit, but leaving in for backward compatibility. - IRI ontologyURI = IRI.create("http://example.com"); - ontology = null; - try { - ontology = manager.createOntology(ontologyURI); - } catch (OWLOntologyCreationException e) { - throw new RuntimeException(e); - } - OWLAPIAxiomConvertVisitor.fillOWLOntology(manager, ontology, kb); - owlAPIOntologies.add(ontology); - } - - allImports.add(ontology); - atomicConcepts.addAll(kb.findAllAtomicConcepts()); - atomicRoles.addAll(kb.findAllAtomicRoles()); - individuals.addAll(kb.findAllIndividuals()); - // TODO: add method to find datatypes + // if several knowledge sources are included, then we can only + // guarantee that the base URI is from one of those sources (there + // can't be more than one); but we will take care that all prefixes are + // correctly imported + OWLOntologyFormat format = manager.getOntologyFormat(ontology); + if (format instanceof PrefixOWLOntologyFormat) { + prefixes.putAll(((PrefixOWLOntologyFormat) format).getPrefixName2PrefixMap()); + baseURI = ((PrefixOWLOntologyFormat) format).getDefaultPrefix(); + prefixes.remove(""); } + } + + //Now merge all of the knowledge sources into one ontology instance. try { //The following line illustrates a problem with using different OWLOntologyManagers. This can manifest itself if we have multiple sources who were created with different manager instances. //ontology = OWLManager.createOWLOntologyManager().createOntology(IRI.create("http://dl-learner/all"), new HashSet<OWLOntology>(owlAPIOntologies)); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |