日安!我把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.....@我希望通过控制台输入我的变量。如何将其初始化为查询(哪里)?几天前我用插值变量的方法解决了我的问题。如下所示:
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但我想可以换个办法。因为在我看来,我提出的解决方案不太正确。
发布于 2011-12-07 23:22:38
如果您是指查询中的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模式,我需要看到一些样本数据。我怀疑您试图在这个查询中取得太多的成果。如果您的数据集很大,则此查询将非常慢。我不能说得比这更多的是没有看到数据。
https://stackoverflow.com/questions/8422401
复制相似问题