Como escrever consulta SPARQL que combina de forma eficiente literais de cadeia enquanto ignora maiúsculas e minúsculas

Eu estou usando o Jena ARQ para escrever uma consulta SPARQL contra uma grande ontologia sendo lida do Jena TDB para encontrar os tipos associados com os conceitos baseados no rótulo rdfs:

SELECT DISTINCT ?type WHERE {
 ?x <http://www.w3.org/2000/01/rdf-schema#label> "aspirin" .
 ?x <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?type .
}

Isso funciona muito bem e é realmente muito veloz (<1 segundo). Infelizmente, para alguns termos, preciso executar essa consulta de maneira não diferencia maiúsculas de minúsculas. Por exemplo, porque o rótulo"Tylenol" está na ontologia, mas não"tylenol", a seguinte consulta aparece vazia:

SELECT DISTINCT ?type WHERE {
 ?x <http://www.w3.org/2000/01/rdf-schema#label> "tylenol" .
 ?x <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?type .
}

Eu posso escrever uma versão que não diferencia maiúsculas de minúsculas dessa consulta usando a sintaxe FILTER da seguinte forma:

SELECT DISTINCT ?type WHERE {
 ?x <http://www.w3.org/2000/01/rdf-schema#label> ?term .
 ?x <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?type .
 FILTER ( regex (str(?term), "tylenol", "i") )
}

Mas agora a consulta leva mais de um minuto para ser concluída! Existe alguma maneira de escrever a consulta que não diferencia maiúsculas de minúsculas de maneira mais eficiente?

questionAnswers(2)

yourAnswerToTheQuestion