2

我正在尝试使用 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)
4

2 回答 2

6

As mentioned above, it looks like you are trying to use graph.query which does indeed expect only 'SELECT' versions of SPARQL Queries. In order to run any SPARQL Updates as defined here, you will need to use graph.processUpdate() instead. For your example, something along the lines of:

processUpdate(graph, """ 
PREFIX bibo: <http://purl.org/ontology/bibo/>                       
DELETE  {?s ?p ?o}
WHERE { 
?s bibo:reproducedIn ?o. 
}""")

Hope this helps!

于 2012-11-27T21:40:21.803 回答
2

您正在使用的查询是SPARQL 更新,它是与SPARQL 查询不同的标准。可能该graph.query函数只需要 SPARQL 查询?我在相关的rdflib 页面上看不到任何提及 Sparql 更新的内容。

查看此页面,您可能需要使用 的processUpdate()方法来rdflib-sparql代替?

在线验证器同意这不是一个有效的SPARQL 查询(尽管对我来说它看起来像是有效的SPARQL 更新

于 2012-11-01T22:34:56.280 回答