gpt4 book ai didi

rdf - 如何编写有效匹配字符串文字同时忽略大小写的 SPARQL 查询

转载 作者:行者123 更新时间:2023-12-03 03:21:09 26 4
gpt4 key购买 nike

我正在使用 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") )
}

但现在查询需要一分多钟才能完成!有没有办法以更有效的方式编写不区分大小写的查询?

最佳答案

在 SPARQL 中可以使用的所有可能的字符串运算符中,regex 可能是最昂贵的一个。如果您避免使用 regex 并在测试两侧使用 UCASELCASE,您的查询可能会运行得更快。像这样的东西:

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 (lcase(str(?term)) = "tylenol")
}

这可能会更快,但一般来说,不要期望任何三元组存储的文本搜索都有出色的性能。三重存储非常擅长图形匹配,但不太擅长字符串匹配。

关于rdf - 如何编写有效匹配字符串文字同时忽略大小写的 SPARQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43073266/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com