DELETE/INSERT 操作可用于删除包含空白节点的三元组:如何?
The DELETE/INSERT operation can be used to remove triples containing blank nodes: how?
我想使用 SPARQL DELETE/INSERT 来确保在重复更新后 ?performance
和某些连接的空白节点没有多个属性值,但只有零(对于可选情况)或一个(对于强制性案例)。
如果我将 DELETE/INSERT(见下文)发送到 Jena Fuseki 1.1.1 服务器,我会收到此错误消息:"Blank nodes not allowed in DELETE templates".
但是,规范中包含这句话:"The DELETE/INSERT operation can be used to remove triples containing blank nodes."
那么在这种情况下,DELETE/INSERT 的有效形式是什么?为了便于维护,如果 DELETE 和 INSERT 部分在结构上保持相似就好了。 (这是一个 问题。)
DELETE {
?performance
mo:performer ?_ ;
mo:singer ?_ ;
mo:performance_of [ ### error marked here ###
dc:title ?_ ;
mo:composed_in [ a mo:Composition ;
mo:composer ?_
]
]
}
INSERT {
?performance
mo:performer ?performer ; # optional
mo:singer ?singer ; # optional
mo:performance_of [
dc:title ?title ; # mandatory
mo:composed_in [ a mo:Composition ;
mo:composer ?composer # optional
]
]
}
WHERE {}
您需要在 WHERE 部分添加一些内容。这将找到 bnodes,将它们放入变量中,然后使用 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{} 相同是没有意义的 - 它实际上是空操作。
如果某个变量绑定在 WHERE{} 部分的特定行中,删除操作只会跳过该三元组,而不是实例化模板的其余部分。
对于人类来说,将 SPARQL 更新分成几个部分可能会更清楚。一个HTTP请求可以有多个操作,以“;”分隔:
DELETE{} WHERE {} ;
DELETE{} WHERE {} ;
INSERT DATA{}
我想使用 SPARQL DELETE/INSERT 来确保在重复更新后 ?performance
和某些连接的空白节点没有多个属性值,但只有零(对于可选情况)或一个(对于强制性案例)。
如果我将 DELETE/INSERT(见下文)发送到 Jena Fuseki 1.1.1 服务器,我会收到此错误消息:"Blank nodes not allowed in DELETE templates".
但是,规范中包含这句话:"The DELETE/INSERT operation can be used to remove triples containing blank nodes."
那么在这种情况下,DELETE/INSERT 的有效形式是什么?为了便于维护,如果 DELETE 和 INSERT 部分在结构上保持相似就好了。 (这是一个
DELETE {
?performance
mo:performer ?_ ;
mo:singer ?_ ;
mo:performance_of [ ### error marked here ###
dc:title ?_ ;
mo:composed_in [ a mo:Composition ;
mo:composer ?_
]
]
}
INSERT {
?performance
mo:performer ?performer ; # optional
mo:singer ?singer ; # optional
mo:performance_of [
dc:title ?title ; # mandatory
mo:composed_in [ a mo:Composition ;
mo:composer ?composer # optional
]
]
}
WHERE {}
您需要在 WHERE 部分添加一些内容。这将找到 bnodes,将它们放入变量中,然后使用 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{} 相同是没有意义的 - 它实际上是空操作。
如果某个变量绑定在 WHERE{} 部分的特定行中,删除操作只会跳过该三元组,而不是实例化模板的其余部分。
对于人类来说,将 SPARQL 更新分成几个部分可能会更清楚。一个HTTP请求可以有多个操作,以“;”分隔:
DELETE{} WHERE {} ;
DELETE{} WHERE {} ;
INSERT DATA{}