DBPedia SPARQL可选

时间:2015-04-02 13:21:13

标签: sparql dbpedia

我在http://dbpedia.org/sparql

上运行这个简单的查询
PREFIX p: <http://dbpedia.org/property/>
SELECT * WHERE {
    ?person dcterms:subject category:British_journalists .
    OPTIONAL { ?person p:name ?name } .
    OPTIONAL { ?person p:dateOfBirth ?dob } .

}
LIMIT 10

我希望得到http://dbpedia.org/resource/Category:British_journalists的前10个人,无论他们是name还是dateOfBirth。我得到了前两个有两个属性的人。对于例如Andrew Rothstein之后有2名失踪人员。

我做错了什么?

2 个答案:

答案 0 :(得分:2)

您的查询存在的问题是:a)LIMIT限制了返回的的数量,而不是主题; b)某些人拥有多个名称。

因此,例如,记者Daniel Singer(http://dbpedia.org/resource/Daniel_Singer_(journalist))至少有两个名字:"Daniel Singer"@en"Singer, Daniel"@en。这使他作为主题的行数增加了一倍。

如果您GROUP BY ?person,每行只能确保一个人。然后,您需要SAMPLE名称和精选,每人只能选一个。

PREFIX p: <http://dbpedia.org/property/>
SELECT ?person (SAMPLE(?name) as ?aname) (SAMPLE(?dob) as ?adob) WHERE {
    ?person dcterms:subject category:British_journalists .
    OPTIONAL { ?person p:name ?name } .
    OPTIONAL { ?person p:dateOfBirth ?dob } .
}
GROUP BY ?person
LIMIT 10

(我不确定SAMPLE对未绑定的案件有多好,即没有名字的情况下)

答案 1 :(得分:0)

根据O.R Mapper的评论 - 删除限制会带来完整的结果集,这表明OPTIONAL实际上正在运行。 谢谢。