2014-04-02 3 views
0

я побежал следующие запросы в SPARQL в рамках Йены против онтологии (Предикат wasBornIn присутствует в онтологии)Лексической ошибка при использовании МИНУС ключевого слова в SPARQL запроса

select ?p where 
    { 
    ?s ?p ?o FILTER NOT EXISTS { ?s :wasBornIn ?o } 
    } 

и

select ?p where 
    { 
    { ?s ?p ?o } MINUS { ?s :wasBornIn ?o } 
    } 

Для первого запроса, я получаю следующие ошибки:

null 
Error: Lexical error at line 7, column 21. Encountered: " " (32), after : "NOT" 

и

null 
Error: Encountered "<EOF>" at line 5, column 16. 
Was expecting: 
"{" ... 

Для второго запроса, я получаю подобную ошибку:

null 
Error: Lexical error at line 5, column 38. Encountered: " " (32), after : "MINUS" 

Оба запросы кажется правильным, и я понятия не имею, почему я получаю эти ошибки.

+2

Где код, который фактически генерирует запрос. Я не удивлюсь, если по крайней мере некоторые из них связаны с конкатенацией строк с отсутствием пробелов. Например, ''? S? P? O "+" FILTER NOT EXISTS ... "' Производит '? S? P? OFILTER NOT ...' с переменной '? OFILTER'. –

+0

Я не передаю запрос в виде строки. Я непосредственно ввожу в фактический запрос. @JoshuaTaylor – galahad

+0

Непосредственно печатать на что? Ты сказал, что делаешь это с йеной ... нам нужно будет увидеть код, прежде чем мы ничего не скажем. Как я уже упоминал в ответе, оба вопроса сами хорошо сформированы. –

ответ

3

Вы первый и второй запросы (при условии, что у вас установлен префикс :), являются законными. Вы можете проверить с помощью sparql.org's query validator. Например, это как юридические:

prefix : <> 

select ?p where 
    { 
    ?s ?p ?o FILTER NOT EXISTS { ?s :wasBornIn ?o } 
    } 
prefix : <> 

select ?p where 
    { 
    { ?s ?p ?o } MINUS { ?s :wasBornIn ?o } 
    } 

Однако, есть кое-что вы не показывает нам; вы отмечаете, что в строке 7 (для первой) есть ошибка, но запрос, который вы указали, не имеет 7 строк. Не только это, я не уверен, как вы могли столкнуться с EOF в строке 5, а затем все еще иметь строку 7, чтобы получить еще одну ошибку. Возможно, что-то другое в коде, который фактически создает запрос. Может быть, у вас есть что-то вроде этого:

"?s ?p ?o" + 
"FILTER NOT EXISTS { ?s :wasBornIn ?o }" 

в этом случае вы бы в конечном итоге с

?s ?p ?oFILTER NOT EXISTS { … } 

(то есть, с переменной с именем ?oFILTER). Однако, не увидев ваш код, это было бы трудно диагностировать. Вы также можете как-то разбора запроса некорректно.

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