我需要根据 WHERE 子句的相关数据位于链接开放数据云中的条件查询本地 Hibernate 托管数据存储中的持久对象。
有没有办法将休眠会话读取为 RDF?如果是这样,我至少可以使用组合数据集来决定从 Hibernate 中检索哪些对象。
正如我所熟悉的那样,该解决方案最好将 Hibernate Session 暴露在 Jena 内部。此外,我需要支持 RDFS 推理和 SPARQL 进行检索。
我需要根据 WHERE 子句的相关数据位于链接开放数据云中的条件查询本地 Hibernate 托管数据存储中的持久对象。
有没有办法将休眠会话读取为 RDF?如果是这样,我至少可以使用组合数据集来决定从 Hibernate 中检索哪些对象。
正如我所熟悉的那样,该解决方案最好将 Hibernate Session 暴露在 Jena 内部。此外,我需要支持 RDFS 推理和 SPARQL 进行检索。
由于您将使用 Jena(和 ARQ)来执行 SPARQL 查询,因此您可以使用自定义FileManager
来解析 Hibernate 对象/图形(假设您希望每个对象都由图形表示)。
Jena 有一个关于使用 a来定位模型的简短 HOWTO , ARQ RDF 数据集教程(参见“描述数据集”部分)可能会提供一些关于如何对图 URI(以及这些图的内容)进行更自定义映射的提示作为 RDF 数据集)到现有的 Hibernate 管理的数据。FileManager
另一种选择可能是创建一个映射到现有 Hibernate 模式的自定义SDB 布局。我不知道 SDB 在这方面有多灵活。
这是我发布问题后发现的内容:
没有现成的工具可以专门将 Hibernate Session 增加三倍。要自己实现一个,我可能需要使用GraphBase作为基础或 StageGenerator来实现Graph 。因此,这个问题的答案是“没有”,所以我继续考虑如何实现它。
我需要决定是否将会话中已经存在的对象(即已经被一些较早的查询访问)、依赖访问数据库或两者都做。如果要访问数据库,我还需要决定是否加载整个对象,然后将这些对象附加到会话中,或者使用投影来节省将额外数据带入堆中,但代价是额外的往返。
使用 Graph 显然对于支持推理是必不可少的,尽管它比使用ARQs StageGenerator慢,因为它可以查询一组三元组模式,但这使得始终使用 SPARQL 变得必不可少,这似乎有点不灵活。
到目前为止,最佳解决方案似乎是:
还有另一个名为OpExecutor的 SPI可能有助于将 FILTER 分辨率推送到数据库中,从而进一步提高性能。
目前我已经把它作为一个副项目,我很可能会作为 LGPL 软件发布。