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 10e081c378
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.jena.event.EditEvent;
import edu.cornell.mannlib.vitro.webapp.tboxreasoner.ReasonerConfiguration;
import edu.cornell.mannlib.vitro.webapp.tboxreasoner.ReasonerStatementPattern;
public class PelletListener implements ModelChangedListener {
@ -50,11 +52,11 @@ public class PelletListener implements ModelChangedListener {
private OntModel mainModel;
private Model inferenceModel;
private ReasonerConfiguration reasonerConfiguration;
private Set<ObjectPropertyStatementPattern> inferenceDrivingPatternAllowSet;
private Set<ObjectPropertyStatementPattern> inferenceDrivingPatternDenySet;
private Set<ObjectPropertyStatementPattern> inferenceReceivingPatternAllowSet;
private Set<ReasonerStatementPattern> inferenceDrivingPatternAllowSet;
private Set<ReasonerStatementPattern> inferenceDrivingPatternDenySet;
private Set<ReasonerStatementPattern> inferenceReceivingPatternAllowSet;
private Map<Property,List<ObjectPropertyStatementPattern>> inferenceDrivingPatternMap;
private Map<Property,List<ReasonerStatementPattern>> inferenceDrivingPatternMap;
private Model additionModel;
private Model removalModel;
@ -142,13 +144,13 @@ public class PelletListener implements ModelChangedListener {
this.inferenceReceivingPatternAllowSet = reasonerConfiguration.getInferenceReceivingPatternAllowSet();
if (this.inferenceDrivingPatternAllowSet != null) {
this.inferenceDrivingPatternMap = new HashMap<Property,List<ObjectPropertyStatementPattern>>();
for (Iterator<ObjectPropertyStatementPattern> i = inferenceDrivingPatternAllowSet.iterator(); i.hasNext();) {
ObjectPropertyStatementPattern pat = i.next();
this.inferenceDrivingPatternMap = new HashMap<>();
for (Iterator<ReasonerStatementPattern> i = inferenceDrivingPatternAllowSet.iterator(); i.hasNext();) {
ReasonerStatementPattern pat = i.next();
Property p = pat.getPredicate();
List<ObjectPropertyStatementPattern> patList = inferenceDrivingPatternMap.get(p);
List<ReasonerStatementPattern> patList = inferenceDrivingPatternMap.get(p);
if (patList == null) {
patList = new LinkedList<ObjectPropertyStatementPattern>();
patList = new LinkedList<>();
patList.add(pat);
inferenceDrivingPatternMap.put(p, patList);
} else {
@ -163,7 +165,7 @@ public class PelletListener implements ModelChangedListener {
this.deletedDataProperties = ModelFactory.createDefaultModel();
this.mainModel.enterCriticalSection(Lock.READ);
try {
for (ObjectPropertyStatementPattern pat : this.inferenceDrivingPatternAllowSet) {
for (ReasonerStatementPattern pat : this.inferenceDrivingPatternAllowSet) {
addedStatements(mainModel.listStatements((Resource) null, pat.getPredicate(), (RDFNode) null));
}
if (!skipReasoningUponInitialization) {
@ -198,12 +200,12 @@ public class PelletListener implements ModelChangedListener {
inferenceRounds++;
log.info("Getting new inferences");
long startTime = System.currentTimeMillis();
LinkedList<ObjectPropertyStatementPattern> irpl = new LinkedList<ObjectPropertyStatementPattern>();
LinkedList<ReasonerStatementPattern> irpl = new LinkedList<>();
if (inferenceReceivingPatternAllowSet != null) {
irpl.addAll(inferenceReceivingPatternAllowSet);
} else {
irpl.add(ObjectPropertyStatementPatternFactory.getPattern(null,null,null));
irpl.add(ReasonerStatementPattern.ANY_OBJECT_PROPERTY);
}
if (reasonerConfiguration.getQueryForAllObjectProperties()) {
@ -214,7 +216,7 @@ public class PelletListener implements ModelChangedListener {
for (Iterator objPropIt = closeIt; objPropIt.hasNext();) {
ObjectProperty objProp = (ObjectProperty) objPropIt.next();
if ( !("http://www.w3.org/2002/07/owl#".equals(objProp.getNameSpace())) ) {
irpl.add(ObjectPropertyStatementPatternFactory.getPattern(null,objProp,null));
irpl.add(ReasonerStatementPattern.objectPattern(objProp));
}
}
} finally {
@ -229,7 +231,7 @@ public class PelletListener implements ModelChangedListener {
try {
while (sit.hasNext()) {
Resource subj = (Resource) sit.next();
irpl.add(ObjectPropertyStatementPatternFactory.getPattern(null,ResourceFactory.createProperty(subj.getURI()),null));
irpl.add(ReasonerStatementPattern.objectPattern(ResourceFactory.createProperty(subj.getURI())));
}
} finally {
sit.close();
@ -249,7 +251,7 @@ public class PelletListener implements ModelChangedListener {
DatatypeProperty dataProp = (DatatypeProperty) dataPropIt.next();
if ( !("http://www.w3.org/2002/07/owl#".equals(dataProp.getNameSpace())) ) {
// TODO: THIS WILL WORK, BUT NEED TO GENERALIZE THE PATTERN CLASSES
irpl.add(ObjectPropertyStatementPatternFactory.getPattern(null,dataProp,null));
irpl.add(ReasonerStatementPattern.objectPattern(dataProp));
}
}
} finally {
@ -264,7 +266,7 @@ public class PelletListener implements ModelChangedListener {
try {
while (sit.hasNext()) {
Resource subj = (Resource) sit.next();
irpl.add(ObjectPropertyStatementPatternFactory.getPattern(null,ResourceFactory.createProperty(subj.getURI()),null));
irpl.add(ReasonerStatementPattern.objectPattern(ResourceFactory.createProperty(subj.getURI())));
}
} finally {
sit.close();
@ -294,25 +296,15 @@ public class PelletListener implements ModelChangedListener {
pelletModel.leaveCriticalSection();
}
for (Iterator<ObjectPropertyStatementPattern> patIt = irpl.iterator(); patIt.hasNext(); ) {
ObjectPropertyStatementPattern pat = patIt.next();
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);
}
for (Iterator<ReasonerStatementPattern> patIt = irpl.iterator(); patIt.hasNext(); ) {
ReasonerStatementPattern pat = patIt.next();
log.debug("Querying for "+pat);
Model tempModel = ModelFactory.createDefaultModel();
pelletModel.enterCriticalSection(Lock.READ);
try {
ClosableIterator ci = pelletModel.listStatements(pat.getSubject(),pat.getPredicate(),pat.getObject());
try {
for (ClosableIterator i=ci; i.hasNext();) {
Statement stmt = (Statement) i.next();
for(Statement stmt : pat.matchStatementsFromModel(pelletModel)) {
boolean reject = false;
@ -353,9 +345,6 @@ public class PelletListener implements ModelChangedListener {
}
}
} finally {
ci.close();
}
} finally {
pelletModel.leaveCriticalSection();
}
@ -364,22 +353,11 @@ public class PelletListener implements ModelChangedListener {
try {
Queue<Statement> localRemovalQueue = new LinkedList<Statement>();
inferenceModel.enterCriticalSection(Lock.READ);
try {
ClosableIterator ci = inferenceModel.listStatements(pat.getSubject(),pat.getPredicate(),pat.getObject());
try {
for (ClosableIterator i=ci; i.hasNext();) {
Statement stmt = (Statement) i.next();
for (Statement stmt : pat.matchStatementsFromModel(inferenceModel)) {
if (!tempModel.contains(stmt)) {
localRemovalQueue.add(stmt);
}
}
} finally {
ci.close();
}
} finally {
inferenceModel.leaveCriticalSection();
}
for (Iterator<Statement> i = localRemovalQueue.iterator(); i.hasNext(); ) {
fullModel.enterCriticalSection(Lock.WRITE);
closePipe();
@ -448,10 +426,10 @@ public class PelletListener implements ModelChangedListener {
if (pipeOpen) {
sendToPellet = false;
boolean denied = false;
ObjectPropertyStatementPattern stPat = ObjectPropertyStatementPatternFactory.getPattern(stmt.getSubject(), stmt.getPredicate(), (Resource) stmt.getObject());
ReasonerStatementPattern stPat = ReasonerStatementPattern.objectPattern(stmt);
if (inferenceDrivingPatternDenySet != null) {
for (Iterator<ObjectPropertyStatementPattern> i = inferenceDrivingPatternDenySet.iterator(); i.hasNext(); ){
ObjectPropertyStatementPattern pat = i.next();
for (Iterator<ReasonerStatementPattern> i = inferenceDrivingPatternDenySet.iterator(); i.hasNext(); ){
ReasonerStatementPattern pat = i.next();
if (pat.matches(stPat)) {
denied = true;
break;
@ -463,10 +441,10 @@ public class PelletListener implements ModelChangedListener {
sendToPellet = true;
} else {
// 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) {
for (Iterator<ObjectPropertyStatementPattern> i = patList.iterator(); i.hasNext(); ){
ObjectPropertyStatementPattern pat = i.next();
for (Iterator<ReasonerStatementPattern> i = patList.iterator(); i.hasNext(); ){
ReasonerStatementPattern pat = i.next();
if (pat.matches(stPat)) {
sendToPellet = true;
break;
@ -526,10 +504,10 @@ public class PelletListener implements ModelChangedListener {
}
removeFromPellet = false;
boolean denied = false;
ObjectPropertyStatementPattern stPat = ObjectPropertyStatementPatternFactory.getPattern(stmt.getSubject(), stmt.getPredicate(), (Resource) stmt.getObject());
ReasonerStatementPattern stPat = ReasonerStatementPattern.objectPattern(stmt);
if (inferenceDrivingPatternDenySet != null) {
for (Iterator<ObjectPropertyStatementPattern> i = inferenceDrivingPatternDenySet.iterator(); i.hasNext(); ){
ObjectPropertyStatementPattern pat = i.next();
for (Iterator<ReasonerStatementPattern> i = inferenceDrivingPatternDenySet.iterator(); i.hasNext(); ){
ReasonerStatementPattern pat = i.next();
if (pat.matches(stPat)) {
denied = true;
break;
@ -541,10 +519,10 @@ public class PelletListener implements ModelChangedListener {
removeFromPellet = true;
} else {
// 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) {
for (Iterator<ObjectPropertyStatementPattern> i = patList.iterator(); i.hasNext(); ){
ObjectPropertyStatementPattern pat = i.next();
for (Iterator<ReasonerStatementPattern> i = patList.iterator(); i.hasNext(); ){
ReasonerStatementPattern pat = i.next();
if (pat.matches(stPat)) {
removeFromPellet = true;
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.jena.WebappDaoFactoryJena;
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.ModelNames;
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.SimpleReasonerTBoxListener;
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;
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$ */
package edu.cornell.mannlib.vitro.webapp.dao.jena.pellet;
package edu.cornell.mannlib.vitro.webapp.tboxreasoner;
import java.util.HashSet;
import java.util.Set;
import org.mindswap.pellet.jena.PelletReasonerFactory;
import com.hp.hpl.jena.ontology.OntModelSpec;
import com.hp.hpl.jena.vocabulary.OWL;
import com.hp.hpl.jena.vocabulary.RDF;
import com.hp.hpl.jena.vocabulary.RDFS;
import org.mindswap.pellet.jena.PelletReasonerFactory;
public class ReasonerConfiguration {
public Set<ObjectPropertyStatementPattern> inferenceDrivingPatternAllowSet;
public Set<ObjectPropertyStatementPattern> inferenceDrivingPatternDenySet;
public Set<ObjectPropertyStatementPattern> inferenceReceivingPatternAllowSet;
public Set<ReasonerStatementPattern> inferenceDrivingPatternAllowSet;
public Set<ReasonerStatementPattern> inferenceDrivingPatternDenySet;
public Set<ReasonerStatementPattern> inferenceReceivingPatternAllowSet;
private boolean queryForAllObjectProperties = false;
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)
DEFAULT = new ReasonerConfiguration();
HashSet<ObjectPropertyStatementPattern> defaultInferenceDrivingPatternAllowSet = new HashSet<ObjectPropertyStatementPattern>();
defaultInferenceDrivingPatternAllowSet.add(ObjectPropertyStatementPatternFactory.getPattern(null,RDF.type,null));
defaultInferenceDrivingPatternAllowSet.add(ObjectPropertyStatementPatternFactory.getPattern(null,RDFS.subClassOf,null));
defaultInferenceDrivingPatternAllowSet.add(ObjectPropertyStatementPatternFactory.getPattern(null,RDFS.subPropertyOf,null));
defaultInferenceDrivingPatternAllowSet.add(ObjectPropertyStatementPatternFactory.getPattern(null,OWL.equivalentClass,null));
defaultInferenceDrivingPatternAllowSet.add(ObjectPropertyStatementPatternFactory.getPattern(null,OWL.unionOf,null));
defaultInferenceDrivingPatternAllowSet.add(ObjectPropertyStatementPatternFactory.getPattern(null,OWL.intersectionOf,null));
defaultInferenceDrivingPatternAllowSet.add(ObjectPropertyStatementPatternFactory.getPattern(null,OWL.complementOf,null));
defaultInferenceDrivingPatternAllowSet.add(ObjectPropertyStatementPatternFactory.getPattern(null,OWL.oneOf,null));
defaultInferenceDrivingPatternAllowSet.add(ObjectPropertyStatementPatternFactory.getPattern(null,OWL.onProperty,null));
defaultInferenceDrivingPatternAllowSet.add(ObjectPropertyStatementPatternFactory.getPattern(null,OWL.someValuesFrom,null));
defaultInferenceDrivingPatternAllowSet.add(ObjectPropertyStatementPatternFactory.getPattern(null,OWL.allValuesFrom,null));
defaultInferenceDrivingPatternAllowSet.add(ObjectPropertyStatementPatternFactory.getPattern(null,OWL.hasValue,null));
defaultInferenceDrivingPatternAllowSet.add(ObjectPropertyStatementPatternFactory.getPattern(null,OWL.minCardinality,null));
defaultInferenceDrivingPatternAllowSet.add(ObjectPropertyStatementPatternFactory.getPattern(null,OWL.maxCardinality,null));
defaultInferenceDrivingPatternAllowSet.add(ObjectPropertyStatementPatternFactory.getPattern(null,OWL.cardinality,null));
defaultInferenceDrivingPatternAllowSet.add(ObjectPropertyStatementPatternFactory.getPattern(null,RDF.first,null));
defaultInferenceDrivingPatternAllowSet.add(ObjectPropertyStatementPatternFactory.getPattern(null,RDF.rest,null));
defaultInferenceDrivingPatternAllowSet.add(ObjectPropertyStatementPatternFactory.getPattern(null,OWL.disjointWith,null));
defaultInferenceDrivingPatternAllowSet.add(ObjectPropertyStatementPatternFactory.getPattern(null,OWL.inverseOf,null));
HashSet<ReasonerStatementPattern> defaultInferenceDrivingPatternAllowSet = new HashSet<>();
defaultInferenceDrivingPatternAllowSet.add(ReasonerStatementPattern.objectPattern(RDF.type));
defaultInferenceDrivingPatternAllowSet.add(ReasonerStatementPattern.objectPattern(RDFS.subClassOf));
defaultInferenceDrivingPatternAllowSet.add(ReasonerStatementPattern.objectPattern(RDFS.subPropertyOf));
defaultInferenceDrivingPatternAllowSet.add(ReasonerStatementPattern.objectPattern(OWL.equivalentClass));
defaultInferenceDrivingPatternAllowSet.add(ReasonerStatementPattern.objectPattern(OWL.unionOf));
defaultInferenceDrivingPatternAllowSet.add(ReasonerStatementPattern.objectPattern(OWL.intersectionOf));
defaultInferenceDrivingPatternAllowSet.add(ReasonerStatementPattern.objectPattern(OWL.complementOf));
defaultInferenceDrivingPatternAllowSet.add(ReasonerStatementPattern.objectPattern(OWL.oneOf));
defaultInferenceDrivingPatternAllowSet.add(ReasonerStatementPattern.objectPattern(OWL.onProperty));
defaultInferenceDrivingPatternAllowSet.add(ReasonerStatementPattern.objectPattern(OWL.someValuesFrom));
defaultInferenceDrivingPatternAllowSet.add(ReasonerStatementPattern.objectPattern(OWL.allValuesFrom));
defaultInferenceDrivingPatternAllowSet.add(ReasonerStatementPattern.objectPattern(OWL.hasValue));
defaultInferenceDrivingPatternAllowSet.add(ReasonerStatementPattern.objectPattern(OWL.minCardinality));
defaultInferenceDrivingPatternAllowSet.add(ReasonerStatementPattern.objectPattern(OWL.maxCardinality));
defaultInferenceDrivingPatternAllowSet.add(ReasonerStatementPattern.objectPattern(OWL.cardinality));
defaultInferenceDrivingPatternAllowSet.add(ReasonerStatementPattern.objectPattern(RDF.first));
defaultInferenceDrivingPatternAllowSet.add(ReasonerStatementPattern.objectPattern(RDF.rest));
defaultInferenceDrivingPatternAllowSet.add(ReasonerStatementPattern.objectPattern(OWL.disjointWith));
defaultInferenceDrivingPatternAllowSet.add(ReasonerStatementPattern.objectPattern(OWL.inverseOf));
DEFAULT.setInferenceDrivingPatternAllowSet(defaultInferenceDrivingPatternAllowSet);
Set<ObjectPropertyStatementPattern> defaultInferenceReceivingPatternAllowSet = new HashSet<ObjectPropertyStatementPattern>();
defaultInferenceReceivingPatternAllowSet.add(ObjectPropertyStatementPatternFactory.getPattern(null,RDF.type,null));
defaultInferenceReceivingPatternAllowSet.add(ObjectPropertyStatementPatternFactory.getPattern(null,RDFS.subClassOf,null));
defaultInferenceReceivingPatternAllowSet.add(ObjectPropertyStatementPatternFactory.getPattern(null,RDFS.subPropertyOf,null));
defaultInferenceReceivingPatternAllowSet.add(ObjectPropertyStatementPatternFactory.getPattern(null,OWL.equivalentClass,null));
defaultInferenceReceivingPatternAllowSet.add(ObjectPropertyStatementPatternFactory.getPattern(null,OWL.disjointWith,null));
defaultInferenceReceivingPatternAllowSet.add(ObjectPropertyStatementPatternFactory.getPattern(null,OWL.inverseOf,null));
Set<ReasonerStatementPattern> defaultInferenceReceivingPatternAllowSet = new HashSet<>();
defaultInferenceReceivingPatternAllowSet.add(ReasonerStatementPattern.objectPattern(RDF.type));
defaultInferenceReceivingPatternAllowSet.add(ReasonerStatementPattern.objectPattern(RDFS.subClassOf));
defaultInferenceReceivingPatternAllowSet.add(ReasonerStatementPattern.objectPattern(RDFS.subPropertyOf));
defaultInferenceReceivingPatternAllowSet.add(ReasonerStatementPattern.objectPattern(OWL.equivalentClass));
defaultInferenceReceivingPatternAllowSet.add(ReasonerStatementPattern.objectPattern(OWL.disjointWith));
defaultInferenceReceivingPatternAllowSet.add(ReasonerStatementPattern.objectPattern(OWL.inverseOf));
DEFAULT.setInferenceReceivingPatternAllowSet(defaultInferenceReceivingPatternAllowSet);
DEFAULT.setQueryForAllObjectProperties(false);
@ -107,36 +107,36 @@ public class ReasonerConfiguration {
COMPLETE.setQueryForAllObjectProperties(true);
COMPLETE.setReasonOnAllDatatypePropertyStatements(true);
COMPLETE.setQueryForAllDatatypeProperties(true);
Set<ObjectPropertyStatementPattern> completeInferenceReceivingPatternAllowSet = new HashSet<ObjectPropertyStatementPattern>();
Set<ReasonerStatementPattern> completeInferenceReceivingPatternAllowSet = new HashSet<>();
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
//completeInferenceReceivingPatternAllowSet.add(ObjectPropertyStatementPatternFactory.getPattern(null, OWL.differentFrom, null));
//completeInferenceReceivingPatternAllowSet.add(ReasonerStatementPattern.objectPattern( OWL.differentFrom, null));
COMPLETE.setInferenceReceivingPatternAllowSet(completeInferenceReceivingPatternAllowSet);
}
public Set<ObjectPropertyStatementPattern> getInferenceDrivingPatternAllowSet() {
public Set<ReasonerStatementPattern> getInferenceDrivingPatternAllowSet() {
return this.inferenceDrivingPatternAllowSet;
}
public void setInferenceDrivingPatternAllowSet(Set<ObjectPropertyStatementPattern> patternSet) {
public void setInferenceDrivingPatternAllowSet(Set<ReasonerStatementPattern> patternSet) {
this.inferenceDrivingPatternAllowSet = patternSet;
}
public Set<ObjectPropertyStatementPattern> getInferenceDrivingPatternDenySet() {
public Set<ReasonerStatementPattern> getInferenceDrivingPatternDenySet() {
return this.inferenceDrivingPatternDenySet;
}
public void setInferenceDrivingPatternDenySet(Set<ObjectPropertyStatementPattern> patternSet) {
public void setInferenceDrivingPatternDenySet(Set<ReasonerStatementPattern> patternSet) {
this.inferenceDrivingPatternDenySet = patternSet;
}
public Set<ObjectPropertyStatementPattern> getInferenceReceivingPatternAllowSet() {
public Set<ReasonerStatementPattern> getInferenceReceivingPatternAllowSet() {
return this.inferenceReceivingPatternAllowSet;
}
public void setInferenceReceivingPatternAllowSet(Set<ObjectPropertyStatementPattern> patternSet) {
public void setInferenceReceivingPatternAllowSet(Set<ReasonerStatementPattern> 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;
}
}