From: <ku...@us...> - 2007-12-14 20:16:54
|
Revision: 335 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=335&view=rev Author: kurzum Date: 2007-12-14 12:16:47 -0800 (Fri, 14 Dec 2007) Log Message: ----------- a lot of changes Modified Paths: -------------- trunk/src/dl-learner/org/dllearner/kb/SparqlEndpointRestructured.java trunk/src/dl-learner/org/dllearner/kb/sparql/Cache.java trunk/src/dl-learner/org/dllearner/kb/sparql/ClassNode.java trunk/src/dl-learner/org/dllearner/kb/sparql/ExtractionAlgorithm.java trunk/src/dl-learner/org/dllearner/kb/sparql/InstanceNode.java trunk/src/dl-learner/org/dllearner/kb/sparql/Manager.java trunk/src/dl-learner/org/dllearner/kb/sparql/Manipulator.java trunk/src/dl-learner/org/dllearner/kb/sparql/Node.java trunk/src/dl-learner/org/dllearner/kb/sparql/PredefinedFilter.java trunk/src/dl-learner/org/dllearner/kb/sparql/PropertyNode.java trunk/src/dl-learner/org/dllearner/kb/sparql/SparqlQueryMaker.java trunk/src/dl-learner/org/dllearner/kb/sparql/TypedSparqlQuery.java Added Paths: ----------- trunk/src/dl-learner/org/dllearner/kb/sparql/TypedSparqlQueryClasses.java trunk/src/dl-learner/org/dllearner/kb/sparql/TypedSparqlQueryInterface.java Modified: trunk/src/dl-learner/org/dllearner/kb/SparqlEndpointRestructured.java =================================================================== --- trunk/src/dl-learner/org/dllearner/kb/SparqlEndpointRestructured.java 2007-12-08 19:37:08 UTC (rev 334) +++ trunk/src/dl-learner/org/dllearner/kb/SparqlEndpointRestructured.java 2007-12-14 20:16:47 UTC (rev 335) @@ -80,7 +80,7 @@ private boolean dumpToFile = true; private boolean useLits = false; private boolean getAllSuperClasses = true; - private int breakSuperClassRetrievalAfter = 500; + private int breakSuperClassRetrievalAfter = 200; private boolean learnDomain = false; private boolean learnRange = false; @@ -281,15 +281,16 @@ m.useConfiguration(sqt, sse, man, recursionDepth, getAllSuperClasses); try { String ont = ""; + System.out.println(learnDomain); // used to learn a domain of a role if (learnDomain || learnRange) { Set<String> pos=new HashSet<String>(); - //Set<String> neg=new HashSet<String>(); + Set<String> neg=new HashSet<String>(); if(learnDomain){ pos = m.getDomainInstancesForRole(role); - //neg = m.getRangeInstancesForRole(role); + neg = m.getRangeInstancesForRole(role); }else if(learnRange){ - //neg = m.getDomainInstancesForRole(role); + neg = m.getDomainInstancesForRole(role); pos = m.getRangeInstancesForRole(role); } //choose 30 @@ -303,24 +304,24 @@ pos=tmp; System.out.println("Instances used: "+pos.size()); - /*tmp=new HashSet<String>(); + tmp=new HashSet<String>(); for(String one:neg){ tmp.add(one); - if(tmp.size()>=5)break; + if(tmp.size()>=numberOfInstancesUsedForRoleLearning)break; } - neg=tmp;*/ + neg=tmp; instances=new HashSet<String>(); instances.addAll(pos); - //instances.addAll(neg); + instances.addAll(neg); for(String one:pos){ System.out.println("+\""+one+"\""); } - /*for(String one:neg){ + for(String one:neg){ System.out.println("-\""+one+"\""); - }*/ + } /*Random r= new Random(); Modified: trunk/src/dl-learner/org/dllearner/kb/sparql/Cache.java =================================================================== --- trunk/src/dl-learner/org/dllearner/kb/sparql/Cache.java 2007-12-08 19:37:08 UTC (rev 334) +++ trunk/src/dl-learner/org/dllearner/kb/sparql/Cache.java 2007-12-14 20:16:47 UTC (rev 335) @@ -32,6 +32,7 @@ // Object can be the cache itself // or a cache object(one entry) // it now uses a hashmap and can contain different queries at once + private HashMap<String, String> hm; final static long serialVersionUID = 104; transient String basedir = ""; @@ -39,7 +40,7 @@ long timestamp; long daysoffreshness = 15; long multiplier = 24 * 60 * 60 * 1000;// h m s ms - private HashMap<String, String> hm; + private HashMap<String, String> inmem_cache; // constructor for the cache itself public Cache(String path) { @@ -154,4 +155,5 @@ return content; } + } Modified: trunk/src/dl-learner/org/dllearner/kb/sparql/ClassNode.java =================================================================== --- trunk/src/dl-learner/org/dllearner/kb/sparql/ClassNode.java 2007-12-08 19:37:08 UTC (rev 334) +++ trunk/src/dl-learner/org/dllearner/kb/sparql/ClassNode.java 2007-12-14 20:16:47 UTC (rev 335) @@ -40,7 +40,7 @@ //expands all directly connected nodes @Override - public Vector<Node> expand(TypedSparqlQuery tsq, Manipulator m) { + public Vector<Node> expand(TypedSparqlQueryInterface tsq, Manipulator m) { Set<StringTuple> s = tsq.query(this.uri); // see manipulator s = m.check(s, this); @@ -83,7 +83,7 @@ // gets the types for properties recursively @Override - public Vector<Node> expandProperties(TypedSparqlQuery tsq, Manipulator m) { + public Vector<Node> expandProperties(TypedSparqlQueryInterface tsq, Manipulator m) { // TODO return type doesn't make sense return new Vector<Node>(); } @@ -101,5 +101,16 @@ return s; } + + @Override + public int compareTo(Object n){ + return super.compareTo((Node)n); + // + } + @Override + public int compareTo(Node n){ + return super.compareTo(n); + // + } } Modified: trunk/src/dl-learner/org/dllearner/kb/sparql/ExtractionAlgorithm.java =================================================================== --- trunk/src/dl-learner/org/dllearner/kb/sparql/ExtractionAlgorithm.java 2007-12-08 19:37:08 UTC (rev 334) +++ trunk/src/dl-learner/org/dllearner/kb/sparql/ExtractionAlgorithm.java 2007-12-14 20:16:47 UTC (rev 335) @@ -20,6 +20,10 @@ package org.dllearner.kb.sparql; import java.net.URI; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Set; +import java.util.TreeSet; import java.util.Vector; // this class is used to extract the information recursively @@ -29,6 +33,8 @@ private Manipulator manipulator; private int recursionDepth = 2; private boolean getAllBackground = true; + private boolean closeAfterRecursion = true; + private boolean print_flag=false; public ExtractionAlgorithm(Configuration Configuration) { this.configuration = Configuration; @@ -42,7 +48,7 @@ return new InstanceNode(u); } - public Vector<Node> expandAll(URI[] u, TypedSparqlQuery tsp) { + public Vector<Node> expandAll(URI[] u, TypedSparqlQueryInterface tsp) { Vector<Node> v = new Vector<Node>(); for (URI one : u) { v.add(expandNode(one, tsp)); @@ -55,11 +61,12 @@ cave: the recursion is not a recursion anymore, it was transformed to an iteration */ - public Node expandNode(URI u, TypedSparqlQuery tsp) { + public Node expandNode(URI u, TypedSparqlQueryInterface tsp) { + long time=System.currentTimeMillis(); Node n = getFirstNode(u); Vector<Node> v = new Vector<Node>(); v.add(n); - System.out.println("StartVector: " + v); + p("StartVector: " + v); // n.expand(tsp, this.Manipulator); // Vector<Node> second= for (int x = 1; x <= recursionDepth; x++) { @@ -67,7 +74,7 @@ Vector<Node> tmp = new Vector<Node>(); while (v.size() > 0) { Node tmpNode = v.remove(0); - System.out.println("Expanding " + tmpNode); + p("Expanding " + tmpNode); // System.out.println(this.Manipulator); // these are the new not expanded nodes @@ -77,29 +84,74 @@ tmp.addAll(tmpVec); } v = tmp; - System.out - .println("Recursion counter: " + x + " with " + v.size() + " Nodes remaining"); + System.out.println("Recursion counter: " + x + + " with " + v.size() + " Nodes remaining, needed: " + +(System.currentTimeMillis()-time)); + time=System.currentTimeMillis(); } + HashSet<String> hadAlready=new HashSet<String>(); // gets All Class Nodes and expands them further if (this.getAllBackground) { + //Set<Node> classes = new TreeSet<Node>(); Vector<Node> classes = new Vector<Node>(); + + Vector<Node> instances = new Vector<Node>(); for (Node one : v) { if (one instanceof ClassNode) { classes.add(one); } + if (one instanceof InstanceNode) { + instances.add(one); + } + } + System.out.println(instances.size()); + TypedSparqlQueryClasses tsqc=new TypedSparqlQueryClasses(configuration); + if(closeAfterRecursion){ + while (instances.size() > 0) { + p("Getting classes for remaining instances: " + instances.size()); + Node next = instances.remove(0); + p("Getting classes for: " + next); + classes.addAll(next.expand(tsqc, manipulator)); + if (classes.size()>=manipulator.breakSuperClassRetrievalAfter){break;} + } + } + Vector<Node>tmp=new Vector<Node>(); + int i=0; while (classes.size() > 0) { - System.out.println("Remaining classes: " + classes.size()); + p("Remaining classes: " + classes.size()); + //Iterator<Node> it=classes.iterator(); + //Node next =(Node) it.next(); + //classes.remove(next); Node next = classes.remove(0); - System.out.println("Expanding: " + next); - classes.addAll(next.expand(tsp, manipulator)); - if (classes.size()>=manipulator.breakSuperClassRetrievalAfter){break;} + + if(!hadAlready.contains(next.uri.toString())){ + p("Expanding: " + next); + //System.out.println(hadAlready.size()); + hadAlready.add(next.uri.toString()); + tmp=next.expand(tsp, manipulator); + classes.addAll(tmp); + tmp=new Vector<Node>(); + if(i % 50==0)System.out.println("got "+i+" extra classes, max: "+manipulator.breakSuperClassRetrievalAfter); + i++; + if (i>=manipulator.breakSuperClassRetrievalAfter){break;} + } + //System.out.println("Skipping"); + + + //if (classes.size()>=manipulator.breakSuperClassRetrievalAfter){break;} + } + //System.out.println((System.currentTimeMillis()-time)+""); } return n; } + + void p(String s){ + if(print_flag)System.out.println(s); + } } Modified: trunk/src/dl-learner/org/dllearner/kb/sparql/InstanceNode.java =================================================================== --- trunk/src/dl-learner/org/dllearner/kb/sparql/InstanceNode.java 2007-12-08 19:37:08 UTC (rev 334) +++ trunk/src/dl-learner/org/dllearner/kb/sparql/InstanceNode.java 2007-12-14 20:16:47 UTC (rev 335) @@ -44,7 +44,7 @@ //expands all directly connected nodes @Override - public Vector<Node> expand(TypedSparqlQuery tsq, Manipulator m) { + public Vector<Node> expand(TypedSparqlQueryInterface tsq, Manipulator m) { Set<StringTuple> s = tsq.query(uri); // see Manipulator @@ -80,7 +80,7 @@ // gets the types for properties recursively @Override - public Vector<Node> expandProperties(TypedSparqlQuery tsq, Manipulator m) { + public Vector<Node> expandProperties(TypedSparqlQueryInterface tsq, Manipulator m) { for (PropertyNode one : properties) { one.expandProperties(tsq, m); } @@ -105,5 +105,16 @@ return s; } + + @Override + public int compareTo(Object n){ + return 0; + // + } + @Override + public int compareTo(Node n){ + return super.compareTo(n); + // + } } Modified: trunk/src/dl-learner/org/dllearner/kb/sparql/Manager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/kb/sparql/Manager.java 2007-12-08 19:37:08 UTC (rev 334) +++ trunk/src/dl-learner/org/dllearner/kb/sparql/Manager.java 2007-12-14 20:16:47 UTC (rev 335) @@ -52,7 +52,7 @@ } catch (Exception e) { e.printStackTrace(); } - Set<StringTuple> t = this.typedSparqlQuery.getTupelsForRole(u, true); + Set<StringTuple> t = ((TypedSparqlQuery)this.typedSparqlQuery).getTupelsForRole(u, true); Set<String> ret = new HashSet<String>(); for (StringTuple one : t) { @@ -68,7 +68,7 @@ } catch (Exception e) { e.printStackTrace(); } - Set<StringTuple> t = this.typedSparqlQuery.getTupelsForRole(u,false); + Set<StringTuple> t = ((TypedSparqlQuery)this.typedSparqlQuery).getTupelsForRole(u,false); Set<String> ret = new HashSet<String>(); for (StringTuple one : t) { Modified: trunk/src/dl-learner/org/dllearner/kb/sparql/Manipulator.java =================================================================== --- trunk/src/dl-learner/org/dllearner/kb/sparql/Manipulator.java 2007-12-08 19:37:08 UTC (rev 334) +++ trunk/src/dl-learner/org/dllearner/kb/sparql/Manipulator.java 2007-12-14 20:16:47 UTC (rev 335) @@ -49,7 +49,7 @@ this.blankNodeIdentifier = blankNodeIdentifier; this.replaceObject=replaceObject; this.replacePredicate=replacePredicate; - + this.breakSuperClassRetrievalAfter=breakSuperClassRetrievalAfter; Set<String> classproperties = new HashSet<String>(); classproperties.add(subclass); Modified: trunk/src/dl-learner/org/dllearner/kb/sparql/Node.java =================================================================== --- trunk/src/dl-learner/org/dllearner/kb/sparql/Node.java 2007-12-08 19:37:08 UTC (rev 334) +++ trunk/src/dl-learner/org/dllearner/kb/sparql/Node.java 2007-12-14 20:16:47 UTC (rev 335) @@ -24,7 +24,7 @@ import java.util.Vector; // abstract class -public abstract class Node { +public abstract class Node implements Comparable{ URI uri; protected String type; protected boolean expanded = false; @@ -33,9 +33,9 @@ this.uri = u; } - public abstract Vector<Node> expand(TypedSparqlQuery tsq, Manipulator m); + public abstract Vector<Node> expand(TypedSparqlQueryInterface tsq, Manipulator m); - public abstract Vector<Node> expandProperties(TypedSparqlQuery tsq, Manipulator m); + public abstract Vector<Node> expandProperties(TypedSparqlQueryInterface tsq, Manipulator m); public abstract Set<String> toNTriple(); @@ -48,5 +48,12 @@ public URI getURI() { return uri; } + public boolean equals(Node n){ + if(this.uri.equals(n.uri))return true; + else return false; + } + public int compareTo(Node n){ + return this.uri.toString().compareTo(n.uri.toString()); + } } Modified: trunk/src/dl-learner/org/dllearner/kb/sparql/PredefinedFilter.java =================================================================== --- trunk/src/dl-learner/org/dllearner/kb/sparql/PredefinedFilter.java 2007-12-08 19:37:08 UTC (rev 334) +++ trunk/src/dl-learner/org/dllearner/kb/sparql/PredefinedFilter.java 2007-12-14 20:16:47 UTC (rev 335) @@ -32,6 +32,10 @@ return YagoFilter(); case 2: return SKOS(); + case 3: + return YAGOSKOS(); + case 4: + return YagoSpecialHierarchy(); } return null; } @@ -47,11 +51,12 @@ pred.add("http://dbpedia.org/property/website"); pred.add("http://dbpedia.org/property/wikipage"); pred.add("http://dbpedia.org/property/wikiPageUsesTemplate"); + pred.add("http://dbpedia.org/property/relatedInstance"); - Set<String> obj = new HashSet<String>(); - obj.add("http://dbpedia.org/resource/Category:Wikipedia_"); - obj.add("http://dbpedia.org/resource/Category:Articles_"); + //obj.add("http://dbpedia.org/resource/Category:Wikipedia_"); + //obj.add("http://dbpedia.org/resource/Category:Articles_"); + obj.add("http://dbpedia.org/resource/Category:"); obj.add("http://dbpedia.org/resource/Template"); obj.add("http://xmlns.com/foaf/0.1/"); obj.add("http://upload.wikimedia.org/wikipedia/commons"); @@ -63,7 +68,36 @@ return new SparqlQueryType("forbid", obj, pred, "false"); } + public static SparqlQueryType YagoSpecialHierarchy(){ + Set<String> pred = new HashSet<String>(); + pred.add("http://www.w3.org/2004/02/skos/core"); + pred.add("http://www.w3.org/2002/07/owl#sameAs"); + pred.add("http://xmlns.com/foaf/0.1/"); + + pred.add("http://dbpedia.org/property/reference"); + pred.add("http://dbpedia.org/property/website"); + pred.add("http://dbpedia.org/property/wikipage"); + pred.add("http://dbpedia.org/property/wikiPageUsesTemplate"); + pred.add("http://dbpedia.org/property/relatedInstance"); + pred.add("http://dbpedia.org/property/monarch"); + + + Set<String> obj = new HashSet<String>(); + obj.add("http://dbpedia.org/resource/Category:Wikipedia_"); + obj.add("http://dbpedia.org/resource/Category:Articles_"); + obj.add("http://dbpedia.org/resource/Template"); + obj.add("http://xmlns.com/foaf/0.1/"); + obj.add("http://upload.wikimedia.org/wikipedia/commons"); + obj.add("http://upload.wikimedia.org/wikipedia"); + obj.add("http://www.geonames.org"); + obj.add("http://www.w3.org/2006/03/wn/wn20/instances/synset"); + obj.add("http://www4.wiwiss.fu-berlin.de/flickrwrappr"); + obj.add("http://www.w3.org/2004/02/skos/core"); + + return new SparqlQueryType("forbid", obj, pred, "false"); + } + public static SparqlQueryType SKOS(){ Set<String> pred = new HashSet<String>(); //pred.add("http://www.w3.org/2004/02/skos/core"); @@ -94,6 +128,36 @@ return new SparqlQueryType("forbid", obj, pred, "false"); } + public static SparqlQueryType YAGOSKOS(){ + Set<String> pred = new HashSet<String>(); + //pred.add("http://www.w3.org/2004/02/skos/core"); + pred.add("http://www.w3.org/2002/07/owl#sameAs"); + pred.add("http://xmlns.com/foaf/0.1/"); + + pred.add("http://dbpedia.org/property/reference"); + pred.add("http://dbpedia.org/property/website"); + pred.add("http://dbpedia.org/property/wikipage"); + //pred.add("http://www.w3.org/2004/02/skos/core#narrower"); + pred.add("http://dbpedia.org/property/wikiPageUsesTemplate"); + + Set<String> obj = new HashSet<String>(); + //obj.add("http://dbpedia.org/resource/Category:Wikipedia_"); + //obj.add("http://dbpedia.org/resource/Category:Articles_"); + obj.add("http://xmlns.com/foaf/0.1/"); + obj.add("http://upload.wikimedia.org/wikipedia/commons"); + obj.add("http://upload.wikimedia.org/wikipedia"); + + obj.add("http://www.geonames.org"); + obj.add("http://www.w3.org/2006/03/wn/wn20/instances/synset"); + obj.add("http://www4.wiwiss.fu-berlin.de/flickrwrappr"); + + + //obj.add("http://dbpedia.org/class/yago"); + obj.add("http://dbpedia.org/resource/Template"); + + + return new SparqlQueryType("forbid", obj, pred, "false"); + } Modified: trunk/src/dl-learner/org/dllearner/kb/sparql/PropertyNode.java =================================================================== --- trunk/src/dl-learner/org/dllearner/kb/sparql/PropertyNode.java 2007-12-08 19:37:08 UTC (rev 334) +++ trunk/src/dl-learner/org/dllearner/kb/sparql/PropertyNode.java 2007-12-14 20:16:47 UTC (rev 335) @@ -23,13 +23,11 @@ import java.util.HashSet; import java.util.Iterator; import java.util.Set; -import java.util.SortedSet; -import java.util.TreeSet; import java.util.Vector; import org.dllearner.utilities.StringTuple; -public class PropertyNode extends Node { +public class PropertyNode extends Node implements Comparable{ // the a and b part of a property private Node a; @@ -52,7 +50,7 @@ } @Override - public Vector<Node> expand(TypedSparqlQuery tsq, Manipulator m) { + public Vector<Node> expand(TypedSparqlQueryInterface tsq, Manipulator m) { Set<StringTuple> s = tsq.query(uri); Vector<Node> Nodes = new Vector<Node>(); // Manipulation @@ -75,7 +73,7 @@ // gets the types for properties recursively @Override - public Vector<Node> expandProperties(TypedSparqlQuery tsq, Manipulator m) { + public Vector<Node> expandProperties(TypedSparqlQueryInterface tsq, Manipulator m) { b.expandProperties(tsq, m); return this.expand(tsq, m); } @@ -98,5 +96,21 @@ return s; } + + @Override + public boolean equals(Node n){ + if(this.uri.equals(n.uri))return true; + else return false; + } + @Override + public int compareTo(Object n){ + return 0; + // + } + @Override + public int compareTo(Node n){ + return super.compareTo(n); + // + } } Modified: trunk/src/dl-learner/org/dllearner/kb/sparql/SparqlQueryMaker.java =================================================================== --- trunk/src/dl-learner/org/dllearner/kb/sparql/SparqlQueryMaker.java 2007-12-08 19:37:08 UTC (rev 334) +++ trunk/src/dl-learner/org/dllearner/kb/sparql/SparqlQueryMaker.java 2007-12-14 20:16:47 UTC (rev 335) @@ -61,13 +61,15 @@ if(domain){ ret = "SELECT * WHERE { " + lineend + "?subject <" + role + "> ?object; a []. " + lineend - + "FILTER( " + lineend + "(" + Filter + ").}"; + + "FILTER( " + lineend + "(" + Filter + ").}" ; + //"ORDER BY ?subject"; // System.out.println(ret); }else{ ret = "SELECT * WHERE { " + lineend + "?object a [] . " + "?subject <" + role + "> ?object . " + lineend + "FILTER( " + lineend + "(" + Filter + ").}"; + //"ORDER BY ?object"; } //System.out.println(ret); Modified: trunk/src/dl-learner/org/dllearner/kb/sparql/TypedSparqlQuery.java =================================================================== --- trunk/src/dl-learner/org/dllearner/kb/sparql/TypedSparqlQuery.java 2007-12-08 19:37:08 UTC (rev 334) +++ trunk/src/dl-learner/org/dllearner/kb/sparql/TypedSparqlQuery.java 2007-12-14 20:16:47 UTC (rev 335) @@ -35,9 +35,9 @@ import org.dllearner.utilities.StringTuple; // can execute different queries -public class TypedSparqlQuery { +public class TypedSparqlQuery implements TypedSparqlQueryInterface{ boolean print_flag=false; - boolean debug_no_cache=false; + boolean debug_no_cache=false;// true means no cahce is used private Configuration configuration; // private SparqlHTTPRequest SparqlHTTPRequest; private SparqlQueryMaker sparqlQueryMaker; @@ -106,7 +106,7 @@ //System.out.print("\n"); } else { xml = FromCache; - System.out.println("FROM CACHE"); + //System.out.println("FROM CACHE"); } // System.out.println(sparql); @@ -114,7 +114,7 @@ // process XML Set<StringTuple> s = processResult(xml, a, b); try { - System.out.println("retrieved " + s.size() + " tupels\n"); + //System.out.println("retrieved " + s.size() + " tupels\n"); } catch (Exception e) { } return s; @@ -124,30 +124,73 @@ Set<StringTuple> ret = new HashSet<StringTuple>(); // TODO if result is empty, catch exceptions - String one = "<binding name=\"" + a + "\">"; - String two = "<binding name=\"" + b + "\">"; + String resEnd="</result>"; + String one = "binding name=\"" + a + "\""; + String two = "binding name=\"" + b + "\""; + String endbinding= "binding"; + String uri="uri"; String uridel = "<uri>"; - String end = "</uri>"; + String bnode = "<bnode>"; + String uriend = "</uri>"; String predtmp = ""; String objtmp = ""; - - while (xml.indexOf(one) != -1) { + //System.out.println(getNextResult(xml)); + String nextResult=""; + while ((nextResult=getNextResult( xml))!=null){ + //System.out.println(xml.indexOf(resEnd)); + //System.out.println(xml); + if(nextResult.indexOf(bnode)!=-1) + {xml=xml.substring(xml.indexOf(resEnd)+resEnd.length());continue;} // get pred - xml = xml.substring(xml.indexOf(one) + one.length()); - xml = xml.substring(xml.indexOf(uridel) + uridel.length()); - predtmp = xml.substring(0, xml.indexOf(end)); - + //predtmp = nextResult.substring(nextResult.indexOf(one) + one.length()); + predtmp=getinTag(nextResult, one,endbinding); + predtmp=getinTag(predtmp, uri,uri); + //System.out.println(predtmp); + // getobj - xml = xml.substring(xml.indexOf(two) + two.length()); - xml = xml.substring(xml.indexOf(uridel) + uridel.length()); - objtmp = xml.substring(0, xml.indexOf(end)); - ret.add(new StringTuple(predtmp, objtmp)); - // System.out.println(new Tupel(predtmp,objtmp)); + objtmp=getinTag(nextResult, two,endbinding); + objtmp=getinTag(objtmp, uri,uri); + //System.out.println(objtmp); + + StringTuple st=new StringTuple(predtmp, objtmp); + //System.out.println(st); + ret.add(st); + xml=xml.substring(xml.indexOf(resEnd)+resEnd.length()); + } + /*while (xml.indexOf(one) != -1) { + + + + // System.out.println(new Tupel(predtmp,objtmp)); + }*/ + return ret; } + + private String getNextResult(String xml){ + String res1="<result>"; + String res2="</result>"; + if(xml.indexOf(res1)==-1)return null; + xml = xml.substring(xml.indexOf(res1) + res1.length()); + xml = xml.substring(0,xml.indexOf(res2) ); + //System.out.println(xml); + return xml; + } + private String getinTag(String xml, String starttag, String endtag){ + String res1="<"+starttag+">"; + //System.out.println(res1); + String res2="</"+endtag+">"; + if(xml.indexOf(res1)==-1)return null; + xml = xml.substring(xml.indexOf(res1) + res1.length()); + //System.out.println(xml); + xml = xml.substring(0,xml.indexOf(res2) ); + //System.out.println(xml); + + return xml; + } private String sendAndReceiveSPARQL(String sparql) throws IOException { p("sendAndReceiveSPARQL"); @@ -214,5 +257,7 @@ System.out.println(str); } } + + } Added: trunk/src/dl-learner/org/dllearner/kb/sparql/TypedSparqlQueryClasses.java =================================================================== --- trunk/src/dl-learner/org/dllearner/kb/sparql/TypedSparqlQueryClasses.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/kb/sparql/TypedSparqlQueryClasses.java 2007-12-14 20:16:47 UTC (rev 335) @@ -0,0 +1,245 @@ +/** + * Copyright (C) 2007, Sebastian Hellmann + * + * This file is part of DL-Learner. + * + * DL-Learner is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * DL-Learner is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ +package org.dllearner.kb.sparql; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.net.HttpURLConnection; +import java.net.URI; +import java.net.URLEncoder; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Set; + +import org.dllearner.utilities.StringTuple; + +// can execute different queries +public class TypedSparqlQueryClasses implements TypedSparqlQueryInterface{ + boolean print_flag=false; + boolean debug_no_cache=false; + private Configuration configuration; + // private SparqlHTTPRequest SparqlHTTPRequest; + //private SparqlQueryMaker sparqlQueryMaker; + Cache cache; + + + public TypedSparqlQueryClasses(Configuration configuration) { + this.configuration = configuration; + this.cache = new Cache("cache"); + } + + // standard query get a tupels (p,o) for subject s + public Set<StringTuple> query(URI u) { + + // getQuery + String sparql = "SELECT ?predicate ?object " + + "WHERE {" + + "<"+u.toString()+"> ?predicate ?object;" + + "a ?object . " + + " FILTER (!regex(str(?object),'http://xmlns.com/foaf/0.1/'))"+ + "}"; + + return cachedSparql(u, sparql, "predicate", "object"); + + } + + + + // uses a cache + private Set<StringTuple> cachedSparql(URI u, String sparql, String a, String b) { + // check cache + String FromCache = cache.get(u.toString(), sparql); + if(debug_no_cache) { + FromCache=null; + } + String xml = null; + // if not in cache get it from EndPoint + if (FromCache == null) { + try { + xml = sendAndReceiveSPARQL(sparql); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + p(sparql); + // System.out.println(xml); + if(!debug_no_cache) { + cache.put(u.toString(), sparql, xml); + } + //System.out.print("\n"); + } else { + xml = FromCache; + //System.out.println("FROM CACHE"); + } + + // System.out.println(sparql); + // System.out.println(xml); + // process XML + Set<StringTuple> s = processResult(xml, a, b); + try { + //System.out.println("retrieved " + s.size() + " tupels\n"); + } catch (Exception e) { + } + return s; + } + + public Set<StringTuple> processResult(String xml, String a, String b) { + + Set<StringTuple> ret = new HashSet<StringTuple>(); + // TODO if result is empty, catch exceptions + String resEnd="</result>"; + String one = "binding name=\"" + a + "\""; + String two = "binding name=\"" + b + "\""; + String endbinding= "binding"; + String uri="uri"; + String uridel = "<uri>"; + String bnode = "<bnode>"; + String uriend = "</uri>"; + String predtmp = ""; + String objtmp = ""; + //System.out.println(getNextResult(xml)); + String nextResult=""; + while ((nextResult=getNextResult( xml))!=null){ + //System.out.println(xml.indexOf(resEnd)); + //System.out.println(xml); + if(nextResult.indexOf(bnode)!=-1) + {xml=xml.substring(xml.indexOf(resEnd)+resEnd.length());continue;} + // get pred + //predtmp = nextResult.substring(nextResult.indexOf(one) + one.length()); + predtmp=getinTag(nextResult, one,endbinding); + predtmp=getinTag(predtmp, uri,uri); + //System.out.println(predtmp); + + // getobj + objtmp=getinTag(nextResult, two,endbinding); + objtmp=getinTag(objtmp, uri,uri); + //System.out.println(objtmp); + + StringTuple st=new StringTuple(predtmp, objtmp); + //System.out.println(st); + ret.add(st); + xml=xml.substring(xml.indexOf(resEnd)+resEnd.length()); + + } + /*while (xml.indexOf(one) != -1) { + + + + + // System.out.println(new Tupel(predtmp,objtmp)); + }*/ + + return ret; + + } + + private String getNextResult(String xml){ + String res1="<result>"; + String res2="</result>"; + if(xml.indexOf(res1)==-1)return null; + xml = xml.substring(xml.indexOf(res1) + res1.length()); + xml = xml.substring(0,xml.indexOf(res2) ); + //System.out.println(xml); + return xml; + } + private String getinTag(String xml, String starttag, String endtag){ + String res1="<"+starttag+">"; + //System.out.println(res1); + String res2="</"+endtag+">"; + if(xml.indexOf(res1)==-1)return null; + xml = xml.substring(xml.indexOf(res1) + res1.length()); + //System.out.println(xml); + xml = xml.substring(0,xml.indexOf(res2) ); + //System.out.println(xml); + + return xml; + } + + private String sendAndReceiveSPARQL(String sparql) throws IOException { + p("sendAndReceiveSPARQL"); + StringBuilder answer = new StringBuilder(); + //sparql="SELECT * WHERE {?a ?b ?c}LIMIT 10"; + + // String an Sparql-Endpoint schicken + HttpURLConnection connection; + SpecificSparqlEndpoint se = configuration.getSparqlEndpoint(); + p("URL: "+se.getURL()); + p("Host: "+se.getHost()); + + connection = (HttpURLConnection) se.getURL().openConnection(); + connection.setDoOutput(true); + + //connection.addRequestProperty("Host", se.getHost()); + connection.addRequestProperty("Connection", "close"); + connection + .addRequestProperty( + "Accept", + "text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5"); + connection.addRequestProperty("Accept-Language", "de-de,de;q=0.8,en-us;q=0.5,en;q=0.3"); + connection.addRequestProperty("Accept-Charset", "utf-8;q=1.0"); + connection + .addRequestProperty( + "User-Agent", + "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.4) Gecko/20070515 Firefox/2.0.0.4 Web-Sniffer/1.0.24"); + + OutputStream os = connection.getOutputStream(); + OutputStreamWriter osw = new OutputStreamWriter(os); + + Set<String> s = se.getParameters().keySet(); + Iterator<String> it = s.iterator(); + String FullURI = ""; + while (it.hasNext()) { + String element = it.next(); + FullURI += "" + URLEncoder.encode(element, "UTF-8") + "=" + + URLEncoder.encode(se.getParameters().get(element), "UTF-8") + "&"; + } + + FullURI += "" + se.getHasQueryParameter() + "=" + URLEncoder.encode(sparql, "UTF-8"); + p(FullURI); + osw.write(FullURI); + osw.close(); + + // receive answer + InputStream is = connection.getInputStream(); + InputStreamReader isr = new InputStreamReader(is, "UTF-8"); + BufferedReader br = new BufferedReader(isr); + + String line; + do { + line = br.readLine(); + if (line != null) + answer.append(line); + } while (line != null); + + br.close(); + p(answer.toString()); + return answer.toString(); + } + public void p(String str){ + if(print_flag){ + System.out.println(str); + } + } + +} Added: trunk/src/dl-learner/org/dllearner/kb/sparql/TypedSparqlQueryInterface.java =================================================================== --- trunk/src/dl-learner/org/dllearner/kb/sparql/TypedSparqlQueryInterface.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/kb/sparql/TypedSparqlQueryInterface.java 2007-12-14 20:16:47 UTC (rev 335) @@ -0,0 +1,11 @@ +package org.dllearner.kb.sparql; + +import java.net.URI; +import java.util.Set; + +import org.dllearner.utilities.StringTuple; + +public interface TypedSparqlQueryInterface { + + public Set<StringTuple> query(URI u); +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |