在 OWLAPI 中删除特定 class 的个体

deleting individuals of a specific class in OWLAPI

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

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);

您正在对 OWLClass 对象使用 getIndividualsInSignature()。该对象的签名中没有个人。

如果你使用

target_Ontology.getClassAssertionAxioms(classWithAlreadyAssignedInds)

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

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

这需要你使用一个真正的推理机;通常的列表是 HermiT、Pellet、FaCT++、JFact,但还有更多。