2011-11-30 116 views
3

我想執行更新以刪除RDF Store中兩個節點之間的鏈接(謂詞)。鏈接是雙向的(skos:更窄,skos:更寬)。我想做一個獨特的查詢,以確保在一個獨特的操作中刪除這兩個鏈接。是否可以將這2個SPARQL更新查詢合併爲一個?

目前,我正在使用的2個查詢(包括短期和parentTerm將與特定的URI在執行時的約束?):

PREFIX skos:<http://www.w3.org/2004/02/skos/core#> 
    PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>  
    DELETE 
    WHERE{ 
    GRAPH ?graph { 
     ?term skos:broader ?parentTerm 
    } 
    } 

    PREFIX skos:<http://www.w3.org/2004/02/skos/core#> 
    PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>  
    DELETE 
    WHERE{ 
    GRAPH ?graph { 
     ?parentTerm skos:narrower ?term 
    } 
    } 

有沒有一種方法,使一個獨特的查詢,不會改變謂詞之間可能存在的其他鏈接(又名:謂詞)?

我累了用了;將查詢分開,並將其作爲單個命令發送到芝麻存儲區(正如您在SQL中所做的那樣),但它不起作用。

回答

4

你既可以三重圖案合併爲一個單一的查詢:

PREFIX skos:<http://www.w3.org/2004/02/skos/core#> 
PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>  
DELETE 
WHERE{ 
    GRAPH ?graph { 
    ?term skos:broader ?parentTerm . 
    ?parentTerm skos:narrower ?term . 
    } 
} 

注意,如果兩者同時存在,這隻會刪除這些,但它聽起來就像是在你的數據的情況下。

+0

感謝您的建議。有沒有辦法在只存在時刪除? – blackbox

7

無法寫這爲以前的答案黯然評論...

你可以寫

PREFIX skos: <http://www.w3.org/2004/02/skos/core#> 
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>  
DELETE { 
    GRAPH ?graph { 
    ?term skos:broader ?parentTerm . 
    ?parentTerm skos:narrower ?term . 
    } 
}  
WHERE { 
    GRAPH ?graph { 
    OPTIONAL { ?term skos:broader ?parentTerm } 
    OPTIONAL { ?parentTerm skos:narrower ?term } 
    } 
} 

這是一個很多更詳細的,你不能使用可選的刪去,但它不應該效率顯着降低。

請注意,您還可以將SPARQL更新操作與a;並將它們發送到一個請求中,這會讓您獲得相同的行爲。

+0

Tnaks的答案!我也會接受它,但只有一個被授權..作爲一個新手,不能提供答案... – blackbox

相關問題