From 121acbc17bd67968e6955a9d1cab553b80c90037 Mon Sep 17 00:00:00 2001 From: stellamit Date: Tue, 12 Jun 2012 20:47:47 +0000 Subject: [PATCH] sameAs support in plugins --- .../reasoner/plugin/SimpleBridgingRule.java | 30 +++++++++++-------- .../plugin/SimplePropertyAndTypeRule.java | 23 +++++++++----- 2 files changed, 34 insertions(+), 19 deletions(-) diff --git a/src/org/vivoweb/reasoner/plugin/SimpleBridgingRule.java b/src/org/vivoweb/reasoner/plugin/SimpleBridgingRule.java index fbc4b9f4..9851b5b6 100644 --- a/src/org/vivoweb/reasoner/plugin/SimpleBridgingRule.java +++ b/src/org/vivoweb/reasoner/plugin/SimpleBridgingRule.java @@ -19,6 +19,7 @@ import com.hp.hpl.jena.rdf.model.Statement; import com.hp.hpl.jena.rdf.model.StmtIterator; import edu.cornell.mannlib.vitro.webapp.reasoner.ReasonerPlugin; +import edu.cornell.mannlib.vitro.webapp.reasoner.SimpleReasoner; /** * handles rules of the form @@ -34,6 +35,7 @@ public abstract class SimpleBridgingRule implements ReasonerPlugin { private Property assertedProp1; private Property assertedProp2; private String queryStr; + private SimpleReasoner simpleReasoner; protected SimpleBridgingRule(String assertedProp1, String assertedProp2, String inferredProp) { this.assertedProp1 = ResourceFactory.createProperty(assertedProp1); @@ -66,7 +68,7 @@ public abstract class SimpleBridgingRule implements ReasonerPlugin { StmtIterator sit = inf.listStatements(); while(sit.hasNext()) { Statement s = sit.nextStatement(); - tryToInfer(s, aboxAssertionsModel, aboxInferencesModel); + if (simpleReasoner != null) simpleReasoner.addInference(s,aboxInferencesModel); } } @@ -106,16 +108,6 @@ public abstract class SimpleBridgingRule implements ReasonerPlugin { } - private void tryToInfer(Statement s, - Model aboxAssertionsModel, - Model aboxInferencesModel) { - // this should be part of a superclass or some class that provides - // reasoning framework functions - if (!aboxAssertionsModel.contains(s) && !aboxInferencesModel.contains(s)) { - aboxInferencesModel.add(s); - } - } - public void removedABoxStatement(Statement stmt, Model aboxAssertionsModel, Model aboxInferencesModel, @@ -131,6 +123,13 @@ public abstract class SimpleBridgingRule implements ReasonerPlugin { Model m = ModelFactory.createDefaultModel(); m.add(stmt); Model union = ModelFactory.createUnion(m, aboxAssertionsModel); + Model inf = constructInferences(stmt, union); + StmtIterator sit = inf.listStatements(); + while(sit.hasNext()) { + Statement s = sit.nextStatement(); + if (simpleReasoner != null) simpleReasoner.removeInference(s,aboxInferencesModel); + } + aboxInferencesModel.remove(constructInferences(stmt, union)); } @@ -138,6 +137,13 @@ public abstract class SimpleBridgingRule implements ReasonerPlugin { return (assertedProp1.equals(stmt.getPredicate()) || assertedProp2.equals(stmt.getPredicate())); } - + + public void setSimpleReasoner(SimpleReasoner simpleReasoner) { + this.simpleReasoner = simpleReasoner; + } + + public SimpleReasoner getSimpleReasoner() { + return this.simpleReasoner; + } } diff --git a/src/org/vivoweb/reasoner/plugin/SimplePropertyAndTypeRule.java b/src/org/vivoweb/reasoner/plugin/SimplePropertyAndTypeRule.java index a5eb1d9a..96f7b4e0 100644 --- a/src/org/vivoweb/reasoner/plugin/SimplePropertyAndTypeRule.java +++ b/src/org/vivoweb/reasoner/plugin/SimplePropertyAndTypeRule.java @@ -14,6 +14,7 @@ import com.hp.hpl.jena.vocabulary.RDF; import com.hp.hpl.jena.vocabulary.RDFS; import edu.cornell.mannlib.vitro.webapp.reasoner.ReasonerPlugin; +import edu.cornell.mannlib.vitro.webapp.reasoner.SimpleReasoner; /** * handles rules of the form @@ -27,6 +28,7 @@ public abstract class SimplePropertyAndTypeRule implements ReasonerPlugin { private Property ASSERTED_PROP; private Resource TYPE; private Property INFERRED_PROP; + private SimpleReasoner simpleReasoner; protected SimplePropertyAndTypeRule(String assertedProp, String type, String inferredProp) { TYPE = ResourceFactory.createResource(type); @@ -82,8 +84,8 @@ public abstract class SimplePropertyAndTypeRule implements ReasonerPlugin { // this should be part of a superclass or some class that provides // reasoning framework functions Statement s = ResourceFactory.createStatement(subject, predicate, object); - if (!aboxAssertionsModel.contains(s) && !aboxInferencesModel.contains(s)) { - aboxInferencesModel.add(s); + if (simpleReasoner != null) { + simpleReasoner.addInference(s,aboxInferencesModel); } } @@ -97,8 +99,9 @@ public abstract class SimplePropertyAndTypeRule implements ReasonerPlugin { // stmt.getSubject(), RDF.type, BIBO_DOCUMENT) // || aboxInferencesModel.contains( // stmt.getSubject(), RDF.type, BIBO_DOCUMENT)) { - aboxInferencesModel.remove( - stmt.getSubject(), INFERRED_PROP, stmt.getObject()); + if (simpleReasoner != null) { + simpleReasoner.removeInference(ResourceFactory.createStatement(stmt.getSubject(), INFERRED_PROP, stmt.getObject()), aboxInferencesModel); + } // } } else if (isRelevantType(stmt, TBoxInferencesModel)) { if(!aboxInferencesModel.contains( @@ -107,8 +110,7 @@ public abstract class SimplePropertyAndTypeRule implements ReasonerPlugin { stmt.getSubject(), ASSERTED_PROP, (RDFNode) null); while (groundIt.hasNext()) { Statement groundStmt = groundIt.nextStatement(); - aboxInferencesModel.remove( - groundStmt.getSubject(), INFERRED_PROP, groundStmt.getObject()); + simpleReasoner.removeInference(ResourceFactory.createStatement(groundStmt.getSubject(), INFERRED_PROP, groundStmt.getObject()), aboxInferencesModel); } } } @@ -124,5 +126,12 @@ public abstract class SimplePropertyAndTypeRule implements ReasonerPlugin { private boolean isRelevantPredicate(Statement stmt) { return (ASSERTED_PROP.equals(stmt.getPredicate())); } - + + public void setSimpleReasoner(SimpleReasoner simpleReasoner) { + this.simpleReasoner = simpleReasoner; + } + + public SimpleReasoner getSimpleReasoner() { + return this.simpleReasoner; + } }