我正在尝试使用python的rdflib库从RDF图中删除三元组,但是没有成功。我的查询是从http://www.w3.org/TR/sparql11-update/#delete学到的以下内容。
plugin.register(
'sparql', rdflib.query.Processor,
'rdfextras.sparql.processor', 'Processor')
plugin.register(
'sparql', rdflib.query.Result,
'rdfextras.sparql.query', 'SPARQLQueryResult')
bdel= graph.query("""
PREFIX bibo: <http://purl.org/ontology/bibo/>
DELETE {?s ?p ?o}
WHERE {
?s bibo:reproducedIn ?o.
}""")
它给出了以下错误,解决这个问题的任何线索。提前谢谢。
pyparsing.ParseException: Expected "SELECT" (at char 116), (line:4, col:17)
答案 0 :(得分:6)
如上所述,看起来您正在尝试使用graph.query
,它确实只需要'SELECT'版本的SPARQL查询。要运行任何SPARQL更新as defined here,您需要使用graph.processUpdate()
。
对于你的例子,有些东西:
processUpdate(graph, """
PREFIX bibo: <http://purl.org/ontology/bibo/>
DELETE {?s ?p ?o}
WHERE {
?s bibo:reproducedIn ?o.
}""")
希望这有帮助!
答案 1 :(得分:2)
您使用的查询是SPARQL Update,这是与SPARQL Query不同的标准。
可能graph.query
函数只需要SPARQL查询?我无法在相关的rdflib pages上看到任何关于Sparql Update的提及。
查看this page,看起来您可能需要使用processUpdate()
的{{1}}方法?
online validator同意这不是有效的 SPARQL查询(虽然它对我来说看似有效的 SPARQL更新)