infrastructure for NIHVIVO-205 ontology upgrade

This commit is contained in:
bjl23 2010-03-31 16:29:46 +00:00
parent 6eccc7e2c9
commit da8a7f3649
7 changed files with 202 additions and 2 deletions

View file

@ -0,0 +1,31 @@
package edu.cornell.mannlib.vitro.webapp.ontology.update;
import java.util.List;
import com.hp.hpl.jena.ontology.OntModel;
public class ABoxUpdater {
private OntModel tboxModel;
private OntModel aboxModel;
private OntologyChangeLogger logger;
private OntologyChangeRecord record;
public ABoxUpdater(OntModel tboxModel, OntModel aboxModel,
OntologyChangeLogger logger, OntologyChangeRecord record) {
this.tboxModel = tboxModel;
this.aboxModel = aboxModel;
this.logger = logger;
this.record = record;
}
public void processClassChanges(List<AtomicOntologyChange> changes) {
}
public void processPropertyChanges(List<AtomicOntologyChange> changes) {
}
}

View file

@ -0,0 +1,13 @@
package edu.cornell.mannlib.vitro.webapp.ontology.update;
import java.io.IOException;
public interface OntologyChangeLogger {
public void log(String logMessage) throws IOException;
public void logError(String errorMessage) throws IOException;
public void closeLogs() throws IOException;
}

View file

@ -0,0 +1,11 @@
package edu.cornell.mannlib.vitro.webapp.ontology.update;
import com.hp.hpl.jena.rdf.model.Model;
public interface OntologyChangeRecord {
public void recordAdditions(Model incrementalAdditions);
public void recordRetractions(Model incrementalRetractions);
}

View file

@ -14,6 +14,7 @@ import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.hp.hpl.jena.ontology.OntModel;
import com.hp.hpl.jena.query.Query;
import com.hp.hpl.jena.query.QueryExecution;
import com.hp.hpl.jena.query.QueryExecutionFactory;
@ -54,7 +55,11 @@ public class OntologyUpdater {
}
private void performUpdate() throws IOException {
List<AtomicOntologyChange> changes = getAtomicOntologyChanges();
List<AtomicOntologyChange> rawChanges = getAtomicOntologyChanges();
AtomicOntologyChangeLists changes =
new AtomicOntologyChangeLists(rawChanges,
settings.getOntModelSelector().getTBoxModel());
//updateTBox(changes);
//preprocessChanges(changes);
@ -71,7 +76,9 @@ public class OntologyUpdater {
return (new OntologyChangeParser()).parseFile(settings.getDiffFile());
}
private void updateABox(List<AtomicOntologyChange> changes) {
private void updateABox(AtomicOntologyChangeLists changes) {
// perform operations based on change objects
// run additional SPARQL CONSTRUCTS
}
@ -140,6 +147,34 @@ public class OntologyUpdater {
}
/**
* A class that allows to access two different ontology change lists,
* one for class changes and the other for property changes. The
* constructor will split a list containing both types of changes.
* @author bjl23
*
*/
private class AtomicOntologyChangeLists {
private List<AtomicOntologyChange> atomicClassChanges;
private List<AtomicOntologyChange> atomicPropertyChanges;
public AtomicOntologyChangeLists(
List<AtomicOntologyChange> changeList, OntModel tboxModel) {
// TODO: split the main list of change objects into two lists
// depending on whether they refer to classes or properties
}
public List<AtomicOntologyChange> getAtomicClassChanges() {
return atomicClassChanges;
}
public List<AtomicOntologyChange> getAtomicPropertyChanges() {
return atomicPropertyChanges;
}
}
}

View file

@ -0,0 +1,44 @@
package edu.cornell.mannlib.vitro.webapp.ontology.update;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
public class SimpleOntologyChangeLogger implements OntologyChangeLogger {
private Writer logWriter;
private Writer errorWriter;
public SimpleOntologyChangeLogger( String logPath,
String errorPath ) {
File logFile = new File(logPath);
File errorFile = new File(errorPath);
try {
logWriter = new BufferedWriter(new FileWriter(logFile));
errorWriter = new BufferedWriter(new FileWriter(errorFile));
} catch (IOException ioe) {
throw new RuntimeException ("Unable to open ontology change log " +
"files for writing", ioe);
}
}
public void log(String logMessage) throws IOException {
logWriter.write(logMessage + "\n");
}
public void logError(String errorMessage) throws IOException {
errorWriter.write(errorMessage + "\n");
}
public void closeLogs() throws IOException {
logWriter.flush();
logWriter.close();
errorWriter.flush();
errorWriter.close();
}
}

View file

@ -0,0 +1,61 @@
package edu.cornell.mannlib.vitro.webapp.ontology.update;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.hp.hpl.jena.rdf.model.Model;
public class SimpleOntologyChangeRecord implements OntologyChangeRecord {
private final static Log log =
LogFactory.getLog(SimpleOntologyChangeRecord.class);
private final static String RDF_SYNTAX = "RDF/XML-ABBREV";
private Model additionsModel;
private Model retractionsModel;
private File additionsFile;
private File retractionsFile;
public SimpleOntologyChangeRecord(
Model additionsModel, Model retractionsModel,
String additionsFile, String retractionsFile) {
this.additionsModel = additionsModel;
this.retractionsModel = retractionsModel;
this.additionsFile = new File(additionsFile);
if (!this.additionsFile.exists()) {
throw new RuntimeException(this.getClass().getName() +
" unable to create required file at " + additionsFile);
}
this.retractionsFile = new File(retractionsFile);
if (!this.retractionsFile.exists()) {
throw new RuntimeException(this.getClass().getName() +
" unable to create required file at " + retractionsFile);
}
}
public void recordAdditions(Model incrementalAdditions) {
additionsModel.add(incrementalAdditions);
write(additionsModel, additionsFile);
}
public void recordRetractions(Model incrementalRetractions) {
retractionsModel.add(incrementalRetractions);
write(retractionsModel, retractionsFile);
}
private void write(Model model, File file) {
try {
FileOutputStream fos = new FileOutputStream(file);
model.write(fos, RDF_SYNTAX);
} catch (FileNotFoundException fnfe) {
log.error(this.getClass().getName() +
" unable to write to RDF file", fnfe);
}
}
}

View file

@ -0,0 +1,5 @@
package edu.cornell.mannlib.vitro.webapp.ontology.update;
public class TBoxUpdater {
}