Возможно, ошибка в исполнителе или оптимизаторе запросов. Эксперты Virtuoso, такие как TallTed, знают лучше и окажут вам поддержку.
Я могу, по крайней мере, воспроизвести это, например, https://www.europeandataportal.eu/sparql, который работает на Virtuoso version 07.20.3230 on Linux (x86_64-unknown-linux-gnu), Single Server Edition
.
Но, что более важно: ваш запрос выглядит слишком сложным, поскольку вы можете использовать FILTER
с логическим ||
в сочетании с &&
- по крайней мере, я так думал.
К сожалению, происходит сбой с ошибкой
Virtuoso 37000 Error SP031: SPARQL compiler: No suitable triple pattern is found for a variable $description in special predicate bif:contains() at line 7 of query
и ни
SELECT DISTINCT ?dataset ?title WHERE {
?dataset a dcat:Dataset ;
dcterms:title ?title ;
dcterms:description ?description .
filter( (bif:contains(?title, "'keyword_1'") || bif:contains(?description,"'keyword_1'"))
&&
(bif:contains(?title, "'keyword_2'") || bif:contains(?description,"'keyword_2'"))
)
}
ни
SELECT DISTINCT ?dataset ?title WHERE {
?dataset a dcat:Dataset ;
dcterms:title ?title ;
dcterms:description ?description .
filter(bif:contains(?title, "'keyword_1'") || bif:contains(?description,"'keyword_1'"))
filter(bif:contains(?title, "'keyword_2'") || bif:contains(?description,"'keyword_2'"))
}
делай так, как я ожидал.
(подробный) обходной путь с использованием подзапросов:
SELECT DISTINCT ?dataset ?title WHERE {
{
select ?dataset ?title {
?dataset a dcat:Dataset ;
dcterms:title ?title ;
dcterms:description ?description .
filter( bif:contains(?title, "'keyword_1'") || bif:contains(?description,"'keyword_1'"))
}
}
{
select ?dataset ?title {
?dataset a dcat:Dataset ;
dcterms:title ?title ;
dcterms:description ?description .
filter( bif:contains(?title, "'keyword_2'") || bif:contains(?description,"'keyword_2'"))
}
}
}