From: <lor...@us...> - 2011-12-19 11:22:49
|
Revision: 3506 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3506&view=rev Author: lorenz_b Date: 2011-12-19 11:22:43 +0000 (Mon, 19 Dec 2011) Log Message: ----------- Prepared all to work on local models. Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/algorithms/DisjointClassesLearner.java trunk/components-core/src/main/java/org/dllearner/core/AbstractAxiomLearningAlgorithm.java trunk/components-core/src/main/java/org/dllearner/kb/SparqlEndpointKS.java trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java Added Paths: ----------- trunk/components-core/src/main/java/org/dllearner/kb/LocalModelBasedSparqlEndpointKS.java Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/DisjointClassesLearner.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/DisjointClassesLearner.java 2011-12-18 18:47:08 UTC (rev 3505) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/DisjointClassesLearner.java 2011-12-19 11:22:43 UTC (rev 3506) @@ -43,6 +43,8 @@ import org.dllearner.core.owl.Description; import org.dllearner.core.owl.DisjointClassesAxiom; import org.dllearner.core.owl.NamedClass; +import org.dllearner.kb.LocalModelBasedSparqlEndpointKS; +import org.dllearner.kb.OWLFile; import org.dllearner.kb.SparqlEndpointKS; import org.dllearner.kb.sparql.SPARQLTasks; import org.dllearner.kb.sparql.SparqlEndpoint; @@ -117,7 +119,7 @@ //TODO //at first get all existing classes in knowledgebase - allClasses = new SPARQLTasks(ks.getEndpoint()).getAllClasses(); + allClasses = getAllClasses(); allClasses.remove(classToDescribe); //get the subclasses @@ -128,9 +130,9 @@ } if(ks.supportsSPARQL_1_1()){ + runSPARQL1_0_Mode(); + } else { runSPARQL1_1_Mode(); - } else { - runSPARQL1_0_Mode(); } //get classes and how often they occur @@ -184,9 +186,9 @@ private void runSPARQL1_1_Mode(){ int limit = 1000; int offset = 0; - String queryTemplate = "SELECT ?type COUNT(?s) AS ?count WHERE {?s a ?type." + - "{SELECT ?s WHERE {?s a <%s>.} LIMIT %d OFFSET %d}" + - "}"; + String queryTemplate = "SELECT ?type (COUNT(?s) AS ?count) WHERE {?s a ?type." + + "{SELECT ?s WHERE {?s a <%s>.} LIMIT %d OFFSET %d} " + + "} GROUP BY ?type"; String query; Map<NamedClass, Integer> result = new HashMap<NamedClass, Integer>(); NamedClass cls; @@ -200,17 +202,20 @@ repeat = false; while(rs.hasNext()){ qs = rs.next(); - cls = new NamedClass(qs.getResource("type").getURI()); - int newCnt = qs.getLiteral("count").getInt(); - oldCnt = result.get(cls); - if(oldCnt == null){ - oldCnt = Integer.valueOf(newCnt); - } else { - oldCnt += newCnt; + if(qs.getResource("type") != null){ + cls = new NamedClass(qs.getResource("type").getURI()); + int newCnt = qs.getLiteral("count").getInt(); + oldCnt = result.get(cls); + if(oldCnt == null){ + oldCnt = Integer.valueOf(newCnt); + } else { + oldCnt += newCnt; + } + + result.put(cls, oldCnt); + repeat = true; } - result.put(cls, oldCnt); - repeat = true; } if(!result.isEmpty()){ currentlyBestEvaluatedDescriptions = buildEvaluatedClassDescriptions(result, allClasses); @@ -350,7 +355,8 @@ SortedSet<Description> mostGeneralClasses = reasoner.getClassHierarchy().getMostGeneralClasses(); } for(NamedClass cls : completeDisjointclasses){ - if(useClassPopularity && ks.supportsSPARQL_1_1()){ + if(useClassPopularity && ( + (ks instanceof SparqlEndpointKS && ((SparqlEndpointKS) ks).supportsSPARQL_1_1()) || !(ks instanceof SparqlEndpointKS))){ int popularity = reasoner.getIndividualsCount(cls); //we skip classes with no instances if(popularity == 0) continue; @@ -387,9 +393,11 @@ } public static void main(String[] args) throws Exception{ + LocalModelBasedSparqlEndpointKS ks = new LocalModelBasedSparqlEndpointKS(new URL("http://dl-learner.svn.sourceforge.net/viewvc/dl-learner/trunk/examples/swore/swore.rdf?revision=2217")); DisjointClassesLearner l = new DisjointClassesLearner(new SparqlEndpointKS(new SparqlEndpoint(new URL("http://dbpedia.aksw.org:8902/sparql"), Collections.singletonList("http://dbpedia.org"), Collections.<String>emptyList()))); - l.setClassToDescribe(new NamedClass("http://dbpedia.org/ontology/Band")); + l = new DisjointClassesLearner(ks); + l.setClassToDescribe(new NamedClass("http://ns.softwiki.de/req/CustomerRequirement")); l.init(); l.getReasoner().prepareSubsumptionHierarchy(); // System.out.println(l.getReasoner().getClassHierarchy().getSubClasses(new NamedClass("http://dbpedia.org/ontology/Athlete"), false));System.exit(0); Modified: trunk/components-core/src/main/java/org/dllearner/core/AbstractAxiomLearningAlgorithm.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/core/AbstractAxiomLearningAlgorithm.java 2011-12-18 18:47:08 UTC (rev 3505) +++ trunk/components-core/src/main/java/org/dllearner/core/AbstractAxiomLearningAlgorithm.java 2011-12-19 11:22:43 UTC (rev 3506) @@ -25,6 +25,7 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.Set; import java.util.SortedSet; import java.util.TreeSet; @@ -34,8 +35,12 @@ import org.dllearner.core.owl.Axiom; import org.dllearner.core.owl.ClassHierarchy; import org.dllearner.core.owl.Description; +import org.dllearner.core.owl.NamedClass; +import org.dllearner.kb.LocalModelBasedSparqlEndpointKS; import org.dllearner.kb.SparqlEndpointKS; import org.dllearner.kb.sparql.ExtendedQueryEngineHTTP; +import org.dllearner.kb.sparql.SPARQLTasks; +import org.dllearner.kb.sparql.SparqlEndpoint; import org.dllearner.learningproblems.AxiomScore; import org.dllearner.learningproblems.Heuristics; import org.dllearner.reasoning.SPARQLReasoner; @@ -44,6 +49,7 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import com.hp.hpl.jena.ontology.OntClass; import com.hp.hpl.jena.query.QueryExecution; import com.hp.hpl.jena.query.QueryExecutionFactory; import com.hp.hpl.jena.query.ResultSet; @@ -90,8 +96,6 @@ this.learningProblem = learningProblem; } - ExtendedQueryEngineHTTP queryExecution; - public int getMaxExecutionTimeInSeconds() { return maxExecutionTimeInSeconds; } @@ -132,7 +136,7 @@ public void init() throws ComponentInitException { ks.init(); if(reasoner == null){ - reasoner = new SPARQLReasoner(ks); + reasoner = new SPARQLReasoner((SparqlEndpointKS) ks); } } @@ -184,68 +188,72 @@ return returnList; } + protected Set<NamedClass> getAllClasses() { + if(ks.isRemote()){ + return new SPARQLTasks(((SparqlEndpointKS) ks).getEndpoint()).getAllClasses(); + } else { + Set<NamedClass> classes = new TreeSet<NamedClass>(); + for(OntClass cls : ((LocalModelBasedSparqlEndpointKS)ks).getModel().listClasses().toList()){ + if(!cls.isAnon()){ + classes.add(new NamedClass(cls.getURI())); + } + } + return classes; + } + + } + protected Model executeConstructQuery(String query) { logger.info("Sending query\n{} ...", query); - queryExecution = new ExtendedQueryEngineHTTP(ks.getEndpoint().getURL().toString(), - query); - queryExecution.setTimeout(maxExecutionTimeInSeconds * 1000); - queryExecution.setDefaultGraphURIs(ks.getEndpoint().getDefaultGraphURIs()); - queryExecution.setNamedGraphURIs(ks.getEndpoint().getNamedGraphURIs()); - - return queryExecution.execConstruct(); + if(ks.isRemote()){ + SparqlEndpoint endpoint = ((SparqlEndpointKS) ks).getEndpoint(); + ExtendedQueryEngineHTTP queryExecution = new ExtendedQueryEngineHTTP(endpoint.getURL().toString(), + query); + queryExecution.setTimeout(maxExecutionTimeInSeconds * 1000); + queryExecution.setDefaultGraphURIs(endpoint.getDefaultGraphURIs()); + queryExecution.setNamedGraphURIs(endpoint.getNamedGraphURIs()); + return queryExecution.execConstruct(); + } else { + QueryExecution qexec = QueryExecutionFactory.create(query, ((LocalModelBasedSparqlEndpointKS)ks).getModel()); + return qexec.execConstruct(); + } } protected ResultSet executeSelectQuery(String query) { logger.info("Sending query\n{} ...", query); - queryExecution = new ExtendedQueryEngineHTTP(ks.getEndpoint().getURL().toString(), - query); - queryExecution.setTimeout(maxExecutionTimeInSeconds * 1000); - queryExecution.setDefaultGraphURIs(ks.getEndpoint().getDefaultGraphURIs()); - queryExecution.setNamedGraphURIs(ks.getEndpoint().getNamedGraphURIs()); - -// ResultSet resultSet = null; -// try { -// resultSet = queryExecution.execSelect(); -// } catch (Exception e) { -// logger.error("Got a timeout during query execution.", e); -// resultSet = new CollectionResultSet(Collections.<String>emptyList(), Collections.<QuerySolution>emptyList()); -// } - ResultSet resultSet = queryExecution.execSelect(); - - return resultSet; + if(ks.isRemote()){ + SparqlEndpoint endpoint = ((SparqlEndpointKS) ks).getEndpoint(); + ExtendedQueryEngineHTTP queryExecution = new ExtendedQueryEngineHTTP(endpoint.getURL().toString(), + query); + queryExecution.setTimeout(maxExecutionTimeInSeconds * 1000); + queryExecution.setDefaultGraphURIs(endpoint.getDefaultGraphURIs()); + queryExecution.setNamedGraphURIs(endpoint.getNamedGraphURIs()); + return queryExecution.execSelect(); + } else { + return executeSelectQuery(query, ((LocalModelBasedSparqlEndpointKS)ks).getModel()); + } } protected ResultSet executeSelectQuery(String query, Model model) { logger.info("Sending query\n{} ...", query); QueryExecution qexec = QueryExecutionFactory.create(query, model); ResultSet rs = qexec.execSelect();; - return rs; } - protected void close() { - queryExecution.close(); - } - protected boolean executeAskQuery(String query){ logger.info("Sending query\n{} ...", query); - QueryEngineHTTP queryExecution = new QueryEngineHTTP(ks.getEndpoint().getURL().toString(), query); - for (String dgu : ks.getEndpoint().getDefaultGraphURIs()) { - queryExecution.addDefaultGraph(dgu); + if(ks.isRemote()){ + SparqlEndpoint endpoint = ((SparqlEndpointKS) ks).getEndpoint(); + QueryEngineHTTP queryExecution = new QueryEngineHTTP(endpoint.getURL().toString(), query); + queryExecution.setDefaultGraphURIs(endpoint.getDefaultGraphURIs()); + queryExecution.setNamedGraphURIs(endpoint.getNamedGraphURIs()); + return queryExecution.execAsk(); + } else { + QueryExecution queryExecution = QueryExecutionFactory.create(query, ((LocalModelBasedSparqlEndpointKS)ks).getModel()); + return queryExecution.execAsk(); } - for (String ngu : ks.getEndpoint().getNamedGraphURIs()) { - queryExecution.addNamedGraph(ngu); - } -// ResultSet rs = queryExecution.execSelect(); -// boolean result = false; -// QuerySolution qs; -// if(rs.hasNext()){ -// qs = rs.next(); -// result = qs.get(qs.varNames().next()).asLiteral().getBoolean(); -// } - boolean result = queryExecution.execAsk(); - return result; } protected <K, V extends Comparable<V>> List<Entry<K, V>> sortByValues(Map<K, V> map){ @@ -269,6 +277,7 @@ protected List<Entry<Description, Integer>> sortByValues(Map<Description, Integer> map, final boolean useHierachy){ List<Entry<Description, Integer>> entries = new ArrayList<Entry<Description, Integer>>(map.entrySet()); final ClassHierarchy hierarchy = reasoner.getClassHierarchy(); + Collections.sort(entries, new Comparator<Entry<Description, Integer>>() { @Override Added: trunk/components-core/src/main/java/org/dllearner/kb/LocalModelBasedSparqlEndpointKS.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/kb/LocalModelBasedSparqlEndpointKS.java (rev 0) +++ trunk/components-core/src/main/java/org/dllearner/kb/LocalModelBasedSparqlEndpointKS.java 2011-12-19 11:22:43 UTC (rev 3506) @@ -0,0 +1,60 @@ +package org.dllearner.kb; + +import java.io.InputStream; +import java.net.MalformedURLException; +import java.net.URL; + +import org.dllearner.core.ComponentInitException; + +import com.hp.hpl.jena.ontology.OntModel; +import com.hp.hpl.jena.ontology.OntModelSpec; +import com.hp.hpl.jena.rdf.model.Model; +import com.hp.hpl.jena.rdf.model.ModelFactory; +import com.hp.hpl.jena.util.FileManager; + +public class LocalModelBasedSparqlEndpointKS extends SparqlEndpointKS { + + private OntModel model; + + public LocalModelBasedSparqlEndpointKS(OntModel model) { + this.model = model; + } + + public LocalModelBasedSparqlEndpointKS(String ontologyURL) throws MalformedURLException { + this(new URL(ontologyURL)); + } + + public LocalModelBasedSparqlEndpointKS(URL ontologyURL) { + Model baseModel = ModelFactory.createDefaultModel(); + // use the FileManager to find the input file + InputStream in = FileManager.get().open(ontologyURL.toString()); + if (in == null) { + throw new IllegalArgumentException( + "File: " + ontologyURL + " not found"); + } + // read the RDF/XML file + baseModel.read(in, null); + + model = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM, baseModel); + } + + @Override + public void init() throws ComponentInitException { + + } + + public OntModel getModel() { + return model; + } + + @Override + public boolean isRemote() { + return false; + } + + @Override + public boolean supportsSPARQL_1_1() { + return true; + } + +} Modified: trunk/components-core/src/main/java/org/dllearner/kb/SparqlEndpointKS.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/kb/SparqlEndpointKS.java 2011-12-18 18:47:08 UTC (rev 3505) +++ trunk/components-core/src/main/java/org/dllearner/kb/SparqlEndpointKS.java 2011-12-19 11:22:43 UTC (rev 3506) @@ -45,6 +45,7 @@ private SparqlEndpoint endpoint; private boolean supportsSPARQL_1_1 = false; + private boolean isRemote = true; // TODO: turn those into config options @@ -84,6 +85,10 @@ public void setUrl(URL url) { this.url = url; } + + public boolean isRemote() { + return isRemote; + } public List<String> getDefaultGraphURIs() { return defaultGraphURIs; Modified: trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java 2011-12-18 18:47:08 UTC (rev 3505) +++ trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java 2011-12-19 11:22:43 UTC (rev 3506) @@ -53,6 +53,7 @@ import org.dllearner.core.owl.ObjectProperty; import org.dllearner.core.owl.ObjectPropertyHierarchy; import org.dllearner.core.owl.Thing; +import org.dllearner.kb.LocalModelBasedSparqlEndpointKS; import org.dllearner.kb.SparqlEndpointKS; import org.dllearner.kb.sparql.ExtractionDBCache; import org.dllearner.kb.sparql.SPARQLTasks; @@ -64,6 +65,9 @@ import org.slf4j.LoggerFactory; import com.clarkparsia.owlapiv3.XSD; +import com.hp.hpl.jena.ontology.OntClass; +import com.hp.hpl.jena.ontology.OntModel; +import com.hp.hpl.jena.query.QueryExecution; import com.hp.hpl.jena.query.QuerySolution; import com.hp.hpl.jena.query.ResultSet; import com.hp.hpl.jena.rdf.model.Model; @@ -87,6 +91,7 @@ private SparqlEndpointKS ks; private ClassHierarchy hierarchy; + private OntModel model; public SPARQLReasoner(SparqlEndpointKS ks) { @@ -97,6 +102,10 @@ } } + public SPARQLReasoner(OntModel model) { + this.model = model; + } + public final ClassHierarchy prepareSubsumptionHierarchy() { logger.info("Preparing subsumption hierarchy ..."); long startTime = System.currentTimeMillis(); @@ -117,7 +126,18 @@ subsumptionHierarchyDown.put(Nothing.instance, new TreeSet<Description>(conceptComparator)); // ... and named classes - Set<NamedClass> atomicConcepts = new SPARQLTasks(ks.getEndpoint()).getAllClasses(); + Set<NamedClass> atomicConcepts; + if(ks.isRemote()){ + atomicConcepts = new SPARQLTasks(ks.getEndpoint()).getAllClasses(); + } else { + atomicConcepts = new TreeSet<NamedClass>(); + for(OntClass cls : ((LocalModelBasedSparqlEndpointKS)ks).getModel().listClasses().toList()){ + if(!cls.isAnon()){ + atomicConcepts.add(new NamedClass(cls.getURI())); + } + } + } + for (NamedClass atom : atomicConcepts) { tmp = getSubClasses(atom); // quality control: we explicitly check that no reasoner implementation returns null here @@ -571,7 +591,7 @@ } public int getIndividualsCount(NamedClass nc){ - String query = String.format("SELECT COUNT(?s) WHERE {" + + String query = String.format("SELECT (COUNT(?s) AS ?cnt) WHERE {" + "?s a <%s>." + "}", nc.getURI()); @@ -859,20 +879,26 @@ private ResultSet executeSelectQuery(String query){ logger.info("Sending query \n {}", query); - ResultSet resultset = null; - if(useCache){ - resultset = SparqlQuery.convertJSONtoResultSet(cache.executeSelectQuery(ks.getEndpoint(), query)); + ResultSet rs = null; + if(ks.isRemote()){ + if(useCache){ + rs = SparqlQuery.convertJSONtoResultSet(cache.executeSelectQuery(ks.getEndpoint(), query)); + } else { + QueryEngineHTTP queryExecution = new QueryEngineHTTP(ks.getEndpoint().getURL().toString(), query); + for (String dgu : ks.getEndpoint().getDefaultGraphURIs()) { + queryExecution.addDefaultGraph(dgu); + } + for (String ngu : ks.getEndpoint().getNamedGraphURIs()) { + queryExecution.addNamedGraph(ngu); + } + rs = queryExecution.execSelect(); + } } else { - QueryEngineHTTP queryExecution = new QueryEngineHTTP(ks.getEndpoint().getURL().toString(), query); - for (String dgu : ks.getEndpoint().getDefaultGraphURIs()) { - queryExecution.addDefaultGraph(dgu); - } - for (String ngu : ks.getEndpoint().getNamedGraphURIs()) { - queryExecution.addNamedGraph(ngu); - } - resultset = queryExecution.execSelect(); + QueryExecution qExec = com.hp.hpl.jena.query.QueryExecutionFactory.create(query, ((LocalModelBasedSparqlEndpointKS)ks).getModel()); + rs = qExec.execSelect(); + } - return resultset; + return rs; } /** @@ -888,30 +914,26 @@ } private boolean executeAskQuery(String query){ - QueryEngineHTTP queryExecution = new QueryEngineHTTP(ks.getEndpoint().getURL().toString(), query); - for (String dgu : ks.getEndpoint().getDefaultGraphURIs()) { - queryExecution.addDefaultGraph(dgu); + boolean ret; + if(ks.isRemote()){ + QueryEngineHTTP queryExecution = new QueryEngineHTTP(ks.getEndpoint().getURL().toString(), query); + for (String dgu : ks.getEndpoint().getDefaultGraphURIs()) { + queryExecution.addDefaultGraph(dgu); + } + for (String ngu : ks.getEndpoint().getNamedGraphURIs()) { + queryExecution.addNamedGraph(ngu); + } + ret = queryExecution.execAsk(); + + } else { + QueryExecution qExec = com.hp.hpl.jena.query.QueryExecutionFactory.create(query, ((LocalModelBasedSparqlEndpointKS)ks).getModel()); + ret = qExec.execAsk(); } - for (String ngu : ks.getEndpoint().getNamedGraphURIs()) { - queryExecution.addNamedGraph(ngu); - } - boolean ret = queryExecution.execAsk(); + return ret; } - private Model executeConstructQuery(String query){ - QueryEngineHTTP queryExecution = new QueryEngineHTTP(ks.getEndpoint().getURL().toString(), query); - for (String dgu : ks.getEndpoint().getDefaultGraphURIs()) { - queryExecution.addDefaultGraph(dgu); - } - for (String ngu : ks.getEndpoint().getNamedGraphURIs()) { - queryExecution.addNamedGraph(ngu); - } - Model ret = queryExecution.execConstruct(); - return ret; - } - public static void main(String[] args) throws Exception{ // QueryEngineHTTP e = new QueryEngineHTTP("http://bibleontology.com/sparql/index.jsp", // "SELECT DISTINCT ?type WHERE {?s a ?type) LIMIT 10"); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |