Sparql 动态生成urn/iri/uri
我需要根据时间动态生成图的名称。 有些人认为我很坚强Sparql 动态生成urn/iri/uri,sparql,Sparql,我需要根据时间动态生成图的名称。 有些人认为我很坚强 select ?g where { bind(concat("<urn:myNewGraph_",str(now()),">") as ?g) } 我得到urn:myNewGraph\u 2015-05-28009:37:11.823Z 有什么想法吗 此外,我不确定,即使我能以某种方式得到一个字符串,比如,是否可以作为一个图名的有效参数,从这个不起作用的测试中可以看出: INSERT {graph ?g {<ur
select ?g where {
bind(concat("<urn:myNewGraph_",str(now()),">") as ?g)
}
我得到urn:myNewGraph\u 2015-05-28009:37:11.823Z
有什么想法吗
此外,我不确定,即使我能以某种方式得到一个字符串,比如
,是否可以作为一个图名的有效参数,从这个不起作用的测试中可以看出:
INSERT {graph ?g {<urn:s> <urn:p> <urn:o>}
where {
?g="<rn:myNewGraph_2015-05-28T09:37:11.823Z>"
}
INSERT{graph?g{}
何处{
?g=“”
}
有没有合适的方法动态生成urn/iri/uri?当我使用不同的SPARQL引擎(Sesame)执行查询时,您的原始查询看起来是正确的,并生成有效的结果,因此我猜您可能希望将此作为一个可能的错误报告给Stardog开发人员 然而,为了能够使用这样获得的值,它需要是一个实际的URI(或IRI)——而您正在生成的是一个文本字符串 您需要更改两件事:首先,去掉封闭的
(这些括号实际上不是IRI的一部分)-因此实际上您的第二个查询更好。其次,使用IRI
函数将字符串值转换为IRI:
INSERT {GRAPH ?g {<urn:s> <urn:p> <urn:o>} }
WHERE {
BIND( IRI(CONCAT("urn:myNewGraph_",STR(NOW()))) as ?g)
}
INSERT{GRAPH?g{}
何处{
绑定(IRI(CONCAT(“urn:myNewGraph”,STR(NOW()))为?g)
}
不确定在您的情况下是否有必要,但一般来说,您可能需要在其中的某个位置使用
ENCODE\u FOR\u URI
函数,以确保字符串中的任何特殊字符在转换为IRI之前都已正确编码/转义。可能是stardog的问题,因为您的解决方案会出现以下错误:Graph\ustr”(NOW())as?g))}应为“”,得到了“as”
,这可能是由于我错误地关闭括号造成的。我想我现在已经修复了它。
INSERT {GRAPH ?g {<urn:s> <urn:p> <urn:o>} }
WHERE {
BIND( IRI(CONCAT("urn:myNewGraph_",STR(NOW()))) as ?g)
}