SPARQL查询‘is of’类型关系返回空值的技术问题咨询
为什么你的DBpedia SPARQL查询“is of”类属性返回空?
嘿,这个问题其实是踩了SPARQL三元组方向匹配的坑啦!咱们一步步拆解:
首先看你能成功的查询:
PREFIX dbo: <http://dbpedia.org/ontology/> select ?field where { dbpedia:Jeffrey_Karp dbo:field ?field }
dbo:field的语义是“某人的研究领域”,三元组结构就是[人物] dbo:field [研究领域],和你的查询结构完全匹配,所以能正常返回结果。
但到了dbo:notableStudent就不一样了——这个属性的语义是**“X是Y的知名学生”**,对应的三元组结构是[学生] dbo:notableStudent [导师],而不是你写的[导师] dbo:notableStudent [学生]。你把主语和宾语的方向搞反了,自然查不到任何结果!
正确的查询写法应该是这样:
PREFIX dbo: <http://dbpedia.org/ontology/> select ?student where { ?student dbo:notableStudent dbpedia:Jeffrey_Karp }
这个查询会找出所有是Jeffrey Karp知名学生的人,就能得到有效结果了。
额外小提示:
以后遇到这类“反向”语义的属性,先看DBpedia属性的定义域(domain)和值域(range):比如dbo:notableStudent的定义域是dbo:Person(学生),值域也是dbo:Person(导师),这就明确了三元组的方向是「学生→导师」。
记住,SPARQL的三元组是严格的「主语-谓语-宾语」结构,必须和属性定义的语义方向一致,不能凭直觉反过来写哦!
内容的提问来源于stack exchange,提问作者Charlic 郭
相关产品推荐
相关产品推荐

