0
我有一個問題。如何查詢Jena TDB上的模型名稱
我想在Jena TDB上加載我的RDF文件。
我寫了這個代碼:
public void store(){
String directory = "C:\\tdb";
String source = "C:\\file1.rdf";
String source1 = "C:\\file2.rdf";
Dataset dataset = openTDB(directory);
Model tdb = loadModel(source, dataset);
dataset.addNamedModel("File1", tdb);
Model tdb1 = loadModel(source1, dataset);
dataset.addNamedModel("File2", tdb1);
queryTDB(tdb, dataset);
queryTDB(tdb1, dataset);
tdb.close();
tdb1.close();
dataset.close();
}
public Dataset openTDB(String directory) {
// open TDB dataset
Dataset dataset = TDBFactory.createDataset(directory);
return dataset;
}
public Model loadModel(String source, Dataset dataset) {
Model tdb = dataset.getDefaultModel();
FileManager.get().readModel(tdb, source, "RDF/XML");
return tdb;
}
特別是,我有兩個文件,我想上加載耶拿TDB這些文件。我已經在互聯網上閱讀過,我可以使用「addNamedModel」爲我的模型添加一個名稱。這樣做,在上面的代碼中,我添加了名稱「File1」和「File2」。
現在,我要查詢這個數據集,我試圖寫這樣的代碼:
public void queryTDB(Model tdb, Dataset dataset) {
String queryStr = "SELECT * { ?s ?p ?o }";
Query query = QueryFactory.create(queryStr);
QueryExecution qexec = QueryExecutionFactory.create(query, tdb);
/*Execute the Query*/
ResultSet results = qexec.execSelect();
ResultSetFormatter.out(results) ;
qexec.close();
}
此代碼的工作,但我想知道我怎樣才能得到查詢結果僅供模型名爲「File1」(或「File2」)。事實上,通過這樣的查詢,我得到了兩種模型的結果。
我該如何實現它?
謝謝。我在「http:// prova/File1」和「http:// prova/File2」中更改了名稱。當我運行select * { graph?g?p?o } }時,我在名爲「g」的列中得到以下值:「http:// prova/File1」和「http:// PROVA /文件2" 。 然後,當我運行select * from { ?s?p?o }時,我得到了兩個模型的結果。當我運行select * {0} prova/File1> { ?s?p?o } }時,我會得到相同的結果。爲什麼? –
Musich87
我認爲這是因爲您不斷將所有數據加載到默認模型中,然後將默認模型添加爲命名模型。由於loadModel的實現,所有的模型都是相同的。 –
我該如何解決這個問題? – Musich87