有没有办法使用SPARQL将所有RDF图从一个三元组存储(Virtuoso)转储到一个包含所有INSERT
查询的.sparql
文件中,以重新构建这些图?
就像mysqldump
命令一样?
发布于 2016-09-08 22:39:27
RDF数据库本质上是无模式的,这意味着像mysqldump
这样的解决方案并不是真正必要的:您不需要任何查询来重新创建数据库模式(表结构、约束等),一个简单的数据转储包含重新创建数据库所需的所有信息。
因此,您可以简单地将整个数据库导出为N-Quads或TriG格式的RDF文件(您需要使用这些格式中的一种,因为其他格式,如RDF/XML或Turtle,不会保留命名图形信息)。
我不确定本机Virtuoso方法是否可以做到这一点(也许它在客户端UI中有一个导出/数据转储选项),但由于Virtuoso与Sesame/RDF4J兼容,您可以使用以下代码以编程方式完成此操作:
Repository rep = ... ; // your Virtuoso repository
File dump = new File("/path/to/file.nq");
try (RepositoryConnection conn = rep.getConnection()) {
conn.export(Rio.createWriter(RDFFormat.NQUADS, new FileOutputStream(dump)));
}
发布于 2016-09-09 14:41:01
令人惊讶的是,Virtuoso website和documentation包含了这些信息。
您不会得到.sparql
文件作为输出,因为RDF总是使用相同的三元(或四元)“模式”,所以在这样的转储中没有模式定义;只有数据。
转储过程通过iSQL接口运行。
要转储单个图--只需要许多三元组--您可以使用the dump_one_graph
stored procedure。
SQL> dump_one_graph ('http://daas.openlinksw.com/data#', './data_', 1000000000);
要转储整个四元组存储(除了Virtuoso-internal virtrdf:
之外的所有图),您可以使用the dump_nquads
stored procedure。
SQL> dump_nquads ('dumps', 1, 10000000, 1);
有many load options;对于这样的完全转储和重新加载,我们通常推荐使用Bulk Load Functions。
(ObDisclaimer:OpenLink Software生产Virtuoso,并雇佣我。)
https://stackoverflow.com/questions/39391922
复制