我正在从 DBpedia 转储生成 Apache Jena Graph,现在我想迭代所有“dbpedia-owl:abstract”。 所以我做了这样的事情:
ExtendedIterator<Triple> iterator = Graph.find(Node.ANY, NodeFactory.createURI("dbpedia-owl:abstract"), Node.ANY);
但是当我尝试迭代时,内存消耗增加了,所以看起来像ExtendIterator存储找到的节点。
我使用 VisualVM 探查器,发现在迭代时,com.hp.hpl.jena.graph.Node_URI
的计数正在增加。
我尝试执行 iterator.reset()
但这没有效果。
我可以迭代所有 DBpedia 摘要而不存储节点吗?
抱歉我的英语不好。
最佳答案
你必须把它们全部放在图表中吗?您可以在使用 RIOT 解析节点时使用 StreamRDF
来处理节点。 (或方便的子类)。例如:
class MyHandler implements StreamRDF {
...
public void triple(Triple triple) {
if (triple.predicateMatches(DBpediaOWL.abstract)) {
... process ...
}
}
...
}
StreamRDF myHandler = new MyHandler();
RDFDataMgr.parse(myHandler, "dbpedia-file.nt");
关于java - 使用 Apache Jena ExtendedIterator 在具有大量三元组的图上进行迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31343350/