美好的一天!我为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
但我认为可以采取另一种方式。因为在我看来,我提出的解决方案并不完全正确。
答案 0 :(得分: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.....
如果你想改变课程: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
模式,我需要查看一些示例数据。我怀疑你试图用这个查询来实现太多。如果您的数据集很大,则此查询将非常慢。如果不看数据,我不能说更多。