我正在使用耶拿。我想知道是否有一种方法允许修改或删除实例的属性值?
由于
答案 0 :(得分:4)
根据设计,耶拿的陈述是不可改变的。要更改某个主题p
的属性s
的值,您需要添加具有相同主题和谓词的新语句,并删除旧语句。这在耶拿总是如此,即使API有时会隐藏这一点。例如,OntResource
及其子类具有各种setProperty
变体,但是在这些变体的基础上,它们执行相同的add-the-new-triple-and-delete-the-old进程。
答案 1 :(得分:2)
这取决于您使用的Jena API。例如,如果您使用的是Jena 3.0和Model
API,则可以使用Model.remove(Statement)
通过为Statement选择适当的主题/谓词/对象来删除属性。可以通过删除旧版本的Statement并添加新版本来实现修改。
答案 2 :(得分:0)
要仅删除语句本身,即实例与属性值之间的关系,您可以使用: OntResource.removeProperty(Property, RDFNode)
如果要完全删除属性值,即值及其与之关系,可以使用:OntResource.remove()
答案 3 :(得分:0)
我有类似的任务:我需要删除具有指定值的属性。希望以下代码片段可以帮助某人。
public void removeLabel(String language, String value) {
NodeIterator nodeIterator = resource.getModel().listObjectsOfProperty(RDFS.label);
RDFNode foundToDelete = null;
while (nodeIterator.hasNext()) {
RDFNode next = nodeIterator.next();
boolean langsAreIdentical = next.asLiteral().getLanguage().equals(language);
boolean valuesAreIdentical = next.asLiteral().getLexicalForm().equals(value);
if (langsAreIdentical && valuesAreIdentical) {
foundToDelete = next;
break;
}
}
resource.getModel().remove(resource, RDFS.label, foundToDelete);
}