2017-10-07 25 views
2

공리를 사용하여 추론을하지 않고 추론 자 for (OWLClass child : reasoner.getSubClasses(clazz, true).getFlattened())을 사용하지 않고 클래스의 모든 명명 된 서브 클래스를 찾는 방법이 있습니까? 감사합니다클래스의 서브 클래스 얻기 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()); 
    } 
} 

, 당신은 당신 만이 아닌 annoymous 객체를 얻기 위해 필터링 올빼미-API에서와 같이, "subClassOf"술어에 대한보기를 추가, 문을 나열 할 수 있습니다.

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

해 주셔서 감사합니다. 그러나 클래스와 첫 번째 레벨 클래스 간의 관계는 고려하지 않습니다. owl.file에는 그 클래스가 추론자가 수행 한 것의 서브 클래스임을 보여줄 수있는 참조가 없기 때문에 이해합니다. 추론자를 사용하지 않고 그것들을 고려할 방법이 없습니까? 나는 희망한다. ... – Nina

+0

Thing의 하위 클래스가 아닌 모든 하위 클래스 집합을 (A)로 만든다. 서명에있는 모든 클래스의 집합 (B)을 가져 와서 (A)에서 클래스를 제거하십시오. B의 나머지 부분은 Thing의 직접적인 하위 클래스 인 클래스의 추가 세트 여야합니다. – Galigator