From 6fd8b21066852cbc21e247e7cf0a2f423ebc1658 Mon Sep 17 00:00:00 2001 From: RncLsn Date: Wed, 13 May 2015 19:22:07 +0100 Subject: Fast implementation of all the other things to get something working, but it doesn't. --- .../ox/cs/pagoda/reasoner/ConsistencyManager.java | 31 +++++++++++++++----- .../ac/ox/cs/pagoda/reasoner/MyQueryReasoner.java | 26 ++++++++++++++--- .../cs/pagoda/reasoner/light/BasicQueryEngine.java | 33 +++++++++------------- 3 files changed, 60 insertions(+), 30 deletions(-) (limited to 'src/uk/ac/ox/cs/pagoda/reasoner') 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 @@ package uk.ac.ox.cs.pagoda.reasoner; -import java.util.LinkedList; - import org.semanticweb.HermiT.model.Atom; import org.semanticweb.HermiT.model.AtomicConcept; import org.semanticweb.HermiT.model.DLClause; @@ -9,7 +7,9 @@ import org.semanticweb.HermiT.model.Variable; import org.semanticweb.owlapi.model.OWLOntology; import org.semanticweb.owlapi.model.OWLOntologyCreationException; import org.semanticweb.owlapi.model.OWLOntologyManager; - +import uk.ac.ox.cs.JRDFox.JRDFStoreException; +import uk.ac.ox.cs.JRDFox.store.DataStore; +import uk.ac.ox.cs.JRDFox.store.DataStore.UpdateType; import uk.ac.ox.cs.pagoda.hermit.DLClauseHelper; import uk.ac.ox.cs.pagoda.query.AnswerTuples; import uk.ac.ox.cs.pagoda.query.QueryManager; @@ -21,9 +21,8 @@ import uk.ac.ox.cs.pagoda.tracking.QueryTracker; import uk.ac.ox.cs.pagoda.tracking.TrackingRuleEncoder; import uk.ac.ox.cs.pagoda.util.Timer; import uk.ac.ox.cs.pagoda.util.Utility; -import uk.ac.ox.cs.JRDFox.JRDFStoreException; -import uk.ac.ox.cs.JRDFox.store.DataStore; -import uk.ac.ox.cs.JRDFox.store.DataStore.UpdateType; + +import java.util.LinkedList; public class ConsistencyManager { @@ -85,6 +84,23 @@ public class ConsistencyManager { } return false; } + + boolean checkSkolemUpper() { + if (m_reasoner.limitedSkolemUpperStore != null) { + AnswerTuples tuples = null; + try { + tuples = m_reasoner.limitedSkolemUpperStore.evaluate(fullQueryRecord.getQueryText(), fullQueryRecord.getAnswerVariables()); + if (!tuples.isValid()) { + Utility.logInfo("There are no contradictions derived in the limited-skolem upper bound materialisation."); + return satisfiability(t.duration()); + } + } + finally { + if (tuples != null) tuples.dispose(); + } + } + return false; + } boolean check() { // if (!checkRLLowerBound()) return false; @@ -288,5 +304,6 @@ public class ConsistencyManager { public QueryRecord[] getQueryRecords() { return botQueryRecords; } - + + } 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 { private Collection predicatesWithGap = null; private Boolean satisfiable; private ConsistencyManager consistency = new ConsistencyManager(this); - + BasicQueryEngine limitedSkolemUpperStore; + public MyQueryReasoner() { setup(true, true); } @@ -102,10 +103,10 @@ public class MyQueryReasoner extends QueryReasoner { if (multiStageTag && !program.getGeneral().isHorn()) { lazyUpperStore = getUpperStore("lazy-upper-bound", true); // new MultiStageQueryEngine("lazy-upper-bound", true); // + // TODO CHECK + limitedSkolemUpperStore = getUpperStore("limited-skolem-upper-bound", true); } - // TODO add new upper store creation - importData(program.getAdditionalDataFile()); elho_ontology = new ELHOProfile().getFragment(ontology); @@ -151,7 +152,21 @@ public class MyQueryReasoner extends QueryReasoner { Utility.logInfo("time for satisfiability checking: " + t.duration()); } - // TODO add new upper store preprocessing + // TODO check + if (limitedSkolemUpperStore != null) { + limitedSkolemUpperStore.importRDFData(name, datafile); + limitedSkolemUpperStore.materialise("saturate named individuals", originalMarkProgram); + int tag = limitedSkolemUpperStore.materialiseSkolemly(program, null); + if (tag != 1) { + limitedSkolemUpperStore.dispose(); + limitedSkolemUpperStore = null; + } + if (tag == -1) return false; + } + if (consistency.checkSkolemUpper()) { + satisfiable = true; + Utility.logInfo("time for satisfiability checking: " + t.duration()); + } trackingStore.importRDFData(name, datafile); trackingStore.materialise("saturate named individuals", originalMarkProgram); @@ -223,6 +238,9 @@ public class MyQueryReasoner extends QueryReasoner { if (!queryRecord.isBottom() && lazyUpperStore != null) { queryUpperBound(trackingStore, queryRecord, queryRecord.getQueryText(), queryRecord.getAnswerVariables()); } + if (!queryRecord.isBottom() && limitedSkolemUpperStore != null) { + queryUpperBound(limitedSkolemUpperStore, queryRecord, queryRecord.getQueryText(), queryRecord.getAnswerVariables()); + } // END: trying to intersect 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 @@ package uk.ac.ox.cs.pagoda.reasoner.light; -import java.util.Arrays; -import java.util.Collection; -import java.util.HashSet; -import java.util.Iterator; -import java.util.Set; - import org.semanticweb.HermiT.model.DLClause; - +import uk.ac.ox.cs.JRDFox.JRDFStoreException; +import uk.ac.ox.cs.JRDFox.store.DataStore; +import uk.ac.ox.cs.JRDFox.store.DataStore.UpdateType; +import uk.ac.ox.cs.JRDFox.store.Parameters; +import uk.ac.ox.cs.JRDFox.store.TripleStatus; +import uk.ac.ox.cs.JRDFox.store.TupleIterator; import uk.ac.ox.cs.pagoda.hermit.DLClauseHelper; import uk.ac.ox.cs.pagoda.query.AnswerTuples; import uk.ac.ox.cs.pagoda.query.GapByStore4ID; import uk.ac.ox.cs.pagoda.rules.DatalogProgram; import uk.ac.ox.cs.pagoda.rules.Program; -import uk.ac.ox.cs.pagoda.util.ConjunctiveQueryHelper; -import uk.ac.ox.cs.pagoda.util.Namespace; +import uk.ac.ox.cs.pagoda.util.*; import uk.ac.ox.cs.pagoda.util.Timer; -import uk.ac.ox.cs.pagoda.util.UFS; -import uk.ac.ox.cs.pagoda.util.Utility; -import uk.ac.ox.cs.JRDFox.JRDFStoreException; -import uk.ac.ox.cs.JRDFox.store.DataStore; -import uk.ac.ox.cs.JRDFox.store.Parameters; -import uk.ac.ox.cs.JRDFox.store.TripleStatus; -import uk.ac.ox.cs.JRDFox.store.TupleIterator; -import uk.ac.ox.cs.JRDFox.store.DataStore.UpdateType; + +import java.util.*; public class BasicQueryEngine extends RDFoxQueryEngine { @@ -74,6 +66,10 @@ public class BasicQueryEngine extends RDFoxQueryEngine { return 1; } + + public int materialiseSkolemly(DatalogProgram dProgram, GapByStore4ID gap) { + throw new UnsupportedOperationException(); + } @Override public AnswerTuples evaluate(String queryText) { @@ -163,8 +159,7 @@ public class BasicQueryEngine extends RDFoxQueryEngine { instanceTuples = null; try { instanceTuples = getDataStore().compileQuery("SELECT ?X ?Z WHERE { ?X " + predicate + " ?Z }", prefixes, parameters); - ; - long totalCount = 0; + long totalCount = 0; for (long multi1 = instanceTuples.open(); multi1 != 0; multi1 = instanceTuples.getNext()) totalCount += instanceTuples.getMultiplicity(); number.add(predicate + " * " + totalCount); -- cgit v1.2.3