2015-11-13 48 views
0

我想查詢dbpedia來獲取一些人的數據,我沒有科目只是我想查詢的人的名字和他們的出生/死亡日期。基於名稱的DbPedia Sparql沒有主題

我正在嘗試按照這些行進行查詢。我想要一個姓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([email protected], "Presley") 
} 

什麼是構建我的sparql查詢的最佳方式是什麼?

UPDATE:

我已經把這個查詢這似乎是工作在一定程度上,但我並不完全瞭解它,我無法找出含有,但它至少運行和返回結果。

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

你的UNION子句大多是多餘的,除了最後兩個三元模式,實際上或多或少都是無用的w.r.t.包含一些有意義的信息 – AKSW

回答

2

一些實體可能不具有所有這些信息,所以最好使用可選。您可以使用foaf:姓氏直接查詢姓氏。

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