如何在使用 VIRTUOSO sparql 服务时将请求类型从 GET 更改为 POST
How to change request type from GET to POST while using VIRTUOSO sparql service
我正在尝试了解如何将请求类型从 GET 更改为 POST。目前,我正在使用 http://virtuoso.redisbiotech.com:8890/sparql 作为端点,如果我在其中编写查询,它将作为获取请求发送,并且由于获取请求对 url 长度有限制,因此不适用于我。因此我需要将其更改为 POST。有没有人熟悉 Virtuoso 并且知道该怎么做?我的意思是我需要从 link 向服务器发送 POST 请求,并且查询应该在请求正文中。我的 Virtuoso 服务器在亚马逊 AWS 实例上运行。
已回答your other question on this same interaction, I'm strongly thinking that a step back is needed, as both this question and the other are becoming more clearly elements of an XY Problem。
解决您遇到的问题 the SPARQL input form will not necessarily solve the issue you're apparently seeing with Apache Jena, which you've not described. (I trust you have reviewed the Virtuoso Jena Provider's docs。)
我强烈建议您提供一个更全面的描述,说明您要完成的工作、您的起点是什么,以及您 需要 使用什么(如果有)工具使用——例如,Apache Jena 是强制性的吗?
综上所述——Virtuoso 中内置的 SPARQL 输入表单,也就是您 link 中的表单,有一些固有的局限性。它不是作为一个无所不能的工具而构建的。在那里输入的所有查询都是使用 GET
方法提交的,并且 这个表单的那个动词的实现 有一个明显的 URI 长度限制。 (您看到的问题本身并不是 HTTP GET
动词的限制。)
我认为导致 URI 超出表单限制的查询应该立即向用户显示错误,根本无需将截断的查询提交给 SPARQL 处理器,建议您在 Virtuoso Users mailing list and/or the Virtuoso GIT project issues.
您可以在该端点上发出 POST 请求,您只需配置 java 代码即可。这是使用 curl 和 POST:
的默认查询
curl -X POST -F "format=text/turtle" -F "query=select distinct ?Concept where {[] a ?Concept} LIMIT 5" http://virtuoso.redisbiotech.com:8890/sparql
结果:
@prefix res: <http://www.w3.org/2005/sparql-results#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
_:_ a res:ResultSet .
_:_ res:resultVariable "Concept" .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
_:_ res:solution [
res:binding [ res:variable "Concept" ; res:value rdf:Property ] ] .
@prefix virtrdf: <http://www.openlinksw.com/schemas/virtrdf#> .
_:_ res:solution [
res:binding [ res:variable "Concept" ; res:value virtrdf:QuadMapFormat ] ] .
_:_ res:solution [
res:binding [ res:variable "Concept" ; res:value virtrdf:QuadStorage ] ] .
_:_ res:solution [
res:binding [ res:variable "Concept" ; res:value virtrdf:array-of-QuadMap ] ] .
_:_ res:solution [
res:binding [ res:variable "Concept" ; res:value virtrdf:QuadMap ] ] .
我正在尝试了解如何将请求类型从 GET 更改为 POST。目前,我正在使用 http://virtuoso.redisbiotech.com:8890/sparql 作为端点,如果我在其中编写查询,它将作为获取请求发送,并且由于获取请求对 url 长度有限制,因此不适用于我。因此我需要将其更改为 POST。有没有人熟悉 Virtuoso 并且知道该怎么做?我的意思是我需要从 link 向服务器发送 POST 请求,并且查询应该在请求正文中。我的 Virtuoso 服务器在亚马逊 AWS 实例上运行。
已回答your other question on this same interaction, I'm strongly thinking that a step back is needed, as both this question and the other are becoming more clearly elements of an XY Problem。
解决您遇到的问题 the SPARQL input form will not necessarily solve the issue you're apparently seeing with Apache Jena, which you've not described. (I trust you have reviewed the Virtuoso Jena Provider's docs。)
我强烈建议您提供一个更全面的描述,说明您要完成的工作、您的起点是什么,以及您 需要 使用什么(如果有)工具使用——例如,Apache Jena 是强制性的吗?
综上所述——Virtuoso 中内置的 SPARQL 输入表单,也就是您 link 中的表单,有一些固有的局限性。它不是作为一个无所不能的工具而构建的。在那里输入的所有查询都是使用 GET
方法提交的,并且 这个表单的那个动词的实现 有一个明显的 URI 长度限制。 (您看到的问题本身并不是 HTTP GET
动词的限制。)
我认为导致 URI 超出表单限制的查询应该立即向用户显示错误,根本无需将截断的查询提交给 SPARQL 处理器,建议您在 Virtuoso Users mailing list and/or the Virtuoso GIT project issues.
您可以在该端点上发出 POST 请求,您只需配置 java 代码即可。这是使用 curl 和 POST:
的默认查询curl -X POST -F "format=text/turtle" -F "query=select distinct ?Concept where {[] a ?Concept} LIMIT 5" http://virtuoso.redisbiotech.com:8890/sparql
结果:
@prefix res: <http://www.w3.org/2005/sparql-results#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
_:_ a res:ResultSet .
_:_ res:resultVariable "Concept" .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
_:_ res:solution [
res:binding [ res:variable "Concept" ; res:value rdf:Property ] ] .
@prefix virtrdf: <http://www.openlinksw.com/schemas/virtrdf#> .
_:_ res:solution [
res:binding [ res:variable "Concept" ; res:value virtrdf:QuadMapFormat ] ] .
_:_ res:solution [
res:binding [ res:variable "Concept" ; res:value virtrdf:QuadStorage ] ] .
_:_ res:solution [
res:binding [ res:variable "Concept" ; res:value virtrdf:array-of-QuadMap ] ] .
_:_ res:solution [
res:binding [ res:variable "Concept" ; res:value virtrdf:QuadMap ] ] .