通过REST用SPARQL向MarkLogic插入三元组遇错误,求排查
问题解答
现象是否正常?
这是完全正常的现象。核心原因如下:- SPARQL 1.1规范明确要求INSERT DATA这类UPDATE操作必须使用POST请求,GET请求仅支持只读查询(SELECT/ASK/CONSTRUCT/DESCRIBE)。
- MarkLogic严格遵循该规范,当你用GET请求发送INSERT DATA语句时,端点会将其当作SPARQL查询语句解析,而INSERT DATA不属于查询语法范畴,因此触发
XDMP-UNEXPECTED语法错误。 - Virtuoso允许通过GET执行UPDATE是它的扩展实现,并非SPARQL通用标准行为。
是否需要检查服务器配置?
不需要调整服务器配置,问题出在请求方式和格式上。你需要做以下调整:- 将请求方法从GET改为POST。
- 设置请求头的
Content-Type为application/sparql-update。 - 将
INSERT DATA语句放在请求体中发送,而非作为URL参数传递。
请求示例(curl命令):
curl -X POST \ http://data.mydomain.com:8910/v1/graphs/sparql \ -H "Content-Type: application/sparql-update" \ -d 'INSERT DATA { GRAPH <http://data.foobar.corp/people> { <http://data.foobar.corp/x> <http://www.foobar.com/#ID> "x" . } }'
内容的提问来源于stack exchange,提问作者lOlive
相关产品推荐
相关产品推荐

