编程语言
首页 > 编程语言> > python – SPARQL参数化查询

python – SPARQL参数化查询

作者:互联网

美好的一天!我为rthon应用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

但我想它可以用另一种方式完成.因为在我看来,我提出的解决方案并不完全正确.

解决方法:

如果你的意思是查询中的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.....

如果你想转换过程: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模式,我需要看一些样本数据.我怀疑你试图用这个查询来实现太多.如果您的数据集很大,则此查询将非常慢.没有看到数据,我不能说更多.

标签:python,sparql,parameterized-query,rdflib
来源: https://codeday.me/bug/20190630/1336088.html