SPARQL: использование функций bif: st_distance и bif: st_points не работают вне SERVICE - PullRequest
0 голосов
/ 07 июня 2018

Я пытаюсь написать запрос 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?

Что я делаю не так или что я могу сделать по-другому, чтобы решить эту проблему?Заранее спасибо!

1 Ответ

0 голосов
/ 07 июня 2018

Пространственные функции в пространстве имен bif относятся к Virtuoso, программному обеспечению, используемому DBpedia.Поэтому они будут работать только в предложении SERVICE, где запрос выполняется на сервере Virtuoso.Поэтому либо используйте эти функции в предложении SERVICE, либо посмотрите на пространственные функции Jena.

...