У меня проблемы с запросом SPARQL. Я хотел бы иметь рецепты, которые содержат меньше ингредиентов, чем я предоставляю. Это запрос:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX rec:<http://www.receta.org#>
select ?recipe (count(distinct ?Ingrediente) as ?oi) {
?recipe rec:Ingrediente ?Ingrediente
filter not exists {
?recipe rec:Ingrediente ?other_ingredient
filter( ?other_ingredient not in (rec:Cebolla,rec:Tomate, rec:Aceite, rec:Sal) )
}}
group by ?recipe
having( (count(distinct ?Ingrediente)) < 4)
order by (count(distinct ?Ingrediente))
Вот пример. Допустим, у меня есть эти рецепты:
- prueba3: цеболла
- пруэба: цеболла, ацеит
- prueba2: цеболла, ацеит, томат
- prueba4: цеболла, томат, ацеит, сал
Затем я хотел бы напечатать:
- prueba3: цеболла
- пруэба: цеболла, ацеит
- prueba2: цеболла, ацеит, томат
Я не хочу печатать prueba4, потому что в нем точно столько же ингредиентов.
Основная проблема с запросом — это строка «имеющая»: having((count(distinct ?Ingrediente)) < 4)
. В данном случае это работает, но я не хочу ставить 4, я хочу сделать это в общем виде, поэтому мне не нужно менять это число каждый раз, когда я добавляю больше ингредиентов.
Итак, какие-либо идеи о том, как я могу изменить эту строку? Спасибо!