You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用rdflib对接AnzoGraph社区版时Graph Store Protocol请求报错排查

解决AnzoGraph社区版与rdflib SPARQLStore的406错误问题

问题根源

  • HTTP 406错误本质是客户端请求的响应格式服务器不支持,rdflib默认的Accept头与AnzoGraph的兼容存在问题。
  • 你错误地将Graph Store Protocol端点/rdf-graph-store传给了SPARQLStore:这个端点仅用于读写RDF图数据,并非执行SPARQL查询的端点,AnzoGraph的SPARQL查询/更新端点是/sparql。

修正方案

方案1:针对SPARQL查询场景

明确指定SPARQL查询端点,并设置AnzoGraph支持的响应格式,修改代码如下:

import rdflib
from rdflib.plugins.stores.sparqlstore import SPARQLStore

# 初始化SPARQLStore,指定AnzoGraph的SPARQL端点
store = SPARQLStore(
    query_endpoint="http://192.168.1.104:7070/sparql",
    update_endpoint="http://192.168.1.104:7070/sparql"
)
# 设置服务器支持的响应格式,避免406错误
store.setAcceptHeader("application/sparql-results+json")

graph = rdflib.ConjunctiveGraph(store=store)
result = graph.query("select (count(*) as ?c) {?s ?p ?o}")
for row in result:
    print(row.c)

方案2:针对Graph Store Protocol操作场景

如果你的需求是通过Graph Store Protocol读写图数据(而非执行SPARQL查询),则不应使用graph.query(),而是改用rdflib对应的图操作方法,示例如下:

import rdflib
from rdflib.plugins.stores.sparqlstore import SPARQLStore

# 使用Graph Store端点
store = SPARQLStore("http://192.168.1.104:7070/rdf-graph-store")
graph = rdflib.ConjunctiveGraph(store=store)

# 示例:从端点加载数据
graph.parse()
# 示例:序列化输出数据
print(graph.serialize(format="turtle").decode())

额外注意事项

  • 确认Docker端口映射7070:7070正确,该端口是AnzoGraph的SPARQL服务端口。
  • 如果AnzoGraph开启了认证,需在SPARQLStore中添加凭据:
    store.setCredentials("你的用户名", "你的密码")
    

内容的提问来源于stack exchange,提问作者user2302244

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 00:15:33