作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 SPARQL,我想知道是否可以在 in 子句中放入 sparql?更具体地说,我需要获取对此 sparql 查询具有特定条件的实体(s1,s2)[s1 在某个字段上的聚合值大于 5]
select
?s1 ?x ?s2.
WHERE {
{?s1 rdf:type dbpedia-owl:Scientist.}
{?s2 rdf:type dbpedia-owl:Scientist.}
{?s2 dbpedia-owl:field ?x.}
{?s1 dbpedia-owl:field ?x.}
}
所以我需要添加一个像这样的额外 IN 子句
SELECT
?s1 ?x ?s2.
WHERE {
{?s1 rdf:type dbpedia-owl:Scientist.}
{?s2 rdf:type dbpedia-owl:Scientist.}
{?s2 dbpedia-owl:field ?x.}
{?s1 dbpedia-owl:field ?x.}
{?s1 IN
{
SELECT ?s1 WHERE {
SELECT ?s1 (COUNT(?p) AS ?prizes) {
?s1 dbpprop:prizes ?p.
} group by (?s1)
}FILTER (?prizes > 2)
}
}
}
但是我在 sparql 查询解析器上遇到错误......有人知道如何解决吗?
最佳答案
IN
在 SPARQL 中的用法与 SQL 有所不同,它只能在 FILTER
中使用,如下所示:
FILTER(?s IN (<this>, <that>, <another>))
但是,由于 SPARQL 评估的自下而上连接语义,仅使用子查询本身就应该给您所需的结果:
SELECT ?s1 ?x ?s2
WHERE
{
?s1 rdf:type dbpedia-owl:Scientist.
?s2 rdf:type dbpedia-owl:Scientist.
?s2 dbpedia-owl:field ?x.
?s1 dbpedia-owl:field ?x.
{
SELECT ?s1 WHERE
{
?s1 dbpprop:prizes ?p.
}
GROUP BY ?s1
HAVING (COUNT(?p) > 2)
}
}
您可能会注意到我还简化了您查询的其他一些部分。无需使用两个嵌套子查询,因为您可以使用 HAVING
子句指定聚合条件。
此外,您不需要将 { }
放在每个单独的三重模式周围,事实上这样做可能会严重损害性能。
关于sparql - 在 sparql IN 子句中使用另一个 sparql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13650840/
我是一名优秀的程序员,十分优秀!