Можно ли объединить эти 2 запроса на обновление SPARQL в один? - PullRequest
3 голосов
/ 30 ноября 2011

Я хочу выполнить обновление, чтобы удалить ссылку (предикат) между двумя узлами в моем RDF Store. Ссылка двунаправленная (skos: более узкая и skos: более широкая). Я хотел бы сделать уникальный запрос, чтобы обе ссылки были удалены в уникальной операции.

В настоящее время я использую эти 2 запроса (и? Term, и? 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), но это не сработало.

Ответы [ 2 ]

7 голосов
/ 30 ноября 2011

Не могу написать это как комментарий к предыдущему ответу, к сожалению ...

Вы можете написать

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 }
  }
}

Это намного более многословно, поскольку вы не можете использовать OPTIONAL с DELETE WHERE, но это не должно быть значительно менее эффективным.

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

4 голосов
/ 30 ноября 2011

Вы можете объединить оба тройных шаблона в один запрос:

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 .
  }
}

Обратите внимание, что это удалит их только там, где существуют оба, но похоже, что это так в ваших данных.

...