3

RDF ストア内の 2 つのノード間のリンク (述語) を削除する更新を実行したいと考えています。リンクは双方向です (skos:narrower および skos:broader)。一意の操作で両方のリンクが確実に削除されるように、一意のクエリを作成したいと思います。

現在、これら 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で時々行うように)、機能しませんでした.

4

2 に答える 2

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 で OPTIONAL を使用できないため、はるかに冗長ですが、大幅に効率が低下することはありません。

SPARQL Update 操作を ; で区切ることもできることに注意してください。それらを単一のリクエストで送信すると、同じ動作が得られます。

于 2011-11-30T11:38:09.327 に答える
4

両方のトリプル パターンを 1 つのクエリに組み合わせることができます。

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

これは両方が存在する場合にのみこれらを削除することに注意してください。

于 2011-11-30T08:29:44.670 に答える