gpt4 book ai didi

java - 如何在给定名称的 Jena TDB 上查询模型

转载 作者:行者123 更新时间:2023-12-01 18:29:46 27 4
gpt4 key购买 nike

我有一个问题。

我正在尝试在 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”)的模型的查询结果。事实上,通过这样编写查询,我得到了两个模型的结果。

我怎样才能实现它?

最佳答案

您没有使用绝对 IRI 来命名图表,因此我不知道您的图表名称是什么。您可以使用这样的查询来帮助找出它们是什么:

select * {
graph ?g {
?s ?p ?o
}
}

完成此操作后,您可以继续使用 graph ?g { … } 模式,或使用 from name 在查询中指定图表:

select *
from named <name-of-graph>
{
?s ?p ?o
}

select * {
graph <name-of-graph> {
?s ?p ?o
}
}

参见13.2 Specifying RDF Datasets13.3 Querying the Dataset了解完整的详细信息和更多示例。

关于java - 如何在给定名称的 Jena TDB 上查询模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24783486/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com