Я пытаюсь написать запрос SPARQL, в котором я хочу запросить названия стран из моего собственного набора данных, использовать ресурс dbpedia для получения широты и долготы страны, а затем вычислить расстояние между ними с помощью функции bif:st_distance
.Широта и долгота, которые я хочу использовать, являются числами с плавающей запятой, поэтому я должен сначала преобразовать их в точки с bif:st_point
, поскольку функция берет только точки.
На моей локальной машине я использую apache jena-сервер fuseki с моим набором данных загружен.Я попробовал следующее:
PREFIX rate: <http://MYNAME.bplaced.net/rating/index.ttl#>
PREFIX dbr: <http://dbpedia.org/resource/>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX bif: <bif:>
PREFIX dbr: <http://dbpedia.org/resource/>
PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>
PREFIX afn: <http://jena.apache.org/ARQ/function#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT ?from ?to ?latituded ?longituded ?latitudeo ?longitudeo ?distance WHERE{
{SELECT ?from ?to (AVG(?latd) as ?latituded)
(AVG(?longd) as ?longituded)
(AVG(?lato) as ?latitudeo)
(AVG(?longo) as ?longitudeo) WHERE {
?rating rate:from dbr:Germany.
?rating rate:year "1965"^^xsd:gYear.
?rating rate:from ?from.
?rating rate:to ?to.
SERVICE <http://dbpedia.org/sparql>{
?from geo:lat ?latd.
?from geo:long ?longd.
?to geo:lat ?lato.
?to geo:long ?longo.
}
} GROUP BY ?from ?to
}
BIND(bif:st_distance(
bif:st_point(?latituded,?longituded),
bif:st_point(?latitudeo,?longitudeo)
)AS ?distance).
}
Это оставляет меня с таким результатом: Результат запроса
Как вы можете видеть: Столбец расстояния остается пустым.Я уверен, что это как-то связано с тем, находится ли оператор BIND внутри SERVICE.Могут ли некоторые значения быть невидимыми для BIND?
Что я делаю не так или что я могу сделать по-другому, чтобы решить эту проблему?Заранее спасибо!