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