1 | /* |
---|
2 | * To change this license header, choose License Headers in Project Properties. |
---|
3 | * To change this template file, choose Tools | Templates |
---|
4 | * and open the template in the editor. |
---|
5 | */ |
---|
6 | |
---|
7 | package org.biohackathon.SPARQLBuilder.OWL; |
---|
8 | |
---|
9 | import com.hp.hpl.jena.query.*; |
---|
10 | import com.hp.hpl.jena.sparql.engine.http.QueryEngineHTTP; |
---|
11 | import java.util.*; |
---|
12 | |
---|
13 | /** |
---|
14 | * |
---|
15 | * @author atsuko |
---|
16 | */ |
---|
17 | public class EndpointAccess { |
---|
18 | static public boolean checkPath(String startClass, List<ClassLink> classlinks, String sparqlEndpoint){ |
---|
19 | // SPARQL Query construction |
---|
20 | StringBuilder queryStr = new StringBuilder(); |
---|
21 | queryStr.append("PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>\n"); |
---|
22 | queryStr.append("PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n"); |
---|
23 | queryStr.append("ASK { \n"); |
---|
24 | |
---|
25 | ListIterator<ClassLink> cit = classlinks.listIterator(); |
---|
26 | queryStr.append("?r0").append(" rdf:type <").append(startClass).append("> .\n"); |
---|
27 | int i = 0; |
---|
28 | while( cit.hasNext() ){ |
---|
29 | ClassLink link = cit.next(); |
---|
30 | //String next = link.getLinkedClassURI(); |
---|
31 | String sval = "?r".concat(Integer.toString(i)); |
---|
32 | String oval = "?r".concat(Integer.toString(i+1)); |
---|
33 | queryStr.append(oval).append(" rdf:type <").append(link.getLinkedClassURI()).append("> .\n"); |
---|
34 | if( link.getDirection() == Direction.forward ){ |
---|
35 | queryStr.append(sval).append(" <").append(link.getPropertyURI()).append("> ") |
---|
36 | .append(oval).append(" .\n"); |
---|
37 | }else{ |
---|
38 | queryStr.append(oval).append(" <").append(link.getPropertyURI()).append("> ") |
---|
39 | .append(sval).append(" .\n"); |
---|
40 | } |
---|
41 | i++; |
---|
42 | } |
---|
43 | queryStr.append("} \n"); |
---|
44 | |
---|
45 | String sparqlQuery = queryStr.toString(); |
---|
46 | Query query = QueryFactory.create(sparqlQuery, Syntax.syntaxARQ); |
---|
47 | /* |
---|
48 | QueryEngineHTTP httpQuery = new QueryEngineHTTP(sparqlEndpoint, query); |
---|
49 | boolean res = httpQuery.execAsk(); |
---|
50 | httpQuery.close(); |
---|
51 | */ |
---|
52 | QueryExecution qexec = QueryExecutionFactory.sparqlService(sparqlEndpoint, query); |
---|
53 | boolean res = qexec.execAsk(); |
---|
54 | qexec.close(); |
---|
55 | return res; |
---|
56 | } |
---|
57 | |
---|
58 | static public boolean checkSimplePath(List<Integer> nodes, OWLClassGraph ocg, String sparqlEndpoint){ |
---|
59 | // SPARQL Query construction |
---|
60 | StringBuilder queryStr = new StringBuilder(); |
---|
61 | queryStr.append("PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>\n"); |
---|
62 | queryStr.append("PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n"); |
---|
63 | queryStr.append("ASK { \n"); |
---|
64 | |
---|
65 | ListIterator<Integer> cit = nodes.listIterator(); |
---|
66 | queryStr.append("?r0").append(" rdf:type <").append(ocg.labels.get(cit.next())).append("> .\n"); |
---|
67 | int i = 0; |
---|
68 | while( cit.hasNext() ){ |
---|
69 | String cURI = ocg.labels.get(cit.next()); |
---|
70 | //String next = link.getLinkedClassURI(); |
---|
71 | String sval = "?r".concat(Integer.toString(i)); |
---|
72 | String pval = "?p".concat(Integer.toString(i)); |
---|
73 | String oval = "?r".concat(Integer.toString(i+1)); |
---|
74 | queryStr.append(oval).append(" rdf:type <").append(cURI).append("> .\n"); |
---|
75 | queryStr.append("{{"); |
---|
76 | queryStr.append(sval).append(" ").append(pval).append(" ") |
---|
77 | .append(oval).append(" }\n UNION\n {"); |
---|
78 | queryStr.append(oval).append(" ").append(pval).append(" ") |
---|
79 | .append(sval).append(" }}\n"); |
---|
80 | i++; |
---|
81 | } |
---|
82 | queryStr.append("} \n"); |
---|
83 | |
---|
84 | String sparqlQuery = queryStr.toString(); |
---|
85 | System.out.println("Ask Simple"); |
---|
86 | System.out.println(sparqlQuery); |
---|
87 | Query query = QueryFactory.create(sparqlQuery, Syntax.syntaxARQ); |
---|
88 | /* |
---|
89 | QueryEngineHTTP httpQuery = new QueryEngineHTTP(sparqlEndpoint, query); |
---|
90 | boolean res = httpQuery.execAsk(); |
---|
91 | httpQuery.close(); |
---|
92 | */ |
---|
93 | QueryExecution qexec = QueryExecutionFactory.sparqlService(sparqlEndpoint, query); |
---|
94 | boolean res = qexec.execAsk(); |
---|
95 | qexec.close(); |
---|
96 | return res; |
---|
97 | } |
---|
98 | |
---|
99 | static public boolean check3SimplePath(Integer node1, Integer node2, Integer node3, OWLClassGraph ocg, String sparqlEndpoint){ |
---|
100 | // SPARQL Query construction |
---|
101 | StringBuilder queryStr = new StringBuilder(); |
---|
102 | queryStr.append("PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>\n"); |
---|
103 | queryStr.append("PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n"); |
---|
104 | queryStr.append("ASK { \n"); |
---|
105 | |
---|
106 | queryStr.append("?n1").append(" rdf:type <").append(ocg.labels.get(node1)).append("> .\n"); |
---|
107 | queryStr.append("?n2").append(" rdf:type <").append(ocg.labels.get(node2)).append("> .\n"); |
---|
108 | queryStr.append("?n3").append(" rdf:type <").append(ocg.labels.get(node3)).append("> .\n"); |
---|
109 | |
---|
110 | queryStr.append("{{"); |
---|
111 | queryStr.append("?n1").append(" ").append("?p1").append(" ") |
---|
112 | .append("?n2").append(" }\n UNION\n {"); |
---|
113 | queryStr.append("?n2").append(" ").append("?p1").append(" ") |
---|
114 | .append("?n1").append(" }}\n"); |
---|
115 | |
---|
116 | queryStr.append("{{"); |
---|
117 | queryStr.append("?n2").append(" ").append("?p2").append(" ") |
---|
118 | .append("?n3").append(" }\n UNION\n {"); |
---|
119 | queryStr.append("?n3").append(" ").append("?p2").append(" ") |
---|
120 | .append("?n2").append(" }}\n"); |
---|
121 | |
---|
122 | queryStr.append("} \n"); |
---|
123 | |
---|
124 | String sparqlQuery = queryStr.toString(); |
---|
125 | System.out.println("Ask Simple3"); |
---|
126 | System.out.println(sparqlQuery); |
---|
127 | Query query = QueryFactory.create(sparqlQuery, Syntax.syntaxARQ); |
---|
128 | /* |
---|
129 | QueryEngineHTTP httpQuery = new QueryEngineHTTP(sparqlEndpoint, query); |
---|
130 | boolean res = httpQuery.execAsk(); |
---|
131 | httpQuery.close(); |
---|
132 | */ |
---|
133 | QueryExecution qexec = QueryExecutionFactory.sparqlService(sparqlEndpoint, query); |
---|
134 | boolean res = qexec.execAsk(); |
---|
135 | qexec.close(); |
---|
136 | return res; |
---|
137 | } |
---|
138 | |
---|
139 | static public boolean check3SimplePathwithJoin(Integer node1, Integer node2, Integer node3, OWLClassGraph ocg, String sparqlEndpoint){ |
---|
140 | StringBuilder queryStr = new StringBuilder(); |
---|
141 | queryStr.append("PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n"); |
---|
142 | queryStr.append("SELECT DISTINCT ?n2 { \n"); |
---|
143 | |
---|
144 | queryStr.append("?n1").append(" rdf:type <").append(ocg.labels.get(node1)).append("> .\n"); |
---|
145 | queryStr.append("?n2").append(" rdf:type <").append(ocg.labels.get(node2)).append("> .\n"); |
---|
146 | |
---|
147 | queryStr.append("{{"); |
---|
148 | queryStr.append("?n1").append(" ").append("?p1").append(" ") |
---|
149 | .append("?n2").append(" }\n UNION\n {"); |
---|
150 | queryStr.append("?n2").append(" ").append("?p1").append(" ") |
---|
151 | .append("?n1").append(" }}\n"); |
---|
152 | |
---|
153 | queryStr.append("} \n"); |
---|
154 | |
---|
155 | String sparqlQuery = queryStr.toString(); |
---|
156 | System.out.println("SELECT Simple3 by Join"); |
---|
157 | System.out.println(sparqlQuery); |
---|
158 | Query query = QueryFactory.create(sparqlQuery, Syntax.syntaxARQ); |
---|
159 | QueryExecution qexec = QueryExecutionFactory.sparqlService(sparqlEndpoint, query); |
---|
160 | ResultSet res1 = qexec.execSelect(); |
---|
161 | qexec.close(); |
---|
162 | |
---|
163 | queryStr = new StringBuilder(); |
---|
164 | queryStr.append("PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n"); |
---|
165 | queryStr.append("SELECT DISTINCT ?n2 { \n"); |
---|
166 | |
---|
167 | queryStr.append("?n2").append(" rdf:type <").append(ocg.labels.get(node2)).append("> .\n"); |
---|
168 | queryStr.append("?n3").append(" rdf:type <").append(ocg.labels.get(node3)).append("> .\n"); |
---|
169 | |
---|
170 | queryStr.append("{{"); |
---|
171 | queryStr.append("?n2").append(" ").append("?p2").append(" ") |
---|
172 | .append("?n3").append(" }\n UNION\n {"); |
---|
173 | queryStr.append("?n3").append(" ").append("?p2").append(" ") |
---|
174 | .append("?n2").append(" }}\n"); |
---|
175 | |
---|
176 | queryStr.append("} \n"); |
---|
177 | |
---|
178 | sparqlQuery = queryStr.toString(); |
---|
179 | System.out.println("SELECT Simple3 by Join 2"); |
---|
180 | System.out.println(sparqlQuery); |
---|
181 | query = QueryFactory.create(sparqlQuery, Syntax.syntaxARQ); |
---|
182 | qexec = QueryExecutionFactory.sparqlService(sparqlEndpoint, query); |
---|
183 | ResultSet res2 = qexec.execSelect(); |
---|
184 | qexec.close(); |
---|
185 | |
---|
186 | Set<String> res1hash = new HashSet<String>(); |
---|
187 | while(res1.hasNext()){ |
---|
188 | String resstr = res1.next().toString(); |
---|
189 | res1hash.add(resstr); |
---|
190 | } |
---|
191 | while(res2.hasNext()){ |
---|
192 | if ( res1hash.contains(res2.next().toString())){ |
---|
193 | return true; |
---|
194 | } |
---|
195 | } |
---|
196 | return false; |
---|
197 | } |
---|
198 | } |
---|