From 7cd962751db2a88f426b8b9d7b9dd0d76e2cc1b5 Mon Sep 17 00:00:00 2001 From: RncLsn Date: Tue, 16 Jun 2015 15:54:53 +0100 Subject: Maybe fixed bug in internalisation. --- src/resources/pagoda.properties | 2 +- .../ox/cs/pagoda/multistage/MultiStageQueryEngine.java | 15 --------------- .../ac/ox/cs/pagoda/multistage/StageQueryEngine.java | 2 -- src/uk/ac/ox/cs/pagoda/query/QueryRecord.java | 4 ++++ src/uk/ac/ox/cs/pagoda/query/rollup/QueryGraph.java | 18 ++++++++++++++---- src/uk/ac/ox/cs/pagoda/reasoner/MyQueryReasoner.java | 8 +++++++- src/uk/ac/ox/cs/pagoda/reasoner/QueryReasoner.java | 2 +- .../ac/ox/cs/pagoda/reasoner/full/HermitChecker.java | 1 + src/uk/ac/ox/cs/pagoda/rules/Program.java | 2 +- src/uk/ac/ox/cs/pagoda/util/PagodaProperties.java | 6 +++--- 10 files changed, 32 insertions(+), 28 deletions(-) (limited to 'src') diff --git a/src/resources/pagoda.properties b/src/resources/pagoda.properties index 64de225..0401d64 100644 --- a/src/resources/pagoda.properties +++ b/src/resources/pagoda.properties @@ -1,5 +1,5 @@ debug=true useAlwaysSimpleUpperBound=false -useSkolemUpperBound=true +useSkolemUpperBound=false statisticsDir=/home/alessandro/Dropbox/Oxford/PAGOdA/statistics \ No newline at end of file diff --git a/src/uk/ac/ox/cs/pagoda/multistage/MultiStageQueryEngine.java b/src/uk/ac/ox/cs/pagoda/multistage/MultiStageQueryEngine.java index 2471c80..33f9f03 100644 --- a/src/uk/ac/ox/cs/pagoda/multistage/MultiStageQueryEngine.java +++ b/src/uk/ac/ox/cs/pagoda/multistage/MultiStageQueryEngine.java @@ -83,21 +83,6 @@ public class MultiStageQueryEngine extends StageQueryEngine { return materialise(program, treatment, gap); } - /** - * delta-chase with fixed mad term depth - */ - @Override - public int materialiseSkolemly(DatalogProgram dProgram, GapByStore4ID gap) { - if(isDisposed()) throw new DisposedException(); - - materialise("lower program", dProgram.getLower().toString()); - Program generalProgram = dProgram.getGeneral(); - LimitedSkolemisationApplication program = - new LimitedSkolemisationApplication(generalProgram, dProgram.getUpperBottomStrategy()); - Treatment treatment = new Pick4NegativeConceptNaive(this, program); - return materialise(program, treatment, gap); - } - public int materialise4SpecificQuery(Program generalProgram, QueryRecord record, BottomStrategy upperBottom) { if(isDisposed()) throw new DisposedException(); diff --git a/src/uk/ac/ox/cs/pagoda/multistage/StageQueryEngine.java b/src/uk/ac/ox/cs/pagoda/multistage/StageQueryEngine.java index ffca55a..65184ee 100644 --- a/src/uk/ac/ox/cs/pagoda/multistage/StageQueryEngine.java +++ b/src/uk/ac/ox/cs/pagoda/multistage/StageQueryEngine.java @@ -21,8 +21,6 @@ public abstract class StageQueryEngine extends BasicQueryEngine { public abstract int materialiseRestrictedly(DatalogProgram dProgram, GapByStore4ID gap); - public abstract int materialiseSkolemly(DatalogProgram dProgram, GapByStore4ID gap); - public boolean isValid() { if (!checkValidity) return true; if (validMaterialisation != null) return validMaterialisation; diff --git a/src/uk/ac/ox/cs/pagoda/query/QueryRecord.java b/src/uk/ac/ox/cs/pagoda/query/QueryRecord.java index 5878a57..291af27 100644 --- a/src/uk/ac/ox/cs/pagoda/query/QueryRecord.java +++ b/src/uk/ac/ox/cs/pagoda/query/QueryRecord.java @@ -188,6 +188,10 @@ public class QueryRecord extends Disposable { return new AnswerTuplesImp(answerVariables[0], gapAnswerTuples); } + public int getGapAnswersCount() { + return gapAnswerTuples.size(); + } + public String toString() { if(isDisposed()) throw new DisposedException(); diff --git a/src/uk/ac/ox/cs/pagoda/query/rollup/QueryGraph.java b/src/uk/ac/ox/cs/pagoda/query/rollup/QueryGraph.java index a567699..01336ba 100644 --- a/src/uk/ac/ox/cs/pagoda/query/rollup/QueryGraph.java +++ b/src/uk/ac/ox/cs/pagoda/query/rollup/QueryGraph.java @@ -88,10 +88,20 @@ public class QueryGraph { Visitor visitor = new Visitor(factory, assignment); Set axioms = getPropertyAssertions(assignment); for(Map.Entry> entry : concepts.map.entrySet()) { - if(existVars.contains(entry.getKey())) continue; - sub = factory.getOWLNamedIndividual(IRI.create(getIndividual(entry.getKey(), assignment).getIRI())); - for(OWLClassExpression clsExp : entry.getValue()) { - axioms.add(factory.getOWLClassAssertionAxiom(clsExp.accept(visitor), sub)); + // TODO check correctness!!! + if(existVars.contains(entry.getKey())) { + OWLClassExpression conjunction = + factory.getOWLObjectIntersectionOf(factory.getOWLThing()); + for(OWLClassExpression owlClassExpression : entry.getValue()) { + conjunction = factory.getOWLObjectIntersectionOf(conjunction, owlClassExpression.accept(visitor)); + } + axioms.add(factory.getOWLSubClassOfAxiom(conjunction, factory.getOWLNothing())); + } + else { + sub = factory.getOWLNamedIndividual(IRI.create(getIndividual(entry.getKey(), assignment).getIRI())); + for(OWLClassExpression clsExp : entry.getValue()) { + axioms.add(factory.getOWLClassAssertionAxiom(clsExp.accept(visitor), sub)); + } } } return axioms; diff --git a/src/uk/ac/ox/cs/pagoda/reasoner/MyQueryReasoner.java b/src/uk/ac/ox/cs/pagoda/reasoner/MyQueryReasoner.java index 93fbc98..0b02e5a 100644 --- a/src/uk/ac/ox/cs/pagoda/reasoner/MyQueryReasoner.java +++ b/src/uk/ac/ox/cs/pagoda/reasoner/MyQueryReasoner.java @@ -189,12 +189,18 @@ class MyQueryReasoner extends QueryReasoner { return; OWLOntology relevantOntologySubset = extractRelevantOntologySubset(queryRecord); -// queryRecord.saveRelevantOntology("./fragment_query" + queryRecord.getQueryID() + ".owl"); + queryRecord.saveRelevantOntology("/home/alessandro/Desktop/test-relevant-ontology.owl"); +// int gapAnswersCount = queryRecord.getGapAnswersCount(); if(properties.getUseSkolemUpperBound() && querySkolemisedRelevantSubset(relevantOntologySubset, queryRecord)) return; +// // TODO extract from the previous relevant ontology +// // TODO implement details or remove it +// if(queryRecord.getGapAnswersCount() < gapAnswersCount) +// extractRelevantOntologySubset(queryRecord); // takes the relevant ontology from the record + Timer t = new Timer(); Checker summarisedChecker = new HermitSummaryFilter(queryRecord, properties.getToCallHermiT()); summarisedChecker.check(queryRecord.getGapAnswers()); diff --git a/src/uk/ac/ox/cs/pagoda/reasoner/QueryReasoner.java b/src/uk/ac/ox/cs/pagoda/reasoner/QueryReasoner.java index 3a057ec..e8daa3b 100644 --- a/src/uk/ac/ox/cs/pagoda/reasoner/QueryReasoner.java +++ b/src/uk/ac/ox/cs/pagoda/reasoner/QueryReasoner.java @@ -206,7 +206,7 @@ public abstract class QueryReasoner extends Disposable { if you call twice, you will end up with a json file with multiple roots */ if(answerWriter != null) gson.toJson(queryRecords, answerWriter); // queryRecords.stream().forEach(record -> Utility.logDebug(gson.toJson(record))); - queryRecords.stream().forEach(record -> record.dispose()); + queryRecords.stream().forEach(QueryRecord::dispose); } @Override 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 35db0f2..9cfc773 100644 --- a/src/uk/ac/ox/cs/pagoda/reasoner/full/HermitChecker.java +++ b/src/uk/ac/ox/cs/pagoda/reasoner/full/HermitChecker.java @@ -101,6 +101,7 @@ public class HermitChecker extends Checker { // for (OWLAxiom axiom: toCheckAxioms) System.out.println(axiom.toString()); +// Utility.logInfo(toCheckAxioms); if(hermit.isEntailed(toCheckAxioms)) { Utility.logDebug("@TIME to check one tuple: " + t.duration()); return true; diff --git a/src/uk/ac/ox/cs/pagoda/rules/Program.java b/src/uk/ac/ox/cs/pagoda/rules/Program.java index afc32d4..85000e3 100644 --- a/src/uk/ac/ox/cs/pagoda/rules/Program.java +++ b/src/uk/ac/ox/cs/pagoda/rules/Program.java @@ -119,7 +119,7 @@ protected PredicateDependency dependencyGraph; } catch(IOException e) { e.printStackTrace(); } - Utility.logDebug("The rules are saved in " + getOutputPath() + "."); + Utility.logInfo("The rules are saved in " + getOutputPath() + "."); } @Override diff --git a/src/uk/ac/ox/cs/pagoda/util/PagodaProperties.java b/src/uk/ac/ox/cs/pagoda/util/PagodaProperties.java index e501821..4991d0d 100644 --- a/src/uk/ac/ox/cs/pagoda/util/PagodaProperties.java +++ b/src/uk/ac/ox/cs/pagoda/util/PagodaProperties.java @@ -43,14 +43,14 @@ public class PagodaProperties { defaultUseAlwaysSimpleUpperBound = Boolean.parseBoolean(config.getProperty("useAlwaysSimpleUpperBound")); if(defaultUseAlwaysSimpleUpperBound) - logger.info("By default the simple upper bound is always used"); + logger.debug("By default the simple upper bound is always used"); } if(config.containsKey("useSkolemUpperBound")) { defaultUseSkolemUpperBound = Boolean.parseBoolean(config.getProperty("useSkolemUpperBound")); if(defaultUseSkolemUpperBound) - logger.info("By default the Skolem upper bound is enabled"); + logger.debug("By default the Skolem upper bound is enabled"); else - logger.info("By default the Skolem upper bound is disabled"); + logger.debug("By default the Skolem upper bound is disabled"); } } catch(IOException e) { -- cgit v1.2.3