在 Jena TDB 三重存储中持久化数据

Persisting data in Jena TDB triple store

我正在使用 Jena TDB 来保存 RDF 数据。在此之前,我搜索了如何在 TDB 中持久化数据,并解决了这个 link 的问题。 Ryan 提供的答案清楚地提到了各种概念之间的区别,我得到的关于数据集的观点之一是:

"Dataset 就像一个 DataSource,但它的三元组是静态的 - 你不希望添加新的或删除现有的。这些家伙 read -仅"

牢记这一点,我将一些 rdf 数据存储在数据集中的命名模型中。现在,当我尝试 store/append 一些新数据时,它显然会覆盖前一个数据。因此,这显然与 Ryan 提到的相反, 只读性质。 因此,我需要澄清的各个方面包括:

  1. Ryan 关于他所讨论的关于数据集的内容是否正确?
  2. 如果第 1 点的答案是肯定的,那为什么我可以覆盖?
  3. TDB 在持久化数据之前是否检查重复项。我问这个是因为我试图插入几个重复的 RDF 语句并且我期望 rdf 语句的数量增加但是没有增加!

您不应期望在插入同一个图形时三次计数会增加。我猜你正在处理 TDB 中的默认图。如果情况并非如此,您应该感到惊讶,这很可能是由于底层三元组存储中的错误造成的。在同一上下文中陈述同一事实的多个三元组只是多余的。

如果您打算从不同的上下文(例如不同的信息源)收集事实,那么您可以将三元组存储在单独的图中。事实上,大多数三重商店都是四重商店,并且允许您这样做。 TDB 是一个四元存储,您可以加载和使用多个图形。详细了解 TDB datasets

在收到反馈并调整 Jena 后,我找到了所有要点的答案:

  1. Ryan 关于他所讨论的关于数据集的内容是否正确?

    从Joshua的评论和阅读API我发现Jena框架已经改进了很多,所以Ryan关于数据集的解释不再有效。

  2. TDB 在持久化数据之前是否检查重复项。我问这个是因为我试图插入几个重复的 RDF 语句并且我期望 rdf 语句的数量增加但是没有增加!

    我试图在同一个命名图中插入重复的语句,但我没有发现计数有任何增加。我相信 TDB 不会检查重复(文档中未提及),但如果图中已经存在相同的语句,它会做什么,它只是用新语句替换现有语句。因此,它不会导致任何计数增加。