initial glue code for NIHVIVO-205 'Ontology Upgrade...'
This commit is contained in:
parent
a1a7315693
commit
82dfc8d0ca
1 changed files with 118 additions and 0 deletions
|
@ -0,0 +1,118 @@
|
||||||
|
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
|
||||||
|
|
||||||
|
package edu.cornell.mannlib.vitro.webapp.ontology.update;
|
||||||
|
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import javax.servlet.ServletContext;
|
||||||
|
|
||||||
|
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.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.
|
||||||
|
*
|
||||||
|
* This class assumes that config and mapping data files are available
|
||||||
|
* at DATA_DIR.
|
||||||
|
*
|
||||||
|
* @author bjl23
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
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 = DATA_DIR + "success.n3";
|
||||||
|
private final String SUCCESS_RDF_FORMAT = "N3";
|
||||||
|
private final String DIFF_FILE = DATA_DIR + "diff.tab.txt";
|
||||||
|
|
||||||
|
private ServletContext context;
|
||||||
|
private OntModelSelector ontModelSelector;
|
||||||
|
|
||||||
|
public OntologyUpdater(ServletContext context,
|
||||||
|
OntModelSelector ontModelSelector) {
|
||||||
|
this.context = context;
|
||||||
|
this.ontModelSelector = ontModelSelector;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void update() {
|
||||||
|
// Check to see if the update is necessary.
|
||||||
|
if (updateRequired()) {
|
||||||
|
performUpdate();
|
||||||
|
// add assertions to the knowledge base showing that the
|
||||||
|
// update was successful, so we don't need to run it again.
|
||||||
|
assertSuccess();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void performUpdate() {
|
||||||
|
List<AtomicOntologyChange> changes = getAtomicOntologyChanges();
|
||||||
|
|
||||||
|
//preprocessChanges(changes);
|
||||||
|
//updateTBox(changes);
|
||||||
|
|
||||||
|
updateABox(changes);
|
||||||
|
|
||||||
|
updateAnnotations();
|
||||||
|
|
||||||
|
// perform additional additions and retractions
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<AtomicOntologyChange> getAtomicOntologyChanges() {
|
||||||
|
return null; //Anup's code is called here
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateABox(List<AtomicOntologyChange> changes) {
|
||||||
|
// perform operations based on change objects
|
||||||
|
// run additional SPARQL CONSTRUCTS
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateAnnotations() {
|
||||||
|
// Stella's code is called here
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Executes a SPARQL ASK query to determine whether the knowledge base
|
||||||
|
* needs to be updated to conform to a new ontology version
|
||||||
|
*/
|
||||||
|
private boolean updateRequired() {
|
||||||
|
String sparqlQueryStr = loadSparqlQuery(ASK_QUERY_FILE);
|
||||||
|
if (sparqlQueryStr == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
Model m = ontModelSelector.getApplicationMetadataModel();
|
||||||
|
Query query = QueryFactory.create(sparqlQueryStr);
|
||||||
|
QueryExecution qexec = QueryExecutionFactory.create(query, m);
|
||||||
|
return qexec.execAsk();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* loads a SPARQL ASK query from a text file
|
||||||
|
* @param filePath
|
||||||
|
* @return the query string or null if file not found
|
||||||
|
*/
|
||||||
|
private String loadSparqlQuery(String filePath) {
|
||||||
|
return null; // TODO implement me!
|
||||||
|
}
|
||||||
|
|
||||||
|
private void assertSuccess() {
|
||||||
|
Model m = ontModelSelector.getApplicationMetadataModel();
|
||||||
|
InputStream inStream = context.getResourceAsStream(SUCCESS_ASSERTIONS);
|
||||||
|
m.enterCriticalSection(Lock.WRITE);
|
||||||
|
try {
|
||||||
|
m.read(inStream, SUCCESS_RDF_FORMAT);
|
||||||
|
} finally {
|
||||||
|
m.leaveCriticalSection();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue