我正在尝试查询dbpedia以获取一些人数据,而我没有主题只是我要查询的人的姓名及其出生/死亡日期。
我正试图沿着这些方向进行查询。我想要姓Presley的名字,出生日期,死亡日期和缩略图。我打算做的是循环返回的结果,找到Elvis Presley 1935-1977的最佳匹配,这是我的数据。
PREFIX dbo: <http://dbpedia.org/ontology/>
SELECT ?Name ?thumbnail ?birthDate ?deathDate WHERE {
{
dbo:name ?Name ;
dbo:birthDate ?birthDate ;
dbo:birthDate ?deathDate ;
dbo:thumbnail ?thumbnail ;
FILTER contains(?Name@en, "Presley")
}
构造我的sparql查询的最佳方法是什么?
更新:
我已将这个查询放在一起似乎在某种程度上有效,但我并不完全理解它,我无法弄清楚包含,但它至少会运行并返回结果。
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX dbo: <http://dbpedia.org/ontology/>
SELECT ?subject ?thumbnail ?birthdate ?deathdate WHERE {
{
?subject rdfs:label "Elvis Presley"@en ;
dbo:thumbnail ?thumbnail ;
dbo:birthDate ?birthdate ;
dbo:deathDate ?deathdate ;
a owl:Thing .
}
UNION
{
?altName rdfs:label "Elvis Presley"@en ;
dbo:thumbnail ?thumbnail ;
dbo:birthDate ?birthdate ;
dbo:deathDate ?deathdate ;
dbo:wikiPageRedirects ?s .
}
}
答案 0 :(得分:2)
某些实体可能没有所有这些信息,因此最好使用可选。您可以使用 foaf:surname 直接检查姓氏。
select * where {
?s foaf:surname "Presley"@en
optional { ?s dbo:name ?name }
optional { ?s dbo:birthDate ?birth }
optional { ?s dbo:deathDate ?death }
optional { ?s dbo:thumbnail ?thumb }
}