Фильтр проецируемых выражений в SPARQL - PullRequest
3 голосов
/ 11 апреля 2019

Вот пример запроса:

PREFIX  dc:  <http://purl.org/dc/elements/1.1/> 
PREFIX  ns: <http://example.org/ns#> 
SELECT  ?title (?p AS ?fullPrice) (?fullPrice*(1-?discount) AS ?customerPrice) 
WHERE {
  ?x ns:price ?p .    
  ?x dc:title ?title .     
  ?x ns:discount ?discount
}

Результаты будут такими:

| title              | fullPrice | customerPrice |
| "The Semantic Web" |        23 |         17.25 |
| "SPARQL Tutorial"  |        42 |         33.6  |

Я хочу только customerPrice> 20чтобы быть отображенным.

Я попытался HAVING (?customerPrice > 20) в конце запроса, но, кажется, не видит проецируемые выражения.

Есть ли другой способ сделать это?

1 Ответ

2 голосов
/ 11 апреля 2019

Переместите вычисляемую переменную из списка SELECT в предложение BIND внутри шаблона запроса.Затем вы можете использовать FILTER для переменной:

SELECT ?title ?fullPrice ?customerPrice
WHERE {
    ?x ns:price ?fullPrice.
    ?x dc:title ?title.
    ?x ns:discount ?discount
    BIND (?fullPrice * (1-?discount) AS ?customerPrice)
    FILTER (?customerPrice > 20)
}
...