2

我想将现有 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 插入数据。

4

1 回答 1

2

手动(工作台)

  1. 打开要从中复制的存储库。
  2. 选择“导出”。
  3. 选择合适的导出格式(“TriG”或“BinaryRDF”是不错的选择,因为它们都保留了上下文信息),然后点击“下载”按钮将数据导出保存到本地磁盘。
  4. 打开要复制的存储库。
  5. 选择“添加”。
  6. 选择“选择包含您要上传的 RDF 数据的文件”
  7. 单击“浏览”以在本地磁盘上查找数据导出文件。
  8. 确保未选择“使用基本 URI 作为上下文标识符” 。
  9. 点击“上传”,然后坐下来。

以编程方式

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

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

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

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

任何一种基本方法都应该适用于任何大小高达数百万三倍的存储库。当然,对于较大的散装尺寸,还有许多更先进的方法。

于 2015-07-08T22:43:12.467 回答