我有一个 SPARQL/XML 结果流(恰好从 Virtuoso 服务器返回),我想在结果从 http 连接流回时对其进行处理。
Sesame 有一个非常好的库可以做到这一点 - 假设你说的是完整的 Sesame,这很容易,我已经实现了。但我不是让 Sesame 生成请求,而是通过不同的 HTTP 连接来执行此操作,该连接不支持完整的 Sesame,并且我不知道有什么直接方法可以让 Sesame 库执行此操作。
使用 Sesame,您可以使用 RepositoryConnection
使用 .prepareTupleQuery
创建一个 TupleQuery
,然后传递 .evaluate
解决方案处理程序(扩展TupleQueryResultHandlerBase
的东西)。
我假设在后台有一些类,我可以将解决方案处理程序和 InputStream
传递给 Sesame 类,并让 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/