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?