如何向指定名称的默认图插入数据?Blazegraph SPARQLWrapper使用问题
问题原因
Blazegraph的SPARQL Update处理逻辑中,你配置的defaultGraph实例化参数、default-graph-uri请求参数,默认仅作用于UPDATE语句的WHERE查询部分,不会指定INSERT操作的目标图,因此没有显式指定目标图的插入操作都会写入默认的bd:nullGraph。
解决方案
方案1(最通用,全平台兼容)
直接在INSERT语句中显式指定目标命名图,无需调整其他参数,代码如下:
from SPARQLWrapper import SPARQLWrapper, POST sparql = SPARQLWrapper("http://localhost:9999/blazegraph/namespace/kbss/sparql") sparql.method = 'POST' queryString = ''' INSERT { GRAPH <http://example.org/default> { <http://example/egbook3> <http://purl.org/dc/elements/1.1/title> "This is an example title". } } WHERE {} ''' sparql.setQuery(queryString) sparql.query()
方案2(无需修改SPARQL语句,适配Blazegraph规则)
如果不想在每个INSERT语句里写GRAPH声明,需要调整请求参数和头信息适配Blazegraph的要求:
- 替换
default-graph-uri参数为Blazegraph识别的UPDATE操作默认图参数using-graph-uri - 显式指定请求的Content-Type为
application/sparql-update,避免Blazegraph识别请求类型出错
代码如下:
from SPARQLWrapper import SPARQLWrapper, POST sparql = SPARQLWrapper("http://localhost:9999/blazegraph/namespace/kbss/sparql") sparql.setMethod(POST) # 配置SPARQL Update专用请求头 sparql.setRequestMethod('postdirectly') sparql.addCustomHttpHeader('Content-Type', 'application/sparql-update') # 指定插入操作的默认目标图 sparql.addParameter("using-graph-uri", "http://example.org/default") queryString = ''' INSERT { <http://example/egbook3> <http://purl.org/dc/elements/1.1/title> "This is an example title". } WHERE {} ''' sparql.setQuery(queryString) sparql.query()
内容的提问来源于stack exchange,提问作者Ian Kurtis
相关产品推荐
相关产品推荐

