From: <ku...@us...> - 2009-06-02 17:12:25
|
Revision: 1785 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=1785&view=rev Author: kurzum Date: 2009-06-02 17:12:23 +0000 (Tue, 02 Jun 2009) Log Message: ----------- new type of filter in SPARQL query maker fixes Modified Paths: -------------- trunk/src/dl-learner/org/dllearner/kb/sparql/SparqlQueryMaker.java Modified: trunk/src/dl-learner/org/dllearner/kb/sparql/SparqlQueryMaker.java =================================================================== --- trunk/src/dl-learner/org/dllearner/kb/sparql/SparqlQueryMaker.java 2009-06-02 15:49:01 UTC (rev 1784) +++ trunk/src/dl-learner/org/dllearner/kb/sparql/SparqlQueryMaker.java 2009-06-02 17:12:23 UTC (rev 1785) @@ -24,6 +24,9 @@ import java.util.Set; import java.util.TreeSet; +import org.dllearner.utilities.datastructures.StringTuple; +import org.dllearner.utilities.owl.OWLVocabulary; + /** * Can assemble sparql queries. can make queries for subject, predicate, object * according to the filter settings object SparqlQueryType, which gives the @@ -50,6 +53,8 @@ private Set<String> objectFilterList; private Set<String> predicateFilterList; + + private Set<StringTuple> predicateobjectFilterList; private boolean literals = false; @@ -58,6 +63,7 @@ super(); this.objectFilterList = objectFilterList; this.predicateFilterList = predicateFilterList; + this.predicateobjectFilterList = new TreeSet<StringTuple>(); this.literals = literals; } @@ -158,10 +164,18 @@ : "?" + objectVariable; List<String> terms = new ArrayList<String>(); - if (!isLiterals()) { - terms.add("!isLiteral(" + objectVariable + ")"); + String not = (isAllowMode()) ? "" : "!"; + /*new filter type */ + + for (StringTuple tuple : getPredicateObjectFilterList()) { + List<String> tmpterms = new ArrayList<String>(); + tmpterms.add(not + "regex(str(" + predicateVariable + "), '" + tuple.a+ "')"); + tmpterms.add(not + "regex(str(" + objectVariable + "), '" + tuple.b+ "')"); + terms.add(assembleTerms(tmpterms, "&&")); } - String not = (isAllowMode()) ? "" : "!"; + + + for (String pred : getPredicateFilterList()) { terms.add(not + "regex(str(" + predicateVariable + "), '" + pred + "')"); @@ -171,19 +185,36 @@ .add(not + "regex(str(" + objectVariable + "), '" + obj + "')"); } + String assembled = assembleTerms(terms, getOperator()); + + terms = new ArrayList<String>(); + terms.add(assembled); + if (!isLiterals()) { + terms.add("!isLiteral(" + objectVariable + ")"); + } + return assembleTerms(terms, "&&"); + - return assembleTerms(terms); - } + + private String getOperator(){ + return (isAllowMode())?"||":"&&"; + + } - private String assembleTerms(List<String> terms) { + + private String assembleTerms(List<String> terms, String operator) { + if((!operator.equals("||")) && (!operator.equals("&&"))){ + System.out.println("in SparqlQuerymaker assembleTerms recieved wrong operator"); + System.exit(0); + } + if (terms.isEmpty()) return ""; else if (terms.size() == 1) return brackets(terms.get(0)); else { StringBuffer sbuf = new StringBuffer(1400); - String operator = (isAllowMode()) ? "||" : "&&"; String first = terms.remove(0); sbuf.append(brackets(first)); for (String term : terms) { @@ -214,6 +245,9 @@ public Set<String> getPredicateFilterList() { return predicateFilterList; } + public Set<StringTuple> getPredicateObjectFilterList() { + return predicateobjectFilterList; + } public void addPredicateFilter(String newFilter) { assembled = false; @@ -224,6 +258,10 @@ assembled = false; objectFilterList.add(newFilter); } + public void addPredicateObjectFilter(String pred, String object) { + assembled = false; + predicateobjectFilterList.add(new StringTuple(pred, object)); + } public void combineWith(SparqlQueryMaker sqm){ predicateFilterList.addAll(sqm.predicateFilterList); @@ -336,11 +374,19 @@ public static SparqlQueryMaker getDBpediaNavigatorFilter() { SparqlQueryMaker sqm = new SparqlQueryMaker("allow", new TreeSet<String>(), new TreeSet<String>(), false); - sqm.addPredicateFilter("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"); - sqm.addPredicateFilter("http://www.w3.org/2000/01/rdf-schema#subClassOf"); - sqm.addPredicateFilter("http://www.w3.org/2003/01/geo/wgs84_pos#lat"); - sqm.addPredicateFilter("http://www.w3.org/2003/01/geo/wgs84_pos#long"); - sqm.addPredicateFilter("http://www.w3.org/2000/01/rdf-schema#label"); +// sqm.addPredicateFilter("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"); +// sqm.addPredicateFilter("http://www.w3.org/2000/01/rdf-schema#subClassOf"); +// sqm.addPredicateFilter("http://www.w3.org/2003/01/geo/wgs84_pos#lat"); +// sqm.addPredicateFilter("http://www.w3.org/2003/01/geo/wgs84_pos#long"); +// sqm.addPredicateFilter("http://www.w3.org/2000/01/rdf-schema#label"); + + String dbont = "http://dbpedia.org/ontology/"; + sqm.addPredicateFilter(dbont); + sqm.addPredicateObjectFilter(dbont, dbont); + sqm.addPredicateObjectFilter(OWLVocabulary.RDF_TYPE, dbont); + sqm.addPredicateObjectFilter(OWLVocabulary.RDFS_SUBCLASS_OF, dbont); + + // pred.add("http://dbpedia.org/property/wikipage"); // pred.add("http://dbpedia.org/property/wikiPageUsesTemplate"); // pred.add("http://dbpedia.org/property/relatedInstance"); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |