如何通过SPARQL匹配一个确切的单词

时间:2011-03-21 08:10:19

标签: regex sparql jena arq

我的应用程序需要匹配正确的单词,即C或C ++与SPARQL。我有以下SPARQL查询

String prolog = "PREFIX kb: <" + VBOOK.getURI() + ">";

String queryString = prolog

+ "\n"

+ "SELECT * "

+ "WHERE {?x kb:Price ?price. ?x kb:Currency ?currency. ?x kb:Title ?title. ?x kb:Count ?count. "

+ "OPTIONAL {?x kb:Description ?description}."

+ "FILTER regex(?title, \"" +title + "\")}";

这与我的所有书籍相匹配,甚至包括C ++,C#和书籍 - 如嵌入式系统中的实际概念(因为'Concepts'这个词有'C')。

如果我将最后一行更改为

+ "FILTER regex(?title, \"" +"^"+title + "\")}";

如果title是例如'C',那么我的查询只匹配那些标题以字母'C'开头的书。所以没有选择像'在ANSI C中编程'这样的书。

我也在最后一行尝试了以下更改

+ "FILTER regex(str(?title), \"" +title + "\")}";

即使这对我没什么帮助。

即使图书标题不是以C开头,如何修改以获取与“C”相关的图书?

此致 阿奇纳。

2 个答案:

答案 0 :(得分:3)

此问题归结为您的查询引擎支持的正则表达式功能。如果它支持\b字边界匹配,您可以通过将最后一行更改为

来解决您的问题
 + "FILTER regex(?title, \"\\b" + title + "\\b\")}";

答案 1 :(得分:1)

你需要正则表达式吗?

而不是将标题设为变量,只需将其修改为 -

?x kb:标题“标题”。

即。在你的代码中

String title =“C ++”;

“WHERE {?x kb:Price?price。?x kb:Currency?currency。?x kb:Title \”“+ title +”\“。?x kb:Count?count。”