From c3480bb733b8bca976718a3dc2f09a21cb4b1b45 Mon Sep 17 00:00:00 2001 From: RncLsn Date: Tue, 4 Aug 2015 18:30:46 +0100 Subject: Rules parsing. --- src/uk/ac/ox/cs/pagoda/rules/DatalogProgram.java | 51 ++++++++++++---------- src/uk/ac/ox/cs/pagoda/rules/GeneralProgram.java | 2 +- .../ac/ox/cs/pagoda/rules/LowerDatalogProgram.java | 3 +- src/uk/ac/ox/cs/pagoda/rules/Program.java | 37 +++++++++++++--- .../LimitedSkolemisationApproximator.java | 2 +- .../ac/ox/cs/pagoda/rules/clauses/Conjunction.java | 4 -- src/uk/ac/ox/cs/pagoda/rules/clauses/DLClause.java | 12 ----- 7 files changed, 64 insertions(+), 47 deletions(-) delete mode 100644 src/uk/ac/ox/cs/pagoda/rules/clauses/Conjunction.java delete mode 100644 src/uk/ac/ox/cs/pagoda/rules/clauses/DLClause.java (limited to 'src/uk/ac/ox/cs/pagoda/rules') diff --git a/src/uk/ac/ox/cs/pagoda/rules/DatalogProgram.java b/src/uk/ac/ox/cs/pagoda/rules/DatalogProgram.java index 29e74c2..e2a171d 100644 --- a/src/uk/ac/ox/cs/pagoda/rules/DatalogProgram.java +++ b/src/uk/ac/ox/cs/pagoda/rules/DatalogProgram.java @@ -2,11 +2,12 @@ package uk.ac.ox.cs.pagoda.rules; import org.semanticweb.owlapi.model.OWLOntology; import uk.ac.ox.cs.pagoda.constraints.BottomStrategy; -import uk.ac.ox.cs.pagoda.constraints.PredicateDependency; import uk.ac.ox.cs.pagoda.constraints.UpperUnaryBottom; import uk.ac.ox.cs.pagoda.util.disposable.Disposable; import uk.ac.ox.cs.pagoda.util.disposable.DisposedException; +import java.io.InputStream; + public class DatalogProgram extends Disposable { UpperDatalogProgram upperProgram = new UpperDatalogProgram(); @@ -15,14 +16,36 @@ public class DatalogProgram extends Disposable { BottomStrategy upperBottom; - public DatalogProgram(OWLOntology o) { + public DatalogProgram(InputStream inputStream) { lowerProgram = new LowerDatalogProgram(); - init(o, false); + + upperProgram.load(inputStream, upperBottom = new UpperUnaryBottom()); + lowerProgram.clone(upperProgram); + program.clone(upperProgram); + + upperProgram.transform(); + lowerProgram.transform(); + program.transform(); + + program.buildDependencyGraph(); + lowerProgram.dependencyGraph = upperProgram.buildDependencyGraph(); } - public DatalogProgram(OWLOntology o, boolean toClassify) { - lowerProgram = new LowerDatalogProgram(toClassify); - init(o, toClassify); + public DatalogProgram(OWLOntology o) { + lowerProgram = new LowerDatalogProgram(); + + upperProgram.load(o, upperBottom = new UpperUnaryBottom()); +// upperProgram.load(o, upperBottom = new UnaryBottom()); + lowerProgram.clone(upperProgram); + program.clone(upperProgram); +// program.botStrategy = new UnaryBottom(); + + upperProgram.transform(); + lowerProgram.transform(); + program.transform(); + + program.buildDependencyGraph(); + lowerProgram.dependencyGraph = upperProgram.buildDependencyGraph(); } public LowerDatalogProgram getLower() { @@ -55,20 +78,4 @@ public class DatalogProgram extends Disposable { super.dispose(); if(upperProgram != null) upperProgram.deleteABoxTurtleFile(); } - - private void init(OWLOntology o, boolean forSemFacet) { - upperProgram.load(o, upperBottom = new UpperUnaryBottom()); -// upperProgram.load(o, upperBottom = new UnaryBottom()); - lowerProgram.clone(upperProgram); - program.clone(upperProgram); -// program.botStrategy = new UnaryBottom(); - - upperProgram.transform(); - lowerProgram.transform(); - program.transform(); - - program.buildDependencyGraph(); - PredicateDependency graph = upperProgram.buildDependencyGraph(); - lowerProgram.dependencyGraph = graph; - } } diff --git a/src/uk/ac/ox/cs/pagoda/rules/GeneralProgram.java b/src/uk/ac/ox/cs/pagoda/rules/GeneralProgram.java index 01ab427..e390a29 100644 --- a/src/uk/ac/ox/cs/pagoda/rules/GeneralProgram.java +++ b/src/uk/ac/ox/cs/pagoda/rules/GeneralProgram.java @@ -15,7 +15,7 @@ public class GeneralProgram extends Program { ontology = relevantOntology; ontologyDirectory = null; - dlOntology = null; +// dlOntology = null; botStrategy = new UnaryBottom(); clauses = botStrategy.process(relevantClauses); diff --git a/src/uk/ac/ox/cs/pagoda/rules/LowerDatalogProgram.java b/src/uk/ac/ox/cs/pagoda/rules/LowerDatalogProgram.java index 9930009..a2676e8 100644 --- a/src/uk/ac/ox/cs/pagoda/rules/LowerDatalogProgram.java +++ b/src/uk/ac/ox/cs/pagoda/rules/LowerDatalogProgram.java @@ -39,6 +39,7 @@ public class LowerDatalogProgram extends ApproxProgram implements IncrementalPro } + // TODO -RULE- filter out unsafe rules @Override public void transform() { if (m_toClassify) { @@ -56,7 +57,7 @@ public class LowerDatalogProgram extends ApproxProgram implements IncrementalPro else super.transform(); - Normalisation norm = new Normalisation(dlOntology.getDLClauses(), ontology, new NullaryBottom()); + Normalisation norm = new Normalisation(dlClauses, ontology, new NullaryBottom()); BottomStrategy tBottom = new NullaryBottom(); norm.process(); for (DLClause nClause: norm.getNormlisedClauses()) { diff --git a/src/uk/ac/ox/cs/pagoda/rules/Program.java b/src/uk/ac/ox/cs/pagoda/rules/Program.java index a0edf85..de06f52 100644 --- a/src/uk/ac/ox/cs/pagoda/rules/Program.java +++ b/src/uk/ac/ox/cs/pagoda/rules/Program.java @@ -4,6 +4,7 @@ import org.apache.commons.io.FilenameUtils; import org.semanticweb.HermiT.Configuration; import org.semanticweb.HermiT.model.*; import org.semanticweb.HermiT.structural.OWLClausification; +import org.semanticweb.owlapi.apibinding.OWLManager; import org.semanticweb.owlapi.model.*; import org.semanticweb.simpleETL.SimpleETL; import uk.ac.ox.cs.pagoda.MyPrefixes; @@ -13,6 +14,7 @@ import uk.ac.ox.cs.pagoda.constraints.BottomStrategy; import uk.ac.ox.cs.pagoda.constraints.NullaryBottom; import uk.ac.ox.cs.pagoda.constraints.PredicateDependency; import uk.ac.ox.cs.pagoda.hermit.DLClauseHelper; +import uk.ac.ox.cs.pagoda.hermit.RuleHelper; import uk.ac.ox.cs.pagoda.owl.OWLHelper; import uk.ac.ox.cs.pagoda.util.Utility; @@ -23,7 +25,9 @@ public abstract class Program implements KnowledgeBase { protected String ontologyDirectory = null; protected OWLOntology ontology; - protected DLOntology dlOntology; +// protected DLOntology dlOntology; + protected Set dlClauses = new HashSet<>(); + protected Set positiveFacts = new HashSet<>(); protected BottomStrategy botStrategy; protected Collection clauses = new HashSet(); // protected Set used = new HashSet(); @@ -40,6 +44,24 @@ protected PredicateDependency dependencyGraph; return sb.toString(); } + public void load(InputStream rules, BottomStrategy botStrategy) { +// this.botStrategy = botStrategy; +// // fake instantiation + try { + load(OWLManager.createOWLOntologyManager().createOntology(), botStrategy); + } catch (OWLOntologyCreationException e) { + e.printStackTrace(); + } + + try(BufferedReader br = new BufferedReader(new InputStreamReader(rules))) { + String line; + while((line = br.readLine()) != null) + dlClauses.add(RuleHelper.parseClause(line)); + } catch (IOException e) { + e.printStackTrace(); + } + } + public void load(OWLOntology o, BottomStrategy botStrategy) { this.botStrategy = botStrategy; RLPlusOntology owlOntology = new RLPlusOntology(); @@ -57,7 +79,7 @@ protected PredicateDependency dependencyGraph; OWLOntology abox = OWLHelper.loadOntology(aboxOWLFile); OWLOntologyManager manager = abox.getOWLOntologyManager(); OWLAxiom axiom; - for (Atom atom: dlOntology.getPositiveFacts()) { + for (Atom atom: positiveFacts) { if ((axiom = OWLHelper.getABoxAssertion(manager.getOWLDataFactory(), atom)) != null) manager.addAxiom(abox, axiom); } @@ -90,7 +112,7 @@ protected PredicateDependency dependencyGraph; @Override public void transform() { - for(DLClause dlClause : dlOntology.getDLClauses()) { + for(DLClause dlClause : dlClauses) { DLClause simplifiedDLClause = DLClauseHelper.removeNominalConcept(dlClause); simplifiedDLClause = removeAuxiliaryBodyAtoms(simplifiedDLClause); simplifiedDLClause = DLClauseHelper.replaceWithDataValue(simplifiedDLClause); @@ -190,7 +212,9 @@ protected PredicateDependency dependencyGraph; void clone(Program program) { this.ontologyDirectory = program.ontologyDirectory; this.ontology = program.ontology; - this.dlOntology = program.dlOntology; +// this.dlOntology = program.dlOntology; + this.dlClauses = program.dlClauses; + this.positiveFacts = program.positiveFacts; this.botStrategy = program.botStrategy; this.additionalDataFile = program.additionalDataFile; this.transitiveAxioms = program.transitiveAxioms; @@ -248,8 +272,9 @@ protected PredicateDependency dependencyGraph; } Utility.logInfo("The number of data property range axioms that are ignored: " + noOfDataPropertyRangeAxioms + "(" + noOfAxioms + ")"); - dlOntology = (DLOntology) clausifier.preprocessAndClausify(filteredOntology, null)[1]; - clausifier = null; + DLOntology dlOntology = (DLOntology) clausifier.preprocessAndClausify(filteredOntology, null)[1]; + dlClauses = dlOntology.getDLClauses(); + positiveFacts = dlOntology.getPositiveFacts(); } private DLClause removeAuxiliaryBodyAtoms(DLClause dlClause) { diff --git a/src/uk/ac/ox/cs/pagoda/rules/approximators/LimitedSkolemisationApproximator.java b/src/uk/ac/ox/cs/pagoda/rules/approximators/LimitedSkolemisationApproximator.java index 7d29c74..a140225 100644 --- a/src/uk/ac/ox/cs/pagoda/rules/approximators/LimitedSkolemisationApproximator.java +++ b/src/uk/ac/ox/cs/pagoda/rules/approximators/LimitedSkolemisationApproximator.java @@ -9,7 +9,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Collections; -/** +/*** * Approximates existential rules through a limited form of Skolemisation. *

* Given a rule and a ground substitution, diff --git a/src/uk/ac/ox/cs/pagoda/rules/clauses/Conjunction.java b/src/uk/ac/ox/cs/pagoda/rules/clauses/Conjunction.java deleted file mode 100644 index 91bb3e7..0000000 --- a/src/uk/ac/ox/cs/pagoda/rules/clauses/Conjunction.java +++ /dev/null @@ -1,4 +0,0 @@ -package uk.ac.ox.cs.pagoda.rules.clauses; - -public class Conjunction { -} diff --git a/src/uk/ac/ox/cs/pagoda/rules/clauses/DLClause.java b/src/uk/ac/ox/cs/pagoda/rules/clauses/DLClause.java deleted file mode 100644 index 7394be0..0000000 --- a/src/uk/ac/ox/cs/pagoda/rules/clauses/DLClause.java +++ /dev/null @@ -1,12 +0,0 @@ -package uk.ac.ox.cs.pagoda.rules.clauses; - -public class DLClause extends Clause { - -// private DLClause(Atom[] headAtoms, Atom[] bodyAtoms) { -// super(headAtoms, bodyAtoms); -// } -// -// public static DLClause create(Atom[] headAtoms, Atom[] bodyAtoms) { -// return s_interningManager.intern(new DLClause(headAtoms, bodyAtoms)); -// } -} -- cgit v1.2.3