2016-08-06 12 views
1

Ich habe meine eigene Ontologie entwickelt (ich definierte meine Klassen, Eigenschaften, etc.) und ich möchte meine Ontologie mit Sparql befragen.wie man Ontologie mit Sparql, RDFLIB in Python abfragen

in protégé 2000 (Open-Source-Ontologie-Editor) alles funktioniert gut, aber wenn ich meine Anfrage SPARQL in Python implementieren möchte, stieß ich auf einige Probleme.

Ich habe es in Java und es funktionierte, aber es ist nicht, was ich will, ich wollte es mit pyjnius tun (Ein Python-Modul für den Zugriff auf Java-Klassen als Python-Klassen), aber nichts hat auch funktioniert.

Wie kann ich mit sparkq meine Ontologie abfragen? Gibt es eine Möglichkeit, jena in Python zu benutzen?

das ist, wie ich es mit Java tat

try{  

    Model model = ModelFactory.createDefaultModel(); 
    String FName = "C:\\Users\\p\\Desktop\\protégé project jour\\jour.owl"; 
    InputStream inStr = FileManager.get().open(FName); 
    if (inStr == null) { throw new IllegalArgumentException("Fichier non trouvé");} 
    // Lire le fichier RDF vers le modèle précédemment créé. 
    model.read(inStr, ""); 

    //**************************** 


    String requete = 
    //***=====This is the query that works good in the ontology with  properties between classes 

    "PREFIX OntoJO:<http://www.owl-ontologies.com/Ontology1400008538.owl#>" +   
    "SELECT ?path " + 
    "WHERE { " 

    + " ?n OntoJO:signee_par '"+choixsignrech1.getText()+"' ." 
    + " ?s OntoJO:mot_cle '"+choixclrech1.getText()+"' ." 
    + " ?m OntoJO:secteur '"+choixsecrech1.getSelectedItem()+"' ." 
    + " ?f OntoJO:ministere '"+choixminisrech1.getSelectedItem()+"' ." 
    + " ?r OntoJO:synonymes '"+choixsyrech1.getText()+"' ." 


    + "?n OntoJO:a_un_chemin ?y . " 
    + "?s OntoJO:a_un_chemin ?y . " 
    + "?m OntoJO:a_un_chemin ?y . " 
    + "?f OntoJO:a_un_chemin ?y . " 
    + "?r OntoJO:a_un_chemin ?y . " 

    + "?y OntoJO:chemin ?path . }"; 



    Query query = QueryFactory.create(requete); 
    QueryExecution qexec = QueryExecutionFactory.create(query, model); 

    try { 
     ResultSet results = qexec.execSelect(); 
     while (results.hasNext()){ 
      QuerySolution soln = results.nextSolution(); 
      RDFNode name = soln.get("path"); 
      System.out.println(name); 
      javax.swing.JOptionPane.showMessageDialog(this,soln.get("path")); 
     } 
    } finally 
    { 
     qexec.close(); 
    } 

die Eigenschaften sind: signee_par, mot_cle, secteur, ministere etc ..... (auf Französisch), wird die sqarql Anfrage auf diesen Eigenschaften basieren

Ich möchte es mit Python tun, weiß jemand wie ich kann?!

+2

Was ist "Protege 2000"? Und fügen Sie bitte viel mehr Informationen hinzu, d. H. Die SPARQL-Abfrage und den Python-Code. Und was bedeutet "einige Probleme"? Kannst du dir nicht vorstellen, dass dir ohne Informationen niemand wirklich helfen kann? – AKSW

+0

@AKSW Es tut mir leid, dass ich meinen Punkt nicht erklärt habe, ich habe gerade den Beitrag bearbeitet, ich zeigte Ihnen den Java-Code coz ich weiß nicht, wie ich es wirklich mit Python, ich versuchte, aber nichts bro :(. – Mehdi

+1

Es wäre hilfreich zu sehen, was du probiert hast ... Ich habe ein wenig mit dem Kivy-Framework gearbeitet und schreibe gerade eine Python-Android-App ... Pyjnius kommt von Kivy.org für diejenigen, die es nicht wissen: – Jarvis

Antwort

1

Schauen Sie dies an, wenn Sie Jena Fuseki verwenden möchten. Jena TDB in Python?

Ich kann vorschlagen, wie Sie rdflib verwenden. Meine Arbeit mit rdflib beschränkte sich auf einfache Abfragen und Serialisierung. Der einfachste Weg wäre, Ihr Diagramm zu laden (in einem der RDF-Formate nt, ttl etc.). Fragen Sie das Diagramm ab und formatieren Sie die Ergebnisse nach Bedarf.

import rdflib 

graph = rdflib.Graph() 
graph = graph.parse("triples.nt",format = "nt") 
query = "PREFIX OntoJO:<http://www.owl-ontologies.com /Ontology1400008538.owl#>" +\ 
"SELECT ?path " +\ 
"WHERE { "\ 
\ 
+ " ?n OntoJO:signee_par '"+choixsignrech1.getText()+"' ." \ 
+ " ?s OntoJO:mot_cle '"+choixclrech1.getText()+"' ." \ 
+ " ?m OntoJO:secteur '"+choixsecrech1.getSelectedItem()+"' ."\ 
+ " ?f OntoJO:ministere '"+choixminisrech1.getSelectedItem()+"' ."\ 
+ " ?r OntoJO:synonymes '"+choixsyrech1.getText()+"' ."\ 


+ "?n OntoJO:a_un_chemin ?y . "\ 
+ "?s OntoJO:a_un_chemin ?y . "\ 
+ "?m OntoJO:a_un_chemin ?y . "\ 
+ "?f OntoJO:a_un_chemin ?y . "\ 
+ "?r OntoJO:a_un_chemin ?y . "\ 
+ "?y OntoJO:chemin ?path . }" 
result = graph.query(query) 
#The result will be a QueryRow object because of the SELECT , look in the docs for further info. 
for i in result: 
    print i[0] 

Ich habe vergessen, ersetzen Sie Ihre getText Calls, pass auf. Der obige Code ist in python2 und sollte alle Ergebnisse der Abfrage auf die triple.nt Daten

drucken Bitte Kommentar und lassen Sie mich wissen, Ihre Ansichten zu dieser Antworten. Es gibt nicht viele Quellen über RDFLIB, also ping mich, wenn Sie irgendwelche Fragen zu den gleichen haben und ich würde mich freuen, es zu erkunden.

+0

thx für yr Antwort, habe ich versucht, was u tat und es hat nicht funktioniert :(, ich habe diesen Fehler: IOError: [Errno 2] Datei oder Verzeichnis: U'c: \\ Users \\ Mehdi \\ Arbeitsplatz \\ Meine Arbeit \\ Test \\ triples.nt '. Ich ersetze es durch: filename = 'JO Ontologie modifiziert 09 Juni 2014 mit properties.owl' graph.load (Dateiname, Format = 'xml') graph = graph.parse (Dateiname, format = 'xml') auch ein Fehler ist: + "? lois OntoJO:?. a_un_chemin y" \ Typeerror: schlecht Operandentyp für unäre +: 'str' – Mehdi

+0

graph = rdflib.Graph() = Dateiname r'JO Ontology modifizierte 09 Juni 2014 mit properties.owl‘ graph.load (Dateiname, Format = 'xml') Q res = graph.query ( "" "SELECT * WHERE {? s? p? o} 5 begrenzen" "" ) für res in qres.result: Druck res diese Arbeit ist, dann ist dies sicher, dass ich führen zurück zu machen, aber wenn ich etwas sparql Anfrage tun möchte, habe ich einige Fehler :( – Mehdi

+0

@Mehdi Sie müssen nicht Verwenden Sie wo in der Abfrage und der unäre Fehler ist für Sie, um das + zu entfernen, wenn Sie nicht zwei Zeichenfolgen hinzufügen. Und über den zweiten Kommentar, was meinst du mit SPARQL Anfrage, gib mir ein Beispiel. –

Verwandte Themen