SPARQL:按国家选择人
我试图从DBPedia中选择出生在特定国家(例如葡萄牙)的所有人。SPARQL:按国家选择人
我可以使用此查询:
SELECT DISTINCT ?person
WHERE {
?person dbpedia-owl:birthPlace dbpedia:Portugal.
}
但问题是,并不是所有的人都有DBpedia中:葡萄牙为发源地。大约30%的人只有一个城镇名称为birthPlace,例如,
dbpedia:Lisbon
我可以在FILTER子句中添加所有葡萄牙城市,但它是一个大列表。
可能可以推断葡萄牙 from 里斯本在SPARQL查询莫名其妙?
(不加过滤器的所有葡萄牙的城市获得所有人)
如果我们假定在某一特定国家的所有城市被定义为在DBpedia中该国的一部分,你可以有一个查询,第一寻找dbpedia:Portugal
作为一个国家,然后在dbpedia:Portugal
之内的城市。
SELECT DISTINCT ?person
WHERE {
?person a dbpedia-owl:Person.
Optional{
?person dbpedia-owl:birthPlace ?country.
}
Optional{
?person dbpedia-owl:birthPlace ?place.
?place dbpedia-owl:country ?country
}
filter(?country= dbpedia:Portugal)
}
您编写的查询标识了1723个不同的URI,并且此查找到2563个URI。
全部结果可能会受到此http://answers.semanticweb.com/questions/22450/sparql-selecting-people-by-country 实现 - 2730人
PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>
PREFIX dbpedia: <http://dbpedia.org/resource/>
SELECT ?person
WHERE
{
{?person a <http://dbpedia.org/ontology/Person>;
<http://dbpedia.org/ontology/birthPlace> ?place.
?place <http://dbpedia.org/ontology/country> ?birthCountry.
?birthCountry a <http://dbpedia.org/ontology/Country>.
FILTER (?birthCountry = dbpedia:Portugal).
}
UNION
{ ?person a <http://dbpedia.org/ontology/Person>;
<http://dbpedia.org/ontology/birthPlace> ?birthCountry.
?birthCountry a <http://dbpedia.org/ontology/Country>.
FILTER (?birthCountry = dbpedia:Portugal).
}
}
GROUP BY ?person
ORDER BY ?person
Artemis' answer的作品,但它是什么是一个非常简单的查询,非常详细。它可以简化为:
select distinct ?person where {
?person a dbpedia-owl:Person ;
dbpedia-owl:birthPlace/dbpedia-owl:country? dbpedia:Portugal
}
数量如此不同?这两个查询有什么区别。我无法检查所有,但我检查了一些,例如你缺少(http://dbpedia.org/page/Adriano_Niz)。由于没有国家直接指定。那么,与查询中提供的其他两个查询相比,查询发现和丢失的是什么? – Artemis
我的查询不会错过Adriano_Niz。例如。,如果你添加一个过滤器来限制我的查询给那些标签包含“Niz”的人,例如,用[this one](http://pastebin.com/kkMSpmZj)这样的查询,你会得到Adriano Niz,这个结果[这些结果](http://goo.gl/9M7wkA)。我的查询不应该丢失任何东西......此查询查找通过路径“dbpedia-owl:birthPlace/dbpedia-owl:country?'连接到葡萄牙的个人。最后这个问号很重要;它的意思是“零或一”,所以通过出生地或出生地/国家,路径从人到葡萄牙,就像你的。 –
很高兴知道。谢谢。 – Artemis
呀,感谢..由于DBpedia的数据,我们仍然怀念约1000 persons..e.g。 //dbpedia.org/resource/Vera_Kolodzig ....但它是DBPEdia数据问题 – gmlvsv
@gmlvsv这个答案有效,但它非常冗长。它可以写得更短(也可能更有效)。我已添加[答案](http://*.com/a/30988780/1281433)。 –
@Artemis,你如何得到这2563结果呢?当我运行它时,将选择行更改为'select(count(distinct?person)as?n)',我得到2449,就像在[我的答案]中一样(http://*.com/a/30988780/1281433 )。我认为有些地方是不正确的......(我运行OP的查询时得到1723) –