Cómo escribir una consulta SPARQL que coincida de manera eficiente con los literales de cadena mientras ignora el caso

Estoy utilizando Jena ARQ para escribir una consulta SPARQL contra una ontología grande que se lee desde Jena TDB para encontrar los tipos asociados con los conceptos basados ​​en la etiqueta 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 .
}

Esto funciona bastante bien y es bastante rápido (<1 segundo). Desafortunadamente, para algunos términos, necesito realizar esta consulta de una manera que no distinga mayúsculas y minúsculas. Por ejemplo, porque la etiqueta"Tylenol" Está en la ontología, pero no"tylenol", la siguiente consulta aparece vacía:

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 .
}

Puedo escribir una versión de esta consulta que no distingue entre mayúsculas y minúsculas utilizando la sintaxis de FILTRO de esta manera:

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") )
}

¡Pero ahora la consulta tarda más de un minuto en completarse! ¿Hay alguna manera de escribir la consulta que distingue entre mayúsculas y minúsculas de una manera más eficiente?

Respuestas a la pregunta(2)

Su respuesta a la pregunta