2017-10-07 52 views
2

有一種方法可以在不使用推理器的情況下查找某個類的所有命名的子類,而不需要僅僅使用公理就可以進行推理?謝謝獲取某個類的子類OwlApi

回答

2

使用owl-api本體可以查詢得到所有的子類公理。 然後過濾結果以僅保留指定的類。

for (final OWLSubClassOfAxiom subClasse : ontology.getAxioms(AxiomType.SUBCLASS_OF)) 
{ 
    if (subClasse.getSuperClass() instanceof OWLClass && subClasse.getSubClass() instanceof OWLClass) 
    { 
     System.out.println(subClasse.getSubClass() + " extends " + subClasse.getSuperClass()); 
    } 
} 

使用耶拿,你可以列出的語句,添加尋找「subClassOf」謂詞,然後在OWL-API您篩選獲得唯一的非annoymous對象。

final StmtIterator it = model.listStatements(); 
while (it.hasNext()) 
{ 
    final Statement s = it.next(); 
    if (s.getPredicate().equals(RDFS.subClassOf) && !s.getObject().isAnon()) 
      System.out.println(s.getSubject() + " extends " + s.getObject()); 
} 
+0

謝謝你的解決方案。然而,它沒有考慮到類與Thing之間的關係。我明白了,因爲在owl.file中沒有任何引用來證明這些類是Thing的子類,它是由推理者完成的。如果不使用推理器,沒有辦法將它們考慮在內?我希望... – Nina

+0

使看到的所有子類的集合(A)不是Thing的子類。 取得簽名中所有類別的集合(B),並從(A)中移除類別。 B的其餘部分應該是一組額外的類,它們是直接子類的子類。 – Galigator