aboutsummaryrefslogtreecommitdiff
path: root/src/uk/ac/ox/cs/pagoda/reasoner/RLQueryReasoner.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/RLQueryReasoner.java
parentb1ac207612ee8b045244253fb94b866104bc34f2 (diff)
downloadACQuA-9ce65c5a963b03ee97fe9cb6c5aa65a3c04a80a8.tar.gz
ACQuA-9ce65c5a963b03ee97fe9cb6c5aa65a3c04a80a8.zip
initial version
Diffstat (limited to 'src/uk/ac/ox/cs/pagoda/reasoner/RLQueryReasoner.java')
-rw-r--r--src/uk/ac/ox/cs/pagoda/reasoner/RLQueryReasoner.java83
1 files changed, 83 insertions, 0 deletions
diff --git a/src/uk/ac/ox/cs/pagoda/reasoner/RLQueryReasoner.java b/src/uk/ac/ox/cs/pagoda/reasoner/RLQueryReasoner.java
new file mode 100644
index 0000000..3894874
--- /dev/null
+++ b/src/uk/ac/ox/cs/pagoda/reasoner/RLQueryReasoner.java
@@ -0,0 +1,83 @@
1package uk.ac.ox.cs.pagoda.reasoner;
2
3import org.semanticweb.owlapi.model.OWLOntology;
4import uk.ac.ox.cs.pagoda.constraints.UnaryBottom;
5import uk.ac.ox.cs.pagoda.query.AnswerTuples;
6import uk.ac.ox.cs.pagoda.query.QueryRecord;
7import uk.ac.ox.cs.pagoda.query.QueryRecord.Step;
8import uk.ac.ox.cs.pagoda.reasoner.light.BasicQueryEngine;
9import uk.ac.ox.cs.pagoda.reasoner.light.RDFoxQueryEngine;
10import uk.ac.ox.cs.pagoda.rules.LowerDatalogProgram;
11import uk.ac.ox.cs.pagoda.util.Timer;
12
13public class RLQueryReasoner extends QueryReasoner {
14
15 RDFoxQueryEngine rlLowerStore = null;
16
17 LowerDatalogProgram program;
18
19 public RLQueryReasoner() {
20 rlLowerStore = new BasicQueryEngine("rl");
21 }
22
23 Timer t = new Timer();
24
25 @Override
26 public void evaluate(QueryRecord queryRecord) {
27 AnswerTuples rlAnswer = null;
28 t.reset();
29 try {
30 rlAnswer = rlLowerStore.evaluate(queryRecord.getQueryText(), queryRecord.getAnswerVariables());
31 queryRecord.updateLowerBoundAnswers(rlAnswer);
32 } finally {
33 if (rlAnswer != null) rlAnswer.dispose();
34 }
35 queryRecord.addProcessingTime(Step.LowerBound, t.duration());
36 queryRecord.setDifficulty(Step.LowerBound);
37 queryRecord.markAsProcessed();
38 }
39
40 @Override
41 public void dispose() {
42 if (rlLowerStore != null) rlLowerStore.dispose();
43 super.dispose();
44 }
45
46 @Override
47 public void loadOntology(OWLOntology ontology) {
48 program = new LowerDatalogProgram();
49 program.load(ontology, new UnaryBottom());
50 program.transform();
51
52 importData(program.getAdditionalDataFile());
53 }
54
55 @Override
56 public boolean preprocess() {
57 rlLowerStore.importRDFData("data", importedData.toString());
58 rlLowerStore.materialise("lower program", program.toString());
59
60 if (!isConsistent())
61 return false;
62 return true;
63 }
64
65 @Override
66 public boolean isConsistent() {
67 AnswerTuples ans = null;
68 try {
69 ans = rlLowerStore.evaluate(QueryRecord.botQueryText, new String[] {"X"});
70 return !ans.isValid();
71 } finally {
72 if (ans != null) ans.dispose();
73
74 }
75
76 }
77
78 @Override
79 public void evaluateUpper(QueryRecord record) {
80 evaluate(record);
81 }
82
83}