Wie schreibe ich eine SPARQL-Abfrage, die effizient mit String-Literalen übereinstimmt und dabei die Groß- und Kleinschreibung ignoriert?

Ich benutze Jena ARQ, um eine SPARQL-Abfrage gegen eine große Ontologie zu schreiben, die aus Jena TDB gelesen wird, um die Typen zu finden, die mit Konzepten auf der Basis von rdfs-Label verknüpft sind:

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

Dies funktioniert ziemlich gut und ist eigentlich ziemlich schnell (<1 Sekunde). Leider muss ich diese Abfrage bei einigen Begriffen ohne Berücksichtigung der Groß- und Kleinschreibung durchführen. Zum Beispiel, weil das Etikett"Tylenol" ist in der Ontologie, aber nicht"tylenol"wird die folgende Abfrage leer angezeigt:

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

Ich kann eine Version dieser Abfrage ohne Berücksichtigung der Groß- und Kleinschreibung schreiben, indem ich die FILTER-Syntax wie folgt verwende:

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

Aber jetzt dauert die Abfrage mehr als eine Minute! Gibt es eine Möglichkeit, die Abfrage ohne Berücksichtigung der Groß- und Kleinschreibung effizienter zu schreiben?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage