Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon Neptune SPARQL Java查询:我可以获得原始JSON响应吗?_Json_Sparql_Amazon_Amazon Neptune - Fatal编程技术网

Amazon Neptune SPARQL Java查询:我可以获得原始JSON响应吗?

Amazon Neptune SPARQL Java查询:我可以获得原始JSON响应吗?,json,sparql,amazon,amazon-neptune,Json,Sparql,Amazon,Amazon Neptune,用于Amazon Neptune SPARQL SELECT查询的Java API使用文档仅显示如何迭代TupleQuery的结果。 有没有办法获得原始JSON响应,使其与使用REST接口调用的代码兼容 如注释中所述,Java API只使用JSON REST响应,并将其作为TupleQueryResult对象呈现给您 如果您希望以某种方式接收原始JSON,您可以直接使用任何JavaREST/HTTP客户端库调用Neptune REST端点 或者,您还可以将通过API返回的结果重新转换为JSON

用于Amazon Neptune SPARQL SELECT查询的Java API使用文档仅显示如何迭代TupleQuery的结果。


有没有办法获得原始JSON响应,使其与使用REST接口调用的代码兼容

如注释中所述,Java API只使用JSON REST响应,并将其作为
TupleQueryResult
对象呈现给您

如果您希望以某种方式接收原始JSON,您可以直接使用任何JavaREST/HTTP客户端库调用Neptune REST端点

或者,您还可以将通过API返回的结果重新转换为JSON(或任何其他序列化格式),如下所示:

public static void main( String[] args )
    {
        String sparqlEndpoint = "https://your-neptune-endpoint:port/sparql";
        Repository repo = new SPARQLRepository(sparqlEndpoint);
        repo.initialize();

        try (RepositoryConnection conn = repo.getConnection()) {
           String queryString = "SELECT ?s ?p ?o WHERE { ?s ?p ?o } limit 10";

           TupleQuery tupleQuery = conn.prepareTupleQuery(QueryLanguage.SPARQL, queryString);

           TupleQueryResultHandler jsonWriter = new SPARQLResultsJSONWriter(System.out);
           tupleQuery.evaluate(jsonWriter);
        }
    }

当然,这比直接使用REST客户机效率要低,因为您基本上是先反序列化,然后立即重新序列化结果,但如果您已经在使用Rdf4j,这只是一个最小的代码更改。

不清楚您在问什么。要获得原始JSON响应,可以使用也称SPARQL协议。问题到底是什么?Java代码只是使用REST API并在结果上提供Java接口。我很高兴使用REST,但身份验证协议非常重要(以标准方式检索凭据并构建签名密钥)。我喜欢API为我处理这一点,但原始JSON更适合我的应用程序。理想的解决方案实际上是找出ApacheHTTP调用的凭据管理器和签名者,然后执行REST。我找不到示例,因此认为API更标准,更易于维护。您链接到的Java文档不处理AFAICT身份验证。它只使用RDF4J的标准SPARQL客户端。我认为文档假定您的Java代码与Neptune运行在同一虚拟私有云中的EC2实例上,因此不需要身份验证?如果我知道的足够多,可以提出正确的问题,这就是答案。我确实认为其余的电话会更好。我已经重新设计了我的问题,以获得有关如何拨打这些电话的帮助: