aboutsummaryrefslogtreecommitdiff
path: root/src/uk/ac/ox/cs/pagoda/reasoner/light/BasicQueryEngine.java
diff options
context:
space:
mode:
authorRncLsn <rnc.lsn@gmail.com>2015-05-28 17:11:35 +0100
committerRncLsn <rnc.lsn@gmail.com>2015-05-28 17:11:35 +0100
commitde3749532d060f26c966a81c03f9a5d846c33d06 (patch)
tree6cc5ba2837dc3c167b100f5e8be4e8c16da7be98 /src/uk/ac/ox/cs/pagoda/reasoner/light/BasicQueryEngine.java
parent4298cdef8e551325cd16b4e24ae6699c44b60751 (diff)
downloadACQuA-de3749532d060f26c966a81c03f9a5d846c33d06.tar.gz
ACQuA-de3749532d060f26c966a81c03f9a5d846c33d06.zip
Merged updates from upstream.
Diffstat (limited to 'src/uk/ac/ox/cs/pagoda/reasoner/light/BasicQueryEngine.java')
-rw-r--r--src/uk/ac/ox/cs/pagoda/reasoner/light/BasicQueryEngine.java154
1 files changed, 75 insertions, 79 deletions
diff --git a/src/uk/ac/ox/cs/pagoda/reasoner/light/BasicQueryEngine.java b/src/uk/ac/ox/cs/pagoda/reasoner/light/BasicQueryEngine.java
index 5d2e411..9aa6235 100644
--- a/src/uk/ac/ox/cs/pagoda/reasoner/light/BasicQueryEngine.java
+++ b/src/uk/ac/ox/cs/pagoda/reasoner/light/BasicQueryEngine.java
@@ -19,16 +19,18 @@ import java.util.*;
19 19
20public class BasicQueryEngine extends RDFoxQueryEngine { 20public class BasicQueryEngine extends RDFoxQueryEngine {
21 21
22 protected DataStore store; 22 protected DataStore store;
23 protected Parameters parameters = new Parameters(); 23 protected Parameters parameters = new Parameters();
24 Set<DLClause> materialisedRules = new HashSet<DLClause>();
25 private UFS<String> equalityGroups = null;
24 26
25 public BasicQueryEngine(String name) { 27 public BasicQueryEngine(String name) {
26 super(name); 28 super(name);
27 store = RDFoxQueryEngine.createDataStore(); 29 store = RDFoxQueryEngine.createDataStore();
28 parameters.m_allAnswersInRoot = true; 30 parameters.m_allAnswersInRoot = true;
29 parameters.m_useBushy = true; 31 parameters.m_useBushy = true;
30 } 32 }
31 33
32 public void materialiseFoldedly(DatalogProgram dProgram, GapByStore4ID gap) { 34 public void materialiseFoldedly(DatalogProgram dProgram, GapByStore4ID gap) {
33 if (gap != null) { 35 if (gap != null) {
34 materialise("lower program", dProgram.getLower().toString()); 36 materialise("lower program", dProgram.getLower().toString());
@@ -40,10 +42,9 @@ public class BasicQueryEngine extends RDFoxQueryEngine {
40 } catch (JRDFStoreException e) { 42 } catch (JRDFStoreException e) {
41 e.printStackTrace(); 43 e.printStackTrace();
42 } finally { 44 } finally {
43 gap.clear(); 45 gap.clear();
44 } 46 }
45 } 47 } else
46 else
47 materialise("upper program", dProgram.getUpper().toString()); 48 materialise("upper program", dProgram.getUpper().toString());
48 } 49 }
49 50
@@ -58,24 +59,23 @@ public class BasicQueryEngine extends RDFoxQueryEngine {
58 } catch (JRDFStoreException e) { 59 } catch (JRDFStoreException e) {
59 e.printStackTrace(); 60 e.printStackTrace();
60 } finally { 61 } finally {
61 gap.clear(); 62 gap.clear();
62 } 63 }
63 } 64 } else
64 else
65 materialise("upper program", dProgram.getUpper().toString()); 65 materialise("upper program", dProgram.getUpper().toString());
66
67 return 1;
68 }
69 66
67 return 1;
68 }
69
70 public int materialiseSkolemly(DatalogProgram dProgram, GapByStore4ID gap) { 70 public int materialiseSkolemly(DatalogProgram dProgram, GapByStore4ID gap) {
71 throw new UnsupportedOperationException(); 71 throw new UnsupportedOperationException();
72 } 72 }
73 73
74 @Override 74 @Override
75 public AnswerTuples evaluate(String queryText) { 75 public AnswerTuples evaluate(String queryText) {
76 return evaluate(queryText, ConjunctiveQueryHelper.getAnswerVariables(queryText)[0]); 76 return evaluate(queryText, ConjunctiveQueryHelper.getAnswerVariables(queryText)[0]);
77 } 77 }
78 78
79 @Override 79 @Override
80 public AnswerTuples evaluate(String queryText, String[] answerVars) { 80 public AnswerTuples evaluate(String queryText, String[] answerVars) {
81 TupleIterator tupleIterator; 81 TupleIterator tupleIterator;
@@ -83,9 +83,9 @@ public class BasicQueryEngine extends RDFoxQueryEngine {
83 tupleIterator = store.compileQuery(queryText.replace("_:", "?"), prefixes, parameters); 83 tupleIterator = store.compileQuery(queryText.replace("_:", "?"), prefixes, parameters);
84 } catch (JRDFStoreException e) { 84 } catch (JRDFStoreException e) {
85 e.printStackTrace(); 85 e.printStackTrace();
86 return null; 86 return null;
87 } 87 }
88 return new RDFoxAnswerTuples(answerVars, tupleIterator); 88 return new RDFoxAnswerTuples(answerVars, tupleIterator);
89 } 89 }
90 90
91 @Override 91 @Override
@@ -95,17 +95,18 @@ public class BasicQueryEngine extends RDFoxQueryEngine {
95 95
96 @Override 96 @Override
97 public void dispose() { 97 public void dispose() {
98 store.dispose(); 98 store.dispose();
99 } 99 }
100 100
101 protected void outputClassAssertions(String filename) { 101 protected void outputClassAssertions(String filename) {
102 TupleIterator allTuples = null; 102 TupleIterator allTuples = null;
103 boolean redirect = false; 103 boolean redirect = false;
104 try { 104 try {
105 allTuples = getDataStore().compileQuery("SELECT ?X ?Z WHERE { ?X <" + Namespace.RDF_TYPE + "> ?Z }", prefixes, parameters); 105 allTuples = getDataStore().compileQuery("SELECT ?X ?Z WHERE { ?X <" + Namespace.RDF_TYPE + "> ?Z }", prefixes, parameters);
106 redirect = Utility.redirectCurrentOut(filename); 106 redirect = Utility.redirectCurrentOut(filename);
107 for (long multi = allTuples.open(); multi != 0; multi = allTuples.getNext()) 107 for(long multi = allTuples.open(); multi != 0; multi = allTuples.getNext())
108 System.out.println(RDFoxTripleManager.getQuotedTerm(allTuples.getResource(0)) + " " + RDFoxTripleManager.getQuotedTerm(allTuples.getResource(1))); 108 System.out.println(RDFoxTripleManager.getQuotedTerm(allTuples.getResource(0)) + " " + RDFoxTripleManager
109 .getQuotedTerm(allTuples.getResource(1)));
109 } catch (JRDFStoreException e) { 110 } catch (JRDFStoreException e) {
110 e.printStackTrace(); 111 e.printStackTrace();
111 } finally { 112 } finally {
@@ -123,137 +124,134 @@ public class BasicQueryEngine extends RDFoxQueryEngine {
123 public void outputInstance4BinaryPredicate(String iri) { 124 public void outputInstance4BinaryPredicate(String iri) {
124 outputAnswers("select ?x ?y where { ?x <" + iri + "> ?y . }"); 125 outputAnswers("select ?x ?y where { ?x <" + iri + "> ?y . }");
125 } 126 }
126 127
127 public void outputInstanceNumbers(String filename) { 128 public void outputInstanceNumbers(String filename) {
128 TupleIterator predicateTuples = null; 129 TupleIterator predicateTuples = null;
129 TupleIterator instanceTuples; 130 TupleIterator instanceTuples;
130 Set<String> number = new HashSet<String>(); 131 Set<String> number = new HashSet<String>();
131 String predicate; 132 String predicate;
132 try { 133 try {
133 predicateTuples = getDataStore().compileQuery("SELECT DISTINCT ?Y WHERE { ?X <" + Namespace.RDF_TYPE + "> ?Y }", prefixes, parameters); 134 predicateTuples = getDataStore().compileQuery("SELECT DISTINCT ?Y WHERE { ?X <" + Namespace.RDF_TYPE + "> ?Y }", prefixes, parameters);
134 for (long multi = predicateTuples.open(); multi != 0; multi = predicateTuples.getNext()) { 135 for (long multi = predicateTuples.open(); multi != 0; multi = predicateTuples.getNext()) {
135 predicate = RDFoxTripleManager.getQuotedTerm(predicateTuples.getResource(0)); 136 predicate = RDFoxTripleManager.getQuotedTerm(predicateTuples.getResource(0));
136 instanceTuples = null; 137 instanceTuples = null;
137 try { 138 try {
138 instanceTuples = getDataStore().compileQuery("SELECT ?X WHERE { ?X <" + Namespace.RDF_TYPE + "> " + predicate + " }", prefixes, parameters); 139 instanceTuples = getDataStore().compileQuery("SELECT ?X WHERE { ?X <" + Namespace.RDF_TYPE + "> " + predicate + " }", prefixes, parameters);
139 long totalCount = 0; 140 long totalCount = 0;
140 for (long multi1 = instanceTuples.open(); multi1 != 0; multi1 = instanceTuples.getNext()) { 141 for (long multi1 = instanceTuples.open(); multi1 != 0; multi1 = instanceTuples.getNext()) {
141 totalCount += instanceTuples.getMultiplicity(); 142 totalCount += instanceTuples.getMultiplicity();
142 } 143 }
143 number.add(predicate + " * " + totalCount); 144 number.add(predicate + " * " + totalCount);
144 } finally { 145 } finally {
145 if (instanceTuples != null) instanceTuples.dispose(); 146 if(instanceTuples != null) instanceTuples.dispose();
146 } 147 }
147 } 148 }
148 } catch (JRDFStoreException e) { 149 } catch (JRDFStoreException e) {
149 e.printStackTrace(); 150 e.printStackTrace();
150 } finally { 151 } finally {
151 if (predicateTuples != null) predicateTuples.dispose(); 152 if (predicateTuples != null) predicateTuples.dispose();
152 predicateTuples = null; 153 predicateTuples = null;
153 } 154 }
154 155
155 try { 156 try {
156 predicateTuples = getDataStore().compileQuery("SELECT DISTINCT ?Y WHERE { ?X ?Y ?Z }", prefixes, parameters); 157 predicateTuples = getDataStore().compileQuery("SELECT DISTINCT ?Y WHERE { ?X ?Y ?Z }", prefixes, parameters);
157 for (long multi = predicateTuples.open(); multi != 0; multi = predicateTuples.getNext()) { 158 for (long multi = predicateTuples.open(); multi != 0; multi = predicateTuples.getNext()) {
158 predicate = RDFoxTripleManager.getQuotedTerm(predicateTuples.getResource(0)); 159 predicate = RDFoxTripleManager.getQuotedTerm(predicateTuples.getResource(0));
159 instanceTuples = null; 160 instanceTuples = null;
160 try { 161 try {
161 instanceTuples = getDataStore().compileQuery("SELECT ?X ?Z WHERE { ?X " + predicate + " ?Z }", prefixes, parameters); 162 instanceTuples = getDataStore().compileQuery("SELECT ?X ?Z WHERE { ?X " + predicate + " ?Z }", prefixes, parameters);
162 long totalCount = 0; 163 long totalCount = 0;
163 for (long multi1 = instanceTuples.open(); multi1 != 0; multi1 = instanceTuples.getNext()) 164 for (long multi1 = instanceTuples.open(); multi1 != 0; multi1 = instanceTuples.getNext())
164 totalCount += instanceTuples.getMultiplicity(); 165 totalCount += instanceTuples.getMultiplicity();
165 number.add(predicate + " * " + totalCount); 166 number.add(predicate + " * " + totalCount);
166 } finally { 167 } finally {
167 if (instanceTuples != null) instanceTuples.dispose(); 168 if(instanceTuples != null) instanceTuples.dispose();
168 } 169 }
169 } 170 }
170 171
171 } catch (JRDFStoreException e) { 172 } catch (JRDFStoreException e) {
172 e.printStackTrace(); 173 e.printStackTrace();
173 } finally { 174 } finally {
174 if (predicateTuples != null) predicateTuples.dispose(); 175 if (predicateTuples != null) predicateTuples.dispose();
175 predicateTuples = null; 176 predicateTuples = null;
176 } 177 }
177 178
178 Utility.redirectCurrentOut(filename); 179 Utility.redirectCurrentOut(filename);
179 String[] ordered = number.toArray(new String[0]); 180 String[] ordered = number.toArray(new String[0]);
180 Arrays.sort(ordered, new DLPredicateComparator()); 181 Arrays.sort(ordered, new DLPredicateComparator());
181 for (String line: ordered) System.out.println(line); 182 for(String line : ordered) System.out.println(line);
182 Utility.closeCurrentOut(); 183 Utility.closeCurrentOut();
183 184
184 } 185 }
185 186
186 public TupleIterator internal_evaluateAgainstIDBs(String queryText) throws JRDFStoreException { 187 public TupleIterator internal_evaluateAgainstIDBs(String queryText) throws JRDFStoreException {
187 TupleIterator iter = store.compileQuery(queryText, prefixes, parameters, TripleStatus.TUPLE_STATUS_IDB.union(TripleStatus.TUPLE_STATUS_EDB), TripleStatus.TUPLE_STATUS_IDB); 188 TupleIterator iter = store.compileQuery(queryText, prefixes, parameters, TripleStatus.TUPLE_STATUS_IDB.union(TripleStatus.TUPLE_STATUS_EDB), TripleStatus.TUPLE_STATUS_IDB);
188// iter.open(); 189// iter.open();
189 return iter; 190 return iter;
190 } 191 }
191 192
192 public TupleIterator internal_evaluate(String queryText) throws JRDFStoreException { 193 public TupleIterator internal_evaluate(String queryText) throws JRDFStoreException {
193 TupleIterator iter = store.compileQuery(queryText, prefixes, parameters); 194 TupleIterator iter = store.compileQuery(queryText, prefixes, parameters);
194// iter.open(); 195// iter.open();
195 return iter; 196 return iter;
196 } 197 }
197 198
198 public void setExpandEquality(boolean flag) { 199 public void setExpandEquality(boolean flag) {
199 parameters.m_expandEquality = flag; 200 parameters.m_expandEquality = flag;
200 } 201 }
201 202
202 public TupleIterator internal_evaluateNotExpanded(String queryText) throws JRDFStoreException { 203 public TupleIterator internal_evaluateNotExpanded(String queryText) throws JRDFStoreException {
203 parameters.m_expandEquality = false; 204 parameters.m_expandEquality = false;
204 TupleIterator iter = store.compileQuery(queryText, prefixes, parameters); 205 TupleIterator iter = store.compileQuery(queryText, prefixes, parameters);
205// iter.open(); 206// iter.open();
206 parameters.m_expandEquality = true; 207 parameters.m_expandEquality = true;
207 return iter; 208 return iter;
208 } 209 }
209
210 210
211 public TupleIterator internal_evaluate(String queryText, boolean incrementally) throws JRDFStoreException { 211 public TupleIterator internal_evaluate(String queryText, boolean incrementally) throws JRDFStoreException {
212 return incrementally ? internal_evaluateAgainstIDBs(queryText) : internal_evaluate(queryText); 212 return incrementally ? internal_evaluateAgainstIDBs(queryText) : internal_evaluate(queryText);
213 } 213 }
214 214
215 Set<DLClause> materialisedRules = new HashSet<DLClause>();
216
217 public String getUnusedRules(Collection<DLClause> clauses, boolean toUpdate) { 215 public String getUnusedRules(Collection<DLClause> clauses, boolean toUpdate) {
218 DLClause clause; 216 DLClause clause;
219 for (Iterator<DLClause> iter = clauses.iterator(); iter.hasNext(); ) { 217 for (Iterator<DLClause> iter = clauses.iterator(); iter.hasNext(); ) {
220 if (materialisedRules.contains(clause = iter.next())) 218 if (materialisedRules.contains(clause = iter.next()))
221 iter.remove(); 219 iter.remove();
222 else if (toUpdate) materialisedRules.add(clause); 220 else if(toUpdate) materialisedRules.add(clause);
223 } 221 }
224 222
225 if (clauses.isEmpty()) return null; 223 if (clauses.isEmpty()) return null;
226 224
227 return Program.toString(clauses); 225 return Program.toString(clauses);
228 } 226 }
229 227
230 public void outputMaterialisedRules() { 228 public void outputMaterialisedRules() {
231 System.out.println(DLClauseHelper.toString(materialisedRules)); 229 System.out.println(DLClauseHelper.toString(materialisedRules));
232 } 230 }
233 231
234 public void outputAnswers(String query) { 232 public void outputAnswers(String query) {
235 TupleIterator iter = null; 233 TupleIterator iter = null;
236 try { 234 try {
237 iter = internal_evaluate(query); 235 iter = internal_evaluate(query);
238 System.out.println(query); 236 System.out.println(query);
239 int arity = iter.getArity(); 237 int arity = iter.getArity();
240 for (long multi = iter.open(); multi != 0; multi = iter.getNext()) { 238 for (long multi = iter.open(); multi != 0; multi = iter.getNext()) {
241 for (int i = 0; i < arity; ++i) 239 for (int i = 0; i < arity; ++i)
242 System.out.print(RDFoxTripleManager.getQuotedTerm(iter.getResource(i)) + "\t"); 240 System.out.print(RDFoxTripleManager.getQuotedTerm(iter.getResource(i)) + "\t");
243 System.out.println(); 241 System.out.println();
244 } 242 }
245 } catch (JRDFStoreException e) { 243 } catch (JRDFStoreException e) {
246 e.printStackTrace(); 244 e.printStackTrace();
247 } finally { 245 } finally {
248 if (iter != null) iter.dispose(); 246 if(iter != null) iter.dispose();
249 } 247 }
250 } 248 }
251 249
252 public void outputInstance4UnaryPredicate(String iri) { 250 public void outputInstance4UnaryPredicate(String iri) {
253 outputAnswers("select ?x where { ?x " 251 outputAnswers("select ?x where { ?x "
254 + "<http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <" 252 + "<http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <"
255 + iri 253 + iri
256 + "> .}"); 254 + "> .}");
257 } 255 }
258 256
259 public void outputSubjects(String p, String o) { 257 public void outputSubjects(String p, String o) {
@@ -265,13 +263,13 @@ public class BasicQueryEngine extends RDFoxQueryEngine {
265 } 263 }
266 264
267 public void outputIDBFacts() { 265 public void outputIDBFacts() {
268 TupleIterator iter = null; 266 TupleIterator iter = null;
269 try { 267 try {
270 iter = internal_evaluateAgainstIDBs("select distict ?x ?y ?z where { ?x ?y ?z }"); 268 iter = internal_evaluateAgainstIDBs("select distict ?x ?y ?z where { ?x ?y ?z }");
271 for (long multi = iter.open(); multi != 0; multi = iter.getNext()) { 269 for (long multi = iter.open(); multi != 0; multi = iter.getNext()) {
272 for (int i = 0; i < 3; ++i) 270 for (int i = 0; i < 3; ++i)
273 System.out.print(RDFoxTripleManager.getQuotedTerm(iter.getResource(i)) + "\t"); 271 System.out.print(RDFoxTripleManager.getQuotedTerm(iter.getResource(i)) + "\t");
274 System.out.println(); 272 System.out.println();
275 } 273 }
276 } catch (JRDFStoreException e) { 274 } catch (JRDFStoreException e) {
277 // TODO Auto-generated catch block 275 // TODO Auto-generated catch block
@@ -279,7 +277,7 @@ public class BasicQueryEngine extends RDFoxQueryEngine {
279 } finally { 277 } finally {
280 if (iter != null) iter.dispose(); 278 if (iter != null) iter.dispose();
281 } 279 }
282 280
283 } 281 }
284 282
285 public void outputType4Individual(String iri) { 283 public void outputType4Individual(String iri) {
@@ -287,25 +285,23 @@ public class BasicQueryEngine extends RDFoxQueryEngine {
287 } 285 }
288 286
289 public int getSameAsNumber() { 287 public int getSameAsNumber() {
290 TupleIterator iter = null; 288 TupleIterator iter = null;
291 int counter = 0; 289 int counter = 0;
292 try { 290 try {
293 iter = internal_evaluate("select ?x ?y where {?x " + Namespace.EQUALITY_QUOTED + " ?y . }"); 291 iter = internal_evaluate("select ?x ?y where {?x " + Namespace.EQUALITY_QUOTED + " ?y . }");
294 for (long multi = iter.open(); multi != 0; multi = iter.getNext()) 292 for(long multi = iter.open(); multi != 0; multi = iter.getNext())
295 if (iter.getResourceID(0) != iter.getResourceID(1)) 293 if (iter.getResourceID(0) != iter.getResourceID(1))
296 ++counter; 294 ++counter;
297 } catch (JRDFStoreException e) { 295 } catch (JRDFStoreException e) {
298 e.printStackTrace(); 296 e.printStackTrace();
299 } finally { 297 } finally {
300 if (iter != null) iter.dispose(); 298 if (iter != null) iter.dispose();
301 } 299 }
302 return counter; 300 return counter;
303 } 301 }
304 302
305 private UFS<String> equalityGroups = null; 303 public UFS<String> getEqualityGroups(boolean reuse) {
306 304 if(reuse && equalityGroups != null) return equalityGroups;
307 public UFS<String> getEqualityGroups() {
308 if (equalityGroups != null) return equalityGroups;
309 305
310 equalityGroups = new UFS<String>(); 306 equalityGroups = new UFS<String>();
311 307