2013-08-16 5 views
1

WebProtege에서 사용되는 OWLEntity의 URI에서 엔티티를 추출하는 버전을 구현 중입니다. 나는 그것에 성공했다. 나는 아래 코드를 보여줄 수있다. 하지만 이제 레이블 주석에서 추출해야합니다. WebProtege를 사용하여 어떻게 추출합니까? WebProtege는 클래스를 작성할 때 URI를 작성하지 않습니다 (예 : http://www.co-ode.org/ontologies/pizza/2005/05/16/pizza.owl#Pizza). 그것은 단지 URI 주석을 가지고있다. 레이블에서 URI를 추출하고 싶습니다. 그것은 (이 있기 때문에에 대한 예를 들어, http://www.co-ode.org/ontologies/pizza/2005/05/16/234y2890820802840> "피자"@en> (다소 다음과 같이보고 올바른 일이 필요하면 내가 응답 할 것이다)맨체스터를 사용하여 URI 레이블 주석을위한 ShortformProvider를 추출하는 방법을 알려줄 수 있습니까?

rootOntology = getProject().getRootOntology(); 
System.out.println(rootOntology.getAxioms()); 

final OWLDataFactory dataFactory 
    = rootOntology.getOWLOntologyManager().getOWLDataFactory(); 

iriShortFormProvider = new SimpleIRIShortFormProvider(); 
ShortFormProvider shortFormProvider = new ShortFormProvider() { 

     public String getShortForm(OWLEntity owlEntity) { 
         return iriShortFormProvider.getShortForm(owlEntity.getIRI()); 
     } 

     @Override 
     public void dispose() { 

     } 
     }; 

OWLEntityChecker entityChecker 
    = new ShortFormEntityChecker(
     new BidirectionalShortFormProviderAdapter(
     Collections.singleton(rootOntology), shortFormProvider)); 

ManchesterOWLSyntaxEditorParser parser 
    = new ManchesterOWLSyntaxEditorParser(
     dataFactory, query); 

parser.setOWLEntityChecker(entityChecker); 

Set<OntologyAxiomPair> set; 

try { 
    set = parser.parseFrames(); 
    System.out.println("SET SIZE" + set.size()); 
    System.out.println("SET STRING" + set.toString()); 

    for (OntologyAxiomPair s1 : set) { 

       OWLAxiom temp = s1.getAxiom(); 
       Set<OWLAnnotationProperty> annotation = s1.getOntology().getAnnotationPropertiesInSignature(); 
     Iterator itr = annotation.iterator(); 

       while(itr.hasNext()){ 
      System.out.println(s1.getOntology().getAnnotationPropertiesInSignature()); 
      System.out.println("ITERATOR" + itr.next()); 
       } 

       if (temp.getAxiomType() != AxiomType.DECLARATION 
         || temp.getAxiomType() != AxiomType.SUBCLASS_OF || temp.getAxiomType() != AxiomType.DATA_PROPERTY_ASSERTION 
         ) 
      res = Search(temp);    
    } 

예 WebProtege에서 오는 :....

<!-- http://webprotege.stanford.edu/classes/BfJkwFDiEj5mduXojVHyKi --> 

<owl:Class rdf:about="http://webprotege.stanford.edu/classes/BfJkwFDiEj5mduXojVHyKi"> 
    <rdfs:label xml:lang="en">AnimalType</rdfs:label> 
    <rdfs:subClassOf rdf:resource="http://www.w3.org/2002/07/owl#Thing"/> 
</owl:Class> 



<!-- http://webprotege.stanford.edu/classes/BjSxQcpX7bOcVccVf5beN0 --> 

<owl:Class rdf:about="http://webprotege.stanford.edu/classes/BjSxQcpX7bOcVccVf5beN0"> 
    <rdfs:label xml:lang="en">Omnivore</rdfs:label> 
    <rdfs:subClassOf rdf:resource="http://webprotege.stanford.edu/classes/BfJkwFDiEj5mduXojVHyKi"/> 
</owl:Class> 



<!-- http://webprotege.stanford.edu/classes/CKjBW7KqdcJPRpBtk2T6WE --> 

<owl:Class rdf:about="http://webprotege.stanford.edu/classes/CKjBW7KqdcJPRpBtk2T6WE"> 
    <rdfs:label xml:lang="en">Herbivore</rdfs:label> 
    <rdfs:subClassOf rdf:resource="http://webprotege.stanford.edu/classes/BfJkwFDiEj5mduXojVHyKi"/> 
</owl:Class> 



<!-- http://webprotege.stanford.edu/classes/COt181AeQ0WewmOoZ0NYYF --> 

<owl:Class rdf:about="http://webprotege.stanford.edu/classes/COt181AeQ0WewmOoZ0NYYF"> 
    <rdfs:label xml:lang="en">Fish</rdfs:label> 
    <rdfs:subClassOf rdf:resource="http://webprotege.stanford.edu/classes/DfGxuPUoLBiOvyBKpUJWvr"/> 
</owl:Class> 



<!-- http://webprotege.stanford.edu/classes/CPp9DIflV676wmq3onRsJa --> 

<owl:Class rdf:about="http://webprotege.stanford.edu/classes/CPp9DIflV676wmq3onRsJa"> 
    <rdfs:label xml:lang="en">Land</rdfs:label> 
    <rdfs:subClassOf rdf:resource="http://webprotege.stanford.edu/classes/7V0PYXjh6vM9AjTzh9DPwC"/> 
</owl:Class> 



<!-- http://webprotege.stanford.edu/classes/DfGxuPUoLBiOvyBKpUJWvr --> 

<owl:Class rdf:about="http://webprotege.stanford.edu/classes/DfGxuPUoLBiOvyBKpUJWvr"> 
    <rdfs:label xml:lang="en">Animal</rdfs:label> 
    <rdfs:subClassOf rdf:resource="http://www.w3.org/2002/07/owl#Thing"/> 
</owl:Class> 
+1

WebProtege가 사용자가 작성한 클래스 W 개인의 URI를 지정할 수 없도록 올바르게 이해합니까? 업데이트 : 방금 WebProtege와 함께 해보니 그런 식으로 보입니다. 이것은 나에게 매우 놀라운 일이다. URI를 지정할 수없는 OWL 도구는별로 유용하지 않습니다. 우리가 여기서 뭔가를 놓치기를 바랍니다. –

+0

@ Joshua, 네, 맞습니다. 우리는 전체 URI를 얻을 수 없습니다. –

답변

0

이것은 당신의 레이블을 얻을 방법이다.이 URI를 바람직 것은 사실이지만, 라벨도 실행할 수 있지만. 당신은. 내가 당신의 쿼리를 다시 작성 제안 당신의 맨체스터 구문 쿼리에이 라벨을 공급 할 수 있습니다.

OWLOntologyManager manager = OWLManager.createOWLOntologyManager(); 
    File file= new File("root-ontology.owl"); 

    OWLOntology rootOntology = manager.loadOntologyFromOntologyDocument(file); 

    OWLDataFactory df = rootOntology.getOWLOntologyManager().getOWLDataFactory(); 

    Set<OWLLogicalAxiom> LogicalAxiom=rootOntology.getLogicalAxioms(); 
    Iterator<OWLLogicalAxiom> axiom=LogicalAxiom.iterator(); 


     for (OWLClass cls : rootOntology.getClassesInSignature()) { 

      // Get the annotations on the class that use the label property 
      for (OWLAnnotation annotation : cls 
        .getAnnotations(rootOntology, df.getRDFSLabel())) { 
       if (annotation.getValue() instanceof OWLLiteral) { 
        OWLLiteral val = (OWLLiteral) annotation.getValue(); 
        // look for portuguese labels 
        if (val.hasLang("en")) 
         System.out.println(val.getLiteral()); 
       } 
      } 
     }