1

我有以下查询:

SELECT DISTINCT(?person1), ?person2
WHERE { 
   ?person1 ?p ?person2. 
   ?person1 a foaf:Person. 
   ?person2 a foaf:Person.
}
ORDER BY ?person1
LIMIT 1000
OFFSET 0

如果您在此处向下滚动查询结果:http: //dbpedia.org/snorql/

您会看到列出的冰球队等,例如

:%C3%81g%C3%BAst_Hauksson   :Iceland_national_under-21_football_team 

为什么是这些人?我怎样才能删除它们?

我也得到如下结果:

:%C3%84ngelholms_FF__Jakob_Augustsson__1    :Jakob_Augustsson 
:%C3%84ngelholms_FF__Joakim_Alriksson__1    :Joakim_Alriksson 
:%C3%84ngelholms_FF__Johan_Eiswohld__1  :Johan_Eiswohld 

哪个只是引用同一个人 - 有没有办法在原始查询中删除这些自我引用?

4

1 回答 1

1

资源http://dbpedia.org/resource/Iceland_national_under-21_football_team的类型为 a foaf:Persondbpedia-owl:Person等等),这就是它出现在结果集中的原因。

查看语句,我看到这个资源也是一个dbpedia-owl:SportsTeamMember,它是一个子类,dbpedia-owl:Person它是一个owl:equivalentClassfoaf:Person这显示了运动队是如何被推断为一个人的。

DBpedia 中的信息是使用模板从 Wikipedia 中提取的,如此处所述。通常,映射模板将 Wikipedia 信息框和其他模板中的信息映射到 DBpedia 资源属性。具有特定信息框(或对于其他映射,“普通”模板)的文章被称为特定 RDF 类。
例如,Infobox 足球俱乐部映射模板地图dbpedia-owl:SoccerClub从具有此信息框的文章创建类型资源。(不过,这不适用于冰岛队。)

看起来,映射足球小队的球员可能对冰岛队是一个人的断言负责。该模板用于列出团队成员,但用于创建 DBpedia 资源的 Wikipedia 页面版本存在可能会破坏流程的拼写错误。我不完全确定,但它可以解释为什么不是所有的国家足球队都是打字的foaf:Person

您无法从 DBpedia 中删除特定语句,但您可以更正源 Wikipedia 文章中的错误,或者更正、更新或创建 DBpedia 的映射。

要删除自我引用,您可以在子句中添加如下FILTER语句:WHERE

WHERE { 
    ?person1 ?p ?person2. 
    ?person1 a foaf:Person. 
    ?person2 a foaf:Person.
    FILTER (?person1 != ?person2).
}

如果您正在寻找 s 对之间特定类型的关系foaf:Person,您当然可以指定它们:

WHERE {
  ...
  ?person1 foaf:knows ?person2.
  ...
}

编辑 2:我后来意识到你要求的是不同类型的自我参考。来自DBPedia:URI 中的“__1”(双下划线)是什么意思?我知道这些是中间节点的 URI,是为了避免使用空白节点而创建的。例如,:%C3%84ngelholms_FF__Jakob_Augustsson__1在 (the description of) 中 Jakob Augustsson 的(前缀)URI 是:%C3%84ngelholms_FF。对于足球示例,您可以添加FILTER (?p != dbpedia-owl:currentMember)以排除这些结果。

编辑 1:添加了一些超链接。

于 2013-01-08T21:56:11.620 回答