我的应用程序需要匹配正确的单词,即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”相关的图书?
此致 阿奇纳。
答案 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。”