OpenRDF Sesame: невозможно определить префикс - PullRequest
2 голосов
/ 15 марта 2012

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

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

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"

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

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.

1 Ответ

4 голосов
/ 16 марта 2012

Это работает для меня, если я 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

...