使用Sesame处理SPARQL / XML流(Vitruoso的输出)

时间:2014-04-30 06:15:38

标签: java sesame virtuoso

我有一个SPARQL / XML结果流(碰巧是从Virtuoso服务器回来的),我希望在从http连接流回来时处理结果。

芝麻有一个非常好的库来做这件事 - 假设你说完全芝麻这很容易,我实现了。但是,不是让Sesame生成请求,而是通过一个不完整的Sesame的不同HTTP连接来做这个,而且我不知道让Sesame库做到这一点的直接方法。

使用芝麻,您可以RepositoryConnection使用TupleQuery创建.prepareTupleQuery,然后传递.evaluate解决方案处理程序(扩展TupleQueryResultHandlerBase的内容)。< / p>

我假设有一些类可以传递解决方案处理程序和InputStream,并让Sesame类负责解析,缓冲和进行回调等。当然,代码在那里,但我已经在源头趟过几个小时了,看起来我正在圈子里去。

如果还有其他库或解决方案也很好,我很乐意接受指针,但我想我会利用我的其他芝麻相关代码。

1 个答案:

答案 0 :(得分:2)

您可以使用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的几个库存实现,但如果您希望完全控制解析器输出处理,那么创建自己的库存非常简单。