From 9ce65c5a963b03ee97fe9cb6c5aa65a3c04a80a8 Mon Sep 17 00:00:00 2001 From: yzhou Date: Tue, 21 Apr 2015 10:34:27 +0100 Subject: initial version --- .../ac/ox/cs/pagoda/reasoner/RLQueryReasoner.java | 83 ++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 src/uk/ac/ox/cs/pagoda/reasoner/RLQueryReasoner.java (limited to 'src/uk/ac/ox/cs/pagoda/reasoner/RLQueryReasoner.java') diff --git a/src/uk/ac/ox/cs/pagoda/reasoner/RLQueryReasoner.java b/src/uk/ac/ox/cs/pagoda/reasoner/RLQueryReasoner.java new file mode 100644 index 0000000..3894874 --- /dev/null +++ b/src/uk/ac/ox/cs/pagoda/reasoner/RLQueryReasoner.java @@ -0,0 +1,83 @@ +package uk.ac.ox.cs.pagoda.reasoner; + +import org.semanticweb.owlapi.model.OWLOntology; +import uk.ac.ox.cs.pagoda.constraints.UnaryBottom; +import uk.ac.ox.cs.pagoda.query.AnswerTuples; +import uk.ac.ox.cs.pagoda.query.QueryRecord; +import uk.ac.ox.cs.pagoda.query.QueryRecord.Step; +import uk.ac.ox.cs.pagoda.reasoner.light.BasicQueryEngine; +import uk.ac.ox.cs.pagoda.reasoner.light.RDFoxQueryEngine; +import uk.ac.ox.cs.pagoda.rules.LowerDatalogProgram; +import uk.ac.ox.cs.pagoda.util.Timer; + +public class RLQueryReasoner extends QueryReasoner { + + RDFoxQueryEngine rlLowerStore = null; + + LowerDatalogProgram program; + + public RLQueryReasoner() { + rlLowerStore = new BasicQueryEngine("rl"); + } + + Timer t = new Timer(); + + @Override + public void evaluate(QueryRecord queryRecord) { + AnswerTuples rlAnswer = null; + t.reset(); + try { + rlAnswer = rlLowerStore.evaluate(queryRecord.getQueryText(), queryRecord.getAnswerVariables()); + queryRecord.updateLowerBoundAnswers(rlAnswer); + } finally { + if (rlAnswer != null) rlAnswer.dispose(); + } + queryRecord.addProcessingTime(Step.LowerBound, t.duration()); + queryRecord.setDifficulty(Step.LowerBound); + queryRecord.markAsProcessed(); + } + + @Override + public void dispose() { + if (rlLowerStore != null) rlLowerStore.dispose(); + super.dispose(); + } + + @Override + public void loadOntology(OWLOntology ontology) { + program = new LowerDatalogProgram(); + program.load(ontology, new UnaryBottom()); + program.transform(); + + importData(program.getAdditionalDataFile()); + } + + @Override + public boolean preprocess() { + rlLowerStore.importRDFData("data", importedData.toString()); + rlLowerStore.materialise("lower program", program.toString()); + + if (!isConsistent()) + return false; + return true; + } + + @Override + public boolean isConsistent() { + AnswerTuples ans = null; + try { + ans = rlLowerStore.evaluate(QueryRecord.botQueryText, new String[] {"X"}); + return !ans.isValid(); + } finally { + if (ans != null) ans.dispose(); + + } + + } + + @Override + public void evaluateUpper(QueryRecord record) { + evaluate(record); + } + +} -- cgit v1.2.3