本文介绍了动态生成urn/iri/uri的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要根据时间动态生成图形的名称。我很难接受一些人的想法

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函数,以确保在将字符串转换为IRI之前对字符串中的任何特殊字符进行了正确的编码/转义。

这篇关于动态生成urn/iri/uri的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-11 18:29