0

我有一个个体a和 6 个类(A、B、C、D、E、F)的本体。个体属于以下析取:(A 或 B;C 或 D;E 或 F)。

有某种方法我怎么能从每个析取中推断出一个人必须属于两个类别之一?我试图创建一种状态,在这种状态下,来自本体的所有断言都将得到满足。例如a属于A, C, F。但是使用来自owlapi的推理函数getTypes是不可能的,因为它返回空的NodeSet。

ontologyManager = OWLManager.createOWLOntologyManager();
ontology = ontologyManager.loadOntologyFromOntologyDocument(new File(Configuration.ONTOLOGY));
OWLReasonerFactory reasonerFactory = new OpenlletReasonerFactory();
reasoner = reasonerFactory.createReasoner(ontology);
reasoner.getTypes(ind, false).getNodes()

我也尝试过 Hermit (ReasonerFactory()) 和 jFact (JFactFactory())。

我也尝试了以下方法:

Set<OWLClassExpression> ontologyTypes = EntitySearcher.getTypes(ind, ontology).collect(toSet());

但这只会返回 ObjectUnionOf 形式的 ClassExpression ,这无济于事,因为我需要原子类。

我知道推理器在这个函数中推断出个人总是属于的类。但是有什么方法可以从析取中决定它应该属于哪些类?我需要为任何本体构建一些模型,但我在推理器中找不到任何应该执行此操作或类似操作的函数。

4

1 回答 1

0

Set ontologyTypes = EntitySearcher.getTypes(ind, ontology).collect(toSet());

返回的OWLObjectUnionOf元素对应(A or B)于您的问题中提到的析取。可以通过使用 OWLObjectVisitor 访问元素或调用元素来获得类名getSignature()。哪种方法合适取决于您之后需要做什么。

于 2022-01-07T21:03:48.437 回答