Joh*_*hsm 12 sesame replace sparql
如何在SPARQL 1.1中使用replace函数,尤其是在更新命令中?
例如,如果我有多个三元组?s?p?o其中?o是一个字符串,对于所有三元组,其中包含字符串"gotit"我想插入一个额外的三元组,其中"gotit"被替换为" "我怎么能这样做?我试图实现这是芝麻2.6.0.
我尝试了这种天真的方法:
INSERT { ?s ?p replace(?o,"gotit","haveit","i") . }
WHERE { ?s ?p ?o . FILTER(regex(?o,"gotit","i")) }
Run Code Online (Sandbox Code Playgroud)
但这导致语法错误.
我也无法在查询的结果列表中使用replace,如下所示:
SELECT ?s ?p (replace(?o,"gotit","haveit","i") as ?r) WHERE { .... }
Run Code Online (Sandbox Code Playgroud)
遗憾的是,SPARQL文档不包含如何使用此函数的示例.
是否有可能使用函数来创建新值而不仅仅是测试现有值,如果是,如何?
Rob*_*obV 14
您不能INSERT像在尝试的那样直接在子句中使用表达式.还要绑定?name与第一三重模式,但然后过滤上?o在FILTER其不会给你的结果(滤波上的未绑定变量会给你没有结果对大多数滤波器表达式).
相反,您需要BIND在WHERE子句中使用a 来使子句中的新版本值可用,INSERT如下所示:
INSERT
{
?s ?p ?o2 .
}
WHERE
{
?s ?p ?o .
FILTER(REGEX(?o, "gotit", "i"))
BIND(REPLACE(?o, "gotit", "haveit", "i") AS ?o2)
}
Run Code Online (Sandbox Code Playgroud)
BIND 将表达式的结果分配给新变量,以便您可以在查询/更新中的其他位置使用该值.
您感兴趣的SPARQL规范的相关部分是有关分配的部分