gpt4 book ai didi

python - SPARQL 参数化查询

转载 作者:太空宇宙 更新时间:2023-11-03 11:09:40 24 4
gpt4 key购买 nike

美好的一天!我为 python 应用了 rdflib。我有个问题。如何将变量放入 SPARQL 的查询中?在类(class)中代替“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.....

如果您想将 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 模式,我需要查看一些示例数据。我怀疑您试图通过此查询实现太多目标。如果你的数据集很大,这个查询会很慢。如果没有看到数据,我不能说更多。

关于python - SPARQL 参数化查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8422401/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com