单个请求中的多个SPARQL“INSERT WHERE”查询

时间:2012-04-09 19:55:45

标签: rdf sparql

我的问题类似于此帖子Is it possible to combine those 2 SPARQL INSERT into one?

上提出的问题

我想在查询中有多个INSERT WHERE语句,但是对于不同的主题。 我想测试一个特定的值(“testValueN”),如果存在,则希望为该主题插入一个新的三元组。

它的一个例子是,

PREFIX Sensor: <http://example.com/Equipment.owl#> 
{
    INSERT { 
        ?subject1 Sensor:test2 'newValue1' . 
           }
    WHERE {
        ?subject1 Sensor:test1  'testValue1' . 
          }
};
{
    INSERT { 
        ?subject2 Sensor:test2 'newValue2' . 
           }
    WHERE {
        ?subject2 Sensor:test1  'testValue2' . 
          }
};

我知道上面的查询是错误的。我想知道SPARQL中是否有类似的东西。

2 个答案:

答案 0 :(得分:8)

是的,这是可能的。事实上,你的例子几乎完全没问题,只是丢失了每个插入的括号:

PREFIX Sensor: <http://example.com/Equipment.owl#> 
INSERT { 
    ?subject1 Sensor:test2 'newValue1' . 
}
WHERE {
    ?subject1 Sensor:test1  'testValue1' . 
};
INSERT { 
   ?subject2 Sensor:test2 'newValue2' . 
}
WHERE {
   ?subject2 Sensor:test1  'testValue2' . 
}

是有效的SPARQL更新序列。

答案 1 :(得分:1)

  

我想在查询中有多个INSERT WHERE语句,但是对于不同的主题。我想测试一个特定的值(“testValueN”),如果存在,则希望为该主题插入一个新的三元组。

您可以使用指定所需的oldValue / newValue对,并且只需要一个插入。它还可以更好地扩展到新对,因为您只需要在查询中添加一行。

PREFIX Sensor: <http://example.com/Equipment.owl#> 
INSERT { 
    ?subject Sensor:test2 ?newValue 
}
WHERE {
    values (?oldValue ?newValue) { 
        ('testValue1' 'newValue1')
        ('testValue2' 'newValue2')
    }
    ?subject Sensor:test1 ?oldValue
}