Incremental development for NIHVIVO-1286.
This commit is contained in:
parent
13c61759b6
commit
23b0487c4a
2 changed files with 58 additions and 35 deletions
|
@ -403,9 +403,6 @@ public class ABoxUpdater {
|
||||||
// if the newly added property has an inverse in the new TBox, then for all existing
|
// 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
|
// ABox statements involving that inverse (if the inverse is new also there won't be
|
||||||
// any) add the corresponding statement with the new property.
|
// any) add the corresponding statement with the new property.
|
||||||
//
|
|
||||||
// Shouldn't a reasoner be doing this?
|
|
||||||
|
|
||||||
|
|
||||||
OntProperty inverseOfAddedProperty = addedProperty.getInverseOf();
|
OntProperty inverseOfAddedProperty = addedProperty.getInverseOf();
|
||||||
|
|
||||||
|
@ -419,8 +416,17 @@ public class ABoxUpdater {
|
||||||
while (iter.hasNext()) {
|
while (iter.hasNext()) {
|
||||||
|
|
||||||
Statement stmt = iter.next();
|
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);
|
aboxModel.add(additions);
|
||||||
|
@ -474,17 +480,21 @@ public class ABoxUpdater {
|
||||||
}
|
}
|
||||||
|
|
||||||
OntProperty replacementProperty = null;
|
OntProperty replacementProperty = null;
|
||||||
OntProperty parent = deletedProperty.getSuperProperty();
|
|
||||||
|
|
||||||
if (parent != null) {
|
if (!propObj.getNotes().equals("Delete")) {
|
||||||
replacementProperty = newTboxModel.getOntProperty(parent.getURI());
|
|
||||||
|
|
||||||
while (replacementProperty == null) {
|
OntProperty parent = deletedProperty.getSuperProperty();
|
||||||
parent = parent.getSuperProperty();
|
|
||||||
if (parent == null) {
|
if (parent != null) {
|
||||||
break;
|
replacementProperty = newTboxModel.getOntProperty(parent.getURI());
|
||||||
}
|
|
||||||
replacementProperty = newTboxModel.getOntProperty(parent.getURI());
|
while (replacementProperty == null) {
|
||||||
|
parent = parent.getSuperProperty();
|
||||||
|
if (parent == null) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
replacementProperty = newTboxModel.getOntProperty(parent.getURI());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -574,6 +584,13 @@ public class ABoxUpdater {
|
||||||
: ((Resource)statement.getObject()).getURI()));
|
: ((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.
|
* Update a knowledge base to account for a class deletion in the ontology.
|
||||||
|
|
|
@ -149,38 +149,39 @@ public class DateTimeMigration {
|
||||||
} else if (yPrecisionURI.equals(precision)) {
|
} else if (yPrecisionURI.equals(precision)) {
|
||||||
try {
|
try {
|
||||||
date = yearFormat.parse(stmt.getObject().asLiteral().getLexicalForm());
|
date = yearFormat.parse(stmt.getObject().asLiteral().getLexicalForm());
|
||||||
|
newStmt = ResourceFactory.createStatement(stmt.getSubject(), stmt.getPredicate(), getDateTimeLiteral(date) );
|
||||||
} catch (ParseException pe) {
|
} catch (ParseException pe) {
|
||||||
logger.log("Parse Exception for year literal: " + stmt.getObject().asLiteral().getLexicalForm() + ". skipping statement.");
|
logger.log("Parse Exception for year 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 (ymPrecisionURI.equals(precision)) {
|
} else if (ymPrecisionURI.equals(precision)) {
|
||||||
try {
|
try {
|
||||||
date = yearMonthFormat.parse(stmt.getObject().asLiteral().getLexicalForm());
|
date = yearMonthFormat.parse(stmt.getObject().asLiteral().getLexicalForm());
|
||||||
|
newStmt = ResourceFactory.createStatement(stmt.getSubject(), stmt.getPredicate(), getDateTimeLiteral(date) );
|
||||||
} catch (ParseException pe) {
|
} 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)) {
|
} else if (ymdPrecisionURI.equals(precision)) {
|
||||||
try {
|
try {
|
||||||
date = yearMonthDayFormat.parse(stmt.getObject().asLiteral().getLexicalForm());
|
date = yearMonthDayFormat.parse(stmt.getObject().asLiteral().getLexicalForm());
|
||||||
|
newStmt = ResourceFactory.createStatement(stmt.getSubject(), stmt.getPredicate(), getDateTimeLiteral(date) );
|
||||||
} catch (ParseException pe) {
|
} catch (ParseException pe) {
|
||||||
logger.log("Parse Exception for year literal: " + stmt.getObject().asLiteral().getLexicalForm() + ". skipping statement.");
|
logger.log("Parse Exception for yearMonthDay 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 (ymdtPrecisionURI.equals(precision)) {
|
} 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 {
|
} 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 ) {
|
if (newStmt != null ) {
|
||||||
additions.add(newStmt);
|
additions.add(newStmt);
|
||||||
retractions.add(stmt);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -217,7 +218,6 @@ public class DateTimeMigration {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static Literal getDateTimeLiteral(Date date) {
|
public static Literal getDateTimeLiteral(Date date) {
|
||||||
|
|
||||||
// Note this loses time zone info, don't know how get parser to extract that
|
// Note this loses time zone info, don't know how get parser to extract that
|
||||||
|
@ -227,6 +227,12 @@ public class DateTimeMigration {
|
||||||
cal.setTime(date);
|
cal.setTime(date);
|
||||||
XSDDateTime dt = new XSDDateTime(cal);
|
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)");
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Add table
Reference in a new issue