2012-11-01 17 views
1

我想從RDF圖中使用rdflib庫的python刪除三元組,但沒有成功地這樣做。我的查詢是從http://www.w3.org/TR/sparql11-update/#delete瞭解到的。使用rdflib的sparql DELETE查詢時出錯python

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) 

回答

2

你正在使用的查詢是SPARQL Update,這是從SPARQL Query一個獨特的標準。 函數graph.query可能只需要SPARQL查詢?我在相關的rdflib pages上看不到有關Sparql Update的任何提及。在this page

看,它看起來像你可能需要使用的rdflib-sparql代替processUpdate()方法?

online validator同意,這不是一個有效的SPARQL查詢(雖然它看起來像合法SPARQL更新我)

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. 
}""") 

希望這有助於!