Python调用Fuseki无结果,但curl/在线端点正常的问题解决
解决rdflib调用Fuseki时default-graph-uri参数问题
方案一:修改rdflib请求,移除default-graph-uri参数
rdflib连接远程SPARQL端点时默认会携带default-graph-uri参数,你可以通过两种方式去掉它:
方法1:用SPARQLWrapper直接构造请求
绕开rdflib的Graph.query,手动控制请求参数:from SPARQLWrapper import SPARQLWrapper, JSON sparql = SPARQLWrapper("http://你的Fuseki端点地址/sparql") sparql.setQuery("SELECT * WHERE { ?s ?p ?o } LIMIT 10") sparql.setReturnFormat(JSON) # 清除默认添加的default-graph-uri参数 sparql.addCustomParameter("default-graph-uri", None) results = sparql.query().convert()方法2:调整rdflib的Graph配置
若坚持用rdflib的Graph对象,可通过存储对象的查询参数控制:from rdflib import Graph g = Graph('SPARQLUpdateStore') g.open("http://你的Fuseki端点地址/sparql", "http://你的Fuseki端点地址/update") query = "SELECT * WHERE { ?s ?p ?o } LIMIT 10" # 指定default_graph为None,避免生成default-graph-uri参数 results = g.store.query(query, default_graph=None) for row in results: print(row)
方案二:配置Fuseki适配default-graph-uri参数
不想改代码的话,可在Fuseki中把你的数据集设为默认图,让参数匹配到数据:
修改Fuseki配置文件(fuseki.ttl)
在数据集配置块中添加fuseki:defaultGraph指向你的数据集URI:<#你的数据集ID> a fuseki:Dataset ; fuseki:datasetImplementation [ a tdb2:TDB2Dataset ; tdbb:location "/你的数据集存储路径" ; ] ; fuseki:defaultGraph <http://你的数据集URI> . # 将数据集设为默认图若用Fuseki Web界面创建数据集,直接在创建时填写“Default Graph URI”为你的数据集对应URI(默认创建的数据集可填空或数据集名称对应的URI)。
重启Fuseki服务
配置修改后重启Fuseki,rdflib携带default-graph-uri的请求就能正确匹配数据集,返回查询结果。
内容的提问来源于stack exchange,提问作者Thomas Kimber
相关产品推荐
相关产品推荐

