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 d994e3c9a..505df5d9d 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 @@ -403,9 +403,6 @@ public class ABoxUpdater { // if the newly added property has an inverse in the new TBox, then for all existing // ABox statements involving that inverse (if the inverse is new also there won't be // any) add the corresponding statement with the new property. - // - // Shouldn't a reasoner be doing this? - OntProperty inverseOfAddedProperty = addedProperty.getInverseOf(); @@ -419,8 +416,17 @@ public class ABoxUpdater { while (iter.hasNext()) { Statement stmt = iter.next(); - Statement newStmt = ResourceFactory.createStatement(stmt.getObject().asResource(), addedProperty, stmt.getSubject()); - additions.add(newStmt); + + if (stmt.getObject().isResource()) { + Statement newStmt = ResourceFactory.createStatement(stmt.getObject().asResource(), addedProperty, stmt.getSubject()); + additions.add(newStmt); + } else { + logger.log("WARNING: expected the object of this statement to be a Resource, and it's not. No inverse has been asserted: " + + " subject = " + stmt.getSubject().getURI() + + " property = " + stmt.getPredicate().getURI() + + " object = " + (stmt.getObject().isLiteral() ? ((Literal)stmt.getObject()).getLexicalForm() + : ((Resource)stmt.getObject()).getURI())); + } } aboxModel.add(additions); @@ -474,18 +480,22 @@ public class ABoxUpdater { } OntProperty replacementProperty = null; - OntProperty parent = deletedProperty.getSuperProperty(); - if (parent != null) { - replacementProperty = newTboxModel.getOntProperty(parent.getURI()); + if (!propObj.getNotes().equals("Delete")) { + + OntProperty parent = deletedProperty.getSuperProperty(); - while (replacementProperty == null) { - parent = parent.getSuperProperty(); - if (parent == null) { - break; - } - replacementProperty = newTboxModel.getOntProperty(parent.getURI()); - } + if (parent != null) { + replacementProperty = newTboxModel.getOntProperty(parent.getURI()); + + while (replacementProperty == null) { + parent = parent.getSuperProperty(); + if (parent == null) { + break; + } + replacementProperty = newTboxModel.getOntProperty(parent.getURI()); + } + } } Model deletePropModel = ModelFactory.createDefaultModel(); @@ -574,6 +584,13 @@ public class ABoxUpdater { : ((Resource)statement.getObject()).getURI())); } + public static String stmtString(Statement statement) { + return " subject = " + statement.getSubject().getURI() + + " property = " + statement.getPredicate().getURI() + + " object = " + (statement.getObject().isLiteral() ? ((Literal)statement.getObject()).getLexicalForm() + " (Literal)" + : ((Resource)statement.getObject()).getURI() + " (Resource)"); + } + /** * * Update a knowledge base to account for a class deletion in the ontology. 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 a2a2c5bf8..438ee5fdf 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 @@ -149,38 +149,39 @@ public class DateTimeMigration { } else if (yPrecisionURI.equals(precision)) { try { date = yearFormat.parse(stmt.getObject().asLiteral().getLexicalForm()); + newStmt = ResourceFactory.createStatement(stmt.getSubject(), stmt.getPredicate(), getDateTimeLiteral(date) ); } catch (ParseException pe) { - logger.log("Parse Exception for year literal: " + stmt.getObject().asLiteral().getLexicalForm() + ". skipping statement."); - } - - newStmt = ResourceFactory.createStatement(stmt.getSubject(), stmt.getPredicate(), getDateTimeLiteral(date) ); - + logger.log("Parse Exception for year literal: " + stmt.getObject().asLiteral().getLexicalForm() + + ". The following statement has been removed from the knowledge base " + stmtString(stmt)); + } } else if (ymPrecisionURI.equals(precision)) { try { date = yearMonthFormat.parse(stmt.getObject().asLiteral().getLexicalForm()); + newStmt = ResourceFactory.createStatement(stmt.getSubject(), stmt.getPredicate(), getDateTimeLiteral(date) ); } catch (ParseException pe) { - logger.log("Parse Exception for year literal: " + stmt.getObject().asLiteral().getLexicalForm() + ". skipping statement."); + logger.log("Parse Exception for yearMonth literal: " + stmt.getObject().asLiteral().getLexicalForm() + + ". The following statement has been removed from the knowledge base " + stmtString(stmt)); } - - newStmt = ResourceFactory.createStatement(stmt.getSubject(), stmt.getPredicate(), getDateTimeLiteral(date) ); } else if (ymdPrecisionURI.equals(precision)) { try { date = yearMonthDayFormat.parse(stmt.getObject().asLiteral().getLexicalForm()); + newStmt = ResourceFactory.createStatement(stmt.getSubject(), stmt.getPredicate(), getDateTimeLiteral(date) ); } catch (ParseException pe) { - logger.log("Parse Exception for year literal: " + stmt.getObject().asLiteral().getLexicalForm() + ". skipping statement."); - } - - newStmt = ResourceFactory.createStatement(stmt.getSubject(), stmt.getPredicate(), getDateTimeLiteral(date) ); - + logger.log("Parse Exception for yearMonthDay literal: " + stmt.getObject().asLiteral().getLexicalForm() + + ". The following statement has been removed from the knowledge base " + stmtString(stmt)); + } } else if (ymdtPrecisionURI.equals(precision)) { - logger.log("WARNING: unhandled precision found for individual " + stmt.getSubject().getURI() + ": " + precision ); + logger.log("WARNING: unhandled precision found for individual " + stmt.getSubject().getURI() + ": " + precision + + ". The following statement has been removed from the knowledge base " + stmtString(stmt)); } else { - logger.log("WARNING: unrecognized precision found for individual " + stmt.getSubject().getURI() + ": " + precision ); + logger.log("WARNING: unrecognized precision found for individual " + stmt.getSubject().getURI() + ": " + precision + + ". The following statement has been removed from the knowledge base " + stmtString(stmt)); } - + + retractions.add(stmt); + if (newStmt != null ) { additions.add(newStmt); - retractions.add(stmt); } } @@ -217,7 +218,6 @@ public class DateTimeMigration { } } - public static Literal getDateTimeLiteral(Date date) { // Note this loses time zone info, don't know how get parser to extract that @@ -226,7 +226,13 @@ public class DateTimeMigration { Calendar cal = Calendar.getInstance(); cal.setTime(date); XSDDateTime dt = new XSDDateTime(cal); - return ResourceFactory.createTypedLiteral(dt); - + return ResourceFactory.createTypedLiteral(dt); } + + public static String stmtString(Statement statement) { + return " subject = " + statement.getSubject().getURI() + + " property = " + statement.getPredicate().getURI() + + " object = " + (statement.getObject().isLiteral() ? ((Literal)statement.getObject()).getLexicalForm() + " (Literal)" + : ((Resource)statement.getObject()).getURI() + " (Resource)"); + } } \ No newline at end of file