使用Virtuoso和SPARQL中的URI将URI添加到变量

时间:2014-11-03 20:42:14

标签: rdf sparql virtuoso

我想将新的uri(作为字符串)添加到使用sparql Virtuoso 7.1已经拥有一些uris的变量中。这是我的sparql。

SELECT ?newURIs WHERE {
 ?newURIs rdf:type res:myClass .
 BIND(URI("http://www.mypage.com/property#myProperty") AS ?newURIs) .
}

当我得到它时,它应该添加到" ..."中的uri列表,但它没有。 响应是" Virtuoso 37000错误SP031:SPARQL编译器:内部错误:内置函数未实现"

我试过了:

BIND(IRI("...") AS ?newURIs)

然后我从第一行(来自myClass的项目)获得结果但是我的新uri不在那里...... 同样的情况:

BIND("..." AS ?newURIs)

和:

BIND(<...> AS ?newURIs)

我做错了什么?如何在字符串中添加新的URI到变量中的uris列表?

日Thnx

1 个答案:

答案 0 :(得分:3)

首先,您的查询在SPARQL中实际上是非法的,您不能使用BIND分配给已经在范围内的变量,因此您的查询应该作为非法SPARQL被拒绝。这可能是Virtuoso正在做的事情虽然你得到的错误消息显然是无益的

您实际上要做的事情有点不清楚,从您的描述中可以看出,您想要使用?newURIs选择可能的值,在这种情况下,VALUES clause将是适当的方法,例如

SELECT *
WHERE
{
  VALUES ?newURIs
  {
     <http://www.mypage.com/property#myProperty>
     # Other values go here
  }
  ?newURIs rdf:type res:myClass .
}

但是请注意,这只会找到三重模式的匹配项,其中?newURIs的值具有VALUES子句中给出的值之一,这可能实际上并不是您想要的值。