【问题标题】:GraphDB export/import or SPARQL to transfer data from a repository to anotherGraphDB 导出/导入或 SPARQL 将数据从存储库传输到另一个
【发布时间】:2021-09-30 19:53:35
【问题描述】:

我正在使用 GraphDb 并且遇到数据更新问题: 存储库中的数据来自 2 个来源:

  • 数以百万计的三元组来自外部来源,并且每周通过完全替换进行更新
  • 数以千计的三元组由用户创建并且是永久性的。它们使用与外部源相同的本体并存储在相同的存储库中,因此 SPARQL 查询可以在两个数据上运行而没有任何区别。然而,一个简单的 SPARQL 查询可以检索所有用户的三倍。

问题在于外部源的每周更新。 我的第一个想法是

  • 导出用户数据
  • 导入并替换新的外部数据集
  • 重新导入用户数据

问题:我需要重新导入导出的数据,导入是 RDF 格式,在导出中不可用。

另一种方式(大致相同):

  • 将每周更新导入新存储库中
  • 将用户数据从“旧”存储库复制到新存储库
  • 将服务器切换到新的存储库。

问题:为了复制用户数据,我需要一个“INSERT SELECT”SPARQL 语句,该语句使用 SQL(无服务)中存在但 SPARQL 中不存在的服务

最后 GraphDB Ontorefine 应该可以完成这项工作,但不是每周都有效。 另一种方法是将用户数据存储在单独的存储库中,但涉及排序的 SPARQL 查询可能会变得难以维护且运行缓慢。

我还可以以 JSON 格式导出用户数据,并以编程方式生成 RDF/XLM 文件并将它们发送到 GraphDB API。这在技术上是可行的,我在非常特殊的情况下这样做,而且效果很好,但对于大量数据、速度慢和大型开发人员的工作来说并不可靠。

简而言之:我被卡住了!

【问题讨论】:

  • 您能否澄清您所说的“为了复制用户数据,我需要一个“INSERT SELECT”SPARQL 语句,该语句使用存在于 SQL(无服务)但不存在于 SPARQL 中的服务”听起来像你想复制,但为什么要插入? SQL 中存在的服务是什么意思?
  • 理想情况下,我可以运行一个 SPARQL 查询,例如“从服务 B 中插入服务 A SELECT”,这是一种副本,就像在 SQL 中一样,您可以在“表 A SELECT 中插入”表 B”。但这不存在。关于“SQL 中存在的服务”,我说的是 SQL 中存在的插入/选择,而不是服务语句。
  • 现在我很好奇为什么下面这样的东西不起作用... INSERT { GRAPH localhost:7200/repositories/my_repo> {?s ?p ?o .}} WHERE{ ?s ?p ? o } GraphDB 是否只允许对活动存储库进行查询?从文档中很难分辨,但我确实看到“如果您使用 Workbench 作为 SPARQL 端点,您的所有查询都将发送到当前活动位置的存储库”。
  • 实际上对 GraphDB 存储库的访问是使用 SERVICE 完成的。使用 GRAPH,您可以像在 SPARQL 1.1 中一样访问存储库中的图形。问题是 SELECT {?s ?p ?o} WHERE {SERVICE ... 有效,但从我的测试 INSERT {SERVICE ... 无效(“语法错误”)。但显而易见的解决方案是在命名图中从外部源导入数据,并在另一个图中创建用户数据。因此,当更新/替换时,我可以选择已删除/更新的图表。

标签: json backup rdf restore graphdb


【解决方案1】:

见 cmets,其实这不是问题,只是误解了图在存储库中的作用

【讨论】:

    猜你喜欢
    • 2019-12-14
    • 2012-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-30
    • 2017-12-01
    • 1970-01-01
    相关资源
    最近更新 更多