diff options
Diffstat (limited to 'src/uk/ac/ox/cs/pagoda/reasoner')
3 files changed, 60 insertions, 30 deletions
diff --git a/src/uk/ac/ox/cs/pagoda/reasoner/ConsistencyManager.java b/src/uk/ac/ox/cs/pagoda/reasoner/ConsistencyManager.java index 9b862ce..d179d14 100644 --- a/src/uk/ac/ox/cs/pagoda/reasoner/ConsistencyManager.java +++ b/src/uk/ac/ox/cs/pagoda/reasoner/ConsistencyManager.java | |||
| @@ -1,7 +1,5 @@ | |||
| 1 | package uk.ac.ox.cs.pagoda.reasoner; | 1 | package uk.ac.ox.cs.pagoda.reasoner; |
| 2 | 2 | ||
| 3 | import java.util.LinkedList; | ||
| 4 | |||
| 5 | import org.semanticweb.HermiT.model.Atom; | 3 | import org.semanticweb.HermiT.model.Atom; |
| 6 | import org.semanticweb.HermiT.model.AtomicConcept; | 4 | import org.semanticweb.HermiT.model.AtomicConcept; |
| 7 | import org.semanticweb.HermiT.model.DLClause; | 5 | import org.semanticweb.HermiT.model.DLClause; |
| @@ -9,7 +7,9 @@ import org.semanticweb.HermiT.model.Variable; | |||
| 9 | import org.semanticweb.owlapi.model.OWLOntology; | 7 | import org.semanticweb.owlapi.model.OWLOntology; |
| 10 | import org.semanticweb.owlapi.model.OWLOntologyCreationException; | 8 | import org.semanticweb.owlapi.model.OWLOntologyCreationException; |
| 11 | import org.semanticweb.owlapi.model.OWLOntologyManager; | 9 | import org.semanticweb.owlapi.model.OWLOntologyManager; |
| 12 | 10 | import uk.ac.ox.cs.JRDFox.JRDFStoreException; | |
| 11 | import uk.ac.ox.cs.JRDFox.store.DataStore; | ||
| 12 | import uk.ac.ox.cs.JRDFox.store.DataStore.UpdateType; | ||
| 13 | import uk.ac.ox.cs.pagoda.hermit.DLClauseHelper; | 13 | import uk.ac.ox.cs.pagoda.hermit.DLClauseHelper; |
| 14 | import uk.ac.ox.cs.pagoda.query.AnswerTuples; | 14 | import uk.ac.ox.cs.pagoda.query.AnswerTuples; |
| 15 | import uk.ac.ox.cs.pagoda.query.QueryManager; | 15 | import uk.ac.ox.cs.pagoda.query.QueryManager; |
| @@ -21,9 +21,8 @@ import uk.ac.ox.cs.pagoda.tracking.QueryTracker; | |||
| 21 | import uk.ac.ox.cs.pagoda.tracking.TrackingRuleEncoder; | 21 | import uk.ac.ox.cs.pagoda.tracking.TrackingRuleEncoder; |
| 22 | import uk.ac.ox.cs.pagoda.util.Timer; | 22 | import uk.ac.ox.cs.pagoda.util.Timer; |
| 23 | import uk.ac.ox.cs.pagoda.util.Utility; | 23 | import uk.ac.ox.cs.pagoda.util.Utility; |
| 24 | import uk.ac.ox.cs.JRDFox.JRDFStoreException; | 24 | |
| 25 | import uk.ac.ox.cs.JRDFox.store.DataStore; | 25 | import java.util.LinkedList; |
| 26 | import uk.ac.ox.cs.JRDFox.store.DataStore.UpdateType; | ||
| 27 | 26 | ||
| 28 | public class ConsistencyManager { | 27 | public class ConsistencyManager { |
| 29 | 28 | ||
| @@ -85,6 +84,23 @@ public class ConsistencyManager { | |||
| 85 | } | 84 | } |
| 86 | return false; | 85 | return false; |
| 87 | } | 86 | } |
| 87 | |||
| 88 | boolean checkSkolemUpper() { | ||
| 89 | if (m_reasoner.limitedSkolemUpperStore != null) { | ||
| 90 | AnswerTuples tuples = null; | ||
| 91 | try { | ||
| 92 | tuples = m_reasoner.limitedSkolemUpperStore.evaluate(fullQueryRecord.getQueryText(), fullQueryRecord.getAnswerVariables()); | ||
| 93 | if (!tuples.isValid()) { | ||
| 94 | Utility.logInfo("There are no contradictions derived in the limited-skolem upper bound materialisation."); | ||
| 95 | return satisfiability(t.duration()); | ||
| 96 | } | ||
| 97 | } | ||
| 98 | finally { | ||
| 99 | if (tuples != null) tuples.dispose(); | ||
| 100 | } | ||
| 101 | } | ||
| 102 | return false; | ||
| 103 | } | ||
| 88 | 104 | ||
| 89 | boolean check() { | 105 | boolean check() { |
| 90 | // if (!checkRLLowerBound()) return false; | 106 | // if (!checkRLLowerBound()) return false; |
| @@ -288,5 +304,6 @@ public class ConsistencyManager { | |||
| 288 | public QueryRecord[] getQueryRecords() { | 304 | public QueryRecord[] getQueryRecords() { |
| 289 | return botQueryRecords; | 305 | return botQueryRecords; |
| 290 | } | 306 | } |
| 291 | 307 | ||
| 308 | |||
| 292 | } | 309 | } |
diff --git a/src/uk/ac/ox/cs/pagoda/reasoner/MyQueryReasoner.java b/src/uk/ac/ox/cs/pagoda/reasoner/MyQueryReasoner.java index 3c0a001..233963e 100644 --- a/src/uk/ac/ox/cs/pagoda/reasoner/MyQueryReasoner.java +++ b/src/uk/ac/ox/cs/pagoda/reasoner/MyQueryReasoner.java | |||
| @@ -49,7 +49,8 @@ public class MyQueryReasoner extends QueryReasoner { | |||
| 49 | private Collection<String> predicatesWithGap = null; | 49 | private Collection<String> predicatesWithGap = null; |
| 50 | private Boolean satisfiable; | 50 | private Boolean satisfiable; |
| 51 | private ConsistencyManager consistency = new ConsistencyManager(this); | 51 | private ConsistencyManager consistency = new ConsistencyManager(this); |
| 52 | 52 | BasicQueryEngine limitedSkolemUpperStore; | |
| 53 | |||
| 53 | public MyQueryReasoner() { | 54 | public MyQueryReasoner() { |
| 54 | setup(true, true); | 55 | setup(true, true); |
| 55 | } | 56 | } |
| @@ -102,10 +103,10 @@ public class MyQueryReasoner extends QueryReasoner { | |||
| 102 | 103 | ||
| 103 | if (multiStageTag && !program.getGeneral().isHorn()) { | 104 | if (multiStageTag && !program.getGeneral().isHorn()) { |
| 104 | lazyUpperStore = getUpperStore("lazy-upper-bound", true); // new MultiStageQueryEngine("lazy-upper-bound", true); // | 105 | lazyUpperStore = getUpperStore("lazy-upper-bound", true); // new MultiStageQueryEngine("lazy-upper-bound", true); // |
| 106 | // TODO CHECK | ||
| 107 | limitedSkolemUpperStore = getUpperStore("limited-skolem-upper-bound", true); | ||
| 105 | } | 108 | } |
| 106 | 109 | ||
| 107 | // TODO add new upper store creation | ||
| 108 | |||
| 109 | importData(program.getAdditionalDataFile()); | 110 | importData(program.getAdditionalDataFile()); |
| 110 | 111 | ||
| 111 | elho_ontology = new ELHOProfile().getFragment(ontology); | 112 | elho_ontology = new ELHOProfile().getFragment(ontology); |
| @@ -151,7 +152,21 @@ public class MyQueryReasoner extends QueryReasoner { | |||
| 151 | Utility.logInfo("time for satisfiability checking: " + t.duration()); | 152 | Utility.logInfo("time for satisfiability checking: " + t.duration()); |
| 152 | } | 153 | } |
| 153 | 154 | ||
| 154 | // TODO add new upper store preprocessing | 155 | // TODO check |
| 156 | if (limitedSkolemUpperStore != null) { | ||
| 157 | limitedSkolemUpperStore.importRDFData(name, datafile); | ||
| 158 | limitedSkolemUpperStore.materialise("saturate named individuals", originalMarkProgram); | ||
| 159 | int tag = limitedSkolemUpperStore.materialiseSkolemly(program, null); | ||
| 160 | if (tag != 1) { | ||
| 161 | limitedSkolemUpperStore.dispose(); | ||
| 162 | limitedSkolemUpperStore = null; | ||
| 163 | } | ||
| 164 | if (tag == -1) return false; | ||
| 165 | } | ||
| 166 | if (consistency.checkSkolemUpper()) { | ||
| 167 | satisfiable = true; | ||
| 168 | Utility.logInfo("time for satisfiability checking: " + t.duration()); | ||
| 169 | } | ||
| 155 | 170 | ||
| 156 | trackingStore.importRDFData(name, datafile); | 171 | trackingStore.importRDFData(name, datafile); |
| 157 | trackingStore.materialise("saturate named individuals", originalMarkProgram); | 172 | trackingStore.materialise("saturate named individuals", originalMarkProgram); |
| @@ -223,6 +238,9 @@ public class MyQueryReasoner extends QueryReasoner { | |||
| 223 | if (!queryRecord.isBottom() && lazyUpperStore != null) { | 238 | if (!queryRecord.isBottom() && lazyUpperStore != null) { |
| 224 | queryUpperBound(trackingStore, queryRecord, queryRecord.getQueryText(), queryRecord.getAnswerVariables()); | 239 | queryUpperBound(trackingStore, queryRecord, queryRecord.getQueryText(), queryRecord.getAnswerVariables()); |
| 225 | } | 240 | } |
| 241 | if (!queryRecord.isBottom() && limitedSkolemUpperStore != null) { | ||
| 242 | queryUpperBound(limitedSkolemUpperStore, queryRecord, queryRecord.getQueryText(), queryRecord.getAnswerVariables()); | ||
| 243 | } | ||
| 226 | // END: trying to intersect | 244 | // END: trying to intersect |
| 227 | 245 | ||
| 228 | queryRecord.addProcessingTime(Step.UpperBound, t.duration()); | 246 | queryRecord.addProcessingTime(Step.UpperBound, t.duration()); |
diff --git a/src/uk/ac/ox/cs/pagoda/reasoner/light/BasicQueryEngine.java b/src/uk/ac/ox/cs/pagoda/reasoner/light/BasicQueryEngine.java index 11588ce..5d2e411 100644 --- a/src/uk/ac/ox/cs/pagoda/reasoner/light/BasicQueryEngine.java +++ b/src/uk/ac/ox/cs/pagoda/reasoner/light/BasicQueryEngine.java | |||
| @@ -1,29 +1,21 @@ | |||
| 1 | package uk.ac.ox.cs.pagoda.reasoner.light; | 1 | package uk.ac.ox.cs.pagoda.reasoner.light; |
| 2 | 2 | ||
| 3 | import java.util.Arrays; | ||
| 4 | import java.util.Collection; | ||
| 5 | import java.util.HashSet; | ||
| 6 | import java.util.Iterator; | ||
| 7 | import java.util.Set; | ||
| 8 | |||
| 9 | import org.semanticweb.HermiT.model.DLClause; | 3 | import org.semanticweb.HermiT.model.DLClause; |
| 10 | 4 | import uk.ac.ox.cs.JRDFox.JRDFStoreException; | |
| 5 | import uk.ac.ox.cs.JRDFox.store.DataStore; | ||
| 6 | import uk.ac.ox.cs.JRDFox.store.DataStore.UpdateType; | ||
| 7 | import uk.ac.ox.cs.JRDFox.store.Parameters; | ||
| 8 | import uk.ac.ox.cs.JRDFox.store.TripleStatus; | ||
| 9 | import uk.ac.ox.cs.JRDFox.store.TupleIterator; | ||
| 11 | import uk.ac.ox.cs.pagoda.hermit.DLClauseHelper; | 10 | import uk.ac.ox.cs.pagoda.hermit.DLClauseHelper; |
| 12 | import uk.ac.ox.cs.pagoda.query.AnswerTuples; | 11 | import uk.ac.ox.cs.pagoda.query.AnswerTuples; |
| 13 | import uk.ac.ox.cs.pagoda.query.GapByStore4ID; | 12 | import uk.ac.ox.cs.pagoda.query.GapByStore4ID; |
| 14 | import uk.ac.ox.cs.pagoda.rules.DatalogProgram; | 13 | import uk.ac.ox.cs.pagoda.rules.DatalogProgram; |
| 15 | import uk.ac.ox.cs.pagoda.rules.Program; | 14 | import uk.ac.ox.cs.pagoda.rules.Program; |
| 16 | import uk.ac.ox.cs.pagoda.util.ConjunctiveQueryHelper; | 15 | import uk.ac.ox.cs.pagoda.util.*; |
| 17 | import uk.ac.ox.cs.pagoda.util.Namespace; | ||
| 18 | import uk.ac.ox.cs.pagoda.util.Timer; | 16 | import uk.ac.ox.cs.pagoda.util.Timer; |
| 19 | import uk.ac.ox.cs.pagoda.util.UFS; | 17 | |
| 20 | import uk.ac.ox.cs.pagoda.util.Utility; | 18 | import java.util.*; |
| 21 | import uk.ac.ox.cs.JRDFox.JRDFStoreException; | ||
| 22 | import uk.ac.ox.cs.JRDFox.store.DataStore; | ||
| 23 | import uk.ac.ox.cs.JRDFox.store.Parameters; | ||
| 24 | import uk.ac.ox.cs.JRDFox.store.TripleStatus; | ||
| 25 | import uk.ac.ox.cs.JRDFox.store.TupleIterator; | ||
| 26 | import uk.ac.ox.cs.JRDFox.store.DataStore.UpdateType; | ||
| 27 | 19 | ||
| 28 | public class BasicQueryEngine extends RDFoxQueryEngine { | 20 | public class BasicQueryEngine extends RDFoxQueryEngine { |
| 29 | 21 | ||
| @@ -74,6 +66,10 @@ public class BasicQueryEngine extends RDFoxQueryEngine { | |||
| 74 | 66 | ||
| 75 | return 1; | 67 | return 1; |
| 76 | } | 68 | } |
| 69 | |||
| 70 | public int materialiseSkolemly(DatalogProgram dProgram, GapByStore4ID gap) { | ||
| 71 | throw new UnsupportedOperationException(); | ||
| 72 | } | ||
| 77 | 73 | ||
| 78 | @Override | 74 | @Override |
| 79 | public AnswerTuples evaluate(String queryText) { | 75 | public AnswerTuples evaluate(String queryText) { |
| @@ -163,8 +159,7 @@ public class BasicQueryEngine extends RDFoxQueryEngine { | |||
| 163 | instanceTuples = null; | 159 | instanceTuples = null; |
| 164 | try { | 160 | try { |
| 165 | instanceTuples = getDataStore().compileQuery("SELECT ?X ?Z WHERE { ?X " + predicate + " ?Z }", prefixes, parameters); | 161 | instanceTuples = getDataStore().compileQuery("SELECT ?X ?Z WHERE { ?X " + predicate + " ?Z }", prefixes, parameters); |
| 166 | ; | 162 | long totalCount = 0; |
| 167 | long totalCount = 0; | ||
| 168 | for (long multi1 = instanceTuples.open(); multi1 != 0; multi1 = instanceTuples.getNext()) | 163 | for (long multi1 = instanceTuples.open(); multi1 != 0; multi1 = instanceTuples.getNext()) |
| 169 | totalCount += instanceTuples.getMultiplicity(); | 164 | totalCount += instanceTuples.getMultiplicity(); |
| 170 | number.add(predicate + " * " + totalCount); | 165 | number.add(predicate + " * " + totalCount); |
