VIVO-778 Clean up ObjectPropertyStatementPattern

Rename to ReasonerStatementPattern, move to a new package and refactor.
This commit is contained in:
Jim Blake 2014-11-26 11:16:17 -05:00
parent adf04bd2be
commit 468a7214fe
6 changed files with 216 additions and 222 deletions

View file

@ -1,52 +0,0 @@
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
package edu.cornell.mannlib.vitro.webapp.dao.jena.pellet;
import com.hp.hpl.jena.rdf.model.Property;
import com.hp.hpl.jena.rdf.model.Resource;
public class ObjectPropertyStatementPattern {
private Resource subject = null;
private Property predicate = null;
private Resource object = null;
public ObjectPropertyStatementPattern(Resource subject, Property predicate, Resource object) {
this.subject = subject;
this.predicate = predicate;
this.object = object;
}
public Resource getSubject() {
return this.subject;
}
public Property getPredicate() {
return this.predicate;
}
public Resource getObject() {
return this.object;
}
public boolean matches(ObjectPropertyStatementPattern p2) {
boolean sMatch = false;
boolean pMatch = false;
boolean oMatch = false;
if (this.getSubject() == null || p2.getSubject()==null) {
sMatch = true; // (this.getSubject() == null && p2.getSubject() == null);
} else {
sMatch = (this.getSubject().equals(p2.getSubject()));
}
if (this.getPredicate() == null || p2.getPredicate()==null) {
pMatch = true; // (this.getPredicate() == null && p2.getPredicate() == null);
} else {
pMatch = (this.getPredicate().equals(p2.getPredicate()));
}
if (this.getObject() == null || p2.getObject()==null) {
oMatch = true ; // (this.getObject() == null && p2.getObject() == null);
} else {
oMatch = (this.getObject().equals(p2.getObject()));
}
return (sMatch && pMatch && oMatch);
}
}

View file

@ -1,26 +0,0 @@
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
package edu.cornell.mannlib.vitro.webapp.dao.jena.pellet;
import com.hp.hpl.jena.rdf.model.Property;
import com.hp.hpl.jena.rdf.model.Resource;
public class ObjectPropertyStatementPatternFactory {
//private static Set<ObjectPropertyStatementPattern> patternSet = new HashSet<ObjectPropertyStatementPattern>();
public static ObjectPropertyStatementPattern getPattern(Resource subject, Property predicate, Resource object) {
//for (Iterator<ObjectPropertyStatementPattern> i = patternSet.iterator(); i.hasNext(); ) {
// ObjectPropertyStatementPattern pat = i.next();
// if ( ( (pat.getSubject()==null && subject==null) || (pat.getSubject().equals(subject)) )
// && ( (pat.getPredicate()==null && predicate==null) || (pat.getPredicate().equals(predicate)) )
// && ( (pat.getObject()==null && object==null) || (pat.getObject().equals(object)) ) ) {
// return pat;
// }
//}
ObjectPropertyStatementPattern newPat = new ObjectPropertyStatementPattern(subject,predicate,object);
//patternSet.add(newPat);
return newPat;
}
}

View file

@ -37,6 +37,8 @@ import com.hp.hpl.jena.vocabulary.RDFS;
import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary; import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary;
import edu.cornell.mannlib.vitro.webapp.dao.jena.event.EditEvent; import edu.cornell.mannlib.vitro.webapp.dao.jena.event.EditEvent;
import edu.cornell.mannlib.vitro.webapp.tboxreasoner.ReasonerConfiguration;
import edu.cornell.mannlib.vitro.webapp.tboxreasoner.ReasonerStatementPattern;
public class PelletListener implements ModelChangedListener { public class PelletListener implements ModelChangedListener {
@ -50,11 +52,11 @@ public class PelletListener implements ModelChangedListener {
private OntModel mainModel; private OntModel mainModel;
private Model inferenceModel; private Model inferenceModel;
private ReasonerConfiguration reasonerConfiguration; private ReasonerConfiguration reasonerConfiguration;
private Set<ObjectPropertyStatementPattern> inferenceDrivingPatternAllowSet; private Set<ReasonerStatementPattern> inferenceDrivingPatternAllowSet;
private Set<ObjectPropertyStatementPattern> inferenceDrivingPatternDenySet; private Set<ReasonerStatementPattern> inferenceDrivingPatternDenySet;
private Set<ObjectPropertyStatementPattern> inferenceReceivingPatternAllowSet; private Set<ReasonerStatementPattern> inferenceReceivingPatternAllowSet;
private Map<Property,List<ObjectPropertyStatementPattern>> inferenceDrivingPatternMap; private Map<Property,List<ReasonerStatementPattern>> inferenceDrivingPatternMap;
private Model additionModel; private Model additionModel;
private Model removalModel; private Model removalModel;
@ -142,13 +144,13 @@ public class PelletListener implements ModelChangedListener {
this.inferenceReceivingPatternAllowSet = reasonerConfiguration.getInferenceReceivingPatternAllowSet(); this.inferenceReceivingPatternAllowSet = reasonerConfiguration.getInferenceReceivingPatternAllowSet();
if (this.inferenceDrivingPatternAllowSet != null) { if (this.inferenceDrivingPatternAllowSet != null) {
this.inferenceDrivingPatternMap = new HashMap<Property,List<ObjectPropertyStatementPattern>>(); this.inferenceDrivingPatternMap = new HashMap<>();
for (Iterator<ObjectPropertyStatementPattern> i = inferenceDrivingPatternAllowSet.iterator(); i.hasNext();) { for (Iterator<ReasonerStatementPattern> i = inferenceDrivingPatternAllowSet.iterator(); i.hasNext();) {
ObjectPropertyStatementPattern pat = i.next(); ReasonerStatementPattern pat = i.next();
Property p = pat.getPredicate(); Property p = pat.getPredicate();
List<ObjectPropertyStatementPattern> patList = inferenceDrivingPatternMap.get(p); List<ReasonerStatementPattern> patList = inferenceDrivingPatternMap.get(p);
if (patList == null) { if (patList == null) {
patList = new LinkedList<ObjectPropertyStatementPattern>(); patList = new LinkedList<>();
patList.add(pat); patList.add(pat);
inferenceDrivingPatternMap.put(p, patList); inferenceDrivingPatternMap.put(p, patList);
} else { } else {
@ -163,7 +165,7 @@ public class PelletListener implements ModelChangedListener {
this.deletedDataProperties = ModelFactory.createDefaultModel(); this.deletedDataProperties = ModelFactory.createDefaultModel();
this.mainModel.enterCriticalSection(Lock.READ); this.mainModel.enterCriticalSection(Lock.READ);
try { try {
for (ObjectPropertyStatementPattern pat : this.inferenceDrivingPatternAllowSet) { for (ReasonerStatementPattern pat : this.inferenceDrivingPatternAllowSet) {
addedStatements(mainModel.listStatements((Resource) null, pat.getPredicate(), (RDFNode) null)); addedStatements(mainModel.listStatements((Resource) null, pat.getPredicate(), (RDFNode) null));
} }
if (!skipReasoningUponInitialization) { if (!skipReasoningUponInitialization) {
@ -198,12 +200,12 @@ public class PelletListener implements ModelChangedListener {
inferenceRounds++; inferenceRounds++;
log.info("Getting new inferences"); log.info("Getting new inferences");
long startTime = System.currentTimeMillis(); long startTime = System.currentTimeMillis();
LinkedList<ObjectPropertyStatementPattern> irpl = new LinkedList<ObjectPropertyStatementPattern>(); LinkedList<ReasonerStatementPattern> irpl = new LinkedList<>();
if (inferenceReceivingPatternAllowSet != null) { if (inferenceReceivingPatternAllowSet != null) {
irpl.addAll(inferenceReceivingPatternAllowSet); irpl.addAll(inferenceReceivingPatternAllowSet);
} else { } else {
irpl.add(ObjectPropertyStatementPatternFactory.getPattern(null,null,null)); irpl.add(ReasonerStatementPattern.ANY_OBJECT_PROPERTY);
} }
if (reasonerConfiguration.getQueryForAllObjectProperties()) { if (reasonerConfiguration.getQueryForAllObjectProperties()) {
@ -214,7 +216,7 @@ public class PelletListener implements ModelChangedListener {
for (Iterator objPropIt = closeIt; objPropIt.hasNext();) { for (Iterator objPropIt = closeIt; objPropIt.hasNext();) {
ObjectProperty objProp = (ObjectProperty) objPropIt.next(); ObjectProperty objProp = (ObjectProperty) objPropIt.next();
if ( !("http://www.w3.org/2002/07/owl#".equals(objProp.getNameSpace())) ) { if ( !("http://www.w3.org/2002/07/owl#".equals(objProp.getNameSpace())) ) {
irpl.add(ObjectPropertyStatementPatternFactory.getPattern(null,objProp,null)); irpl.add(ReasonerStatementPattern.objectPattern(objProp));
} }
} }
} finally { } finally {
@ -229,7 +231,7 @@ public class PelletListener implements ModelChangedListener {
try { try {
while (sit.hasNext()) { while (sit.hasNext()) {
Resource subj = (Resource) sit.next(); Resource subj = (Resource) sit.next();
irpl.add(ObjectPropertyStatementPatternFactory.getPattern(null,ResourceFactory.createProperty(subj.getURI()),null)); irpl.add(ReasonerStatementPattern.objectPattern(ResourceFactory.createProperty(subj.getURI())));
} }
} finally { } finally {
sit.close(); sit.close();
@ -249,7 +251,7 @@ public class PelletListener implements ModelChangedListener {
DatatypeProperty dataProp = (DatatypeProperty) dataPropIt.next(); DatatypeProperty dataProp = (DatatypeProperty) dataPropIt.next();
if ( !("http://www.w3.org/2002/07/owl#".equals(dataProp.getNameSpace())) ) { if ( !("http://www.w3.org/2002/07/owl#".equals(dataProp.getNameSpace())) ) {
// TODO: THIS WILL WORK, BUT NEED TO GENERALIZE THE PATTERN CLASSES // TODO: THIS WILL WORK, BUT NEED TO GENERALIZE THE PATTERN CLASSES
irpl.add(ObjectPropertyStatementPatternFactory.getPattern(null,dataProp,null)); irpl.add(ReasonerStatementPattern.objectPattern(dataProp));
} }
} }
} finally { } finally {
@ -264,7 +266,7 @@ public class PelletListener implements ModelChangedListener {
try { try {
while (sit.hasNext()) { while (sit.hasNext()) {
Resource subj = (Resource) sit.next(); Resource subj = (Resource) sit.next();
irpl.add(ObjectPropertyStatementPatternFactory.getPattern(null,ResourceFactory.createProperty(subj.getURI()),null)); irpl.add(ReasonerStatementPattern.objectPattern(ResourceFactory.createProperty(subj.getURI())));
} }
} finally { } finally {
sit.close(); sit.close();
@ -294,68 +296,55 @@ public class PelletListener implements ModelChangedListener {
pelletModel.leaveCriticalSection(); pelletModel.leaveCriticalSection();
} }
for (Iterator<ObjectPropertyStatementPattern> patIt = irpl.iterator(); patIt.hasNext(); ) { for (Iterator<ReasonerStatementPattern> patIt = irpl.iterator(); patIt.hasNext(); ) {
ObjectPropertyStatementPattern pat = patIt.next(); ReasonerStatementPattern pat = patIt.next();
log.debug("Querying for "+pat);
if (log.isDebugEnabled()) {
String subjStr = (pat.getSubject() != null) ? pat.getSubject().getURI() : "*";
String predStr = (pat.getPredicate() != null) ? pat.getPredicate().getURI() : "*";
String objStr = (pat.getObject() != null) ? pat.getObject().getURI() : "*";
log.debug("Querying for "+subjStr+" : "+predStr+" : "+objStr);
}
Model tempModel = ModelFactory.createDefaultModel(); Model tempModel = ModelFactory.createDefaultModel();
pelletModel.enterCriticalSection(Lock.READ); pelletModel.enterCriticalSection(Lock.READ);
try { try {
for(Statement stmt : pat.matchStatementsFromModel(pelletModel)) {
ClosableIterator ci = pelletModel.listStatements(pat.getSubject(),pat.getPredicate(),pat.getObject());
try { boolean reject = false;
for (ClosableIterator i=ci; i.hasNext();) {
Statement stmt = (Statement) i.next(); // this next part is only needed if we're using Jena's OWL reasoner instead of actually using Pellet
try {
boolean reject = false; if ( ( ((Resource)stmt.getObject()).equals(RDFS.Resource) ) ) {
reject = true;
// this next part is only needed if we're using Jena's OWL reasoner instead of actually using Pellet } else if ( ( stmt.getSubject().equals(OWL.Nothing) ) ) {
try { reject = true;
if ( ( ((Resource)stmt.getObject()).equals(RDFS.Resource) ) ) { } else if ( ( stmt.getObject().equals(OWL.Nothing) ) ) {
reject = true; reject = true;
} else if ( ( stmt.getSubject().equals(OWL.Nothing) ) ) { }
reject = true; } catch (Exception e) {}
} else if ( ( stmt.getObject().equals(OWL.Nothing) ) ) {
reject = true; if (!reject) {
} tempModel.add(stmt);
} catch (Exception e) {}
boolean fullModelContainsStatement = false;
if (!reject) { fullModel.enterCriticalSection(Lock.READ);
tempModel.add(stmt); try {
fullModelContainsStatement = fullModel.contains(stmt);
boolean fullModelContainsStatement = false; } finally {
fullModel.enterCriticalSection(Lock.READ); fullModel.leaveCriticalSection();
try { }
fullModelContainsStatement = fullModel.contains(stmt);
} finally { if (!fullModelContainsStatement) {
fullModel.leaveCriticalSection(); // in theory we should be able to lock only the inference model, but I'm not sure yet if Jena propagates the locking upward
} fullModel.enterCriticalSection(Lock.WRITE);
closePipe();
if (!fullModelContainsStatement) { try {
// in theory we should be able to lock only the inference model, but I'm not sure yet if Jena propagates the locking upward inferenceModel.add(stmt);
fullModel.enterCriticalSection(Lock.WRITE); addCount++;
closePipe(); } finally {
try { openPipe();
inferenceModel.add(stmt); fullModel.leaveCriticalSection();
addCount++; }
} finally { }
openPipe();
fullModel.leaveCriticalSection(); }
} }
}
}
}
} finally {
ci.close();
}
} finally { } finally {
pelletModel.leaveCriticalSection(); pelletModel.leaveCriticalSection();
} }
@ -364,22 +353,11 @@ public class PelletListener implements ModelChangedListener {
try { try {
Queue<Statement> localRemovalQueue = new LinkedList<Statement>(); Queue<Statement> localRemovalQueue = new LinkedList<Statement>();
inferenceModel.enterCriticalSection(Lock.READ); for (Statement stmt : pat.matchStatementsFromModel(inferenceModel)) {
try { if (!tempModel.contains(stmt)) {
ClosableIterator ci = inferenceModel.listStatements(pat.getSubject(),pat.getPredicate(),pat.getObject()); localRemovalQueue.add(stmt);
try { }
for (ClosableIterator i=ci; i.hasNext();) { }
Statement stmt = (Statement) i.next();
if (!tempModel.contains(stmt)) {
localRemovalQueue.add(stmt);
}
}
} finally {
ci.close();
}
} finally {
inferenceModel.leaveCriticalSection();
}
for (Iterator<Statement> i = localRemovalQueue.iterator(); i.hasNext(); ) { for (Iterator<Statement> i = localRemovalQueue.iterator(); i.hasNext(); ) {
fullModel.enterCriticalSection(Lock.WRITE); fullModel.enterCriticalSection(Lock.WRITE);
closePipe(); closePipe();
@ -448,10 +426,10 @@ public class PelletListener implements ModelChangedListener {
if (pipeOpen) { if (pipeOpen) {
sendToPellet = false; sendToPellet = false;
boolean denied = false; boolean denied = false;
ObjectPropertyStatementPattern stPat = ObjectPropertyStatementPatternFactory.getPattern(stmt.getSubject(), stmt.getPredicate(), (Resource) stmt.getObject()); ReasonerStatementPattern stPat = ReasonerStatementPattern.objectPattern(stmt);
if (inferenceDrivingPatternDenySet != null) { if (inferenceDrivingPatternDenySet != null) {
for (Iterator<ObjectPropertyStatementPattern> i = inferenceDrivingPatternDenySet.iterator(); i.hasNext(); ){ for (Iterator<ReasonerStatementPattern> i = inferenceDrivingPatternDenySet.iterator(); i.hasNext(); ){
ObjectPropertyStatementPattern pat = i.next(); ReasonerStatementPattern pat = i.next();
if (pat.matches(stPat)) { if (pat.matches(stPat)) {
denied = true; denied = true;
break; break;
@ -463,10 +441,10 @@ public class PelletListener implements ModelChangedListener {
sendToPellet = true; sendToPellet = true;
} else { } else {
// TODO: O(1) implementation of this // TODO: O(1) implementation of this
List<ObjectPropertyStatementPattern> patList = this.inferenceDrivingPatternMap.get(stmt.getPredicate()); List<ReasonerStatementPattern> patList = this.inferenceDrivingPatternMap.get(stmt.getPredicate());
if (patList != null) { if (patList != null) {
for (Iterator<ObjectPropertyStatementPattern> i = patList.iterator(); i.hasNext(); ){ for (Iterator<ReasonerStatementPattern> i = patList.iterator(); i.hasNext(); ){
ObjectPropertyStatementPattern pat = i.next(); ReasonerStatementPattern pat = i.next();
if (pat.matches(stPat)) { if (pat.matches(stPat)) {
sendToPellet = true; sendToPellet = true;
break; break;
@ -526,10 +504,10 @@ public class PelletListener implements ModelChangedListener {
} }
removeFromPellet = false; removeFromPellet = false;
boolean denied = false; boolean denied = false;
ObjectPropertyStatementPattern stPat = ObjectPropertyStatementPatternFactory.getPattern(stmt.getSubject(), stmt.getPredicate(), (Resource) stmt.getObject()); ReasonerStatementPattern stPat = ReasonerStatementPattern.objectPattern(stmt);
if (inferenceDrivingPatternDenySet != null) { if (inferenceDrivingPatternDenySet != null) {
for (Iterator<ObjectPropertyStatementPattern> i = inferenceDrivingPatternDenySet.iterator(); i.hasNext(); ){ for (Iterator<ReasonerStatementPattern> i = inferenceDrivingPatternDenySet.iterator(); i.hasNext(); ){
ObjectPropertyStatementPattern pat = i.next(); ReasonerStatementPattern pat = i.next();
if (pat.matches(stPat)) { if (pat.matches(stPat)) {
denied = true; denied = true;
break; break;
@ -541,10 +519,10 @@ public class PelletListener implements ModelChangedListener {
removeFromPellet = true; removeFromPellet = true;
} else { } else {
// TODO: O(1) implementation of this // TODO: O(1) implementation of this
List<ObjectPropertyStatementPattern> patList = this.inferenceDrivingPatternMap.get(stmt.getPredicate()); List<ReasonerStatementPattern> patList = this.inferenceDrivingPatternMap.get(stmt.getPredicate());
if (patList != null) { if (patList != null) {
for (Iterator<ObjectPropertyStatementPattern> i = patList.iterator(); i.hasNext(); ){ for (Iterator<ReasonerStatementPattern> i = patList.iterator(); i.hasNext(); ){
ObjectPropertyStatementPattern pat = i.next(); ReasonerStatementPattern pat = i.next();
if (pat.matches(stPat)) { if (pat.matches(stPat)) {
removeFromPellet = true; removeFromPellet = true;
break; break;

View file

@ -26,7 +26,6 @@ import com.hp.hpl.jena.vocabulary.OWL;
import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory; import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory;
import edu.cornell.mannlib.vitro.webapp.dao.jena.WebappDaoFactoryJena; import edu.cornell.mannlib.vitro.webapp.dao.jena.WebappDaoFactoryJena;
import edu.cornell.mannlib.vitro.webapp.dao.jena.pellet.PelletListener; import edu.cornell.mannlib.vitro.webapp.dao.jena.pellet.PelletListener;
import edu.cornell.mannlib.vitro.webapp.dao.jena.pellet.ReasonerConfiguration;
import edu.cornell.mannlib.vitro.webapp.modelaccess.ModelAccess; import edu.cornell.mannlib.vitro.webapp.modelaccess.ModelAccess;
import edu.cornell.mannlib.vitro.webapp.modelaccess.ModelNames; import edu.cornell.mannlib.vitro.webapp.modelaccess.ModelNames;
import edu.cornell.mannlib.vitro.webapp.rdfservice.RDFService; import edu.cornell.mannlib.vitro.webapp.rdfservice.RDFService;
@ -34,6 +33,7 @@ import edu.cornell.mannlib.vitro.webapp.reasoner.ReasonerPlugin;
import edu.cornell.mannlib.vitro.webapp.reasoner.SimpleReasoner; import edu.cornell.mannlib.vitro.webapp.reasoner.SimpleReasoner;
import edu.cornell.mannlib.vitro.webapp.reasoner.SimpleReasonerTBoxListener; import edu.cornell.mannlib.vitro.webapp.reasoner.SimpleReasonerTBoxListener;
import edu.cornell.mannlib.vitro.webapp.startup.StartupStatus; import edu.cornell.mannlib.vitro.webapp.startup.StartupStatus;
import edu.cornell.mannlib.vitro.webapp.tboxreasoner.ReasonerConfiguration;
import edu.cornell.mannlib.vitro.webapp.utils.threads.VitroBackgroundThread; import edu.cornell.mannlib.vitro.webapp.utils.threads.VitroBackgroundThread;
public class SimpleReasonerSetup implements ServletContextListener { public class SimpleReasonerSetup implements ServletContextListener {

View file

@ -1,22 +1,22 @@
/* $This file is distributed under the terms of the license in /doc/license.txt$ */ /* $This file is distributed under the terms of the license in /doc/license.txt$ */
package edu.cornell.mannlib.vitro.webapp.dao.jena.pellet; package edu.cornell.mannlib.vitro.webapp.tboxreasoner;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set; import java.util.Set;
import org.mindswap.pellet.jena.PelletReasonerFactory;
import com.hp.hpl.jena.ontology.OntModelSpec; import com.hp.hpl.jena.ontology.OntModelSpec;
import com.hp.hpl.jena.vocabulary.OWL; import com.hp.hpl.jena.vocabulary.OWL;
import com.hp.hpl.jena.vocabulary.RDF; import com.hp.hpl.jena.vocabulary.RDF;
import com.hp.hpl.jena.vocabulary.RDFS; import com.hp.hpl.jena.vocabulary.RDFS;
import org.mindswap.pellet.jena.PelletReasonerFactory;
public class ReasonerConfiguration { public class ReasonerConfiguration {
public Set<ObjectPropertyStatementPattern> inferenceDrivingPatternAllowSet; public Set<ReasonerStatementPattern> inferenceDrivingPatternAllowSet;
public Set<ObjectPropertyStatementPattern> inferenceDrivingPatternDenySet; public Set<ReasonerStatementPattern> inferenceDrivingPatternDenySet;
public Set<ObjectPropertyStatementPattern> inferenceReceivingPatternAllowSet; public Set<ReasonerStatementPattern> inferenceReceivingPatternAllowSet;
private boolean queryForAllObjectProperties = false; private boolean queryForAllObjectProperties = false;
private boolean incrementalReasoningEnabled = true; private boolean incrementalReasoningEnabled = true;
@ -58,34 +58,34 @@ public class ReasonerConfiguration {
//ask the reasoner only to classify, realize, and infer disjointWith statements (based on a somewhat incomplete information) //ask the reasoner only to classify, realize, and infer disjointWith statements (based on a somewhat incomplete information)
DEFAULT = new ReasonerConfiguration(); DEFAULT = new ReasonerConfiguration();
HashSet<ObjectPropertyStatementPattern> defaultInferenceDrivingPatternAllowSet = new HashSet<ObjectPropertyStatementPattern>(); HashSet<ReasonerStatementPattern> defaultInferenceDrivingPatternAllowSet = new HashSet<>();
defaultInferenceDrivingPatternAllowSet.add(ObjectPropertyStatementPatternFactory.getPattern(null,RDF.type,null)); defaultInferenceDrivingPatternAllowSet.add(ReasonerStatementPattern.objectPattern(RDF.type));
defaultInferenceDrivingPatternAllowSet.add(ObjectPropertyStatementPatternFactory.getPattern(null,RDFS.subClassOf,null)); defaultInferenceDrivingPatternAllowSet.add(ReasonerStatementPattern.objectPattern(RDFS.subClassOf));
defaultInferenceDrivingPatternAllowSet.add(ObjectPropertyStatementPatternFactory.getPattern(null,RDFS.subPropertyOf,null)); defaultInferenceDrivingPatternAllowSet.add(ReasonerStatementPattern.objectPattern(RDFS.subPropertyOf));
defaultInferenceDrivingPatternAllowSet.add(ObjectPropertyStatementPatternFactory.getPattern(null,OWL.equivalentClass,null)); defaultInferenceDrivingPatternAllowSet.add(ReasonerStatementPattern.objectPattern(OWL.equivalentClass));
defaultInferenceDrivingPatternAllowSet.add(ObjectPropertyStatementPatternFactory.getPattern(null,OWL.unionOf,null)); defaultInferenceDrivingPatternAllowSet.add(ReasonerStatementPattern.objectPattern(OWL.unionOf));
defaultInferenceDrivingPatternAllowSet.add(ObjectPropertyStatementPatternFactory.getPattern(null,OWL.intersectionOf,null)); defaultInferenceDrivingPatternAllowSet.add(ReasonerStatementPattern.objectPattern(OWL.intersectionOf));
defaultInferenceDrivingPatternAllowSet.add(ObjectPropertyStatementPatternFactory.getPattern(null,OWL.complementOf,null)); defaultInferenceDrivingPatternAllowSet.add(ReasonerStatementPattern.objectPattern(OWL.complementOf));
defaultInferenceDrivingPatternAllowSet.add(ObjectPropertyStatementPatternFactory.getPattern(null,OWL.oneOf,null)); defaultInferenceDrivingPatternAllowSet.add(ReasonerStatementPattern.objectPattern(OWL.oneOf));
defaultInferenceDrivingPatternAllowSet.add(ObjectPropertyStatementPatternFactory.getPattern(null,OWL.onProperty,null)); defaultInferenceDrivingPatternAllowSet.add(ReasonerStatementPattern.objectPattern(OWL.onProperty));
defaultInferenceDrivingPatternAllowSet.add(ObjectPropertyStatementPatternFactory.getPattern(null,OWL.someValuesFrom,null)); defaultInferenceDrivingPatternAllowSet.add(ReasonerStatementPattern.objectPattern(OWL.someValuesFrom));
defaultInferenceDrivingPatternAllowSet.add(ObjectPropertyStatementPatternFactory.getPattern(null,OWL.allValuesFrom,null)); defaultInferenceDrivingPatternAllowSet.add(ReasonerStatementPattern.objectPattern(OWL.allValuesFrom));
defaultInferenceDrivingPatternAllowSet.add(ObjectPropertyStatementPatternFactory.getPattern(null,OWL.hasValue,null)); defaultInferenceDrivingPatternAllowSet.add(ReasonerStatementPattern.objectPattern(OWL.hasValue));
defaultInferenceDrivingPatternAllowSet.add(ObjectPropertyStatementPatternFactory.getPattern(null,OWL.minCardinality,null)); defaultInferenceDrivingPatternAllowSet.add(ReasonerStatementPattern.objectPattern(OWL.minCardinality));
defaultInferenceDrivingPatternAllowSet.add(ObjectPropertyStatementPatternFactory.getPattern(null,OWL.maxCardinality,null)); defaultInferenceDrivingPatternAllowSet.add(ReasonerStatementPattern.objectPattern(OWL.maxCardinality));
defaultInferenceDrivingPatternAllowSet.add(ObjectPropertyStatementPatternFactory.getPattern(null,OWL.cardinality,null)); defaultInferenceDrivingPatternAllowSet.add(ReasonerStatementPattern.objectPattern(OWL.cardinality));
defaultInferenceDrivingPatternAllowSet.add(ObjectPropertyStatementPatternFactory.getPattern(null,RDF.first,null)); defaultInferenceDrivingPatternAllowSet.add(ReasonerStatementPattern.objectPattern(RDF.first));
defaultInferenceDrivingPatternAllowSet.add(ObjectPropertyStatementPatternFactory.getPattern(null,RDF.rest,null)); defaultInferenceDrivingPatternAllowSet.add(ReasonerStatementPattern.objectPattern(RDF.rest));
defaultInferenceDrivingPatternAllowSet.add(ObjectPropertyStatementPatternFactory.getPattern(null,OWL.disjointWith,null)); defaultInferenceDrivingPatternAllowSet.add(ReasonerStatementPattern.objectPattern(OWL.disjointWith));
defaultInferenceDrivingPatternAllowSet.add(ObjectPropertyStatementPatternFactory.getPattern(null,OWL.inverseOf,null)); defaultInferenceDrivingPatternAllowSet.add(ReasonerStatementPattern.objectPattern(OWL.inverseOf));
DEFAULT.setInferenceDrivingPatternAllowSet(defaultInferenceDrivingPatternAllowSet); DEFAULT.setInferenceDrivingPatternAllowSet(defaultInferenceDrivingPatternAllowSet);
Set<ObjectPropertyStatementPattern> defaultInferenceReceivingPatternAllowSet = new HashSet<ObjectPropertyStatementPattern>(); Set<ReasonerStatementPattern> defaultInferenceReceivingPatternAllowSet = new HashSet<>();
defaultInferenceReceivingPatternAllowSet.add(ObjectPropertyStatementPatternFactory.getPattern(null,RDF.type,null)); defaultInferenceReceivingPatternAllowSet.add(ReasonerStatementPattern.objectPattern(RDF.type));
defaultInferenceReceivingPatternAllowSet.add(ObjectPropertyStatementPatternFactory.getPattern(null,RDFS.subClassOf,null)); defaultInferenceReceivingPatternAllowSet.add(ReasonerStatementPattern.objectPattern(RDFS.subClassOf));
defaultInferenceReceivingPatternAllowSet.add(ObjectPropertyStatementPatternFactory.getPattern(null,RDFS.subPropertyOf,null)); defaultInferenceReceivingPatternAllowSet.add(ReasonerStatementPattern.objectPattern(RDFS.subPropertyOf));
defaultInferenceReceivingPatternAllowSet.add(ObjectPropertyStatementPatternFactory.getPattern(null,OWL.equivalentClass,null)); defaultInferenceReceivingPatternAllowSet.add(ReasonerStatementPattern.objectPattern(OWL.equivalentClass));
defaultInferenceReceivingPatternAllowSet.add(ObjectPropertyStatementPatternFactory.getPattern(null,OWL.disjointWith,null)); defaultInferenceReceivingPatternAllowSet.add(ReasonerStatementPattern.objectPattern(OWL.disjointWith));
defaultInferenceReceivingPatternAllowSet.add(ObjectPropertyStatementPatternFactory.getPattern(null,OWL.inverseOf,null)); defaultInferenceReceivingPatternAllowSet.add(ReasonerStatementPattern.objectPattern(OWL.inverseOf));
DEFAULT.setInferenceReceivingPatternAllowSet(defaultInferenceReceivingPatternAllowSet); DEFAULT.setInferenceReceivingPatternAllowSet(defaultInferenceReceivingPatternAllowSet);
DEFAULT.setQueryForAllObjectProperties(false); DEFAULT.setQueryForAllObjectProperties(false);
@ -107,36 +107,36 @@ public class ReasonerConfiguration {
COMPLETE.setQueryForAllObjectProperties(true); COMPLETE.setQueryForAllObjectProperties(true);
COMPLETE.setReasonOnAllDatatypePropertyStatements(true); COMPLETE.setReasonOnAllDatatypePropertyStatements(true);
COMPLETE.setQueryForAllDatatypeProperties(true); COMPLETE.setQueryForAllDatatypeProperties(true);
Set<ObjectPropertyStatementPattern> completeInferenceReceivingPatternAllowSet = new HashSet<ObjectPropertyStatementPattern>(); Set<ReasonerStatementPattern> completeInferenceReceivingPatternAllowSet = new HashSet<>();
completeInferenceReceivingPatternAllowSet.addAll(defaultInferenceReceivingPatternAllowSet); completeInferenceReceivingPatternAllowSet.addAll(defaultInferenceReceivingPatternAllowSet);
completeInferenceReceivingPatternAllowSet.add(ObjectPropertyStatementPatternFactory.getPattern(null, OWL.sameAs, null)); completeInferenceReceivingPatternAllowSet.add(ReasonerStatementPattern.objectPattern(OWL.sameAs));
// getting NPEs inside Pellet with differentFrom on 2.0.0-rc7 // getting NPEs inside Pellet with differentFrom on 2.0.0-rc7
//completeInferenceReceivingPatternAllowSet.add(ObjectPropertyStatementPatternFactory.getPattern(null, OWL.differentFrom, null)); //completeInferenceReceivingPatternAllowSet.add(ReasonerStatementPattern.objectPattern( OWL.differentFrom, null));
COMPLETE.setInferenceReceivingPatternAllowSet(completeInferenceReceivingPatternAllowSet); COMPLETE.setInferenceReceivingPatternAllowSet(completeInferenceReceivingPatternAllowSet);
} }
public Set<ObjectPropertyStatementPattern> getInferenceDrivingPatternAllowSet() { public Set<ReasonerStatementPattern> getInferenceDrivingPatternAllowSet() {
return this.inferenceDrivingPatternAllowSet; return this.inferenceDrivingPatternAllowSet;
} }
public void setInferenceDrivingPatternAllowSet(Set<ObjectPropertyStatementPattern> patternSet) { public void setInferenceDrivingPatternAllowSet(Set<ReasonerStatementPattern> patternSet) {
this.inferenceDrivingPatternAllowSet = patternSet; this.inferenceDrivingPatternAllowSet = patternSet;
} }
public Set<ObjectPropertyStatementPattern> getInferenceDrivingPatternDenySet() { public Set<ReasonerStatementPattern> getInferenceDrivingPatternDenySet() {
return this.inferenceDrivingPatternDenySet; return this.inferenceDrivingPatternDenySet;
} }
public void setInferenceDrivingPatternDenySet(Set<ObjectPropertyStatementPattern> patternSet) { public void setInferenceDrivingPatternDenySet(Set<ReasonerStatementPattern> patternSet) {
this.inferenceDrivingPatternDenySet = patternSet; this.inferenceDrivingPatternDenySet = patternSet;
} }
public Set<ObjectPropertyStatementPattern> getInferenceReceivingPatternAllowSet() { public Set<ReasonerStatementPattern> getInferenceReceivingPatternAllowSet() {
return this.inferenceReceivingPatternAllowSet; return this.inferenceReceivingPatternAllowSet;
} }
public void setInferenceReceivingPatternAllowSet(Set<ObjectPropertyStatementPattern> patternSet) { public void setInferenceReceivingPatternAllowSet(Set<ReasonerStatementPattern> patternSet) {
this.inferenceReceivingPatternAllowSet = patternSet; this.inferenceReceivingPatternAllowSet = patternSet;
} }

View file

@ -0,0 +1,94 @@
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
package edu.cornell.mannlib.vitro.webapp.tboxreasoner;
import java.util.List;
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.Property;
import com.hp.hpl.jena.rdf.model.Resource;
import com.hp.hpl.jena.rdf.model.Statement;
import com.hp.hpl.jena.shared.Lock;
/**
* For now, this only models Object Properties.
*
* It should be easy to add Data Property patterns by making this abstract and
* creating two concrete subclasses.
*/
public class ReasonerStatementPattern {
public static final ReasonerStatementPattern ANY_OBJECT_PROPERTY = new ReasonerStatementPattern(
null, null, null);
public static ReasonerStatementPattern objectPattern(Property predicate) {
return new ReasonerStatementPattern(null, predicate, null);
}
public static ReasonerStatementPattern objectPattern(Statement stmt) {
if (!stmt.getObject().isResource()) {
throw new IllegalArgumentException(
"Object of stmt must be a resource.");
}
return new ReasonerStatementPattern(stmt.getSubject(),
stmt.getPredicate(), stmt.getObject().asResource());
}
/**
* Any or all of these may be null, which acts as a wild card.
*/
private final Resource subject;
private final Property predicate;
private final Resource object;
private final String toString;
private ReasonerStatementPattern(Resource subject, Property predicate,
Resource object) {
this.subject = subject;
this.predicate = predicate;
this.object = object;
this.toString = buildToString();
}
public Property getPredicate() {
return predicate;
}
/**
* All fields must match, either by being equal, or by being a wild card.
*/
public boolean matches(ReasonerStatementPattern that) {
boolean sMatch = this.subject == null || that.subject == null
|| this.subject.equals(that.subject);
boolean pMatch = this.predicate == null || that.predicate == null
|| this.predicate.equals(that.predicate);
boolean oMatch = this.object == null || that.object == null
|| this.object.equals(that.object);
return sMatch && pMatch && oMatch;
}
/**
* Get a list of statements from this model that match this pattern.
*/
public List<Statement> matchStatementsFromModel(Model m) {
m.enterCriticalSection(Lock.READ);
try {
return m.listStatements(subject, predicate, object).toList();
} finally {
m.leaveCriticalSection();
}
}
public String buildToString() {
return "ReasonerStatementPattern[subject="
+ (subject == null ? "*" : subject.toString()) + ", predicate="
+ (predicate == null ? "*" : predicate.toString())
+ ", object=" + (object == null ? "*" : object.toString())
+ "]";
}
@Override
public String toString() {
return toString;
}
}