如何在 OWLAPI 中同步 reasoner
How to synchronize reasoner in OWLAPI
我得到了一个小的ontology个人。其中一些人应该通过对称 ObjectProperty
.
相互联系
我需要使用 Pellet reasoner,以便它可以同步并对称 ObjectProperty
附加到个体。
我使用 OWLAPI 创建 ontology。我创建 ObjectProperty
的代码是:
// create the OWLObjectProperty isLinkedTo
OWLObjectProperty isLinkedTo = factory.getOWLObjectProperty(IRI.create(ontologyIRI + "#" +hasLinkStr));
// create a set for the axioms (OPAS - Obj.Prop.Axioms Set)
Set<OWLAxiom> isLinkedOPAS = new HashSet<OWLAxiom>();
// add the OWLObjectProperty isLinkedTo to the set isLinkedOPAS
OWLNamedIndividual prevNamedInd = factory.getOWLNamedIndividual(prevIndividual, pm);
isLinkedOPAS.add(factory.getOWLSymmetricObjectPropertyAxiom(isLinkedTo));
//setting the object property for the current (namedInd) and previous (prevNamedInd)individuals
isLinkedOPAS.add(factory.getOWLObjectPropertyAssertionAxiom(isLinkedTo, namedInd, prevNamedInd));
manager.addAxioms(ontology, isLinkedOPAS);
个体是一个接一个地被创造出来的。每个下一个 isLinkedTo
前一个具有对称 属性.
然后,我开始推理,但我不确定我是否以正确的方式进行:
OWLReasoner reasoner = reasonerFactory.createReasoner(ontology, config);
// I am not sure which of these commands is necessary for checking the ObjectProperty assertions
reasoner.precomputeInferences();
reasoner.precomputeInferences(InferenceType.OBJECT_PROPERTY_ASSERTIONS);
reasoner.precomputeInferences(InferenceType.OBJECT_PROPERTY_HIERARCHY);
boolean consistent = reasoner.isConsistent();
System.out.println("Consistent: " + consistent);
当我在 Protege 中打开这个 ontology 时,它会向我显示个人,但不会 "connected" 与 ObjectProperty
isLinkedTo:
对称
在Protege中运行推理后才显示正确的方法:
所以问题是:我应该在代码中写什么才能获得推理机同步对象属性的ontology?
这三行:
reasoner.precomputeInferences();
reasoner.precomputeInferences(InferenceType.OBJECT_PROPERTY_ASSERTIONS);
reasoner.precomputeInferences(InferenceType.OBJECT_PROPERTY_HIERARCHY);
可以替换为:
reasoner.precomputeInferences(InferenceType.OBJECT_PROPERTY_ASSERTIONS,
InferenceType.OBJECT_PROPERTY_HIERARCHY);
但是,对于大多数推理者来说,这与以下内容没有什么不同:
reasoner.precomputeInferences(InferenceType.values());
为了在没有 运行 推理器的情况下查看推断的公理,您可以使用
org.semanticweb.owlapi.util.InferredPropertyAssertionGenerator
:
InferredPropertyAssertionGenerator generator = new InferredPropertyAssertionGenerator();
Set<OWLAxiom> axioms = generator.createAxioms(factory, reasoner);
这将提供推断的公理以添加到 ontology。
我得到了一个小的ontology个人。其中一些人应该通过对称 ObjectProperty
.
我需要使用 Pellet reasoner,以便它可以同步并对称 ObjectProperty
附加到个体。
我使用 OWLAPI 创建 ontology。我创建 ObjectProperty
的代码是:
// create the OWLObjectProperty isLinkedTo
OWLObjectProperty isLinkedTo = factory.getOWLObjectProperty(IRI.create(ontologyIRI + "#" +hasLinkStr));
// create a set for the axioms (OPAS - Obj.Prop.Axioms Set)
Set<OWLAxiom> isLinkedOPAS = new HashSet<OWLAxiom>();
// add the OWLObjectProperty isLinkedTo to the set isLinkedOPAS
OWLNamedIndividual prevNamedInd = factory.getOWLNamedIndividual(prevIndividual, pm);
isLinkedOPAS.add(factory.getOWLSymmetricObjectPropertyAxiom(isLinkedTo));
//setting the object property for the current (namedInd) and previous (prevNamedInd)individuals
isLinkedOPAS.add(factory.getOWLObjectPropertyAssertionAxiom(isLinkedTo, namedInd, prevNamedInd));
manager.addAxioms(ontology, isLinkedOPAS);
个体是一个接一个地被创造出来的。每个下一个 isLinkedTo
前一个具有对称 属性.
然后,我开始推理,但我不确定我是否以正确的方式进行:
OWLReasoner reasoner = reasonerFactory.createReasoner(ontology, config);
// I am not sure which of these commands is necessary for checking the ObjectProperty assertions
reasoner.precomputeInferences();
reasoner.precomputeInferences(InferenceType.OBJECT_PROPERTY_ASSERTIONS);
reasoner.precomputeInferences(InferenceType.OBJECT_PROPERTY_HIERARCHY);
boolean consistent = reasoner.isConsistent();
System.out.println("Consistent: " + consistent);
当我在 Protege 中打开这个 ontology 时,它会向我显示个人,但不会 "connected" 与 ObjectProperty
isLinkedTo:
在Protege中运行推理后才显示正确的方法:
所以问题是:我应该在代码中写什么才能获得推理机同步对象属性的ontology?
这三行:
reasoner.precomputeInferences();
reasoner.precomputeInferences(InferenceType.OBJECT_PROPERTY_ASSERTIONS);
reasoner.precomputeInferences(InferenceType.OBJECT_PROPERTY_HIERARCHY);
可以替换为:
reasoner.precomputeInferences(InferenceType.OBJECT_PROPERTY_ASSERTIONS,
InferenceType.OBJECT_PROPERTY_HIERARCHY);
但是,对于大多数推理者来说,这与以下内容没有什么不同:
reasoner.precomputeInferences(InferenceType.values());
为了在没有 运行 推理器的情况下查看推断的公理,您可以使用
org.semanticweb.owlapi.util.InferredPropertyAssertionGenerator
:
InferredPropertyAssertionGenerator generator = new InferredPropertyAssertionGenerator();
Set<OWLAxiom> axioms = generator.createAxioms(factory, reasoner);
这将提供推断的公理以添加到 ontology。