From: <ku...@us...> - 2012-04-24 00:48:32
|
Revision: 3656 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3656&view=rev Author: kurzum Date: 2012-04-24 00:48:26 +0000 (Tue, 24 Apr 2012) Log Message: ----------- some fixes Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/kb/sparql/simple/ABoxQueryGenerator.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/SparqlSimpleExtractor.java trunk/components-core/src/main/java/org/dllearner/kb/sparql/simple/TBoxQueryGenerator.java trunk/examples/thanh/AristotlePosNeg.conf Modified: 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 2012-04-23 22:19:40 UTC (rev 3655) +++ trunk/components-core/src/main/java/org/dllearner/kb/sparql/simple/ABoxQueryGenerator.java 2012-04-24 00:48:26 UTC (rev 3656) @@ -15,103 +15,99 @@ * @author didierc */ public class ABoxQueryGenerator { - public String createQuery(List<String> individuals, OntModel model, List<String> filters) { + + public String createQuery(Set<String> individuals, String aboxfilter) { Monitor monABoxQueryGeneration = MonitorFactory.getTimeMonitor("ABox query generator").start(); StringBuilder builder = new StringBuilder(); - builder.append("CONSTRUCT {?s ?p ?o} "); - builder.append("{ ?s ?p ?o ."); - Set<String> curIndividuals; - if (model.isEmpty()) { - curIndividuals = new HashSet<String>(individuals); - } else { - curIndividuals = this.difference2(individuals, model); + builder.append("CONSTRUCT {?s ?p ?o } "); + builder.append("{ ?s ?p ?o . "); + builder.append(makeInFilter("?s", individuals)); + if (aboxfilter != null) { + builder.append(aboxfilter); } - 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("}"); monABoxQueryGeneration.stop(); return builder.toString(); } - public String createLastQuery(List<String> individuals, OntModel model, List<String> filters) { - Monitor monABoxQueryGeneration = MonitorFactory.getTimeMonitor("ABox query generator") - .start(); + public static StringBuilder makeInFilter(String var, Set<String> uris) { StringBuilder builder = new StringBuilder(); - if (false) { - builder.append("CONSTRUCT {?s ?p ?o . ?o a ?class} "); - builder.append("{ ?s ?p ?o ."); - builder.append("?o a ?class"); - } else { - builder.append("CONSTRUCT {?s ?p ?o } "); - builder.append("{ ?s ?p ?o . "); - } - - Set<String> curIndividuals; - if (model.isEmpty()) { - curIndividuals = new HashSet<String>(individuals); - } else { - curIndividuals = this.difference2(individuals, model); - } - builder.append(" FILTER ( ?s IN( "); - for (String individual : curIndividuals) { + builder.append(" FILTER (" + var + " IN( "); + for (String uri : uris) { builder.append("<"); - builder.append(individual); + builder.append(uri); 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("}"); - monABoxQueryGeneration.stop(); - return builder.toString(); + builder.append(")) . "); + return builder; } - public Set<String> difference2 - (List<String> a, OntModel model) { - Set<String> inds = new HashSet<String>(a); - Set<String> result = new HashSet<String>(); - for (ExtendedIterator<Individual> it = model.listIndividuals(); it.hasNext(); ) { - String individual = it.next().getURI(); - if (!inds.contains(individual)) { - result.add(individual); - } - } - return result; + /** + * + * + * @param oldIndividuals + * @param model + * @return + */ + + + /*public String createLastQuery(List<String> individuals, OntModel model, List<String> filters) { + Monitor monABoxQueryGeneration = MonitorFactory.getTimeMonitor("ABox query generator") + .start(); + StringBuilder builder = new StringBuilder(); + if (false) { + builder.append("CONSTRUCT {?s ?p ?o . ?o a ?class} "); + builder.append("{ ?s ?p ?o ."); + builder.append("?o a ?class"); + } else { + builder.append("CONSTRUCT {?s ?p ?o } "); + builder.append("{ ?s ?p ?o . "); } - /*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()); + Set<String> curIndividuals; + if (model.isEmpty()) { + curIndividuals = new HashSet<String>(individuals); + } else { + curIndividuals = this.difference2(individuals, 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 result; } + builder.append("}"); + monABoxQueryGeneration.stop(); + return builder.toString(); +} */ - public List<String> difference - (List<String> a, List<String> b) { - ArrayList<String> result = new ArrayList<String>(b); - result.removeAll(a); - return result; - } */ + + /*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; + } */ } Modified: 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 2012-04-23 22:19:40 UTC (rev 3655) +++ trunk/components-core/src/main/java/org/dllearner/kb/sparql/simple/QueryExecutor.java 2012-04-24 00:48:26 UTC (rev 3656) @@ -3,16 +3,13 @@ */ package org.dllearner.kb.sparql.simple; +import com.hp.hpl.jena.query.*; import com.jamonapi.Monitor; import com.jamonapi.MonitorFactory; 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 @@ -21,23 +18,26 @@ private static Logger log = LoggerFactory.getLogger(QueryExecutor.class); - public OntModel executeQuery(String queryString, String endpoint, OntModel model) { - Monitor monQueryingTotal = MonitorFactory.start("Query time total").start(); - Query query = QueryFactory.create(queryString); - log.debug("Jena Query: ", query); - QueryExecution qExec = QueryExecutionFactory.sparqlService(endpoint, query); - qExec.execConstruct(model); - monQueryingTotal.stop(); - return model; - } + public OntModel executeQuery(String queryString, String endpoint, OntModel model, String defaultGraphURI) { Monitor monQueryingTotal = MonitorFactory.start("Query time total").start(); + try{ Query query = QueryFactory.create(queryString); log.debug("Jena Query: ", query); - QueryExecution qExec = QueryExecutionFactory.sparqlService(endpoint, query, defaultGraphURI); + QueryExecution qExec; + if (defaultGraphURI == null) { + qExec = QueryExecutionFactory.sparqlService(endpoint, query); + + } else { + qExec = QueryExecutionFactory.sparqlService(endpoint, query, defaultGraphURI); + + } log.debug("Qexec: {}", qExec); qExec.execConstruct(model); + }catch (QueryParseException e ){ + log.warn("Query failed (skipping):\n" + queryString, e); + } monQueryingTotal.stop(); return model; } 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-04-23 22:19:40 UTC (rev 3655) +++ trunk/components-core/src/main/java/org/dllearner/kb/sparql/simple/SparqlSimpleExtractor.java 2012-04-24 00:48:26 UTC (rev 3656) @@ -1,27 +1,21 @@ package org.dllearner.kb.sparql.simple; -import java.io.File; -import java.util.ArrayList; -import java.util.LinkedList; -import java.util.List; -import java.util.Set; - +import com.hp.hpl.jena.ontology.OntClass; +import com.hp.hpl.jena.ontology.OntModel; +import com.hp.hpl.jena.query.QueryParseException; +import com.hp.hpl.jena.rdf.model.*; +import com.jamonapi.Monitor; +import com.jamonapi.MonitorFactory; import org.dllearner.core.ComponentAnn; import org.dllearner.core.ComponentInitException; import org.dllearner.core.KnowledgeSource; import org.dllearner.core.config.ConfigOption; import org.dllearner.utilities.JamonMonitorLogger; -import org.dllearner.utilities.experiments.Jamon; import org.semanticweb.owlapi.model.OWLOntology; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.hp.hpl.jena.ontology.OntClass; -import com.hp.hpl.jena.ontology.OntModel; -import com.hp.hpl.jena.rdf.model.Model; -import com.hp.hpl.jena.rdf.model.ModelFactory; -import com.jamonapi.Monitor; -import com.jamonapi.MonitorFactory; +import java.util.*; @ComponentAnn(name = "efficient SPARQL fragment extractor", shortName = "sparqls", version = 0.1) public class SparqlSimpleExtractor implements KnowledgeSource { @@ -31,9 +25,8 @@ 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 = "aboxfilter", description = "Filter for the tbox, can use variable ?s, ?p amd ?o", required = false) + private String aboxfilter = null; @ConfigOption(name = "tboxfilter", description = "Filter for the tbox, can use variable ?example and ?class", required = false) private String tboxfilter = null; @@ -83,8 +76,33 @@ // System.out.println(extractor.createQuery()); } + public Set<String> difference(Set<String> alreadyQueriedIndividuals, OntModel model) { + Set<String> candidates = new HashSet<String>(); + Set<String> result = new HashSet<String>(); + for (ResIterator it = model.listSubjects(); it.hasNext(); ) { + candidates.add(it.next().getURI()); + } + for (NodeIterator it = model.listObjects(); it.hasNext(); ) { + RDFNode cur = it.next(); + if (cur.isURIResource() && !cur.isAnon()) { + candidates.add(((Resource) cur).getURI()); + } + } + + for (String candidate : candidates) { + if (!alreadyQueriedIndividuals.contains(candidate)) { + System.out.println(candidate); + result.add(candidate); + } + } + + return result; + } + + @Override public void init() throws ComponentInitException { + if (endpointURL == null) { throw new ComponentInitException( "Parameter endpoint URL is required"); @@ -111,32 +129,43 @@ Monitor monQueryingABox; QueryExecutor executor = new QueryExecutor(); String queryString; + Set<String> instancesSet = new HashSet<String>(instances); + Set<String> alreadyQueried = new HashSet<String>(); if (sparqlQuery == null) { ABoxQueryGenerator aGenerator = new ABoxQueryGenerator(); - for (int i = 0; i < recursionDepth - 1; i++) { + for (int i = 0; i < recursionDepth; i++) { + if (instancesSet.isEmpty()) { + log.warn("no new instances found more recursions (recursion " + i + ") " + instancesSet.size() + " new instances"); - queryString = aGenerator.createQuery(instances, model, filters); + } + + log.info("processing (recursion " + i + ") " + instancesSet.size() + " new instances"); + queryString = aGenerator.createQuery(instancesSet, aboxfilter); log.debug("SPARQL: {}", queryString); monQueryingABox = MonitorFactory.start("ABox query time"); - executor.executeQuery(queryString, endpointURL, model, - defaultGraphURI); + executor.executeQuery(queryString, endpointURL, model, defaultGraphURI); monQueryingABox.stop(); + + alreadyQueried.addAll(instancesSet); + instancesSet = difference(alreadyQueried, model); + + } - queryString = aGenerator.createLastQuery(instances, model, filters); - log.debug("SPARQL: {}", queryString); + //queryString = aGenerator.createLastQuery(instances, model, filters); + //log.debug("SPARQL: {}", queryString); - monQueryingABox = MonitorFactory.start("ABox query time"); - Monitor monQueryingABox2 = MonitorFactory.start("ABox query time last query"); - executor.executeQuery(queryString, endpointURL, model, defaultGraphURI); - monQueryingABox.stop(); - monQueryingABox2.stop(); + //monQueryingABox = MonitorFactory.start("ABox query time"); + //Monitor monQueryingABox2 = MonitorFactory.start("ABox query time last query"); + //executor.executeQuery(queryString, endpointURL, model, defaultGraphURI); + //monQueryingABox.stop(); + //monQueryingABox2.stop(); } else { monQueryingABox = MonitorFactory.getTimeMonitor("ABox query time").start(); - executor.executeQuery(sparqlQuery, endpointURL, model); + executor.executeQuery(sparqlQuery, endpointURL, model, null); monQueryingABox.stop(); } @@ -144,7 +173,7 @@ TBoxQueryGenerator tGenerator = new TBoxQueryGenerator(); //TODO check if all instances are queried. model.listIndividuals().toSet() - queryString = tGenerator.createQuery(model, tboxfilter, instances); + queryString = tGenerator.createQuery(alreadyQueried, tboxfilter); Monitor monQueryingTBox = MonitorFactory.start("TBox query time"); @@ -196,18 +225,12 @@ this.model = model; } - /** - * @return the filters - */ - public List<String> getFilters() { - return filters; + public String getAboxfilter() { + return aboxfilter; } - /** - * @param filters the filters to set - */ - public void setFilters(List<String> filters) { - this.filters = filters; + public void setAboxfilter(String aboxfilter) { + this.aboxfilter = aboxfilter; } /** Modified: 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 2012-04-23 22:19:40 UTC (rev 3655) +++ trunk/components-core/src/main/java/org/dllearner/kb/sparql/simple/TBoxQueryGenerator.java 2012-04-24 00:48:26 UTC (rev 3656) @@ -4,7 +4,9 @@ package org.dllearner.kb.sparql.simple; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; +import java.util.Set; import com.hp.hpl.jena.ontology.OntModel; import com.hp.hpl.jena.rdf.model.ModelFactory; @@ -15,8 +17,7 @@ * @author didierc */ public class TBoxQueryGenerator { - public String createQuery(OntModel model, String filter, - List<String> individuals) { + public String createQuery(Set<String> individuals, String filter) { Monitor monTquery = MonitorFactory.getTimeMonitor("TBox query generator") .start(); StringBuilder builder = new StringBuilder( @@ -42,7 +43,7 @@ public static void main(String... args) { TBoxQueryGenerator generator = new TBoxQueryGenerator(); OntModel model = ModelFactory.createOntologyModel(); - List<String> individuals = new ArrayList<String>(); + Set<String> individuals = new HashSet<String>(); individuals.add("http://dbpedia.org/resource/JB_Carlson"); @@ -1046,10 +1047,10 @@ individuals.add("http://dbpedia.org/resource/Percy_Jackson"); individuals.add("http://dbpedia.org/resource/Glynis_Barber"); - String queryString = generator.createQuery(model, null, individuals); + String queryString = generator.createQuery(individuals, null); System.out.println(queryString); QueryExecutor executor = new QueryExecutor(); - executor.executeQuery(queryString, "http://live.dbpedia.org/sparql", model); + executor.executeQuery(queryString, "http://live.dbpedia.org/sparql", model, null); model.write(System.out); } } Modified: trunk/examples/thanh/AristotlePosNeg.conf =================================================================== --- trunk/examples/thanh/AristotlePosNeg.conf 2012-04-23 22:19:40 UTC (rev 3655) +++ trunk/examples/thanh/AristotlePosNeg.conf 2012-04-24 00:48:26 UTC (rev 3656) @@ -13,10 +13,13 @@ sparql.type = "sparqls" sparql.endpointURL = "http://live.dbpedia.org/sparql" sparql.defaultGraphURI = "http://dbpedia.org" -sparql.recursionDepth = 1 +sparql.recursionDepth = 2 sparql.ontologySchemaUrls = {"http://downloads.dbpedia.org/3.6/dbpedia_3.6.owl" } +sparql.aboxfilter = "FILTER ( !isLiteral(?o) ) " +// && regex(str(?o), '^http://dbpedia.org/resource/') && ! regex(str(?o), '^http://dbpedia.org/resource/Category') && ! regex(str(?o), '^http://dbpedia.org/resource/Template') ) . " +//|| regex(str(?p), '^http://dbpedia.org/property/') )) " sparql.tboxfilter = "FILTER ( regex(str(?class), '^http://dbpedia.org/ontology/') ) . " -//sparql.tboxfilter = "FILTER ( regex(str(?class), LIKE <http://dbpedia.org/ontology/%> ) . " +//sparql.tboxfilter = "FILTER ( ?class LIKE <http://dbpedia.org/ontology/%> ) . " sparql.instances = { "http://dbpedia.org/resource/Democritus", @@ -39,6 +42,7 @@ "http://dbpedia.org/resource/Pythagoras", "http://dbpedia.org/resource/Philolaus" } + lp.negativeExamples = { "http://dbpedia.org/resource/Democritus", "http://dbpedia.org/resource/Zeno_of_Elea", This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |