我在 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))
}
在这个 SPARQL 端点上,它工作正常。它按预期返回电视节目 Vamp 和 Vamp (telenovela)。
现在我正在尝试使用 Jena API 在 Java 上做同样的事情,但失败如下。
线程“main”com.hp.hpl.jena.query.QueryParseException 中的异常:第 10 行,第 204 列:未解析的前缀名称:bif:regexp_match
正如bif:contains
. 查询将如下所示:
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: usingFILTER 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 无效。`
我认为这个错误与( )
字符有关..