2012-04-27 79 views
2

DBPedia/SPARQL /语义数据的初学者。我跑了以下查询“找出每个运动员的运动”Dbpedia不会返回完整结果

select ?athlete ?sport where 
{ 
    ?athlete rdf:type <http://dbpedia.org/ontology/Athlete>. #query1 
    ?athlete dbpedia2:sport ?sport        #query2 
} 

它确实给出了结果,但不是我正在寻找的全套。 “query1”本身会返回更多的运动员,但与“query2”相结合,我得到的结果集少得多。

请说明差异。我错过了什么吗?什么是替代方案?

问候

回答

3

您的查询中选择具有 RDF所有运动员节点:类型和dbpedia2:运动性能。即使某些属性未绑定,也可以使用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> 
    } 
} 
+0

感谢您的快速反应。即使运动财产不受约束,它现在也会返回运动员。但我的追求是“为每个运动员开展一项运动”。从结果看来,对于运动员来说,运动财产可能没有约束?因为运动员 - >运动关系不完整,我如何得到这个结果。运动 - >运动员关系不存在。问候, – 2012-04-27 18:53:50

+0

在这种情况下,你需要更好地探索本体。 rdfs:subClassOf运动员描述需要的信息。我已经添加了另一个查询的答案。 – 2012-04-27 19:16:47

+0

再次感谢。我想出了这个。请提供有关query.select?sport?athlete的信息,其中{sport} rdfs:subClassOf 。 ?athlete a $ sport } – 2012-04-27 19:17:10

相关问题