将SPARQL变量设置为基于另一个变量

时间:2017-08-22 18:01:57

标签: sparql

我正在尝试在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}}

1 个答案:

答案 0 :(得分:4)

BIND (UUID() AS ?var)子句中的

WHERE

UUID在执行期间为每个调用生成一个新的唯一UUID。

在查询示例中,您还可以使用空白节点。

INSERT { ?subject :h [ a :type1 ]. } WHERE 每次实例化模板时都会有一个新的空白节点,即WHERE子句中的每一行。

还有BNODE()执行相同的操作 - 调用每个解决方案行的新空白节点。

WHERE还可以包括子SELECT,包括赋值。