SPARQL:按国家选择人员
SPARQL: selecting people by country
我正在尝试 select 来自 DBPedia 的所有出生在特定国家(例如葡萄牙)的人。
我可以使用这个查询:
SELECT DISTINCT ?person
WHERE {
?person dbpedia-owl:birthPlace dbpedia:Portugal.
}
但问题是并非所有人都将 dbpedia:Portugal 作为 出生地。大约 30% 的人只有一个城镇名称 birthPlace,例如
dbpedia:Lisbon
我可以在 FILTER 子句中添加所有葡萄牙城市,但这是一个很大的列表。
也许可以通过某种方式在 SPARQL 查询中从 Lisbon 推断出 Portugal?
(不要在 FILTER 中添加所有葡萄牙城市以获得所有人)
如果我们假设特定国家/地区的所有城市在 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
有效,但对于一个非常简单的查询来说它非常冗长。可以简化为:
select distinct ?person where {
?person a dbpedia-owl:Person ;
dbpedia-owl:birthPlace/dbpedia-owl:country? dbpedia:Portugal
}
我正在尝试 select 来自 DBPedia 的所有出生在特定国家(例如葡萄牙)的人。
我可以使用这个查询:
SELECT DISTINCT ?person
WHERE {
?person dbpedia-owl:birthPlace dbpedia:Portugal.
}
但问题是并非所有人都将 dbpedia:Portugal 作为 出生地。大约 30% 的人只有一个城镇名称 birthPlace,例如
dbpedia:Lisbon
我可以在 FILTER 子句中添加所有葡萄牙城市,但这是一个很大的列表。
也许可以通过某种方式在 SPARQL 查询中从 Lisbon 推断出 Portugal?
(不要在 FILTER 中添加所有葡萄牙城市以获得所有人)
如果我们假设特定国家/地区的所有城市在 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
select distinct ?person where {
?person a dbpedia-owl:Person ;
dbpedia-owl:birthPlace/dbpedia-owl:country? dbpedia:Portugal
}