aboutsummaryrefslogtreecommitdiff
path: root/src/uk/ac/ox/cs/pagoda/reasoner/MyQueryReasoner.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/uk/ac/ox/cs/pagoda/reasoner/MyQueryReasoner.java')
-rw-r--r--src/uk/ac/ox/cs/pagoda/reasoner/MyQueryReasoner.java102
1 files changed, 59 insertions, 43 deletions
diff --git a/src/uk/ac/ox/cs/pagoda/reasoner/MyQueryReasoner.java b/src/uk/ac/ox/cs/pagoda/reasoner/MyQueryReasoner.java
index dfbcb4d..b10e2d1 100644
--- a/src/uk/ac/ox/cs/pagoda/reasoner/MyQueryReasoner.java
+++ b/src/uk/ac/ox/cs/pagoda/reasoner/MyQueryReasoner.java
@@ -20,28 +20,25 @@ import uk.ac.ox.cs.pagoda.tracking.TrackingRuleEncoderDisjVar1;
20import uk.ac.ox.cs.pagoda.tracking.TrackingRuleEncoderWithGap; 20import uk.ac.ox.cs.pagoda.tracking.TrackingRuleEncoderWithGap;
21import uk.ac.ox.cs.pagoda.util.Timer; 21import uk.ac.ox.cs.pagoda.util.Timer;
22import uk.ac.ox.cs.pagoda.util.Utility; 22import uk.ac.ox.cs.pagoda.util.Utility;
23import uk.ac.ox.cs.pagoda.util.tuples.Tuple;
23 24
24import java.util.Collection; 25import java.util.Collection;
25import java.util.HashMap; 26import java.util.HashMap;
26 27
27public class MyQueryReasoner extends QueryReasoner { 28public class MyQueryReasoner extends QueryReasoner {
28 29
29 OWLOntology ontology; 30 OWLOntology ontology;
31 DatalogProgram program;
30 32
31// String additonalDataFile; 33// String additonalDataFile;
32
33 DatalogProgram program;
34
35 BasicQueryEngine rlLowerStore = null; 34 BasicQueryEngine rlLowerStore = null;
36 BasicQueryEngine lazyUpperStore = null; 35 BasicQueryEngine lazyUpperStore = null;
37 BasicQueryEngine limitedSkolemUpperStore; 36 BasicQueryEngine limitedSkolemUpperStore;
38// boolean[] namedIndividuals_lazyUpper;
39
40 OWLOntology elho_ontology; 37 OWLOntology elho_ontology;
38// boolean[] namedIndividuals_lazyUpper;
41 KarmaQueryEngine elLowerStore = null; 39 KarmaQueryEngine elLowerStore = null;
42
43 BasicQueryEngine trackingStore = null; 40 BasicQueryEngine trackingStore = null;
44// boolean[] namedIndividuals_tracking; 41 // boolean[] namedIndividuals_tracking;
45 TrackingRuleEncoder encoder; 42 TrackingRuleEncoder encoder;
46 private boolean equalityTag; 43 private boolean equalityTag;
47 private boolean multiStageTag; 44 private boolean multiStageTag;
@@ -53,7 +50,6 @@ public class MyQueryReasoner extends QueryReasoner {
53 public MyQueryReasoner() { 50 public MyQueryReasoner() {
54 setup(true, true); 51 setup(true, true);
55 } 52 }
56
57 public MyQueryReasoner(boolean multiStageTag, boolean considerEqualities) { 53 public MyQueryReasoner(boolean multiStageTag, boolean considerEqualities) {
58 setup(multiStageTag, considerEqualities); 54 setup(multiStageTag, considerEqualities);
59 } 55 }
@@ -65,7 +61,7 @@ public class MyQueryReasoner extends QueryReasoner {
65 else 61 else
66 return new BasicQueryEngine(name); 62 return new BasicQueryEngine(name);
67 } 63 }
68 64
69 public void setup(boolean multiStageTag, boolean considerEqualities) { 65 public void setup(boolean multiStageTag, boolean considerEqualities) {
70 satisfiable = SatisfiabilityStatus.UNCHECKED; 66 satisfiable = SatisfiabilityStatus.UNCHECKED;
71 this.multiStageTag = multiStageTag; 67 this.multiStageTag = multiStageTag;
@@ -115,7 +111,7 @@ public class MyQueryReasoner extends QueryReasoner {
115 public Collection<String> getPredicatesWithGap() { 111 public Collection<String> getPredicatesWithGap() {
116 return predicatesWithGap; 112 return predicatesWithGap;
117 } 113 }
118 114
119 @Override 115 @Override
120 public boolean preprocess() { 116 public boolean preprocess() {
121 t.reset(); 117 t.reset();
@@ -192,18 +188,40 @@ public class MyQueryReasoner extends QueryReasoner {
192 188
193 return true; 189 return true;
194 } 190 }
195 191
196 @Override 192 @Override
197 public boolean isConsistent() { 193 public boolean isConsistent() {
198 if(satisfiable == SatisfiabilityStatus.UNCHECKED) { 194 if(satisfiable == SatisfiabilityStatus.UNCHECKED) {
199 satisfiable = consistency.check() ? SatisfiabilityStatus.SATISFIABLE : SatisfiabilityStatus.UNSATISFIABLE; 195 satisfiable = consistency.check() ? SatisfiabilityStatus.SATISFIABLE : SatisfiabilityStatus.UNSATISFIABLE;
200 Utility.logInfo("time for satisfiability checking: " + t.duration()); 196 Utility.logInfo("time for satisfiability checking: " + t.duration());
201 } 197 }
202 return satisfiable == SatisfiabilityStatus.SATISFIABLE ? true : false; 198 return satisfiable == SatisfiabilityStatus.SATISFIABLE;
199 }
200
201 // TODO why the following???
202 private void queryUpperStore(BasicQueryEngine upperStore, QueryRecord queryRecord, Tuple<String> extendedQuery) {
203
204// Utility.logInfo("1");
205// queryUpperBound(upperStore, queryRecord, queryRecord.getQueryText(), queryRecord.getAnswerVariables());
206//
207// boolean conditionA = !queryRecord.processed() && !queryRecord.getQueryText().equals(extendedQuery.get(0));
208// boolean conditionB = !queryRecord.processed() && queryRecord.hasNonAnsDistinguishedVariables();
209//
210// if(conditionA ^ conditionB)
211// throw new Error("It really happened! I thought it was impossible");
212//
213// if (conditionA) {
214// Utility.logInfo("2");
215 queryUpperBound(upperStore, queryRecord, extendedQuery.get(0), queryRecord.getAnswerVariables());
216// }
217// if (conditionB) {
218// Utility.logInfo("3");
219// queryUpperBound(upperStore, queryRecord, extendedQuery.get(1), queryRecord.getDistinguishedVariables());
220// }
203 } 221 }
204 222
205 /** 223 /**
206 * Returns the relevant part of the ontology, while computing the bound answers. 224 * Returns the part of the ontology relevant for Hermit, while computing the bound answers.
207 * */ 225 * */
208 private OWLOntology relevantPart(QueryRecord queryRecord) { 226 private OWLOntology relevantPart(QueryRecord queryRecord) {
209 AnswerTuples rlAnswer = null, elAnswer = null; 227 AnswerTuples rlAnswer = null, elAnswer = null;
@@ -219,28 +237,23 @@ public class MyQueryReasoner extends QueryReasoner {
219 queryRecord.addProcessingTime(Step.LowerBound, t.duration()); 237 queryRecord.addProcessingTime(Step.LowerBound, t.duration());
220 238
221 t.reset(); 239 t.reset();
222 BasicQueryEngine upperStore = queryRecord.isBottom() || lazyUpperStore == null ? trackingStore : lazyUpperStore;
223 240
224 String[] extendedQuery = queryRecord.getExtendedQueryText(); 241 Tuple<String> extendedQueryTexts = queryRecord.getExtendedQueryText();
225 242
226 // TODO why the following??? 243// BasicQueryEngine upperStore;
227 queryUpperBound(upperStore, queryRecord, queryRecord.getQueryText(), queryRecord.getAnswerVariables()); 244// if(queryRecord.isBottom()) upperStore = trackingStore;
245// upperStore = queryRecord.isBottom() || lazyUpperStore == null ? trackingStore : lazyUpperStore;
228 246
229 if (!queryRecord.processed() && !queryRecord.getQueryText().equals(extendedQuery[0])) { 247 // TODO
230 queryUpperBound(upperStore, queryRecord, extendedQuery[0], queryRecord.getAnswerVariables()); 248// if(queryRecord.isBottom() || (lazyUpperStore == null && limitedSkolemUpperStore == null))
231 } 249// queryUpperStore(trackingStore, queryRecord, extendedQueryTexts);
232 if (!queryRecord.processed() && queryRecord.hasNonAnsDistinguishedVariables()) { 250// else {
233 queryUpperBound(upperStore, queryRecord, extendedQuery[1], queryRecord.getDistinguishedVariables());
234 }
235
236// Utility.logDebug(toJsonKeyValuePair("upperBound", queryRecord));
237 251
238 // TODO test intersection and new upper bound 252 queryUpperStore(trackingStore, queryRecord, extendedQueryTexts);
239 if (!queryRecord.isBottom() && lazyUpperStore != null) { 253 if(!(queryRecord.isBottom() || (lazyUpperStore == null && limitedSkolemUpperStore == null))) {
240 queryUpperBound(trackingStore, queryRecord, queryRecord.getQueryText(), queryRecord.getAnswerVariables()); 254 if(lazyUpperStore != null) queryUpperStore(lazyUpperStore, queryRecord, extendedQueryTexts);
241 } 255 if(limitedSkolemUpperStore != null)
242 if (!queryRecord.isBottom() && limitedSkolemUpperStore != null) { 256 queryUpperStore(limitedSkolemUpperStore, queryRecord, extendedQueryTexts);
243 queryUpperBound(limitedSkolemUpperStore, queryRecord, queryRecord.getQueryText(), queryRecord.getAnswerVariables());
244 } 257 }
245 258
246 queryRecord.addProcessingTime(Step.UpperBound, t.duration()); 259 queryRecord.addProcessingTime(Step.UpperBound, t.duration());
@@ -251,7 +264,8 @@ public class MyQueryReasoner extends QueryReasoner {
251 264
252 t.reset(); 265 t.reset();
253 try { 266 try {
254 elAnswer = elLowerStore.evaluate(extendedQuery[0], queryRecord.getAnswerVariables(), queryRecord.getLowerBoundAnswers()); 267 elAnswer = elLowerStore.evaluate(extendedQueryTexts.get(0), queryRecord.getAnswerVariables(),
268 queryRecord.getLowerBoundAnswers());
255 Utility.logDebug(t.duration()); 269 Utility.logDebug(t.duration());
256 queryRecord.updateLowerBoundAnswers(elAnswer); 270 queryRecord.updateLowerBoundAnswers(elAnswer);
257 } finally { 271 } finally {
@@ -268,7 +282,7 @@ public class MyQueryReasoner extends QueryReasoner {
268 282
269 QueryTracker tracker = new QueryTracker(encoder, rlLowerStore, queryRecord); 283 QueryTracker tracker = new QueryTracker(encoder, rlLowerStore, queryRecord);
270 284
271 OWLOntology knowledgebase; 285 OWLOntology knowledgeBase;
272 t.reset(); 286 t.reset();
273// if (program.getGeneral().isHorn()) { 287// if (program.getGeneral().isHorn()) {
274// knowledgebase = tracker.extract(lazyUpperStore, consistency.getQueryRecords(), true); 288// knowledgebase = tracker.extract(lazyUpperStore, consistency.getQueryRecords(), true);
@@ -276,14 +290,14 @@ public class MyQueryReasoner extends QueryReasoner {
276// return knowledgebase; 290// return knowledgebase;
277// } 291// }
278// else { 292// else {
279 knowledgebase = tracker.extract(trackingStore, consistency.getQueryRecords(), true); 293 knowledgeBase = tracker.extract(trackingStore, consistency.getQueryRecords(), true);
280 queryRecord.addProcessingTime(Step.Fragment, t.duration()); 294 queryRecord.addProcessingTime(Step.Fragment, t.duration());
281// } 295// }
282 296
283 if(knowledgebase.isEmpty() || queryRecord.isBottom()) 297 if(knowledgeBase.isEmpty() || queryRecord.isBottom())
284 return knowledgebase; 298 return knowledgeBase;
285 299
286 if(program.getGeneral().isHorn()) return knowledgebase; 300 if(program.getGeneral().isHorn()) return knowledgeBase;
287 301
288// t.reset(); 302// t.reset();
289// if (queryRecord.isHorn() && lazyUpperStore != null) { 303// if (queryRecord.isHorn() && lazyUpperStore != null) {
@@ -298,7 +312,7 @@ public class MyQueryReasoner extends QueryReasoner {
298// if (knowledgebase == null) 312// if (knowledgebase == null)
299// queryRecord.setDifficulty(Step.FragmentRefinement); 313// queryRecord.setDifficulty(Step.FragmentRefinement);
300 314
301 return knowledgebase; 315 return knowledgeBase;
302 } 316 }
303 317
304 private String toJsonKeyValuePair(String key, Object value) { 318 private String toJsonKeyValuePair(String key, Object value) {
@@ -307,8 +321,6 @@ public class MyQueryReasoner extends QueryReasoner {
307 return QueryRecord.GsonCreator.getInstance().toJson(map); 321 return QueryRecord.GsonCreator.getInstance().toJson(map);
308 } 322 }
309 323
310// int counter = 0;
311
312 private void queryUpperBound(BasicQueryEngine upperStore, QueryRecord queryRecord, String queryText, String[] answerVariables) { 324 private void queryUpperBound(BasicQueryEngine upperStore, QueryRecord queryRecord, String queryText, String[] answerVariables) {
313 AnswerTuples rlAnswer = null; 325 AnswerTuples rlAnswer = null;
314 try { 326 try {
@@ -317,11 +329,13 @@ public class MyQueryReasoner extends QueryReasoner {
317 Utility.logDebug(t.duration()); 329 Utility.logDebug(t.duration());
318 queryRecord.updateUpperBoundAnswers(rlAnswer); 330 queryRecord.updateUpperBoundAnswers(rlAnswer);
319 } finally { 331 } finally {
320 if (rlAnswer != null) rlAnswer.dispose(); 332 if(rlAnswer != null) rlAnswer.dispose();
321 rlAnswer = null; 333 rlAnswer = null;
322 } 334 }
323 } 335 }
324 336
337// int counter = 0;
338
325 @Override 339 @Override
326 public void evaluate(QueryRecord queryRecord) { 340 public void evaluate(QueryRecord queryRecord) {
327 OWLOntology knowledgeBase = relevantPart(queryRecord); 341 OWLOntology knowledgeBase = relevantPart(queryRecord);
@@ -349,6 +363,7 @@ public class MyQueryReasoner extends QueryReasoner {
349 363
350 @Override 364 @Override
351 public void evaluateUpper(QueryRecord queryRecord) { 365 public void evaluateUpper(QueryRecord queryRecord) {
366 // TODO add new upper store
352 AnswerTuples rlAnswer = null; 367 AnswerTuples rlAnswer = null;
353 boolean useFull = queryRecord.isBottom() || lazyUpperStore == null; 368 boolean useFull = queryRecord.isBottom() || lazyUpperStore == null;
354 try { 369 try {
@@ -359,7 +374,7 @@ public class MyQueryReasoner extends QueryReasoner {
359 if(rlAnswer != null) rlAnswer.dispose(); 374 if(rlAnswer != null) rlAnswer.dispose();
360 } 375 }
361 } 376 }
362 377
363 @Override 378 @Override
364 public void dispose() { 379 public void dispose() {
365 if (encoder != null) encoder.dispose(); 380 if (encoder != null) encoder.dispose();
@@ -367,6 +382,7 @@ public class MyQueryReasoner extends QueryReasoner {
367 if (lazyUpperStore != null) lazyUpperStore.dispose(); 382 if (lazyUpperStore != null) lazyUpperStore.dispose();
368 if (elLowerStore != null) elLowerStore.dispose(); 383 if (elLowerStore != null) elLowerStore.dispose();
369 if (trackingStore != null) trackingStore.dispose(); 384 if (trackingStore != null) trackingStore.dispose();
385 if(limitedSkolemUpperStore != null) limitedSkolemUpperStore.dispose();
370 super.dispose(); 386 super.dispose();
371 } 387 }
372 388