我需要根据标准来查询我的本地Hibernate托管数据存储区中的持久对象,其中WHERE子句的相关数据位于链接开放数据云中。
有没有办法将Hibernate Session作为RDF读取?如果是这样,我至少可以使用组合的数据集来决定从Hibernate中检索哪些对象。
优选地,解决方案会将Hibernate Session暴露在Jena内部,因为我熟悉它。另外,我需要支持RDFS推理和SPARQL检索。
答案 0 :(得分:1)
由于您将使用Jena(和ARQ)来执行SPARQL查询,因此您可以使用自定义FileManager
来解析Hibernate对象/图形(假设您希望每个对象都由图形表示)。
Jena有short HOWTO使用FileManager
来定位模型,而ARQ RDF dataset tutorial(请参阅“描述数据集”部分)可能会提供一些有关如何执行更多操作的提示将图URI(以及这些图的内容作为RDF数据集)的自定义映射到现有的Hibernate管理数据。
另一个选项可能是创建一个映射到现有Hibernate架构的自定义SDB layout。我不知道SDB在这方面有多灵活。
答案 1 :(得分:0)
以下是我发布问题后发现的内容:
没有专门针对Hibernate Session进行三重化的现有工具。要自己实现,我需要使用Graph作为基础或StageGenerator来实现GraphBase。因此,问题的答案是“没有一个”,所以我继续考虑如何实施它。
我需要决定是否对会话中已有的对象进行三重化(即已经被某些早期查询访问过),依赖于访问数据库或两者兼而有之。如果要进入数据库,我还需要决定是否加载整个对象,然后将其附加到会话或使用投影来保存将额外的数据带入堆中,而不用额外的往返。
使用Graph对于支持推理显然是必不可少的,尽管它比使用ARQ StageGenerator慢,因为它可以查询一组三重模式,但这使得必须始终使用SPARQL,这看起来有点不灵活。
到目前为止,最佳解决方案似乎是:
还有另一个名为OpExecutor的SPI可能有助于将FILTER解析推送到数据库中,从而进一步提高性能。
目前我已将此作为一个侧面项目,我可能会将其作为LGPL软件发布。