如何将嵌入的 Blazegraph 内容转储到 RDF 文件中?
How can I dump embedded Blazegraph contents to an RDF file?
我在 Scala 中有 created a blazegraph RDF4J repository and connection:
val props = new Properties()
props.put(Options.BUFFER_MODE, BufferMode.DiskRW)
props.put(Options.FILE, "embedded.jnl")
var sail = new BigdataSail(props)
var repo = new BigdataSailRepository(sail)
repo.initialize()
var cxn = repo.getConnection()
我可以添加语句、检索 SPARQL 结果等
现在我想将存储库的内容转储到一个 RDF 文件中,like this:
Rio.write(model, System.out, RDFFormat.RDFXML);
但是如果我尝试用我的 cxn
或 repo
替换预期的模型参数,Eclipse 会抱怨:
overloaded method value write with alternatives: (x:
Iterable[org.openrdf.model.Statement],x: java.io.Writer,x:
org.openrdf.rio.RDFFormat)Unit (x:
Iterable[org.openrdf.model.Statement],x: java.io.OutputStream,x:
org.openrdf.rio.RDFFormat)Unit cannot be applied to
(com.bigdata.rdf.sail.BigdataSailRepository, java.io.FileOutputStream,
org.openrdf.rio.RDFFormat).
我如何从存储库和连接中获得 Rio.write()
期望的模型?或者我可以用其他方式转储三元组吗?
此处http://docs.rdf4j.org/programming/ 第 3.2.8 点描述得非常好。使用 RDFHandlers
import org.eclipse.rdf4j.rio.Rio;
import org.eclipse.rdf4j.rio.RDFFormat;
import org.eclipse.rdf4j.rio.RDFWriter;
try (RepositoryConnection conn = repo.getConnection()) {
RDFWriter writer = Rio.createWriter(RDFFormat.TURTLE, System.out);
conn.prepareGraphQuery(QueryLanguage.SPARQL,
"CONSTRUCT {?s ?p ?o } WHERE {?s ?p ?o } ").evaluate(writer);
}
而不是 System.out 写入文件。
这段 Scala 代码对我有用。它完全基于 ChristophE 的回答。我已经有一个连接,但我确实需要创建一个文件输出流。我删除了 try 包装器,因为没有任何 catch 块。不推荐用于生产!
var out = new FileOutputStream("rdf.ttl")
var writer = Rio.createWriter(RDFFormat.TURTLE, out)
cxn.prepareGraphQuery(QueryLanguage.SPARQL,
"CONSTRUCT {?s ?p ?o } WHERE {?s ?p ?o } ").evaluate(writer)
实现此目的的另一种方法如下:
var out = new FileOutputStream("rdf.ttl")
Rio.write(cxn.getStatements(null,null,null), out, RDFFormat.TURTLE)
这是可行的,因为 getStatements
的输出是一个 RepositoryResult
对象,它继承自 Iteration<Statement>
,因此可以直接输入 RDFHandler
。
您也可以这样做:
var writer = Rio.createWriter(RDFFormat.TURTLE, out)
cxn.export(writer)
使用 export
优于 getStatements
的优势在于它还会将存储库中存在的任何命名空间声明写入文件。
与其他答案相比,这两种方法中的任何一种方法的优势在于您可以完全绕过 SPARQL 查询解析器 - 因此它对于大型存储库更有效。
我在 Scala 中有 created a blazegraph RDF4J repository and connection:
val props = new Properties()
props.put(Options.BUFFER_MODE, BufferMode.DiskRW)
props.put(Options.FILE, "embedded.jnl")
var sail = new BigdataSail(props)
var repo = new BigdataSailRepository(sail)
repo.initialize()
var cxn = repo.getConnection()
我可以添加语句、检索 SPARQL 结果等
现在我想将存储库的内容转储到一个 RDF 文件中,like this:
Rio.write(model, System.out, RDFFormat.RDFXML);
但是如果我尝试用我的 cxn
或 repo
替换预期的模型参数,Eclipse 会抱怨:
overloaded method value write with alternatives: (x: Iterable[org.openrdf.model.Statement],x: java.io.Writer,x: org.openrdf.rio.RDFFormat)Unit (x: Iterable[org.openrdf.model.Statement],x: java.io.OutputStream,x: org.openrdf.rio.RDFFormat)Unit cannot be applied to (com.bigdata.rdf.sail.BigdataSailRepository, java.io.FileOutputStream, org.openrdf.rio.RDFFormat).
我如何从存储库和连接中获得 Rio.write()
期望的模型?或者我可以用其他方式转储三元组吗?
此处http://docs.rdf4j.org/programming/ 第 3.2.8 点描述得非常好。使用 RDFHandlers
import org.eclipse.rdf4j.rio.Rio;
import org.eclipse.rdf4j.rio.RDFFormat;
import org.eclipse.rdf4j.rio.RDFWriter;
try (RepositoryConnection conn = repo.getConnection()) {
RDFWriter writer = Rio.createWriter(RDFFormat.TURTLE, System.out);
conn.prepareGraphQuery(QueryLanguage.SPARQL,
"CONSTRUCT {?s ?p ?o } WHERE {?s ?p ?o } ").evaluate(writer);
}
而不是 System.out 写入文件。
这段 Scala 代码对我有用。它完全基于 ChristophE 的回答。我已经有一个连接,但我确实需要创建一个文件输出流。我删除了 try 包装器,因为没有任何 catch 块。不推荐用于生产!
var out = new FileOutputStream("rdf.ttl")
var writer = Rio.createWriter(RDFFormat.TURTLE, out)
cxn.prepareGraphQuery(QueryLanguage.SPARQL,
"CONSTRUCT {?s ?p ?o } WHERE {?s ?p ?o } ").evaluate(writer)
实现此目的的另一种方法如下:
var out = new FileOutputStream("rdf.ttl")
Rio.write(cxn.getStatements(null,null,null), out, RDFFormat.TURTLE)
这是可行的,因为 getStatements
的输出是一个 RepositoryResult
对象,它继承自 Iteration<Statement>
,因此可以直接输入 RDFHandler
。
您也可以这样做:
var writer = Rio.createWriter(RDFFormat.TURTLE, out)
cxn.export(writer)
使用 export
优于 getStatements
的优势在于它还会将存储库中存在的任何命名空间声明写入文件。
与其他答案相比,这两种方法中的任何一种方法的优势在于您可以完全绕过 SPARQL 查询解析器 - 因此它对于大型存储库更有效。