我正在使用 Jena ARQ 针对从 Jena TDB 读取的大型本体编写 SPARQL 查询,以便根据 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") )
}
但是现在查询需要一分钟才能完成!有没有办法以更有效的方式编写不区分大小写的查询?