【发布时间】:2015-03-03 17:44:39
【问题描述】:
我正在开发一个依赖 SPARQL 来获取本地曲目信息的音乐播放器应用,但遇到了一些麻烦。
我正在运行 Fedora 21,并且通过 grilo 查询数据库 (Tracker)(即,我编写原始 SPARQL 查询,grilo 使用这些查询与数据库通信并发回任何结果)。
基本上,每当我尝试使用REPLACE 时,都会得到以下信息:
Grilo-WARNING : [tracker-source-request] grl-tracker-source-api.c:500: Could not execute sparql query id=1: 1.273: syntax error, expected primary expression
当我尝试使用 fn:replace 时,我得到:
Grilo-WARNING : [tracker-source-request] grl-tracker-source-api.c:500: Could not execute sparql query id=1: 1.284: syntax error, Unknown function
作为参考,这是我尝试使用 REPLACE 的上下文:
SELECT DISTINCT
rdf:type(?album)
tracker:id(?album) AS id
(
SELECT
nmm:artistName(?artist)
WHERE {
?album nmm:albumArtist ?artist
}
LIMIT 1
) AS artist
REPLACE(nie:title(?album)^^xsd:string, "hello", "goodbye") AS title
nie:title(?album) AS album
[more SPARQL gobbldygook follows]
如果您想了解其他查询的外观,view the whole file。
最终目标是使用REPLACE 去除专辑/艺术家名称中的标点符号以进行排序。
谢谢!
【问题讨论】:
-
不太确定我是否了解您的完整设置,但是您在问题中的查询不是合法的标准 SPARQL - 除了没有
rdf:type或tracker:id函数(虽然这些可能已被您使用的 SPARQL 引擎添加为自定义扩展),但您在 SELECT 子句中的各个部分周围缺少左括号和右括号(基本上,每个涉及AS别名的子句元素都应该用括号括起来)。 -
REPLACE是在 SPARQL 1.1 修订版中添加的函数。也许您的查询引擎与修订后的规范不完全兼容?