diff options
Diffstat (limited to 'src/uk/ac/ox/cs/pagoda/reasoner/HermiTReasoner.java')
| -rw-r--r-- | src/uk/ac/ox/cs/pagoda/reasoner/HermiTReasoner.java | 196 |
1 files changed, 101 insertions, 95 deletions
diff --git a/src/uk/ac/ox/cs/pagoda/reasoner/HermiTReasoner.java b/src/uk/ac/ox/cs/pagoda/reasoner/HermiTReasoner.java index d1856c9..78b9a0b 100644 --- a/src/uk/ac/ox/cs/pagoda/reasoner/HermiTReasoner.java +++ b/src/uk/ac/ox/cs/pagoda/reasoner/HermiTReasoner.java | |||
| @@ -10,6 +10,7 @@ import uk.ac.ox.cs.pagoda.query.*; | |||
| 10 | import uk.ac.ox.cs.pagoda.reasoner.light.BasicQueryEngine; | 10 | import uk.ac.ox.cs.pagoda.reasoner.light.BasicQueryEngine; |
| 11 | import uk.ac.ox.cs.pagoda.rules.DatalogProgram; | 11 | import uk.ac.ox.cs.pagoda.rules.DatalogProgram; |
| 12 | import uk.ac.ox.cs.pagoda.util.Utility; | 12 | import uk.ac.ox.cs.pagoda.util.Utility; |
| 13 | import uk.ac.ox.cs.pagoda.util.disposable.DisposedException; | ||
| 13 | 14 | ||
| 14 | import java.io.File; | 15 | import java.io.File; |
| 15 | import java.io.IOException; | 16 | import java.io.IOException; |
| @@ -17,100 +18,105 @@ import java.util.HashSet; | |||
| 17 | import java.util.Set; | 18 | import java.util.Set; |
| 18 | 19 | ||
| 19 | class HermiTReasoner extends QueryReasoner { | 20 | class HermiTReasoner extends QueryReasoner { |
| 20 | 21 | ||
| 21 | Reasoner hermit; | 22 | Reasoner hermit; |
| 22 | 23 | ||
| 23 | BasicQueryEngine upperStore = null; | 24 | BasicQueryEngine upperStore = null; |
| 24 | 25 | ||
| 25 | OWLOntology onto; | 26 | OWLOntology onto; |
| 26 | OWLDataFactory factory; | 27 | OWLDataFactory factory; |
| 27 | 28 | ||
| 28 | String importedOntologyPath = null; | 29 | String importedOntologyPath = null; |
| 29 | 30 | ||
| 30 | QueryRoller roller; | 31 | QueryRoller roller; |
| 31 | boolean toCheckSatisfiability; | 32 | boolean toCheckSatisfiability; |
| 32 | 33 | ||
| 33 | public HermiTReasoner(boolean toCheckSatisfiability) { | 34 | public HermiTReasoner(boolean toCheckSatisfiability) { |
| 34 | this.toCheckSatisfiability = toCheckSatisfiability; | 35 | this.toCheckSatisfiability = toCheckSatisfiability; |
| 35 | } | 36 | } |
| 36 | 37 | ||
| 37 | @Override | 38 | @Override |
| 38 | public void loadOntology(OWLOntology ontology) { | 39 | public void loadOntology(OWLOntology ontology) { |
| 39 | onto = ontology; | 40 | if(isDisposed()) throw new DisposedException(); |
| 40 | } | 41 | onto = ontology; |
| 41 | 42 | } | |
| 42 | @Override | 43 | |
| 43 | public boolean preprocess() { | 44 | @Override |
| 44 | OWLOntology tbox = onto; | 45 | public boolean preprocess() { |
| 45 | try { | 46 | if(isDisposed()) throw new DisposedException(); |
| 46 | onto = OWLHelper.getImportedOntology(tbox, importedData.toString().split(ImportDataFileSeparator)); | 47 | OWLOntology tbox = onto; |
| 47 | importedOntologyPath = OWLHelper.getOntologyPath(onto); | 48 | try { |
| 48 | } catch(OWLOntologyCreationException | OWLOntologyStorageException | IOException e) { | 49 | onto = OWLHelper.getImportedOntology(tbox, importedData.toString().split(ImportDataFileSeparator)); |
| 49 | e.printStackTrace(); | 50 | importedOntologyPath = OWLHelper.getOntologyPath(onto); |
| 50 | } | 51 | } catch(OWLOntologyCreationException | OWLOntologyStorageException | IOException e) { |
| 51 | 52 | e.printStackTrace(); | |
| 52 | DatalogProgram datalogProgram = new DatalogProgram(tbox, false); | 53 | } |
| 53 | importData(datalogProgram.getAdditionalDataFile()); | 54 | |
| 54 | upperStore = new MultiStageQueryEngine("rl-upper", false); | 55 | DatalogProgram datalogProgram = new DatalogProgram(tbox, false); |
| 55 | upperStore.importRDFData("data", importedData.toString()); | 56 | importData(datalogProgram.getAdditionalDataFile()); |
| 56 | GapByStore4ID gap = new GapByStore4ID(upperStore); | 57 | upperStore = new MultiStageQueryEngine("rl-upper", false); |
| 57 | upperStore.materialiseFoldedly(datalogProgram, gap); | 58 | upperStore.importRDFData("data", importedData.toString()); |
| 58 | gap.clear(); | 59 | GapByStore4ID gap = new GapByStore4ID(upperStore); |
| 59 | 60 | upperStore.materialiseFoldedly(datalogProgram, gap); | |
| 60 | factory = onto.getOWLOntologyManager().getOWLDataFactory(); | 61 | gap.clear(); |
| 61 | roller = new QueryRoller(factory); | 62 | |
| 62 | 63 | factory = onto.getOWLOntologyManager().getOWLDataFactory(); | |
| 63 | hermit = new Reasoner(onto); | 64 | roller = new QueryRoller(factory); |
| 64 | return isConsistent(); | 65 | |
| 65 | } | 66 | hermit = new Reasoner(onto); |
| 66 | 67 | return isConsistent(); | |
| 67 | @Override | 68 | } |
| 68 | public boolean isConsistent() { | 69 | |
| 69 | if (toCheckSatisfiability) | 70 | @Override |
| 70 | return hermit.isConsistent(); | 71 | public boolean isConsistent() { |
| 71 | return true; | 72 | if(isDisposed()) throw new DisposedException(); |
| 72 | } | 73 | if(toCheckSatisfiability) |
| 73 | 74 | return hermit.isConsistent(); | |
| 74 | @Override | 75 | return true; |
| 75 | public void evaluate(QueryRecord record) { | 76 | } |
| 76 | String[] disVars = record.getDistinguishedVariables(); | 77 | |
| 77 | Set<OWLNamedIndividual> individuals = onto.getIndividualsInSignature(true); | 78 | @Override |
| 78 | if (disVars.length == 1) { | 79 | public void evaluate(QueryRecord record) { |
| 79 | OWLClassExpression clsExp = roller.rollUp(record.getClause(), record.getAnswerVariables()[0]); | 80 | if(isDisposed()) throw new DisposedException(); |
| 80 | Set<AnswerTuple> answers = new HashSet<AnswerTuple>(); | 81 | String[] disVars = record.getDistinguishedVariables(); |
| 81 | for (OWLNamedIndividual individual: individuals) { | 82 | Set<OWLNamedIndividual> individuals = onto.getIndividualsInSignature(true); |
| 82 | Utility.logDebug("checking ... " + individual); | 83 | if(disVars.length == 1) { |
| 83 | if (hermit.isEntailed(factory.getOWLClassAssertionAxiom(clsExp, individual))) { | 84 | OWLClassExpression clsExp = roller.rollUp(record.getClause(), record.getAnswerVariables()[0]); |
| 84 | answers.add(new AnswerTuple(new Individual[] {Individual.create(individual.toStringID())})); | 85 | Set<AnswerTuple> answers = new HashSet<AnswerTuple>(); |
| 85 | } | 86 | for(OWLNamedIndividual individual : individuals) { |
| 86 | } | 87 | Utility.logDebug("checking ... " + individual); |
| 87 | record.updateLowerBoundAnswers(new AnswerTuplesImp(record.getAnswerVariables(), answers)); | 88 | if(hermit.isEntailed(factory.getOWLClassAssertionAxiom(clsExp, individual))) { |
| 88 | record.markAsProcessed(); | 89 | answers.add(new AnswerTuple(new Individual[]{Individual.create(individual.toStringID())})); |
| 89 | } | 90 | } |
| 90 | else { | 91 | } |
| 91 | // FIXME join here | 92 | record.updateLowerBoundAnswers(new AnswerTuplesImp(record.getAnswerVariables(), answers)); |
| 92 | record.markAsProcessed(); | 93 | record.markAsProcessed(); |
| 93 | } | 94 | } |
| 94 | } | 95 | else { |
| 95 | 96 | // FIXME join here | |
| 96 | @Override | 97 | record.markAsProcessed(); |
| 97 | public void evaluateUpper(QueryRecord record) { | 98 | } |
| 98 | AnswerTuples rlAnswer = null; | 99 | } |
| 99 | try { | 100 | |
| 100 | rlAnswer = upperStore.evaluate(record.getQueryText(), record.getAnswerVariables()); | 101 | @Override |
| 101 | record.updateUpperBoundAnswers(rlAnswer, true); | 102 | public void evaluateUpper(QueryRecord record) { |
| 102 | } finally { | 103 | if(isDisposed()) throw new DisposedException(); |
| 103 | if (rlAnswer != null) rlAnswer.dispose(); | 104 | AnswerTuples rlAnswer = null; |
| 104 | } | 105 | try { |
| 105 | } | 106 | rlAnswer = upperStore.evaluate(record.getQueryText(), record.getAnswerVariables()); |
| 106 | 107 | record.updateUpperBoundAnswers(rlAnswer, true); | |
| 107 | @Override | 108 | } finally { |
| 108 | public void dispose() { | 109 | if(rlAnswer != null) rlAnswer.dispose(); |
| 109 | if (importedOntologyPath != null) { | 110 | } |
| 110 | File tmp = new File(importedOntologyPath); | 111 | } |
| 111 | if (tmp.exists()) tmp.delete(); | 112 | |
| 112 | } | 113 | @Override |
| 113 | super.dispose(); | 114 | public void dispose() { |
| 114 | } | 115 | super.dispose(); |
| 116 | if(importedOntologyPath != null) { | ||
| 117 | File tmp = new File(importedOntologyPath); | ||
| 118 | if(tmp.exists()) tmp.delete(); | ||
| 119 | } | ||
| 120 | } | ||
| 115 | 121 | ||
| 116 | } | 122 | } |
