如何修改或删除属性值? - Jena API

时间:2011-08-14 11:45:48

标签: java awt rdf jena owl

我正在使用耶拿。我想知道是否有一种方法允许修改或删除实例的属性值?

由于

4 个答案:

答案 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);
    }