gpt4 book ai didi

java - 在 TDB Triple Store 中加载 RDF 三元组时出错

转载 作者:行者123 更新时间:2023-12-02 05:27:27 26 4
gpt4 key购买 nike

我有一个问题要问你:

我已将文件 RDF 加载到 TDB Triple Store 中:

Dataset dataset = TDBFactory.createDataset(directory);
Model model = dataset.getNamedModel("http://nameFile");
TDBLoader.loadModel(model, file );

现在,我想实现一个程序来检查该图是否在 Triple Store 上。

我写了这段代码:

String queryStr = "select * {graph <http://nameFile> { ?s ?p ?o }}";

Dataset dataset = TDBFactory.createDataset(directory);

Query query = QueryFactory.create(queryStr);
QueryExecution qexec = QueryExecutionFactory.create(query, dataset);
qexec.getContext().set(TDB.symUnionDefaultGraph, true);

/*Execute the Query*/
ResultSet results = qexec.execSelect();

if (!results.hasNext()) {
Model model = dataset.getNamedModel("http://nameFile");
TDBLoader.loadModel(model, label);
} else {
Model model = dataset.getNamedModel("http://nameFile");
}

StmtIterator stmti = model.listStatements();

while (stmti.hasNext()) {
Statement statement = stmti.nextStatement();
System.out.println(statement);
}

我发现此代码因以下错误而失败:

Exception in thread "main" java.lang.UnsupportedOperationException: Quad: subject cannot be null

at com.hp.hpl.jena.sparql.core.Quad.(Quad.java:62)
at com.hp.hpl.jena.tdb.lib.TupleLib.quad(TupleLib.java:162)
at com.hp.hpl.jena.tdb.lib.TupleLib.quad(TupleLib.java:153)
at com.hp.hpl.jena.tdb.lib.TupleLib.access$100(TupleLib.java:45)
at com.hp.hpl.jena.tdb.lib.TupleLib$4.convert(TupleLib.java:87)
at com.hp.hpl.jena.tdb.lib.TupleLib$4.convert(TupleLib.java:83)
at org.apache.jena.atlas.iterator.Iter$4.next(Iter.java:322)
at org.apache.jena.atlas.iterator.Iter$4.next(Iter.java:322)
at org.apache.jena.atlas.iterator.Iter.next(Iter.java:920)
at com.hp.hpl.jena.util.iterator.WrappedIterator.next(WrappedIterator.java:94)
at com.hp.hpl.jena.util.iterator.Map1Iterator.next(Map1Iterator.java:45)
at com.hp.hpl.jena.util.iterator.WrappedIterator.next(WrappedIterator.java:94)
at com.hp.hpl.jena.rdf.model.impl.StmtIteratorImpl.next(StmtIteratorImpl.java:42)
at com.hp.hpl.jena.rdf.model.impl.StmtIteratorImpl.nextStatement(StmtIteratorImpl.java:52)

我在这一行收到此错误:

Statement statement = stmti.nextStatement();

特别是,我看到许多这种类型的三元组被加载到三元组存储中(代替其他的):

s: null p: http://www.w3.org/2000/01/rdf-schema#label o: null

但是,我的 RDF 文件没有这些三元组!为什么加载这些三元组?

最佳答案

我猜数据加载代码与查询代码在不同的程序中运行。如果是这样,那么

TDB.sync(dataset)

(使用事务会更好,或者使用命令行工具进行批量加载)。

关于java - 在 TDB Triple Store 中加载 RDF 三元组时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25865560/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com