1

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

Sesame 有一个非常好的库来执行此操作 - 假设您说的是完整的 Sesame,这很容易而且我已经实现了。但是,我没有让 Sesame 生成请求,而是通过一个不同的 HTTP 连接来执行它,该连接不讲完整的 Sesame,而且我不知道让 Sesame 库执行此操作的直接方法。

使用 Sesame,您可以使用RepositoryConnectioncreate a TupleQuerywith.prepareTupleQuery然后传递.evaluate解决方案处理程序(扩展的东西TupleQueryResultHandlerBase)。

我假设引擎盖下有一些类,我可以传递解决方案处理程序和一个InputStreamto 并让 Sesame 类负责解析、缓冲和进行回调等。当然代码在那里,但我我已经在源头中涉水了好几个小时,似乎我在绕圈子。

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

4

1 回答 1

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

于 2014-05-01T05:28:04.847 回答