【发布时间】:2021-03-27 18:36:11
【问题描述】:
我的 OWL API java 程序需要更改我的本体中的数据属性的值(用 protege 编写),所以我试图删除文件中已经存在的属性并添加一个新的公理,但它只添加了新的公理一、不删除任何东西。我做错了什么?
OWLEntityRemover remover = new OWLEntityRemover(o);
OWLDataPropertyAssertionAxiom oldOpt1 = df.getOWLDataPropertyAssertionAxiom(property1, user, r.getDataPropertyValues(user, property1).toString());
OWLDataPropertyAssertionAxiom oldOpt2 = df.getOWLDataPropertyAssertionAxiom(property2, user, r.getDataPropertyValues(user, property2).toString());
ArrayList<RemoveAxiom> oldOptions = new ArrayList<RemoveAxiom>();
oldOptions.add(new RemoveAxiom(o,oldOpt1));
oldOptions.add(new RemoveAxiom(o,oldOpt2));
man.applyChanges(oldOptions);
// Add new preference
OWLDataPropertyAssertionAxiom newOpt1= df.getOWLDataPropertyAssertionAxiom(property1, user, opt1);
OWLDataPropertyAssertionAxiom newOpt2= df.getOWLDataPropertyAssertionAxiom(property2, user, opt2);
man.addAxiom(o, newOpt1);
man.addAxiom(o, newOpt2);
try {
man.saveOntology(o);
} catch (OWLOntologyStorageException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
【问题讨论】:
-
r.getDataPropertyValues(user, shareLocation)应该返回所有值,因此,在其上调用toString()并单独处理每个值是没有意义的。