Rob Sedgwick
Rob Sedgwick

Reputation: 4514

Sparql of DbPedia based upon name not subject

I am trying to query dbpedia to get some people data and I don't have subjects just names of the people I want to query and their birth/death dates.

I am trying to do a query along these lines. I want the name, birth date, death date and thumbnail of everyone with the surname Presley. What I then intend to do is loop through the results returned and find the best match for Elvis Presley 1935-1977 which is the data I have.

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") 
}

What is the best way to construct my sparql query?

UPDATE:

I have put together this query which seems to work to some extent but I don't entirely understand it, and I can't figure out the contains, but it does at least run and return results.

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 .
  }
}

Upvotes: 0

Views: 267

Answers (1)

Joshua Taylor
Joshua Taylor

Reputation: 85813

Some entities might not have all of that information, so it's better to use optional. You can use foaf:surname to check for surname directly.

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 }
}

Upvotes: 2

Related Questions