如何在使用VIRTUOSO sparql服务时将请求类型从GET更改为POST

时间:2015-09-16 18:04:02

标签: sparql virtuoso

我试图了解如何将一种请求从GET更改为POST。目前,我使用http://virtuoso.redisbiotech.com:8890/sparql作为端点,如果我在那里写一个查询,它会作为get请求发送,因为get请求对url长度有限制,对我来说不合适。因此我需要将其更改为POST。有没有人熟悉Virtuoso并知道如何做到这一点?我的意思是我需要从该链接向服务器发送POST请求,查询应该在请求体内。我的Virtuoso服务器在Amazon AWS实例上运行。

2 个答案:

答案 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 ] ] .