我有以下查询
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 ) .
}
我只是想用?label
连接一些文本,但是在运行查询时我收到以下错误:
BIND clause alias '?label' was previously used
我只想返回?label
的单个实例,因此,我在构造子句中定义了它。
答案 0 :(得分:5)
错误消息似乎准确无误,但这只是您使用此查询获得的许多内容中的第一个。通常要求查看一些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 ) .
}
这个查询有很多不同之处,所以看看它是否准确地做了你想要的。一个提示是使用'。'之间的语法差异。和';'分离三重模式。另一个是每个子句定义一个URL,在示例中使用qname,或者以'?'为前缀的变量。 “标签”或“某事”均无效。
我说“差不多”因为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 ) .
}
注意三重模式如何找到?oldlabel的匹配并删除它们,而是插入新绑定的?标签。此查询假定定义了一个默认图表,其中包含原始数据和更新目标。如果不是,则需要使用WITH或GRAPH指定图形。 (还包括使用'。'和';'分隔三重模式之间的句法差异的另一个提示。)