4

我有一个看起来有点像的数据集:

<item1> <isLocated> <someAddress>
<item2> <isLocated> <someAddress>
<item3> <isLocated> <someOtherAddress>

我希望能够使用 SPARQL 来回答这个问题:

“我会在 someAddress 或 someOtherAddress 找到哪些项目?”

我可以使用这样的 UNION:

SELECT ?item
{
    { ?item <isLocated> <someAddress> }
    UNION { ?item <isLocated> <someOtherAddress }
} 

但我认为当我开始谈论 100 或 1000 个地址时,这将变得相当混乱。

我认为 VALUES 内联数据可能比一堆 UNION 查询更合适。我尝试编写以下查询,但我的 RDF 存储/引擎(大数据)似乎卡住了它:

SELECT ?item
{
    ?item <isLocated> ?loc .
}
VALUES (?loc) { (<someAddress>) (<someOtherAddress>) }

(基于http://www.w3.org/TR/sparql11-query/#inline-data

我从 bigdata 得到的错误是:第 5 行第 7 列的词法错误。遇到:“”(32),之后:“VALUES”

我是否正确地形成了这个查询?使用 UNION 或 VALUES 更合适吗?

似乎无论我如何格式化这个查询(基于上面链接中的 w3 示例),我都会得到类似的词法错误。

有任何想法吗?

干杯。

4

2 回答 2

5

猜测一下,我会说 Bigdata 还不支持该VALUES子句。这是最新的 SPARQL 工作草案(几周前发布)中引入的全新功能,因此很自然有几个工具还不支持它。

您可以尝试BINDINGS改用(这与以前的工作草案中的功能大致相同,已被替换)。

于 2012-09-20T07:52:29.677 回答
3

你把语法弄混了一点。要么使用:

VALUES ?loc { <someAddress> <someOtherAddress> }

这是单个变量的特殊形式,或者:

VALUES (?loc) { ( <someAddress> ) ( <someOtherAddress> ) }

一般形式。

你也可以试试IN

FILTER (?loc IN ( val1, val2, ...))
于 2012-09-20T07:51:14.787 回答