【发布时间】:2015-07-15 04:28:44
【问题描述】:
为了从我的三元存储库 (OpenLink Virtuoso v6.1) 中的命名图中获取所有三元组,我编写了 SPARQL 查询:
SELECT ?s ?p ?o
WHERE {
GRAPH eg:myGraph {
?s ?p ?o.
}
}
但我似乎无法在 GRAPH 声明中定义图形 URI;查询不返回任何三元组。
如果我使用中间变量 ?g 而不是我的图形的 URI,则请求有效:
SELECT ?s ?p ?o
WHERE {
FILTER(?g = eg:myGraph).
GRAPH ?g {
?s ?p ?o.
}
}
我看不出这两个查询之间的区别。
我的第一个语法是错误的查询吗?这是Virtuoso的精妙之处吗?
【问题讨论】:
-
这两个查询是等价的。我也认为第一个更有效(一般来说,因为它的变量更少)。这一定是 Virtuoso SPARQL 解析器的限制/错误。
-
select ... where { values ?g { eg:myGraph } graph ?g { ... } }有效吗?这可能比过滤器更有效,并且更清楚地表明 ?g 的值应该具有预定义的值。 -
和之前
graph ?的结果一样。我刚刚看到我的 virtuoso 版本是 debian 的当前默认版本:virtuoso 6.1。也许这个问题可以用 virtuoso 7 解决? -
SPARQL 在
values上返回错误。我认为这个版本的解析器只是没有应用当前的 SPARQL 1.1 规范。 -
您可能需要 Virtuoso 7
标签: sparql rdf virtuoso triplestore named-graphs