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

如何从INSERT Sparql请求中获取UUID()?,sparql,Sparql,我想知道在SPARQL查询中使用INSERT语句时是否有可能检索UUID()urn:? 我的问题很简单,但我不知道如何使用SPARQL解决它: 我想存储很多时间戳值。同一时间戳可以出现多次,所以我想我可以使用UUID()生成随机URI。 我需要urn:from UUID()函数来关联我的新三元组。 我是对的? 或者UUID()不是解决方案 谢谢你的帮助 编辑: 好的,我必须说我想在python代码中检索数据。 我正在使用SPARQLWrapper运行我的请求 如果我创建一个这样的插入请求: IN

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

谢谢你的帮助

编辑:

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

如果我创建一个这样的插入请求:

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 { 
    ?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) . 
};
差不多吧

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

您不能直接从SPARQL更新中获取UUID的值-如果您想通过SPARQL检索它,您必须在插入它之后执行查询-或者,当然,通过在WHERE子句中查询“正确的”UUID,您可以调整第二次SPARQL更新来为您进行选择

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

导入uuid
uuid1=uuid.uuid1()
更新=“插入{….}”
其中{值?uuid1{}
筛选器不存在…(等)}“”

为什么不在查询中使用UUID?试一试有什么不对?事实上,你的问题太宽泛、太模糊,无法回答。看看如何写一个好问题的技巧。特别是:具体点,展示你迄今为止的尝试,以及你到底在哪里。是的,我确认。我找到了python uuid.uuid4()函数来生成要在SPARQL请求中发送的uuid。谢谢你的回答。一个小问题,uuid是存储具有相同“值”的个人的良好实践吗?@A.Dumas是的,快速创建新的“随机”唯一标识符是一种行之有效的方法。@JeenBroekstra(抱歉,后续问题):SPARQL中的uuid()函数生成的URI是否保证是存储库中的新URI(即尚未使用)? 规范中说“从UUID URN方案返回一个新的IRI。每次调用UUID()都会返回一个不同的UUID。这是否意味着唯一性?是的,它们是唯一的。
uuid1 = endpoint.setQuery(request_1)
request_2.addSubject(uuid1)
uuid2 = endpoint.setQuery(request_2)