2017-07-05 4 views
0

Ich bin neu zu OWL 2, und ich möchte eine ".ttl" -Datei mit OWL-API analysieren, aber ich fand, dass OWL API ist nicht dasselbe wie die API I vorher benutzt. Es scheint, dass ich einen "Besucher" schreiben sollte, wenn ich den Inhalt innerhalb eines OWLAxiom oder OWLEntity erhalten möchte, und so weiter. Ich habe ein paar Tutorials gelesen, aber ich habe nicht den richtigen Weg dafür gefunden. Außerdem fand ich heraus, dass die durchsuchten Tutorials eine ältere Version von Eulen-API waren. Daher möchte ich ein ausführliches Beispiel, um eine Instanz zu analysieren und den Inhalt in einer Java-Klasse zu speichern.Parsen Sie eine .ttl-Datei und ordnen Sie sie einer Java-Klasse zu


Ich habe einige Versuche gemacht, meine Codes sind wie folgt, aber ich weiß nicht weiter zu gehen.


OWLOntologyManager manager = OWLManager.createOWLOntologyManager(); 

File file = new File("./source.ttl"); 

OWLOntology localAcademic = manager.loadOntologyFromOntologyDocument(file); 

Stream<OWLNamedIndividual> namedIndividualStream = localAcademic.individualsInSignature(); 

Iterator<OWLNamedIndividual> iterator = namedIndividualStream.iterator(); 

while (iterator.hasNext()) { 

    OWLNamedIndividual namedIndividual = iterator.next(); 

} 

Instanz beispielsweise wie folgt. Speziell möchte ich das "@en" im Objekt "ecrm: P3_has_note" speichern.


<http://data.doremus.org/performance/4db95574-8497-3f30-ad1e-f6f65ed6c896> 
    a      mus:M42_Performed_Expression_Creation ; 
    ecrm:P3_has_note  "Créée par Teodoro Anzellotti, son commanditaire, en novembre 1995 à Rotterdam"@en ; 
    ecrm:P4_has_time-span <http://data.doremus.org/performance/4db95574-8497-3f30-ad1e-f6f65ed6c896/time> ; 
    ecrm:P9_consists_of [ a      mus:M28_Individual_Performance ; 
          ecrm:P14_carried_out_by "Teodoro Anzellotti" 
          ] ; 
    ecrm:P9_consists_of [ a      mus:M28_Individual_Performance ; 
          ecrm:P14_carried_out_by "à Rotterdam" 
          ] ; 
    efrbroo:R17_created <http://data.doremus.org/expression/2fdd40f3-f67c-30a0-bb03-f27e69b9f07f> ; 
    efrbroo:R19_created_a_realisation_of 
      <http://data.doremus.org/work/907de583-5247-346a-9c19-e184823c9fd6> ; 
    efrbroo:R25_performed <http://data.doremus.org/expression/b4bb1588-dd83-3915-ab55-b8b70b0131b5> . 

Der Inhalt Ich möchte, sind wie folgt:


class Instance{ 
    String subject; 
    Map<String, Set<Object>> predicateToObject = new HashMap<String,Set<Object>>(); 
} 

class Object{ 
    String value; 
    String type; 
    String language = null; 
} 

Die Version von owlapi ich verwende 5.1.0 ist. Ich lade das Glas und das Dokument von there. Ich möchte nur wissen, wie ich den Inhalt, den ich in der Java-Klasse brauche, bekommen kann.


Wenn es einige Tutorials gibt, die den Weg beschreiben, um es zu tun, bitte sagen Sie mir.

Vielen Dank.


Update: Ich habe gewußt, wie es tun, wenn ich es fertig ist, werde ich eine Antwort schreiben, ich hoffe, es Nachzügler von OWLAPI helfen kann.


Danke nochmal.

Antwort

1

Was Sie brauchen, sobald Sie die Person haben, ist das Abrufen der Axiome der Dateneigenschaftszusicherungen und das Sammeln der für jede Eigenschaft geltend gemachten Literale.

Also, in der für im Code-Schleife:

// Let's rename your Object class to Literal so we don't get confused with java.lang.Object 
Instance instance = new Instance(); 
localAcademic.dataPropertyAssertionAxioms() 
    .forEach(ax -> instance.predicateToObject.put(
     ax.getProperty().getIRI().toString(), 
     Collections.singleton(new Literal(ax.getObject)))); 

Dieser Code erscheinen Eigenschaften nur einmal annimmt, - wenn Ihre Eigenschaften mehrmals erscheinen, müssen Sie prüfen, ob ein Satz bereits für die Eigenschaft vorhanden ist und fügen Sie einfach hinzu, anstatt den Wert in der Karte zu ersetzen. Ich habe das weggelassen, um das Beispiel zu vereinfachen.

Ein Besucher ist für dieses Szenario nicht notwendig, weil Sie bereits wissen, welcher Axiomtyp Sie interessiert und welche Methoden Sie aufrufen möchten. Es könnte als OWLAxiomVisitor geschrieben worden sein, das nur visit(OWLDataPropertyAssertionAxiom) umsetzt, aber in diesem Fall würde es dabei wenig Vorteil geben.

+0

Vielen Dank.Aber ich kann den Besucher verwenden, um die Daten zu erhalten und es ist OWLAnnonatiomAssersionAxiom, ich denke, OWLDataPropertyAssersionAxiom ist das Axiom zu speichern, um die Dateneigenschaft zu beschreiben. Ich bin mir nicht sicher über, was ist deine Meinung? – ciferlv

+0

Hängt davon ab, ob die gewünschte Eigenschaft eine Annotationseigenschaft oder eine Dateneigenschaft ist. Der Unterschied besteht darin, dass Annotationseigenschaften von Reasonern ignoriert werden. – Ignazio

+0

Ich habe auch eine Frage. Wenn ich jetzt eine Einzelperson habe, möchte ich jede Eigenschaft und jeden Wert wissen, gibt es einen schnellen Weg, diese zu bekommen? Haben Sie eine vorgefertigte Methode dafür geschrieben? Danke vielmals. – ciferlv

Verwandte Themen