merge r. 9964 from maint-rel-1.5 : NIHVIVO-3900 performance optimizations for SimpleReasoner

This commit is contained in:
brianjlowe 2012-07-11 15:22:43 +00:00
parent 018678463d
commit 732617f62f

View file

@ -55,6 +55,8 @@ public class SimpleReasoner extends StatementListener {
private OntModel tboxModel; // asserted and inferred TBox axioms private OntModel tboxModel; // asserted and inferred TBox axioms
private OntModel aboxModel; // ABox assertions private OntModel aboxModel; // ABox assertions
private Model inferenceModel; // ABox inferences private Model inferenceModel; // ABox inferences
private OntModel fullModel; // contains at least the
// asserted and inferred ABox
private static final String mostSpecificTypePropertyURI = "http://vitro.mannlib.cornell.edu/ns/vitro/0.7#mostSpecificType"; private static final String mostSpecificTypePropertyURI = "http://vitro.mannlib.cornell.edu/ns/vitro/0.7#mostSpecificType";
private static final AnnotationProperty mostSpecificType = (ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM)).createAnnotationProperty(mostSpecificTypePropertyURI); private static final AnnotationProperty mostSpecificType = (ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM)).createAnnotationProperty(mostSpecificTypePropertyURI);
@ -86,6 +88,10 @@ public class SimpleReasoner extends StatementListener {
this.tboxModel = tboxModel; this.tboxModel = tboxModel;
this.fullModel = ModelFactory.createOntologyModel(
OntModelSpec.OWL_MEM, ModelFactory.createModelForGraph(
new RDFServiceGraph(rdfService)));
this.aboxModel = ModelFactory.createOntologyModel( this.aboxModel = ModelFactory.createOntologyModel(
OntModelSpec.OWL_MEM, ModelFactory.createModelForGraph( OntModelSpec.OWL_MEM, ModelFactory.createModelForGraph(
new DifferenceGraph(new DifferenceGraph(new RDFServiceGraph(rdfService),inferenceModel.getGraph()), new DifferenceGraph(new DifferenceGraph(new RDFServiceGraph(rdfService),inferenceModel.getGraph()),
@ -120,6 +126,9 @@ public class SimpleReasoner extends StatementListener {
this.tboxModel = tboxModel; this.tboxModel = tboxModel;
this.aboxModel = aboxModel; this.aboxModel = aboxModel;
this.inferenceModel = inferenceModel; this.inferenceModel = inferenceModel;
this.fullModel = ModelFactory.createOntologyModel(
OntModelSpec.OWL_MEM, ModelFactory.createUnion(
aboxModel, inferenceModel));
aBoxDeltaModeler1 = new CumulativeDeltaModeler(); aBoxDeltaModeler1 = new CumulativeDeltaModeler();
aBoxDeltaModeler2 = new CumulativeDeltaModeler(); aBoxDeltaModeler2 = new CumulativeDeltaModeler();
this.batchMode = 0; this.batchMode = 0;
@ -578,14 +587,17 @@ public class SimpleReasoner extends StatementListener {
*/ */
protected void addedABoxAssertion(Statement stmt, Model inferenceModel) { protected void addedABoxAssertion(Statement stmt, Model inferenceModel) {
List<OntProperty> inverseProperties = getInverseProperties(stmt); if (!stmt.getObject().isLiteral()) {
Iterator<OntProperty> inverseIter = inverseProperties.iterator(); List<OntProperty> inverseProperties = getInverseProperties(stmt);
Iterator<OntProperty> inverseIter = inverseProperties.iterator();
while (inverseIter.hasNext()) {
Property inverseProp = inverseIter.next(); while (inverseIter.hasNext()) {
Statement infStmt = ResourceFactory.createStatement(stmt.getObject().asResource(), inverseProp, stmt.getSubject()); Property inverseProp = inverseIter.next();
addInference(infStmt,inferenceModel,true); Statement infStmt = ResourceFactory.createStatement(
} stmt.getObject().asResource(), inverseProp, stmt.getSubject());
addInference(infStmt,inferenceModel,true);
}
}
List<Resource> sameIndividuals = getSameIndividuals(stmt.getSubject().asResource(), inferenceModel); List<Resource> sameIndividuals = getSameIndividuals(stmt.getSubject().asResource(), inferenceModel);
Iterator<Resource> sameIter = sameIndividuals.iterator(); Iterator<Resource> sameIter = sameIndividuals.iterator();
@ -617,14 +629,17 @@ public class SimpleReasoner extends StatementListener {
*/ */
protected void removedABoxAssertion(Statement stmt, Model inferenceModel) { protected void removedABoxAssertion(Statement stmt, Model inferenceModel) {
List<OntProperty> inverseProperties = getInverseProperties(stmt); if (!stmt.getObject().isLiteral()) {
Iterator<OntProperty> inverseIter = inverseProperties.iterator(); List<OntProperty> inverseProperties = getInverseProperties(stmt);
Iterator<OntProperty> inverseIter = inverseProperties.iterator();
while (inverseIter.hasNext()) {
OntProperty inverseProp = inverseIter.next(); while (inverseIter.hasNext()) {
Statement infStmt = ResourceFactory.createStatement(stmt.getObject().asResource(), inverseProp, stmt.getSubject()); OntProperty inverseProp = inverseIter.next();
removeInference(infStmt,inferenceModel); Statement infStmt = ResourceFactory.createStatement(
} stmt.getObject().asResource(), inverseProp, stmt.getSubject());
removeInference(infStmt,inferenceModel);
}
}
List<Resource> sameIndividuals = getSameIndividuals(stmt.getSubject().asResource(), inferenceModel); List<Resource> sameIndividuals = getSameIndividuals(stmt.getSubject().asResource(), inferenceModel);
Iterator<Resource> sameIter = sameIndividuals.iterator(); Iterator<Resource> sameIter = sameIndividuals.iterator();
@ -786,30 +801,18 @@ public class SimpleReasoner extends StatementListener {
* Get a list of individuals the same as the given individual * Get a list of individuals the same as the given individual
*/ */
protected List<Resource> getSameIndividuals(Resource ind, Model inferenceModel) { protected List<Resource> getSameIndividuals(Resource ind, Model inferenceModel) {
OntModel unionModel = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM);
unionModel.addSubModel(aboxModel);
unionModel.addSubModel(inferenceModel);
ArrayList<Resource> sameIndividuals = new ArrayList<Resource>(); ArrayList<Resource> sameIndividuals = new ArrayList<Resource>();
aboxModel.enterCriticalSection(Lock.READ); fullModel.enterCriticalSection(Lock.READ);
try { try {
inferenceModel.enterCriticalSection(Lock.READ); Iterator<Statement> iter = fullModel.listStatements(ind, OWL.sameAs, (RDFNode) null);
try { while (iter.hasNext()) {
Iterator<Statement> iter = unionModel.listStatements(ind, OWL.sameAs, (RDFNode) null); Statement stmt = iter.next();
if (stmt.getObject() == null || !stmt.getObject().isResource() || stmt.getObject().asResource().getURI() == null) continue;
while (iter.hasNext()) { sameIndividuals.add(stmt.getObject().asResource());
Statement stmt = iter.next(); }
if (stmt.getObject() == null || !stmt.getObject().isResource() || stmt.getObject().asResource().getURI() == null) continue;
sameIndividuals.add(stmt.getObject().asResource());
}
} finally {
inferenceModel.leaveCriticalSection();
}
} finally { } finally {
aboxModel.leaveCriticalSection(); fullModel.leaveCriticalSection();
} }
return sameIndividuals; return sameIndividuals;
} }