我正在将 DBpedia 上的 SPARQL 查询用于 Prolog 项目,但我有疑问。我会知道一个词最有可能是一个人的名字(比如:约翰、马里奥)或一个地方(比如一个城市:罗马、伦敦、纽约)。
我已经实现了以下两个查询,第一个给我具有特定名称的人数,第二个给我具有特定名称的地方的数量。
1)查询人名:
select COUNT(?person) where {
?person a dbpedia-owl:Person .
{ ?person foaf:givenName "John"@en }
UNION
{ ?person foaf:surname "John"@en }
}
对于名称John,我获得以下输出:callret-0: 7313,因此我认为它找到了正确名称 John 的 7313 个实例。这样对吗?
2) 查询地点名称:
select COUNT(?place) where {
?place a dbpedia-owl:Place .
{ ?x rdfs:label "John"@en }
}
问题是,正如您在前面的“地点”查询中看到的,我插入了John作为参数,这不是地名而是人名,但我得到了以下奇怪的结果:callret-0: 81900104
问题是,这样一来,如果我比较前两个查询的输出,似乎 John 是一个地方而不是一个人名!这对我的范围不利;我尝试过使用其他个人姓名,但总是发生地点查询比姓名查询给我更大的输出。
为什么?我错过了什么?我的查询中有一些错误吗?我怎样才能解决它以获得正确的结果?