aboutsummaryrefslogtreecommitdiff
path: root/src/uk/ac/ox/cs/pagoda/reasoner/RLUQueryReasoner.java
diff options
context:
space:
mode:
authoryzhou <yujiao.zhou@gmail.com>2015-04-21 10:34:27 +0100
committeryzhou <yujiao.zhou@gmail.com>2015-04-21 10:34:27 +0100
commit9ce65c5a963b03ee97fe9cb6c5aa65a3c04a80a8 (patch)
tree47511c0fb89dccff0db4b5990522e04f294d795b /src/uk/ac/ox/cs/pagoda/reasoner/RLUQueryReasoner.java
parentb1ac207612ee8b045244253fb94b866104bc34f2 (diff)
downloadACQuA-9ce65c5a963b03ee97fe9cb6c5aa65a3c04a80a8.tar.gz
ACQuA-9ce65c5a963b03ee97fe9cb6c5aa65a3c04a80a8.zip
initial version
Diffstat (limited to 'src/uk/ac/ox/cs/pagoda/reasoner/RLUQueryReasoner.java')
-rw-r--r--src/uk/ac/ox/cs/pagoda/reasoner/RLUQueryReasoner.java134
1 files changed, 134 insertions, 0 deletions
diff --git a/src/uk/ac/ox/cs/pagoda/reasoner/RLUQueryReasoner.java b/src/uk/ac/ox/cs/pagoda/reasoner/RLUQueryReasoner.java
new file mode 100644
index 0000000..fe4022d
--- /dev/null
+++ b/src/uk/ac/ox/cs/pagoda/reasoner/RLUQueryReasoner.java
@@ -0,0 +1,134 @@
1package uk.ac.ox.cs.pagoda.reasoner;
2
3import org.semanticweb.owlapi.model.OWLOntology;
4
5import uk.ac.ox.cs.pagoda.multistage.MultiStageQueryEngine;
6import uk.ac.ox.cs.pagoda.owl.EqualitiesEliminator;
7import uk.ac.ox.cs.pagoda.query.AnswerTuples;
8import uk.ac.ox.cs.pagoda.query.QueryRecord;
9import uk.ac.ox.cs.pagoda.query.QueryRecord.Step;
10import uk.ac.ox.cs.pagoda.reasoner.light.BasicQueryEngine;
11import uk.ac.ox.cs.pagoda.rules.DatalogProgram;
12import uk.ac.ox.cs.pagoda.util.Timer;
13import uk.ac.ox.cs.pagoda.util.Utility;
14
15public class RLUQueryReasoner extends QueryReasoner {
16
17 DatalogProgram program;
18
19 BasicQueryEngine rlLowerStore, rlUpperStore;
20
21 boolean multiStageTag, equalityTag;
22
23 public RLUQueryReasoner(boolean multiStageTag, boolean considerEqualities) {
24 this.multiStageTag = multiStageTag;
25 this.equalityTag = considerEqualities;
26 rlLowerStore = new BasicQueryEngine("rl-lower-bound");
27 if (!multiStageTag)
28 rlUpperStore = new BasicQueryEngine("rl-upper-bound");
29 else
30 rlUpperStore = new MultiStageQueryEngine("rl-upper-bound", false);
31 }
32
33 Timer t = new Timer();
34
35 @Override
36 public void evaluate(QueryRecord queryRecord) {
37 AnswerTuples ans = null;
38 t.reset();
39 try {
40 ans = rlLowerStore.evaluate(queryRecord.getQueryText(), queryRecord.getAnswerVariables());
41 Utility.logDebug(t.duration());
42 queryRecord.updateLowerBoundAnswers(ans);
43 } finally {
44 if (ans != null) ans.dispose();
45 }
46 queryRecord.addProcessingTime(Step.LowerBound, t.duration());
47
48 ans = null;
49 t.reset();
50 try {
51 ans = rlUpperStore.evaluate(queryRecord.getQueryText(), queryRecord.getAnswerVariables());
52 Utility.logDebug(t.duration());
53 queryRecord.updateUpperBoundAnswers(ans);
54 } finally {
55 if (ans != null) ans.dispose();
56 }
57 queryRecord.addProcessingTime(Step.UpperBound, t.duration());
58
59 if (queryRecord.processed())
60 queryRecord.setDifficulty(Step.UpperBound);
61 }
62
63 @Override
64 public void evaluateUpper(QueryRecord queryRecord) {
65 AnswerTuples ans = null;
66 try {
67 ans = rlUpperStore.evaluate(queryRecord.getQueryText(), queryRecord.getAnswerVariables());
68 Utility.logDebug(t.duration());
69 queryRecord.updateUpperBoundAnswers(ans, true);
70 } finally {
71 if (ans != null) ans.dispose();
72 }
73 }
74
75 @Override
76 public void dispose() {
77 if (rlLowerStore != null) rlLowerStore.dispose();
78 if (rlUpperStore != null) rlUpperStore.dispose();
79 super.dispose();
80 }
81
82 @Override
83 public void loadOntology(OWLOntology o) {
84 if (!equalityTag) {
85 EqualitiesEliminator eliminator = new EqualitiesEliminator(o);
86 o = eliminator.getOutputOntology();
87 eliminator.save();
88 }
89
90 OWLOntology ontology = o;
91 program = new DatalogProgram(ontology);
92 importData(program.getAdditionalDataFile());
93 }
94
95 @Override
96 public boolean preprocess() {
97 String datafile = importedData.toString();
98 rlLowerStore.importRDFData("data", datafile);
99 rlLowerStore.materialise("lower program", program.getLower().toString());
100
101 rlUpperStore.importRDFData("data", datafile);
102 rlUpperStore.materialiseRestrictedly(program, null);
103
104 if (!isConsistent())
105 return false;
106
107 return true;
108 }
109
110 @Override
111 public boolean isConsistent() {
112 String[] X = new String[] { "X" };
113 AnswerTuples ans = null;
114 try {
115 ans = rlLowerStore.evaluate(QueryRecord.botQueryText, X);
116 if (ans.isValid()) return false;
117 } finally {
118 if (ans != null) ans.dispose();
119 }
120
121 ans = null;
122 try {
123 ans = rlUpperStore.evaluate(QueryRecord.botQueryText, X);
124 if (!ans.isValid()) return true;
125 } finally {
126 if (ans != null) ans.dispose();
127 }
128
129 Utility.logDebug("The consistency of the data has not been determined yet.");
130 return true;
131 }
132
133
134}