4

再会!我将 rdflib 应用于 python。我有个问题。如何将变量放入 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 回答