2016-03-22 36 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指定圖形。 (還包括使用'。'和';'來區分三重模式的語法差異的另一個提示。)