9

DBpedia に対してクエリを実行する必要があります。

SELECT DISTINCT ?poi ?lat ?long ?photos ?template ?type ?label WHERE {
  ?poi  <http://www.w3.org/2000/01/rdf-schema#label> ?label .
  ?poi <http://www.w3.org/2003/01/geo/wgs84_pos#lat> ?lat .
  ?poi <http://www.w3.org/2003/01/geo/wgs84_pos#long> ?long .
  ?poi <http://dbpedia.org/property/hasPhotoCollection> ?photos .                      
  OPTIONAL {?poi <http://dbpedia.org/property/wikiPageUsesTemplate> ?template } .
  OPTIONAL {?poi <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?type } .
  FILTER ( ?lat > x && ?lat < y &&
           ?long > z && ?long < ω && 
           langMatches( lang(?label), "EN" ))
} 

この情報はさまざまなダンプ (.nt) ファイルに散らばっていて、何らかの形で SPARQL エンドポイントが結果セットを提供してくれると思います。これらのさまざまな .nt ファイルをローカルにダウンロードし (すべての DBpedia ではない)、クエリを 1 回だけ実行し、結果をローカルに保存する必要があります (SPARQL エンドポイントを使用したくありません)。

  • この 1 回の実行には、Jena のどの部分を使用すればよいですか?

この投稿を読んで少し混乱しました:

したがって、DBPedia データ全体をディスク上の 1 つの TDB の場所 (つまり、1 つのディレクトリ) にロードできます。このようにして、SPARQL クエリを実行できます。

  • 3 つの .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"(デフォルトのグラフを Jena として取得するためにModel) 使用しました。この声明は有効ですか?クエリを実行するためにデータセットを作成する必要がありますTDBFactory.createModel(tdbdirectory)か?
4

1 に答える 1

8

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();

Jena にクエリを実行するには:

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() ;
于 2013-10-01T13:10:02.407 に答える