java - 将 RDF .ttl 文件合并到一个文件数据库中 - 过滤并仅保留所需的数据/三元组

标签 java rdf jena ttl rdf4j

我需要将 1000 多个 .ttl 文件合并到一个文件数据库中。如何通过过滤源文件中的数据来合并它们,并只保留目标文件中所需的数据?

谢谢

最佳答案

有很多选项,但最简单的方法可能是使用 Turtle 解析器读取所有文件,并让该解析器将其输出传递给处理程序,该处理程序在将数据传递给 Turtle 之前进行过滤作家。

类似这样的东西可能会起作用(使用 RDF4J):

  RDFWriter writer = org.eclipse.rdf4j.rio.Rio.createWriter(RDFFormat.TURTLE, outFile);

  writer.startRDF();
  for (File file : // loop over your 100+ input files) {
      Model data = Rio.parse(new FileInputStream(file), "", RDFFormat.TURTLE);
      for (Statement st: data) {
         if (// you want to keep this statement) {
              writer.handleStatement(st);
         }
      }
  }
  writer.endRDF(); 

或者,只需将所有文件加载到 RDF 存储库中,然后使用 SPARQL 查询获取数据并保存到输出文件,或者如果您愿意:使用 SPARQL 更新删除数据在将整个存储库导出到文件之前您不希望这样做。

沿着这些思路(再次使用 RDF4J):

 Repository rep = ... // your RDF repository, e.g. an in-memory store or native RDF database

 try (RepositoryConnection conn = rep.getConnection()) {

    // load all files into the database
    for (File file: // loop over input files) {
        conn.add(file, "", RDFFormat.TURTLE);
    }

    // do a sparql update to remove all instances of ex:Foo
    conn.prepareUpdate("DELETE WHERE { ?s a ex:Foo; ?p ?o }").execute();

    // export to file
    con.export(Rio.createWriter(RDFFormat.TURTLE, outFile));
 } finally {
    rep.shutDown(); 
 } 

根据数据量/文件大小,您可能需要稍微扩展此基本设置(例如,使用事务而不只是让连接自动提交)。但希望你能了解总体思路。

关于java - 将 RDF .ttl 文件合并到一个文件数据库中 - 过滤并仅保留所需的数据/三元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55172371/

相关文章:

java - JSON-LD 空白节点到 Apache Jena 中的嵌套对象

rdf - 在SPARQL中使用 'GRAPH'关键字来获取远程图

path - 如何在任意长度的 sparql 路径中使用 Union/or?

java - 为什么 Hibernate3 被导入到我的项目中?

java - 在迭代游标时从 Android SQLite 数据库中删除行是否安全

rdf - RDF三元组的高效存储和查询

java - 如何使用 RDFBeans 和 Apache Jena 反序列化 Java 对象

java - 在我的 Java 项目中使用 TopBraid 中定义的 SPIN 函数

java - 在 HASHMAP 中计算两次键的哈希码

java - 在Quartz的JobDataMap中传递BlockingQueue