2015-01-21 8 views
3

추론자를 사용하여 특정 클래스의 모든 개인을 확보 할 수있는 방법이 있습니까? Reasoner 왜냐하면 나는 그 클래스의 모든 유추되고 단언 된 개인을 얻고 싶기 때문입니다. JFact 추론을 사용하고 있으며 루프 및 if 문을 사용하려고합니다. 그리고 저는 예를 들어 "사람"과 같은 개인을 찾고 싶습니다. 그러나 나는 그 개인을 볼 수 없다. 아래 코드에 대한 아이디어 또는이 목적을위한 방법이 있습니까?OWLAPi 및 JFact 추론자를 사용하여 특정 클래스의 모든 개인을 얻는 것

for (OWLClass c : myPizza.getClassesInSignature()) { 
     NodeSet<OWLNamedIndividual> instances = reasoner.getInstances(c, true); 
     System.out.println(c.getIRI().getFragment()); 
     if (c.getIRI().getFragment().equals("Person")){ 

      for (OWLNamedIndividual i : instances.getFlattened()) { 
       System.out.println(i.getIRI().getFragment()); 

     } 
    } 
     else { 
      continue; 
     } 
     break; 

    } 

감사 reasoner.getInstances(c, true);는 당신에게 C의/직접/인스턴스를 줄 것이다 호출

답변

5

; 이후의 개인이 c의 하위 클래스의 인스턴스 인 경우 건너 뜁니다. 하위 클래스의 인스턴스를 포함하려면 reasoner.getInstances(c, false);으로 전환하십시오.

첫 번째 반복 후 break;으로 전화를 걸 수도 있습니다. person이 서명의 첫 번째 클래스가 아닌 경우 person 인스턴스를 찾지 않습니다.

for (OWLClass c : myPizza.getClassesInSignature()) { 
    if (c.getIRI().getFragment().equals("Person")){ 
     NodeSet<OWLNamedIndividual> instances = reasoner.getInstances(c, false); 
     System.out.println(c.getIRI().getFragment()); 
     for (OWLNamedIndividual i : instances.getFlattened()) { 
      System.out.println(i.getIRI().getFragment()); 
     } 
    } 
} 

편집 :

당신은 약간 덜 추론 작업을 수행하는 코드를 변경할 수 있습니다 당신은 펠렛 또는 같은 SWRL을 지원하는 추론을 사용할 필요가 SWRL 추론 개인을 볼 것으로 예상하는 경우, 의견에서 참고 은자. JFact는 SWRL 규칙을 지원하지 않습니다.

+0

감사합니다. 나는 당신의 코드를 시도했지만, 나는 단언 된 개인을 얻고있다. 나는 유추 된 사람들을 얻지 못하고있다. 해결책을 알고 있습니까? – user2083529

+0

온톨로지를 공유 할 수 있습니까? – Ignazio

+0

공유하여, 내가 올빼미 파일을 보내거나 내 온톨로지에 대한 설명을 보내겠습니까? – user2083529

2

이 방법을 사용해보세요. 아래의 방법을 사용하여 특정 클래스의 모든 개인을 얻을 수 있습니다.

private static void printIndividualsByclass(OWLOntology ontology, String owlClass){ 
    OWLReasonerFactory reasonerFactory = new PelletReasonerFactory(); 
    OWLReasoner reasoner = reasonerFactory.createNonBufferingReasoner(ontology); 
    for (OWLClass c : ontology.getClassesInSignature()) { 
     if (c.getIRI().getShortForm().equals(owlClass)){ 
      NodeSet<OWLNamedIndividual> instances = reasoner.getInstances(c, false); 
      System.out.println("Class : "+ c.getIRI().getShortForm()); 
      for (OWLNamedIndividual i : instances.getFlattened()) { 
       System.out.println(i.getIRI().getShortForm()); 
      } 
     } 
    } 
}