Mercurial > repos > mikel-egana-aranguren > sparql_galaxy
annotate src/es/cbgp/galaxy/sparql/jena/SPARQLQueryEngine.java @ 2:b8bf1af83841 draft
Paste query added, query engine improved, examples added
author | Mikel Egana Aranguren <mikel-egana-aranguren@toolshed.g2.bx.psu.edu> |
---|---|
date | Wed, 04 Dec 2013 08:17:00 +0100 |
parents | 137f9a4a6337 |
children |
rev | line source |
---|---|
0
137f9a4a6337
First version to init the repo, still README etc to add but it works
mikel-egana-aranguren
parents:
diff
changeset
|
1 package es.cbgp.galaxy.sparql.jena; |
137f9a4a6337
First version to init the repo, still README etc to add but it works
mikel-egana-aranguren
parents:
diff
changeset
|
2 |
137f9a4a6337
First version to init the repo, still README etc to add but it works
mikel-egana-aranguren
parents:
diff
changeset
|
3 import java.io.BufferedReader; |
137f9a4a6337
First version to init the repo, still README etc to add but it works
mikel-egana-aranguren
parents:
diff
changeset
|
4 import java.io.FileReader; |
137f9a4a6337
First version to init the repo, still README etc to add but it works
mikel-egana-aranguren
parents:
diff
changeset
|
5 import java.util.Iterator; |
137f9a4a6337
First version to init the repo, still README etc to add but it works
mikel-egana-aranguren
parents:
diff
changeset
|
6 |
137f9a4a6337
First version to init the repo, still README etc to add but it works
mikel-egana-aranguren
parents:
diff
changeset
|
7 import com.hp.hpl.jena.query.*; |
2
b8bf1af83841
Paste query added, query engine improved, examples added
Mikel Egana Aranguren <mikel-egana-aranguren@toolshed.g2.bx.psu.edu>
parents:
0
diff
changeset
|
8 import com.hp.hpl.jena.rdf.model.Model; |
b8bf1af83841
Paste query added, query engine improved, examples added
Mikel Egana Aranguren <mikel-egana-aranguren@toolshed.g2.bx.psu.edu>
parents:
0
diff
changeset
|
9 import com.hp.hpl.jena.rdf.model.RDFNode; |
0
137f9a4a6337
First version to init the repo, still README etc to add but it works
mikel-egana-aranguren
parents:
diff
changeset
|
10 import com.hp.hpl.jena.shared.Lock; |
137f9a4a6337
First version to init the repo, still README etc to add but it works
mikel-egana-aranguren
parents:
diff
changeset
|
11 |
137f9a4a6337
First version to init the repo, still README etc to add but it works
mikel-egana-aranguren
parents:
diff
changeset
|
12 public class SPARQLQueryEngine { |
137f9a4a6337
First version to init the repo, still README etc to add but it works
mikel-egana-aranguren
parents:
diff
changeset
|
13 |
2
b8bf1af83841
Paste query added, query engine improved, examples added
Mikel Egana Aranguren <mikel-egana-aranguren@toolshed.g2.bx.psu.edu>
parents:
0
diff
changeset
|
14 private Model queryModel; |
0
137f9a4a6337
First version to init the repo, still README etc to add but it works
mikel-egana-aranguren
parents:
diff
changeset
|
15 private String sparqlFile; |
137f9a4a6337
First version to init the repo, still README etc to add but it works
mikel-egana-aranguren
parents:
diff
changeset
|
16 |
2
b8bf1af83841
Paste query added, query engine improved, examples added
Mikel Egana Aranguren <mikel-egana-aranguren@toolshed.g2.bx.psu.edu>
parents:
0
diff
changeset
|
17 public SPARQLQueryEngine(Model om) { |
0
137f9a4a6337
First version to init the repo, still README etc to add but it works
mikel-egana-aranguren
parents:
diff
changeset
|
18 this.queryModel = om; |
137f9a4a6337
First version to init the repo, still README etc to add but it works
mikel-egana-aranguren
parents:
diff
changeset
|
19 } |
137f9a4a6337
First version to init the repo, still README etc to add but it works
mikel-egana-aranguren
parents:
diff
changeset
|
20 |
137f9a4a6337
First version to init the repo, still README etc to add but it works
mikel-egana-aranguren
parents:
diff
changeset
|
21 public String executeQuery() throws Exception { |
137f9a4a6337
First version to init the repo, still README etc to add but it works
mikel-egana-aranguren
parents:
diff
changeset
|
22 String finalQuery = loadQueryFromFile(); |
137f9a4a6337
First version to init the repo, still README etc to add but it works
mikel-egana-aranguren
parents:
diff
changeset
|
23 // System.out.println("Final query: " + finalQuery); |
137f9a4a6337
First version to init the repo, still README etc to add but it works
mikel-egana-aranguren
parents:
diff
changeset
|
24 Query query = null; |
137f9a4a6337
First version to init the repo, still README etc to add but it works
mikel-egana-aranguren
parents:
diff
changeset
|
25 QueryExecution qexec = null; |
137f9a4a6337
First version to init the repo, still README etc to add but it works
mikel-egana-aranguren
parents:
diff
changeset
|
26 try { |
137f9a4a6337
First version to init the repo, still README etc to add but it works
mikel-egana-aranguren
parents:
diff
changeset
|
27 queryModel.enterCriticalSection(Lock.READ); |
137f9a4a6337
First version to init the repo, still README etc to add but it works
mikel-egana-aranguren
parents:
diff
changeset
|
28 query = QueryFactory.create(finalQuery); |
137f9a4a6337
First version to init the repo, still README etc to add but it works
mikel-egana-aranguren
parents:
diff
changeset
|
29 qexec = QueryExecutionFactory.create(query, queryModel); |
137f9a4a6337
First version to init the repo, still README etc to add but it works
mikel-egana-aranguren
parents:
diff
changeset
|
30 ResultSet results = qexec.execSelect(); |
137f9a4a6337
First version to init the repo, still README etc to add but it works
mikel-egana-aranguren
parents:
diff
changeset
|
31 String res = ""; |
137f9a4a6337
First version to init the repo, still README etc to add but it works
mikel-egana-aranguren
parents:
diff
changeset
|
32 while (results.hasNext()) { |
137f9a4a6337
First version to init the repo, still README etc to add but it works
mikel-egana-aranguren
parents:
diff
changeset
|
33 QuerySolution qs = results.next(); |
137f9a4a6337
First version to init the repo, still README etc to add but it works
mikel-egana-aranguren
parents:
diff
changeset
|
34 Iterator<String> vars = qs.varNames(); |
137f9a4a6337
First version to init the repo, still README etc to add but it works
mikel-egana-aranguren
parents:
diff
changeset
|
35 while (vars.hasNext()) { |
137f9a4a6337
First version to init the repo, still README etc to add but it works
mikel-egana-aranguren
parents:
diff
changeset
|
36 String var = vars.next(); |
2
b8bf1af83841
Paste query added, query engine improved, examples added
Mikel Egana Aranguren <mikel-egana-aranguren@toolshed.g2.bx.psu.edu>
parents:
0
diff
changeset
|
37 res += "?" + var + "\t" + getValue(qs, var) + "\r\n"; |
b8bf1af83841
Paste query added, query engine improved, examples added
Mikel Egana Aranguren <mikel-egana-aranguren@toolshed.g2.bx.psu.edu>
parents:
0
diff
changeset
|
38 |
0
137f9a4a6337
First version to init the repo, still README etc to add but it works
mikel-egana-aranguren
parents:
diff
changeset
|
39 } |
137f9a4a6337
First version to init the repo, still README etc to add but it works
mikel-egana-aranguren
parents:
diff
changeset
|
40 } |
137f9a4a6337
First version to init the repo, still README etc to add but it works
mikel-egana-aranguren
parents:
diff
changeset
|
41 return res; |
137f9a4a6337
First version to init the repo, still README etc to add but it works
mikel-egana-aranguren
parents:
diff
changeset
|
42 } catch (Exception e) { |
137f9a4a6337
First version to init the repo, still README etc to add but it works
mikel-egana-aranguren
parents:
diff
changeset
|
43 e.printStackTrace(); |
137f9a4a6337
First version to init the repo, still README etc to add but it works
mikel-egana-aranguren
parents:
diff
changeset
|
44 } finally { |
137f9a4a6337
First version to init the repo, still README etc to add but it works
mikel-egana-aranguren
parents:
diff
changeset
|
45 queryModel.leaveCriticalSection(); |
137f9a4a6337
First version to init the repo, still README etc to add but it works
mikel-egana-aranguren
parents:
diff
changeset
|
46 if (qexec != null) { |
137f9a4a6337
First version to init the repo, still README etc to add but it works
mikel-egana-aranguren
parents:
diff
changeset
|
47 qexec.close(); |
137f9a4a6337
First version to init the repo, still README etc to add but it works
mikel-egana-aranguren
parents:
diff
changeset
|
48 } |
137f9a4a6337
First version to init the repo, still README etc to add but it works
mikel-egana-aranguren
parents:
diff
changeset
|
49 } |
137f9a4a6337
First version to init the repo, still README etc to add but it works
mikel-egana-aranguren
parents:
diff
changeset
|
50 return null; |
137f9a4a6337
First version to init the repo, still README etc to add but it works
mikel-egana-aranguren
parents:
diff
changeset
|
51 } |
137f9a4a6337
First version to init the repo, still README etc to add but it works
mikel-egana-aranguren
parents:
diff
changeset
|
52 |
2
b8bf1af83841
Paste query added, query engine improved, examples added
Mikel Egana Aranguren <mikel-egana-aranguren@toolshed.g2.bx.psu.edu>
parents:
0
diff
changeset
|
53 private String getValue(QuerySolution qs, String var) { |
b8bf1af83841
Paste query added, query engine improved, examples added
Mikel Egana Aranguren <mikel-egana-aranguren@toolshed.g2.bx.psu.edu>
parents:
0
diff
changeset
|
54 RDFNode n = qs.get(var); |
b8bf1af83841
Paste query added, query engine improved, examples added
Mikel Egana Aranguren <mikel-egana-aranguren@toolshed.g2.bx.psu.edu>
parents:
0
diff
changeset
|
55 return n.toString(); |
b8bf1af83841
Paste query added, query engine improved, examples added
Mikel Egana Aranguren <mikel-egana-aranguren@toolshed.g2.bx.psu.edu>
parents:
0
diff
changeset
|
56 |
b8bf1af83841
Paste query added, query engine improved, examples added
Mikel Egana Aranguren <mikel-egana-aranguren@toolshed.g2.bx.psu.edu>
parents:
0
diff
changeset
|
57 // System.out.println("RDFNode (" + var + "): " + n); |
b8bf1af83841
Paste query added, query engine improved, examples added
Mikel Egana Aranguren <mikel-egana-aranguren@toolshed.g2.bx.psu.edu>
parents:
0
diff
changeset
|
58 // try { |
b8bf1af83841
Paste query added, query engine improved, examples added
Mikel Egana Aranguren <mikel-egana-aranguren@toolshed.g2.bx.psu.edu>
parents:
0
diff
changeset
|
59 // if (!qs.getResource(var).isAnon()) { |
b8bf1af83841
Paste query added, query engine improved, examples added
Mikel Egana Aranguren <mikel-egana-aranguren@toolshed.g2.bx.psu.edu>
parents:
0
diff
changeset
|
60 // if (qs.getResource(var).isResource()) { |
b8bf1af83841
Paste query added, query engine improved, examples added
Mikel Egana Aranguren <mikel-egana-aranguren@toolshed.g2.bx.psu.edu>
parents:
0
diff
changeset
|
61 // return qs.getResource(var).toString(); |
b8bf1af83841
Paste query added, query engine improved, examples added
Mikel Egana Aranguren <mikel-egana-aranguren@toolshed.g2.bx.psu.edu>
parents:
0
diff
changeset
|
62 // } |
b8bf1af83841
Paste query added, query engine improved, examples added
Mikel Egana Aranguren <mikel-egana-aranguren@toolshed.g2.bx.psu.edu>
parents:
0
diff
changeset
|
63 // if (qs.getResource(var).isLiteral()) { |
b8bf1af83841
Paste query added, query engine improved, examples added
Mikel Egana Aranguren <mikel-egana-aranguren@toolshed.g2.bx.psu.edu>
parents:
0
diff
changeset
|
64 // return qs.getLiteral(var).toString(); |
b8bf1af83841
Paste query added, query engine improved, examples added
Mikel Egana Aranguren <mikel-egana-aranguren@toolshed.g2.bx.psu.edu>
parents:
0
diff
changeset
|
65 // } |
b8bf1af83841
Paste query added, query engine improved, examples added
Mikel Egana Aranguren <mikel-egana-aranguren@toolshed.g2.bx.psu.edu>
parents:
0
diff
changeset
|
66 // } |
b8bf1af83841
Paste query added, query engine improved, examples added
Mikel Egana Aranguren <mikel-egana-aranguren@toolshed.g2.bx.psu.edu>
parents:
0
diff
changeset
|
67 // } catch (Exception e) { |
b8bf1af83841
Paste query added, query engine improved, examples added
Mikel Egana Aranguren <mikel-egana-aranguren@toolshed.g2.bx.psu.edu>
parents:
0
diff
changeset
|
68 // |
b8bf1af83841
Paste query added, query engine improved, examples added
Mikel Egana Aranguren <mikel-egana-aranguren@toolshed.g2.bx.psu.edu>
parents:
0
diff
changeset
|
69 // } |
b8bf1af83841
Paste query added, query engine improved, examples added
Mikel Egana Aranguren <mikel-egana-aranguren@toolshed.g2.bx.psu.edu>
parents:
0
diff
changeset
|
70 // try { |
b8bf1af83841
Paste query added, query engine improved, examples added
Mikel Egana Aranguren <mikel-egana-aranguren@toolshed.g2.bx.psu.edu>
parents:
0
diff
changeset
|
71 // if (!qs.getLiteral(var).isAnon()) { |
b8bf1af83841
Paste query added, query engine improved, examples added
Mikel Egana Aranguren <mikel-egana-aranguren@toolshed.g2.bx.psu.edu>
parents:
0
diff
changeset
|
72 // if (qs.getResource(var).isResource()) { |
b8bf1af83841
Paste query added, query engine improved, examples added
Mikel Egana Aranguren <mikel-egana-aranguren@toolshed.g2.bx.psu.edu>
parents:
0
diff
changeset
|
73 // return qs.getResource(var).toString(); |
b8bf1af83841
Paste query added, query engine improved, examples added
Mikel Egana Aranguren <mikel-egana-aranguren@toolshed.g2.bx.psu.edu>
parents:
0
diff
changeset
|
74 // } |
b8bf1af83841
Paste query added, query engine improved, examples added
Mikel Egana Aranguren <mikel-egana-aranguren@toolshed.g2.bx.psu.edu>
parents:
0
diff
changeset
|
75 // if (qs.getResource(var).isLiteral()) { |
b8bf1af83841
Paste query added, query engine improved, examples added
Mikel Egana Aranguren <mikel-egana-aranguren@toolshed.g2.bx.psu.edu>
parents:
0
diff
changeset
|
76 // return qs.getLiteral(var).toString(); |
b8bf1af83841
Paste query added, query engine improved, examples added
Mikel Egana Aranguren <mikel-egana-aranguren@toolshed.g2.bx.psu.edu>
parents:
0
diff
changeset
|
77 // } |
b8bf1af83841
Paste query added, query engine improved, examples added
Mikel Egana Aranguren <mikel-egana-aranguren@toolshed.g2.bx.psu.edu>
parents:
0
diff
changeset
|
78 // } |
b8bf1af83841
Paste query added, query engine improved, examples added
Mikel Egana Aranguren <mikel-egana-aranguren@toolshed.g2.bx.psu.edu>
parents:
0
diff
changeset
|
79 // } catch (Exception e) { |
b8bf1af83841
Paste query added, query engine improved, examples added
Mikel Egana Aranguren <mikel-egana-aranguren@toolshed.g2.bx.psu.edu>
parents:
0
diff
changeset
|
80 // |
b8bf1af83841
Paste query added, query engine improved, examples added
Mikel Egana Aranguren <mikel-egana-aranguren@toolshed.g2.bx.psu.edu>
parents:
0
diff
changeset
|
81 // } |
b8bf1af83841
Paste query added, query engine improved, examples added
Mikel Egana Aranguren <mikel-egana-aranguren@toolshed.g2.bx.psu.edu>
parents:
0
diff
changeset
|
82 // return "Error"; |
b8bf1af83841
Paste query added, query engine improved, examples added
Mikel Egana Aranguren <mikel-egana-aranguren@toolshed.g2.bx.psu.edu>
parents:
0
diff
changeset
|
83 } |
b8bf1af83841
Paste query added, query engine improved, examples added
Mikel Egana Aranguren <mikel-egana-aranguren@toolshed.g2.bx.psu.edu>
parents:
0
diff
changeset
|
84 |
0
137f9a4a6337
First version to init the repo, still README etc to add but it works
mikel-egana-aranguren
parents:
diff
changeset
|
85 private String loadQueryFromFile() throws Exception { |
137f9a4a6337
First version to init the repo, still README etc to add but it works
mikel-egana-aranguren
parents:
diff
changeset
|
86 String query = ""; |
137f9a4a6337
First version to init the repo, still README etc to add but it works
mikel-egana-aranguren
parents:
diff
changeset
|
87 BufferedReader bL = new BufferedReader(new FileReader(this.sparqlFile)); |
137f9a4a6337
First version to init the repo, still README etc to add but it works
mikel-egana-aranguren
parents:
diff
changeset
|
88 while (bL.ready()) { |
137f9a4a6337
First version to init the repo, still README etc to add but it works
mikel-egana-aranguren
parents:
diff
changeset
|
89 query += bL.readLine(); |
137f9a4a6337
First version to init the repo, still README etc to add but it works
mikel-egana-aranguren
parents:
diff
changeset
|
90 } |
137f9a4a6337
First version to init the repo, still README etc to add but it works
mikel-egana-aranguren
parents:
diff
changeset
|
91 bL.close(); |
137f9a4a6337
First version to init the repo, still README etc to add but it works
mikel-egana-aranguren
parents:
diff
changeset
|
92 return query; |
137f9a4a6337
First version to init the repo, still README etc to add but it works
mikel-egana-aranguren
parents:
diff
changeset
|
93 } |
137f9a4a6337
First version to init the repo, still README etc to add but it works
mikel-egana-aranguren
parents:
diff
changeset
|
94 |
137f9a4a6337
First version to init the repo, still README etc to add but it works
mikel-egana-aranguren
parents:
diff
changeset
|
95 public void setQueryFile(String sparqlFile) { |
137f9a4a6337
First version to init the repo, still README etc to add but it works
mikel-egana-aranguren
parents:
diff
changeset
|
96 this.sparqlFile = sparqlFile; |
137f9a4a6337
First version to init the repo, still README etc to add but it works
mikel-egana-aranguren
parents:
diff
changeset
|
97 } |
137f9a4a6337
First version to init the repo, still README etc to add but it works
mikel-egana-aranguren
parents:
diff
changeset
|
98 } |