2013-11-26 69 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