【问题标题】:Removing a data property value OWL API删除数据属性值 OWL API
【发布时间】: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() 并单独处理每个值是没有意义的。

标签: java owl ontology owl-api


【解决方案1】:
df.getOWLDataPropertyAssertionAxiom(shareLocation, user, `
      r.getDataPropertyValues(user, shareLocation).toString());

此代码的目的是创建一个与您希望删除的公理相同的公理,但它不是使用您希望删除的数据属性的原始值,而是使用返回值的toString() 结果,这与您希望使用的文字(或文字)不同。这就是为什么没有删除旧公理的原因 - 您正在尝试删除本体中不存在的公理。

【讨论】:

    猜你喜欢
    • 2014-05-14
    • 2014-03-26
    • 1970-01-01
    • 1970-01-01
    • 2017-06-23
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    相关资源
    最近更新 更多