打印所有已定义类的子类,而不打印未满足的类

时间:2014-12-04 01:53:59

标签: java owl ontology owl-api

我是OWLAPi的新手,我正在使用Jfact1.2.1推理器。

在我的本体论中,有两个不可满足的课程。我想打印所有子类而没有这两个不满意的类。我已经使用数组制作了一些代码,但是我很成功,我不喜欢这个数组的东西,因为我不能将它用于其他未知的本体,这些本体可能有超过2个不可满足的类。

所以我的问题是,有没有办法打印出已定义类的所有子类而不会出现不可分类的类? 我真的需要别人的帮助,因为我已经尝试了一切。 如果有人对阵列方法感兴趣,我已经习惯了以下代码

OWLClass[] array = new OWLClass[3];
int i=0;

Node<OWLClass> bottomNode = reasoner.getUnsatisfiableClasses();

    Set<OWLClass> unsatisfiable = bottomNode.getEntitiesMinusBottom();


        for (OWLClass cls : unsatisfiable) {


            array[i]= cls;
            i++;
        }
    for (OWLClass c : myOntology.getClassesInSignature()) {
NodeSet<OWLClass> subClasses = reasoner.getSubClasses(c, True);

        for (OWLClass subClass : subClasses.getFlattened()) {
if (subClass.isBottomEntity()|| subClass.equals(array[0])|| 
     subClass.equals(array[1])|| subClass.equals(array[2])){


      continue;

else{
    System.out.println(subClass.getIRI().getFragment() + "\tsubclass of\t" 
   + c.getIRI().getFragment());
 }
}
}

1 个答案:

答案 0 :(得分:2)

替换

if (subClass.isBottomEntity()|| subClass.equals(array[0])|| 
 subClass.equals(array[1])|| subClass.equals(array[2])){

if (subClass.isBottomEntity()|| unsatisfiable.contains(subclass)) {

具有相同的效果。您无需将unsatisfiable设置复制到数组中。