2013-08-16 28 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不允許您指定您創建的類和個人的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()); 
       } 
      } 
     }