我有以下查询
CONSTRUCT{
?entity a something;
a label ?label .
}
WHERE
{
?entity a something;
a label ?label .
BIND(CONCAT(STR( ?label ), " | SOME ADDITIONAL TEXT I WOULD LIKE TO APPEND MANUALLY") ) AS ?label ) .
}
Run Code Online (Sandbox Code Playgroud)
我只是想用来串联一些文本?label,但是在运行查询时出现以下错误:
BIND clause alias '?label' was previously used
Run Code Online (Sandbox Code Playgroud)
我只想返回单个实例,?label因此,我在Construct子句中对其进行了定义。
该错误消息似乎是准确的,但仅是此查询可获得的许多错误中的第一个。查看一些SPARQL学习资源的通常要求是至少了解基于三元组的图模式匹配的基础知识,以及一些提示以及要查找的内容。CONSTRUCT并不是一个不错的起点,以下内容几乎可以满足我的预期:
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
CONSTRUCT{
?entity rdfs:label ?label .
}
WHERE
{
?entity a ex:something ;
rdfs:label ?oldlabel .
BIND(CONCAT(STR( ?oldlabel ), " | SOME ADDITIONAL TEXT I WOULD LIKE TO APPEND MANUALLY") ) AS ?label ) .
}
Run Code Online (Sandbox Code Playgroud)
该查询有很多不同之处,因此请看一下它是否准确地满足了您的要求。一个提示是使用“。”之间的语法差异。和';' 分隔三重模式。另一个问题是,每个子句要么在示例中使用qname定义URL,要么在变量前添加“?”。“标签”或“某物”均无效。
我说“差不多”是因为CONSTRUCT只返回一组三元组。要修改标签(我认为是目的),您需要使用SPARQL Update,即:
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX ex: <http://example.org/example#>
DELETE {
?entity rdfs:label ?oldlabel .
}
INSERT{
?entity rdfs:label ?label .
}
WHERE
{
?entity a ex:something .
?entity rdfs:label ?oldlabel .
BIND(CONCAT(STR( ?oldlabel ), " | SOME ADDITIONAL TEXT I WOULD LIKE TO APPEND MANUALLY") AS ?label ) .
}
Run Code Online (Sandbox Code Playgroud)
请注意,三元模式是如何找到?oldlabel的匹配项并将其删除的,而是插入新绑定的?label。该查询假定定义了一个默认图,该图既包含原始数据又包含更新目标。如果不是,则需要使用WITH或GRAPH指定图形。(还暗示了使用“。”和“;”分隔三重模式之间的语法差异。)