我有一个SPARQL / XML结果流(可能是从Virtuoso服务器返回),我想在结果从http连接流回时对其进行处理。

芝麻有一个很好的库来做这个-假设您正在讲完整的芝麻,这很容易,我已经实现了。但是,不是让Sesame生成请求,而是通过一个不完整的Sesame的HTTP连接来完成请求,而且我不知道让Sesame库立即执行此操作的方法。

使用Sesame,您可以使用RepositoryConnectionTupleQuery创建.prepareTupleQuery,然后将.evaluate传递给解决方案处理程序(扩展了TupleQueryResultHandlerBase的内容)。

我假设有一些可以在其中传递解决方案处理程序和InputStream的类,并让Sesame类负责解析,缓冲和进行回调等操作。当然,其中包含代码,但是我已经花了好几个小时在源代码中苦苦挣扎,好像我在转圈。

如果还有另一个很好的库或解决方案,我会很乐意使用该指针,但是我想我只是会利用我与芝麻有关的其他代码。

最佳答案

您可以为此使用Sesame的QueryResultIO实用程序。最简单的方法是让它将流解析为查询结果对象。像这样:

InputStream in = ...;
TupleQueryResult result = QueryResultIO.parse(in, TupleQueryResultFormat.SPARQL);


上面的代码很难创建结果对象。如果要对处理进行更多控制,可以创建一个TupleQueryResultParser对象,并将其分配给自己的TupleQueryResultHandler实现。像这样:

TupleQueryResultParser parser = QueryResultIO.createParser(TupleQueryResultFormat.SPARQL);

TupleQueryResultHandler handler = new MyCustomStreamingResultHandler();
parser.setQueryResultHandler(handler);

parser.parseQueryResult(in);


或类似这样,如果您使用的是较早版本的Sesame(2.6或更旧版本):

TupleQueryResultHandler handler = new MyCustomStreamingResultHandler();
parser.setTupleQueryResultHandler(handler);

parser.parse(in);


Sesame提供了TupleQueryResultHandler的几种常规实现,但是如果您希望完全控制解析器的输出处理,则也可以直接创建自己的实现。

关于java - 使用Sesame处理SPARQL/XML流(来自Vitruoso的输出),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23380911/

10-13 02:41