2012-03-15 2 views
2

Я пытаюсь создать правильный запрос для моего тестового сервера, и я столкнулся с проблемой, которую я не могу определить PREFIX.OpenRDF Sesame: невозможно определить префикс

Например, этот запрос работает:

select * where 
{ 
    ?stayingURL <http://localhost/resource_lng> ?lng . 
    ?stayingURL <http://localhost/resource_staying_date> ?date . 
    ?stayingURL <http://localhost/resource_address> ?address . 
} 
LIMIT 100 

Я пытаюсь добавить фильтр по дате, так же, как что:

select * where 
{ 
    ?stayingURL <http://localhost/resource_lng> ?lng . 
    ?stayingURL <http://localhost/resource_staying_date> ?date . 
    ?stayingURL <http://localhost/resource_address> ?address . 
    FILTER (?date > "2012-01-01"^^xsd:date) 
} 
LIMIT 100 

Теперь я получил следующее сообщение об ошибке: "MALFORMED QUERY: org.openrdf.query.parser.sparql.ast.VisitorException: QName 'xsd:date' uses an undefined prefix"

OK, я пытаюсь объявить этот префикс вручную, добавив следующую строку в начало запроса:

PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> 

Теперь я получил эту ошибку:

MALFORMED QUERY: Encountered " "<" "< "" at line 1, column 14. 
Was expecting: 
<Q_IRI_REF> ... 

Это довольно странно для меня, но в любом случае я пытался писать его непосредственно, без префикса:

select * where 
{ 
?stayingURL <http://localhost/resource_lng> ?lng . 
?stayingURL <http://localhost/resource_staying_date> ?date . 
?stayingURL <http://localhost/resource_address> ?address . 
FILTER (?date > "2012-01-01"^^<http://www.w3.org/2001/XMLSchema#date>) 
} 
LIMIT 100 

Результат почти такой же :

MALFORMED QUERY: Encountered " "<" "< "" at line 1, column 228. 
Was expecting one of: 
    <Q_IRI_REF> ... 
    <PNAME_NS> ... 
    <PNAME_LN> ... 

Что я делаю неправильно?

Адрес: http://176.34.226.101:8080/openrdf-sesame/repositories/ecomobile.

+2

Как вы отправляете запрос на свой сервер? Тот факт, что второй запрос относится к ошибке в строке «строка 1, столбец 228», предполагает, что вы кодируете его как параметр в HTTP-запросе. Вы уверены, что правильно кодируете символ «<" and ">» в этом запросе? – Jan

+0

@ Джан, спасибо, проблема действительно была в кодировке url; но мне интересно, почему работает первый запрос? Он также содержит символы '<' '>'. –

ответ

4

Это работает для меня, если я URI закодировать все query параметр:

PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> 
select * where 
{ 
?stayingURL <http://localhost/resource_lng> ?lng . 
?stayingURL <http://localhost/resource_staying_date> ?date . 
?stayingURL <http://localhost/resource_address> ?address . 
FILTER (?date > "2012-01-01"^^<http://www.w3.org/2001/XMLSchema#date>) 
} 
LIMIT 100 

Это будет запрос:

http://176.34.226.101:8080/openrdf-sesame/repositories/ecomobile?query=PREFIX%20xsd%3A%20%3Chttp%3A//www.w3.org/2001/XMLSchema%23%3E%20select%20%2A%20where%0A%7B%0A%20%20%20%3FstayingURL%20%3Chttp%3A//localhost/resource_lng%3E%20%3Flng%20.%0A%20%20%20%3FstayingURL%20%3Chttp%3A//localhost/resource_staying_date%3E%20%3Fdate%20.%0A%20%20%20%3FstayingURL%20%3Chttp%3A//localhost/resource_address%3E%20%3Faddress%20.%0A%20%20%20FILTER%20%28%3Fdate%20%3E%20%222012-01-01%22%5E%5Exsd%3Adate%29%0A%7D%0ALIMIT%20100

Извиняюсь за загадочные нечитаемым URI ... сокращённого версия здесь:

http://bit.ly/xTQhSV

+0

Спасибо, проблема действительно была в кодировке url; но мне интересно, почему работает первый запрос? Он также содержит символы '<' '>'. –