8

我的问题类似于在这个线程上提出的问题是否可以将这 2 个 SPARQL INSERT 合并为一个?

我想在查询中有多个 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 中是否有类似的东西。

4

2 回答 2

9

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

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 更新序列。

于 2012-04-10T07:29:56.003 回答
2

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

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

PREFIX Sensor: <http://example.com/Equipment.owl#> 
INSERT { 
    ?subject Sensor:test2 ?newValue 
}
WHERE {
    values (?oldValue ?newValue) { 
        ('testValue1' 'newValue1')
        ('testValue2' 'newValue2')
    }
    ?subject Sensor:test1 ?oldValue
}
于 2016-05-24T15:27:15.883 回答