2017-04-24 3 views
0

Ich versuche, OWL2-Datei mit OWL API zu analysieren. Aber ich habe ein Problem, wenn ich versuche, Etikett <SubClassOf></SubClassOf> zu analysieren. Bitte beachten Sie das Beispiel unten.Der analysierte Inhalt ist in umgekehrter Reihenfolge


<?xml version="1.0"?> 

<Ontology xmlns="http://www.w3.org/2006/12/owl2-xml#" 
    ......> 
    <SubClassOf> 
     <Class URI="&ontology_people1;Address"/> 
     <Class URI="&ontology_people1;Location"/> 
    </SubClassOf> 
    ...... 
</Ontology> 

Der Gehalt zwischen <SubClassOf> and </SubClassOf> um geschrieben werden. Die Kindklasse wird in die erste Zeile geschrieben und die Elternklasse wird in die zweite Zeile geschrieben. Aber ich analysiere es und drucke in der Konsole. Ihre Reihenfolge ist umgekehrt. Inzwischen sind andere nicht umgekehrt. Mein Code ist auf dem folgenden.


OWLOntologyManager manager = OWLManager.createOWLOntologyManager(); 

     File file = new File("src/main/resources/dataSet/PR/person1/ontology_people1.owl"); 

     OWLOntology o = manager.loadOntologyFromOntologyDocument(file); 
List<OWLAxiom> subClassOf = o.axioms() 
       .filter(axiom -> axiom.getAxiomType().toString().equals("SubClassOf")) 
       .collect(Collectors.toList()); 

     for (OWLAxiom owlAxiom : subClassOf) { 

      Stream<OWLEntity> owlEntityStream = owlAxiom.signature(); 
      owlEntityStream.forEach(entity->System.out.println(entity.getIRI())); 
      System.out.println("**************"); 
     } 

Warum?

+0

mich @Ignazio Entschuldigung, Sie haben mir oft geholfen, und ich weiß, Sie der Autor von OWL API sind, können Sie mir helfen, wieder ? Vielen Dank ! – ciferlv

Antwort

1

Das ist, weil die signature() Methode nicht das ist, was Sie verwenden müssen. Die Signatur eines Axioms ist die Menge der in diesem Axiom erscheinenden Entitäten und ist unabhängig vom Axiomtyp definiert. Das Hauptmerkmal ist in diesem Fall, dass die Reihenfolge der Entitäten in einer Signatur nichts mit der Semantik des Axioms zu tun hat.

zuverlässig den Zugriff auf Unterklassen und Oberklassen, wie dieser Code:

List<OWLSubClassOfAxiom> subClassOf = OWLAPIStreamUtils.asList(o.axioms(AxiomType.SUBCLASS_OF)); 
    subClassOf.forEach(x->{ 
     System.out.println(x.getSubClass()); 
     System.out.println(x.getSuperClass()); 
     }); 
+0

Vielen Dank! – ciferlv

Verwandte Themen