如何将嵌入的Blazegraph内容转储到RDF文件?

时间:2017-05-11 16:24:45

标签: scala sparql rdf blazegraph rdf4j

我在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);

但是如果我尝试用我的cxnrepo替换预期的模型参数,Eclipse会抱怨:

  

重载方法值写入替代方法:(x $ 1:   Iterable [org.openrdf.model.Statement],x $ 2:java.io.Writer,x $ 3:   org.openrdf.rio.RDFFormat)单位(x $ 1:   Iterable [org.openrdf.model.Statement],x $ 2:java.io.OutputStream,x $ 3:   org.openrdf.rio.RDFFormat)单位无法应用   (com.bigdata.rdf.sail.BigdataSailRepository,java.io.FileOutputStream,   org.openrdf.rio.RDFFormat)。

如何从我拥有的回购和连接到Rio.write()期望的模型?或者我可以用其他方式抛弃三元组吗?

2 个答案:

答案 0 :(得分:2)

实现这一目标的另一种方法如下:

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查询解析器 - 因此对于大型回购更有效。

答案 1 :(得分:1)

这个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)