如何基于查询文件发送 SPARQL cURL 请求?

How to send a SPARQL cURL request based on a query file?

我在名为 test.rq 的文件中有一个 SPARQL 查询。使用来自该文件的查询的 cURL 发送 SPARQL 请求的好方法是什么?

(我可以使用专用的 SPARQL 客户端或通过使用 HTTP 库对请求进行编程来执行此类请求,但我假设使用快速命令行请求,例如使用 cURL 应该也是可行的。)

发送 SPARQL 请求的标准方式有以下三种:

尝试 1:GET

我尝试了类似下面的操作,但是 $(VALUE) 必须来自文件 test.rq 并且它必须是 URL 编码的。

curl -d 'query=$(VALUE)' $(ENDPOINT)

方法 2:URL-编码 POST

我尝试了类似下面的操作,但是 $(VALUE) 应该再次来自文件 test.rq,并且应该应用 URL-编码。

curl -X POST -d '$(VALUE)' -H 'Content-Type: application/x-www-form-urlencoded' $(ENDPOINT)

方法 3:直接 POST

这应该在没有 URL 编码的情况下工作,执行如下操作。

curl -X POST -d '@query.rq' -H 'Content-Type: application/sparql-query' $(ENDPOINT)

不幸的是,大多数 SPARQL 端点不支持这第三种方法:(

文件中的案例 1:

URL 对文件内容进行编码,并将其作为 ?query=

放入 HTTP URL 查询字符串中

curl --data-urlencode 'query@Q.rq' $(ENDPOINT)

遗憾的是,支持哪种方法取决于三元组存储。 有效,例如。使用 Virtuoso,方法 3 有效,例如。使用 Blazegraph。