2016-03-22 41 views
1

我有以下查询使用绑定CONCAT

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的单个实例,因此,我在构造子句中定义了它。

回答

4

该错误消息似乎是准确的,但只是许多你会用这个查询得到的第一个。通常的请求是查看一些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) . 
} 

有关于查询不同的不少东西,所以来看看,看看它是否准确地做什么你要。一个提示是使用'。'之间的语法区别。和';'分开三重模式。另一个是每个子句都定义一个URL,在示例中使用qname或者一个变量,前缀为'?'。 'label'或'something'都不是有效的。因为CONSTRUCT只返回一组三元组。要修改标签,我认为这是意图,你需要使用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) . 
} 

注意三重模式如何找到比赛呢?oldlabel并将其删除,插入新的约束?标签来代替。此查询假定定义了一个默认图,该图保存原始数据和更新目标。如果不是,则需要使用WITH或GRAPH指定图形。 (还包括使用'。'和';'来区分三重模式的语法差异的另一个提示。)