From 870eb35e38f746ed73f233070dcf3bdaf4687e02 Mon Sep 17 00:00:00 2001 From: RncLsn Date: Sat, 9 May 2015 14:26:28 +0100 Subject: Adding (not completed) log of partial answers in Json. --- .../ac/ox/cs/pagoda/reasoner/MyQueryReasoner.java | 36 ++++++++++++++++------ src/uk/ac/ox/cs/pagoda/reasoner/QueryReasoner.java | 12 ++------ 2 files changed, 30 insertions(+), 18 deletions(-) (limited to 'src/uk/ac/ox/cs/pagoda/reasoner') diff --git a/src/uk/ac/ox/cs/pagoda/reasoner/MyQueryReasoner.java b/src/uk/ac/ox/cs/pagoda/reasoner/MyQueryReasoner.java index 17838ae..4465764 100644 --- a/src/uk/ac/ox/cs/pagoda/reasoner/MyQueryReasoner.java +++ b/src/uk/ac/ox/cs/pagoda/reasoner/MyQueryReasoner.java @@ -1,24 +1,29 @@ package uk.ac.ox.cs.pagoda.reasoner; -import java.util.Collection; - import org.semanticweb.karma2.profile.ELHOProfile; import org.semanticweb.owlapi.model.OWLOntology; - -import uk.ac.ox.cs.pagoda.multistage.*; +import uk.ac.ox.cs.pagoda.multistage.MultiStageQueryEngine; import uk.ac.ox.cs.pagoda.owl.EqualitiesEliminator; import uk.ac.ox.cs.pagoda.owl.OWLHelper; -import uk.ac.ox.cs.pagoda.query.*; +import uk.ac.ox.cs.pagoda.query.AnswerTuples; +import uk.ac.ox.cs.pagoda.query.GapByStore4ID; +import uk.ac.ox.cs.pagoda.query.QueryRecord; import uk.ac.ox.cs.pagoda.query.QueryRecord.Step; import uk.ac.ox.cs.pagoda.reasoner.full.Checker; import uk.ac.ox.cs.pagoda.reasoner.light.BasicQueryEngine; import uk.ac.ox.cs.pagoda.reasoner.light.KarmaQueryEngine; import uk.ac.ox.cs.pagoda.rules.DatalogProgram; import uk.ac.ox.cs.pagoda.summary.HermitSummaryFilter; -import uk.ac.ox.cs.pagoda.tracking.*; +import uk.ac.ox.cs.pagoda.tracking.QueryTracker; +import uk.ac.ox.cs.pagoda.tracking.TrackingRuleEncoder; +import uk.ac.ox.cs.pagoda.tracking.TrackingRuleEncoderDisjVar1; +import uk.ac.ox.cs.pagoda.tracking.TrackingRuleEncoderWithGap; import uk.ac.ox.cs.pagoda.util.Timer; import uk.ac.ox.cs.pagoda.util.Utility; +import java.util.Collection; +import java.util.HashMap; + public class MyQueryReasoner extends QueryReasoner { OWLOntology ontology; @@ -203,10 +208,17 @@ public class MyQueryReasoner extends QueryReasoner { String[] extendedQuery = queryRecord.getExtendedQueryText(); queryUpperBound(upperStore, queryRecord, queryRecord.getQueryText(), queryRecord.getAnswerVariables()); - if (!queryRecord.processed() && !queryRecord.getQueryText().equals(extendedQuery[0])) + + // TODO log correct partial answers + Utility.logDebug(toJson("upperBound1", queryRecord)); + if (!queryRecord.processed() && !queryRecord.getQueryText().equals(extendedQuery[0])) { queryUpperBound(upperStore, queryRecord, extendedQuery[0], queryRecord.getAnswerVariables()); - if (!queryRecord.processed() && queryRecord.hasNonAnsDistinguishedVariables()) + Utility.logDebug(toJson("upperBound2", queryRecord)); + } + if (!queryRecord.processed() && queryRecord.hasNonAnsDistinguishedVariables()) { queryUpperBound(upperStore, queryRecord, extendedQuery[1], queryRecord.getDistinguishedVariables()); + Utility.logDebug(toJson("upperBound3", queryRecord)); + } queryRecord.addProcessingTime(Step.UpperBound, t.duration()); if (queryRecord.processed()) { @@ -268,13 +280,19 @@ public class MyQueryReasoner extends QueryReasoner { // int counter = 0; + private String toJson(String key, Object value) { + HashMap map = new HashMap<>(); + map.put(key, value); + return QueryRecord.GsonCreator.getInstance().toJson(map); + } + private void queryUpperBound(BasicQueryEngine upperStore, QueryRecord queryRecord, String queryText, String[] answerVariables) { AnswerTuples rlAnswer = null; try { Utility.logDebug(queryText); rlAnswer = upperStore.evaluate(queryText, answerVariables); Utility.logDebug(t.duration()); - queryRecord.updateUpperBoundAnswers(rlAnswer); + queryRecord.updateUpperBoundAnswers(rlAnswer); } finally { if (rlAnswer != null) rlAnswer.dispose(); rlAnswer = null; diff --git a/src/uk/ac/ox/cs/pagoda/reasoner/QueryReasoner.java b/src/uk/ac/ox/cs/pagoda/reasoner/QueryReasoner.java index 1f08fdf..326bf7e 100644 --- a/src/uk/ac/ox/cs/pagoda/reasoner/QueryReasoner.java +++ b/src/uk/ac/ox/cs/pagoda/reasoner/QueryReasoner.java @@ -1,10 +1,8 @@ package uk.ac.ox.cs.pagoda.reasoner; import com.google.gson.Gson; -import com.google.gson.GsonBuilder; import org.semanticweb.owlapi.model.OWLOntology; import uk.ac.ox.cs.pagoda.owl.OWLHelper; -import uk.ac.ox.cs.pagoda.query.AnswerTuple; import uk.ac.ox.cs.pagoda.query.AnswerTuples; import uk.ac.ox.cs.pagoda.query.QueryManager; import uk.ac.ox.cs.pagoda.query.QueryRecord; @@ -202,11 +200,7 @@ public abstract class QueryReasoner { } Timer t = new Timer(); - Gson gson = new GsonBuilder() - .registerTypeAdapter(AnswerTuple.class, new AnswerTuple.AnswerTupleSerializer()) - .registerTypeAdapter(QueryRecord.class, new QueryRecord.QueryRecordSerializer()) - .setPrettyPrinting() - .create(); + Gson gson = QueryRecord.GsonCreator.getInstance(); for (QueryRecord record: queryRecords) { // if (Integer.parseInt(record.getQueryID()) != 218) continue; Utility.logInfo("---------- start evaluating Query " + record.getQueryID() + " ----------", @@ -226,7 +220,7 @@ public abstract class QueryReasoner { } // TODO it can handle one call only // if you call twice, you will end up with a json file with multiple roots - gson.toJson(queryRecords, answerWriter); + if(answerWriter != null) gson.toJson(queryRecords, answerWriter); queryRecords.stream().forEach(record -> record.dispose()); } @@ -251,5 +245,5 @@ public abstract class QueryReasoner { public static QueryReasoner getHermiTReasoner(boolean toCheckSatisfiability) { return new HermiTReasoner(toCheckSatisfiability); } - + } -- cgit v1.2.3