From 19f2d14b5f987d2d9d8bbb68fb2aa48281f34617 Mon Sep 17 00:00:00 2001 From: brianjlowe Date: Mon, 18 Nov 2013 15:28:56 -0500 Subject: [PATCH] performance tweak in ABoxRecomputer --- .../vitro/webapp/reasoner/ABoxRecomputer.java | 35 +++++++++++++++---- 1 file changed, 28 insertions(+), 7 deletions(-) diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/reasoner/ABoxRecomputer.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/reasoner/ABoxRecomputer.java index 648d5f88b..fbbc5702f 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/reasoner/ABoxRecomputer.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/reasoner/ABoxRecomputer.java @@ -3,6 +3,7 @@ package edu.cornell.mannlib.vitro.webapp.reasoner; import java.io.InputStream; +import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; import java.util.Iterator; @@ -295,14 +296,35 @@ public class ABoxRecomputer { */ protected Collection getAllIndividualURIs() { - String queryString = "SELECT DISTINCT ?s WHERE { GRAPH ?g { ?s a ?type } " + - " FILTER (!bound(?g) || !regex(str(?g),\"tbox\")) } ORDER BY ?s"; - return getIndividualURIs(queryString); + HashSet individualURIs = new HashSet(); + + List classList = new ArrayList(); + + tboxModel.enterCriticalSection(Lock.READ); + try { + StmtIterator classIt = tboxModel.listStatements( + (Resource) null, RDF.type, OWL.Class); + while(classIt.hasNext()) { + Statement stmt = classIt.nextStatement(); + if(stmt.getSubject().isURIResource() + && stmt.getSubject().getURI() != null + && !stmt.getSubject().getURI().isEmpty()) { + classList.add(stmt.getSubject().getURI()); + } + } + } finally { + tboxModel.leaveCriticalSection(); + } + + for (String classURI : classList) { + String queryString = "SELECT ?s WHERE { ?s a <" + classURI + "> } "; + getIndividualURIs(queryString, individualURIs); + } + + return individualURIs; } - protected Collection getIndividualURIs(String queryString) { - - Set individuals = new HashSet(); + protected void getIndividualURIs(String queryString, Set individuals) { int batchSize = 50000; int offset = 0; @@ -342,7 +364,6 @@ public class ABoxRecomputer { offset += batchSize; } - return individuals; } protected void addedABoxTypeAssertion(Resource individual, Model inferenceModel, HashSet unknownTypes) {