如何从INSERT Sparql请求中获取UUID()?

时间:2019-08-07 15:27:17

标签: sparql

我想知道是否有可能在SPARQL查询中使用INSERT语句时检索UUID()urn? 我的问题很简单,但是我不知道如何使用SPARQL解决它: 我想存储很多时间戳值。相同的时间戳可能会出现多次,所以我想我可以使用UUID()生成随机URI。 我需要urn:从UUID()函数关联新的三元组。 我是对的 ? 还是UUID()不是解决方案?

感谢您的帮助。

编辑:

好,所以我不得不说我想在我的python代码中检索数据。 我正在使用SPARQLWrapper运行我的请求。

如果我这样创建一个INSERT请求:

INSERT { 
    ?uuid1 rdf:type capt:ECHANTILLON .
    ?uuid1 capt:Nom ?uuid1 .
    ?uuid1 capt:Description '2019-08-07 16:07:34.027636' .
    ?uuid1 capt:Valeur '1565182189' .
} WHERE { 
    FILTER NOT EXISTS { ?uuid1 rdf:type capt:ECHANTILLON} .
    BIND (UUID() AS ?uuid1) . 
};

然后从第一个开始使用?uuid1进行另一个INSERT请求:

INSERT { 
    ?uuid2 rdf:type capt:VALEUR .
    ?uuid2 capt:Nom ?uuid2 .
    ?uuid2 capt:Description '2019-08-07 16:07:34.027659' .
    ?uuid2 capt:Valeur '27.0' .
    **?uuid1 capt:A_Pour_Valeur ?uuid2 .**  <===
} WHERE { 
    FILTER NOT EXISTS { ?uuid2 rdf:type capt:VALEUR} .
    BIND (UUID() AS ?uuid2) . 
};

我想要的是:

uuid1 = endpoint.setQuery(request_1)
request_2.addSubject(uuid1)
uuid2 = endpoint.setQuery(request_2)

类似的东西。

如果INSERT不返回该值,如何从第一个请求中检索?uuid1?如果可能的话,我想提出两个要求。 我是否要在一个请求中重新组合两个请求,还是在运行第二个请求之前运行SELECT?uuid1请求?

1 个答案:

答案 0 :(得分:1)

您不能直接从SPARQL更新中获取UUID的值-如果要以某种方式通过SPARQL检索UUID,则必须在插入后进行查询-或者,当然,您可以可以通过查询其WHERE子句中的“正确” UUID来适应您的第二个SPARQL更新来为您做选择。

但是,在这种情况下,这看起来很难做到,我认为对您来说最简单的解决方案是,您不在SPARQL操作本身中创建UUID,而是在代码中创建它,然后在您的代码中使用它查询字符串,例如通过添加VALUES子句,类似这样:

composer update