我正在使用Blazegraph数据库运行一个非常简单的查询。对于我的数据集,我有。ttl和。nq文件。我正在使用Blazegraph的批量数据加载器加载文件。以下是我的查询:
SELECT DISTINCT ?g
WHERE {
GRAPH ?g { ?s ?p ?o }
}
我期望输出不同的图名。然而,这是我得到的错误:
java.util.concurrent.ExecutionException: java.util.concurrent.ExecutionException: com.bigdata.rdf.sparql.ast.QuadsOperationInTriplesModeException: Use of WITH and GRAPH constructs in query body is not supported in triples mode.
在我的RWStore。属性,这里是设置的两个主要标志(还有更多,但这些是相关的):
com.bigdata.rdf.sail.truthMaintenance=false
com.bigdata.rdf.store.AbstractTripleStore.quads=true
这是我加载文件和运行jar的方式:
java -Xmx4g -cp /pathto/blazegraph.jar com.bigdata.rdf.store.DataLoader -verbose -namespace kb /pathto/RWStore.properties /pathto/data
java -server -Xmx4g -jar -Djetty.host=0.0.0.0 /pathto/blazegraph.jar
另外,这里有一些需要注意的事情:当我通过python (sparql.SPARQLServer.update(file))手动加载文件时,我能够运行相同的查询。我没有得到这个错误。
有人能帮我解决这个错误吗?我到处都找不到解决办法!我找到解决办法了!问题是由于BulkDataLoader加载的文件格式不同。三元组没有命名图,而四元组有,所以在查询时,有一个不匹配,这是我的问题中的错误。如果您手动上传文件(通过工作台或python),则不会出现这种情况。
这些是我所做的修改:
- 两个属性文件,一个用于四元组,一个用于三元组。
quads.properties:
com.bigdata.rdf.store.AbstractTripleStore.quads=true
com.bigdata.rdf.store.AbstractTripleStore.statementIdentifiers=false
triples.properties:
com.bigdata.rdf.store.AbstractTripleStore.quads=false
com.bigdata.rdf.store.AbstractTripleStore.statementIdentifiers=false
- 使用BulkDataLoader时:
.nq文件:
java -Xmx4g -cp /pathto/blazegraph.jar com.bigdata.rdf.store.DataLoader -verbose -namespace kb /pathto/quads.properties /pathto/data
.ttl文件:
java -Xmx4g -cp /pathto/blazegraph.jar com.bigdata.rdf.store.DataLoader -verbose -defaultGraph http://ex.org -namespace kb /pathto/triples.properties /pathto/data
加载文件后启动Blazegraph:
java -server -Xmx4g -jar -Djetty.host=0.0.0.0 /pathto/blazegraph.jar
希望这有助于其他人面对类似的问题!