使用Jena TDB在本地加载DBpedia?
我需要对DBpedia执行查询:
SELECT DISTINCT ?poi ?lat ?long ?photos ?template ?type ?label WHERE { ?poi ?label . ?poi ?lat . ?poi ?long . ?poi ?photos . OPTIONAL {?poi ?template } . OPTIONAL {?poi ?type } . FILTER ( ?lat > x && ?lat z && ?long < ω && langMatches( lang(?label), "EN" )) }
我猜这些信息分散在不同的转储(.nt)文件中,不知何故,SPARQL端点为我们提供了结果集。 我需要在本地下载这些不同的.nt文件(不是所有的DBpedia),只执行一次我的查询并在本地存储结果(我不想使用SPARQL端点)。
- 我应该在这一次运行中使用耶拿的哪些部分?
我从这篇文章中读到有点困惑:
因此,您可以将整个DBPedia数据加载到磁盘上的单个TDB位置(即单个目录)。 这样,您就可以对其运行SPARQL查询。
-
如果我们有三个.nt DBpedia文件,如何以Jena术语将DBpedia加载到单个TDB位置? 我们如何在这些.nt文件上应用上述查询? (任何代码都会有所帮助。)
-
例如,这是错的吗?
String tdbDirectory = "C:\\TDB"; String dbdump1 = "C:\\Users\\dump1_en.nt"; String dbdump2 = "C:\\Users\\dump2_en.nt"; String dbdump3 = "C:\\Users\\dump3_en.nt"; Dataset dataset = TDBFactory.createDataset(tdbDirectory); Model tdb = dataset.getDefaultModel(); //<-- What is the default model?Should I care? //Model tdb = TDBFactory.createModel(tdbdirectory) ;//<--is this prefered? FileManager.get().readModel( tdb, dbdump1, "N-TRIPLES" ); FileManager.get().readModel( tdb, dbdump2, "N-TRIPLES" ); FileManager.get().readModel( tdb, dbdump3, "N-TRIPLES" ); String q = "my big fat query"; Query query = QueryFactory.create(q); QueryExecution qexec = QueryExecutionFactory.create(query, tdb); ResultSet results = qexec.execSelect(); while (results.hasNext()) { //do something significant with it } qexec.close() tdb.close() ; dataset.close();
- 在上面的代码中,我们使用了
"dataset.getDefaultModel"
(将默认图形作为JenaModel
)。 这个陈述有效吗? 我们是否需要创建数据集来执行查询,还是应该使用TDBFactory.createModel(tdbdirectory)
?
让Jena在本地索引:
/** The Constant tdbDirectory. */ public static final String tdbDirectory = "C:\\TDBLoadGeoCoordinatesAndLabels"; /** The Constant dbdump0. */ public static final String dbdump0 = "C:\\Users\\Public\\Documents\\TDB\\dbpedia_3.8\\dbpedia_3.8.owl"; /** The Constant dbdump1. */ public static final String dbdump1 = "C:\\Users\\Public\\Documents\\TDB\\geo_coordinates_en\\geo_coordinates_en.nt"; ... Model tdbModel = TDBFactory.createModel(tdbDirectory);<\n> /*Incrementally read data to the Model, once per run , RAM > 6 GB*/ FileManager.get().readModel( tdbModel, dbdump0); FileManager.get().readModel( tdbModel, dbdump1, "N-TRIPLES"); FileManager.get().readModel( tdbModel, dbdump2, "N-TRIPLES"); FileManager.get().readModel( tdbModel, dbdump3, "N-TRIPLES"); FileManager.get().readModel( tdbModel, dbdump4, "N-TRIPLES"); FileManager.get().readModel( tdbModel, dbdump5, "N-TRIPLES"); FileManager.get().readModel( tdbModel, dbdump6, "N-TRIPLES"); tdbModel.close();
要查询耶拿:
String queryStr = "dbpedia query "; Dataset dataset = TDBFactory.createDataset(tdbDirectory); Model tdb = dataset.getDefaultModel(); Query query = QueryFactory.create(queryStr); QueryExecution qexec = QueryExecutionFactory.create(query, tdb); /*Execute the Query*/ ResultSet results = qexec.execSelect(); while (results.hasNext()) { // Do something important } qexec.close(); tdb.close() ;