Jak napisać zapytanie SPARQL, które efektywnie dopasowuje literały ciągów, ignorując wielkość liter

Używam Jena ARQ do napisania zapytania SPARQL przeciwko dużej ontologii odczytywanej z Jena TDB, aby znaleźć typy powiązane z pojęciami opartymi na etykiecie 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 .
}

Działa to całkiem dobrze i jest całkiem szybkie (<1 sekunda). Niestety, dla niektórych terminów muszę wykonać to zapytanie w sposób niewrażliwy na wielkość liter. Na przykład, ponieważ etykieta"Tylenol" jest w ontologii, ale nie"tylenol", pojawia się puste zapytanie:

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

Mogę napisać wersję tej kwerendy bez rozróżniania wielkości liter przy użyciu składni FILTER w następujący sposób:

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

Ale teraz zapytanie trwa ponad minutę! Czy jest jakiś sposób na napisanie zapytania bez rozróżniania wielkości liter w bardziej wydajny sposób?

questionAnswers(2)

yourAnswerToTheQuestion