From d81b086fe329fa69891eba0a4b1f73e44183620d Mon Sep 17 00:00:00 2001 From: RncLsn Date: Wed, 20 May 2015 18:52:47 +0100 Subject: Added more tests. Querying of the upper bound is currently unstable. --- .../ox/cs/pagoda/reasoner/ELHOQueryReasoner.java | 6 +- .../ox/cs/pagoda/reasoner/ELHOUQueryReasoner.java | 8 +-- .../ac/ox/cs/pagoda/reasoner/MyQueryReasoner.java | 72 +++++++++++----------- src/uk/ac/ox/cs/pagoda/reasoner/QueryReasoner.java | 12 ++-- .../ac/ox/cs/pagoda/reasoner/RLQueryReasoner.java | 4 +- .../ac/ox/cs/pagoda/reasoner/RLUQueryReasoner.java | 6 +- 6 files changed, 55 insertions(+), 53 deletions(-) (limited to 'src/uk/ac/ox/cs/pagoda/reasoner') diff --git a/src/uk/ac/ox/cs/pagoda/reasoner/ELHOQueryReasoner.java b/src/uk/ac/ox/cs/pagoda/reasoner/ELHOQueryReasoner.java index 2285b5f..f5a8093 100644 --- a/src/uk/ac/ox/cs/pagoda/reasoner/ELHOQueryReasoner.java +++ b/src/uk/ac/ox/cs/pagoda/reasoner/ELHOQueryReasoner.java @@ -34,9 +34,9 @@ class ELHOQueryReasoner extends QueryReasoner { } finally { if (elAnswer != null) elAnswer.dispose(); } - queryRecord.addProcessingTime(Step.ELLowerBound, t.duration()); - - queryRecord.setDifficulty(Step.ELLowerBound); + queryRecord.addProcessingTime(Step.EL_LOWER_BOUND, t.duration()); + + queryRecord.setDifficulty(Step.EL_LOWER_BOUND); queryRecord.markAsProcessed(); } diff --git a/src/uk/ac/ox/cs/pagoda/reasoner/ELHOUQueryReasoner.java b/src/uk/ac/ox/cs/pagoda/reasoner/ELHOUQueryReasoner.java index a4fa7c3..34742c8 100644 --- a/src/uk/ac/ox/cs/pagoda/reasoner/ELHOUQueryReasoner.java +++ b/src/uk/ac/ox/cs/pagoda/reasoner/ELHOUQueryReasoner.java @@ -50,7 +50,7 @@ class ELHOUQueryReasoner extends QueryReasoner { } finally { if(rlAnswer != null) rlAnswer.dispose(); } - queryRecord.addProcessingTime(Step.LowerBound, t.duration()); + queryRecord.addProcessingTime(Step.LOWER_BOUND, t.duration()); String extendedQueryText = queryRecord.getExtendedQueryText().get(0); String[] toQuery = queryRecord.getQueryText().equals(extendedQueryText) ? @@ -66,10 +66,10 @@ class ELHOUQueryReasoner extends QueryReasoner { } finally { if(rlAnswer != null) rlAnswer.dispose(); } - queryRecord.addProcessingTime(Step.UpperBound, t.duration()); + queryRecord.addProcessingTime(Step.UPPER_BOUND, t.duration()); if (queryRecord.processed()) { - queryRecord.setDifficulty(Step.UpperBound); + queryRecord.setDifficulty(Step.UPPER_BOUND); return; } } @@ -83,7 +83,7 @@ class ELHOUQueryReasoner extends QueryReasoner { } finally { if (elAnswer != null) elAnswer.dispose(); } - queryRecord.addProcessingTime(Step.ELLowerBound, t.duration()); + queryRecord.addProcessingTime(Step.EL_LOWER_BOUND, t.duration()); } @Override diff --git a/src/uk/ac/ox/cs/pagoda/reasoner/MyQueryReasoner.java b/src/uk/ac/ox/cs/pagoda/reasoner/MyQueryReasoner.java index 6adbd37..2a49e24 100644 --- a/src/uk/ac/ox/cs/pagoda/reasoner/MyQueryReasoner.java +++ b/src/uk/ac/ox/cs/pagoda/reasoner/MyQueryReasoner.java @@ -198,26 +198,31 @@ class MyQueryReasoner extends QueryReasoner { return satisfiable == SatisfiabilityStatus.SATISFIABLE; } - // TODO why the following??? - private void queryUpperStore(BasicQueryEngine upperStore, QueryRecord queryRecord, Tuple extendedQuery) { + /** + * It deals with blanks nodes differently from variables + * according to SPARQL semantics for OWL2 Entailment Regime. + *

+ * In particular variables are matched only against named individuals, + * and blank nodes against named and anonymous individuals. + */ + private boolean queryUpperStore(BasicQueryEngine upperStore, QueryRecord queryRecord, + Tuple extendedQuery, Step step) { + + queryUpperBound(upperStore, queryRecord, queryRecord.getQueryText(), queryRecord.getAnswerVariables()); + + if(queryRecord.hasNonAnsDistinguishedVariables()) { + if(!queryRecord.processed()) + queryUpperBound(upperStore, queryRecord, extendedQuery.get(0), queryRecord.getAnswerVariables()); + if(!queryRecord.processed()) + queryUpperBound(upperStore, queryRecord, extendedQuery.get(1), queryRecord.getDistinguishedVariables()); + } -// Utility.logInfo("1"); -// queryUpperBound(upperStore, queryRecord, queryRecord.getQueryText(), queryRecord.getAnswerVariables()); -// -// boolean conditionA = !queryRecord.processed() && !queryRecord.getQueryText().equals(extendedQuery.get(0)); -// boolean conditionB = !queryRecord.processed() && queryRecord.hasNonAnsDistinguishedVariables(); -// -// if(conditionA ^ conditionB) -// throw new Error("It really happened! I thought it was impossible"); -// -// if (conditionA) { -// Utility.logInfo("2"); - queryUpperBound(upperStore, queryRecord, extendedQuery.get(0), queryRecord.getAnswerVariables()); -// } -// if (conditionB) { -// Utility.logInfo("3"); -// queryUpperBound(upperStore, queryRecord, extendedQuery.get(1), queryRecord.getDistinguishedVariables()); -// } + queryRecord.addProcessingTime(step, t.duration()); + if(queryRecord.processed()) { + queryRecord.setDifficulty(step); + return true; + } + return false; } /** @@ -234,7 +239,7 @@ class MyQueryReasoner extends QueryReasoner { } finally { if (rlAnswer != null) rlAnswer.dispose(); } - queryRecord.addProcessingTime(Step.LowerBound, t.duration()); + queryRecord.addProcessingTime(Step.LOWER_BOUND, t.duration()); t.reset(); @@ -249,17 +254,14 @@ class MyQueryReasoner extends QueryReasoner { // queryUpperStore(trackingStore, queryRecord, extendedQueryTexts); // else { - queryUpperStore(trackingStore, queryRecord, extendedQueryTexts); - if(!(queryRecord.isBottom() || (lazyUpperStore == null && limitedSkolemUpperStore == null))) { - if(lazyUpperStore != null) queryUpperStore(lazyUpperStore, queryRecord, extendedQueryTexts); - if(limitedSkolemUpperStore != null) - queryUpperStore(limitedSkolemUpperStore, queryRecord, extendedQueryTexts); - } - - queryRecord.addProcessingTime(Step.UpperBound, t.duration()); - if (queryRecord.processed()) { - queryRecord.setDifficulty(Step.UpperBound); + if(queryUpperStore(trackingStore, queryRecord, extendedQueryTexts, Step.SIMPLE_UPPER_BOUND)) return null; + + if(!queryRecord.isBottom()) { + if(lazyUpperStore != null && queryUpperStore(lazyUpperStore, queryRecord, extendedQueryTexts, Step.LAZY_UPPER_BOUND)) + return null; + if(limitedSkolemUpperStore != null && queryUpperStore(limitedSkolemUpperStore, queryRecord, extendedQueryTexts, Step.L_SKOLEM_UPPER_BOUND)) + return null; } t.reset(); @@ -271,10 +273,10 @@ class MyQueryReasoner extends QueryReasoner { } finally { if (elAnswer != null) elAnswer.dispose(); } - queryRecord.addProcessingTime(Step.ELLowerBound, t.duration()); + queryRecord.addProcessingTime(Step.EL_LOWER_BOUND, t.duration()); if (queryRecord.processed()) { - queryRecord.setDifficulty(Step.ELLowerBound); + queryRecord.setDifficulty(Step.EL_LOWER_BOUND); return null; } @@ -291,7 +293,7 @@ class MyQueryReasoner extends QueryReasoner { // } // else { knowledgeBase = tracker.extract(trackingStore, consistency.getQueryRecords(), true); - queryRecord.addProcessingTime(Step.Fragment, t.duration()); + queryRecord.addProcessingTime(Step.FRAGMENT, t.duration()); // } if(knowledgeBase.isEmpty() || queryRecord.isBottom()) @@ -307,10 +309,10 @@ class MyQueryReasoner extends QueryReasoner { // knowledgebase = iterativeRefinement.extractWithFullABox(importedData.toString(), program.getUpperBottomStrategy()); // } // -// queryRecord.addProcessingTime(Step.FragmentRefinement, t.duration()); +// queryRecord.addProcessingTime(Step.FRAGMENT_REFINEMENT, t.duration()); // // if (knowledgebase == null) -// queryRecord.setDifficulty(Step.FragmentRefinement); +// queryRecord.setDifficulty(Step.FRAGMENT_REFINEMENT); return knowledgeBase; } diff --git a/src/uk/ac/ox/cs/pagoda/reasoner/QueryReasoner.java b/src/uk/ac/ox/cs/pagoda/reasoner/QueryReasoner.java index d4f4596..64945e8 100644 --- a/src/uk/ac/ox/cs/pagoda/reasoner/QueryReasoner.java +++ b/src/uk/ac/ox/cs/pagoda/reasoner/QueryReasoner.java @@ -6,7 +6,7 @@ import uk.ac.ox.cs.pagoda.owl.OWLHelper; import uk.ac.ox.cs.pagoda.query.AnswerTuples; import uk.ac.ox.cs.pagoda.query.QueryManager; import uk.ac.ox.cs.pagoda.query.QueryRecord; -import uk.ac.ox.cs.pagoda.util.Properties; +import uk.ac.ox.cs.pagoda.util.PagodaProperties; import uk.ac.ox.cs.pagoda.util.Timer; import uk.ac.ox.cs.pagoda.util.Utility; @@ -26,11 +26,11 @@ public abstract class QueryReasoner { public boolean fullReasoner = this instanceof MyQueryReasoner; protected StringBuilder importedData = new StringBuilder(); // protected boolean forSemFacet = false; - Properties properties; +PagodaProperties properties; BufferedWriter answerWriter = null; private QueryManager m_queryManager = new QueryManager(); - - public static QueryReasoner getInstance(Properties p) { + + public static QueryReasoner getInstance(PagodaProperties p) { OWLOntology ontology = OWLHelper.loadOntology(p.getOntologyPath()); QueryReasoner pagoda = getInstance(ontology, p); pagoda.properties = p; @@ -49,11 +49,11 @@ public abstract class QueryReasoner { public static QueryReasoner getInstance(OWLOntology o) { QueryReasoner pagoda = getInstance(Type.Full, o, DEFAULT_MULTI_STAGES, DEFAULT_EQUALITIES); - pagoda.properties = new Properties(); + pagoda.properties = new PagodaProperties(); return pagoda; } - private static QueryReasoner getInstance(OWLOntology o, Properties p) { + private static QueryReasoner getInstance(OWLOntology o, PagodaProperties p) { return getInstance(Type.Full, o, DEFAULT_MULTI_STAGES, DEFAULT_EQUALITIES); } diff --git a/src/uk/ac/ox/cs/pagoda/reasoner/RLQueryReasoner.java b/src/uk/ac/ox/cs/pagoda/reasoner/RLQueryReasoner.java index 60f34c6..bea5bbf 100644 --- a/src/uk/ac/ox/cs/pagoda/reasoner/RLQueryReasoner.java +++ b/src/uk/ac/ox/cs/pagoda/reasoner/RLQueryReasoner.java @@ -31,8 +31,8 @@ class RLQueryReasoner extends QueryReasoner { } finally { if (rlAnswer != null) rlAnswer.dispose(); } - queryRecord.addProcessingTime(Step.LowerBound, t.duration()); - queryRecord.setDifficulty(Step.LowerBound); + queryRecord.addProcessingTime(Step.LOWER_BOUND, t.duration()); + queryRecord.setDifficulty(Step.LOWER_BOUND); queryRecord.markAsProcessed(); } diff --git a/src/uk/ac/ox/cs/pagoda/reasoner/RLUQueryReasoner.java b/src/uk/ac/ox/cs/pagoda/reasoner/RLUQueryReasoner.java index e5564d9..bdef436 100644 --- a/src/uk/ac/ox/cs/pagoda/reasoner/RLUQueryReasoner.java +++ b/src/uk/ac/ox/cs/pagoda/reasoner/RLUQueryReasoner.java @@ -41,7 +41,7 @@ class RLUQueryReasoner extends QueryReasoner { } finally { if (ans != null) ans.dispose(); } - queryRecord.addProcessingTime(Step.LowerBound, t.duration()); + queryRecord.addProcessingTime(Step.LOWER_BOUND, t.duration()); ans = null; t.reset(); @@ -52,10 +52,10 @@ class RLUQueryReasoner extends QueryReasoner { } finally { if (ans != null) ans.dispose(); } - queryRecord.addProcessingTime(Step.UpperBound, t.duration()); + queryRecord.addProcessingTime(Step.UPPER_BOUND, t.duration()); if (queryRecord.processed()) - queryRecord.setDifficulty(Step.UpperBound); + queryRecord.setDifficulty(Step.UPPER_BOUND); } @Override -- cgit v1.2.3