-->

合并RDF .ttl文件合并成一个文件数据库 - 过滤和只保留数据/三线需要(Merge RDF .

2019-10-30 05:08发布

我需要1000+ .ttl文件合并成一个文件数据库。 我怎么可以在源文件过滤数据将它们合并,只保留在目标文件所需资料?

谢谢

Answer 1:

有多种选择,但最简单的方法可能是有使用龟解析器读取所有的文件,并让这分析器通过它输出到处理这之前不过滤又将数据传递给海龟作家。

像这样的东西可能会工作(使用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(); 
 } 

根据数据量/你的文件的大小,可能需要(通过交易而不是只让连接自动提交为例)位扩展这些基本设置。 但是,你得到的总体思路,希望。



文章来源: Merge RDF .ttl files into one file database - filtering and keeping only the data/triples needed