rdflib 6.0.1运行SPARQL代码提示plugins无sparql属性如何处理?
问题原因
- rdflib 6.0.1版本调整了SPARQL相关模块的导入和调用逻辑,你参考的示例代码是基于旧版本rdflib(5.x及更早)编写的,旧版本可以直接调用
rdflib.plugins.sparql.prepareQuery,但新版本要么需要显式导入sparql模块,要么直接使用rdflib顶层封装的SPARQL相关方法。 - 你当前代码没有显式导入sparql子模块,直接通过
rdflib.plugins.sparql调用方法时,Python找不到未加载的子模块,就会抛出属性不存在的错误。
解决方法
有两种可行方案,选其中一种即可:
方案1:使用rdflib顶层封装的方法(推荐,适配6.x版本)
直接把rdflib.plugins.sparql.prepareQuery替换为rdflib.prepareQuery即可,修改后的代码如下:
import rdflib g = rdflib.Graph() g.parse("family.ttl", format='ttl') # 替换此处的调用路径即可 q = rdflib.prepareQuery( """SELECT ?child ?sister WHERE { ?child fam:hasParent ?parent . ?parent fam:hasSister ?sister . }""", initNs = { "fam": "http://example.org/family#"}) sm = rdflib.URIRef("http://example.org/royal#SverreMagnus") for row in g.query(q, initBindings={'child': sm}): print(row)
方案2:显式导入sparql模块
在代码开头添加导入语句import rdflib.plugins.sparql,原来的调用逻辑不需要修改,修改后的开头部分如下:
import rdflib import rdflib.plugins.sparql # 新增这一行显式导入子模块 # 后续原有代码保持不变
两种方案都能解决报错,运行后输出结果为(rdflib.term.URIRef('http://example.org/royal#SverreMagnus'), rdflib.term.URIRef('http://example.org/royal#MarthaLouise'))
内容的提问来源于stack exchange,提问作者Wave Man
相关产品推荐
相关产品推荐

