我有一个问题。
我正在尝试在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;
}
特别是,我有两个文件,我想在Jena 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")。事实上,通过编写查询,我得到了两个模型的结果。
我怎么能意识到它?
答案 0 :(得分:4)
您并未使用绝对IRI为图表命名,因此我不知道您的图表名称是什么。您可以使用这样的查询来帮助找出它们是什么:
select * {
graph ?g {
?s ?p ?o
}
}
完成后,您可以继续使用graph ?g { … }
模式,或使用from named
在查询中指定图表:
select *
from named <name-of-graph>
{
?s ?p ?o
}
select * {
graph <name-of-graph> {
?s ?p ?o
}
}
有关详细信息和更多示例,请参阅13.2 Specifying RDF Datasets和13.3 Querying the Dataset。