From: <dc...@us...> - 2012-03-23 14:53:14
|
Revision: 3617 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3617&view=rev Author: dcherix Date: 2012-03-23 14:53:07 +0000 (Fri, 23 Mar 2012) Log Message: ----------- TODO: * Resolve a problem with the OWLAPIReasoner. * Separate Filters in A- and T-Box filters * Schema Indexer with axioms Added Paths: ----------- trunk/components-core/src/main/java/org/dllearner/kb/sparql/simple/ trunk/components-core/src/main/java/org/dllearner/kb/sparql/simple/ABoxQueryGenerator.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/QueryExecutor.java trunk/components-core/src/main/java/org/dllearner/kb/sparql/simple/SchemaIndexer.java trunk/components-core/src/main/java/org/dllearner/kb/sparql/simple/SparqlSimpleExtractor.java trunk/components-core/src/main/java/org/dllearner/kb/sparql/simple/TBoxQueryGenerator.java Added: trunk/components-core/src/main/java/org/dllearner/kb/sparql/simple/ABoxQueryGenerator.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/kb/sparql/simple/ABoxQueryGenerator.java (rev 0) +++ trunk/components-core/src/main/java/org/dllearner/kb/sparql/simple/ABoxQueryGenerator.java 2012-03-23 14:53:07 UTC (rev 3617) @@ -0,0 +1,91 @@ +/** + * + */ +package org.dllearner.kb.sparql.simple; + +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; + +import com.hp.hpl.jena.ontology.Individual; +import com.hp.hpl.jena.ontology.OntModel; +import com.hp.hpl.jena.util.iterator.ExtendedIterator; + +/** + * @author didierc + * + */ +public class ABoxQueryGenerator { + public String createQuery(List<String> individuals, OntModel model, List<String> filters) { + StringBuilder builder = new StringBuilder(); + builder.append("CONSTRUCT {?s ?p ?o} "); + builder.append("{ ?s ?p ?o ."); + List<String> curIndividuals; + if (model.isEmpty()) { + curIndividuals = individuals; + } else { + curIndividuals = this.difference(individuals, this.getIndividualsFromModel(model)); + } + builder.append(" FILTER (?s IN( "); + for (String individual : curIndividuals) { + builder.append("<"); + builder.append(individual); + builder.append(">"); + builder.append(", "); + } + builder.deleteCharAt(builder.length() - 2); + builder.append("))"); + if (filters != null) { + for (String filter : filters) { + builder.append("filter"); + } + } + builder.append("}"); + return builder.toString(); + } + + public String createLastQuery(List<String> individuals, OntModel model, List<String> filters) { + StringBuilder builder = new StringBuilder(); + builder.append("CONSTRUCT {?s ?p ?o . ?o a ?class} "); + builder.append("{ ?s ?p ?o ."); + builder.append("?o a ?class"); + List<String> curIndividuals; + if (model.isEmpty()) { + curIndividuals = individuals; + } else { + curIndividuals = this.difference(individuals, this.getIndividualsFromModel(model)); + } + builder.append(" FILTER ( ?s IN( "); + for (String individual : curIndividuals) { + builder.append("<"); + builder.append(individual); + builder.append(">"); + builder.append(", "); + } + builder.deleteCharAt(builder.length() - 2); + builder.append(")). "); + if (filters != null) { + for (String filter : filters) { + builder.append(filter); + builder.append(". "); + } + } + builder.append("}"); + return builder.toString(); + } + + private List<String> getIndividualsFromModel(OntModel model) { + ExtendedIterator<Individual> iterator = model.listIndividuals(); + LinkedList<String> result = new LinkedList<String>(); + while (iterator.hasNext()) { + result.add(iterator.next().getURI()); + } + return result; + } + + public List<String> difference(List<String> a, List<String> b) { + ArrayList<String> result = new ArrayList<String>(b); + result.removeAll(a); + return result; + } +} Property changes on: trunk/components-core/src/main/java/org/dllearner/kb/sparql/simple/ABoxQueryGenerator.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: 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 (rev 0) +++ trunk/components-core/src/main/java/org/dllearner/kb/sparql/simple/JenaToOwlapiConverter.java 2012-03-23 14:53:07 UTC (rev 3617) @@ -0,0 +1,46 @@ +package org.dllearner.kb.sparql.simple; + +import java.io.StringReader; +import java.io.StringWriter; + +import org.semanticweb.owlapi.apibinding.OWLManager; +import org.semanticweb.owlapi.io.ReaderDocumentSource; +import org.semanticweb.owlapi.model.OWLOntology; +import org.semanticweb.owlapi.model.OWLOntologyCreationException; +import org.semanticweb.owlapi.model.OWLOntologyManager; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.hp.hpl.jena.rdf.model.Model; + +/** + * + * @author Didier Cherix + * + */ +public class JenaToOwlapiConverter { + + private static Logger log = LoggerFactory.getLogger(JenaToOwlapiConverter.class); + + /** + * + * @param model + * @return + */ + public OWLOntology convert(Model model) { + OWLOntologyManager manager = OWLManager.createOWLOntologyManager(); + OWLOntology ontology=null; + try { + StringWriter writer = new StringWriter(); + model.write(writer); + StringBuffer stringBuffer = writer.getBuffer(); + ReaderDocumentSource documentSource = new ReaderDocumentSource(new StringReader( + stringBuffer.toString())); + ontology = manager.loadOntologyFromOntologyDocument(documentSource); + } catch (OWLOntologyCreationException e) { + log.error(e.getMessage(), e); + } + return ontology; + } + +} Property changes on: trunk/components-core/src/main/java/org/dllearner/kb/sparql/simple/JenaToOwlapiConverter.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: trunk/components-core/src/main/java/org/dllearner/kb/sparql/simple/QueryExecutor.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/kb/sparql/simple/QueryExecutor.java (rev 0) +++ trunk/components-core/src/main/java/org/dllearner/kb/sparql/simple/QueryExecutor.java 2012-03-23 14:53:07 UTC (rev 3617) @@ -0,0 +1,39 @@ +/** + * + */ +package org.dllearner.kb.sparql.simple; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.hp.hpl.jena.ontology.OntModel; +import com.hp.hpl.jena.query.Query; +import com.hp.hpl.jena.query.QueryExecution; +import com.hp.hpl.jena.query.QueryExecutionFactory; +import com.hp.hpl.jena.query.QueryFactory; + +/** + * @author didierc + * + */ +public class QueryExecutor { + + private static Logger log=LoggerFactory.getLogger(QueryExecutor.class); + + public OntModel executeQuery(String queryString, String endpoint, OntModel model) { + Query query = QueryFactory.create(queryString); + log.debug("Jena Query: ", query); + QueryExecution qExec = QueryExecutionFactory.sparqlService(endpoint, query); + qExec.execConstruct(model); + return model; + } + + public OntModel executeQuery(String queryString, String endpoint, OntModel model, String defaultGraphURI) { + Query query = QueryFactory.create(queryString); + log.debug("Jena Query: ", query); + QueryExecution qExec = QueryExecutionFactory.sparqlService(endpoint, query, defaultGraphURI); + log.debug("Qexec: {}",qExec); + qExec.execConstruct(model); + return model; + } +} Property changes on: trunk/components-core/src/main/java/org/dllearner/kb/sparql/simple/QueryExecutor.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: trunk/components-core/src/main/java/org/dllearner/kb/sparql/simple/SchemaIndexer.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/kb/sparql/simple/SchemaIndexer.java (rev 0) +++ trunk/components-core/src/main/java/org/dllearner/kb/sparql/simple/SchemaIndexer.java 2012-03-23 14:53:07 UTC (rev 3617) @@ -0,0 +1,31 @@ +package org.dllearner.kb.sparql.simple; + +import org.nlp2rdf.ontology.ClassIndexer; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.hp.hpl.jena.ontology.OntModel; +import com.hp.hpl.jena.rdf.model.ModelFactory; + +public class SchemaIndexer { + private static Logger log = LoggerFactory.getLogger(SchemaIndexer.class); + private ClassIndexer classIndexer=null; + + public SchemaIndexer(){} + + public void init(){ + classIndexer=new ClassIndexer(); + OntModel model = ModelFactory.createOntologyModel(); + model.read(SchemaIndexer.class.getResourceAsStream("dbpedia_3-3.6.owl"), null); + classIndexer.index(model); + } + + public OntModel getHierarchyForURI(String classUri){ + if(classIndexer==null){ + this.init(); + } + return classIndexer.getHierarchyForClassURI(classUri); + } + + +} \ No newline at end of file Property changes on: trunk/components-core/src/main/java/org/dllearner/kb/sparql/simple/SchemaIndexer.java ___________________________________________________________________ Added: svn:mime-type + text/plain Copied: trunk/components-core/src/main/java/org/dllearner/kb/sparql/simple/SparqlSimpleExtractor.java (from rev 3609, trunk/components-core/src/main/java/org/dllearner/kb/sparql/SparqlSimpleExtractor.java) =================================================================== --- trunk/components-core/src/main/java/org/dllearner/kb/sparql/simple/SparqlSimpleExtractor.java (rev 0) +++ trunk/components-core/src/main/java/org/dllearner/kb/sparql/simple/SparqlSimpleExtractor.java 2012-03-23 14:53:07 UTC (rev 3617) @@ -0,0 +1,165 @@ +package org.dllearner.kb.sparql.simple; + +import java.util.LinkedList; +import java.util.List; + +import org.dllearner.core.ComponentAnn; +import org.dllearner.core.ComponentInitException; +import org.dllearner.core.KnowledgeSource; +import org.dllearner.core.config.ConfigOption; +import org.semanticweb.owlapi.model.OWLOntology; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.hp.hpl.jena.ontology.OntModel; +import com.hp.hpl.jena.rdf.model.Model; +import com.hp.hpl.jena.rdf.model.ModelFactory; + +@ComponentAnn(name = "efficient SPARQL fragment extractor", shortName = "sparqls", version = 0.1) +public class SparqlSimpleExtractor implements KnowledgeSource { + + @ConfigOption(name = "endpointURL", description = "URL of the SPARQL endpoint", required = true) + private String endpointURL = null; + private OntModel model = null; + @ConfigOption(name = "instances", description = "List of the instances to use", required = true) + private List<String> instances = null; + @ConfigOption(name = "filters", description = "List of the filters to use", required = true) + private List<String> filters = null; + @ConfigOption(name = "recursionDepth", description = "recursion depth", required = true) + private int recursionDepth = 0; + @ConfigOption(name = "defaultGraphURI", description = "default graph URI", required = true) + private String defaultGraphURIs=null; + private OWLOntology owlOntology; + + private static Logger log = LoggerFactory.getLogger(SparqlSimpleExtractor.class); + + public SparqlSimpleExtractor() { + model = ModelFactory.createOntologyModel(); + } + + /** + * @param args + * @throws ComponentInitException + */ + public static void main(String[] args) throws ComponentInitException { + SparqlSimpleExtractor extractor = new SparqlSimpleExtractor(); + // extractor.init(); + List<String> individuals = new LinkedList<String>(); + individuals.add("People"); + individuals.add("Animals"); + extractor.setInstances(individuals); + // System.out.println(extractor.createQuery()); + } + + @Override + public void init() throws ComponentInitException { + if (endpointURL == null) { + throw new ComponentInitException("Parameter endpoint URL is required"); + } + if (instances == null) { + throw new ComponentInitException("Parameter instances is required"); + } + if (recursionDepth == 0) { + throw new ComponentInitException( + "A value bigger than 0 is required for parameter recursionDepth"); + } + ABoxQueryGenerator aGenerator = new ABoxQueryGenerator(); + QueryExecutor executor = new QueryExecutor(); + String queryString; + for (int i = 0; i < recursionDepth - 1; i++) { + queryString=aGenerator.createQuery(instances, model, filters); + log.info("SPARQL: {}", queryString); + executor.executeQuery(queryString, endpointURL, model,defaultGraphURIs); + } + queryString = aGenerator.createLastQuery(instances, model, filters); + log.info("SPARQL: {}", queryString); + + executor.executeQuery(queryString, endpointURL, model, defaultGraphURIs); + TBoxQueryGenerator tGenerator = new TBoxQueryGenerator(); + queryString = tGenerator.createQuery(model, filters, instances); + executor.executeQuery(queryString, endpointURL, model,defaultGraphURIs); + JenaToOwlapiConverter converter = new JenaToOwlapiConverter(); + owlOntology=converter.convert(this.model); + } + + public String getEndpointURL() { + return endpointURL; + } + + public void setEndpointURL(String endpointURL) { + this.endpointURL = endpointURL; + } + + public Model getModel() { + return model; + } + + public void setModel(OntModel model) { + this.model = model; + } + + /** + * @return the filters + */ + public List<String> getFilters() { + return filters; + } + + /** + * @param filters + * the filters to set + */ + public void setFilters(List<String> filters) { + this.filters = filters; + } + + /** + * @return the instances + */ + public List<String> getInstances() { + return instances; + } + + /** + * @param instances the instances to set + */ + public void setInstances(List<String> instances) { + this.instances = instances; + } + + /** + * @return the recursionDepth + */ + public int getRecursionDepth() { + return recursionDepth; + } + + /** + * @param recursionDepth the recursionDepth to set + */ + public void setRecursionDepth(int recursionDepth) { + this.recursionDepth = recursionDepth; + } + + /** + * @return the defaultGraphURI + */ + public String getDefaultGraphURIs() { + return defaultGraphURIs; + } + + /** + * @param defaultGraphURI the defaultGraphURI to set + */ + public void setDefaultGraphURIs(String defaultGraphURI) { + this.defaultGraphURIs = defaultGraphURI; + } + + /** + * @return + */ + public OWLOntology getOWLOntology() { + return owlOntology; + } + +} Added: trunk/components-core/src/main/java/org/dllearner/kb/sparql/simple/TBoxQueryGenerator.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/kb/sparql/simple/TBoxQueryGenerator.java (rev 0) +++ trunk/components-core/src/main/java/org/dllearner/kb/sparql/simple/TBoxQueryGenerator.java 2012-03-23 14:53:07 UTC (rev 3617) @@ -0,0 +1,35 @@ +/** + * + */ +package org.dllearner.kb.sparql.simple; + +import java.util.List; + +import com.hp.hpl.jena.ontology.OntModel; + +/** + * @author didierc + * + */ +public class TBoxQueryGenerator { + public String createQuery(OntModel model, List<String> filters, List<String> individuals) { + StringBuilder builder = new StringBuilder("CONSTRUCT { ?example a ?class . } "); + builder.append("{ ?example a ?class . "); + builder.append("Filter ( ?example IN("); + for (String individual : individuals) { + builder.append("<"); + builder.append(individual); + builder.append(">"); + builder.append(", "); + } + builder.deleteCharAt(builder.length() - 2); + builder.append("))."); + if (filters != null) { + for (String filter : filters) { + builder.append(filter); + } + } + builder.append("}"); + return builder.toString(); + } +} Property changes on: trunk/components-core/src/main/java/org/dllearner/kb/sparql/simple/TBoxQueryGenerator.java ___________________________________________________________________ Added: svn:mime-type + text/plain This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |