0

我需要根据 WHERE 子句的相关数据位于链接开放数据云中的条件查询本地 Hibernate 托管数据存储中的持久对象。

有没有办法将休眠会话读取为 RDF?如果是这样,我至少可以使用组合数据集来决定从 Hibernate 中检索哪些对象。

正如我所熟悉的那样,该解决方案最好将 Hibernate Session 暴露在 Jena 内部。此外,我需要支持 RDFS 推理和 SPARQL 进行检索。

4

2 回答 2

1

由于您将使用 Jena(和 ARQ)来执行 SPARQL 查询,因此您可以使用自定义FileManager来解析 Hibernate 对象/图形(假设您希望每个对象都由图形表示)。

Jena 有一个关于使用 a来定位模型的简短 HOWTO , ARQ RDF 数据集教程(参见“描述数据集”部分)可能会提供一些关于如何对图 URI(以及这些图的内容)进行更自定义映射的提示作为 RDF 数据集)到现有的 Hibernate 管理的数据。FileManager

另一种选择可能是创建一个映射到现有 Hibernate 模式的自定义SDB 布局。我不知道 SDB 在这方面有多灵活。

于 2009-08-05T17:04:39.433 回答
0

这是我发布问题后发现的内容:

没有现成的工具可以专门将 Hibernate Session 增加三倍。要自己实现一个,我可能需要使用GraphBase作为基础或 StageGenerator来实现Graph 。因此,这个问题的答案是“没有”,所以我继续考虑如何实现它。

我需要决定是否将会话中已经存在的对象(即已经被一些较早的查询访问)、依赖访问数据库或两者都做。如果要访问数据库,我还需要决定是否加载整个对象,然后将这些对象附加到会话中,或者使用投影来节省将额外数据带入堆中,但代价是额外的往返。

使用 Graph 显然对于支持推理是必不可少的,尽管它比使用ARQs StageGenerator慢,因为它可以查询一组三元组模式,但这使得始终使用 SPARQL 变得必不可少,这似乎有点不灵活。

到目前为止,最佳解决方案似乎是:

  • 实现一个(可能是只读的)图 - 说“HibernateGraph”
  • 让 HibernateGraph 检查 Hibernate PersistenceContext 对象并在自定义迭代器的头部返回三元组。
  • 当迭代器到期时,使用 Criteria 接口从数据库加载数据页。
  • 对于具有已知谓词 URI 的查询,将 URI 映射到列并使用紧密投影,否则加载整个对象并迭代 getter,将 getter 名称映射到 URI。
  • 在其他情况下,使用简单的方案进行映射,例如每个主题的http://root/url/instances/EntityName/id
  • 创建一个帮助器对象以允许使用自定义 StageGenerator 执行 SPARQL。
  • StageGenerator 应该包装内置的 StageGenerator。
  • 在自定义阶段生成器中,将除 HibernateGraph 之外的图形上的查询向上传递到内置的 StageGenerator。
  • 也跳过没有优化解决方案的任何一组三重模式,例如任何一组一个模式。
  • 在可以实现优化查询的情况下,运行适当的 Criteria 函数并像以前一样将结果逐个单元格映射到三元组。

还有另一个名为OpExecutor的 SPI可能有助于将 FILTER 分辨率推送到数据库中,从而进一步提高性能。

目前我已经把它作为一个副项目,我很可能会作为 LGPL 软件发布。

于 2009-08-10T11:08:18.290 回答