如何通过 curl(通过 HTTP)将 SPARQL 查询发送到 Openlink Virtuoso 并在 JSON 中获取结果

How can I send SPARQL queries via curl (over HTTP) to Openlink Virtuoso and obtain the results in JSON

我正在寻找详尽的 sparql-graph-crud 文档或其他机制,详细说明如何向 Openlink Virtuoso SPARQL 端点提交查询。

简而言之,我想学习如何通过 curl(通过 HTTP)将 SPARQL 查询(带有 WHERE 子句)发送到 Openlink Virtuoso 并在 JSON 中获取结果.

例如,我想在 localhost.

向 Openlink Virtuoso 提交查询 SELECT * FROM <http://www.example.com/ABC> where { ?s ?p ?o } LIMIT 100

OpenLink Virtuoso 页面上提供的示例(如下)不足以满足我的查询。

curl --verbose --url "http://localhost:8890/sparql-graph-crud?graph-uri=urn:graph:update:test:post"

作为described in the Virtuoso documentation, the /sparql-graph-crud endpoint is meant specifically for the SPARQL 1.1 Graph Store HTTP Protocol。如果您只想像示例一样执行 SELECT 查询,您可以简单地使用 /sparql 端点,使用 &query= 加上查询的 URI-escaped 字符串,以及 &format=application/rdf+json 在 URI 中得到结果 JSON.

在您的网络浏览器中使用您的 Virtuoso /sparql 查询表单(即 http://localhost:8890/sparql)提交您的查询请求默认 (HTML) 输出,然后只需更改 &format= 参数即可调整生成的 URI,如 --

curl --verbose --url "http://localhost:8890/sparql-graph-crud?default-graph-uri=&query=SELECT+*+FROM+%3Chttp%3A%2F%2Fwww.example.com%2FABC%3E+where+%7B+%3Fs+%3Fp+%3Fo+%7D+LIMIT+100&format=application/rdf+json&CXML_redir_for_subjs=121&CXML_redir_for_hrefs=&timeout=30000&debug=on&run=+Run+Query+"

另请注意,您可以加载 the above URI, having changed only the &query= to &qtxt=, to see the whole form filled out in your browser

对于相当广泛的文档,有 Virtuoso website and Virtuoso product manual

OpenLink Community Forum and Virtuoso Users mailing list 也是找到特别了解 Virtuoso 的人(包括许多 Virtuoso 开发人员)的好地方。

根据,我编写了以下解决方案。

date;time curl -X POST "http://localhost:8890/sparql" \
   -H "Content-Type: application/x-www-form-urlencoded" \
   -H "Accept:application/sparql-results+json" \
   --data-urlencode 'format=json' \
   --data-urlencode 'default-graph-uri=http://www.example.com/ABC' \
   --data-urlencode 'query=SELECT * FROM <http://www.example.com/ABC> WHERE { ?s ?p ?o } LIMIT 5' \
   --write-out '%{url_effective};%{http_code};%{time_total};%{time_namelookup};%{time_connect};%{size_download};%{speed_download}\n';date;