私は Jena ARQ を使用して、rdfs ラベルに基づいて概念に関連付けられた型を見つけるために、Jena TDB から読み取られる大規模なオントロジーに対して SPARQL クエリを作成しています。
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") )
}
しかし今では、クエリが完了するまでに 1 分以上かかります。大文字と小文字を区別しないクエリをより効率的な方法で作成する方法はありますか?