changes related to NIHVIVO-264 ABox update

This commit is contained in:
bjl23 2010-04-01 15:27:10 +00:00
parent 0f5fdf84de
commit 622f75e118
2 changed files with 86 additions and 50 deletions

View file

@ -179,8 +179,7 @@ public class ABoxUpdater {
*/ */
public void addClass(AtomicOntologyChange change) throws IOException { public void addClass(AtomicOntologyChange change) throws IOException {
//TODO - is sourceURI the right thing here? OntClass addedClass = newTboxModel.getOntClass(change.getDestinationURI());
OntClass addedClass = newTboxModel.getOntClass(change.getSourceURI());
if (addedClass == null) { if (addedClass == null) {
// TODO - log // TODO - log
@ -244,7 +243,6 @@ public class ABoxUpdater {
OntClass replacementClass = newTboxModel.getOntClass(parent.getURI()); OntClass replacementClass = newTboxModel.getOntClass(parent.getURI());
while (replacementClass == null) { while (replacementClass == null) {
//ditto
parent = parent.getSuperClass(); parent = parent.getSuperClass();
replacementClass = newTboxModel.getOntClass(parent.getURI()); replacementClass = newTboxModel.getOntClass(parent.getURI());
} }
@ -254,16 +252,15 @@ public class ABoxUpdater {
} }
public void processPropertyChanges(List<AtomicOntologyChange> changes) throws IOException { public void processPropertyChanges(List<AtomicOntologyChange> changes) throws IOException {
Iterator propItr = changes.iterator(); Iterator<AtomicOntologyChange> propItr = changes.iterator();
while(propItr.hasNext()){ while(propItr.hasNext()){
AtomicOntologyChange propChangeObj = (AtomicOntologyChange) AtomicOntologyChange propChangeObj = propItr.next();
propItr.next();
switch (propChangeObj.getAtomicChangeType()){ switch (propChangeObj.getAtomicChangeType()){
case ADD: addProperties(propChangeObj); case ADD: addProperty(propChangeObj);
break; break;
case DELETE: deleteProperties(propChangeObj); case DELETE: deleteProperty(propChangeObj);
break; break;
case RENAME: renameProperties(propChangeObj); case RENAME: renameProperty(propChangeObj);
break; break;
default: logger.logError("Property change can't be null"); default: logger.logError("Property change can't be null");
break; break;
@ -271,64 +268,101 @@ public class ABoxUpdater {
} }
} }
private void addProperties(AtomicOntologyChange propObj) throws IOException{ private void addProperty(AtomicOntologyChange propObj) throws IOException{
Statement tempStatement = null;
OntProperty tempProperty = newTboxModel.getOntProperty OntProperty tempProperty = newTboxModel.getOntProperty
(propObj.getDestinationURI()).getSuperProperty(); (propObj.getDestinationURI()).getSuperProperty();
StmtIterator stmItr = aboxModel.listStatements(); if (tempProperty == null) {
int count = 0; return;
while(stmItr.hasNext()){
tempStatement = stmItr.nextStatement();
if(tempStatement.getPredicate().getURI().
equalsIgnoreCase(tempProperty.getURI())){
count++;
}
} }
int count = aboxModel.listStatements(
(Resource) null, tempProperty, (RDFNode) null).toSet().size();
logger.log("The Property " + tempProperty.getURI() + logger.log("The Property " + tempProperty.getURI() +
"which occurs " + count + "times in database has " + "which occurs " + count + "times in database has " +
"a new subProperty " + propObj.getDestinationURI() + "a new subProperty " + propObj.getDestinationURI() +
"added to Core 1.0"); "added to Core 1.0");
logger.log("Please review accordingly"); logger.log("Please review accordingly");
} }
private void deleteProperties(AtomicOntologyChange propObj) throws IOException{
private void deleteProperty(AtomicOntologyChange propObj) throws IOException{
OntProperty deletedProperty = oldTboxModel.getOntProperty(propObj.getSourceURI());
if (deletedProperty == null) {
// TODO - log
return;
}
OntProperty parent = deletedProperty.getSuperProperty();
OntProperty replacementProperty = newTboxModel.getOntProperty(parent.getURI());
while (replacementProperty == null) {
parent = parent.getSuperProperty();
if (parent == null) {
break;
}
replacementProperty = newTboxModel.getOntProperty(parent.getURI());
}
OntModel deletePropModel = ModelFactory.createOntologyModel(); OntModel deletePropModel = ModelFactory.createOntologyModel();
Statement tempStatement = null;
StmtIterator stmItr = aboxModel.listStatements(); if (replacementProperty == null) {
while(stmItr.hasNext()){ aboxModel.enterCriticalSection(Lock.WRITE);
tempStatement = stmItr.nextStatement(); try {
if(tempStatement.getPredicate().getURI().equalsIgnoreCase deletePropModel.add(aboxModel.listStatements(
(propObj.getSourceURI())){ (Resource) null, deletedProperty, (RDFNode) null));
deletePropModel.add(tempStatement); aboxModel.remove(deletePropModel);
} finally {
aboxModel.leaveCriticalSection();
} }
}
aboxModel = (OntModel) aboxModel.difference(deletePropModel);
record.recordRetractions(deletePropModel); record.recordRetractions(deletePropModel);
logger.log("All statements using " + propObj.getSourceURI() + logger.log(deletePropModel.size() + " statements using " +
"were removed. Please refer removed data model"); propObj.getSourceURI() + " were removed. " +
" Please refer to the removed data model");
} else {
AtomicOntologyChange chg = new AtomicOntologyChange(deletedProperty.getURI(), replacementProperty.getURI(), AtomicChangeType.RENAME);
renameProperty(chg);
} }
private void renameProperties(AtomicOntologyChange propObj){
}
private void renameProperty(AtomicOntologyChange propObj) throws IOException {
OntProperty oldProperty = oldTboxModel.getOntProperty(propObj.getSourceURI());
OntProperty newProperty = newTboxModel.getOntProperty(propObj.getDestinationURI());
if (oldProperty == null || newProperty == null) {
// TODO - log
return;
}
Model renamePropAddModel = ModelFactory.createDefaultModel(); Model renamePropAddModel = ModelFactory.createDefaultModel();
Model renamePropRetractModel = Model renamePropRetractModel =
ModelFactory.createDefaultModel(); ModelFactory.createDefaultModel();
Statement tempStatement = null;
Property tempProperty = null; aboxModel.enterCriticalSection(Lock.WRITE);
StmtIterator stmItr = aboxModel.listStatements(); try {
renamePropRetractModel.add( aboxModel.listStatements(
(Resource) null, oldProperty, (RDFNode) null));
StmtIterator stmItr = renamePropRetractModel.listStatements();
while(stmItr.hasNext()) { while(stmItr.hasNext()) {
tempStatement = stmItr.nextStatement(); Statement tempStatement = stmItr.nextStatement();
if(tempStatement.getPredicate().getURI().
equalsIgnoreCase(propObj.getSourceURI())){
tempProperty = ResourceFactory.createProperty(
propObj.getDestinationURI());
aboxModel.remove(tempStatement);
renamePropRetractModel.add(tempStatement);
aboxModel.add(tempStatement.getSubject(),tempProperty
,tempStatement.getObject());
renamePropAddModel.add( tempStatement.getSubject(), renamePropAddModel.add( tempStatement.getSubject(),
tempProperty,tempStatement.getObject()); newProperty,
tempStatement.getObject() );
} }
aboxModel.remove(renamePropRetractModel);
aboxModel.add(renamePropAddModel);
} finally {
aboxModel.leaveCriticalSection();
} }
record.recordAdditions(renamePropAddModel); record.recordAdditions(renamePropAddModel);
record.recordRetractions(renamePropRetractModel); record.recordRetractions(renamePropRetractModel);
logger.log(renamePropRetractModel.size() + " statments using " +
"property " + propObj.getSourceURI() + " were changed to use " +
propObj.getDestinationURI() + " instead. Please refer to the " +
"removed data model and the added data model.");
} }

View file

@ -27,10 +27,12 @@ public class SimpleOntologyChangeLogger implements OntologyChangeLogger {
public void log(String logMessage) throws IOException { public void log(String logMessage) throws IOException {
//TODO get calling method info from stack and include in message
logWriter.write(logMessage + "\n"); logWriter.write(logMessage + "\n");
} }
public void logError(String errorMessage) throws IOException { public void logError(String errorMessage) throws IOException {
//TODO get calling method info from stack and include in message
errorWriter.write(errorMessage + "\n"); errorWriter.write(errorMessage + "\n");
} }