我正在从DBpedia转储中生成Apache Jena Graph,现在我希望遍历所有" dbpedia-owl:abstract"。 所以我做了这样的事情:
ExtendedIterator<Triple> iterator = Graph.find(Node.ANY, NodeFactory.createURI("dbpedia-owl:abstract"), Node.ANY);
但是后来我尝试迭代,内存消耗增加,所以看起来像ExtendedIterator存储找到的节点。
我使用VisualVM分析器,发现当我迭代时,com.hp.hpl.jena.graph.Node_URI
的数量正在增加。
我尝试iterator.reset()
,但这没有效果。
我可以在不存储节点的情况下迭代所有DBpedia摘要吗?
抱歉我的英语不好。
答案 0 :(得分:1)
你是否必须将它们全部保存在图表中?您可以在使用StreamRDF
(或方便的子类)使用RIOT解析节点时处理节点。例如:
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");