1

我的应用程序需要匹配正确的词,即说 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# 以及诸如 -Real Concepts in Embedded Systems 之类的书籍相匹配(因为“概念”一词具有“C”)。

如果我将最后一行更改为

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

如果标题是例如“C”,那么我的查询只匹配那些标题以字母“C”开头的书。因此,不选择“ANSI C 编程”之类的书。

我还尝试在最后一行进行以下更改

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

即使这对我也没有多大帮助。

即使书名不以 C 开头,如何修改以获取与“C”相关的书籍?

问候,阿卡纳。

4

2 回答 2

3

这个问题归结为您的查询引擎支持哪些正则表达式功能。如果它支持\b单词边界匹配,您可以通过将最后一行更改为来解决您的问题

 + "FILTER regex(?title, \"\\b" + title + "\\b\")}";
于 2011-03-21T08:24:02.303 回答
1

你需要正则表达式吗?

与其使 title 成为变量,不如简单地修复它 -

?x kb:标题“标题”。

即在您的代码中

字符串标题 = "C++";

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

于 2011-03-29T17:14:30.607 回答