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 index 3222cb60c..12df3d3f8 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/ABoxUpdater.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/ABoxUpdater.java @@ -96,7 +96,11 @@ public class ABoxUpdater { addClass(change); break; case DELETE: - deleteClass(change); + if ("Delete".equals(change.getNotes())) { + deleteClass(change); + } else { + renameClassToParent(change); + } break; case RENAME: renameClass(change); @@ -275,6 +279,62 @@ public class ABoxUpdater { } } + /** + * + * Update a knowledge base to account for a class deletion in the ontology. + * All references to the deleted class URI in either the subject or the object + * position of a statement are changed to use the closest available parent of + * the deleted class from the previous ontology that remains in the new version + * of the ontology. Note that the closest available parent may be owl:Thing. + * If the deleted class has more than one closest available parent, then + * change individuals that were asserted to be of the deleted class to be + * asserted to be of both parent classes. + * + * @param change - an AtomicOntologyChange object representing a class + * delete operation. + * + */ + public void renameClassToParent(AtomicOntologyChange change) throws IOException { + + logger.log("Processing a class migration to parent for deleted class " + change.getSourceURI()); + + OntClass deletedClass = oldTboxModel.getOntClass(change.getSourceURI()); + + if (deletedClass == null) { + logger.log("WARNING: didn't find the deleted class " + change.getSourceURI() + " in the old model. Skipping updates for this deletion"); + return; + } + + List classList = deletedClass.listSuperClasses(true).toList(); + List namedClassList = new ArrayList(); + for (OntClass ontClass : classList) { + if (!ontClass.isAnon()) { + namedClassList.add(ontClass); + } + } + + OntClass parent = (!namedClassList.isEmpty()) + ? namedClassList.get(0) + : OWL_THING; + + OntClass replacementClass = newTboxModel.getOntClass(parent.getURI()); + + while (replacementClass == null) { + parent = parent.getSuperClass(); + + if (parent == null) { + replacementClass = OWL_THING; + } else { + replacementClass = newTboxModel.getOntClass(parent.getURI()); + } + } + + //log summary of changes + logger.log("Class " + deletedClass.getURI() + " has been deleted. Any references to it in the knowledge base have been changed to " + replacementClass.getURI()); + + AtomicOntologyChange chg = new AtomicOntologyChange(deletedClass.getURI(), replacementClass.getURI(), AtomicChangeType.RENAME, change.getNotes()); + renameClass(chg); + } /** * @@ -587,60 +647,4 @@ public class ABoxUpdater { : ((Resource)statement.getObject()).getURI() + " (Resource)"); } - /** - * - * Update a knowledge base to account for a class deletion in the ontology. - * All references to the deleted class URI in either the subject or the object - * position of a statement are changed to use the closest available parent of - * the deleted class from the previous ontology that remains in the new version - * of the ontology. Note that the closest available parent may be owl:Thing. - * If the deleted class has more than one closest available parent, then - * change individuals that were asserted to be of the deleted class to be - * asserted to be of both parent classes. - * - * @param change - an AtomicOntologyChange object representing a class - * delete operation. - * - */ - public void obsolete_deleteClass(AtomicOntologyChange change) throws IOException { - - logger.log("Processing a class deletion of class " + change.getSourceURI()); - - OntClass deletedClass = oldTboxModel.getOntClass(change.getSourceURI()); - - if (deletedClass == null) { - logger.log("WARNING: didn't find the deleted class " + change.getSourceURI() + " in the old model. Skipping updates for this deletion"); - return; - } - - List classList = deletedClass.listSuperClasses(true).toList(); - List namedClassList = new ArrayList(); - for (OntClass ontClass : classList) { - if (!ontClass.isAnon()) { - namedClassList.add(ontClass); - } - } - - OntClass parent = (!namedClassList.isEmpty()) - ? namedClassList.get(0) - : OWL_THING; - - OntClass replacementClass = newTboxModel.getOntClass(parent.getURI()); - - while (replacementClass == null) { - parent = parent.getSuperClass(); - - if (parent == null) { - replacementClass = OWL_THING; - } else { - replacementClass = newTboxModel.getOntClass(parent.getURI()); - } - } - - //log summary of changes - logger.log("Class " + deletedClass.getURI() + " has been deleted. Any references to it in the knowledge base have been changed to " + replacementClass.getURI()); - - AtomicOntologyChange chg = new AtomicOntologyChange(deletedClass.getURI(), replacementClass.getURI(), AtomicChangeType.RENAME, change.getNotes()); - renameClass(chg); - } } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/DateTimeMigration.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/DateTimeMigration.java index 606b9f4ea..1fe7b699d 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/DateTimeMigration.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/DateTimeMigration.java @@ -117,7 +117,7 @@ public class DateTimeMigration { if (additions.size() > 0) { long count = additions.size() / 2; - logger.log(count + "Academic Term and/or Year statement" + ((count > 1) ? "s" : "") + " were updated to use dateTimeInterval instead"); + logger.log(count + "Academic Term and/or Year assertion" + ((count > 1) ? "s" : "") + " were updated to use dateTimeInterval instead"); } } finally { aboxModel.leaveCriticalSection(); @@ -130,7 +130,7 @@ public class DateTimeMigration { */ public void updateLiterals() throws IOException { - // note: not handling timezones - they are not expected to be in the 1.1.1 data + //TODO: look into java locale note: not handling timezones - they are not expected to be in the 1.1.1 data DateFormat yearFormat = new SimpleDateFormat("yyyy"); DateFormat yearMonthFormat = new SimpleDateFormat("yyyy-mm"); DateFormat yearMonthDayFormat = new SimpleDateFormat("yyyy-mm-dd"); @@ -196,7 +196,7 @@ public class DateTimeMigration { record.recordAdditions(additions); if (additions.size() > 0) { - logger.log(additions.size() + " date/time assertions" + + logger.log(additions.size() + " date/time assertion" + ((additions.size() > 1) ? "s" : "") + " were updated to the 1.2 representation."); } 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 a4dc25aef..f0594a5fe 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 @@ -81,8 +81,7 @@ public class OntologyUpdater { performSparqlConstructAdditions(settings.getSparqlConstructAdditionsDir(), settings.getOntModelSelector().getABoxModel()); performSparqlConstructRetractions(settings.getSparqlConstructDeletionsDir(), settings.getOntModelSelector().getABoxModel()); - performSparqlConstructAdditions(settings.getSparqlConstructAdditionsPass2Dir(), settings.getOntModelSelector().getABoxModel()); - + DateTimeMigration dtMigration = new DateTimeMigration(settings.getOntModelSelector().getABoxModel(), logger, record); dtMigration.updateABox();