From 9ce65c5a963b03ee97fe9cb6c5aa65a3c04a80a8 Mon Sep 17 00:00:00 2001 From: yzhou Date: Tue, 21 Apr 2015 10:34:27 +0100 Subject: initial version --- .../ox/cs/pagoda/reasoner/IterativeRefinement.java | 106 +++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 src/uk/ac/ox/cs/pagoda/reasoner/IterativeRefinement.java (limited to 'src/uk/ac/ox/cs/pagoda/reasoner/IterativeRefinement.java') diff --git a/src/uk/ac/ox/cs/pagoda/reasoner/IterativeRefinement.java b/src/uk/ac/ox/cs/pagoda/reasoner/IterativeRefinement.java new file mode 100644 index 0000000..ba6a4d4 --- /dev/null +++ b/src/uk/ac/ox/cs/pagoda/reasoner/IterativeRefinement.java @@ -0,0 +1,106 @@ +package uk.ac.ox.cs.pagoda.reasoner; + +import java.io.File; + +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.QueryRecord; +import uk.ac.ox.cs.pagoda.reasoner.light.BasicQueryEngine; +import uk.ac.ox.cs.pagoda.rules.GeneralProgram; +import uk.ac.ox.cs.pagoda.tracking.QueryTracker; +import uk.ac.ox.cs.pagoda.util.Utility; + +public class IterativeRefinement { + + private static final int depthLimit = 1; + + QueryRecord m_record; + QueryTracker m_tracker; + BasicQueryEngine m_trackingStore; + QueryRecord[] botQueryRecords; + + int m_depth = 0; + + public IterativeRefinement(QueryRecord queryRecord, QueryTracker tracker, BasicQueryEngine trackingStore, QueryRecord[] botQueryRecords) { + m_record = queryRecord; + m_tracker = tracker; + m_trackingStore = trackingStore; + this.botQueryRecords = botQueryRecords; + } + + String tempDataFile = "temp.ttl"; + + public OWLOntology extractWithFullABox(String dataset, BottomStrategy upperBottom) { + GeneralProgram program; + boolean update; + while (m_depth < depthLimit) { + ++m_depth; + program = new GeneralProgram(m_record.getRelevantClauses(), m_record.getRelevantOntology()); + + MultiStageQueryEngine tEngine = new MultiStageQueryEngine("query-tracking", true); + try { + tEngine.importRDFData("data", dataset); + if (tEngine.materialise4SpecificQuery(program, m_record, upperBottom) != 1) { + return m_record.getRelevantOntology(); + } + + update = m_record.updateUpperBoundAnswers(tEngine.evaluate(m_record.getQueryText())); + } finally { + tEngine.dispose(); + } + + if (m_record.processed()) + return null; + + if (!update) break; + + m_record.updateSubID(); + m_tracker.extract(m_trackingStore, botQueryRecords, true); + } + + return m_record.getRelevantOntology(); + } + + public OWLOntology extract(UpperUnaryBottom upperBottom) { + GeneralProgram program; + boolean update; + while (m_depth < depthLimit) { + m_record.saveABoxInTurtle(tempDataFile); + program = new GeneralProgram(m_record.getRelevantClauses(), m_record.getRelevantOntology()); + + MultiStageQueryEngine tEngine = new MultiStageQueryEngine("query-tracking", true); + try { + tEngine.importRDFData("fragment abox", tempDataFile); + if (tEngine.materialise4SpecificQuery(program, m_record, upperBottom) != 1) { + return m_record.getRelevantOntology(); + } + + update = m_record.updateUpperBoundAnswers(tEngine.evaluate(m_record.getQueryText())); + } finally { + tEngine.dispose(); + } + + if (m_record.processed()) + return null; + + if (!update) break; + + m_record.updateSubID(); + m_tracker.extract(m_trackingStore, botQueryRecords, true); + } + + return m_record.getRelevantOntology(); + } + + public void dispose() { + File file = new File(tempDataFile); + if (file.exists()) { + file.delete(); + Utility.logDebug(file.getAbsolutePath() + " is deleted."); + } + } + +} -- cgit v1.2.3