aboutsummaryrefslogtreecommitdiff
path: root/src/uk/ac/ox/cs/pagoda/summary
diff options
context:
space:
mode:
Diffstat (limited to 'src/uk/ac/ox/cs/pagoda/summary')
-rw-r--r--src/uk/ac/ox/cs/pagoda/summary/HermitSummaryFilter.java59
1 files changed, 34 insertions, 25 deletions
diff --git a/src/uk/ac/ox/cs/pagoda/summary/HermitSummaryFilter.java b/src/uk/ac/ox/cs/pagoda/summary/HermitSummaryFilter.java
index 90a2ed4..f3f08e9 100644
--- a/src/uk/ac/ox/cs/pagoda/summary/HermitSummaryFilter.java
+++ b/src/uk/ac/ox/cs/pagoda/summary/HermitSummaryFilter.java
@@ -14,11 +14,12 @@ import uk.ac.ox.cs.pagoda.reasoner.full.HermitChecker;
14import uk.ac.ox.cs.pagoda.tracking.TrackingRuleEncoder; 14import uk.ac.ox.cs.pagoda.tracking.TrackingRuleEncoder;
15import uk.ac.ox.cs.pagoda.util.Timer; 15import uk.ac.ox.cs.pagoda.util.Timer;
16import uk.ac.ox.cs.pagoda.util.Utility; 16import uk.ac.ox.cs.pagoda.util.Utility;
17import uk.ac.ox.cs.pagoda.util.disposable.DisposedException;
17 18
18import java.util.HashSet; 19import java.util.HashSet;
19import java.util.Set; 20import java.util.Set;
20 21
21public class HermitSummaryFilter implements Checker { 22public class HermitSummaryFilter extends Checker {
22 23
23 public static final String QueryAnswerTermPrefix = TrackingRuleEncoder.QueryPredicate + "_term"; 24 public static final String QueryAnswerTermPrefix = TrackingRuleEncoder.QueryPredicate + "_term";
24 QueryRecord m_record; 25 QueryRecord m_record;
@@ -97,6 +98,8 @@ public class HermitSummaryFilter implements Checker {
97 98
98 @Override 99 @Override
99 public boolean isConsistent() { 100 public boolean isConsistent() {
101 if(isDisposed()) throw new DisposedException();
102
100 if (summary == null) 103 if (summary == null)
101 summary = new Summary(endomorphismChecker.getOntology(), endomorphismChecker.getGraph()); 104 summary = new Summary(endomorphismChecker.getOntology(), endomorphismChecker.getGraph());
102 105
@@ -107,31 +110,22 @@ public class HermitSummaryFilter implements Checker {
107 return endomorphismChecker.isConsistent(); 110 return endomorphismChecker.isConsistent();
108 } 111 }
109 112
110 private void initialiseSummarisedReasoner() {
111 Timer t = new Timer();
112 summarisedHermiT = new HermitChecker(summary.getSummary(), summary.getSummary(m_record));
113// summary.save("summarised_query" + m_record.getQueryID() + ".owl");
114 if(summarisedConsistency = summarisedHermiT.isConsistent())
115 Utility.logDebug("The summary of ABox is consistent with the TBox.");
116 else
117 Utility.logDebug("The summary of ABox is NOT consistent with the TBox.");
118 m_record.addProcessingTime(Step.SUMMARISATION, t.duration());
119 }
120
121 @Override 113 @Override
122 public int check(AnswerTuples answers) { 114 public int check(AnswerTuples answers) {
115 if(isDisposed()) throw new DisposedException();
116
123 Timer t = new Timer(); 117 Timer t = new Timer();
124 OWLOntology newOntology = addOntologyWithQueryPreciate(endomorphismChecker.getOntology(), m_record, answers); 118 OWLOntology newOntology = addOntologyWithQueryPreciate(endomorphismChecker.getOntology(), m_record, answers);
125 summary = new Summary(newOntology); 119 summary = new Summary(newOntology);
126 initialiseSummarisedReasoner(); 120 initialiseSummarisedReasoner();
127 121
128 if (summarisedConsistency) { 122 if(summarisedConsistency) {
129 Set<AnswerTuple> passed = new HashSet<AnswerTuple>(), succ = new HashSet<AnswerTuple>(); 123 Set<AnswerTuple> passed = new HashSet<AnswerTuple>(), succ = new HashSet<AnswerTuple>();
130 Set<AnswerTuple> falsified = new HashSet<AnswerTuple>(), fail = new HashSet<AnswerTuple>(); 124 Set<AnswerTuple> falsified = new HashSet<AnswerTuple>(), fail = new HashSet<AnswerTuple>();
131 125
132 int counter = 0; 126 int counter = 0;
133 AnswerTuple representative; 127 AnswerTuple representative;
134 for (AnswerTuple answer; answers.isValid(); answers.moveNext()) { 128 for(AnswerTuple answer; answers.isValid(); answers.moveNext()) {
135 ++counter; 129 ++counter;
136 answer = answers.getTuple(); 130 answer = answers.getTuple();
137 representative = summary.getSummary(answer); 131 representative = summary.getSummary(answer);
@@ -140,13 +134,13 @@ public class HermitSummaryFilter implements Checker {
140 else if(succ.contains(representative)) 134 else if(succ.contains(representative))
141 passed.add(answer); 135 passed.add(answer);
142 else if(summarisedHermiT.check(representative)) { 136 else if(summarisedHermiT.check(representative)) {
143 succ.add(representative); 137 succ.add(representative);
144 passed.add(answer); 138 passed.add(answer);
145 } 139 }
146 else { 140 else {
147 fail.add(representative); 141 fail.add(representative);
148 falsified.add(answer); 142 falsified.add(answer);
149 } 143 }
150 } 144 }
151 answers.dispose(); 145 answers.dispose();
152 146
@@ -177,16 +171,31 @@ public class HermitSummaryFilter implements Checker {
177 171
178 @Override 172 @Override
179 public boolean check(AnswerTuple answer) { 173 public boolean check(AnswerTuple answer) {
180 AnswerTuple representative = summary.getSummary(answer); 174 if(isDisposed()) throw new DisposedException();
181 if (summarisedHermiT.isConsistent() && !summarisedHermiT.check(representative)) 175
176 AnswerTuple representative = summary.getSummary(answer);
177 if(summarisedHermiT.isConsistent() && !summarisedHermiT.check(representative))
182 return false; 178 return false;
183 return endomorphismChecker.check(answer); 179 return endomorphismChecker.check(answer);
184 } 180 }
185 181
186 @Override 182 @Override
187 public void dispose() { 183 public void dispose() {
188 if (summarisedHermiT != null) summarisedHermiT.dispose(); 184 super.dispose();
189 endomorphismChecker.dispose(); 185
186 if(summarisedHermiT != null) summarisedHermiT.dispose();
187 endomorphismChecker.dispose();
188 }
189
190 private void initialiseSummarisedReasoner() {
191 Timer t = new Timer();
192 summarisedHermiT = new HermitChecker(summary.getSummary(), summary.getSummary(m_record));
193// summary.save("summarised_query" + m_record.getQueryID() + ".owl");
194 if(summarisedConsistency = summarisedHermiT.isConsistent())
195 Utility.logDebug("The summary of ABox is consistent with the TBox.");
196 else
197 Utility.logDebug("The summary of ABox is NOT consistent with the TBox.");
198 m_record.addProcessingTime(Step.SUMMARISATION, t.duration());
190 } 199 }
191 200
192} 201}