在SPARQL中使用LIKE运算符选择字符串

17

在 ANSI SQL 中,您可以编写类似以下的语句:

SELECT * FROM DBTable WHERE Description LIKE 'MEET'

或者也可以这样:

SELECT * FROM DBTable WHERE Description LIKE '%MEET%'

我需要帮助写出与上面相当的SPARQL语句。

2个回答

24

使用正则表达式过滤器。你可以在这里找到一个简短的教程。

这是它的样子:

PREFIX ns: <http://example.com/namespace>

SELECT ?x
WHERE
{ ?x ns:SomePredicate ?y .
  FILTER regex(?y, "YOUR_REGEX", "i") }

YOUR_REGEX 必须是 XQuery 正则表达式语言 的表达式。

i 是一个可选的 标志。它表示匹配时不区分大小写。


2
Jena已经迁移到Apache,请在此处链接到新网站:http://jena.apache.org/tutorials/sparql_filters.html - castagna
嗨@castagna,您的评论现在已经整合到答案中。随意删除您的评论(如果您对我投票并ping我,我也会这样做)。 - Valerio Bozz

5
如果您有一个固定的字符串需要匹配,可以直接在图形模式中使用,例如:
PREFIX ns: <http://example.com/namespace>

SELECT ?x
WHERE
{ ?x ns:SomePredicate "YourString" }

请注意,这种方法并不总是有效,因为模式匹配是基于RDF术语相等性的,这意味着"YourString""YourString"@en不被视为同一术语,因此如果可能会产生问题,请使用Tom建议的REGEX方法。此外,一些SPARQL引擎提供了全文搜索扩展,允许您将类似于Lucene的查询集成到您的SPARQL查询中,这可能更适合您的用例,并且几乎肯定比通用搜索更有效,否则需要使用REGEX

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接