aboutsummaryrefslogtreecommitdiff
path: root/src/uk/ac/ox/cs/pagoda/reasoner
diff options
context:
space:
mode:
Diffstat (limited to 'src/uk/ac/ox/cs/pagoda/reasoner')
-rw-r--r--src/uk/ac/ox/cs/pagoda/reasoner/ConsistencyManager.java31
-rw-r--r--src/uk/ac/ox/cs/pagoda/reasoner/MyQueryReasoner.java26
-rw-r--r--src/uk/ac/ox/cs/pagoda/reasoner/light/BasicQueryEngine.java33
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 @@
1package uk.ac.ox.cs.pagoda.reasoner; 1package uk.ac.ox.cs.pagoda.reasoner;
2 2
3import java.util.LinkedList;
4
5import org.semanticweb.HermiT.model.Atom; 3import org.semanticweb.HermiT.model.Atom;
6import org.semanticweb.HermiT.model.AtomicConcept; 4import org.semanticweb.HermiT.model.AtomicConcept;
7import org.semanticweb.HermiT.model.DLClause; 5import org.semanticweb.HermiT.model.DLClause;
@@ -9,7 +7,9 @@ import org.semanticweb.HermiT.model.Variable;
9import org.semanticweb.owlapi.model.OWLOntology; 7import org.semanticweb.owlapi.model.OWLOntology;
10import org.semanticweb.owlapi.model.OWLOntologyCreationException; 8import org.semanticweb.owlapi.model.OWLOntologyCreationException;
11import org.semanticweb.owlapi.model.OWLOntologyManager; 9import org.semanticweb.owlapi.model.OWLOntologyManager;
12 10import uk.ac.ox.cs.JRDFox.JRDFStoreException;
11import uk.ac.ox.cs.JRDFox.store.DataStore;
12import uk.ac.ox.cs.JRDFox.store.DataStore.UpdateType;
13import uk.ac.ox.cs.pagoda.hermit.DLClauseHelper; 13import uk.ac.ox.cs.pagoda.hermit.DLClauseHelper;
14import uk.ac.ox.cs.pagoda.query.AnswerTuples; 14import uk.ac.ox.cs.pagoda.query.AnswerTuples;
15import uk.ac.ox.cs.pagoda.query.QueryManager; 15import uk.ac.ox.cs.pagoda.query.QueryManager;
@@ -21,9 +21,8 @@ import uk.ac.ox.cs.pagoda.tracking.QueryTracker;
21import uk.ac.ox.cs.pagoda.tracking.TrackingRuleEncoder; 21import uk.ac.ox.cs.pagoda.tracking.TrackingRuleEncoder;
22import uk.ac.ox.cs.pagoda.util.Timer; 22import uk.ac.ox.cs.pagoda.util.Timer;
23import uk.ac.ox.cs.pagoda.util.Utility; 23import uk.ac.ox.cs.pagoda.util.Utility;
24import uk.ac.ox.cs.JRDFox.JRDFStoreException; 24
25import uk.ac.ox.cs.JRDFox.store.DataStore; 25import java.util.LinkedList;
26import uk.ac.ox.cs.JRDFox.store.DataStore.UpdateType;
27 26
28public class ConsistencyManager { 27public 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 @@
1package uk.ac.ox.cs.pagoda.reasoner.light; 1package uk.ac.ox.cs.pagoda.reasoner.light;
2 2
3import java.util.Arrays;
4import java.util.Collection;
5import java.util.HashSet;
6import java.util.Iterator;
7import java.util.Set;
8
9import org.semanticweb.HermiT.model.DLClause; 3import org.semanticweb.HermiT.model.DLClause;
10 4import uk.ac.ox.cs.JRDFox.JRDFStoreException;
5import uk.ac.ox.cs.JRDFox.store.DataStore;
6import uk.ac.ox.cs.JRDFox.store.DataStore.UpdateType;
7import uk.ac.ox.cs.JRDFox.store.Parameters;
8import uk.ac.ox.cs.JRDFox.store.TripleStatus;
9import uk.ac.ox.cs.JRDFox.store.TupleIterator;
11import uk.ac.ox.cs.pagoda.hermit.DLClauseHelper; 10import uk.ac.ox.cs.pagoda.hermit.DLClauseHelper;
12import uk.ac.ox.cs.pagoda.query.AnswerTuples; 11import uk.ac.ox.cs.pagoda.query.AnswerTuples;
13import uk.ac.ox.cs.pagoda.query.GapByStore4ID; 12import uk.ac.ox.cs.pagoda.query.GapByStore4ID;
14import uk.ac.ox.cs.pagoda.rules.DatalogProgram; 13import uk.ac.ox.cs.pagoda.rules.DatalogProgram;
15import uk.ac.ox.cs.pagoda.rules.Program; 14import uk.ac.ox.cs.pagoda.rules.Program;
16import uk.ac.ox.cs.pagoda.util.ConjunctiveQueryHelper; 15import uk.ac.ox.cs.pagoda.util.*;
17import uk.ac.ox.cs.pagoda.util.Namespace;
18import uk.ac.ox.cs.pagoda.util.Timer; 16import uk.ac.ox.cs.pagoda.util.Timer;
19import uk.ac.ox.cs.pagoda.util.UFS; 17
20import uk.ac.ox.cs.pagoda.util.Utility; 18import java.util.*;
21import uk.ac.ox.cs.JRDFox.JRDFStoreException;
22import uk.ac.ox.cs.JRDFox.store.DataStore;
23import uk.ac.ox.cs.JRDFox.store.Parameters;
24import uk.ac.ox.cs.JRDFox.store.TripleStatus;
25import uk.ac.ox.cs.JRDFox.store.TupleIterator;
26import uk.ac.ox.cs.JRDFox.store.DataStore.UpdateType;
27 19
28public class BasicQueryEngine extends RDFoxQueryEngine { 20public 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);