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?