2015-03-03 6 views
0

Я работаю над приложением для музыкального плеера, которое полагается на SPARQL для получения информации о местных треках и сталкивается с некоторыми проблемами.SPARQL fn: replace thorws error: «синтаксическая ошибка, ожидаемое первичное выражение»

Я запускаю Fedora 21, и база данных (Tracker) запрашивается через grilo (т. Е. Я пишу сырые запросы SPARQL, а grilo использует эти запросы для разговора с базой данных и отправляет любые результаты).

В принципе, в любое время я пытаюсь использовать REPLACE, я получаю следующее:

Grilo-WARNING : [tracker-source-request] grl-tracker-source-api.c:500: Could not execute sparql query id=1: 1.273: syntax error, expected primary expression 

При попытке использовать fn:replace, вместо этого я получаю:

Grilo-WARNING : [tracker-source-request] grl-tracker-source-api.c:500: Could not execute sparql query id=1: 1.284: syntax error, Unknown function 

Для справки, вот контекст в котором я пытаюсь использовать REPLACE:

SELECT DISTINCT 
    rdf:type(?album) 
    tracker:id(?album) AS id 
    (
     SELECT 
      nmm:artistName(?artist) 
     WHERE { 
      ?album nmm:albumArtist ?artist 
     } 
     LIMIT 1 
    ) AS artist 
    REPLACE(nie:title(?album)^^xsd:string, "hello", "goodbye") AS title 
    nie:title(?album) AS album 
    [more SPARQL gobbldygook follows] 

Если вы хотите понять, как выглядят другие запросы, view the whole file.

Конечная цель - использовать REPLACE, чтобы отменить пунктуацию от имен альбомов/исполнителей для целей сортировки.

Спасибо!

+1

Не совсем уверен, что я понимаю вашу полную установку, но запрос, как у вас есть в вашем вопросе не правовой стандарт SPARQL - помимо того, что нет 'rdf: type' или' tracker: id' (хотя они, возможно, были добавлены в качестве настраиваемых расширений с помощью используемого вами механизма SPARQL), вам не хватает открывающих и закрывающих скобок вокруг различных частей предложения SELECT (в основном, каждый элемент предложения, включающий сглаживание 'AS', должен быть окружен скобками). –

+2

'REPLACE' - функция, которая была добавлена ​​в версии 1.1 SPARQL. Возможно, ваш механизм запросов не полностью совместим с пересмотренной спецификацией? –

ответ

0

Вы не дали нам минимального примера для работы, но по крайней мере часть вашей проблемы заключается в попытке рассматривать свойства как функции как в запросе, так и в переменных прогноза. Вы не написать что-то вроде:

select rdf:type(?album) where { ... } 

, чтобы выбрать значение ФРРА: Тип недвижимости для альбома?. Вместо этого вы делаете:

select ?type where { ?album rdf:type ?type } 

Кусок кода, который вы показали нам, вероятно, следует что-то вроде:

select distinct ?type ?id (?title as ?albumTitle) 
where { 
    ?album rdf:type ?type ; 
     tracker:id ?id ; 
     nie:title ?title ; 
     nmm:albumArtist ?artist . 
} 

Это сколько бы заботиться о выборе значений. Теперь, чтобы заменить возникновение «привет» в названии с «до свидания», вы могли бы сделать:

select distinct 
    ?type 
    ?id 
    (replace(?title,"hello","goodbye") as ?albumTitle) 
where { 
    ?album rdf:type ?type ; 
     tracker:id ?id ; 
     nie:title ?title ; 
     nmm:albumArtist ?artist . 
} 

Теперь, возможно, что конечная точка поддерживает дополнительные функции. Так, например, возможно, что у конечной точки есть функция nie: title, что вы передаете IRI и получите название. Если это так, то вам все равно нужно использовать правильный синтаксис SPARQL и либо сделать:

bind(nie:title(?album) as ?title) 

в запросе или

select ... (nie:title(?album) as ?title) ... where { ... } 

в запросе. Круглые скобки вокруг nie: title (& hellip;) как? Title являются обязательными. (Некоторые конечные точки могут не применять весь синтаксис, но это : в спецификации.)

0

Отслеживание пока не поддерживается.

Недавно был добавлен патч, добавленный в bugzilla, чтобы включить эту функцию. Мы должны видеть это в 1.4.0 (стабильном) или более позднем неустойчивом релизах, например 1.3.5.

Исправлена ​​ошибка для этого патча здесь: https://bugzilla.gnome.org/show_bug.cgi?id=745917

 Смежные вопросы

  • Нет связанных вопросов^_^