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

标签 java sesame virtuoso

我有一个 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/

相关文章:

Java 扫描器类帮助

Sparql 查询几何做奇怪的事情

python - POST 响应长度非零,但读取为空

java - 如何在 Sesame 2.7.7 上的 INSERT 查询中自动生成新的实例标识符

java - 具有来自不同服务器的存储库的联合存储

java - RDF4J:EC2 上出现 "Failed to get server protocol"错误,但本地没有

debian - 如何从命令行手动重新启动或停止 virtuoso

java - 如何从我的 Android 设备访问本地 REST API?

java - 用Java打印文本文件

java - 使用 Java string.indexOf() 返回不同的子字符串——可能吗?