删除OWLAPI中特定类别的个人

时间:2016-02-14 20:16:54

标签: owl-api

我读了一个从sourceforge.net的例子中删除类的方法,尽管很清楚删除本体的所有个体。我也看到了删除一个特定个体的方法,但我仍然无法做正确的事情。我想删除特定班级的个人。我已经应用了下面的代码,但我仍然看不到保护中的变化。我认为它们会以某种方式覆盖保护,但之前的保护也是可见的。 我还为这些人分配了许多公理。

removerToDeleteAlreadyAssignedInds = new OWLEntityRemover(man, Collections.singleton(target_Ontology));

OWLClass classWithAlreadyAssignedInds = factory.getOWLClass(destinationclassname,pm_Target_Ontology);
for(OWLNamedIndividual indsToDelete : classWithAlreadyAssignedInds.getIndividualsInSignature())
        {
            indsToDelete.accept(removerToDeleteAlreadyAssignedInds);
        }

        man.applyChanges(removerToDeleteAlreadyAssignedInds.getChanges());
        removerToDeleteAlreadyAssignedInds.reset();
        man.saveOntology(target_Ontology);

1 个答案:

答案 0 :(得分:0)

您在OWLClass对象上使用getIndividualsInSignature()。该对象的签名中没有任何人。

如果您使用

target_Ontology.getClassAssertionAxioms(classWithAlreadyAssignedInds)

对于你的循环,你应该能够删除声称属于该类的个体。但是,有些人可能会被推断属于该类,在这种情况下,您必须手动找到它们,或者使用本体的推理器来获取该类的所有实例:

OWLReasoner r... 
r.getInstances(classWithAlreadyAssignedInds, false)

这将要求您使用实际的推理器;通常的名单是HermiT,Pellet,FaCT ++,JFact,但还有一些。