我需要1000+ .ttl文件合并成一个文件数据库。 我怎么可以在源文件过滤数据将它们合并,只保留在目标文件所需资料?
谢谢
我需要1000+ .ttl文件合并成一个文件数据库。 我怎么可以在源文件过滤数据将它们合并,只保留在目标文件所需资料?
谢谢
有多种选择,但最简单的方法可能是有使用龟解析器读取所有的文件,并让这分析器通过它输出到处理这之前不过滤又将数据传递给海龟作家。
像这样的东西可能会工作(使用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();
}
根据数据量/你的文件的大小,可能需要(通过交易而不是只让连接自动提交为例)位扩展这些基本设置。 但是,你得到的总体思路,希望。