From: <ku...@us...> - 2008-05-26 12:02:42
|
Revision: 928 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=928&view=rev Author: kurzum Date: 2008-05-26 05:02:10 -0700 (Mon, 26 May 2008) Log Message: ----------- moved sparqltasks to sparql Modified Paths: -------------- trunk/src/dl-learner/org/dllearner/scripts/SKOS7030.java trunk/src/dl-learner/org/dllearner/test/SparqlEndpointTest.java trunk/src/dl-learner/org/dllearner/utilities/examples/AutomaticPositiveExampleFinderSPARQL.java Added Paths: ----------- trunk/src/dl-learner/org/dllearner/kb/sparql/SPARQLTasks.java trunk/src/dl-learner/org/dllearner/utilities/examples/AutomaticNegativeExampleFinderSPARQL.java Removed Paths: ------------- trunk/src/dl-learner/org/dllearner/utilities/examples/AutomaticNegativeExampleFinderSPARQL.java trunk/src/dl-learner/org/dllearner/utilities/examples/SPARQLTasks.java Copied: trunk/src/dl-learner/org/dllearner/kb/sparql/SPARQLTasks.java (from rev 927, trunk/src/dl-learner/org/dllearner/utilities/examples/SPARQLTasks.java) =================================================================== --- trunk/src/dl-learner/org/dllearner/kb/sparql/SPARQLTasks.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/kb/sparql/SPARQLTasks.java 2008-05-26 12:02:10 UTC (rev 928) @@ -0,0 +1,273 @@ +package org.dllearner.kb.sparql; + +import java.util.List; +import java.util.SortedSet; +import java.util.TreeSet; + +import org.apache.log4j.Logger; + +import com.hp.hpl.jena.query.ResultSet; +import com.hp.hpl.jena.query.ResultSetFormatter; +import com.hp.hpl.jena.sparql.core.ResultBinding; + +public class SPARQLTasks { + + //CHECK + @SuppressWarnings("unused") + private static Logger logger = Logger + .getLogger(SPARQLTasks.class); + private Cache c; + private SparqlEndpoint se; + + public SPARQLTasks(Cache c, SparqlEndpoint se) { + super(); + this.c = c; + this.se = se; + } + + public SPARQLTasks( SparqlEndpoint se) { + super(); + this.c = null; + this.se = se; + } + + + + + /** + * QUALITY: doesn't seem optimal, check! + * get all superclasses up to a certain depth + * 1 means direct superclasses + * depth + * @param superClasses + * @param depth + * @return + */ + public SortedSet<String> getSuperClasses(String oneClass, int depth) { + SortedSet<String> superClasses = new TreeSet<String>(); + superClasses.add(oneClass); + SortedSet<String> ret = new TreeSet<String>(); + SortedSet<String> tmpset = new TreeSet<String>(); + //ret.addAll(superClasses); + //logger.debug(superClasses); + + + String SPARQLquery = ""; + for (; depth != 0 ; depth--) { + for (String oneSuperClass : superClasses) { + + //tmp = oneSuperClass.replace("\"", ""); + SPARQLquery = "SELECT * WHERE { \n" + "<" + oneSuperClass + "> " + + "<http://www.w3.org/2000/01/rdf-schema#subClassOf> ?superclass. \n" + + "}"; + + tmpset.addAll(queryAsSet(SPARQLquery, "superclass")); + + } + ret.addAll(tmpset); + //logger.debug(ret); + superClasses.clear(); + superClasses.addAll(tmpset); + tmpset.clear(); + } + //logger.debug(concept); + //logger.debug(query); + return ret; + } + + + + + /** + * QUALITY: buggy because role doesn't work sometimes + * get subject with fixed role and object + * @param role + * @param object + * @param resultLimit + * @return + */ + public SortedSet<String> retrieveDISTINCTSubjectsForRoleAndObject(String role, String object,int resultLimit) { + String SPARQLquery = + "SELECT DISTINCT * WHERE { \n " + + "?subject " + + "<"+role+"> " + + "<" + object + "> \n" + + "} "+limit(resultLimit); + + return queryAsSet(SPARQLquery, "subject"); + } + + public SortedSet<String> retrieveObjectsForSubjectAndRole(String subject, String role, int resultLimit) { + String SPARQLquery = + "SELECT DISTINCT * WHERE { \n " + + "<" +subject+ "> "+ + "<"+role+"> " + + " ?object \n" + + "} LIMIT "+resultLimit; + + return queryAsSet(SPARQLquery, "object"); + } + + /** + * all instances for a SKOS concept + * @param SKOSconcept + * @param resultLimit + * @return + */ + public SortedSet<String> retrieveInstancesForSKOSConcept(String SKOSconcept,int resultLimit) { + return queryPatternAsSet("?subject", "?predicate", "<"+SKOSconcept+">", "subject", resultLimit); + //return retrieveDISTINCTSubjectsForRoleAndObject("http://www.w3.org/2004/02/skos/core#subject", + } + + + + /** + * get all instances for a concept + * @param conceptKBSyntax + * @param sparqlResultLimit + * @return + */ + public SortedSet<String> retrieveInstancesForConcept (String conceptKBSyntax,int sparqlResultLimit) { + + String SPARQLquery = ""; + try{ + SPARQLquery = SparqlQueryDescriptionConvertVisitor + .getSparqlQuery(conceptKBSyntax,sparqlResultLimit); + }catch (Exception e) {e.printStackTrace();} + return queryAsSet(SPARQLquery, "subject"); + } + + + + + /** + * get all direct Classes of an instance + * @param instance + * @param resultLimit + * @return + */ + public SortedSet<String> getClassesForInstance(String instance, int resultLimit) { + + String SPARQLquery = "SELECT ?subject WHERE { \n " + + "<" + instance + ">"+ + " a " + + "?subject " + + "\n" + + "} "+limit(resultLimit); + + return queryAsSet(SPARQLquery, "subject"); + } + + + + public SortedSet<String> getDomain(String role,int resultLimit){ + + String SPARQLquery = "" + + "SELECT DISTINCT ?domain " + + "WHERE { \n" + + "?domain <" + role + "> " + " ?o. \n" + + "?domain a []\n." + + "FILTER (!isLiteral(?domain))." + + "}\n" + limit(resultLimit); + + return queryAsSet(SPARQLquery, "domain"); + + + } + + + public SortedSet<String> getRange(String role,int resultLimit){ + + String SPARQLquery = "" + + "SELECT DISTINCT ?range " + + "WHERE { \n" + + "?s <" + role + "> " + " ?range. \n" + + "?range a [].\n" + + "FILTER (!isLiteral(?range))." + + "}\n" + limit(resultLimit); + + return queryAsSet(SPARQLquery, "range"); + + } + + + + /** + * query a pattern with a standard SPARQL query + * usage (?subject, ?predicate, <http:something> , subject ) + * @param subject + * @param predicate + * @param object + * @param var + * @return + */ + public SortedSet<String> queryPatternAsSet(String subject, String predicate, String object, String var, int resultLimit){ + String SPARQLquery = "SELECT ?subject WHERE { \n " + + " " + subject + + " " + predicate + + " " + object + + " \n" + + "} "+limit(resultLimit); + return queryAsSet( SPARQLquery, var); + } + + + /** + * little higher level, executes query ,returns all resources for a variable + * @param SPARQLquery + * @param var + * @return + */ + public SortedSet<String> queryAsSet(String SPARQLquery, String var){ + ResultSet rs = null; + try { + String JSON = query(SPARQLquery); + rs = SparqlQuery.JSONtoResultSet(JSON); + + } catch (Exception e) { + e.printStackTrace(); + } + return getStringListForVariable(rs,var); + } + + + /** + * lowlevel, executes query returns JSON + * @param SPARQLquery + * @return + */ + public String query(String SPARQLquery){ + if(c==null){ + SparqlQuery sq = new SparqlQuery(SPARQLquery,se); + sq.extraDebugInfo+=se.getURL(); + sq.send(); + String JSON = sq.getResult(); + return JSON; + }else{ + return c.executeSparqlQuery(new SparqlQuery(SPARQLquery,se)); + } + + } + + private String limit(int resultLimit){ + if(resultLimit>0)return " LIMIT "+resultLimit; + return ""; + } + + + public static SortedSet<String> getStringListForVariable(ResultSet rs, String var){ + SortedSet<String> result = new TreeSet<String>(); + + //String s=ResultSetFormatter.asXMLString(this.rs); + @SuppressWarnings("unchecked") + List<ResultBinding> l = ResultSetFormatter.toList(rs); + + for (ResultBinding resultBinding : l) { + result.add(resultBinding.get(var).toString()); + } + + return result; + + } + +} Modified: trunk/src/dl-learner/org/dllearner/scripts/SKOS7030.java =================================================================== --- trunk/src/dl-learner/org/dllearner/scripts/SKOS7030.java 2008-05-26 10:37:56 UTC (rev 927) +++ trunk/src/dl-learner/org/dllearner/scripts/SKOS7030.java 2008-05-26 12:02:10 UTC (rev 928) @@ -20,6 +20,7 @@ import org.dllearner.core.ReasoningService; import org.dllearner.core.owl.Description; import org.dllearner.kb.sparql.Cache; +import org.dllearner.kb.sparql.SPARQLTasks; import org.dllearner.kb.sparql.SparqlEndpoint; import org.dllearner.kb.sparql.SparqlKnowledgeSource; import org.dllearner.learningproblems.PosNegDefinitionLP; @@ -29,7 +30,6 @@ import org.dllearner.utilities.datastructures.SetManipulation; import org.dllearner.utilities.examples.AutomaticNegativeExampleFinderSPARQL; import org.dllearner.utilities.examples.AutomaticPositiveExampleFinderSPARQL; -import org.dllearner.utilities.examples.SPARQLTasks; public class SKOS7030 { Modified: trunk/src/dl-learner/org/dllearner/test/SparqlEndpointTest.java =================================================================== --- trunk/src/dl-learner/org/dllearner/test/SparqlEndpointTest.java 2008-05-26 10:37:56 UTC (rev 927) +++ trunk/src/dl-learner/org/dllearner/test/SparqlEndpointTest.java 2008-05-26 12:02:10 UTC (rev 928) @@ -10,10 +10,10 @@ import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.apache.log4j.SimpleLayout; +import org.dllearner.kb.sparql.SPARQLTasks; import org.dllearner.kb.sparql.SparqlEndpoint; import org.dllearner.kb.sparql.SparqlKnowledgeSource; import org.dllearner.utilities.JamonMonitorLogger; -import org.dllearner.utilities.examples.SPARQLTasks; import org.dllearner.utilities.statistics.SimpleClock; public class SparqlEndpointTest { Deleted: trunk/src/dl-learner/org/dllearner/utilities/examples/AutomaticNegativeExampleFinderSPARQL.java =================================================================== --- trunk/src/dl-learner/org/dllearner/utilities/examples/AutomaticNegativeExampleFinderSPARQL.java 2008-05-26 10:37:56 UTC (rev 927) +++ trunk/src/dl-learner/org/dllearner/utilities/examples/AutomaticNegativeExampleFinderSPARQL.java 2008-05-26 12:02:10 UTC (rev 928) @@ -1,152 +0,0 @@ -package org.dllearner.utilities.examples; - -import java.util.SortedSet; -import java.util.TreeSet; - -import org.apache.log4j.Logger; -import org.dllearner.core.ComponentManager; -import org.dllearner.utilities.datastructures.SetManipulation; - -public class AutomaticNegativeExampleFinderSPARQL { - - // CHECK - private static Logger logger = Logger.getLogger(ComponentManager.class); - - private SPARQLTasks sparqltasks; - - private SortedSet<String> fullPositiveSet; - - private SortedSet<String> fromRelated = new TreeSet<String>(); - private SortedSet<String> fromSuperclasses = new TreeSet<String>();; - private SortedSet<String> fromParallelClasses = new TreeSet<String>();; - private SortedSet<String> fromDomain = new TreeSet<String>();; - private SortedSet<String> fromRange = new TreeSet<String>();; - - static int poslimit = 10; - static int neglimit = 20; - - // CHECK separate posexamples and fullposset - public AutomaticNegativeExampleFinderSPARQL( - SortedSet<String> fullPositiveSet, - SPARQLTasks st) { - super(); - this.fullPositiveSet = fullPositiveSet; - this.sparqltasks = st; - - } - - - - public SortedSet<String> getNegativeExamples(int neglimit ) { - - SortedSet<String> negatives = new TreeSet<String>(); - negatives.addAll(fromParallelClasses); - negatives.addAll(fromRelated); - negatives.addAll(fromSuperclasses); - logger.debug("neg Example size before shrinking: " + negatives.size()); - negatives = SetManipulation.fuzzyShrink(negatives,neglimit); - logger.debug("neg Example size after shrinking: " + negatives.size()); - return negatives; - } - - // CHECK namespace - public void makeNegativeExamplesFromRelatedInstances(SortedSet<String> instances, - String namespace) { - logger.debug("making examples from related instances"); - for (String oneInstance : instances) { - makeNegativeExamplesFromRelatedInstances(oneInstance, namespace); - } - logger.debug("|-negExample size from related: " + fromRelated.size()); - } - - private void makeNegativeExamplesFromRelatedInstances(String oneInstance, String objectnamespace) { - // SortedSet<String> result = new TreeSet<String>(); - - String SPARQLquery = "SELECT * WHERE { \n" + "<" + oneInstance + "> " + "?p ?object. \n" - + "FILTER (REGEX(str(?object), '" + objectnamespace + "')).\n" + "}"; - - this.fromRelated.addAll(sparqltasks.queryAsSet(SPARQLquery, "object")); - this.fromRelated.removeAll(this.fullPositiveSet); - - } - - // QUALITY: keep a while may still be needed - /*public void dbpediaMakeNegativeExamplesFromRelatedInstances(String subject) { - // SortedSet<String> result = new TreeSet<String>(); - - String SPARQLquery = "SELECT * WHERE { \n" + "<" + subject + "> " + "?p ?o. \n" - + "FILTER (REGEX(str(?o), 'http://dbpedia.org/resource/')).\n" - + "FILTER (!REGEX(str(?p), 'http://www.w3.org/2004/02/skos'))\n" + "}"; - - this.fromRelated.addAll(sparqltasks.queryAsSet(SPARQLquery, "o")); - - }*/ - - public void makeNegativeExamplesFromParallelClasses(SortedSet<String> positiveSet, int resultLimit){ - makeNegativeExamplesFromClassesOfInstances(positiveSet, resultLimit); - } - - public void makeNegativeExamplesFromClassesOfInstances(SortedSet<String> positiveSet, - int resultLimit) { - logger.debug("making neg Examples from parallel classes"); - SortedSet<String> classes = new TreeSet<String>(); - // superClasses.add(concept.replace("\"", "")); - // logger.debug("before"+superClasses); - // superClasses = dbpediaGetSuperClasses( superClasses, 4); - // logger.debug("getting negExamples from "+superClasses.size()+" - // superclasses"); - - for (String instance : positiveSet) { - classes.addAll(sparqltasks.getClassesForInstance(instance, resultLimit)); - } - logger.debug("getting negExamples from " + classes.size() + " parallel classes"); - for (String oneClass : classes) { - logger.debug(oneClass); - // rsc = new - // JenaResultSetConvenience(queryConcept("\""+oneClass+"\"",limit)); - this.fromParallelClasses.addAll(sparqltasks.retrieveInstancesForConcept("\"" + oneClass - + "\"", resultLimit)); - - } - - this.fromParallelClasses.removeAll(this.fullPositiveSet); - logger.debug("|-neg Example size from parallelclass: " + fromParallelClasses.size()); - - } - - public void makeNegativeExamplesFromSuperClasses(String concept, int resultLimit) { - - concept = concept.replaceAll("\"", ""); - // superClasses.add(concept.replace("\"", "")); - // logger.debug("before"+superClasses); - SortedSet<String> superClasses = sparqltasks.getSuperClasses(concept, 4); - logger.debug("making neg Examples from " + superClasses.size() + " superclasses"); - - for (String oneSuperClass : superClasses) { - logger.debug(oneSuperClass); - this.fromSuperclasses.addAll(sparqltasks.retrieveInstancesForConcept("\"" - + oneSuperClass + "\"", resultLimit)); - - } - this.fromSuperclasses.removeAll(this.fullPositiveSet); - logger.debug("|-neg Example from superclass: " + fromSuperclasses.size()); - } - - @SuppressWarnings("unused") - private void makeNegativeExamplesFromDomain(String role, int resultLimit){ - logger.debug("making Negative Examples from Domain of : "+role); - this.fromDomain.addAll(sparqltasks.getDomain(role, resultLimit)); - this.fromDomain.removeAll(this.fullPositiveSet); - logger.debug("|-neg Example size from Domain: "+this.fromDomain.size()); - } - - @SuppressWarnings("unused") - private void makeNegativeExamplesFromRange(String role, int resultLimit){ - logger.debug("making Negative Examples from Range of : "+role); - this.fromRange.addAll(sparqltasks.getRange(role, resultLimit)); - this.fromRange.removeAll(this.fullPositiveSet); - logger.debug("|-neg Example size from Range: "+this.fromRange.size()); - } - - -} Added: trunk/src/dl-learner/org/dllearner/utilities/examples/AutomaticNegativeExampleFinderSPARQL.java =================================================================== --- trunk/src/dl-learner/org/dllearner/utilities/examples/AutomaticNegativeExampleFinderSPARQL.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/utilities/examples/AutomaticNegativeExampleFinderSPARQL.java 2008-05-26 12:02:10 UTC (rev 928) @@ -0,0 +1,153 @@ +package org.dllearner.utilities.examples; + +import java.util.SortedSet; +import java.util.TreeSet; + +import org.apache.log4j.Logger; +import org.dllearner.core.ComponentManager; +import org.dllearner.kb.sparql.SPARQLTasks; +import org.dllearner.utilities.datastructures.SetManipulation; + +public class AutomaticNegativeExampleFinderSPARQL { + + // CHECK + private static Logger logger = Logger.getLogger(ComponentManager.class); + + private SPARQLTasks sparqltasks; + + private SortedSet<String> fullPositiveSet; + + private SortedSet<String> fromRelated = new TreeSet<String>(); + private SortedSet<String> fromSuperclasses = new TreeSet<String>();; + private SortedSet<String> fromParallelClasses = new TreeSet<String>();; + private SortedSet<String> fromDomain = new TreeSet<String>();; + private SortedSet<String> fromRange = new TreeSet<String>();; + + static int poslimit = 10; + static int neglimit = 20; + + // CHECK separate posexamples and fullposset + public AutomaticNegativeExampleFinderSPARQL( + SortedSet<String> fullPositiveSet, + SPARQLTasks st) { + super(); + this.fullPositiveSet = fullPositiveSet; + this.sparqltasks = st; + + } + + + + public SortedSet<String> getNegativeExamples(int neglimit ) { + + SortedSet<String> negatives = new TreeSet<String>(); + negatives.addAll(fromParallelClasses); + negatives.addAll(fromRelated); + negatives.addAll(fromSuperclasses); + logger.debug("neg Example size before shrinking: " + negatives.size()); + negatives = SetManipulation.fuzzyShrink(negatives,neglimit); + logger.debug("neg Example size after shrinking: " + negatives.size()); + return negatives; + } + + // CHECK namespace + public void makeNegativeExamplesFromRelatedInstances(SortedSet<String> instances, + String namespace) { + logger.debug("making examples from related instances"); + for (String oneInstance : instances) { + makeNegativeExamplesFromRelatedInstances(oneInstance, namespace); + } + logger.debug("|-negExample size from related: " + fromRelated.size()); + } + + private void makeNegativeExamplesFromRelatedInstances(String oneInstance, String objectnamespace) { + // SortedSet<String> result = new TreeSet<String>(); + + String SPARQLquery = "SELECT * WHERE { \n" + "<" + oneInstance + "> " + "?p ?object. \n" + + "FILTER (REGEX(str(?object), '" + objectnamespace + "')).\n" + "}"; + + this.fromRelated.addAll(sparqltasks.queryAsSet(SPARQLquery, "object")); + this.fromRelated.removeAll(this.fullPositiveSet); + + } + + // QUALITY: keep a while may still be needed + /*public void dbpediaMakeNegativeExamplesFromRelatedInstances(String subject) { + // SortedSet<String> result = new TreeSet<String>(); + + String SPARQLquery = "SELECT * WHERE { \n" + "<" + subject + "> " + "?p ?o. \n" + + "FILTER (REGEX(str(?o), 'http://dbpedia.org/resource/')).\n" + + "FILTER (!REGEX(str(?p), 'http://www.w3.org/2004/02/skos'))\n" + "}"; + + this.fromRelated.addAll(sparqltasks.queryAsSet(SPARQLquery, "o")); + + }*/ + + public void makeNegativeExamplesFromParallelClasses(SortedSet<String> positiveSet, int resultLimit){ + makeNegativeExamplesFromClassesOfInstances(positiveSet, resultLimit); + } + + public void makeNegativeExamplesFromClassesOfInstances(SortedSet<String> positiveSet, + int resultLimit) { + logger.debug("making neg Examples from parallel classes"); + SortedSet<String> classes = new TreeSet<String>(); + // superClasses.add(concept.replace("\"", "")); + // logger.debug("before"+superClasses); + // superClasses = dbpediaGetSuperClasses( superClasses, 4); + // logger.debug("getting negExamples from "+superClasses.size()+" + // superclasses"); + + for (String instance : positiveSet) { + classes.addAll(sparqltasks.getClassesForInstance(instance, resultLimit)); + } + logger.debug("getting negExamples from " + classes.size() + " parallel classes"); + for (String oneClass : classes) { + logger.debug(oneClass); + // rsc = new + // JenaResultSetConvenience(queryConcept("\""+oneClass+"\"",limit)); + this.fromParallelClasses.addAll(sparqltasks.retrieveInstancesForConcept("\"" + oneClass + + "\"", resultLimit)); + + } + + this.fromParallelClasses.removeAll(this.fullPositiveSet); + logger.debug("|-neg Example size from parallelclass: " + fromParallelClasses.size()); + + } + + public void makeNegativeExamplesFromSuperClasses(String concept, int resultLimit) { + + concept = concept.replaceAll("\"", ""); + // superClasses.add(concept.replace("\"", "")); + // logger.debug("before"+superClasses); + SortedSet<String> superClasses = sparqltasks.getSuperClasses(concept, 4); + logger.debug("making neg Examples from " + superClasses.size() + " superclasses"); + + for (String oneSuperClass : superClasses) { + logger.debug(oneSuperClass); + this.fromSuperclasses.addAll(sparqltasks.retrieveInstancesForConcept("\"" + + oneSuperClass + "\"", resultLimit)); + + } + this.fromSuperclasses.removeAll(this.fullPositiveSet); + logger.debug("|-neg Example from superclass: " + fromSuperclasses.size()); + } + + @SuppressWarnings("unused") + private void makeNegativeExamplesFromDomain(String role, int resultLimit){ + logger.debug("making Negative Examples from Domain of : "+role); + this.fromDomain.addAll(sparqltasks.getDomain(role, resultLimit)); + this.fromDomain.removeAll(this.fullPositiveSet); + logger.debug("|-neg Example size from Domain: "+this.fromDomain.size()); + } + + @SuppressWarnings("unused") + private void makeNegativeExamplesFromRange(String role, int resultLimit){ + logger.debug("making Negative Examples from Range of : "+role); + this.fromRange.addAll(sparqltasks.getRange(role, resultLimit)); + this.fromRange.removeAll(this.fullPositiveSet); + logger.debug("|-neg Example size from Range: "+this.fromRange.size()); + } + + +} Modified: trunk/src/dl-learner/org/dllearner/utilities/examples/AutomaticPositiveExampleFinderSPARQL.java =================================================================== --- trunk/src/dl-learner/org/dllearner/utilities/examples/AutomaticPositiveExampleFinderSPARQL.java 2008-05-26 10:37:56 UTC (rev 927) +++ trunk/src/dl-learner/org/dllearner/utilities/examples/AutomaticPositiveExampleFinderSPARQL.java 2008-05-26 12:02:10 UTC (rev 928) @@ -5,6 +5,7 @@ import org.apache.log4j.Logger; import org.dllearner.core.ComponentManager; +import org.dllearner.kb.sparql.SPARQLTasks; public class AutomaticPositiveExampleFinderSPARQL { Deleted: trunk/src/dl-learner/org/dllearner/utilities/examples/SPARQLTasks.java =================================================================== --- trunk/src/dl-learner/org/dllearner/utilities/examples/SPARQLTasks.java 2008-05-26 10:37:56 UTC (rev 927) +++ trunk/src/dl-learner/org/dllearner/utilities/examples/SPARQLTasks.java 2008-05-26 12:02:10 UTC (rev 928) @@ -1,277 +0,0 @@ -package org.dllearner.utilities.examples; - -import java.util.List; -import java.util.SortedSet; -import java.util.TreeSet; - -import org.apache.log4j.Logger; -import org.dllearner.kb.sparql.Cache; -import org.dllearner.kb.sparql.SparqlEndpoint; -import org.dllearner.kb.sparql.SparqlQuery; -import org.dllearner.kb.sparql.SparqlQueryDescriptionConvertVisitor; - -import com.hp.hpl.jena.query.ResultSet; -import com.hp.hpl.jena.query.ResultSetFormatter; -import com.hp.hpl.jena.sparql.core.ResultBinding; - -public class SPARQLTasks { - - //CHECK - @SuppressWarnings("unused") - private static Logger logger = Logger - .getLogger(SPARQLTasks.class); - private Cache c; - private SparqlEndpoint se; - - public SPARQLTasks(Cache c, SparqlEndpoint se) { - super(); - this.c = c; - this.se = se; - } - - public SPARQLTasks( SparqlEndpoint se) { - super(); - this.c = null; - this.se = se; - } - - - - - /** - * QUALITY: doesn't seem optimal, check! - * get all superclasses up to a certain depth - * 1 means direct superclasses - * depth - * @param superClasses - * @param depth - * @return - */ - public SortedSet<String> getSuperClasses(String oneClass, int depth) { - SortedSet<String> superClasses = new TreeSet<String>(); - superClasses.add(oneClass); - SortedSet<String> ret = new TreeSet<String>(); - SortedSet<String> tmpset = new TreeSet<String>(); - //ret.addAll(superClasses); - //logger.debug(superClasses); - - - String SPARQLquery = ""; - for (; depth != 0 ; depth--) { - for (String oneSuperClass : superClasses) { - - //tmp = oneSuperClass.replace("\"", ""); - SPARQLquery = "SELECT * WHERE { \n" + "<" + oneSuperClass + "> " - + "<http://www.w3.org/2000/01/rdf-schema#subClassOf> ?superclass. \n" - + "}"; - - tmpset.addAll(queryAsSet(SPARQLquery, "superclass")); - - } - ret.addAll(tmpset); - //logger.debug(ret); - superClasses.clear(); - superClasses.addAll(tmpset); - tmpset.clear(); - } - //logger.debug(concept); - //logger.debug(query); - return ret; - } - - - - - /** - * QUALITY: buggy because role doesn't work sometimes - * get subject with fixed role and object - * @param role - * @param object - * @param resultLimit - * @return - */ - public SortedSet<String> retrieveDISTINCTSubjectsForRoleAndObject(String role, String object,int resultLimit) { - String SPARQLquery = - "SELECT DISTINCT * WHERE { \n " + - "?subject " + - "<"+role+"> " + - "<" + object + "> \n" + - "} "+limit(resultLimit); - - return queryAsSet(SPARQLquery, "subject"); - } - - public SortedSet<String> retrieveObjectsForSubjectAndRole(String subject, String role, int resultLimit) { - String SPARQLquery = - "SELECT DISTINCT * WHERE { \n " + - "<" +subject+ "> "+ - "<"+role+"> " + - " ?object \n" + - "} LIMIT "+resultLimit; - - return queryAsSet(SPARQLquery, "object"); - } - - /** - * all instances for a SKOS concept - * @param SKOSconcept - * @param resultLimit - * @return - */ - public SortedSet<String> retrieveInstancesForSKOSConcept(String SKOSconcept,int resultLimit) { - return queryPatternAsSet("?subject", "?predicate", "<"+SKOSconcept+">", "subject", resultLimit); - //return retrieveDISTINCTSubjectsForRoleAndObject("http://www.w3.org/2004/02/skos/core#subject", - } - - - - /** - * get all instances for a concept - * @param conceptKBSyntax - * @param sparqlResultLimit - * @return - */ - public SortedSet<String> retrieveInstancesForConcept (String conceptKBSyntax,int sparqlResultLimit) { - - String SPARQLquery = ""; - try{ - SPARQLquery = SparqlQueryDescriptionConvertVisitor - .getSparqlQuery(conceptKBSyntax,sparqlResultLimit); - }catch (Exception e) {e.printStackTrace();} - return queryAsSet(SPARQLquery, "subject"); - } - - - - - /** - * get all direct Classes of an instance - * @param instance - * @param resultLimit - * @return - */ - public SortedSet<String> getClassesForInstance(String instance, int resultLimit) { - - String SPARQLquery = "SELECT ?subject WHERE { \n " + - "<" + instance + ">"+ - " a " + - "?subject " + - "\n" + - "} "+limit(resultLimit); - - return queryAsSet(SPARQLquery, "subject"); - } - - - - public SortedSet<String> getDomain(String role,int resultLimit){ - - String SPARQLquery = "" + - "SELECT DISTINCT ?domain " + - "WHERE { \n" + - "?domain <" + role + "> " + " ?o. \n" + - "?domain a []\n." + - "FILTER (!isLiteral(?domain))." + - "}\n" + limit(resultLimit); - - return queryAsSet(SPARQLquery, "domain"); - - - } - - - public SortedSet<String> getRange(String role,int resultLimit){ - - String SPARQLquery = "" + - "SELECT DISTINCT ?range " + - "WHERE { \n" + - "?s <" + role + "> " + " ?range. \n" + - "?range a [].\n" + - "FILTER (!isLiteral(?range))." + - "}\n" + limit(resultLimit); - - return queryAsSet(SPARQLquery, "range"); - - } - - - - /** - * query a pattern with a standard SPARQL query - * usage (?subject, ?predicate, <http:something> , subject ) - * @param subject - * @param predicate - * @param object - * @param var - * @return - */ - public SortedSet<String> queryPatternAsSet(String subject, String predicate, String object, String var, int resultLimit){ - String SPARQLquery = "SELECT ?subject WHERE { \n " + - " " + subject + - " " + predicate + - " " + object + - " \n" + - "} "+limit(resultLimit); - return queryAsSet( SPARQLquery, var); - } - - - /** - * little higher level, executes query ,returns all resources for a variable - * @param SPARQLquery - * @param var - * @return - */ - public SortedSet<String> queryAsSet(String SPARQLquery, String var){ - ResultSet rs = null; - try { - String JSON = query(SPARQLquery); - rs = SparqlQuery.JSONtoResultSet(JSON); - - } catch (Exception e) { - e.printStackTrace(); - } - return getStringListForVariable(rs,var); - } - - - /** - * lowlevel, executes query returns JSON - * @param SPARQLquery - * @return - */ - public String query(String SPARQLquery){ - if(c==null){ - SparqlQuery sq = new SparqlQuery(SPARQLquery,se); - sq.extraDebugInfo+=se.getURL(); - sq.send(); - String JSON = sq.getResult(); - return JSON; - }else{ - return c.executeSparqlQuery(new SparqlQuery(SPARQLquery,se)); - } - - } - - private String limit(int resultLimit){ - if(resultLimit>0)return " LIMIT "+resultLimit; - return ""; - } - - - public static SortedSet<String> getStringListForVariable(ResultSet rs, String var){ - SortedSet<String> result = new TreeSet<String>(); - - //String s=ResultSetFormatter.asXMLString(this.rs); - @SuppressWarnings("unchecked") - List<ResultBinding> l = ResultSetFormatter.toList(rs); - - for (ResultBinding resultBinding : l) { - result.add(resultBinding.get(var).toString()); - } - - return result; - - } - -} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |