aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRncLsn <rnc.lsn@gmail.com>2015-05-11 18:00:57 +0100
committerRncLsn <rnc.lsn@gmail.com>2015-05-11 18:00:57 +0100
commit4fe4ca32d8f45807ab881b6fb8e814842dad0ec6 (patch)
tree024d11d748efc24494a28fdfb7efda3db5231ac4 /src
parent870eb35e38f746ed73f233070dcf3bdaf4687e02 (diff)
downloadACQuA-4fe4ca32d8f45807ab881b6fb8e814842dad0ec6.tar.gz
ACQuA-4fe4ca32d8f45807ab881b6fb8e814842dad0ec6.zip
Adding (not completed) a new upper bound technique, namely Limited Skolemisation.
Diffstat (limited to 'src')
-rw-r--r--src/uk/ac/ox/cs/pagoda/multistage/ExistApproximator.java15
-rw-r--r--src/uk/ac/ox/cs/pagoda/multistage/ExistConstantApproximator.java23
-rw-r--r--src/uk/ac/ox/cs/pagoda/multistage/LimitedSkolemisationApplication.java16
-rw-r--r--src/uk/ac/ox/cs/pagoda/multistage/LimitedSkolemisationApproximator.java36
-rw-r--r--src/uk/ac/ox/cs/pagoda/multistage/MultiStageQueryEngine.java12
-rw-r--r--src/uk/ac/ox/cs/pagoda/multistage/MultiStageUpperProgram.java49
-rw-r--r--src/uk/ac/ox/cs/pagoda/multistage/RestrictedApplication.java25
-rw-r--r--src/uk/ac/ox/cs/pagoda/multistage/treatement/Pick4NegativeConcept.java30
-rw-r--r--src/uk/ac/ox/cs/pagoda/multistage/treatement/SkolemTreatment.java4
-rw-r--r--src/uk/ac/ox/cs/pagoda/reasoner/MyQueryReasoner.java8
-rw-r--r--src/uk/ac/ox/cs/pagoda/rules/Approximator.java8
-rw-r--r--src/uk/ac/ox/cs/pagoda/rules/LowerDatalogProgram.java25
-rw-r--r--src/uk/ac/ox/cs/pagoda/rules/OverApproxDisj.java23
-rw-r--r--src/uk/ac/ox/cs/pagoda/rules/OverApproxExist.java26
14 files changed, 160 insertions, 140 deletions
diff --git a/src/uk/ac/ox/cs/pagoda/multistage/ExistApproximator.java b/src/uk/ac/ox/cs/pagoda/multistage/ExistApproximator.java
new file mode 100644
index 0000000..0ee2035
--- /dev/null
+++ b/src/uk/ac/ox/cs/pagoda/multistage/ExistApproximator.java
@@ -0,0 +1,15 @@
1package uk.ac.ox.cs.pagoda.multistage;
2
3import org.semanticweb.HermiT.model.DLClause;
4
5import java.util.Collection;
6
7/**
8 * An approximator for existential rules.
9 * */
10public interface ExistApproximator {
11
12 Collection<DLClause> convert(DLClause clause,
13 DLClause originalClause,
14 Collection<AnswerTupleID> violationTuples);
15}
diff --git a/src/uk/ac/ox/cs/pagoda/multistage/ExistConstantApproximator.java b/src/uk/ac/ox/cs/pagoda/multistage/ExistConstantApproximator.java
new file mode 100644
index 0000000..5df66bc
--- /dev/null
+++ b/src/uk/ac/ox/cs/pagoda/multistage/ExistConstantApproximator.java
@@ -0,0 +1,23 @@
1package uk.ac.ox.cs.pagoda.multistage;
2
3import org.semanticweb.HermiT.model.DLClause;
4import uk.ac.ox.cs.pagoda.rules.OverApproxExist;
5
6import java.util.Collection;
7
8/**
9 * A wrapper for <tt>OverApproxExist</tt>.
10 * */
11public class ExistConstantApproximator implements ExistApproximator {
12
13 private final OverApproxExist overApproxExist;
14
15 public ExistConstantApproximator() {
16 overApproxExist = new OverApproxExist();
17 }
18
19 @Override
20 public Collection<DLClause> convert(DLClause clause, DLClause originalClause, Collection<AnswerTupleID> violationTuples) {
21 return overApproxExist.convert(clause, originalClause);
22 }
23}
diff --git a/src/uk/ac/ox/cs/pagoda/multistage/LimitedSkolemisationApplication.java b/src/uk/ac/ox/cs/pagoda/multistage/LimitedSkolemisationApplication.java
new file mode 100644
index 0000000..b0068e7
--- /dev/null
+++ b/src/uk/ac/ox/cs/pagoda/multistage/LimitedSkolemisationApplication.java
@@ -0,0 +1,16 @@
1package uk.ac.ox.cs.pagoda.multistage;
2
3
4import uk.ac.ox.cs.pagoda.constraints.BottomStrategy;
5import uk.ac.ox.cs.pagoda.rules.Program;
6
7public class LimitedSkolemisationApplication extends RestrictedApplication {
8
9
10 public LimitedSkolemisationApplication(Program program, BottomStrategy upperBottom) {
11 super(program, upperBottom);
12 }
13
14
15 // TODO override methods properly
16}
diff --git a/src/uk/ac/ox/cs/pagoda/multistage/LimitedSkolemisationApproximator.java b/src/uk/ac/ox/cs/pagoda/multistage/LimitedSkolemisationApproximator.java
new file mode 100644
index 0000000..348e849
--- /dev/null
+++ b/src/uk/ac/ox/cs/pagoda/multistage/LimitedSkolemisationApproximator.java
@@ -0,0 +1,36 @@
1package uk.ac.ox.cs.pagoda.multistage;
2
3import org.semanticweb.HermiT.model.DLClause;
4
5import java.util.Collection;
6
7/**
8 * Approximates existential rules by a limited form of Skolemisation.
9 * <p>
10 * Given a rule and a grounding substitution,
11 * it Skolemises the rule if
12 * all the terms in the substitution have depth less than a given depth,
13 * otherwise it approximates using an alternative <tt>ExistApproximator</tt>.
14 *
15 * */
16public class LimitedSkolemisationApproximator implements ExistApproximator {
17
18 private final int maxTermDepth;
19 private final ExistApproximator alternativeApproximator;
20
21 public LimitedSkolemisationApproximator(int maxTermDepth) {
22 this(maxTermDepth, new ExistConstantApproximator());
23 }
24
25 public LimitedSkolemisationApproximator(int maxTermDepth, ExistApproximator alternativeApproximator) {
26 this.maxTermDepth = maxTermDepth;
27 this.alternativeApproximator = alternativeApproximator;
28 }
29
30 @Override
31 public Collection<DLClause> convert(DLClause clause,
32 DLClause originalClause,
33 Collection<AnswerTupleID> violationTuples) {
34 return null;
35 }
36}
diff --git a/src/uk/ac/ox/cs/pagoda/multistage/MultiStageQueryEngine.java b/src/uk/ac/ox/cs/pagoda/multistage/MultiStageQueryEngine.java
index b77c264..7e40faf 100644
--- a/src/uk/ac/ox/cs/pagoda/multistage/MultiStageQueryEngine.java
+++ b/src/uk/ac/ox/cs/pagoda/multistage/MultiStageQueryEngine.java
@@ -1,16 +1,18 @@
1package uk.ac.ox.cs.pagoda.multistage; 1package uk.ac.ox.cs.pagoda.multistage;
2 2
3import java.util.Collection; 3import uk.ac.ox.cs.JRDFox.JRDFStoreException;
4
5import uk.ac.ox.cs.pagoda.constraints.BottomStrategy; 4import uk.ac.ox.cs.pagoda.constraints.BottomStrategy;
6import uk.ac.ox.cs.pagoda.multistage.treatement.*; 5import uk.ac.ox.cs.pagoda.multistage.treatement.Pick4NegativeConceptNaive;
6import uk.ac.ox.cs.pagoda.multistage.treatement.Pick4NegativeConceptQuerySpecific;
7import uk.ac.ox.cs.pagoda.multistage.treatement.Treatment;
7import uk.ac.ox.cs.pagoda.query.GapByStore4ID; 8import uk.ac.ox.cs.pagoda.query.GapByStore4ID;
8import uk.ac.ox.cs.pagoda.query.QueryRecord; 9import uk.ac.ox.cs.pagoda.query.QueryRecord;
9import uk.ac.ox.cs.pagoda.rules.DatalogProgram; 10import uk.ac.ox.cs.pagoda.rules.DatalogProgram;
10import uk.ac.ox.cs.pagoda.rules.Program; 11import uk.ac.ox.cs.pagoda.rules.Program;
11import uk.ac.ox.cs.pagoda.util.Timer; 12import uk.ac.ox.cs.pagoda.util.Timer;
12import uk.ac.ox.cs.pagoda.util.Utility; 13import uk.ac.ox.cs.pagoda.util.Utility;
13import uk.ac.ox.cs.JRDFox.JRDFStoreException; 14
15import java.util.Collection;
14 16
15public class MultiStageQueryEngine extends StageQueryEngine { 17public class MultiStageQueryEngine extends StageQueryEngine {
16 18
@@ -42,7 +44,7 @@ public class MultiStageQueryEngine extends StageQueryEngine {
42 RestrictedApplication program = new RestrictedApplication(generalProgram, dProgram.getUpperBottomStrategy()); 44 RestrictedApplication program = new RestrictedApplication(generalProgram, dProgram.getUpperBottomStrategy());
43 Treatment treatment = new Pick4NegativeConceptNaive(this, program); 45 Treatment treatment = new Pick4NegativeConceptNaive(this, program);
44 int ret = materialise(program, treatment, gap); 46 int ret = materialise(program, treatment, gap);
45 treatment.dispose(); 47 treatment.dispose(); // does nothing
46 return ret; 48 return ret;
47 } 49 }
48 50
diff --git a/src/uk/ac/ox/cs/pagoda/multistage/MultiStageUpperProgram.java b/src/uk/ac/ox/cs/pagoda/multistage/MultiStageUpperProgram.java
index 4239ccc..daf7c2c 100644
--- a/src/uk/ac/ox/cs/pagoda/multistage/MultiStageUpperProgram.java
+++ b/src/uk/ac/ox/cs/pagoda/multistage/MultiStageUpperProgram.java
@@ -1,46 +1,21 @@
1package uk.ac.ox.cs.pagoda.multistage; 1package uk.ac.ox.cs.pagoda.multistage;
2 2
3import java.io.BufferedWriter; 3import org.semanticweb.HermiT.model.*;
4import java.io.FileNotFoundException; 4import uk.ac.ox.cs.JRDFox.JRDFStoreException;
5import java.io.FileOutputStream; 5import uk.ac.ox.cs.JRDFox.store.TupleIterator;
6import java.io.IOException;
7import java.io.OutputStreamWriter;
8import java.util.Collection;
9import java.util.HashMap;
10import java.util.HashSet;
11import java.util.Iterator;
12import java.util.LinkedList;
13import java.util.Map;
14import java.util.Set;
15
16import org.semanticweb.HermiT.model.AnnotatedEquality;
17import org.semanticweb.HermiT.model.AtLeast;
18import org.semanticweb.HermiT.model.AtLeastConcept;
19import org.semanticweb.HermiT.model.AtLeastDataRange;
20import org.semanticweb.HermiT.model.Atom;
21import org.semanticweb.HermiT.model.AtomicConcept;
22import org.semanticweb.HermiT.model.AtomicNegationConcept;
23import org.semanticweb.HermiT.model.AtomicRole;
24import org.semanticweb.HermiT.model.DLClause;
25import org.semanticweb.HermiT.model.DLPredicate;
26import org.semanticweb.HermiT.model.Equality;
27import org.semanticweb.HermiT.model.Inequality;
28import org.semanticweb.HermiT.model.InverseRole;
29import org.semanticweb.HermiT.model.Variable;
30
31import uk.ac.ox.cs.pagoda.MyPrefixes; 6import uk.ac.ox.cs.pagoda.MyPrefixes;
32import uk.ac.ox.cs.pagoda.constraints.*; 7import uk.ac.ox.cs.pagoda.constraints.BottomStrategy;
33import uk.ac.ox.cs.pagoda.hermit.RuleHelper; 8import uk.ac.ox.cs.pagoda.hermit.RuleHelper;
34import uk.ac.ox.cs.pagoda.reasoner.light.RDFoxTripleManager; 9import uk.ac.ox.cs.pagoda.reasoner.light.RDFoxTripleManager;
35import uk.ac.ox.cs.pagoda.rules.Approximator;
36import uk.ac.ox.cs.pagoda.rules.OverApproxExist; 10import uk.ac.ox.cs.pagoda.rules.OverApproxExist;
37import uk.ac.ox.cs.pagoda.rules.Program; 11import uk.ac.ox.cs.pagoda.rules.Program;
38import uk.ac.ox.cs.pagoda.util.Namespace; 12import uk.ac.ox.cs.pagoda.util.Namespace;
39import uk.ac.ox.cs.pagoda.util.SparqlHelper; 13import uk.ac.ox.cs.pagoda.util.SparqlHelper;
40import uk.ac.ox.cs.pagoda.util.Timer; 14import uk.ac.ox.cs.pagoda.util.Timer;
41import uk.ac.ox.cs.pagoda.util.Utility; 15import uk.ac.ox.cs.pagoda.util.Utility;
42import uk.ac.ox.cs.JRDFox.JRDFStoreException; 16
43import uk.ac.ox.cs.JRDFox.store.TupleIterator; 17import java.io.*;
18import java.util.*;
44 19
45public abstract class MultiStageUpperProgram { 20public abstract class MultiStageUpperProgram {
46 21
@@ -49,7 +24,7 @@ public abstract class MultiStageUpperProgram {
49 Collection<DLClause> clauses; 24 Collection<DLClause> clauses;
50 25
51 BottomStrategy m_bottom = null; 26 BottomStrategy m_bottom = null;
52 Approximator m_approxExist = new OverApproxExist(); 27 ExistApproximator m_approxExist = new ExistConstantApproximator();
53 28
54 protected static final Variable X = Variable.create("X"); 29 protected static final Variable X = Variable.create("X");
55 30
@@ -397,9 +372,15 @@ public abstract class MultiStageUpperProgram {
397 } 372 }
398 373
399 public Collection<DLClause> convertExist(DLClause clause, DLClause originalDLClause) { 374 public Collection<DLClause> convertExist(DLClause clause, DLClause originalDLClause) {
400 return m_bottom.process(m_approxExist.convert(clause, originalDLClause)); 375 return m_bottom.process(m_approxExist.convert(clause, originalDLClause, null));
376 }
377
378 public Collection<DLClause> convertExist(DLClause clause, DLClause originalDLClause, List<AnswerTupleID> violationTuples) {
379 return m_bottom.process(m_approxExist.convert(clause, originalDLClause, null));
401 } 380 }
402 381
382
383
403 public void save(String filename) { 384 public void save(String filename) {
404 try { 385 try {
405 BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(filename))); 386 BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(filename)));
diff --git a/src/uk/ac/ox/cs/pagoda/multistage/RestrictedApplication.java b/src/uk/ac/ox/cs/pagoda/multistage/RestrictedApplication.java
index f8e6524..174175f 100644
--- a/src/uk/ac/ox/cs/pagoda/multistage/RestrictedApplication.java
+++ b/src/uk/ac/ox/cs/pagoda/multistage/RestrictedApplication.java
@@ -1,22 +1,14 @@
1package uk.ac.ox.cs.pagoda.multistage; 1package uk.ac.ox.cs.pagoda.multistage;
2 2
3import java.util.Collection; 3import org.semanticweb.HermiT.model.*;
4import java.util.HashSet;
5import java.util.LinkedList;
6
7import org.semanticweb.HermiT.model.AtLeastConcept;
8import org.semanticweb.HermiT.model.Atom;
9import org.semanticweb.HermiT.model.AtomicConcept;
10import org.semanticweb.HermiT.model.AtomicNegationConcept;
11import org.semanticweb.HermiT.model.AtomicRole;
12import org.semanticweb.HermiT.model.DLClause;
13import org.semanticweb.HermiT.model.DLPredicate;
14import org.semanticweb.HermiT.model.InverseRole;
15
16import uk.ac.ox.cs.pagoda.constraints.BottomStrategy; 4import uk.ac.ox.cs.pagoda.constraints.BottomStrategy;
17import uk.ac.ox.cs.pagoda.rules.Program; 5import uk.ac.ox.cs.pagoda.rules.Program;
18import uk.ac.ox.cs.pagoda.util.Timer; 6import uk.ac.ox.cs.pagoda.util.Timer;
19 7
8import java.util.Collection;
9import java.util.HashSet;
10import java.util.LinkedList;
11
20public class RestrictedApplication extends MultiStageUpperProgram { 12public class RestrictedApplication extends MultiStageUpperProgram {
21 13
22 Normalisation norm; 14 Normalisation norm;
@@ -34,13 +26,14 @@ public class RestrictedApplication extends MultiStageUpperProgram {
34 Collection<DLClause> allRules = new LinkedList<DLClause>(rules); 26 Collection<DLClause> allRules = new LinkedList<DLClause>(rules);
35 allRules.addAll(constraints); 27 allRules.addAll(constraints);
36 for (DLClause clause: allRules) { 28 for (DLClause clause: allRules) {
37 for (DLClause newClause: addAddtionalDatalogRules(clause, m_bottom, norm)) 29 for (DLClause newClause: addAdditionalDatalogRules(clause, m_bottom, norm))
38 addDatalogRule(newClause); 30 addDatalogRule(newClause);
39 } 31 }
40 allRules.clear(); 32 allRules.clear();
41 } 33 }
42 34
43 public static Collection<DLClause> addAddtionalDatalogRules(DLClause clause, BottomStrategy bottom, Normalisation norm) { 35 // It should be c-Skolemisation + shifting
36 public static Collection<DLClause> addAdditionalDatalogRules(DLClause clause, BottomStrategy bottom, Normalisation norm) {
44 LinkedList<DLClause> newClauses = new LinkedList<DLClause>(); 37 LinkedList<DLClause> newClauses = new LinkedList<DLClause>();
45 Atom[] headAtoms = clause.getHeadAtoms(); 38 Atom[] headAtoms = clause.getHeadAtoms();
46 Atom[] bodyAtoms = clause.getBodyAtoms(); 39 Atom[] bodyAtoms = clause.getBodyAtoms();
diff --git a/src/uk/ac/ox/cs/pagoda/multistage/treatement/Pick4NegativeConcept.java b/src/uk/ac/ox/cs/pagoda/multistage/treatement/Pick4NegativeConcept.java
index f40ae31..3917efc 100644
--- a/src/uk/ac/ox/cs/pagoda/multistage/treatement/Pick4NegativeConcept.java
+++ b/src/uk/ac/ox/cs/pagoda/multistage/treatement/Pick4NegativeConcept.java
@@ -1,25 +1,8 @@
1package uk.ac.ox.cs.pagoda.multistage.treatement; 1package uk.ac.ox.cs.pagoda.multistage.treatement;
2 2
3import java.util.Arrays; 3import org.semanticweb.HermiT.model.*;
4import java.util.Collections; 4import uk.ac.ox.cs.JRDFox.JRDFStoreException;
5import java.util.Comparator; 5import uk.ac.ox.cs.JRDFox.store.TupleIterator;
6import java.util.HashMap;
7import java.util.HashSet;
8import java.util.Iterator;
9import java.util.LinkedList;
10import java.util.Map;
11import java.util.Set;
12
13import org.semanticweb.HermiT.model.AnnotatedEquality;
14import org.semanticweb.HermiT.model.Atom;
15import org.semanticweb.HermiT.model.AtomicConcept;
16import org.semanticweb.HermiT.model.AtomicRole;
17import org.semanticweb.HermiT.model.DLClause;
18import org.semanticweb.HermiT.model.DLPredicate;
19import org.semanticweb.HermiT.model.Equality;
20import org.semanticweb.HermiT.model.Inequality;
21import org.semanticweb.HermiT.model.Variable;
22
23import uk.ac.ox.cs.pagoda.constraints.PredicateDependency; 6import uk.ac.ox.cs.pagoda.constraints.PredicateDependency;
24import uk.ac.ox.cs.pagoda.hermit.DLClauseHelper; 7import uk.ac.ox.cs.pagoda.hermit.DLClauseHelper;
25import uk.ac.ox.cs.pagoda.multistage.AnswerTupleID; 8import uk.ac.ox.cs.pagoda.multistage.AnswerTupleID;
@@ -31,8 +14,8 @@ import uk.ac.ox.cs.pagoda.reasoner.light.RDFoxTripleManager;
31import uk.ac.ox.cs.pagoda.util.Namespace; 14import uk.ac.ox.cs.pagoda.util.Namespace;
32import uk.ac.ox.cs.pagoda.util.SparqlHelper; 15import uk.ac.ox.cs.pagoda.util.SparqlHelper;
33import uk.ac.ox.cs.pagoda.util.Utility; 16import uk.ac.ox.cs.pagoda.util.Utility;
34import uk.ac.ox.cs.JRDFox.JRDFStoreException; 17
35import uk.ac.ox.cs.JRDFox.store.TupleIterator; 18import java.util.*;
36 19
37public abstract class Pick4NegativeConcept implements Treatment { 20public abstract class Pick4NegativeConcept implements Treatment {
38 21
@@ -140,7 +123,8 @@ public abstract class Pick4NegativeConcept implements Treatment {
140 else headAtoms.add(tHeadAtom); 123 else headAtoms.add(tHeadAtom);
141 } 124 }
142 else { 125 else {
143 Utility.logError("There might be an error here... Can't happend!!!"); 126 Utility.logError("There might be an error here... Can't happend!!!");
127 throw new Error("This condition should not happen!");
144 } 128 }
145 } 129 }
146 if (!tuples.isEmpty()) 130 if (!tuples.isEmpty())
diff --git a/src/uk/ac/ox/cs/pagoda/multistage/treatement/SkolemTreatment.java b/src/uk/ac/ox/cs/pagoda/multistage/treatement/SkolemTreatment.java
index c65fdf9..7a92b79 100644
--- a/src/uk/ac/ox/cs/pagoda/multistage/treatement/SkolemTreatment.java
+++ b/src/uk/ac/ox/cs/pagoda/multistage/treatement/SkolemTreatment.java
@@ -1,11 +1,11 @@
1package uk.ac.ox.cs.pagoda.multistage.treatement; 1package uk.ac.ox.cs.pagoda.multistage.treatement;
2 2
3import uk.ac.ox.cs.JRDFox.JRDFStoreException;
3import uk.ac.ox.cs.pagoda.multistage.FoldedApplication; 4import uk.ac.ox.cs.pagoda.multistage.FoldedApplication;
4import uk.ac.ox.cs.pagoda.multistage.MultiStageQueryEngine; 5import uk.ac.ox.cs.pagoda.multistage.MultiStageQueryEngine;
5import uk.ac.ox.cs.pagoda.multistage.Violation; 6import uk.ac.ox.cs.pagoda.multistage.Violation;
6 7
7import uk.ac.ox.cs.JRDFox.JRDFStoreException; 8// TODO should I implement something like this?
8
9public class SkolemTreatment implements Treatment { 9public class SkolemTreatment implements Treatment {
10 10
11 public SkolemTreatment(MultiStageQueryEngine multiStageQueryEngine, FoldedApplication program) { 11 public SkolemTreatment(MultiStageQueryEngine multiStageQueryEngine, FoldedApplication program) {
diff --git a/src/uk/ac/ox/cs/pagoda/reasoner/MyQueryReasoner.java b/src/uk/ac/ox/cs/pagoda/reasoner/MyQueryReasoner.java
index 4465764..7999daa 100644
--- a/src/uk/ac/ox/cs/pagoda/reasoner/MyQueryReasoner.java
+++ b/src/uk/ac/ox/cs/pagoda/reasoner/MyQueryReasoner.java
@@ -44,7 +44,7 @@ public class MyQueryReasoner extends QueryReasoner {
44 44
45 boolean equalityTag; 45 boolean equalityTag;
46 boolean multiStageTag; 46 boolean multiStageTag;
47 47
48 public MyQueryReasoner() { 48 public MyQueryReasoner() {
49 setup(true, true); 49 setup(true, true);
50 } 50 }
@@ -210,14 +210,14 @@ public class MyQueryReasoner extends QueryReasoner {
210 queryUpperBound(upperStore, queryRecord, queryRecord.getQueryText(), queryRecord.getAnswerVariables()); 210 queryUpperBound(upperStore, queryRecord, queryRecord.getQueryText(), queryRecord.getAnswerVariables());
211 211
212 // TODO log correct partial answers 212 // TODO log correct partial answers
213 Utility.logDebug(toJson("upperBound1", queryRecord)); 213// Utility.logDebug(toJson("upperBound1", queryRecord));
214 if (!queryRecord.processed() && !queryRecord.getQueryText().equals(extendedQuery[0])) { 214 if (!queryRecord.processed() && !queryRecord.getQueryText().equals(extendedQuery[0])) {
215 queryUpperBound(upperStore, queryRecord, extendedQuery[0], queryRecord.getAnswerVariables()); 215 queryUpperBound(upperStore, queryRecord, extendedQuery[0], queryRecord.getAnswerVariables());
216 Utility.logDebug(toJson("upperBound2", queryRecord)); 216// Utility.logDebug(toJson("upperBound2", queryRecord));
217 } 217 }
218 if (!queryRecord.processed() && queryRecord.hasNonAnsDistinguishedVariables()) { 218 if (!queryRecord.processed() && queryRecord.hasNonAnsDistinguishedVariables()) {
219 queryUpperBound(upperStore, queryRecord, extendedQuery[1], queryRecord.getDistinguishedVariables()); 219 queryUpperBound(upperStore, queryRecord, extendedQuery[1], queryRecord.getDistinguishedVariables());
220 Utility.logDebug(toJson("upperBound3", queryRecord)); 220// Utility.logDebug(toJson("upperBound3", queryRecord));
221 } 221 }
222 222
223 queryRecord.addProcessingTime(Step.UpperBound, t.duration()); 223 queryRecord.addProcessingTime(Step.UpperBound, t.duration());
diff --git a/src/uk/ac/ox/cs/pagoda/rules/Approximator.java b/src/uk/ac/ox/cs/pagoda/rules/Approximator.java
index b2edd56..66e676b 100644
--- a/src/uk/ac/ox/cs/pagoda/rules/Approximator.java
+++ b/src/uk/ac/ox/cs/pagoda/rules/Approximator.java
@@ -1,16 +1,16 @@
1package uk.ac.ox.cs.pagoda.rules; 1package uk.ac.ox.cs.pagoda.rules;
2 2
3import java.util.Collection;
4import java.util.LinkedList;
5
6import org.semanticweb.HermiT.model.AtLeast; 3import org.semanticweb.HermiT.model.AtLeast;
7import org.semanticweb.HermiT.model.Atom; 4import org.semanticweb.HermiT.model.Atom;
8import org.semanticweb.HermiT.model.DLClause; 5import org.semanticweb.HermiT.model.DLClause;
9import org.semanticweb.HermiT.model.DLPredicate; 6import org.semanticweb.HermiT.model.DLPredicate;
10 7
8import java.util.Collection;
9import java.util.LinkedList;
10
11public interface Approximator { 11public interface Approximator {
12 12
13 public Collection<DLClause> convert(DLClause clause, DLClause originalClause); 13 Collection<DLClause> convert(DLClause clause, DLClause originalClause);
14 14
15} 15}
16 16
diff --git a/src/uk/ac/ox/cs/pagoda/rules/LowerDatalogProgram.java b/src/uk/ac/ox/cs/pagoda/rules/LowerDatalogProgram.java
index 6e17f02..a664ba1 100644
--- a/src/uk/ac/ox/cs/pagoda/rules/LowerDatalogProgram.java
+++ b/src/uk/ac/ox/cs/pagoda/rules/LowerDatalogProgram.java
@@ -1,23 +1,9 @@
1package uk.ac.ox.cs.pagoda.rules; 1package uk.ac.ox.cs.pagoda.rules;
2 2
3import java.util.Collection;
4import java.util.Iterator;
5import java.util.LinkedList;
6import java.util.Set;
7
8import org.semanticweb.HermiT.Reasoner; 3import org.semanticweb.HermiT.Reasoner;
9import org.semanticweb.HermiT.model.Atom; 4import org.semanticweb.HermiT.model.*;
10import org.semanticweb.HermiT.model.AtomicConcept; 5import org.semanticweb.owlapi.model.*;
11import org.semanticweb.HermiT.model.AtomicRole;
12import org.semanticweb.HermiT.model.DLClause;
13import org.semanticweb.HermiT.model.Variable;
14import org.semanticweb.owlapi.model.OWLClass;
15import org.semanticweb.owlapi.model.OWLObjectInverseOf;
16import org.semanticweb.owlapi.model.OWLObjectProperty;
17import org.semanticweb.owlapi.model.OWLObjectPropertyExpression;
18import org.semanticweb.owlapi.model.OWLOntology;
19import org.semanticweb.owlapi.reasoner.Node; 6import org.semanticweb.owlapi.reasoner.Node;
20
21import uk.ac.ox.cs.pagoda.constraints.BottomStrategy; 7import uk.ac.ox.cs.pagoda.constraints.BottomStrategy;
22import uk.ac.ox.cs.pagoda.constraints.NullaryBottom; 8import uk.ac.ox.cs.pagoda.constraints.NullaryBottom;
23import uk.ac.ox.cs.pagoda.constraints.UnaryBottom; 9import uk.ac.ox.cs.pagoda.constraints.UnaryBottom;
@@ -27,6 +13,11 @@ import uk.ac.ox.cs.pagoda.multistage.RestrictedApplication;
27import uk.ac.ox.cs.pagoda.util.Timer; 13import uk.ac.ox.cs.pagoda.util.Timer;
28import uk.ac.ox.cs.pagoda.util.Utility; 14import uk.ac.ox.cs.pagoda.util.Utility;
29 15
16import java.util.Collection;
17import java.util.Iterator;
18import java.util.LinkedList;
19import java.util.Set;
20
30public class LowerDatalogProgram extends ApproxProgram implements IncrementalProgram { 21public class LowerDatalogProgram extends ApproxProgram implements IncrementalProgram {
31 22
32 boolean m_toClassify; 23 boolean m_toClassify;
@@ -68,7 +59,7 @@ public class LowerDatalogProgram extends ApproxProgram implements IncrementalPro
68 norm.process(); 59 norm.process();
69 for (DLClause nClause: norm.getNormlisedClauses()) { 60 for (DLClause nClause: norm.getNormlisedClauses()) {
70 if (nClause.getHeadLength() != 1) 61 if (nClause.getHeadLength() != 1)
71 for (DLClause newClause: RestrictedApplication.addAddtionalDatalogRules(nClause, tBottom, norm)) { 62 for (DLClause newClause: RestrictedApplication.addAdditionalDatalogRules(nClause, tBottom, norm)) {
72// System.out.println(newClause); 63// System.out.println(newClause);
73 if (newClause.getHeadAtom(0).getDLPredicate() instanceof AtomicConcept || newClause.getHeadAtom(0).getDLPredicate() instanceof AtomicRole) { 64 if (newClause.getHeadAtom(0).getDLPredicate() instanceof AtomicConcept || newClause.getHeadAtom(0).getDLPredicate() instanceof AtomicRole) {
74// System.out.println(newClause); 65// System.out.println(newClause);
diff --git a/src/uk/ac/ox/cs/pagoda/rules/OverApproxDisj.java b/src/uk/ac/ox/cs/pagoda/rules/OverApproxDisj.java
index 5edb08e..5b298e8 100644
--- a/src/uk/ac/ox/cs/pagoda/rules/OverApproxDisj.java
+++ b/src/uk/ac/ox/cs/pagoda/rules/OverApproxDisj.java
@@ -1,22 +1,19 @@
1package uk.ac.ox.cs.pagoda.rules; 1package uk.ac.ox.cs.pagoda.rules;
2 2
3import java.util.Collection; 3import org.semanticweb.HermiT.model.*;
4import java.util.HashMap;
5import java.util.HashSet;
6import java.util.LinkedList;
7import java.util.Map;
8import java.util.Set;
9
10import org.semanticweb.HermiT.model.Atom;
11import org.semanticweb.HermiT.model.DLClause;
12import org.semanticweb.HermiT.model.DLPredicate;
13import org.semanticweb.HermiT.model.Term;
14import org.semanticweb.HermiT.model.Variable;
15
16import uk.ac.ox.cs.pagoda.hermit.DLClauseHelper; 4import uk.ac.ox.cs.pagoda.hermit.DLClauseHelper;
17 5
6import java.util.*;
7
18public class OverApproxDisj implements Approximator { 8public class OverApproxDisj implements Approximator {
19 9
10 /**
11 * Splits a disjunctive rule into a bunch of rules.
12 * <p>
13 * It returns a collection containing a rule for each atom in the head of the input rule.
14 * Each rule has the same body of the input rule,
15 * and the relative head atom as head.
16 * */
20 @Override 17 @Override
21 public Collection<DLClause> convert(DLClause clause, DLClause originalClause) { 18 public Collection<DLClause> convert(DLClause clause, DLClause originalClause) {
22 LinkedList<DLClause> distincts = new LinkedList<DLClause>(); 19 LinkedList<DLClause> distincts = new LinkedList<DLClause>();
diff --git a/src/uk/ac/ox/cs/pagoda/rules/OverApproxExist.java b/src/uk/ac/ox/cs/pagoda/rules/OverApproxExist.java
index 7e66411..2ff1673 100644
--- a/src/uk/ac/ox/cs/pagoda/rules/OverApproxExist.java
+++ b/src/uk/ac/ox/cs/pagoda/rules/OverApproxExist.java
@@ -1,30 +1,11 @@
1package uk.ac.ox.cs.pagoda.rules; 1package uk.ac.ox.cs.pagoda.rules;
2 2
3import java.util.Collection; 3import org.semanticweb.HermiT.model.*;
4import java.util.HashMap;
5import java.util.Iterator;
6import java.util.LinkedList;
7import java.util.Map;
8
9import org.semanticweb.HermiT.model.AtLeast;
10import org.semanticweb.HermiT.model.AtLeastConcept;
11import org.semanticweb.HermiT.model.AtLeastDataRange;
12import org.semanticweb.HermiT.model.Atom;
13import org.semanticweb.HermiT.model.AtomicConcept;
14import org.semanticweb.HermiT.model.AtomicNegationConcept;
15import org.semanticweb.HermiT.model.AtomicRole;
16import org.semanticweb.HermiT.model.DLClause;
17import org.semanticweb.HermiT.model.DLPredicate;
18import org.semanticweb.HermiT.model.Individual;
19import org.semanticweb.HermiT.model.Inequality;
20import org.semanticweb.HermiT.model.InverseRole;
21import org.semanticweb.HermiT.model.LiteralConcept;
22import org.semanticweb.HermiT.model.Role;
23import org.semanticweb.HermiT.model.Term;
24import org.semanticweb.HermiT.model.Variable;
25import uk.ac.ox.cs.pagoda.hermit.DLClauseHelper; 4import uk.ac.ox.cs.pagoda.hermit.DLClauseHelper;
26import uk.ac.ox.cs.pagoda.util.Namespace; 5import uk.ac.ox.cs.pagoda.util.Namespace;
27 6
7import java.util.*;
8
28public class OverApproxExist implements Approximator { 9public class OverApproxExist implements Approximator {
29 10
30 @Override 11 @Override
@@ -142,6 +123,7 @@ public class OverApproxExist implements Approximator {
142 AtomicConcept atomicConcept = null; 123 AtomicConcept atomicConcept = null;
143 124
144 if (concept instanceof AtomicNegationConcept) { 125 if (concept instanceof AtomicNegationConcept) {
126 // is this already in MultiStageUpperProgram?
145 Atom atom1 = Atom.create(atomicConcept = ((AtomicNegationConcept) concept).getNegatedAtomicConcept(), X); 127 Atom atom1 = Atom.create(atomicConcept = ((AtomicNegationConcept) concept).getNegatedAtomicConcept(), X);
146 Atom atom2 = Atom.create(atomicConcept = getNegationConcept(atomicConcept), X); 128 Atom atom2 = Atom.create(atomicConcept = getNegationConcept(atomicConcept), X);
147 ret.add(DLClause.create(new Atom[0], new Atom[] {atom1, atom2})); 129 ret.add(DLClause.create(new Atom[0], new Atom[] {atom1, atom2}));