我正在尝试在SPARQL中做一些我怀疑可能无法做到的事情,但我还是想请社区看看。
假设一个迷你数据库只填充了以下RDF三元组:
:a :b :c
:d :b :e
:f :b :g
对数据库运行SPARQL INSERT
语句:
INSERT {
?subject :h ?var .
?var a :type1 .
}
WHERE {
?subject :b ?object .
}
此INSERT
语句无效,因为变量?var
未绑定。我正在寻找一种方法来将此变量的值设置为变量?subject
的每个值的不同值,理想情况下为UUID
。
我希望我的INSERT
语句将这样的三元组添加到数据库中:
:a :h :123abc
:123abc a type1
:d :h :456cde
:456cde a type1
:f :h :789def
:789def :a type1
一些额外的想法:
?var
的值必须为每个图形模式保持绑定,其唯一值为?subject
,因为要插入多个需要使用相同值的三元组(在这种情况下,设置类型为type1
以及与?subject
的关系)BIND
块中的WHERE
子句可能不起作用,因为这将为?var
创建一个静态值,该值适用于整个图形模式,无论{的值如何{1}} 答案 0 :(得分:4)
BIND (UUID() AS ?var)
子句中的 WHERE
。
UUID
在执行期间为每个调用生成一个新的唯一UUID。
在查询示例中,您还可以使用空白节点。
INSERT {
?subject :h [ a :type1 ].
} WHERE
每次实例化模板时都会有一个新的空白节点,即WHERE子句中的每一行。
还有BNODE()
执行相同的操作 - 调用每个解决方案行的新空白节点。
WHERE
还可以包括子SELECT,包括赋值。