我试图了解如何将一种请求从GET更改为POST。目前,我使用http://virtuoso.redisbiotech.com:8890/sparql作为端点,如果我在那里写一个查询,它会作为get请求发送,因为get请求对url长度有限制,对我来说不合适。因此我需要将其更改为POST。有没有人熟悉Virtuoso并知道如何做到这一点?我的意思是我需要从该链接向服务器发送POST请求,查询应该在请求体内。我的Virtuoso服务器在Amazon AWS实例上运行。
答案 0 :(得分:1)
在同一次互动中回答your other question之后,我强烈认为需要退后一步,因为这个问题和另一个问题都变得更加清晰XY Problem的元素。 / p>
解决您使用the SPARQL input form看到的问题并不一定能解决您在Apache Jena身上看到的问题,而您并未对此进行描述。 (我相信您已查看了Virtuoso Jena Provider's docs。)
我强烈建议您提供更大的图片说明,说明您要完成的工作,起点是什么,以及要求使用的工具(如果有的话) - 例如,Apache Jena是强制性的吗?
所有这一切 - 在您的链接中找到的Virtuoso中内置的SPARQL输入表单具有一些固有的局限性。它不是作为一个什么都做的工具而构建的。在那里输入的所有查询都是使用GET
方法提交的,而该动词的此表单的实现具有明显的URI长度限制。 (您所看到的问题本身并不是HTTP GET
动词的限制。)
我认为导致URI超出表单限制的查询会导致用户立即出错,而不会将截断的查询提交给SPARQL处理器,并建议您在{{{{{{{ 3}}和/或Virtuoso Users mailing list。
答案 1 :(得分:1)
您可以在该端点上发出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 ] ] .