如何使用SPARQL从DBpedia中提取数据

时间:2018-06-10 17:19:40

标签: sparql rdf stardog federated-queries

我正在尝试使用SPARQL的SERVICE函数从dbpedia中提取一些数据。

事实上,我想要提取所有纽约剧院的名称,纬度和地段。要检查某个实例是否是影院我可以使用http://dbpedia.org/class/yago/Theater104417809​。剧院的一个例子可能是http://dbpedia.org/resource/Grand_Theatre_(New_York_City)

如何使用service函数获取SPARQL中需要的内容?

** 编辑 **

我正在尝试的查询是以下一个,但是没有返回任何值。

PREFIX dbpedia: <http://dbpedia.org/ontology/>
PREFIX dbp: <http://dbpedia.org/property/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>
PREFIX geos: <http://www.opengis.net/ont/geosparql#>
PREFIX geof: <http://www.opengis.net/def/function/geosparql/>
PREFIX : <http://www.semanticweb.org/frubi/ontologies/2017/10/puntsWIFI#>

SELECT *
WHERE {
  SERVICE <http://dbpedia.org/sparql/> {
    SELECT ?teatreName ?lat ?long
    WHERE {
      ?teatre rdf:type dbpedia:Theatre .
      ?teatre foaf:name ?teatreName .
      ?teatre geo:lat ?lat .
      ?teatre geo:long ?long .
      ?teatre dbp:city ?ciutat .
      ?ciutat rdfs:label "New York City"@en
    }
  } 
}

1 个答案:

答案 0 :(得分:1)

这不是联合查询的问题,而是您的DBpedia查询。 dbp:city不是对象属性,只是类型rdf:Property,因此它是无类型的。在您的情况下,它映射到文字,这意味着,您必须直接使用文字。这里奇怪的是,由于某些原因,你必须明确地使用数据类型http://www.w3.org/1999/02/22-rdf-syntax-ns#langString而不是"New York City"@en - 这对任何用户来说都显然不直观。不确定这是否是由于DBpedia提取而发生的,或者是Virtuoso的预期行为。

PREFIX dbpedia: <http://dbpedia.org/ontology/>
PREFIX dbp: <http://dbpedia.org/property/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>
PREFIX geos: <http://www.opengis.net/ont/geosparql#>
PREFIX geof: <http://www.opengis.net/def/function/geosparql/>
PREFIX : <http://www.semanticweb.org/frubi/ontologies/2017/10/puntsWIFI#>

SELECT *
WHERE {
  SERVICE <http://dbpedia.org/sparql/> {
    SELECT ?teatreName ?lat ?long
    WHERE {
      ?teatre rdf:type dbpedia:Theatre .
      ?teatre foaf:name ?teatreName .
      ?teatre geo:lat ?lat .
      ?teatre geo:long ?long .
      ?teatre dbp:city "New York City"^^<http://www.w3.org/1999/02/22-rdf-syntax-ns#langString>
    }
  } 
}