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

How to get UUID() from INSERT Sparql Request?

我想知道是否有可能检索 UUID() urn: 在 SPARQL 查询中使用 INSERT 语句时? 我的问题很简单,但我不知道如何使用 SPARQL 解决它: 我想存储很多时间戳值。相同的时间戳可以出现多次,所以我想我可以使用 UUID() 来生成随机 URI。 我需要 urn: from 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) . 
};

然后另一个 INSERT 请求使用第一个中的 ?uuid1 :

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 没有 return 这个值,我如何从第一个请求中检索 ?uuid1?如果可能的话,我想提出两个要求。 我是要在一个请求中重新组合两个请求,还是要 运行 一个 SELECT ?uuid1 请求在 运行 秒之前?

您无法直接从 SPARQL 更新中获取 UUID 的值 - 如果您想通过 SPARQL 以某种方式检索它,则必须在插入它之后进行查询 - 或者,当然,您可以调整您的第二个 SPARQL 更新,通过在其 WHERE 子句中查询 'correct' UUID 来为您进行选择。

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

  import uuid

  uuid1 = uuid.uuid1()
  update = """INSERT {  .... }
              WHERE { VALUES ?uuid1 { <urn:uuid:""" + uuid1 + """> }
                      FILTER NOT EXISTS .... (etc) }"""