From c0f5bdcdb29608532656c71c219680eccd4aad09 Mon Sep 17 00:00:00 2001 From: yzhou Date: Tue, 21 Apr 2015 22:45:35 +0100 Subject: fixed some bugs in windows server --- src/org/semanticweb/karma2/MyKarma.java | 64 ++++------ .../pagoda/multistage/MultiStageQueryEngine.java | 6 + .../pagoda/multistage/MultiStageUpperProgram.java | 3 +- .../cs/pagoda/multistage/TwoStageApplication.java | 7 +- src/uk/ac/ox/cs/pagoda/query/GapByTriple.java | 12 +- .../ox/cs/pagoda/reasoner/ConsistencyManager.java | 32 ++++- .../ox/cs/pagoda/reasoner/ConsistencyManager2.java | 12 +- .../ox/cs/pagoda/reasoner/ELHOQueryReasoner.java | 2 +- .../ox/cs/pagoda/reasoner/ELHOUQueryReasoner.java | 2 +- .../ox/cs/pagoda/reasoner/IterativeRefinement.java | 17 ++- .../ac/ox/cs/pagoda/reasoner/MyQueryReasoner.java | 9 +- src/uk/ac/ox/cs/pagoda/reasoner/QueryReasoner.java | 32 +++-- .../ox/cs/pagoda/reasoner/full/HermitChecker.java | 6 +- .../cs/pagoda/reasoner/light/BasicQueryEngine.java | 39 +++--- .../pagoda/reasoner/light/RDFoxTripleManager.java | 14 ++- .../ox/cs/pagoda/summary/HermitSummaryFilter.java | 4 +- src/uk/ac/ox/cs/pagoda/tracking/QueryTracker.java | 69 ++++------- src/uk/ac/ox/cs/pagoda/util/Properties.java | 133 ++++++++------------- 18 files changed, 242 insertions(+), 221 deletions(-) (limited to 'src') diff --git a/src/org/semanticweb/karma2/MyKarma.java b/src/org/semanticweb/karma2/MyKarma.java index 60938df..b2b4352 100644 --- a/src/org/semanticweb/karma2/MyKarma.java +++ b/src/org/semanticweb/karma2/MyKarma.java @@ -121,30 +121,19 @@ public class MyKarma { private Set answerCQ_multiThread(ConjunctiveQuery q, AnswerTuples soundAnswerTuples, boolean isGround) { Set> set = new HashSet>(); ExtendedConjunctiveQuery qext = ExtendedConjunctiveQuery.computeExtension(q); - TupleIterator tupleIterator; + TupleIterator tupleIterator = null; + ExecutorService es = null; try { tupleIterator = store.compileQuery(qext.toString(), prefixes, parameters); - } catch (JRDFStoreException e) { - e.printStackTrace(); - return null; - } - ExecutorService es = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()); - AnswerTuple tuple; - try { - try { - for (long multi = tupleIterator.open(); multi != 0; multi = tupleIterator.getNext()) { - Map match = new HashMap(); - for (int i = 0; i < qext.getNumberOfAnswerTerms(); i++) { - match.put(qext.getAnswerTerm(i), tupleIterator.getGroundTerm(i)); - } - if ((tuple = contains(qext, soundAnswerTuples, match)) != null) - set.add(es.submit(new Spurious(qext, match, tuple, isGround))); + es = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()); + AnswerTuple tuple; + for (long multi = tupleIterator.open(); multi != 0; multi = tupleIterator.getNext()) { + Map match = new HashMap(); + for (int i = 0; i < qext.getNumberOfAnswerTerms(); i++) { + match.put(qext.getAnswerTerm(i), tupleIterator.getGroundTerm(i)); } - } catch (JRDFStoreException e) { - e.printStackTrace(); - return null; - } finally { - tupleIterator.dispose(); + if ((tuple = contains(qext, soundAnswerTuples, match)) != null) + set.add(es.submit(new Spurious(qext, match, tuple, isGround))); } Set result = new HashSet(set.size()); while(!set.isEmpty()) { @@ -166,28 +155,28 @@ public class MyKarma { } } return result; + } catch (JRDFStoreException e1) { + e1.printStackTrace(); + return null; } finally { - es.shutdown(); + if (tupleIterator != null) tupleIterator.dispose(); + if (es != null) es.shutdown(); } } private Set answerCQ_singleThread(ConjunctiveQuery q, AnswerTuples soundAnswerTuples, boolean isGround) { ExtendedConjunctiveQuery qext = ExtendedConjunctiveQuery.computeExtension(q); - TupleIterator tupleIterator; - try { - tupleIterator = store.compileQuery(qext.toString(), prefixes, parameters); - } catch (JRDFStoreException e) { - e.printStackTrace(); - return null; - } - boolean useBushyValue = parameters.m_useBushy, allAnswersInRootValue = parameters.m_allAnswersInRoot; - parameters.m_useBushy = false; - parameters.m_allAnswersInRoot = false; - try { Set result = new HashSet(); - AnswerTuple tuple; + + TupleIterator tupleIterator = null; try { + tupleIterator = store.compileQuery(qext.toString(), prefixes, parameters); + parameters.m_useBushy = false; + parameters.m_allAnswersInRoot = false; + + AnswerTuple tuple; + for (long multi = tupleIterator.open(); multi != 0; multi = tupleIterator.getNext()) { Map match = new HashMap(); for (int i = 0; i < qext.getNumberOfAnswerTerms(); i++) { @@ -200,14 +189,11 @@ public class MyKarma { e.printStackTrace(); return null; } finally { - tupleIterator.dispose(); - } - return result; - } finally { + if (tupleIterator != null) tupleIterator.dispose(); parameters.m_useBushy = useBushyValue; parameters.m_allAnswersInRoot = allAnswersInRootValue; } - + return result; } private AnswerTuple contains(ExtendedConjunctiveQuery qext, AnswerTuples answerTuples, Map match) { diff --git a/src/uk/ac/ox/cs/pagoda/multistage/MultiStageQueryEngine.java b/src/uk/ac/ox/cs/pagoda/multistage/MultiStageQueryEngine.java index b74fe7d..b77c264 100644 --- a/src/uk/ac/ox/cs/pagoda/multistage/MultiStageQueryEngine.java +++ b/src/uk/ac/ox/cs/pagoda/multistage/MultiStageQueryEngine.java @@ -18,6 +18,9 @@ public class MultiStageQueryEngine extends StageQueryEngine { super(name, checkValidity); } + /** + * c-chase + */ @Override public void materialiseFoldedly(DatalogProgram dProgram, GapByStore4ID gap) { materialise("lower program", dProgram.getLower().toString()); @@ -27,6 +30,9 @@ public class MultiStageQueryEngine extends StageQueryEngine { materialise(program, treatment, gap); } + /** + * c-chase^f + */ @Override public int materialiseRestrictedly(DatalogProgram dProgram, GapByStore4ID gap) { if (gap != null) diff --git a/src/uk/ac/ox/cs/pagoda/multistage/MultiStageUpperProgram.java b/src/uk/ac/ox/cs/pagoda/multistage/MultiStageUpperProgram.java index caa26fa..4239ccc 100644 --- a/src/uk/ac/ox/cs/pagoda/multistage/MultiStageUpperProgram.java +++ b/src/uk/ac/ox/cs/pagoda/multistage/MultiStageUpperProgram.java @@ -245,6 +245,7 @@ public abstract class MultiStageUpperProgram { if (tuples != null) tuples.dispose(); } + tuples = null; try { tuples = engine.internal_evaluateNotExpanded(SparqlHelper.getSPARQLQuery(atoms, x, y)); for (long multi = tuples.open(); multi != 0; multi = tuples.getNext()) @@ -279,7 +280,7 @@ public abstract class MultiStageUpperProgram { TupleIterator tuples = null; try { tuples = engine.internal_evaluateNotExpanded(headQuery); - for (; tuples.isValid(); tuples.getNext()) + for (long multi = tuples.open(); multi != 0; multi = tuples.getNext()) headAnswers.add(new AnswerTupleID(tuples)); } catch (JRDFStoreException e) { e.printStackTrace(); diff --git a/src/uk/ac/ox/cs/pagoda/multistage/TwoStageApplication.java b/src/uk/ac/ox/cs/pagoda/multistage/TwoStageApplication.java index e52213b..f08bfbd 100644 --- a/src/uk/ac/ox/cs/pagoda/multistage/TwoStageApplication.java +++ b/src/uk/ac/ox/cs/pagoda/multistage/TwoStageApplication.java @@ -149,8 +149,8 @@ abstract class TwoStageApplication { // TODO Auto-generated catch block e.printStackTrace(); } finally { - if (tuples != null) - tuples.dispose(); + if (tuples != null) tuples.dispose(); + tuples = null; } } } @@ -209,8 +209,7 @@ abstract class TwoStageApplication { // TODO Auto-generated catch block e.printStackTrace(); } finally { - if (tuples != null) - tuples.dispose(); + if (tuples != null) tuples.dispose(); } return ret; } diff --git a/src/uk/ac/ox/cs/pagoda/query/GapByTriple.java b/src/uk/ac/ox/cs/pagoda/query/GapByTriple.java index 1a94f07..a1c1b0e 100644 --- a/src/uk/ac/ox/cs/pagoda/query/GapByTriple.java +++ b/src/uk/ac/ox/cs/pagoda/query/GapByTriple.java @@ -53,7 +53,7 @@ public class GapByTriple extends GapTupleIterator { @Override public boolean hasNext() { - TupleIterator iter; + TupleIterator iter = null; boolean inGap; StringBuffer queryBuffer = new StringBuffer(); try { @@ -75,9 +75,13 @@ public class GapByTriple extends GapTupleIterator { queryBuffer.setLength(0); queryBuffer.append("SELECT WHERE { ").append(sub).append(" ").append(predicate).append(" ").append(obj).append(" }"); - iter = lowerStore.compileQuery(queryBuffer.toString(), prefixes, parameters); - inGap = iter.open() != 0; - iter.dispose(); + try { + iter = lowerStore.compileQuery(queryBuffer.toString(), prefixes, parameters); + inGap = iter.open() != 0; + } finally { + if (iter != null) iter.dispose(); + iter = null; + } if (inGap) return true; } diff --git a/src/uk/ac/ox/cs/pagoda/reasoner/ConsistencyManager.java b/src/uk/ac/ox/cs/pagoda/reasoner/ConsistencyManager.java index a222645..7d3e40c 100644 --- a/src/uk/ac/ox/cs/pagoda/reasoner/ConsistencyManager.java +++ b/src/uk/ac/ox/cs/pagoda/reasoner/ConsistencyManager.java @@ -43,7 +43,15 @@ public class ConsistencyManager { boolean checkRLLowerBound() { fullQueryRecord = m_queryManager.create(QueryRecord.botQueryText, 0); - fullQueryRecord.updateLowerBoundAnswers(m_reasoner.rlLowerStore.evaluate(fullQueryRecord.getQueryText(), fullQueryRecord.getAnswerVariables())); + AnswerTuples iter = null; + + try { + iter = m_reasoner.rlLowerStore.evaluate(fullQueryRecord.getQueryText(), fullQueryRecord.getAnswerVariables()); + fullQueryRecord.updateLowerBoundAnswers(iter); + } finally { + iter.dispose(); + } + if (fullQueryRecord.getNoOfSoundAnswers() > 0) { Utility.logInfo("Answers to bottom in the lower bound: ", fullQueryRecord.outputSoundAnswerTuple()); return unsatisfiability(t.duration()); @@ -81,8 +89,15 @@ public class ConsistencyManager { // if (!checkRLLowerBound()) return false; // if (!checkELLowerBound()) return false; // if (checkLazyUpper()) return true; + AnswerTuples iter = null; + + try { + iter = m_reasoner.trackingStore.evaluate(fullQueryRecord.getQueryText(), fullQueryRecord.getAnswerVariables()); + fullQueryRecord.updateUpperBoundAnswers(iter); + } finally { + if (iter != null) iter.dispose(); + } - fullQueryRecord.updateUpperBoundAnswers(m_reasoner.trackingStore.evaluate(fullQueryRecord.getQueryText(), fullQueryRecord.getAnswerVariables())); if (fullQueryRecord.getNoOfCompleteAnswers() == 0) return satisfiability(t.duration()); @@ -101,7 +116,7 @@ public class ConsistencyManager { for (QueryRecord r: getQueryRecords()) { // TODO to be removed ... // r.saveRelevantOntology("bottom" + r.getQueryID() + ".owl"); - checker = new HermitSummaryFilter(r); // m_reasoner.factory.getSummarisedReasoner(r); + checker = new HermitSummaryFilter(r, true); // m_reasoner.factory.getSummarisedReasoner(r); satisfiability = checker.isConsistent(); checker.dispose(); if (!satisfiability) return unsatisfiability(t.duration()); @@ -143,8 +158,15 @@ public class ConsistencyManager { QueryRecord[] tempQueryRecords = new QueryRecord[number - 1]; QueryRecord record; for (int i = 0; i < number - 1; ++i) { - tempQueryRecords[i] = record = m_queryManager.create(QueryRecord.botQueryText.replace("Nothing", "Nothing" + (i + 1)), 0, i + 1); - record.updateUpperBoundAnswers(m_reasoner.trackingStore.evaluate(record.getQueryText(), record.getAnswerVariables())); + tempQueryRecords[i] = record = m_queryManager.create(QueryRecord.botQueryText.replace("Nothing", "Nothing" + (i + 1)), 0, i + 1); + AnswerTuples iter = null; + try { + iter = m_reasoner.trackingStore.evaluate(record.getQueryText(), record.getAnswerVariables()); + record.updateUpperBoundAnswers(iter); + } finally { + if (iter != null) iter.dispose(); + iter = null; + } } int bottomNumber = 0; diff --git a/src/uk/ac/ox/cs/pagoda/reasoner/ConsistencyManager2.java b/src/uk/ac/ox/cs/pagoda/reasoner/ConsistencyManager2.java index 67dc4fc..9c335f3 100644 --- a/src/uk/ac/ox/cs/pagoda/reasoner/ConsistencyManager2.java +++ b/src/uk/ac/ox/cs/pagoda/reasoner/ConsistencyManager2.java @@ -3,6 +3,7 @@ package uk.ac.ox.cs.pagoda.reasoner; import org.semanticweb.owlapi.model.OWLOntologyCreationException; import org.semanticweb.owlapi.model.OWLOntologyManager; +import uk.ac.ox.cs.pagoda.query.AnswerTuples; import uk.ac.ox.cs.pagoda.query.QueryRecord; import uk.ac.ox.cs.pagoda.reasoner.full.Checker; import uk.ac.ox.cs.pagoda.summary.HermitSummaryFilter; @@ -32,8 +33,15 @@ public class ConsistencyManager2 extends ConsistencyManager { // if (!checkRLLowerBound()) return false; // if (!checkELLowerBound()) return false; if (checkLazyUpper()) return true; + AnswerTuples iter = null; + + try { + iter = m_reasoner.trackingStore.evaluate(fullQueryRecord.getQueryText(), fullQueryRecord.getAnswerVariables()); + fullQueryRecord.updateUpperBoundAnswers(iter); + } finally { + if (iter != null) iter.dispose(); + } - fullQueryRecord.updateUpperBoundAnswers(m_reasoner.trackingStore.evaluate(fullQueryRecord.getQueryText(), fullQueryRecord.getAnswerVariables())); if (fullQueryRecord.getNoOfCompleteAnswers() == 0) return satisfiability(t.duration()); @@ -43,7 +51,7 @@ public class ConsistencyManager2 extends ConsistencyManager { e.printStackTrace(); } - Checker checker = new HermitSummaryFilter(fullQueryRecord); // m_reasoner.factory.getSummarisedReasoner(fullQueryRecord); + Checker checker = new HermitSummaryFilter(fullQueryRecord, true); // m_reasoner.factory.getSummarisedReasoner(fullQueryRecord); // fullQueryRecord.saveRelevantOntology("fragment_bottom.owl"); boolean satisfiable = checker.isConsistent(); checker.dispose(); diff --git a/src/uk/ac/ox/cs/pagoda/reasoner/ELHOQueryReasoner.java b/src/uk/ac/ox/cs/pagoda/reasoner/ELHOQueryReasoner.java index 4ebe5f2..ab57ccf 100644 --- a/src/uk/ac/ox/cs/pagoda/reasoner/ELHOQueryReasoner.java +++ b/src/uk/ac/ox/cs/pagoda/reasoner/ELHOQueryReasoner.java @@ -54,7 +54,7 @@ public class ELHOQueryReasoner extends QueryReasoner { @Override public void loadOntology(OWLOntology ontology) { - program = new LowerDatalogProgram(!forSemFacet); + program = new LowerDatalogProgram(properties.getToClassify()); program.load(ontology, new UnaryBottom()); program.transform(); diff --git a/src/uk/ac/ox/cs/pagoda/reasoner/ELHOUQueryReasoner.java b/src/uk/ac/ox/cs/pagoda/reasoner/ELHOUQueryReasoner.java index 62d238b..0d24a02 100644 --- a/src/uk/ac/ox/cs/pagoda/reasoner/ELHOUQueryReasoner.java +++ b/src/uk/ac/ox/cs/pagoda/reasoner/ELHOUQueryReasoner.java @@ -113,7 +113,7 @@ public class ELHOUQueryReasoner extends QueryReasoner { } OWLOntology ontology = o; - program = new DatalogProgram(ontology, !forSemFacet); + program = new DatalogProgram(ontology, properties.getToClassify()); importData(program.getAdditionalDataFile()); diff --git a/src/uk/ac/ox/cs/pagoda/reasoner/IterativeRefinement.java b/src/uk/ac/ox/cs/pagoda/reasoner/IterativeRefinement.java index ba6a4d4..447a92d 100644 --- a/src/uk/ac/ox/cs/pagoda/reasoner/IterativeRefinement.java +++ b/src/uk/ac/ox/cs/pagoda/reasoner/IterativeRefinement.java @@ -7,6 +7,7 @@ import org.semanticweb.owlapi.model.OWLOntology; import uk.ac.ox.cs.pagoda.constraints.BottomStrategy; import uk.ac.ox.cs.pagoda.constraints.UpperUnaryBottom; import uk.ac.ox.cs.pagoda.multistage.MultiStageQueryEngine; +import uk.ac.ox.cs.pagoda.query.AnswerTuples; import uk.ac.ox.cs.pagoda.query.QueryRecord; import uk.ac.ox.cs.pagoda.reasoner.light.BasicQueryEngine; import uk.ac.ox.cs.pagoda.rules.GeneralProgram; @@ -47,7 +48,13 @@ public class IterativeRefinement { return m_record.getRelevantOntology(); } - update = m_record.updateUpperBoundAnswers(tEngine.evaluate(m_record.getQueryText())); + AnswerTuples ans = null; + try { + ans = tEngine.evaluate(m_record.getQueryText()); + update = m_record.updateUpperBoundAnswers(ans); + } finally { + if (ans != null) ans.dispose(); + } } finally { tEngine.dispose(); } @@ -78,7 +85,13 @@ public class IterativeRefinement { return m_record.getRelevantOntology(); } - update = m_record.updateUpperBoundAnswers(tEngine.evaluate(m_record.getQueryText())); + AnswerTuples ans = null; + try { + ans = tEngine.evaluate(m_record.getQueryText()); + update = m_record.updateUpperBoundAnswers(ans); + } finally { + if (ans != null) ans.dispose(); + } } finally { tEngine.dispose(); } diff --git a/src/uk/ac/ox/cs/pagoda/reasoner/MyQueryReasoner.java b/src/uk/ac/ox/cs/pagoda/reasoner/MyQueryReasoner.java index 2c2feae..875dcdd 100644 --- a/src/uk/ac/ox/cs/pagoda/reasoner/MyQueryReasoner.java +++ b/src/uk/ac/ox/cs/pagoda/reasoner/MyQueryReasoner.java @@ -85,7 +85,7 @@ public class MyQueryReasoner extends QueryReasoner { } ontology = o; - program = new DatalogProgram(ontology, !forSemFacet); + program = new DatalogProgram(ontology, properties.getToClassify()); // program.getLower().save(); // program.getUpper().save(); // program.getGeneral().save(); @@ -275,11 +275,10 @@ public class MyQueryReasoner extends QueryReasoner { rlAnswer = upperStore.evaluate(queryText, answerVariables); Utility.logDebug(t.duration()); queryRecord.updateUpperBoundAnswers(rlAnswer); - rlAnswer.dispose(); } finally { if (rlAnswer != null) rlAnswer.dispose(); + rlAnswer = null; } - rlAnswer = null; } @Override @@ -296,11 +295,11 @@ public class MyQueryReasoner extends QueryReasoner { // queryRecord.saveRelevantOntology("fragment_query" + queryRecord.getQueryID() + ".owl"); Timer t = new Timer(); - Checker summarisedChecker = new HermitSummaryFilter(queryRecord); + Checker summarisedChecker = new HermitSummaryFilter(queryRecord, properties.getToCallHermiT()); int validNumber = summarisedChecker.check(queryRecord.getGapAnswers()); summarisedChecker.dispose(); Utility.logDebug("Total time for full reasoner: " + t.duration()); - if (!forSemFacet || validNumber == 0) { + if (validNumber == 0) { queryRecord.markAsProcessed(); Utility.logDebug("Difficulty of this query: " + queryRecord.getDifficulty()); } diff --git a/src/uk/ac/ox/cs/pagoda/reasoner/QueryReasoner.java b/src/uk/ac/ox/cs/pagoda/reasoner/QueryReasoner.java index 0c009a2..a484444 100644 --- a/src/uk/ac/ox/cs/pagoda/reasoner/QueryReasoner.java +++ b/src/uk/ac/ox/cs/pagoda/reasoner/QueryReasoner.java @@ -14,23 +14,41 @@ 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.Timer; import uk.ac.ox.cs.pagoda.util.Utility; public abstract class QueryReasoner { - protected boolean forSemFacet = false; - +// protected boolean forSemFacet = false; + Properties properties; + public static enum Type { Full, RLU, ELHOU }; - public static QueryReasoner getInstanceForSemFacet(OWLOntology o) { - QueryReasoner reasoner = getInstance(Type.Full, o, true, true); - reasoner.forSemFacet = true; - return reasoner; + public static QueryReasoner getInstance(Properties p) { + OWLOntology ontology = OWLHelper.loadOntology(p.getOntologyPath()); + QueryReasoner pagoda = getInstance(ontology, p); + pagoda.properties = p; + pagoda.loadOntology(ontology); + pagoda.importData(p.getDataPath()); + if (pagoda.preprocess()) { + System.out.println("The ontology is consistent!"); + return pagoda; + } + else { + System.out.println("The ontology is inconsistent!"); + pagoda.dispose(); + return null; + } } - public static QueryReasoner getInstance(OWLOntology o) { + QueryReasoner pagoda = getInstance(Type.Full, o, true, true); + pagoda.properties = new Properties(); + return pagoda; + } + + private static QueryReasoner getInstance(OWLOntology o, Properties p) { return getInstance(Type.Full, o, true, true); } diff --git a/src/uk/ac/ox/cs/pagoda/reasoner/full/HermitChecker.java b/src/uk/ac/ox/cs/pagoda/reasoner/full/HermitChecker.java index 6f5d363..97925fc 100644 --- a/src/uk/ac/ox/cs/pagoda/reasoner/full/HermitChecker.java +++ b/src/uk/ac/ox/cs/pagoda/reasoner/full/HermitChecker.java @@ -43,6 +43,7 @@ public class HermitChecker implements Checker { protected OWLOntology ontology; protected QueryRecord record; protected QueryGraph qGraph = null; + boolean toCheck = true; public HermitChecker(Checker checker) { if (checker instanceof HermitChecker) { @@ -58,12 +59,13 @@ public class HermitChecker implements Checker { hermit = new Reasoner(ontology); } - public HermitChecker(OWLOntology ontology, QueryRecord record) { + public HermitChecker(OWLOntology ontology, QueryRecord record, boolean toCheck) { this.ontology = ontology; queryText = record.getQueryText(); answerVariable = record.getVariables(); queryClause = record.getClause(); // this.record = record; + this.toCheck = toCheck; } public HermitChecker(OWLOntology ontology, String queryText) { @@ -198,6 +200,8 @@ public class HermitChecker implements Checker { @Override public boolean check(AnswerTuple answerTuple) { + if (!toCheck) return false; + if (hermit == null) initialiseReasoner(); if (tag != 0) return tag == 1; ++counter; 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 3207ff1..11588ce 100644 --- a/src/uk/ac/ox/cs/pagoda/reasoner/light/BasicQueryEngine.java +++ b/src/uk/ac/ox/cs/pagoda/reasoner/light/BasicQueryEngine.java @@ -47,8 +47,8 @@ public class BasicQueryEngine extends RDFoxQueryEngine { getDataStore().clearRulesAndMakeFactsExplicit(); } catch (JRDFStoreException e) { e.printStackTrace(); - gap.clear(); } finally { + gap.clear(); } } else @@ -149,9 +149,14 @@ public class BasicQueryEngine extends RDFoxQueryEngine { if (instanceTuples != null) instanceTuples.dispose(); } } + } catch (JRDFStoreException e) { + e.printStackTrace(); + } finally { + if (predicateTuples != null) predicateTuples.dispose(); + predicateTuples = null; + } - predicateTuples.dispose(); - + try { predicateTuples = getDataStore().compileQuery("SELECT DISTINCT ?Y WHERE { ?X ?Y ?Z }", prefixes, parameters); for (long multi = predicateTuples.open(); multi != 0; multi = predicateTuples.getNext()) { predicate = RDFoxTripleManager.getQuotedTerm(predicateTuples.getResource(0)); @@ -172,6 +177,7 @@ public class BasicQueryEngine extends RDFoxQueryEngine { e.printStackTrace(); } finally { if (predicateTuples != null) predicateTuples.dispose(); + predicateTuples = null; } Utility.redirectCurrentOut(filename); @@ -184,13 +190,13 @@ public class BasicQueryEngine extends RDFoxQueryEngine { public TupleIterator internal_evaluateAgainstIDBs(String queryText) throws JRDFStoreException { TupleIterator iter = store.compileQuery(queryText, prefixes, parameters, TripleStatus.TUPLE_STATUS_IDB.union(TripleStatus.TUPLE_STATUS_EDB), TripleStatus.TUPLE_STATUS_IDB); - iter.open(); +// iter.open(); return iter; } public TupleIterator internal_evaluate(String queryText) throws JRDFStoreException { TupleIterator iter = store.compileQuery(queryText, prefixes, parameters); - iter.open(); +// iter.open(); return iter; } @@ -201,7 +207,7 @@ public class BasicQueryEngine extends RDFoxQueryEngine { public TupleIterator internal_evaluateNotExpanded(String queryText) throws JRDFStoreException { parameters.m_expandEquality = false; TupleIterator iter = store.compileQuery(queryText, prefixes, parameters); - iter.open(); +// iter.open(); parameters.m_expandEquality = true; return iter; } @@ -346,19 +352,22 @@ public class BasicQueryEngine extends RDFoxQueryEngine { for (int[] t: collection) store.addTriplesByResourceIDs(t, ut); - iter = internal_evaluateAgainstIDBs("select ?x ?y ?z where { ?x ?y ?z . }"); - for (long multi = iter.open(); multi != 0; multi = iter.getNext()) { - int[] triple = new int[3]; - for (int i = 0; i < 3; ++i) - triple[i] = iter.getResourceID(i); - store.addTriplesByResourceIDs(triple, ut); + try { + iter = internal_evaluateAgainstIDBs("select ?x ?y ?z where { ?x ?y ?z . }"); + for (long multi = iter.open(); multi != 0; multi = iter.getNext()) { + int[] triple = new int[3]; + for (int i = 0; i < 3; ++i) + triple[i] = iter.getResourceID(i); + store.addTriplesByResourceIDs(triple, ut); + } + } finally { + if (iter != null) iter.dispose(); + iter = null; } store.applyReasoning(true); } catch (JRDFStoreException e) { e.printStackTrace(); - } finally { - if (iter != null) iter.dispose(); - } + } Utility.logInfo("Time for deletion: " + timer.duration()); } diff --git a/src/uk/ac/ox/cs/pagoda/reasoner/light/RDFoxTripleManager.java b/src/uk/ac/ox/cs/pagoda/reasoner/light/RDFoxTripleManager.java index 2280b12..c2065dc 100644 --- a/src/uk/ac/ox/cs/pagoda/reasoner/light/RDFoxTripleManager.java +++ b/src/uk/ac/ox/cs/pagoda/reasoner/light/RDFoxTripleManager.java @@ -2,12 +2,9 @@ package uk.ac.ox.cs.pagoda.reasoner.light; import java.util.Collection; import java.util.HashMap; -import java.util.HashSet; import java.util.LinkedList; import java.util.Map; import java.util.Queue; -import java.util.Set; - import org.semanticweb.HermiT.model.AnnotatedEquality; import org.semanticweb.HermiT.model.Atom; import org.semanticweb.HermiT.model.AtomicConcept; @@ -37,7 +34,7 @@ public class RDFoxTripleManager { DataStore m_store; Dictionary m_dict; - Set triplesByTerm = new HashSet(); +// Set triplesByTerm = new HashSet(); public RDFoxTripleManager(DataStore store, boolean incrementally) { m_store = store; @@ -63,7 +60,16 @@ public class RDFoxTripleManager { } public void addTripleByID(int[] tuple) { +// System.out.println(getRawTerm(tuple[0]) + " " + getRawTerm(tuple[1]) + " " + getRawTerm(tuple[2]) + " ."); try { +// Resource[] rsc = new Resource[3]; +// m_dict.getResources(tuple, 0, 3, rsc); +// +// GroundTerm[] terms = new GroundTerm[3]; +// for (int i = 0; i < 3; ++i) +// terms[i] = uk.ac.ox.cs.JRDFox.model.Individual.create(rsc[i].m_lexicalForm); +// m_store.addTriples(terms, m_incrementally); + m_store.addTriplesByResourceIDs(tuple, m_incrementally); } catch (JRDFStoreException e) { e.printStackTrace(); diff --git a/src/uk/ac/ox/cs/pagoda/summary/HermitSummaryFilter.java b/src/uk/ac/ox/cs/pagoda/summary/HermitSummaryFilter.java index a57d188..a0ecce8 100644 --- a/src/uk/ac/ox/cs/pagoda/summary/HermitSummaryFilter.java +++ b/src/uk/ac/ox/cs/pagoda/summary/HermitSummaryFilter.java @@ -34,9 +34,9 @@ public class HermitSummaryFilter implements Checker { Endomorph endomorphismChecker = null; - public HermitSummaryFilter(QueryRecord record) { + public HermitSummaryFilter(QueryRecord record, boolean toCallHermiT) { m_record = record; - HermitChecker hermitChecker = new HermitChecker(record.getRelevantOntology(), record); + HermitChecker hermitChecker = new HermitChecker(record.getRelevantOntology(), record, toCallHermiT); endomorphismChecker = new Endomorph(record, hermitChecker); hermitChecker.setDependencyGraph(endomorphismChecker.getDependencyGraph()); } diff --git a/src/uk/ac/ox/cs/pagoda/tracking/QueryTracker.java b/src/uk/ac/ox/cs/pagoda/tracking/QueryTracker.java index 0e19e30..f836212 100644 --- a/src/uk/ac/ox/cs/pagoda/tracking/QueryTracker.java +++ b/src/uk/ac/ox/cs/pagoda/tracking/QueryTracker.java @@ -35,6 +35,7 @@ import uk.ac.ox.cs.JRDFox.model.Datatype; import uk.ac.ox.cs.JRDFox.store.DataStore; import uk.ac.ox.cs.JRDFox.store.Resource; import uk.ac.ox.cs.JRDFox.store.TupleIterator; +import uk.ac.ox.cs.JRDFox.store.DataStore.UpdateType; public class QueryTracker { @@ -80,7 +81,7 @@ public class QueryTracker { Timer t1 = new Timer(); oldTripleCount = store.getTriplesCount(); // store.addRules(new String[] {m_encoder.getTrackingProgram()}); - store.importRules(m_encoder.getTrackingProgram()); + store.importRules(m_encoder.getTrackingProgram(), UpdateType.ScheduleForAddition); store.applyReasoning(incrementally); tripleCount = store.getTriplesCount(); @@ -93,8 +94,7 @@ public class QueryTracker { + t1.duration() + " seconds."); } catch (JRDFStoreException e) { e.printStackTrace(); - } - + } extractAxioms(trackingStore); trackingStore.clearRulesAndIDBFacts(m_encoder.getAddedData()); @@ -145,8 +145,7 @@ public class QueryTracker { } catch (JRDFStoreException e) { e.printStackTrace(); } finally { - if (answers != null) - answers.dispose(); + if (answers != null) answers.dispose(); } Utility.logTrace("Extracted TBox axioms: "); @@ -190,7 +189,6 @@ public class QueryTracker { } } } catch (JRDFStoreException e) { - // TODO Auto-generated catch block e.printStackTrace(); } finally { if (trackingAnswers != null) trackingAnswers.dispose(); @@ -329,9 +327,7 @@ public class QueryTracker { continue; TupleIterator answers = null, lowerAnswers = null; Set lower = new HashSet(); - OWLClass cls = factory - .getOWLClass(IRI.create(clsIRI.startsWith("<") ? OWLHelper - .removeAngles(clsIRI) : clsIRI)); + OWLClass cls = factory.getOWLClass(IRI.create(clsIRI.startsWith("<") ? OWLHelper.removeAngles(clsIRI) : clsIRI)); try { answers = trackingStore.internal_evaluateAgainstIDBs(getSPARQLQuery4Unary(trackingIRI)); answers.open(); @@ -359,10 +355,8 @@ public class QueryTracker { } catch (JRDFStoreException e) { e.printStackTrace(); } finally { - if (answers != null) - answers.dispose(); - if (lowerAnswers != null) - lowerAnswers.dispose(); + if (answers != null) answers.dispose(); + if (lowerAnswers != null) lowerAnswers.dispose(); lower.clear(); } Utility.logDebug("class: " + clsIRI + " " + count); @@ -370,53 +364,37 @@ public class QueryTracker { return aboxAxiomCounter; } - private void getDerivedPredicates(BasicQueryEngine trackingStore, - Set unaryPredicates, Set binaryPredicates) { - + private void getDerivedPredicates(BasicQueryEngine trackingStore, Set unaryPredicates, Set binaryPredicates) { TupleIterator derivedTuples = null; String selectedPredicate = OWLHelper.addAngles(m_encoder.getSelectedPredicate()); try { - derivedTuples = trackingStore - .internal_evaluateAgainstIDBs("select distinct ?z where { ?x <" - + Namespace.RDF_TYPE + "> ?z . }"); + derivedTuples = trackingStore.internal_evaluateAgainstIDBs("select distinct ?z where { ?x <" + Namespace.RDF_TYPE + "> ?z . }"); for (long multi = derivedTuples.open(); multi != 0; multi = derivedTuples.getNext()) { String p = RDFoxTripleManager.getQuotedTerm(derivedTuples.getResource(0)); - if (p.equals(selectedPredicate)) - ; - else if (m_encoder.isAuxPredicate(p)) - ; - else - unaryPredicates.add(p); + if (p.equals(selectedPredicate)) ; + else if (m_encoder.isAuxPredicate(p)) ; + else unaryPredicates.add(p); } } catch (JRDFStoreException e) { e.printStackTrace(); } finally { - if (derivedTuples != null) - derivedTuples.dispose(); + if (derivedTuples != null) derivedTuples.dispose(); } derivedTuples = null; try { - derivedTuples = trackingStore - .internal_evaluateAgainstIDBs("select distinct ?y where { ?x ?y ?z . }"); + derivedTuples = trackingStore.internal_evaluateAgainstIDBs("select distinct ?y where { ?x ?y ?z . }"); for (long multi = derivedTuples.open(); multi != 0; multi = derivedTuples.getNext()) { String p = RDFoxTripleManager.getQuotedTerm(derivedTuples.getResource(0)); - if (p.equals(Namespace.RDF_TYPE_ABBR) - || p.equals(Namespace.RDF_TYPE_QUOTED)) - ; - else if (p.equals(Namespace.EQUALITY_ABBR) - || p.equals(Namespace.EQUALITY_QUOTED)) - ; - else if (m_encoder.isAuxPredicate(p)) - ; - else - binaryPredicates.add(p); + if (p.equals(Namespace.RDF_TYPE_ABBR) || p.equals(Namespace.RDF_TYPE_QUOTED)) ; + else if (p.equals(Namespace.EQUALITY_ABBR) || p.equals(Namespace.EQUALITY_QUOTED)) ; + else if (m_encoder.isAuxPredicate(p)) ; + else binaryPredicates.add(p); } } catch (JRDFStoreException e) { e.printStackTrace(); } finally { - if (derivedTuples != null) - derivedTuples.dispose(); + if (derivedTuples != null) derivedTuples.dispose(); } } @@ -428,8 +406,7 @@ public class QueryTracker { toAddedRecords.add(botQueryRecord); for (QueryRecord botQueryRecord : toAddedRecords) { - m_manager.addAxioms(m_record.getRelevantOntology(), botQueryRecord - .getRelevantOntology().getAxioms()); + m_manager.addAxioms(m_record.getRelevantOntology(), botQueryRecord.getRelevantOntology().getAxioms()); for (DLClause clause : botQueryRecord.getRelevantClauses()) m_record.addRelevantClauses(clause); } @@ -456,16 +433,14 @@ public class QueryTracker { private String getSPARQLQuery4Unary(String p) { StringBuilder builder = new StringBuilder(); - builder.append("select ?x where { ?x <") - .append(Namespace.RDF_TYPE).append("> "); + builder.append("select ?x where { ?x <").append(Namespace.RDF_TYPE).append("> "); builder.append(p).append(" . }"); return builder.toString(); } private String getSPARQLQuery4Binary(String p) { StringBuilder builder = new StringBuilder(); - builder.append("select ?x ?y where { ?x ").append(p) - .append(" ?y . }"); + builder.append("select ?x ?y where { ?x ").append(p).append(" ?y . }"); return builder.toString(); } diff --git a/src/uk/ac/ox/cs/pagoda/util/Properties.java b/src/uk/ac/ox/cs/pagoda/util/Properties.java index 551f94f..b687b53 100644 --- a/src/uk/ac/ox/cs/pagoda/util/Properties.java +++ b/src/uk/ac/ox/cs/pagoda/util/Properties.java @@ -1,95 +1,66 @@ package uk.ac.ox.cs.pagoda.util; -import java.io.BufferedReader; import java.io.FileInputStream; import java.io.IOException; -import java.io.InputStreamReader; -import java.util.HashMap; +import java.io.InputStream; public class Properties { - - public static final String FILE_SEPARATOR = ";"; -// switches -// public static final String reuseGapFile = "REUSE_GAP"; - public static final String toTrackProofs = "TO_TRACK"; - public static final String checkAnswers = "TO_CHECK_ANSWERS"; - public static final String redirectSysOut = "TO_REDIRECT_SYS_OUT"; - public static final String considerEqualities = "TO_CONSIDER_EQUALITIES"; - -// parameters - public static final String testcase = "TEST_CASE"; - public static final String typeOfLowerBounds = "TYPE_LOWER_BOUNDS"; - public static final String FULL_REASONER = "OWLREASONER"; - -// file locations - public static final String ontologyFile = "LOWER_T_FILE"; - public static final String importedData = "IMPORT"; - public static final String queryFile = "QUERY_FILE"; - -// auxiliary files -// public static final String auxiliaryDirectory = "AUXILIARY_DIRECTORY"; -// public static final String queryAnswerGapFile = "GAP_FILE"; -// public static final String lowerAnswerFile = "LOWER_ANSWER_FILE"; -// public static final String upperAnswerFile = "UPPER_ANSWER_FILE"; -// public static final String boundsGapFile = "BOUNDS_GAP_FILE"; -// public static final String fragmentFile = "FRAGMENT_FILE"; + String dataPath = null; + public String getDataPath() { return dataPath; } + public void setDataPath(String path) { dataPath = path; } - public static final String correspondence = "CORRESPONDENCE"; - - private HashMap param = new HashMap(); - - public static final String on = String.valueOf(true); - public static final String off = String.valueOf(false); - - public void reset() { - param.clear(); -// param.put(reuseGapFile, on); - param.put(toTrackProofs, on); - param.put(checkAnswers, on); - param.put(redirectSysOut, off); - param.put(considerEqualities, off); - } - - public Properties() { - reset(); - } - - public void addImportedFile(String additionalDataFile) { - if (additionalDataFile == null) return ; - String files = param.get(importedData); - StringBuilder sb = new StringBuilder(); - if (files != null) - sb.append(files).append(FILE_SEPARATOR); - sb.append(additionalDataFile); - param.put(importedData, sb.toString()); - } + String ontologyPath; + public String getOntologyPath() { return ontologyPath; } + public void setOntologyPath(String path) { ontologyPath = path; } - public void load(String file) throws IOException { - BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file))); - String line; - String tokens[]; - while ((line = Utility.readLine(reader)) != null) { - if (line.isEmpty() || line.startsWith("#")) - continue; + String queryPath = null; + public String getQueryPath() { return queryPath; } + public void setQueryPath(String path) { queryPath = path; } + + String answerPath = null; + public String getAnswerPath() { return answerPath; } + public void setAnswerPath(String path) { answerPath = path; } + + boolean toClassify = true; + public boolean getToClassify() { return toClassify; } + public void setToClassify(boolean flag) { toClassify = flag; } + + boolean toCallHermiT = true; + public boolean getToCallHermiT() { return toCallHermiT; } + public void setToCallHermiT(boolean flag) { toCallHermiT = flag; } + + public static boolean ShellModeDefault = false; + + boolean shellMode = ShellModeDefault; + public boolean getShellMode() { return shellMode; } + public void setShellMode(boolean flag) { shellMode = flag; } + + public Properties(String path) { + java.util.Properties m_properties = new java.util.Properties(); + InputStream inputStream = null; + try { + inputStream = new FileInputStream(path); + m_properties.load(inputStream); - tokens = line.split("="); - if (tokens[1].equals("on")) - set(tokens[0], String.valueOf(true)); - else if (tokens[1].equals("off")) - set(tokens[0], String.valueOf(false)); - else - set(tokens[0], tokens[1]); + setOntologyPath(m_properties.getProperty("ONTOLOGY")); + setDataPath(m_properties.getProperty("DATA")); + setQueryPath(m_properties.getProperty("QUERY")); + setAnswerPath(m_properties.getProperty("ANSWER")); + setToClassify(Boolean.parseBoolean(m_properties.getProperty("TO_CLASSIFY"))); + setToCallHermiT(Boolean.parseBoolean(m_properties.getProperty("CALL_HERMIT"))); + + } catch (IOException e) { + e.printStackTrace(); + } finally { + if (inputStream != null) + try { + inputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } } - reader.close(); - } - - public String get(String key) { - return param.get(key); - } - - public void set(String key, String value) { - param.put(key, value); } + public Properties() { } } -- cgit v1.2.3