SPARQL fn:替换thorws错误:“0”;语法错误,应为“主表达式”;
我正在开发一个音乐播放器应用程序,它依赖SPARQL来获取本地曲目的信息,并且遇到了一些麻烦 我正在运行Fedora21,数据库(跟踪器)是通过grilo查询的(即,我编写原始SPARQL查询,grilo使用这些查询与数据库对话并发送回任何结果) 基本上,每当我尝试使用SPARQL fn:替换thorws错误:“0”;语法错误,应为“主表达式”;,sparql,tracker,fedora-21,Sparql,Tracker,Fedora 21,我正在开发一个音乐播放器应用程序,它依赖SPARQL来获取本地曲目的信息,并且遇到了一些麻烦 我正在运行Fedora21,数据库(跟踪器)是通过grilo查询的(即,我编写原始SPARQL查询,grilo使用这些查询与数据库对话并发送回任何结果) 基本上,每当我尝试使用REPLACE,我都会得到以下结果: Grilo-WARNING : [tracker-source-request] grl-tracker-source-api.c:500: Could not execute sparql
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]
如果您想了解其他查询的外观
最终目标是使用REPLACE
从唱片集/艺术家姓名中去除标点符号,以便排序
谢谢 您没有给我们提供一个简单的示例,但您的问题至少有一部分是试图在查询和投影变量中将属性视为函数。你不会写这样的东西:
选择rdf:type(?album)其中{…}
要选择相册的rdf:type属性的值,请键入。相反,你会:
select?type其中{相册rdf:type?type}
您向我们展示的代码块可能如下所示:
选择不同的类型id(?标题作为相册标题)
在哪里{
?相册rdf:类型?类型;
跟踪器:id?id;
聂:头衔?头衔;
专辑艺术家?艺术家。
}
选择这些值需要花很多时间。现在,要将标题中出现的“hello”替换为“再见”,您需要执行以下操作:
选择distinct
类型
身份证件
(将(?标题“你好”、“再见”)替换为?专辑标题)
在哪里{
?相册rdf:类型?类型;
跟踪器:id?id;
聂:头衔?头衔;
专辑艺术家?艺术家。
}
现在,端点可能支持其他函数。因此,例如,端点可能有一个函数nie:title,您可以传递一个IRI并获取一个标题。如果是这种情况,您仍然需要使用正确的SPARQL语法,并执行以下任一操作:
bind(nie:title(?唱片集)as?title)
在查询或
选择。。。(聂:标题(?专辑)为?标题)。。。哪里{…}
在查询中。nie:title(…)周围的括号作为?title是必需的。(某些端点可能不强制执行所有语法,但它在规范中。)跟踪器尚不支持此功能 bugzilla最近添加了一个补丁来引入这个特性。我们应该在1.4.0(稳定版)或更高版本(如1.3.5)中看到这一点 此修补程序的错误如下所示:
我不太确定我是否理解您的完整设置,但您在问题中的查询不是法律标准SPARQL-除了没有
rdf:type
或tracker:id
函数之外(尽管这些函数可能是您正在使用的SPARQL引擎作为自定义扩展添加的),SELECT子句中的各个部分缺少开头和结尾括号(基本上,涉及AS
别名的每个子句元素都应该用括号括起来)。REPLACE
是SPARQL的1.1版本中添加的一个函数。也许您的查询引擎与修订后的规范不完全兼容?该错误目前已解决或修复。