Как извлечь данные из DBpedia с помощью SPARQL
Я пытаюсь извлечь некоторые данные из dbpedia с помощью SERVICE
функция SPARQL.
На самом деле я хочу извлечь имена, последние и многие из всех нью-йоркских театров. Чтобы проверить, является ли экземпляр театром, я могу использовать http://dbpedia.org/class/yago/Theater104417809%E2%80%8B. Одним из примеров театра может быть 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 ответ
Проблема не в федеративных запросах, а в запросе 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>
}
}
}