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

Java 使用Sesame处理SPARQL/XML流(从Vitruoso输出),java,sesame,virtuoso,Java,Sesame,Virtuoso,我有一个SPARQL/XML结果流(恰好是从Virtuoso服务器返回的),我希望在结果从http连接返回时对其进行处理 Sesame有一个很好的库来实现这一点——假设你说的是完整的Sesame,这很容易,我已经实现了。但是,我不是让Sesame生成请求,而是通过一个不同的HTTP连接来生成请求,这个HTTP连接不说完整的Sesame,我不知道有什么方法可以让Sesame库立即生成请求 使用Sesame,您可以使用RepositoryConnection创建一个TupleQuery和.prepa

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

Sesame有一个很好的库来实现这一点——假设你说的是完整的Sesame,这很容易,我已经实现了。但是,我不是让Sesame生成请求,而是通过一个不同的HTTP连接来生成请求,这个HTTP连接不说完整的Sesame,我不知道有什么方法可以让Sesame库立即生成请求

使用Sesame,您可以使用
RepositoryConnection
创建一个
TupleQuery
.prepareTupleQuery
,然后传递
.evaluate
解决方案处理程序(扩展
TupleQueryResultHandlerBase

我假设在后台有一些类,在那里我可以传递一个解决方案处理程序和一个
InputStream
,让Sesame类负责解析、缓冲和回调等。当然,代码在那里,但我已经涉猎了源代码好几个小时,看起来像是在兜圈子

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

您可以使用芝麻的实用程序来实现这一点。最简单的方法是让它将流解析为查询结果对象。像这样:

InputStream in = ...;
TupleQueryResult result = QueryResultIO.parse(in, TupleQueryResultFormat.SPARQL);
以上是硬连线以创建结果对象。如果您想要对处理进行更多控制,可以创建一个对象,并将其分配给自己的TupleQueryResultHandler实现。大概是这样的:

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

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

parser.parseQueryResult(in); 
或者像这样,如果您使用的是较旧版本的Sesame(2.6或更旧版本):


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

谢谢。虽然我认为您的答案中有一个“输入错误”,而不是parser.setQueryResultHandler,但它应该是parser.setTupleQueryResultHandler.edits必须至少包含6个字符-因此我不能只添加“Tuple”,我还必须在底部添加“(编辑)”。奇怪。对不起,我原来的答案是正确的
setTupleQueryResultHandler
已被弃用,
setQueryResultHandler
是推荐的方法。我将为您在Javadoc中添加一个ref。尽管按照这种逻辑,我使用的
parse
方法也是不正确的。现在已修复。看起来它在2.7中被弃用了?还有很多芝麻2.6代码。看起来2.6中不存在较新的版本,对吗?是的,这是真的,因此如果您使用的是较旧版本的Sesame,则需要使用较旧的方法。
TupleQueryResultHandler handler = new MyCustomStreamingResultHandler();
parser.setTupleQueryResultHandler(handler);

parser.parse(in);