Sparql 在构造查询中使用bind concat

Sparql 在构造查询中使用bind concat,sparql,Sparql,我有以下疑问 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 ) . } 我只想将一些文本与?标签连接起来,但是在运行查询时,

我有以下疑问

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 ) .
}
我只想将一些文本与
?标签
连接起来,但是在运行查询时,出现以下错误:

BIND clause alias '?label' was previously used

我只想返回
?label
的一个实例,因此,我在construct子句中对其进行了定义。

错误消息似乎是准确的,但这只是通过此查询得到的众多错误消息中的第一个。通常要求查看一些SPARQL学习资源,以至少了解基于三元组的图模式匹配的基础知识,并提供一些提示。构造是一个不错的起点,下面的内容几乎可以满足您的需求:

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 ) .
}
前缀rdfs:
构造{
?实体RDF:标签?标签。
} 
哪里
{
?实体a,例如:某物;
标签?旧标签。
绑定(CONCAT(STR(?oldlabel),“|一些我想手动附加的额外文本”)为?标签)。
}
这个查询有很多不同之处,所以看看它是否准确地满足了您的需求。一个提示是使用“.”和“;”之间的语法差异分离三重模式。另一个是,每个子句定义一个URL(在示例中使用qname)或一个变量(前缀为“?”)。“标签”或“某物”均无效

我之所以说“几乎”,是因为构造只返回一组三元组。要修改标签(我认为这是目的),您需要使用SPARQL更新,即:

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 ) .
}
前缀rdfs:
前缀ex:
删除{
?实体RDF:标签?旧标签。
}
插入{
?实体RDF:标签?标签。
} 
哪里
{
实体a例如:某物。
?实体RDF:标签?旧标签。
绑定(CONCAT(STR(?oldlabel),“|一些我想手动附加的额外文本”)为?标签)。
}
请注意,三元组模式如何查找?oldlabel的匹配项并将其删除,而是插入新绑定的?标签。此查询假设定义了一个默认图,其中包含原始数据和更新目标。如果不是,则需要使用WITH或graph指定图形。(还包括关于使用“.”和“;”分隔三重模式的语法差异的另一个提示。)