首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在耶拿中选择FROM子句,不返回结果

在耶拿中选择FROM子句,不返回结果
EN

Stack Overflow用户
提问于 2018-09-19 14:20:42
回答 1查看 61关注 0票数 1

我们在Jena数据集中使用sparql子句在多个图形中可靠地发出sparql查询有困难。

下面是这个问题的一个例子:

代码语言:javascript
复制
final String subject = "http://example.com/ont/breakfast#espresso";
final String graph1  = "http://example.com/ont/breakfast/graph#espresso_definition";
final String graph2  = "http://example.com/ont/breakfast/graph#espresso_decoration";

// Add some triples to graphs within the dataset
Dataset  dataset         = DatasetFactory.create();

Model    modelG1         = dataset.getNamedModel(graph1);
Resource espressoTypeG1  = modelG1.createResource(subject)
                                  .addProperty(RDF.type, OWL.Class);
Resource espressoLabelG1 = modelG1.createResource(subject)
                                  .addProperty(RDFS.label, "Espresso");

Model    modelG2         = dataset.getNamedModel(graph2);
Resource espressoLabelG2 = modelG2.createResource(subject)
                                  .addProperty(RDFS.label, "Black Gold");

// The query to execute - returns no results
String queryString = "select * FROM <" + graph1 + "> FROM <" + graph2 + "> " + 
                     "{ <" + subject + "> ?p ?o }";

// This, however, works:
// String queryString = "select * { graph ?g { <" + subject + "> ?p ?o } }";

// Run the query
Query query = QueryFactory.create(queryString);
try (QueryExecution qe = QueryExecutionFactory.create(query, dataset)) {
    ResultSet results = qe.execSelect();
    while (results.hasNext()) {
        QuerySolution result = results.next();
        System.out.println(result);
    }
}

在大多数情况下,我们需要在同一个查询中处理多个图,一个值子句和图形关键字的组合帮助我们度过了大多数场景。在有些查询中,这会变得非常笨拙或完全没有效率。

如何才能正确地在单个数据集中的模型联合中发出查询?

请注意,这些查询在编译时不知道,因此我们不能依靠手工创建model_s代码中的联合。此外,通常使用从文件加载、sparql更新和调用_dataset.asDatasetGraph().add(.)的组合来添加数据。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-19 15:46:18

FROMFROM NAMED的处理取决于所使用的Dataset实现是否支持它,默认的内存中实现在默认情况下不支持它。

要强制使用数据集,可以使用DynamicDatasetsDatasetDescription助手类来解析查询指定的数据集。

代码语言:javascript
复制
Dataset resolvedDataset = 
     DynamicDatasets.dynamicDataset(DatasetDescription.create(query), dataset, false); 

try (QueryExecution qe = QueryExecutionFactory.create(query, resolvedDataset)) {   
    // Normal result processing logic goes here... 
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52408083

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档