diff options
| author | RncLsn <rnc.lsn@gmail.com> | 2015-05-11 18:00:57 +0100 |
|---|---|---|
| committer | RncLsn <rnc.lsn@gmail.com> | 2015-05-11 18:00:57 +0100 |
| commit | 4fe4ca32d8f45807ab881b6fb8e814842dad0ec6 (patch) | |
| tree | 024d11d748efc24494a28fdfb7efda3db5231ac4 /src | |
| parent | 870eb35e38f746ed73f233070dcf3bdaf4687e02 (diff) | |
| download | ACQuA-4fe4ca32d8f45807ab881b6fb8e814842dad0ec6.tar.gz ACQuA-4fe4ca32d8f45807ab881b6fb8e814842dad0ec6.zip | |
Adding (not completed) a new upper bound technique, namely Limited Skolemisation.
Diffstat (limited to 'src')
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 @@ | |||
| 1 | package uk.ac.ox.cs.pagoda.multistage; | ||
| 2 | |||
| 3 | import org.semanticweb.HermiT.model.DLClause; | ||
| 4 | |||
| 5 | import java.util.Collection; | ||
| 6 | |||
| 7 | /** | ||
| 8 | * An approximator for existential rules. | ||
| 9 | * */ | ||
| 10 | public 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 @@ | |||
| 1 | package uk.ac.ox.cs.pagoda.multistage; | ||
| 2 | |||
| 3 | import org.semanticweb.HermiT.model.DLClause; | ||
| 4 | import uk.ac.ox.cs.pagoda.rules.OverApproxExist; | ||
| 5 | |||
| 6 | import java.util.Collection; | ||
| 7 | |||
| 8 | /** | ||
| 9 | * A wrapper for <tt>OverApproxExist</tt>. | ||
| 10 | * */ | ||
| 11 | public 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 @@ | |||
| 1 | package uk.ac.ox.cs.pagoda.multistage; | ||
| 2 | |||
| 3 | |||
| 4 | import uk.ac.ox.cs.pagoda.constraints.BottomStrategy; | ||
| 5 | import uk.ac.ox.cs.pagoda.rules.Program; | ||
| 6 | |||
| 7 | public 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 @@ | |||
| 1 | package uk.ac.ox.cs.pagoda.multistage; | ||
| 2 | |||
| 3 | import org.semanticweb.HermiT.model.DLClause; | ||
| 4 | |||
| 5 | import 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 | * */ | ||
| 16 | public 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 @@ | |||
| 1 | package uk.ac.ox.cs.pagoda.multistage; | 1 | package uk.ac.ox.cs.pagoda.multistage; |
| 2 | 2 | ||
| 3 | import java.util.Collection; | 3 | import uk.ac.ox.cs.JRDFox.JRDFStoreException; |
| 4 | |||
| 5 | import uk.ac.ox.cs.pagoda.constraints.BottomStrategy; | 4 | import uk.ac.ox.cs.pagoda.constraints.BottomStrategy; |
| 6 | import uk.ac.ox.cs.pagoda.multistage.treatement.*; | 5 | import uk.ac.ox.cs.pagoda.multistage.treatement.Pick4NegativeConceptNaive; |
| 6 | import uk.ac.ox.cs.pagoda.multistage.treatement.Pick4NegativeConceptQuerySpecific; | ||
| 7 | import uk.ac.ox.cs.pagoda.multistage.treatement.Treatment; | ||
| 7 | import uk.ac.ox.cs.pagoda.query.GapByStore4ID; | 8 | import uk.ac.ox.cs.pagoda.query.GapByStore4ID; |
| 8 | import uk.ac.ox.cs.pagoda.query.QueryRecord; | 9 | import uk.ac.ox.cs.pagoda.query.QueryRecord; |
| 9 | import uk.ac.ox.cs.pagoda.rules.DatalogProgram; | 10 | import uk.ac.ox.cs.pagoda.rules.DatalogProgram; |
| 10 | import uk.ac.ox.cs.pagoda.rules.Program; | 11 | import uk.ac.ox.cs.pagoda.rules.Program; |
| 11 | import uk.ac.ox.cs.pagoda.util.Timer; | 12 | import uk.ac.ox.cs.pagoda.util.Timer; |
| 12 | import uk.ac.ox.cs.pagoda.util.Utility; | 13 | import uk.ac.ox.cs.pagoda.util.Utility; |
| 13 | import uk.ac.ox.cs.JRDFox.JRDFStoreException; | 14 | |
| 15 | import java.util.Collection; | ||
| 14 | 16 | ||
| 15 | public class MultiStageQueryEngine extends StageQueryEngine { | 17 | public 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 @@ | |||
| 1 | package uk.ac.ox.cs.pagoda.multistage; | 1 | package uk.ac.ox.cs.pagoda.multistage; |
| 2 | 2 | ||
| 3 | import java.io.BufferedWriter; | 3 | import org.semanticweb.HermiT.model.*; |
| 4 | import java.io.FileNotFoundException; | 4 | import uk.ac.ox.cs.JRDFox.JRDFStoreException; |
| 5 | import java.io.FileOutputStream; | 5 | import uk.ac.ox.cs.JRDFox.store.TupleIterator; |
| 6 | import java.io.IOException; | ||
| 7 | import java.io.OutputStreamWriter; | ||
| 8 | import java.util.Collection; | ||
| 9 | import java.util.HashMap; | ||
| 10 | import java.util.HashSet; | ||
| 11 | import java.util.Iterator; | ||
| 12 | import java.util.LinkedList; | ||
| 13 | import java.util.Map; | ||
| 14 | import java.util.Set; | ||
| 15 | |||
| 16 | import org.semanticweb.HermiT.model.AnnotatedEquality; | ||
| 17 | import org.semanticweb.HermiT.model.AtLeast; | ||
| 18 | import org.semanticweb.HermiT.model.AtLeastConcept; | ||
| 19 | import org.semanticweb.HermiT.model.AtLeastDataRange; | ||
| 20 | import org.semanticweb.HermiT.model.Atom; | ||
| 21 | import org.semanticweb.HermiT.model.AtomicConcept; | ||
| 22 | import org.semanticweb.HermiT.model.AtomicNegationConcept; | ||
| 23 | import org.semanticweb.HermiT.model.AtomicRole; | ||
| 24 | import org.semanticweb.HermiT.model.DLClause; | ||
| 25 | import org.semanticweb.HermiT.model.DLPredicate; | ||
| 26 | import org.semanticweb.HermiT.model.Equality; | ||
| 27 | import org.semanticweb.HermiT.model.Inequality; | ||
| 28 | import org.semanticweb.HermiT.model.InverseRole; | ||
| 29 | import org.semanticweb.HermiT.model.Variable; | ||
| 30 | |||
| 31 | import uk.ac.ox.cs.pagoda.MyPrefixes; | 6 | import uk.ac.ox.cs.pagoda.MyPrefixes; |
| 32 | import uk.ac.ox.cs.pagoda.constraints.*; | 7 | import uk.ac.ox.cs.pagoda.constraints.BottomStrategy; |
| 33 | import uk.ac.ox.cs.pagoda.hermit.RuleHelper; | 8 | import uk.ac.ox.cs.pagoda.hermit.RuleHelper; |
| 34 | import uk.ac.ox.cs.pagoda.reasoner.light.RDFoxTripleManager; | 9 | import uk.ac.ox.cs.pagoda.reasoner.light.RDFoxTripleManager; |
| 35 | import uk.ac.ox.cs.pagoda.rules.Approximator; | ||
| 36 | import uk.ac.ox.cs.pagoda.rules.OverApproxExist; | 10 | import uk.ac.ox.cs.pagoda.rules.OverApproxExist; |
| 37 | import uk.ac.ox.cs.pagoda.rules.Program; | 11 | import uk.ac.ox.cs.pagoda.rules.Program; |
| 38 | import uk.ac.ox.cs.pagoda.util.Namespace; | 12 | import uk.ac.ox.cs.pagoda.util.Namespace; |
| 39 | import uk.ac.ox.cs.pagoda.util.SparqlHelper; | 13 | import uk.ac.ox.cs.pagoda.util.SparqlHelper; |
| 40 | import uk.ac.ox.cs.pagoda.util.Timer; | 14 | import uk.ac.ox.cs.pagoda.util.Timer; |
| 41 | import uk.ac.ox.cs.pagoda.util.Utility; | 15 | import uk.ac.ox.cs.pagoda.util.Utility; |
| 42 | import uk.ac.ox.cs.JRDFox.JRDFStoreException; | 16 | |
| 43 | import uk.ac.ox.cs.JRDFox.store.TupleIterator; | 17 | import java.io.*; |
| 18 | import java.util.*; | ||
| 44 | 19 | ||
| 45 | public abstract class MultiStageUpperProgram { | 20 | public 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 @@ | |||
| 1 | package uk.ac.ox.cs.pagoda.multistage; | 1 | package uk.ac.ox.cs.pagoda.multistage; |
| 2 | 2 | ||
| 3 | import java.util.Collection; | 3 | import org.semanticweb.HermiT.model.*; |
| 4 | import java.util.HashSet; | ||
| 5 | import java.util.LinkedList; | ||
| 6 | |||
| 7 | import org.semanticweb.HermiT.model.AtLeastConcept; | ||
| 8 | import org.semanticweb.HermiT.model.Atom; | ||
| 9 | import org.semanticweb.HermiT.model.AtomicConcept; | ||
| 10 | import org.semanticweb.HermiT.model.AtomicNegationConcept; | ||
| 11 | import org.semanticweb.HermiT.model.AtomicRole; | ||
| 12 | import org.semanticweb.HermiT.model.DLClause; | ||
| 13 | import org.semanticweb.HermiT.model.DLPredicate; | ||
| 14 | import org.semanticweb.HermiT.model.InverseRole; | ||
| 15 | |||
| 16 | import uk.ac.ox.cs.pagoda.constraints.BottomStrategy; | 4 | import uk.ac.ox.cs.pagoda.constraints.BottomStrategy; |
| 17 | import uk.ac.ox.cs.pagoda.rules.Program; | 5 | import uk.ac.ox.cs.pagoda.rules.Program; |
| 18 | import uk.ac.ox.cs.pagoda.util.Timer; | 6 | import uk.ac.ox.cs.pagoda.util.Timer; |
| 19 | 7 | ||
| 8 | import java.util.Collection; | ||
| 9 | import java.util.HashSet; | ||
| 10 | import java.util.LinkedList; | ||
| 11 | |||
| 20 | public class RestrictedApplication extends MultiStageUpperProgram { | 12 | public 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 @@ | |||
| 1 | package uk.ac.ox.cs.pagoda.multistage.treatement; | 1 | package uk.ac.ox.cs.pagoda.multistage.treatement; |
| 2 | 2 | ||
| 3 | import java.util.Arrays; | 3 | import org.semanticweb.HermiT.model.*; |
| 4 | import java.util.Collections; | 4 | import uk.ac.ox.cs.JRDFox.JRDFStoreException; |
| 5 | import java.util.Comparator; | 5 | import uk.ac.ox.cs.JRDFox.store.TupleIterator; |
| 6 | import java.util.HashMap; | ||
| 7 | import java.util.HashSet; | ||
| 8 | import java.util.Iterator; | ||
| 9 | import java.util.LinkedList; | ||
| 10 | import java.util.Map; | ||
| 11 | import java.util.Set; | ||
| 12 | |||
| 13 | import org.semanticweb.HermiT.model.AnnotatedEquality; | ||
| 14 | import org.semanticweb.HermiT.model.Atom; | ||
| 15 | import org.semanticweb.HermiT.model.AtomicConcept; | ||
| 16 | import org.semanticweb.HermiT.model.AtomicRole; | ||
| 17 | import org.semanticweb.HermiT.model.DLClause; | ||
| 18 | import org.semanticweb.HermiT.model.DLPredicate; | ||
| 19 | import org.semanticweb.HermiT.model.Equality; | ||
| 20 | import org.semanticweb.HermiT.model.Inequality; | ||
| 21 | import org.semanticweb.HermiT.model.Variable; | ||
| 22 | |||
| 23 | import uk.ac.ox.cs.pagoda.constraints.PredicateDependency; | 6 | import uk.ac.ox.cs.pagoda.constraints.PredicateDependency; |
| 24 | import uk.ac.ox.cs.pagoda.hermit.DLClauseHelper; | 7 | import uk.ac.ox.cs.pagoda.hermit.DLClauseHelper; |
| 25 | import uk.ac.ox.cs.pagoda.multistage.AnswerTupleID; | 8 | import uk.ac.ox.cs.pagoda.multistage.AnswerTupleID; |
| @@ -31,8 +14,8 @@ import uk.ac.ox.cs.pagoda.reasoner.light.RDFoxTripleManager; | |||
| 31 | import uk.ac.ox.cs.pagoda.util.Namespace; | 14 | import uk.ac.ox.cs.pagoda.util.Namespace; |
| 32 | import uk.ac.ox.cs.pagoda.util.SparqlHelper; | 15 | import uk.ac.ox.cs.pagoda.util.SparqlHelper; |
| 33 | import uk.ac.ox.cs.pagoda.util.Utility; | 16 | import uk.ac.ox.cs.pagoda.util.Utility; |
| 34 | import uk.ac.ox.cs.JRDFox.JRDFStoreException; | 17 | |
| 35 | import uk.ac.ox.cs.JRDFox.store.TupleIterator; | 18 | import java.util.*; |
| 36 | 19 | ||
| 37 | public abstract class Pick4NegativeConcept implements Treatment { | 20 | public 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 @@ | |||
| 1 | package uk.ac.ox.cs.pagoda.multistage.treatement; | 1 | package uk.ac.ox.cs.pagoda.multistage.treatement; |
| 2 | 2 | ||
| 3 | import uk.ac.ox.cs.JRDFox.JRDFStoreException; | ||
| 3 | import uk.ac.ox.cs.pagoda.multistage.FoldedApplication; | 4 | import uk.ac.ox.cs.pagoda.multistage.FoldedApplication; |
| 4 | import uk.ac.ox.cs.pagoda.multistage.MultiStageQueryEngine; | 5 | import uk.ac.ox.cs.pagoda.multistage.MultiStageQueryEngine; |
| 5 | import uk.ac.ox.cs.pagoda.multistage.Violation; | 6 | import uk.ac.ox.cs.pagoda.multistage.Violation; |
| 6 | 7 | ||
| 7 | import uk.ac.ox.cs.JRDFox.JRDFStoreException; | 8 | // TODO should I implement something like this? |
| 8 | |||
| 9 | public class SkolemTreatment implements Treatment { | 9 | public 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 @@ | |||
| 1 | package uk.ac.ox.cs.pagoda.rules; | 1 | package uk.ac.ox.cs.pagoda.rules; |
| 2 | 2 | ||
| 3 | import java.util.Collection; | ||
| 4 | import java.util.LinkedList; | ||
| 5 | |||
| 6 | import org.semanticweb.HermiT.model.AtLeast; | 3 | import org.semanticweb.HermiT.model.AtLeast; |
| 7 | import org.semanticweb.HermiT.model.Atom; | 4 | import org.semanticweb.HermiT.model.Atom; |
| 8 | import org.semanticweb.HermiT.model.DLClause; | 5 | import org.semanticweb.HermiT.model.DLClause; |
| 9 | import org.semanticweb.HermiT.model.DLPredicate; | 6 | import org.semanticweb.HermiT.model.DLPredicate; |
| 10 | 7 | ||
| 8 | import java.util.Collection; | ||
| 9 | import java.util.LinkedList; | ||
| 10 | |||
| 11 | public interface Approximator { | 11 | public 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 @@ | |||
| 1 | package uk.ac.ox.cs.pagoda.rules; | 1 | package uk.ac.ox.cs.pagoda.rules; |
| 2 | 2 | ||
| 3 | import java.util.Collection; | ||
| 4 | import java.util.Iterator; | ||
| 5 | import java.util.LinkedList; | ||
| 6 | import java.util.Set; | ||
| 7 | |||
| 8 | import org.semanticweb.HermiT.Reasoner; | 3 | import org.semanticweb.HermiT.Reasoner; |
| 9 | import org.semanticweb.HermiT.model.Atom; | 4 | import org.semanticweb.HermiT.model.*; |
| 10 | import org.semanticweb.HermiT.model.AtomicConcept; | 5 | import org.semanticweb.owlapi.model.*; |
| 11 | import org.semanticweb.HermiT.model.AtomicRole; | ||
| 12 | import org.semanticweb.HermiT.model.DLClause; | ||
| 13 | import org.semanticweb.HermiT.model.Variable; | ||
| 14 | import org.semanticweb.owlapi.model.OWLClass; | ||
| 15 | import org.semanticweb.owlapi.model.OWLObjectInverseOf; | ||
| 16 | import org.semanticweb.owlapi.model.OWLObjectProperty; | ||
| 17 | import org.semanticweb.owlapi.model.OWLObjectPropertyExpression; | ||
| 18 | import org.semanticweb.owlapi.model.OWLOntology; | ||
| 19 | import org.semanticweb.owlapi.reasoner.Node; | 6 | import org.semanticweb.owlapi.reasoner.Node; |
| 20 | |||
| 21 | import uk.ac.ox.cs.pagoda.constraints.BottomStrategy; | 7 | import uk.ac.ox.cs.pagoda.constraints.BottomStrategy; |
| 22 | import uk.ac.ox.cs.pagoda.constraints.NullaryBottom; | 8 | import uk.ac.ox.cs.pagoda.constraints.NullaryBottom; |
| 23 | import uk.ac.ox.cs.pagoda.constraints.UnaryBottom; | 9 | import uk.ac.ox.cs.pagoda.constraints.UnaryBottom; |
| @@ -27,6 +13,11 @@ import uk.ac.ox.cs.pagoda.multistage.RestrictedApplication; | |||
| 27 | import uk.ac.ox.cs.pagoda.util.Timer; | 13 | import uk.ac.ox.cs.pagoda.util.Timer; |
| 28 | import uk.ac.ox.cs.pagoda.util.Utility; | 14 | import uk.ac.ox.cs.pagoda.util.Utility; |
| 29 | 15 | ||
| 16 | import java.util.Collection; | ||
| 17 | import java.util.Iterator; | ||
| 18 | import java.util.LinkedList; | ||
| 19 | import java.util.Set; | ||
| 20 | |||
| 30 | public class LowerDatalogProgram extends ApproxProgram implements IncrementalProgram { | 21 | public 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 @@ | |||
| 1 | package uk.ac.ox.cs.pagoda.rules; | 1 | package uk.ac.ox.cs.pagoda.rules; |
| 2 | 2 | ||
| 3 | import java.util.Collection; | 3 | import org.semanticweb.HermiT.model.*; |
| 4 | import java.util.HashMap; | ||
| 5 | import java.util.HashSet; | ||
| 6 | import java.util.LinkedList; | ||
| 7 | import java.util.Map; | ||
| 8 | import java.util.Set; | ||
| 9 | |||
| 10 | import org.semanticweb.HermiT.model.Atom; | ||
| 11 | import org.semanticweb.HermiT.model.DLClause; | ||
| 12 | import org.semanticweb.HermiT.model.DLPredicate; | ||
| 13 | import org.semanticweb.HermiT.model.Term; | ||
| 14 | import org.semanticweb.HermiT.model.Variable; | ||
| 15 | |||
| 16 | import uk.ac.ox.cs.pagoda.hermit.DLClauseHelper; | 4 | import uk.ac.ox.cs.pagoda.hermit.DLClauseHelper; |
| 17 | 5 | ||
| 6 | import java.util.*; | ||
| 7 | |||
| 18 | public class OverApproxDisj implements Approximator { | 8 | public 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 @@ | |||
| 1 | package uk.ac.ox.cs.pagoda.rules; | 1 | package uk.ac.ox.cs.pagoda.rules; |
| 2 | 2 | ||
| 3 | import java.util.Collection; | 3 | import org.semanticweb.HermiT.model.*; |
| 4 | import java.util.HashMap; | ||
| 5 | import java.util.Iterator; | ||
| 6 | import java.util.LinkedList; | ||
| 7 | import java.util.Map; | ||
| 8 | |||
| 9 | import org.semanticweb.HermiT.model.AtLeast; | ||
| 10 | import org.semanticweb.HermiT.model.AtLeastConcept; | ||
| 11 | import org.semanticweb.HermiT.model.AtLeastDataRange; | ||
| 12 | import org.semanticweb.HermiT.model.Atom; | ||
| 13 | import org.semanticweb.HermiT.model.AtomicConcept; | ||
| 14 | import org.semanticweb.HermiT.model.AtomicNegationConcept; | ||
| 15 | import org.semanticweb.HermiT.model.AtomicRole; | ||
| 16 | import org.semanticweb.HermiT.model.DLClause; | ||
| 17 | import org.semanticweb.HermiT.model.DLPredicate; | ||
| 18 | import org.semanticweb.HermiT.model.Individual; | ||
| 19 | import org.semanticweb.HermiT.model.Inequality; | ||
| 20 | import org.semanticweb.HermiT.model.InverseRole; | ||
| 21 | import org.semanticweb.HermiT.model.LiteralConcept; | ||
| 22 | import org.semanticweb.HermiT.model.Role; | ||
| 23 | import org.semanticweb.HermiT.model.Term; | ||
| 24 | import org.semanticweb.HermiT.model.Variable; | ||
| 25 | import uk.ac.ox.cs.pagoda.hermit.DLClauseHelper; | 4 | import uk.ac.ox.cs.pagoda.hermit.DLClauseHelper; |
| 26 | import uk.ac.ox.cs.pagoda.util.Namespace; | 5 | import uk.ac.ox.cs.pagoda.util.Namespace; |
| 27 | 6 | ||
| 7 | import java.util.*; | ||
| 8 | |||
| 28 | public class OverApproxExist implements Approximator { | 9 | public 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})); |
