我的问题类似于此帖子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中是否有类似的东西。
答案 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
}