如何使用 SPARQL 从 DBpedia 中提取数据
How to extract data from DBpedia using SPARQL
我正在尝试使用 SPARQL 的 SERVICE
函数从 dbpedia 中提取一些数据。
事实上,我想提取纽约所有剧院的名称、纬度和地段。要检查一个实例是否是剧院,我可以使用 http://dbpedia.org/class/yago/Theater104417809. One example of a theater could be 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
}
}
}
这不是联合查询的问题,而是您的 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>
}
}
}
我正在尝试使用 SPARQL 的 SERVICE
函数从 dbpedia 中提取一些数据。
事实上,我想提取纽约所有剧院的名称、纬度和地段。要检查一个实例是否是剧院,我可以使用 http://dbpedia.org/class/yago/Theater104417809. One example of a theater could be 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
}
}
}
这不是联合查询的问题,而是您的 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>
}
}
}