【发布时间】:2015-09-16 14:04:11
【问题描述】:
我在 Virtuoso 上有以下 SPARQL 查询:
PREFIX wd: <http://www.wikidata.org/entity/>
SELECT DISTINCT ?p, ?title WHERE {
?p a ?c.
?c rdfs:subClassOf* wd:Q2431196.
?p rdfs:label ?title .
FILTER (bif:regexp_match("^Vamp( [(].*[)])?$", ?title))
}
在this SPARQL endpoint 上,它运行良好。它按预期返回电视节目 Vamp 和 Vamp (telenovela)。
现在我正在尝试使用 Jena API 在 Java 上做同样的事情,但失败如下。
线程“main”com.hp.hpl.jena.query.QueryParseException 中的异常:第 10 行,第 204 列:未解析的前缀名称:bif:regexp_match
按照bif:contains 的建议,我找到了摆脱 Jena 异常的解决方案。查询将如下所示:
PREFIX wd: <http://www.wikidata.org/entity/>
SELECT DISTINCT ?p, ?title WHERE {
?p a ?c.
?c rdfs:subClassOf* wd:Q2431196.
?p rdfs:label ?title .
?title <bif:regexp_match> "^Vamp( [(].*[)])?$"
}
但是,该查询不会像上一个查询那样返回任何元素。它也不会在 SPARQL 端点 Web 界面上返回任何元素(就像之前的查询一样)
我做错了吗?我怎样才能正确地对其进行正则表达式?
ps:使用 FILTER REGEX( ?title, "^Vamp( [(].*[)])?$") 可以在 Web SPARQL 端点上运行,但在 Java/Jena 上会引发以下错误:
2015 年 9 月 16 日下午 3:16:32 org.apache.jena.riot.system.ErrorHandlerFactory$ErrorLogger logError 严重:3 字节 UTF-8 序列的字节 2 无效。`
我认为此错误与 ( ) 字符有关..
【问题讨论】:
-
看起来问题肯定出在正则表达式中,无论是在您的构造中还是在 Virtuoso 的解释中。我无法立即提供解决方案,但我可以并且确实建议您向更专注的受众提出问题 - [Virtuoso 用户邮件列表 (sourceforge.net/p/virtuoso/mailman/virtuoso-users)。
标签: regex sparql jena virtuoso apache-jena