我有以下查询:
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
仅引用同一个人 - 有没有办法在原始查询中删除这些类型的自引用?
答案 0 :(得分:1)
资源http://dbpedia.org/resource/Iceland_national_under-21_football_team的输入为foaf:Person
(以及dbpedia-owl:Person
等),这就是它出现在结果集中的原因。
查看这些语句,我发现此资源也是dbpedia-owl:SportsTeamMember
,它是dbpedia-owl:Person
的子类,owl:equivalentClass
的{{1}}。这表明体育团队被推断为一个人。
DBpedia中的信息是使用模板从维基百科中提取的,如here所述。通常,映射模板将Wikipedia信息框和其他模板中的信息映射到DBpedia资源属性。然后,具有特定信息框(或其他映射,“普通”模板)的文章被称为特定的RDF类。
例如,Infobox football club映射模板映射会从具有此信息框的文章中创建类型为foaf:Person
的资源。 (但这不适用于冰岛队。)
看起来映射Football squad player可能是冰岛队输入一个人的断言的原因。该模板用于列出团队成员,但用于创建DBpedia资源的Wikipedia页面的版本存在可能破坏该过程的拼写错误。我不完全确定,但它可以解释为什么不是所有国家足球队都打字dbpedia-owl:SoccerClub
。
您无法从DBpedia中删除特定语句,但您可以更正源维基百科文章中的错误,或更正,更新或创建DBpedia的映射。
要删除自引用,您可以在foaf:Person
子句中添加FILTER
语句,如下所示:
WHERE
如果您正在寻找WHERE {
?person1 ?p ?person2.
?person1 a foaf:Person.
?person2 a foaf:Person.
FILTER (?person1 != ?person2).
}
对之间特定类型的关系,您当然可以指定它们:
foaf:Person
编辑2:我后来意识到你要求一种不同类型的自我引用。从DBPedia: What's the meaning of '__1' (double underscores) in URIs?我知道这些是中间节点的URI,为避免必须使用空白节点而创建。例如,WHERE {
...
?person1 foaf:knows ?person2.
...
}
是Jakob Augustsson(:%C3%84ngelholms_FF__Jakob_Augustsson__1
中(的描述)的(带前缀的)URI。对于足球示例,您可以添加:%C3%84ngelholms_FF
以排除这些结果。
编辑1:添加了一些超链接。