merge r. 9964 from maint-rel-1.5 : NIHVIVO-3900 performance optimizations for SimpleReasoner
This commit is contained in:
parent
018678463d
commit
732617f62f
1 changed files with 40 additions and 37 deletions
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue