动态生成 urn/iri/uri
generate an urn/iri/uri dynamically
我需要根据时间动态生成图表的名称。
我很难相信有人会这样想
select ?g where {
bind(concat("<urn:myNewGraph_",str(now()),">") as ?g)
}
本来可以解决这个问题,但是对于 Stardog,我得到了一个空结果。
如果我 运行 这个
select ?g where {
bind(concat("urn:myNewGraph_",str(now())) as ?g)
}
我得到 urn:myNewGraph_2015-05-28T09:37:11.823Z
有什么想法吗?
此外,我不确定即使我能以某种方式得到像 <urn:myNewGraph_2015-05-28T09:37:11.823Z>
这样的字符串是否可以作为图形名称的有效参数,从这个不起作用的测试中可以看出:
INSERT {graph ?g {<urn:s> <urn:p> <urn:o>}
where {
?g="<rn:myNewGraph_2015-05-28T09:37:11.823Z>"
}
是否有正确的方法来动态生成 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)
}
不确定你的情况是否有必要,但通常你可能需要在某处使用 ENCODE_FOR_URI
函数,以确保你的字符串中的任何特殊字符在 encoded/escaped 之前正确把它变成一个 IRI。
我需要根据时间动态生成图表的名称。 我很难相信有人会这样想
select ?g where {
bind(concat("<urn:myNewGraph_",str(now()),">") as ?g)
}
本来可以解决这个问题,但是对于 Stardog,我得到了一个空结果。
如果我 运行 这个
select ?g where {
bind(concat("urn:myNewGraph_",str(now())) as ?g)
}
我得到 urn:myNewGraph_2015-05-28T09:37:11.823Z
有什么想法吗?
此外,我不确定即使我能以某种方式得到像 <urn:myNewGraph_2015-05-28T09:37:11.823Z>
这样的字符串是否可以作为图形名称的有效参数,从这个不起作用的测试中可以看出:
INSERT {graph ?g {<urn:s> <urn:p> <urn:o>}
where {
?g="<rn:myNewGraph_2015-05-28T09:37:11.823Z>"
}
是否有正确的方法来动态生成 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)
}
不确定你的情况是否有必要,但通常你可能需要在某处使用 ENCODE_FOR_URI
函数,以确保你的字符串中的任何特殊字符在 encoded/escaped 之前正确把它变成一个 IRI。