Фильтрация по необязательным данным?

Как я могу фильтровать необязательные значения в SPARQL, сохраняя результаты, в которых необязательное значение отсутствует? Например, в следующих данных есть три книги, а третья не имеет цены:

:book1 a :Book ; :hasPrice 10.
:book2 a :Book ; :hasPrice 20.
:book3 a :Book.

Как я могу выбрать книги, у которых цена меньше 15 или нет вообще?


person TWdorado    schedule 03.07.2014    source источник


Ответы (1)


person    schedule
comment
Спасибо, те же решения, что и я, но значения хранятся в виде строк в хранилище троек, которое я запрашиваю - на самом деле проблема. - person TWdorado; 04.07.2014
comment
@TWdorado Тогда просто переместите его в поплавок: filter( !bound(?price) || xsd:double(?price) < 15 ). Однако вы не показывали строки в своих данных; вы показали xsd: целочисленные типы. Обратите внимание, что "15"^^xsd:integer не является строкой, это целое число (в случае, если это то, что вы видите в своих данных). - person Joshua Taylor; 04.07.2014
comment
ты прав. Я отделил эту проблему от другой, поэтому раньше не видел проблемы со строками. И спасибо за подсказку, я еще не знал этого. - person TWdorado; 04.07.2014