Java 如何在给定名称的Jena TDB上查询模型
我有个问题 我正在尝试在Jena TDB上加载我的RDF文件 我编写了以下代码:Java 如何在给定名称的Jena TDB上查询模型,java,rdf,jena,triplestore,tdb,Java,Rdf,Jena,Triplestore,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, dat
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;
}
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();
}
特别是,我有两个文件,我想在Jena TDB上加载这些文件。我在互联网上读到,我可以使用“addNamedModel”为我的模型添加一个名称。在上面的代码中,我添加了名称“File1”和“File2”
现在,我想查询此数据集,并尝试编写以下代码:
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;
}
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”)的模型的查询结果。事实上,如果这样编写查询,我将得到两个模型的结果
我怎么能实现呢?你没有使用绝对虹膜来命名你的图形,所以我不知道你的图形名称会是什么。您可以使用这样的查询来帮助找出它们是什么:
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
}
}
选择*
从命名
{
?s?p?o
}
选择*{
图{
?s?p?o
}
}
有关详细信息和更多示例,请参见和。您没有使用绝对虹膜来命名图形,因此我不知道您的图形名称。您可以使用这样的查询来帮助找出它们是什么:
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
}
}
选择*
从命名
{
?s?p?o
}
选择*{
图{
?s?p?o
}
}
有关详细信息和更多示例,请参见和。谢谢。我已更改“”和“”中的名称。当我运行select*{graph?g{s?p?o}}时,我在名为“g”的列中得到以下值:“和”。然后,当我从命名的{s?p?o}运行select*时,我得到两个模型的结果。我在运行select*{graph{s?p?o}时得到了相同的结果。为什么?我认为这是因为您一直将所有数据加载到默认模型中,然后将默认模型添加为命名模型。由于loadModel实现,所有模型最终都是相同的before
FileManager.get().readModel(tdb,源代码,“RDF/XML”)代码>。执行类似于Model Model=ModelFactory.createDefaultModel()的操作代码>取而代之。然后,您将创建一个新的模型,当您将其添加为命名图时,不会出现冲突。谢谢Joshua。我已在“模型模型=模型工厂。createDefaultModel();”中更改了“模型tdb=dataset.getDefaultModel();”。如果我运行这个查询:“String qiry=“select*{graph{s?p?o}”;“我只得到model1Thanks的查询结果。我已更改“”和“”中的名称。当我运行select*{graph?g{s?p?o}}时,我在名为“g”的列中得到以下值:“和”。然后,当我从命名的{s?p?o}运行select*时,我得到两个模型的结果。我在运行select*{graph{s?p?o}时得到了相同的结果。为什么?我认为这是因为您一直将所有数据加载到默认模型中,然后将默认模型添加为命名模型。由于loadModel实现,所有模型最终都是相同的
beforeFileManager.get().readModel(tdb,源代码,“RDF/XML”)代码>。执行类似于Model Model=ModelFactory.createDefaultModel()的操作代码>取而代之。然后,您将创建一个新的模型,当您将其添加为命名图时,不会出现冲突。谢谢Joshua。我已在“模型模型=模型工厂。createDefaultModel();”中更改了“模型tdb=dataset.getDefaultModel();”。如果我运行这个查询:“String qiry=“select*{graph{s?p?o}”;“我只得到model1的查询结果