SPARQL:按国家选择人员
我试图从DBPedia中选择所有出生在特定国家(如葡萄牙)的人 我可以使用以下查询:SPARQL:按国家选择人员,sparql,dbpedia,Sparql,Dbpedia,我试图从DBPedia中选择所有出生在特定国家(如葡萄牙)的人 我可以使用以下查询: SELECT DISTINCT ?person WHERE { ?person dbpedia-owl:birthPlace dbpedia:Portugal. } 但问题是并不是所有人都把葡萄牙作为出生地。大约30%的人只有一个镇名作为出生地,例如 我可以在过滤条款中添加所有葡萄牙城市,但这是一个很大的列表 也许有可能在S
SELECT DISTINCT ?person
WHERE {
?person dbpedia-owl:birthPlace dbpedia:Portugal.
}
但问题是并不是所有人都把葡萄牙作为出生地。大约30%的人只有一个镇名作为出生地,例如
我可以在过滤条款中添加所有葡萄牙城市,但这是一个很大的列表
也许有可能在SPARQL查询中从里斯本推断出葡萄牙
(不要在筛选器中添加所有葡萄牙城市以获取所有人员)如果我们假设某个特定国家的所有城市都在dbpedia中定义为该国家的一部分,您可以使用一个查询,首先查找将
dbpedia:pulation
作为国家的人,然后查找dbpedia:pulation
中的城市
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。通过此查询可以获得完整的结果 -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
前缀dbpedia owl:
前缀dbpedia:
选择人
哪里
{
{人a;
?地点。
地点?出生国。
?出生国a。
过滤器(?出生国=dbpedia:葡萄牙)。
}
联合
{人a;
?出生国。
?出生国a。
过滤器(?出生国=dbpedia:葡萄牙)。
}
}
按人分组
点菜人
有效,但对于一个非常简单的查询来说,它非常冗长。可以简化为:
select distinct ?person where {
?person a dbpedia-owl:Person ;
dbpedia-owl:birthPlace/dbpedia-owl:country? dbpedia:Portugal
}
是的,谢谢!。。由于DBPedia的数据,我们仍然错过了大约1000人//dbpedia.org/resource/Vera_Kolodzig。。。。但这是DBPEdia数据issue@gmlvsv这个答案是可行的,但非常冗长。它可以用一种更短(可能更高效)的方式编写。我已经加了。@Artemis,你是如何得到这个2563的结果的?当我运行它时,将select行更改为
select(count(distinct?person)as?n)
,我得到2449,就像在中一样。我觉得有些地方不对劲。。。(不过,当运行OP的查询时,我得到了1723条信息。)我在《为什么计数如此不同》中通过一个简单的计数得到了它?这两个查询之间的区别是什么。我不能全部检查,但我检查了一些,例如you is missing()。因为没有直接指定的国家。那么,与答案中提供的其他两个相比,这个查询发现和缺少了什么呢?我的查询没有遗漏Adriano_Niz。例如,如果您添加一个过滤器,将我的查询限制为那些标签包含“Niz”的查询,例如,使用类似于您得到Adriano Niz的查询,而Adriano Niz具有。我的查询不应该遗漏任何内容。。。此查询查找通过路径dbpedia owl:birthPlace/dbpedia owl:country?
连接到葡萄牙的个人。结尾的问号很重要;它的意思是“零或一”,所以从一个人到葡萄牙的路径是按出生地,或按出生地/国家,就像你的一样。很高兴知道。谢谢。@Artemis但我还是很好奇,你是如何检查丢失的结果的?如果你点击“SPARQL结果”链接(我第一次忘了放进去),在页面上搜索“_Niz”,你会看到Adriano_Niz的列表非常清晰。不过,我们的查询肯定会以不同的顺序生成结果。我通过一个过滤器进行检查,结果出现了,但当我搜索页面时,它没有出现。我想这是另一个演奏家的小毛病。
select distinct ?person where {
?person a dbpedia-owl:Person ;
dbpedia-owl:birthPlace/dbpedia-owl:country? dbpedia:Portugal
}