我读了一个从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);
答案 0 :(得分:0)
您在OWLClass对象上使用getIndividualsInSignature()
。该对象的签名中没有任何人。
如果您使用
target_Ontology.getClassAssertionAxioms(classWithAlreadyAssignedInds)
对于你的循环,你应该能够删除声称属于该类的个体。但是,有些人可能会被推断属于该类,在这种情况下,您必须手动找到它们,或者使用本体的推理器来获取该类的所有实例:
OWLReasoner r...
r.getInstances(classWithAlreadyAssignedInds, false)
这将要求您使用实际的推理器;通常的名单是HermiT,Pellet,FaCT ++,JFact,但还有一些。