当前位置: 首页 > 知识库问答 >
问题:

如何利用隐士推理器检查ABOX一致性

袁亦
2023-03-14

我试图学习如何正确地使用OWLAPI,但我遇到了一些麻烦:我有一个本体来构造活动(例如个人和社会活动);我的目标是创建一个简单的不一致性示例,以便使用这个API:我想声明足球是一个单独的活动。IndividualActivity在Protegé中定义等效于(Activity和(hasActor正好为1人))

/// 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是为了创建一个以上的Person作为SoccerActors,但是isconsistence()方法仍然返回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___________

老实说,我不明白我的错误在哪里,谁能帮助我吗?

共有1个答案

诸葛苏燕
2023-03-14

你需要指定马可和保罗是不同的个体。没有这个公理,没有什么可以阻止它们成为同一个,并保持本体论的一致性。

 类似资料:
  • 我想创建新的推理器(隐士)。 2)使用构造函数:[org.semanticweb.hermit.reasoner]

  • 我将OWLAPI与HermiT一起使用,除非在创建了推理器之后尝试修改本体,否则它是有效的。

  • 我想从reasoner[隐士]那里得到推断出的公理,以及它的适当解释。我在Protege中创建了以下本体论。 A.OWL 以下是我的Java代码:- 门生形象:-

  • 我通过Protege创建了以下本体。 本体: 我想运行HermiT reasoner获得推断的类层次结构及其解释。 1)[在Ontology中提供] 2)[在Ontology中提供] 我想像Protege一样获取数据。Protege分别显示推断出的公理及其解释。那么如何得到它们呢?(我添加了一些protege的截图供参考) 我的本体: 承担说明:

  • 我正在开发一个discord机器人,用于基本的调节功能,至少现在能做到,和。但问题是其他成员也可以使用它。我只需要几个特定的角色谁可以使用它。 也不想根据来处理它,因为不同服务器上的角色名称不相同。也想让机器人尽可能简单。 现在,我开始是这样的: 但是任何成员都可以使用这些命令。所以,尝试遵循这个=不和谐的许可系统。py Bot并以以下方式结束: 这让我犯了一个错误:;-; 另外,除了我不想只让具