【问题标题】:How to check ABOX consistency using Hermit Reasoner如何使用 Hermit Reasoner 检查 ABOX 一致性
【发布时间】:2018-02-07 17:43:21
【问题描述】:

我正在尝试学习如何正确使用 OWLAPI,但遇到了一些麻烦: 我有一个构建活动的本体(例如个人和社会活动);我的目标是创建一个简单的不一致示例,以便使用此 API:我想声明足球是一项个人活动。 IndividualActivity 在 Protegè 中定义为 Equivalent to (Activity and (hasActor exactly 1 Person))

/// PIECE OF CODE ///

    OWLDataFactory df = Singleton_Ontologia.getFactory();

    IRI soccerIRI=IRI.create(Singleton_Ontologia.getIribase(),"Soccer");
    IRI paoloIRI = IRI.create(Singleton_Ontologia.getIribase(),"Paolo");
    IRI marcoIRI = IRI.create(Singleton_Ontologia.getIribase(),"Marco");

    OWLNamedIndividual soccer = df.getOWLNamedIndividual(soccerIRI);
    OWLNamedIndividual paolo = df.getOWLNamedIndividual(paoloIRI);
    OWLNamedIndividual marco = df.getOWLNamedIndividual(marcoIRI);

    OWLClass person = df.getOWLClass(
            IRI.create(Singleton_Ontologia.getIribase()+"Person"));

    OWLClass individual_activity = df.getOWLClass(
            IRI.create(Singleton_Ontologia.getIribase()+"IndividualActivity"));

    OWLObjectProperty hasActor = df.getOWLObjectProperty(
            IRI.create(Singleton_Ontologia.getIribase()+"hasActor"));

    OWLClassAssertionAxiom assertionAxiom = df.getOWLClassAssertionAxiom(individual_activity, soccer);
    OWLClassAssertionAxiom assertionAxiom2 = df.getOWLClassAssertionAxiom(person, paolo);
    OWLClassAssertionAxiom assertionAxiom3 = df.getOWLClassAssertionAxiom(person, marco);
    OWLObjectPropertyAssertionAxiom assertionAxiom4 = df.getOWLObjectPropertyAssertionAxiom(hasActor, soccer, paolo);
    OWLObjectPropertyAssertionAxiom assertionAxiom5 = df.getOWLObjectPropertyAssertionAxiom(hasActor, soccer, marco);

    Singleton_Ontologia.getManager().addAxiom(ontologiaattuale,assertionAxiom);
    Singleton_Ontologia.getManager().addAxiom(ontologiaattuale,assertionAxiom2);
    Singleton_Ontologia.getManager().addAxiom(ontologiaattuale,assertionAxiom3);
    Singleton_Ontologia.getManager().addAxiom(ontologiaattuale,assertionAxiom4);
    Singleton_Ontologia.getManager().addAxiom(ontologiaattuale,assertionAxiom5);

/// CONSISTENCY CHECK ///

System.out.println("Consistency:"+Singleton_Ontologia.getReasoner().isConsistent());

这是Hermit reasoner的配置:

public static void configReasoner() {
    iribase = "http://webmind.dico.unimi.it/CARE/locont.owl#";
    Configuration config=new Configuration();
    config.ignoreUnsupportedDatatypes=true; 
    factory = manager.getOWLDataFactory();
    reasonerFactory = new ReasonerFactory();
    reasoner = reasonerFactory.createReasoner(ont,config);
}

我创建个人 Paolo 和 Marco 是为了创建超过 1 个 PersonActorsSoccerisConsistent() 方法仍然返回 true 而我期望一个 false 值。 另外,我打印了ABOX内容:

___________ABOX___________


/////////////////////// OBJECT number 1 ///////////////////////
ClassAssertion(<http://webmind.dico.unimi.it/CARE/locont.owl#IndividualActivity> <http://webmind.dico.unimi.it/CARE/locont.owl#Soccer>)

/////////////////////// OBJECT number 2 ///////////////////////
ClassAssertion(<http://webmind.dico.unimi.it/CARE/locont.owl#Person> <http://webmind.dico.unimi.it/CARE/locont.owl#Paolo>)

/////////////////////// OBJECT number 3 ///////////////////////
ObjectPropertyAssertion(<http://webmind.dico.unimi.it/CARE/locont.owl#hasActor> <http://webmind.dico.unimi.it/CARE/locont.owl#Soccer> <http://webmind.dico.unimi.it/CARE/locont.owl#Paolo>)

/////////////////////// OBJECT number 4 ///////////////////////
ObjectPropertyAssertion(<http://webmind.dico.unimi.it/CARE/locont.owl#hasActor > <http://webmind.dico.unimi.it/CARE/locont.owl#Soccer> <http://webmind.dico.unimi.it/CARE/locont.owl#Marco>)

/////////////////////// OBJECT number 5 ///////////////////////
ClassAssertion(<http://webmind.dico.unimi.it/CARE/locont.owl#Person> <http://webmind.dico.unimi.it/CARE/locont.owl#Marco>)

___________END_ABOX___________

老实说,我不明白我的错误在哪里,有人可以帮助我吗?

【问题讨论】:

  • 开放世界假设。必须声明个体不同,否则总会有一个模型,其中所有个体都是sameAs,并且exactly 1 限制成立。
  • 看来OWLDifferentIndividualsAxiom不足以解决问题
  • 更新:我在 Protegè 上重新创建了相同的问题并且它有效,我的意思是,它说它与我预期的不一致;这意味着问题出在Java中,也许我做错了什么?
  • 在代码中,您将在创建推理器后对本体进行更改。您需要在更改完成后刷新推理器,否则它不会看到更新。
  • 好的!它终于奏效了!伊格纳齐奥,非常感谢您的帮助!

标签: ontology consistency owl-api reasoning hermit


【解决方案1】:

您需要指定 Marco 和 Paolo 是不同的个体。如果没有这个公理,没有什么能阻止它们成为同一个并保持本体一致。

【讨论】:

  • 我通过OWLDifferentIndividualsAxiom 做了你所说的,但它说它仍然一致......
  • 查看我的其他评论。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-11
  • 1970-01-01
  • 1970-01-01
  • 2016-09-28
相关资源
最近更新 更多