aboutsummaryrefslogtreecommitdiff
path: root/src/uk/ac/ox/cs/pagoda/reasoner/ELHOQueryReasoner.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/uk/ac/ox/cs/pagoda/reasoner/ELHOQueryReasoner.java')
-rw-r--r--src/uk/ac/ox/cs/pagoda/reasoner/ELHOQueryReasoner.java96
1 files changed, 96 insertions, 0 deletions
diff --git a/src/uk/ac/ox/cs/pagoda/reasoner/ELHOQueryReasoner.java b/src/uk/ac/ox/cs/pagoda/reasoner/ELHOQueryReasoner.java
new file mode 100644
index 0000000..4ebe5f2
--- /dev/null
+++ b/src/uk/ac/ox/cs/pagoda/reasoner/ELHOQueryReasoner.java
@@ -0,0 +1,96 @@
1package uk.ac.ox.cs.pagoda.reasoner;
2
3import org.semanticweb.karma2.profile.ELHOProfile;
4import org.semanticweb.owlapi.model.OWLOntology;
5
6import uk.ac.ox.cs.pagoda.constraints.UnaryBottom;
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.KarmaQueryEngine;
11import uk.ac.ox.cs.pagoda.rules.LowerDatalogProgram;
12import uk.ac.ox.cs.pagoda.util.Timer;
13import uk.ac.ox.cs.pagoda.util.Utility;
14
15public class ELHOQueryReasoner extends QueryReasoner {
16
17 LowerDatalogProgram program;
18
19 OWLOntology elho_ontology;
20 KarmaQueryEngine elLowerStore = null;
21
22 private Timer t = new Timer();
23
24 public ELHOQueryReasoner() {
25 elLowerStore = new KarmaQueryEngine("el");
26 }
27
28 @Override
29 public void evaluate(QueryRecord queryRecord) {
30 AnswerTuples elAnswer = null;
31 t.reset();
32 try {
33 elAnswer = elLowerStore.evaluate(queryRecord.getQueryText(), queryRecord.getAnswerVariables());
34 queryRecord.updateLowerBoundAnswers(elAnswer);
35 } finally {
36 if (elAnswer != null) elAnswer.dispose();
37 }
38 queryRecord.addProcessingTime(Step.ELLowerBound, t.duration());
39
40 queryRecord.setDifficulty(Step.ELLowerBound);
41 queryRecord.markAsProcessed();
42 }
43
44 @Override
45 public void evaluateUpper(QueryRecord queryRecord) {
46 evaluate(queryRecord);
47 }
48
49 @Override
50 public void dispose() {
51 if (elLowerStore != null) elLowerStore.dispose();
52 super.dispose();
53 }
54
55 @Override
56 public void loadOntology(OWLOntology ontology) {
57 program = new LowerDatalogProgram(!forSemFacet);
58 program.load(ontology, new UnaryBottom());
59 program.transform();
60
61 importData(program.getAdditionalDataFile());
62
63 elho_ontology = new ELHOProfile().getFragment(ontology);
64 elLowerStore.processOntology(elho_ontology);
65 }
66
67 @Override
68 public boolean preprocess() {
69 elLowerStore.importRDFData("data", importedData.toString());
70 String rlLowerProgramText = program.toString();
71// program.save();
72 elLowerStore.materialise("lower program", rlLowerProgramText);
73 elLowerStore.initialiseKarma();
74
75 if (!isConsistent()) {
76 Utility.logDebug("The dataset is not consistent with the ontology.");
77 return false;
78 }
79 return true;
80 }
81
82 @Override
83 public boolean isConsistent() {
84 String[] X = new String[] {"X"};
85 AnswerTuples ans = null;
86 try {
87 ans = elLowerStore.evaluate(QueryRecord.botQueryText, X);
88 if (ans.isValid()) return false;
89 } finally {
90 if (ans != null) ans.dispose();
91 }
92
93 return true;
94 }
95
96}