VIVO-778 Clean up ObjectPropertyStatementPattern
Rename to ReasonerStatementPattern, move to a new package and refactor.
This commit is contained in:
parent
adf04bd2be
commit
468a7214fe
6 changed files with 216 additions and 222 deletions
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
|
@ -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;
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue