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