DBPedia / SPARQL /语义数据中的初学者。我跑了下面的询问,“找出每个运动员的运动”
select ?athlete ?sport where
{
?athlete rdf:type <http://dbpedia.org/ontology/Athlete>. #query1
?athlete dbpedia2:sport ?sport #query2
}
它确实给出了结果,但没有给出我正在寻找的全套。 “query1”本身会返回更多的运动员,但与“query2”相结合,我的结果集会少得多。
请解释这个差异。我错过了什么吗?什么是替代方案?
此致
答案 0 :(得分:3)
您的查询选择所有 rdf:type和dbpedia2:sport属性的运动员节点。即使某些属性未绑定,您也可以使用optional
子句检索节点。例如:
select ?athlete ?sport where {
?athlete rdf:type <http://dbpedia.org/ontology/Athlete>. #query1
optional {?athlete dbpedia2:sport ?sport} #query2
}
获得运动的更好方式:
select ?athlete ?type where {
?athlete rdf:type <http://dbpedia.org/ontology/Athlete>.
optional {
?athlete rdf:type ?type.
?type rdfs:subClassOf <http://dbpedia.org/ontology/Athlete>
}
}