2013-11-26 111 views
2

我有一個人的URI,例如http://dbpedia.org/resource/Ashok_Gehlot(當它通過HTTP檢索時,重定向到http://dbpedia.org/page/Ashok_Gehlot)。我想提取關於這個資源的信息。我怎麼能寫一個SPARQL查詢來檢索,例如Ashok Gehlot的出生日期?在下面的查詢(我迄今爲止的嘗試)中,我需要用????來代替什麼?如何使用sparql查詢訪問dbpedia中的特定頁面?

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
PREFIX dbpedia: <http://dbpedia.org/resource/>PREFIX dcterms: <http://purl.org/dc/terms/> 
PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>PREFIX category: <http://dbpedia.org/resource/Category:> 
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>PREFIX foaf: <http://xmlns.com/foaf/0.1/>PREFIX dbpprop: <http://dbpedia.org/property/> 
PREFIX dbprop: <http://dbpedia.org/property/>PREFIX grs: <http://www.georss.org/georss/> 
PREFIX category: <http://dbpedia.org/resource/Category:> 
PREFIX dcterms: <http://purl.org/dc/terms/> 
PREFIX owl: <http://www.w3.org/2002/07/owl#> 
PREFIX freebase: <http://rdf.freebase.com/ns/> 
PREFIX db: <http://dbpedia.org/> 
PREFIX dbp: <http://dbpedia.org/property/> 
PREFIX foaf: <http://xmlns.com/foaf/0.1/> 
PREFIX http: <http://www.w3.org/2006/http#> 
SELECT ?x ?y WHERE { 
    ?x ?????? http://dbpedia.org/resource/Ashok_Gehlot. 
    ?x owl:birthdate ?z. 
} 

回答

9

你不想要一個頁面的屬性,你想要aresource的屬性。在這種情況下,資源是<http://dbpedia.org/resource/Ashok_Gehlot>。 RDF是基於圖形的數據表示,而SPARQL查詢是基於圖形的查詢語言。您正在尋找源圖<http://dbpedia.org/resource/Ashok_Gehlot>,其邊緣標籤爲owl:birthdate(這沒有意義,但這是一個不同的問題)的圖的邊緣,並且您想要檢索邊的另一端並綁定其值到變量?z。因此,您的查詢將是:

select ?z where { 
    <http://dbpedia.org/resource/Ashok_Gehlot> owl:birthdate ?z 
} 

SPARQL results

當然,該查詢沒有結果,因爲資源沒有財產owl:birthdate。如果您瀏覽您在Ashok Gehlot看到的數據,你會發現,有

  • DBpedia的貓頭鷹:生日1951年5月3日(XSD:日期)
  • dbpprop:生日3( XSD:整數)
  • dbpprop:出生日期1951年(XSD:整數)

的DBpedia的貓頭鷹數據比dbpprop數據乾淨多了,所以你應該使用它。還注意到前綴dbpedia:簡寫爲<http://dbpedia.org/resource/>,您的查詢應該是:

select ?birthDate where { 
    dbpedia:Ashok_Gehlot dbpedia-owl:birthDate ?birthDate 
} 

SPARQL results

-------------- 
| birthDate | 
|============| 
| 1951-05-03 | 
-------------- 

如果由於某種原因,它確實是重要的是有一個查詢,更在形狀您原始嘗試,您可以使用以下內容。模式?x owl:sameAs? dbpedia:Ashok_Gehlot意味着?x將被綁定到屬性owl:sameAsdbpedia:Ashok_Gehlot零或一步之外的事物。對於零階情況,?x只是dbpedia:Ashok_Gehlot,這正是你想要的。對於這種情況,?x將是owl:sameAs dbpedia:Ashok_Gehlot,這也應該是OK。

select ?birthDate where { 
    ?x owl:sameAs? dbpedia:Ashok_Gehlot . 
    ?x dbpedia-owl:birthDate ?birthDate . 
} 

SPARQL results