Sparql 删除/插入操作可用于删除包含空白节点的三元组:如何?

Sparql 删除/插入操作可用于删除包含空白节点的三元组:如何?,sparql,rdf,jena,fuseki,blank-nodes,Sparql,Rdf,Jena,Fuseki,Blank Nodes,我想使用SPARQL来确保在重复更新?performance和某些连接的空白节点之后,它们没有多个属性值,只有零(对于可选情况)或一个(对于强制情况) 如果我将删除/插入(见下文)发送到Jena Fuseki 1.1.1服务器,我会收到以下错误消息:“删除模板中不允许使用空白节点” 但是,该规范包含这样一句话:“删除/插入操作可用于删除包含空白节点的三元组。” 那么,在这种情况下,执行删除/插入操作的有效形式是什么?为了便于维护,如果删除和插入零件在结构上保持相似,这将是一件好事。(这是一个问题

我想使用SPARQL来确保在重复更新
?performance
和某些连接的空白节点之后,它们没有多个属性值,只有零(对于可选情况)或一个(对于强制情况)

如果我将删除/插入(见下文)发送到Jena Fuseki 1.1.1服务器,我会收到以下错误消息:“删除模板中不允许使用空白节点”

但是,该规范包含这样一句话:“删除/插入操作可用于删除包含空白节点的三元组。”

那么,在这种情况下,执行删除/插入操作的有效形式是什么?为了便于维护,如果删除和插入零件在结构上保持相似,这将是一件好事。(这是一个问题。)


在WHERE部分你需要一些东西。这将找到bNode,将它们放入变量中,然后使用DELETE删除它们。DELETE{}本身不是要匹配的模式-图形模式是WHERE{}部分

比如:

DELETE{
     ?performance
         mo:performance_of ?X .
     ?X dc:title ?title ;
         mo:composed_in ?Y .
     ?Y a mo:Composition .
     ?Y mo:composer ?composer .
     ?performance  mo:performer ?performer ;
                   mo:singer   ?singer
}
WHERE {
    ?performance
         mo:performance_of ?X .
     ?X dc:title ?title ;
         mo:composed_in ?Y .
     ?Y a mo:Composition .
     OPTIONAL { ?Y mo:composer ?composer }
     OPTIONAL { 
           ?performance  mo:performer ?performer ;
                         mo:singer    ?singer 
     }
}
让DELETE{}和INSERT{}保持一致是没有意义的——这实际上是一个禁止操作

如果bout中的一个变量绑定在WHERE{}部分的特定行中,那么删除操作将跳过该三元组,而不是实例化模板的其余部分

对人类来说,将SPARQL更新分为几个部分编写可能更为清晰。一个HTTP请求可以有多个操作,以“;”分隔:


现在我猜问题是由规范中的这句话引起的:“图形模式中的空白节点充当变量,而不是作为对所查询数据中特定空白节点的引用。”将它们称为
\:b1
\:b2
\:b3
也会触发错误…Thx!我知道这是如何处理删除步骤的。想要使用缩写的
[…]
语法让我走上了一条错误的死胡同,节点是空的。我现在还可以看到SPARQL DELETE/INSERT如何不适用于这里。我还不知道如何避免在(现在分开的)
DELETE{}WHERE{}
INSERT{}
步骤中重复“几乎”一字不差的语句。它们是相同的,只是
DELETE{},其中{}
使用变量(例如
?X
),而
INSERT{}
使用空白节点(例如
:X
)(至少在我现在使用的新SPARQL更新中是这样),INSERT插入新的空白节点。可以使用delete WHERE处理逐字删除,但使用可选的。“几乎一样”不是“一样”。
DELETE{
     ?performance
         mo:performance_of ?X .
     ?X dc:title ?title ;
         mo:composed_in ?Y .
     ?Y a mo:Composition .
     ?Y mo:composer ?composer .
     ?performance  mo:performer ?performer ;
                   mo:singer   ?singer
}
WHERE {
    ?performance
         mo:performance_of ?X .
     ?X dc:title ?title ;
         mo:composed_in ?Y .
     ?Y a mo:Composition .
     OPTIONAL { ?Y mo:composer ?composer }
     OPTIONAL { 
           ?performance  mo:performer ?performer ;
                         mo:singer    ?singer 
     }
}
DELETE{} WHERE {} ;
DELETE{} WHERE {} ;
INSERT DATA{}