如何在sparql中使用FILTER和regex进行匹配?

如何在sparql中使用FILTER和regex进行匹配?,regex,sparql,rdf,semantic-web,apache-jena,Regex,Sparql,Rdf,Semantic Web,Apache Jena,我希望将用户提供的输入(字符串)与rdf文件中存在的特定节点的值(字符串)相匹配 我应用了以下精确模式进行匹配(输入=节点值): 对于这种类型的匹配(输入NodeValue)我指的是返回一个包含给定用户输入的NodeValue列表的查询时获得匹配类型 例如,如果用户输入巴塔哥尼亚美丽,则返回巴塔哥尼亚 提前感谢。要实现数据库值是用户输入的子字符串的匹配,需要翻转regex函数的参数。这样,数据库中的实际值将用作正则表达式,用户输入将用作与之匹配的字符串: FILTER(REGEX("patago

我希望将用户提供的输入(字符串)与rdf文件中存在的特定节点的值(字符串)相匹配

我应用了以下精确模式进行匹配(输入=节点值):

对于这种类型的匹配(输入<节点值),我使用了以下方法:

...       
 FILTER regex (?NodeValue,".*userinput.*","i").
所以,我的问题是如何设置我的正则表达式,以便在(input>NodeValue)我指的是返回一个包含给定用户输入的NodeValue列表的查询时获得匹配类型

例如,如果用户输入
巴塔哥尼亚美丽
,则返回
巴塔哥尼亚


提前感谢。

要实现数据库值是用户输入的子字符串的匹配,需要翻转regex函数的参数。这样,数据库中的实际值将用作正则表达式,用户输入将用作与之匹配的字符串:

FILTER(REGEX("patagoniaisbeautiful", STR(?NodeValue), "i"))
如果
?NodeValue
为“巴塔哥尼亚”,则此操作将成功。当然,如果
?NodeValue
是“p”、“a”、“t”等,它也会匹配

事实上,考虑到您只对这里的简单子字符串匹配感兴趣,您可以通过使用
CONTAINS
函数来简化此操作,而不是使用(计算代价高昂的)
REGEX
操作。像这样:

FILTER(CONTAINS("patagoniaisbeautiful", LCASE(STR(?NodeValue))))

顺便说一下:您给出了一个执行正则表达式的示例,其中用户输入是数据库值的子字符串:
“*userinput.*”
。此处不需要开头和结尾的
*
。根据定义,SPARQL正则表达式匹配是子字符串匹配

要实现数据库值是用户输入的子字符串的匹配,需要翻转regex函数的参数。这样,数据库中的实际值将用作正则表达式,用户输入将用作与之匹配的字符串:

FILTER(REGEX("patagoniaisbeautiful", STR(?NodeValue), "i"))
如果
?NodeValue
为“巴塔哥尼亚”,则此操作将成功。当然,如果
?NodeValue
是“p”、“a”、“t”等,它也会匹配

事实上,考虑到您只对这里的简单子字符串匹配感兴趣,您可以通过使用
CONTAINS
函数来简化此操作,而不是使用(计算代价高昂的)
REGEX
操作。像这样:

FILTER(CONTAINS("patagoniaisbeautiful", LCASE(STR(?NodeValue))))

顺便说一下:您给出了一个执行正则表达式的示例,其中用户输入是数据库值的子字符串:
“*userinput.*”
。此处不需要开头和结尾的
*
。根据定义,SPARQL正则表达式匹配是子字符串匹配

什么是“输入>节点值”?您期望什么,什么当前不起作用?正则表达式对字符串值起作用。我不知道
?NodeValue
的类型,但最好使用
STR(?NodeValue)
作为正则表达式函数的第一个参数。我不清楚
(输入
(输入>NodeValue)
是什么意思。。。如果它们是包含的符号,我想知道为什么要获得用户输入的所有子集。。。我的意思是,如果用户输入
patagonia
,你真的想要
p
pa
标签
go
ni
等等吗?再说一次,也许这些符号完全是别的意思。谢谢大家,我将进一步解释我所说的(输入>节点值),一个返回由给定用户输入包含的?节点值列表的查询。例如,如果用户输入
PatagoniaIsBeauty
它将返回
patagonia
。什么是“输入>节点值”?您期望什么,什么当前不起作用?REGEX对字符串值起作用。我不知道
?NodeValue
的类型,但最好使用
STR(?NodeValue)
作为正则表达式函数的第一个参数。我不清楚
(输入
(输入>NodeValue)
是什么意思。。。如果它们是包含的符号,我想知道为什么要获得用户输入的所有子集。。。我的意思是,如果用户输入
patagonia
,你真的想要
p
pa
标签
go
ni
等等吗?再说一次,也许这些符号完全是别的意思。谢谢大家,我将进一步解释我所说的(输入>节点值),一个返回由给定用户输入包含的?节点值列表的查询。例如,如果用户输入
PatagoniaIsBeauty
它将返回
patagonia
。那么如果我想要一个字符串与SPARQL中的正则表达式精确匹配,我该怎么做呢?@mee为什么要使用正则表达式呢?只需执行
str(?foo)=“bar”
。那么,如果我希望字符串与SPARQL中的正则表达式精确匹配,我该怎么做呢?@mee为什么要使用正则表达式呢?只要做
str(?foo)=“bar”