首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SPARQL参数化查询

SPARQL参数化查询
EN

Stack Overflow用户
提问于 2011-12-07 20:57:02
回答 1查看 1.7K关注 0票数 4

日安!我把rdflib应用于python。我有个问题。如何将变量放入SPARQL的查询中?而不是“OSPF”的课程:OSPF!

代码语言:javascript
复制
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.....

@我希望通过控制台输入我的变量。如何将其初始化为查询(哪里)?几天前我用插值变量的方法解决了我的问题。如下所示:

代码语言:javascript
复制
    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

但我想可以换个办法。因为在我看来,我提出的解决方案不太正确。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-07 23:22:38

如果您是指查询中的Python变量,您可以只.

代码语言:javascript
复制
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中的变量,那么.

代码语言:javascript
复制
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查询,类似于.

代码语言:javascript
复制
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模式,我需要看到一些样本数据。我怀疑您试图在这个查询中取得太多的成果。如果您的数据集很大,则此查询将非常慢。我不能说得比这更多的是没有看到数据。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8422401

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档