2

私は独自のオントロジーを開発し (クラス、プロパティなどを定義しました)、オントロジーを sparql で調査したいと考えています。

protégé 2000 (オープンソースのオントロジー エディタ) ではすべて正常に動作しますが、要求した sparql を Python で実装しようとすると、いくつかの問題が発生しました。

私はJavaでそれを行いましたが、うまくいきましたが、それは私が望んでいるものではありませpyjniusん.

sparql を使用してオントロジーを調査するにはどうすればよいですか? Pythonでジェナを使用する方法はありますか?

それが私がJavaでそれをした方法です:

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();
    } 

プロパティは次のとおりです: signee_par、mot_cle、secteur、ministere など ..... (フランス語で)、sqarql リクエストはこれらのプロパティに基づいています。

私はPythonでそれをしたいのですが、誰も私ができる方法を知っていますか?!

4

1 に答える 1

2

イエナ・フセキを使いたい方はこちらをご覧ください。 PythonでイエナTDB?

rdflib の使用方法を提案できます。私の rdflib での作業は、単純なクエリとシリアル化に限定されていました。最も簡単な方法は、グラフをロードすることです (RDF 形式 nt、ttl など)。グラフをクエリし、必要に応じて結果をフォーマットします。

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]

getText 呼び出しの置き換えを怠っています。気をつけてください。上記のコードは python2 用であり、triple.nt データに対するクエリのすべての結果を出力する必要があります。

コメントして、この回答に対するあなたの見解を教えてください。rdflib に関する情報源はあまりないので、同じことに関して質問があれば私に連絡してください。喜んで調査させていただきます。

于 2016-08-07T18:22:59.190 に答える