我正在使用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") )
}
现在查询需要超过一分钟才能完成! 有没有更有效的方法编写不区分大小写的查询?