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)
}