SPARQL 查询 - WHERE 忽略子句? (数据库百科)

问题描述 投票:0回答:1

这应该会带回树木列表,以及可选的缩略图。

我所说的“树”是指绿叶植物:

PREFIX gold: <http://purl.org/linguistics/gold/>
PREFIX dbr: <http://dbpedia.org/resource/>
PREFIX dbo: <http://dbpedia.org/ontology/>

SELECT * { 
?tree a dbo:Plant;
          gold:hypernym dbr:Tree.
OPTIONAL { ?tree dbo:thumbnail ?thumbnail }
}

单击此处运行上面的SPARQL

它主要有效:但它也带回了这种类型的树:

https://dbpedia.org/page/M-ary_tree

奇怪的是:数据显然没有被标记为“dbo:Plant”?

这里还有其他事情发生吗? (就像它是“sameAs”或其他什么?我注意到结果实际上是“http://dbpedia.org/resource/K-ary_tree”,但这落在“M-aray”上)。

sparql dbpedia
1个回答
0
投票

感谢uninformeduser - 他在评论中提供了解释。 我可以确认解释是正确的。

该页面确实使用 HTTP-301 进行重定向:

> export URL=https://dbpedia.org/page/K-ary_tree
> curl -s -o /dev/null -I -w "%{http_code}" $URL 
301> 
> curl -s -o /dev/null -I -w "%{http_code} : %{url_effective}" $URL --location 
200 : https://dbpedia.org/page/M-ary_tree>

提供的 SPARQL 确实显示该条目(错误地)被分类为植物:

# Returns 'true'
PREFIX dbr: <http://dbpedia.org/resource/>
PREFIX dbo: <http://dbpedia.org/ontology/>
ASK { dbr:K-ary_tree a dbo:Plant}

运行 SPARQL1

我对这种行为仍然有点困惑 - 因为重定向似乎在 RDF 级别对最终用户来说是不可见的 - 重定向似乎就发生了。 (除非我在其他地方丢失了一些连接)。

因此询问“K-Array”是否是植物,结果是“是”,但原来的“M-Array”是假的。

# Returns 'false'
PREFIX dbr: <http://dbpedia.org/resource/>
PREFIX dbo: <http://dbpedia.org/ontology/>
ASK { dbr:M-ary_tree a dbo:Plant }

运行 SPARQL2:

© www.soinside.com 2019 - 2024. All rights reserved.