work on NIHVIVO-205 ontology upgrade
This commit is contained in:
parent
6d2968177c
commit
66a7042506
4 changed files with 134 additions and 33 deletions
|
@ -78,6 +78,12 @@
|
|||
<listener-class>edu.cornell.mannlib.vitro.webapp.servlet.setup.AttachSubmodels</listener-class>
|
||||
</listener>
|
||||
|
||||
<!-- Invokes process to perform updates to align with ontology changes if needed -->
|
||||
|
||||
<listener>
|
||||
<listener-class>edu.cornell.mannlib.vitro.webapp.servlet.setup.UpdateKnowledgeBase</listener-class>
|
||||
</listener>
|
||||
|
||||
<!-- Pellet setup enables reasoning. Inferences are cached in a separate DB graph. -->
|
||||
<!-- Changing the class name sets the kindss of inferences that are materialized. -->
|
||||
<!-- See documentation for details. -->
|
||||
|
|
|
@ -0,0 +1,72 @@
|
|||
package edu.cornell.mannlib.vitro.webapp.ontology.update;
|
||||
|
||||
import edu.cornell.mannlib.vitro.webapp.dao.jena.OntModelSelector;
|
||||
|
||||
public class OntologyUpdateSettings {
|
||||
|
||||
private String dataDir;
|
||||
private String askQueryFile;
|
||||
private String successAssertionsFile;
|
||||
private String successRDFFormat = "N3";
|
||||
private String diffFile;
|
||||
private String logFile;
|
||||
private String errorLogFile;
|
||||
private String removedDataFile;
|
||||
private OntModelSelector ontModelSelector;
|
||||
|
||||
public String getDataDir() {
|
||||
return dataDir;
|
||||
}
|
||||
public void setDataDir(String dataDir) {
|
||||
this.dataDir = dataDir;
|
||||
}
|
||||
public String getAskQueryFile() {
|
||||
return askQueryFile;
|
||||
}
|
||||
public void setAskQueryFile(String askQueryFile) {
|
||||
this.askQueryFile = askQueryFile;
|
||||
}
|
||||
public String getSuccessAssertionsFile() {
|
||||
return successAssertionsFile;
|
||||
}
|
||||
public void setSuccessAssertionsFile(String successAssertionsFile) {
|
||||
this.successAssertionsFile = successAssertionsFile;
|
||||
}
|
||||
public String getSuccessRDFFormat() {
|
||||
return successRDFFormat;
|
||||
}
|
||||
public void setSuccessRDFFormat(String successRDFFormat) {
|
||||
this.successRDFFormat = successRDFFormat;
|
||||
}
|
||||
public String getDiffFile() {
|
||||
return diffFile;
|
||||
}
|
||||
public void setDiffFile(String diffFile) {
|
||||
this.diffFile = diffFile;
|
||||
}
|
||||
public OntModelSelector getOntModelSelector() {
|
||||
return ontModelSelector;
|
||||
}
|
||||
public String getLogFile() {
|
||||
return logFile;
|
||||
}
|
||||
public void setLogFile(String logFile) {
|
||||
this.logFile = logFile;
|
||||
}
|
||||
public String getErrorLogFile() {
|
||||
return errorLogFile;
|
||||
}
|
||||
public void setErrorLogFile(String errorLogFile) {
|
||||
this.errorLogFile = errorLogFile;
|
||||
}
|
||||
public String getRemovedDataFile() {
|
||||
return removedDataFile;
|
||||
}
|
||||
public void setRemovedDataFile(String removedDataFile) {
|
||||
this.removedDataFile = removedDataFile;
|
||||
}
|
||||
public void setOntModelSelector(OntModelSelector ontModelSelector) {
|
||||
this.ontModelSelector = ontModelSelector;
|
||||
}
|
||||
|
||||
}
|
|
@ -4,14 +4,13 @@ package edu.cornell.mannlib.vitro.webapp.ontology.update;
|
|||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.FileReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.List;
|
||||
|
||||
import javax.servlet.ServletContext;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
||||
|
@ -19,12 +18,9 @@ import com.hp.hpl.jena.query.Query;
|
|||
import com.hp.hpl.jena.query.QueryExecution;
|
||||
import com.hp.hpl.jena.query.QueryExecutionFactory;
|
||||
import com.hp.hpl.jena.query.QueryFactory;
|
||||
import com.hp.hpl.jena.query.Syntax;
|
||||
import com.hp.hpl.jena.rdf.model.Model;
|
||||
import com.hp.hpl.jena.shared.Lock;
|
||||
|
||||
import edu.cornell.mannlib.vitro.webapp.dao.jena.OntModelSelector;
|
||||
|
||||
/**
|
||||
* Performs knowledge base updates if necessary to align with a
|
||||
* new ontology version.
|
||||
|
@ -37,21 +33,14 @@ import edu.cornell.mannlib.vitro.webapp.dao.jena.OntModelSelector;
|
|||
*/
|
||||
public class OntologyUpdater {
|
||||
|
||||
private final String DATA_DIR = "/WEB-INF/ontologies/update/";
|
||||
private final String ASK_QUERY_FILE = DATA_DIR + "ask.sparql";
|
||||
private final String SUCCESS_ASSERTIONS_FILE = DATA_DIR + "success.n3";
|
||||
private final String SUCCESS_RDF_FORMAT = "N3";
|
||||
private final String DIFF_FILE = DATA_DIR + "diff.tab.txt";
|
||||
|
||||
|
||||
private final Log log = LogFactory.getLog(OntologyUpdater.class);
|
||||
|
||||
private ServletContext context;
|
||||
private OntModelSelector ontModelSelector;
|
||||
private OntologyUpdateSettings settings;
|
||||
|
||||
public OntologyUpdater(ServletContext context,
|
||||
OntModelSelector ontModelSelector) {
|
||||
this.context = context;
|
||||
this.ontModelSelector = ontModelSelector;
|
||||
public OntologyUpdater(OntologyUpdateSettings settings) {
|
||||
this.settings = settings;
|
||||
}
|
||||
|
||||
public void update() throws IOException {
|
||||
|
@ -67,12 +56,12 @@ public class OntologyUpdater {
|
|||
private void performUpdate() {
|
||||
List<AtomicOntologyChange> changes = getAtomicOntologyChanges();
|
||||
|
||||
//preprocessChanges(changes);
|
||||
//updateTBox(changes);
|
||||
//preprocessChanges(changes);
|
||||
|
||||
updateABox(changes);
|
||||
|
||||
updateAnnotations();
|
||||
updateTBoxAnnotations();
|
||||
|
||||
// perform additional additions and retractions
|
||||
}
|
||||
|
@ -84,10 +73,9 @@ public class OntologyUpdater {
|
|||
private void updateABox(List<AtomicOntologyChange> changes) {
|
||||
// perform operations based on change objects
|
||||
// run additional SPARQL CONSTRUCTS
|
||||
|
||||
}
|
||||
|
||||
private void updateAnnotations() {
|
||||
private void updateTBoxAnnotations() {
|
||||
// Stella's code is called here
|
||||
}
|
||||
|
||||
|
@ -96,11 +84,11 @@ public class OntologyUpdater {
|
|||
* needs to be updated to conform to a new ontology version
|
||||
*/
|
||||
private boolean updateRequired() throws IOException {
|
||||
String sparqlQueryStr = loadSparqlQuery(ASK_QUERY_FILE);
|
||||
String sparqlQueryStr = loadSparqlQuery(settings.getAskQueryFile());
|
||||
if (sparqlQueryStr == null) {
|
||||
return false;
|
||||
}
|
||||
Model m = ontModelSelector.getApplicationMetadataModel();
|
||||
Model m = settings.getOntModelSelector().getApplicationMetadataModel();
|
||||
Query query = QueryFactory.create(sparqlQueryStr);
|
||||
QueryExecution qexec = QueryExecutionFactory.create(query, m);
|
||||
|
||||
|
@ -117,7 +105,7 @@ public class OntologyUpdater {
|
|||
* @return the query string or null if file not found
|
||||
*/
|
||||
private String loadSparqlQuery(String filePath) throws IOException {
|
||||
File file = new File(context.getRealPath(filePath));
|
||||
File file = new File(settings.getAskQueryFile());
|
||||
if (!file.exists()) {
|
||||
return null;
|
||||
}
|
||||
|
@ -130,15 +118,21 @@ public class OntologyUpdater {
|
|||
return fileContents.toString();
|
||||
}
|
||||
|
||||
private void assertSuccess() {
|
||||
Model m = ontModelSelector.getApplicationMetadataModel();
|
||||
InputStream inStream = context.getResourceAsStream(SUCCESS_ASSERTIONS_FILE);
|
||||
m.enterCriticalSection(Lock.WRITE);
|
||||
try {
|
||||
m.read(inStream, SUCCESS_RDF_FORMAT);
|
||||
} finally {
|
||||
m.leaveCriticalSection();
|
||||
}
|
||||
private void assertSuccess() throws FileNotFoundException {
|
||||
try {
|
||||
Model m = settings.getOntModelSelector().getApplicationMetadataModel();
|
||||
File successAssertionsFile =
|
||||
new File(settings.getSuccessAssertionsFile());
|
||||
InputStream inStream = new FileInputStream(successAssertionsFile);
|
||||
m.enterCriticalSection(Lock.WRITE);
|
||||
try {
|
||||
m.read(inStream, settings.getSuccessRDFFormat());
|
||||
} finally {
|
||||
m.leaveCriticalSection();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
// TODO: log something to the error log
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@ package edu.cornell.mannlib.vitro.webapp.servlet.setup;
|
|||
|
||||
import java.io.IOException;
|
||||
|
||||
import javax.servlet.ServletContext;
|
||||
import javax.servlet.ServletContextEvent;
|
||||
import javax.servlet.ServletContextListener;
|
||||
|
||||
|
@ -12,6 +13,7 @@ import com.hp.hpl.jena.ontology.OntModel;
|
|||
import edu.cornell.mannlib.vitro.webapp.dao.jena.JenaBaseDao;
|
||||
import edu.cornell.mannlib.vitro.webapp.dao.jena.OntModelSelector;
|
||||
import edu.cornell.mannlib.vitro.webapp.dao.jena.SimpleOntModelSelector;
|
||||
import edu.cornell.mannlib.vitro.webapp.ontology.update.OntologyUpdateSettings;
|
||||
import edu.cornell.mannlib.vitro.webapp.ontology.update.OntologyUpdater;
|
||||
|
||||
/**
|
||||
|
@ -22,14 +24,41 @@ import edu.cornell.mannlib.vitro.webapp.ontology.update.OntologyUpdater;
|
|||
*/
|
||||
public class UpdateKnowledgeBase implements ServletContextListener {
|
||||
|
||||
private final String DATA_DIR = "/WEB-INF/ontologies/update/";
|
||||
private final String LOG_DIR = "logs/";
|
||||
private final String REMOVED_DATA_DIR = "removedData/";
|
||||
private final String ASK_QUERY_FILE = DATA_DIR + "ask.sparql";
|
||||
private final String SUCCESS_ASSERTIONS_FILE = DATA_DIR + "success.n3";
|
||||
private final String SUCCESS_RDF_FORMAT = "N3";
|
||||
private final String DIFF_FILE = DATA_DIR + "diff.tab.txt";
|
||||
private final String LOG_FILE = DATA_DIR + LOG_DIR +
|
||||
"knowledgeBaseUpdate.log";
|
||||
private final String ERROR_LOG_FILE = DATA_DIR + LOG_DIR +
|
||||
"knowledgeBaseUpdate.error.log";
|
||||
private final String REMOVED_DATA_FILE = DATA_DIR + REMOVED_DATA_DIR +
|
||||
"removedData.rdf";
|
||||
|
||||
public void contextInitialized(ServletContextEvent sce) {
|
||||
|
||||
ServletContext ctx = sce.getServletContext();
|
||||
|
||||
OntModelSelector oms = new SimpleOntModelSelector(
|
||||
(OntModel) sce.getServletContext().getAttribute(
|
||||
JenaBaseDao.ASSERTIONS_ONT_MODEL_ATTRIBUTE_NAME));
|
||||
|
||||
OntologyUpdateSettings settings = new OntologyUpdateSettings();
|
||||
settings.setAskQueryFile(ctx.getRealPath(ASK_QUERY_FILE));
|
||||
settings.setDataDir(ctx.getRealPath(DATA_DIR));
|
||||
settings.setDiffFile(ctx.getRealPath(DIFF_FILE));
|
||||
settings.setSuccessAssertionsFile(
|
||||
ctx.getRealPath(SUCCESS_ASSERTIONS_FILE));
|
||||
settings.setSuccessRDFFormat(ctx.getRealPath(SUCCESS_RDF_FORMAT));
|
||||
settings.setLogFile(ctx.getRealPath(LOG_FILE));
|
||||
settings.setErrorLogFile(ctx.getRealPath(ERROR_LOG_FILE));
|
||||
settings.setRemovedDataFile(ctx.getRealPath(REMOVED_DATA_FILE));
|
||||
|
||||
try {
|
||||
(new OntologyUpdater(sce.getServletContext(), oms)).update();
|
||||
(new OntologyUpdater(settings)).update();
|
||||
} catch (IOException ioe) {
|
||||
throw new RuntimeException("IOException updating knowledge base " +
|
||||
"for ontology changes", ioe);
|
||||
|
|
Loading…
Add table
Reference in a new issue