2011-12-07 12 views
3

おはよう!私はPythonにrdflibを適用します。質問があります。 SPARQLのクエリにどのように変数を入れることができますか? コースでは「OSPF」の代わりに:OSPF!私は、コンソールで私の変数を入力したいmsalvadores @SPARQLでパラメータ化されたクエリ

qres = g.query(
    """SELECT ?x ?z ?y 
     WHERE { 
      course:OSPF course:termName ?x. 
      course:OSPF ?s ?t. 
      ?s ?d ?z. 
      ?t course:termName ?y. 
      FILTER (regex(?z,"[^a-z]","i") && isLiteral(?z)) 
     }""" 
     ,initNs=dict(course=Namespace..... 

。 ---> python parse.py OSPF変数の値(OSPF)は別の値かもしれません。どのようにしてクエリに初期化できますか(WHERE)?私は数日前に変数の補間によって私の質問を解決しました。このように:

qtest = "OSPF","OSPF" 
    q =("""SELECT ?x ?z ?y\ 
      WHERE {\ 
       course:%s course:termName ?x.\ 
       course:%s ?s ?t.\ 
       ?s ?d ?z.\ 
       ?t course:termName ?y.\ 
       FILTER (regex(?z,'[^a-z0-9]','i') && isLiteral(?z))\ 
      }ORDER BY ASC(?s)\ 
      """)% qtest 
    qres = g.query(q, initNs=dict(course=Namespace 

しかし、私は、それは別の方法を行うことができると仮定します。私の意見では、解決策は私には間違いなく正しく提示されているからです。

答えて

2

あなたはもちろん変換したい場合は、あなただけ...

qres = g.query(
    """SELECT ?x ?z ?y 
     WHERE { 
      """+some_uri+""" course:termName ?x. 
      """+some_uri+""" ?s ?t. 
      ?s ?d ?z. 
      ?t course:termName ?y. 
      FILTER (regex(?z,"[^a-z]","i") && isLiteral(?z)) 
     }""" 
     ,initNs=dict(course=Namespace..... 

を行うことができ、クエリでPythonの変数を意味する場合:その後、SPARQLでの変数にOSPFを...

qres = g.query(
    """SELECT ?newVar ?x ?z ?y 
     WHERE { 
      ?newVar course:termName ?x. 
      ?newVar ?s ?t. 
      ?s ?d ?z. 
      ?t course:termName ?y. 
      FILTER (regex(?z,"[^a-z]","i") && isLiteral(?z)) 
     }""" 
     ,initNs=dict(course=Namespace..... 

あなたのクエリが何をしているかを少し説明し、データがどのように見えるかを説明すれば、より良い結果が得られるかもしれません。

編集

のみヨーヨーがやりたいかもしれないと変更、変数を繰り返すことなく、何かのようにSPARQLクエリを策定することです...

q = """SELECT ?x ?z ?y 
     WHERE { 
      course:%s course:termName ?x; 
        ?s ?t. 
      ?s ?d ?z. 
      ?t course:termName ?y. 
      FILTER (regex(?z,'[^a-z0-9]','i') && isLiteral(?z)) 
     }ORDER BY ASC(?s) 
     """%var_value 

お知らせ;の終わりに最初のトリプルパターン。私は実際に?s ?d ?zパターンを理解していない、私はいくつかのサンプルデータを参照する必要があります。私はあなたがこのクエリであまりにも多くを達成しようとしていると思います。データセットが大きい場合、このクエリは非常に遅くなるでしょう。私はデータを見ることなく、これ以上のことは言えません。

+0

あなたの答えをありがとう! – zhalnin

+0

これが正解だと思われる場合は、それを受け入れるを選択してください。 http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work –

+0

私の質問を編集し、私の解決策を追加しました。 – zhalnin

関連する問題