4

良い一日!Python には rdflib を適用します。質問があります。変数を SPARQL のクエリに入れるにはどうすればよいですか? コースの「OSPF」の代わりに:OSPF!

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.....

@ msalvadores コンソールで変数を入力したい。--->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

しかし、それは別の方法で行うことができると思います。私の意見では、解決策は私が提示したものとはまったく異なるからです。

4

1 に答える 1

3

クエリでPython変数を意味する場合は、...

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.....

course:OSPFをSPARQLの変数に変換する場合は、...

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。サンプルデータを確認する必要があります。このクエリで多くのことを達成しようとしているのではないかと思います。データセットが大きい場合、このクエリは非常に遅くなります。データを見ずにこれ以上言うことはできません。

于 2011-12-07T23:22:38.240 に答える