2014-12-04 42 views
0

我是OWLAPi的新手,我使用Jfact1.2.1推理器。打印所有定義的類的子類而不打印不滿意的類

在我的本體論中有兩個不可滿足的類。我想在沒有這兩個不滿意的類的情況下打印所有的子類。我已經使用數組創建了一些代碼,但是我成功了,但是我不喜歡這個數組,因爲我不能將它用於其他未知的本體,這可能會有超過2個不可滿足的類。

所以我的問題是,有沒有辦法打印出所有定義的類的子類,而不是在其中存在unsitisfiable類? 我真的需要別人的幫助,因爲我已經嘗試了一切。 如果有人感興趣的陣列的方法我使用的碼是低於

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

什麼是不滿意的課程? – 2014-12-04 01:59:37

+0

這些是相當於貓頭鷹的類:什麼都沒有。此外,它們似乎是每個定義類的子類。 – user2083529 2014-12-04 02:10:09

+0

哦。不可滿足的。 – 2014-12-04 02:15:26

回答

2

替換

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

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

其具有相同的效果。您不需要將unsatisfiable複製到數組中。

+0

OMG,你是怎麼做到的?兄弟,我花了最後2個小時考慮這件事。你真的很好。 – user2083529 2014-12-04 02:26:16

+0

也謝謝你。現在我可以安然入睡。 – user2083529 2014-12-04 02:27:04

+1

這段代碼是正確的,但它可以做得更好: '設置 unsatisfiable = bottomNode.getEntities();' 'if(unsatisfiable.contains(subClass)){//然後跳過它,因爲它是貓頭鷹:沒有或一個不能令人滿足的階級} – Ignazio 2014-12-04 21:11:55