【问题标题】:How to match an exact word through SPARQL如何通过 SPARQL 匹配一个精确的单词
【发布时间】:2011-03-21 08:10:19
【问题描述】:

我的应用程序需要匹配正确的单词,例如 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”相关的书籍?

问候, 阿卡那。

【问题讨论】:

标签: regex sparql jena arq


【解决方案1】:

这个问题归结为您的查询引擎支持哪些正则表达式功能。如果支持\b字边界匹配,你可以把最后一行改成

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

【讨论】:

  • 不,当我输入“C”时它没有给我任何结果。
  • @Arcana:嗯,你用的是什么查询引擎?
  • ARQ-2.8.5 和 Jena-2.6.3。我使用的是 tomcat 服务器,即 java 服务器。
  • @Arcana:ARQ 使用支持\bjava.util.regex。你的问题在别处。也许区分大小写?您可以向 SPARQL regex 添加第三个 "i" 参数,使其不区分大小写。
【解决方案2】:

你需要正则表达式吗?

不要让标题成为变量,而是简单地修复它 -

?x kb:标题“标题”。

即在你的代码中

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

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

【讨论】:

  • 我需要试试这个。但是现在我的输入,如果输入 C++,程序需要 C,所以我需要弄清楚这一点。我只是想这就是为什么没有搜索 C++ 的原因。正确接受我的输入后,将返回此解决方案。
猜你喜欢
  • 1970-01-01
  • 2019-02-17
  • 2021-01-31
  • 1970-01-01
  • 1970-01-01
  • 2021-05-15
  • 2017-09-18
  • 1970-01-01
  • 2023-03-30
相关资源
最近更新 更多