将 Sesame 存储库复制到新存储库

Copy a Sesame repository into a new one

我想将现有 Sesame 存储库中的所有数据复制到新存储库中。我需要迁移,以便我在我的三重存储上使用 OWL-推理,这在内存存储库(我现有存储库的类型)中使用 OWLIM 是不可能的。

将所有三元组从存储库复制到新存储库的最有效方法是什么?

更新 1:

我很想知道为什么使用 SPARQL INSERT 不是一种有效的方法。我在新存储库的 SPARQL 更新部分下尝试了这段代码:

PREFIX : <http://dbpedia.org/resource/>
INSERT{?s ?p ?o} 
WHERE 
{ 
SERVICE <http://my.ip.ad.here:8080/openrdf-workbench/repositories/rep_name>
{ 
?s ?p ?o 
} 
}

我收到以下错误:

org.openrdf.query.UpdateExecutionException: org.openrdf.sail.SailException: org.openrdf.query.QueryEvaluationException:

请问是查询有误还是数据无法插入?我使用类似结构的查询从 DBpedia 插入数据。

手动(Workbench)

  1. 打开您要从复制的存储库。
  2. select 'Export'.
  3. 选择合适的导出格式('TriG' 或 'BinaryRDF' 是不错的选择,因为它们都保留上下文信息),然后点击 'download' 按钮将数据导出保存到本地磁盘.
  4. 打开要复制的存储库
  5. select 'Add'.
  6. 选择'select the file containing the RDF data you wish to upload'
  7. 单击 'Browse' 在您的本地磁盘上找到数据导出文件。
  8. 确保 'use Base URI as context identifier' 不是 selected.
  9. 点击'upload',然后坐下。

以编程方式

首先,打开 RepositoryConnnection 两个存储库:

RepositoryConnection source = sourceRepo.getConnection();
RepositoryConnection target = targetRepo.getConnection();

然后,读取source中的所有语句并立即插入到target中:

target.add(source.getStatements(null, null, null, true)); 

任何一种基本方法都应该适用于任何大小不超过几百万个三元组的存储库。当然,对于更大的批量大小,还有许多更高级的方法。