From: <sk...@us...> - 2007-11-05 13:03:22
|
Revision: 276 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=276&view=rev Author: sknappe Date: 2007-11-05 05:03:14 -0800 (Mon, 05 Nov 2007) Log Message: ----------- added some comments and changed behaviour of some functions Modified Paths: -------------- trunk/src/dl-learner/org/dllearner/kb/SparqlCache.java trunk/src/dl-learner/org/dllearner/kb/SparqlEndpoint.java trunk/src/dl-learner/org/dllearner/kb/SparqlFilter.java trunk/src/dl-learner/org/dllearner/kb/SparqlOntologyCollector.java trunk/src/dl-learner/org/dllearner/kb/SparqlQueryMaker.java trunk/src/dl-learner/org/dllearner/server/DLLearnerWS.java Modified: trunk/src/dl-learner/org/dllearner/kb/SparqlCache.java =================================================================== --- trunk/src/dl-learner/org/dllearner/kb/SparqlCache.java 2007-11-01 14:49:08 UTC (rev 275) +++ trunk/src/dl-learner/org/dllearner/kb/SparqlCache.java 2007-11-05 13:03:14 UTC (rev 276) @@ -90,12 +90,12 @@ public String get(String key, String sparql){ String ret=null; try{ - SparqlCache c =readFromFile(makeFilename(key)) ; - if(c==null)return null; - if(!c.checkFreshness())return null; - if(!c.validate(sparql))return null; - - ret=c.content; + SparqlCache c =readFromFile(makeFilename(key)); + if(c==null)return null; + if(!c.checkFreshness())return null; + if(!c.validate(sparql))return null; + + ret=c.content; }catch (Exception e) {e.printStackTrace();} return ret; } Modified: trunk/src/dl-learner/org/dllearner/kb/SparqlEndpoint.java =================================================================== --- trunk/src/dl-learner/org/dllearner/kb/SparqlEndpoint.java 2007-11-01 14:49:08 UTC (rev 275) +++ trunk/src/dl-learner/org/dllearner/kb/SparqlEndpoint.java 2007-11-05 13:03:14 UTC (rev 276) @@ -21,6 +21,7 @@ import java.io.File; import java.io.FileWriter; +import java.io.IOException; import java.io.StringReader; import java.net.MalformedURLException; import java.net.URI; @@ -47,8 +48,6 @@ /** * Represents a SPARQL Endpoint. - * TODO: move org.dllearner.modules.sparql to this package and - * integrate its classes * TODO: Is it necessary to create a class DBpediaSparqlEndpoint? * * @author Jens Lehmann @@ -175,29 +174,34 @@ System.out.println("SparqlModul: Collecting Ontology"); SparqlOntologyCollector oc=new SparqlOntologyCollector(Datastructures.setToArray(instances), numberOfRecursions, filterMode, Datastructures.setToArray(predList),Datastructures.setToArray( objList),Datastructures.setToArray(classList),format,url,useLits); - String ont=oc.collectOntology(); - - if (dumpToFile){ - String filename=System.currentTimeMillis()+".nt"; - String basedir="cache"+File.separator; - try{ - if(!new File(basedir).exists()) - new File(basedir).mkdir(); - FileWriter fw=new FileWriter(new File(basedir+filename),true); - fw.write(ont); - fw.flush(); - fw.close(); - - dumpFile=(new File(basedir+filename)).toURI().toURL(); - }catch (Exception e) {e.printStackTrace();} + try + { + String ont=oc.collectOntology(); + + if (dumpToFile){ + String filename=System.currentTimeMillis()+".nt"; + String basedir="cache"+File.separator; + try{ + if(!new File(basedir).exists()) + new File(basedir).mkdir(); + + FileWriter fw=new FileWriter(new File(basedir+filename),true); + fw.write(ont); + fw.flush(); + fw.close(); + + dumpFile=(new File(basedir+filename)).toURI().toURL(); + }catch (Exception e) {e.printStackTrace();} + } + if (format.equals("KB")) { + try{ + kb=KBParser.parseKBFile(new StringReader(ont)); + } catch(Exception e) {e.printStackTrace();} + } + }catch(IOException e) { + e.printStackTrace(); } - if (format.equals("KB")) { - try{ - kb=KBParser.parseKBFile(new StringReader(ont)); - } catch(Exception e) {e.printStackTrace();} - } - System.out.println("SparqlModul: ****Finished"); } @@ -233,15 +237,24 @@ { System.out.println("SparqlModul: Collecting Subjects"); SparqlOntologyCollector oc=new SparqlOntologyCollector(url); - subjects=oc.getSubjectsFromLabel(label,limit); + try{ + subjects=oc.getSubjectsFromLabel(label,limit); + }catch (IOException e){ + subjects=new String[1]; + subjects[0]="[Error]Sparql Endpoint could not be reached."; + } System.out.println("SparqlModul: ****Finished"); } - public void calculateTriples(){ + public void calculateTriples(String subject) { System.out.println("SparqlModul: Collecting Triples"); - SparqlOntologyCollector oc=new SparqlOntologyCollector(Datastructures.setToArray(instances), numberOfRecursions, filterMode, - Datastructures.setToArray(predList),Datastructures.setToArray( objList),Datastructures.setToArray(classList),format,url,useLits); - triples=oc.collectTriples(); + SparqlOntologyCollector oc=new SparqlOntologyCollector(url); + try{ + triples=oc.collectTriples(subject); + }catch (IOException e){ + triples=new String[1]; + triples[0]="[Error]Sparql Endpoint could not be reached."; + } System.out.println("SparqlModul: ****Finished"); } @@ -249,7 +262,12 @@ { System.out.println("SparqlModul: Collecting Subjects"); SparqlOntologyCollector oc=new SparqlOntologyCollector(url); - conceptSubjects=oc.getSubjectsFromConcept(concept); + try{ + conceptSubjects=oc.getSubjectsFromConcept(concept); + }catch (IOException e){ + conceptSubjects=new String[1]; + conceptSubjects[0]="[Error]Sparql Endpoint could not be reached."; + } System.out.println("SparqlModul: ****Finished"); } Modified: trunk/src/dl-learner/org/dllearner/kb/SparqlFilter.java =================================================================== --- trunk/src/dl-learner/org/dllearner/kb/SparqlFilter.java 2007-11-01 14:49:08 UTC (rev 275) +++ trunk/src/dl-learner/org/dllearner/kb/SparqlFilter.java 2007-11-05 13:03:14 UTC (rev 276) @@ -26,6 +26,7 @@ * see the documentation for more help * * @author Sebastian Hellmann + * @author Sebastian Knappe * */ public class SparqlFilter { @@ -104,7 +105,7 @@ } public SparqlFilter(int mode, String[] pred, String[] obj,boolean uselits) throws Exception{ - this(mode, pred,obj); + this(mode,pred,obj); this.useLiterals=uselits; } Modified: trunk/src/dl-learner/org/dllearner/kb/SparqlOntologyCollector.java =================================================================== --- trunk/src/dl-learner/org/dllearner/kb/SparqlOntologyCollector.java 2007-11-01 14:49:08 UTC (rev 275) +++ trunk/src/dl-learner/org/dllearner/kb/SparqlOntologyCollector.java 2007-11-05 13:03:14 UTC (rev 276) @@ -120,7 +120,7 @@ * * @return all triples in n-triple format */ - public String collectOntology(){ + public String collectOntology() throws IOException{ getRecursiveList(subjectList, numberOfRecursions); finalize(); String ret=""; @@ -130,12 +130,57 @@ return ret; } - public String[] collectTriples(){ - getRecursive(subjectList[0], 1); - return Datastructures.setToArray(triples); + public String[] collectTriples(String subject) throws IOException{ + System.out.println("Searching for Article: "+subject); + String sparql=q.makeArticleQuery(subject); + String FromCache=c.get(subject, sparql); + String xml; + // if not in cache get it from dbpedia + if(FromCache==null){ + xml=sendAndReceive(sparql); + c.put(subject, xml, sparql); + System.out.print("\n"); + } + else{ + xml=FromCache; + System.out.println("FROM CACHE"); + } + + return processArticle(xml); } - public String[] getSubjectsFromLabel(String label, int limit){ + public String[] processArticle(String xml) + { + Vector<String> vec=new Vector<String>(); + String one="<binding name=\"predicate\"><uri>"; + String two="<binding name=\"object\">"; + String end="</uri></binding>"; + String predtmp=""; + String objtmp=""; + ArrayList<String> al=new ArrayList<String>(); + while(xml.indexOf(one)!=-1){ + //get pred + xml=xml.substring(xml.indexOf(one)+one.length()); + predtmp=xml.substring(0,xml.indexOf(end)); + //getobj + xml=xml.substring(xml.indexOf(two)+two.length()); + if (xml.startsWith("<literal xml:lang=\"en\">")){ + xml=xml.substring(xml.indexOf(">")+1); + objtmp=xml.substring(0,xml.indexOf("</literal>")); + } + else if (xml.startsWith("<uri>")) objtmp=xml.substring(5,xml.indexOf(end)); + else continue; + + System.out.println("Pred: "+predtmp+" Obj: "+objtmp); + + vec.add(predtmp+"<"+objtmp); + } + + String[] ret=new String[vec.size()]; + return vec.toArray(ret); + } + + public String[] getSubjectsFromLabel(String label, int limit) throws IOException{ System.out.println("Searching for Label: "+label); String sparql=q.makeLabelQuery(label,limit); String FromCache=c.get(label, sparql); @@ -154,7 +199,7 @@ return processSubjects(xml); } - public String[] getSubjectsFromConcept(String concept) + public String[] getSubjectsFromConcept(String concept) throws IOException { System.out.println("Searching for Subjects of type: "+concept); String sparql=q.makeConceptQuery(concept); @@ -179,7 +224,7 @@ * @param subjects * @param NumberofRecursions */ - public void getRecursiveList(String[] subjects,int NumberofRecursions){ + public void getRecursiveList(String[] subjects,int NumberofRecursions) throws IOException{ for (int i = 0; i < subjects.length; i++) { getRecursive(subjects[i], NumberofRecursions); } @@ -191,36 +236,33 @@ * @param StartingSubject * @param NumberofRecursions */ - public void getRecursive(String StartingSubject,int NumberofRecursions){ + public void getRecursive(String StartingSubject,int NumberofRecursions) throws IOException{ System.out.print("SparqlModul: Depth: "+NumberofRecursions+" @ "+StartingSubject+" "); if(NumberofRecursions<=0) return; else {NumberofRecursions--;} - try{ - String sparql=q.makeQueryFilter(StartingSubject,this.sf); - // checks cache - String FromCache=c.get(StartingSubject, sparql); - String xml; - // if not in cache get it from dbpedia - if(FromCache==null){ - xml=sendAndReceive(sparql); - c.put(StartingSubject, xml, sparql); - System.out.print("\n"); - } - else{ - xml=FromCache; - System.out.println("FROM CACHE"); - } - // get new Subjects - String[] newSubjects=processResult(StartingSubject,xml); + String sparql=q.makeQueryFilter(StartingSubject,this.sf); + // checks cache + String FromCache=c.get(StartingSubject, sparql); + String xml; + // if not in cache get it from dbpedia + if(FromCache==null){ + xml=sendAndReceive(sparql); + c.put(StartingSubject, xml, sparql); + System.out.print("\n"); + } + else{ + xml=FromCache; + System.out.println("FROM CACHE"); + } + + // get new Subjects + String[] newSubjects=processResult(StartingSubject,xml); - for (int i = 0; (i < newSubjects.length)&& NumberofRecursions!=0; i++) { - getRecursive(newSubjects[i], NumberofRecursions); - } - - }catch (Exception e) {e.printStackTrace();} - + for (int i = 0; (i < newSubjects.length)&& NumberofRecursions!=0; i++) { + getRecursive(newSubjects[i], NumberofRecursions); + } } /** @@ -427,49 +469,43 @@ } } //TODO alles dbpedia-spezifische rausbekommen - private String sendAndReceive(String sparql) { + private String sendAndReceive(String sparql) throws IOException{ StringBuilder answer = new StringBuilder(); // String an Sparql-Endpoint schicken HttpURLConnection connection; - try { - connection = (HttpURLConnection) url.openConnection(); - connection.setDoOutput(true); + connection = (HttpURLConnection) url.openConnection(); + connection.setDoOutput(true); - connection.addRequestProperty("Host", "dbpedia.openlinksw.com"); - 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","ISO-8859-1,utf-8;q=0.7,*;q=0.7"); - 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"); + connection.addRequestProperty("Host", "dbpedia.openlinksw.com"); + 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); - osw.write("default-graph-uri=http%3A%2F%2Fdbpedia.org&query=" + - URLEncoder.encode(sparql, "UTF-8")+ - "&format=application%2Fsparql-results%2Bxml"); - osw.close(); + OutputStream os = connection.getOutputStream(); + OutputStreamWriter osw = new OutputStreamWriter(os); + osw.write("default-graph-uri=http%3A%2F%2Fdbpedia.org&query=" + + URLEncoder.encode(sparql, "UTF-8")+ + "&format=application%2Fsparql-results%2Bxml"); + osw.close(); - // receive answer - InputStream is = connection.getInputStream(); - InputStreamReader isr = new InputStreamReader(is); - BufferedReader br = new BufferedReader(isr); + // 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); + String line; + do { + line = br.readLine(); + if(line!=null) + answer.append(line); + } while (line != null); + + br.close(); - br.close(); - - } catch (IOException e) { - System.out.println("Communication problem with Sparql Server."); - System.exit(0); - } - return answer.toString(); } } \ No newline at end of file Modified: trunk/src/dl-learner/org/dllearner/kb/SparqlQueryMaker.java =================================================================== --- trunk/src/dl-learner/org/dllearner/kb/SparqlQueryMaker.java 2007-11-01 14:49:08 UTC (rev 275) +++ trunk/src/dl-learner/org/dllearner/kb/SparqlQueryMaker.java 2007-11-05 13:03:14 UTC (rev 276) @@ -24,13 +24,14 @@ * This class produces sparql queries * * @author Sebastian Hellmann + * @author Sebastian Knappe * */ public class SparqlQueryMaker { /** - * reads all the options and makes the sparql query accordingly - * @param subject + * creates a query with the specified filters for alls triples with subject + * @param subject the searched subject * @param sf special object encapsulating all options * @return sparql query */ @@ -78,15 +79,31 @@ return "&&( !regex(str(?predicate), '"+ns+"') )"; } + /** + * creates a query for subjects with the specified label + * @param label a phrase that is part of the label of a subject + * @param limit this limits the amount of results + * @return + */ public String makeLabelQuery(String label,int limit){ - return "PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#>\n"+ - "SELECT DISTINCT ?subject\n"+ - "WHERE { ?subject rdfs:label ?object.FILTER regex(?object,\""+label+"\"@en)}\n"+ + //TODO maybe use http://xmlns:com/foaf/0.1/page + return "SELECT DISTINCT ?subject\n"+ + "WHERE { ?subject <http://xmlns.com/foaf/0.1/page> ?object.FILTER regex(?object,\""+label+"\"@en)}\n"+ "LIMIT "+limit; } + /** + * creates a query for all subjects that are of the type concept + * @param concept the type that subjects are searched for + * @return + */ public String makeConceptQuery(String concept){ return "SELECT DISTINCT ?subject\n"+ "WHERE { ?subject a <"+concept+">}\n"; } + + public String makeArticleQuery(String subject){ + return "SELECT ?predicate,?object\n"+ + "WHERE { <"+subject+"> ?predicate ?object}\n"; + } } Modified: trunk/src/dl-learner/org/dllearner/server/DLLearnerWS.java =================================================================== --- trunk/src/dl-learner/org/dllearner/server/DLLearnerWS.java 2007-11-01 14:49:08 UTC (rev 275) +++ trunk/src/dl-learner/org/dllearner/server/DLLearnerWS.java 2007-11-05 13:03:14 UTC (rev 276) @@ -20,6 +20,8 @@ package org.dllearner.server; import java.util.Arrays; +import java.util.Calendar; +import java.util.Date; import java.util.List; import java.util.Map; import java.util.Random; @@ -474,12 +476,13 @@ } }; } else if (method.equals("triples")){ + final String subject=options[1]; thread = new Thread() { @Override public void run() { ((SparqlEndpoint)component).setTriplesThread(this); ((SparqlEndpoint)component).setTriplesThreadRunning(true); - ((SparqlEndpoint)component).calculateTriples(); + ((SparqlEndpoint)component).calculateTriples(subject); ((SparqlEndpoint)component).setTriplesThreadRunning(false); } }; @@ -540,8 +543,8 @@ } @WebMethod - public void debug(String deb) + public String debug(String deb) { - System.out.println(deb); + return "Test"; } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |