Я использую Jena ARQ для написания запроса SPARQL к большой онтологии, считываемой из Jena TDB, чтобы найти типы, связанные с концепциями на основе метки 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 .
}
Это работает довольно хорошо и на самом деле довольно быстро (‹1 секунды). К сожалению, для некоторых условий мне нужно выполнить этот запрос без учета регистра. Например, поскольку в онтологии есть метка "Tylenol"
, а не "tylenol"
, следующий запрос оказывается пустым:
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 .
}
Я могу написать версию этого запроса без учета регистра, используя синтаксис FILTER следующим образом:
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") )
}
Но теперь выполнение запроса занимает больше минуты! Есть ли способ более эффективно написать запрос без учета регистра?