2011-11-30 3 views
3

Я хочу выполнить обновление, чтобы удалить ссылку (предикат) между двумя узлами в моем магазине RDF. Ссылка двунаправленная (ски: более узкая, и ски: более широкая). Я хотел бы сделать уникальный запрос, чтобы обе ссылки были удалены в уникальной операции.Можно ли объединить эти 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 } 
    } 
} 

Это намного более многословен, как вы не можете использовать ДОПОЛНИТЕЛЬНО с DELETE WHERE, но он не должен быть значительно менее эффективным.

Примечание. Вы также можете отделить операции обновления SPARQL с помощью; и отправить их по одному запросу, что должно привести к тому же поведению.

+0

Тнакс за ответ! Я бы тоже принял его, но разрешен только один. Невозможно ответить, как новичок ... – blackbox