aboutsummaryrefslogtreecommitdiff
path: root/src/uk/ac/ox/cs/pagoda/reasoner/HermiTReasoner.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/uk/ac/ox/cs/pagoda/reasoner/HermiTReasoner.java')
-rw-r--r--src/uk/ac/ox/cs/pagoda/reasoner/HermiTReasoner.java122
1 files changed, 0 insertions, 122 deletions
diff --git a/src/uk/ac/ox/cs/pagoda/reasoner/HermiTReasoner.java b/src/uk/ac/ox/cs/pagoda/reasoner/HermiTReasoner.java
deleted file mode 100644
index ac62488..0000000
--- a/src/uk/ac/ox/cs/pagoda/reasoner/HermiTReasoner.java
+++ /dev/null
@@ -1,122 +0,0 @@
1package uk.ac.ox.cs.pagoda.reasoner;
2
3import org.semanticweb.HermiT.Reasoner;
4import org.semanticweb.owlapi.model.*;
5import uk.ac.ox.cs.JRDFox.model.Individual;
6import uk.ac.ox.cs.pagoda.multistage.MultiStageQueryEngine;
7import uk.ac.ox.cs.pagoda.owl.OWLHelper;
8import uk.ac.ox.cs.pagoda.owl.QueryRoller;
9import uk.ac.ox.cs.pagoda.query.*;
10import uk.ac.ox.cs.pagoda.reasoner.light.BasicQueryEngine;
11import uk.ac.ox.cs.pagoda.rules.DatalogProgram;
12import uk.ac.ox.cs.pagoda.util.Utility;
13import uk.ac.ox.cs.pagoda.util.disposable.DisposedException;
14
15import java.io.File;
16import java.io.IOException;
17import java.util.HashSet;
18import java.util.Set;
19
20class HermiTReasoner extends QueryReasoner {
21
22 Reasoner hermit;
23
24 BasicQueryEngine upperStore = null;
25
26 OWLOntology onto;
27 OWLDataFactory factory;
28
29 String importedOntologyPath = null;
30
31 QueryRoller roller;
32 boolean toCheckSatisfiability;
33
34 public HermiTReasoner(boolean toCheckSatisfiability) {
35 this.toCheckSatisfiability = toCheckSatisfiability;
36 }
37
38 @Override
39 public void loadOntology(OWLOntology ontology) {
40 if(isDisposed()) throw new DisposedException();
41 onto = ontology;
42 }
43
44 @Override
45 public boolean preprocess() {
46 if(isDisposed()) throw new DisposedException();
47 OWLOntology tbox = onto;
48 try {
49 onto = OWLHelper.getImportedOntology(tbox, getImportedData().split(ImportDataFileSeparator));
50 importedOntologyPath = OWLHelper.getOntologyPath(onto);
51 } catch(OWLOntologyCreationException | OWLOntologyStorageException | IOException e) {
52 e.printStackTrace();
53 }
54
55 DatalogProgram datalogProgram = new DatalogProgram(tbox);
56 importData(datalogProgram.getAdditionalDataFile());
57 upperStore = new MultiStageQueryEngine("rl-upper", false);
58 upperStore.importRDFData("data", getImportedData());
59 GapByStore4ID gap = new GapByStore4ID(upperStore);
60 upperStore.materialiseFoldedly(datalogProgram, gap);
61 gap.clear();
62
63 factory = onto.getOWLOntologyManager().getOWLDataFactory();
64 roller = new QueryRoller(factory);
65
66 hermit = new Reasoner(onto);
67 return isConsistent();
68 }
69
70 @Override
71 public boolean isConsistent() {
72 if(isDisposed()) throw new DisposedException();
73 if(toCheckSatisfiability)
74 return hermit.isConsistent();
75 return true;
76 }
77
78 @Override
79 public void evaluate(QueryRecord record) {
80 if(isDisposed()) throw new DisposedException();
81 String[] disVars = record.getDistinguishedVariables();
82 Set<OWLNamedIndividual> individuals = onto.getIndividualsInSignature(true);
83 if(disVars.length == 1) {
84 OWLClassExpression clsExp = roller.rollUp(record.getClause(), record.getAnswerVariables()[0]);
85 Set<AnswerTuple> answers = new HashSet<AnswerTuple>();
86 for(OWLNamedIndividual individual : individuals) {
87 Utility.logDebug("checking ... " + individual);
88 if(hermit.isEntailed(factory.getOWLClassAssertionAxiom(clsExp, individual))) {
89 answers.add(new AnswerTuple(new Individual[]{Individual.create(individual.toStringID())}));
90 }
91 }
92 record.updateLowerBoundAnswers(new AnswerTuplesImp(record.getAnswerVariables(), answers));
93 record.markAsProcessed();
94 }
95 else {
96 // FIXME join here
97 record.markAsProcessed();
98 }
99 }
100
101 @Override
102 public void evaluateUpper(QueryRecord record) {
103 if(isDisposed()) throw new DisposedException();
104 AnswerTuples rlAnswer = null;
105 try {
106 rlAnswer = upperStore.evaluate(record.getQueryText(), record.getAnswerVariables());
107 record.updateUpperBoundAnswers(rlAnswer, true);
108 } finally {
109 if(rlAnswer != null) rlAnswer.dispose();
110 }
111 }
112
113 @Override
114 public void dispose() {
115 super.dispose();
116 if(importedOntologyPath != null) {
117 File tmp = new File(importedOntologyPath);
118 if(tmp.exists()) tmp.delete();
119 }
120 }
121
122}