我对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 (电视节目)如预期。
现在,我尝试在Java上使用Jena API进行同样的操作,它失败了,如下所示。
线程"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端点上工作,但在Java/Jena上引发以下错误:
2015年9月16日下午3: 16 :32 PM org.apache.jena.riot.system.ErrorHandlerFactory$ErrorLogger logError logError:3字节UTF-8序列无效字节2
我认为这个错误与( )
字符有关。
发布于 2016-08-29 12:36:42
使用此PREFIX bif:<bif:>
而不是PREFIX bif:<>
代替了耶拿。
发布于 2015-09-16 14:27:06
您在regex模式中是正确的,只是在java方面进行了一些编辑。
要让它在java中工作,只需将左括号(在^后面,右括号)放在$之前。
regex模式应该如下所示:
"^(Vamp( (.*))?)$";
希望这能帮上忙
发布于 2021-10-13 15:13:30
您可以使用以下前缀声明作为解决办法。
PREFIX bif: <bif:>
现场链接演示了工作中的变通方法。
查询编辑器链接展示解决方案。
最终,前缀声明的URI应该是:
PREFIX bif: <http://www.openlinksw.com/schemas/bif#>
我在Twitter线程中解释了同样的问题,即我们正在努力纠正与上述标准前缀声明相关联的回归。
https://stackoverflow.com/questions/32610878
复制相似问题