From da8a7f3649e777e19a4dcaff04be4ef5db2b5571 Mon Sep 17 00:00:00 2001 From: bjl23 Date: Wed, 31 Mar 2010 16:29:46 +0000 Subject: [PATCH] infrastructure for NIHVIVO-205 ontology upgrade --- .../webapp/ontology/update/ABoxUpdater.java | 31 ++++++++++ .../ontology/update/OntologyChangeLogger.java | 13 ++++ .../ontology/update/OntologyChangeRecord.java | 11 ++++ .../ontology/update/OntologyUpdater.java | 39 +++++++++++- .../update/SimpleOntologyChangeLogger.java | 44 +++++++++++++ .../update/SimpleOntologyChangeRecord.java | 61 +++++++++++++++++++ .../webapp/ontology/update/TBoxUpdater.java | 5 ++ 7 files changed, 202 insertions(+), 2 deletions(-) create mode 100644 webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/ABoxUpdater.java create mode 100644 webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/OntologyChangeLogger.java create mode 100644 webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/OntologyChangeRecord.java create mode 100644 webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/SimpleOntologyChangeLogger.java create mode 100644 webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/SimpleOntologyChangeRecord.java create mode 100644 webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/TBoxUpdater.java diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/ABoxUpdater.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/ABoxUpdater.java new file mode 100644 index 000000000..b9bd8c2c0 --- /dev/null +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/ABoxUpdater.java @@ -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 changes) { + + } + + public void processPropertyChanges(List changes) { + + } + + +} diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/OntologyChangeLogger.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/OntologyChangeLogger.java new file mode 100644 index 000000000..e7c189884 --- /dev/null +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/OntologyChangeLogger.java @@ -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; + +} diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/OntologyChangeRecord.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/OntologyChangeRecord.java new file mode 100644 index 000000000..885a21d09 --- /dev/null +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/OntologyChangeRecord.java @@ -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); + +} diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/OntologyUpdater.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/OntologyUpdater.java index 475cb03c1..68e3000b2 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/OntologyUpdater.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/OntologyUpdater.java @@ -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 changes = getAtomicOntologyChanges(); + List 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 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 atomicClassChanges; + + private List atomicPropertyChanges; + + public AtomicOntologyChangeLists( + List 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 getAtomicClassChanges() { + return atomicClassChanges; + } + + public List getAtomicPropertyChanges() { + return atomicPropertyChanges; + } + + } } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/SimpleOntologyChangeLogger.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/SimpleOntologyChangeLogger.java new file mode 100644 index 000000000..465880180 --- /dev/null +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/SimpleOntologyChangeLogger.java @@ -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(); + } + +} diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/SimpleOntologyChangeRecord.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/SimpleOntologyChangeRecord.java new file mode 100644 index 000000000..030800d87 --- /dev/null +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/SimpleOntologyChangeRecord.java @@ -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); + } + } + +} diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/TBoxUpdater.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/TBoxUpdater.java new file mode 100644 index 000000000..2d73cf54a --- /dev/null +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/TBoxUpdater.java @@ -0,0 +1,5 @@ +package edu.cornell.mannlib.vitro.webapp.ontology.update; + +public class TBoxUpdater { + +}