diff options
Diffstat (limited to 'src/uk/ac/ox/cs/pagoda/summary')
| -rw-r--r-- | src/uk/ac/ox/cs/pagoda/summary/HermitSummaryFilter.java | 59 |
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; | |||
| 14 | import uk.ac.ox.cs.pagoda.tracking.TrackingRuleEncoder; | 14 | import uk.ac.ox.cs.pagoda.tracking.TrackingRuleEncoder; |
| 15 | import uk.ac.ox.cs.pagoda.util.Timer; | 15 | import uk.ac.ox.cs.pagoda.util.Timer; |
| 16 | import uk.ac.ox.cs.pagoda.util.Utility; | 16 | import uk.ac.ox.cs.pagoda.util.Utility; |
| 17 | import uk.ac.ox.cs.pagoda.util.disposable.DisposedException; | ||
| 17 | 18 | ||
| 18 | import java.util.HashSet; | 19 | import java.util.HashSet; |
| 19 | import java.util.Set; | 20 | import java.util.Set; |
| 20 | 21 | ||
| 21 | public class HermitSummaryFilter implements Checker { | 22 | public 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 | } |
