SPARQL查询传递不同版本的arq

时间:2012-01-21 17:09:29

标签: sparql semantic-web jena arq

基本上我下面有一个SPARQL查询,它与arq 2.8.8一起使用,但不能与arq2.8.4一起使用,因为它不识别+符号。我真的想要一个可以在arq 2.8.4版本上运行的查询,它类似于我发布的版本。我发布的查询基本上找到了彼此相同的所有项目。例如,如果a与b相同,并且b与c相同,则查询返回b的b和c。

PREFIX owl: <http://www.w3.org/2002/07/owl#> SELECT * WHERE { ?x owl:sameas+ ?y }

1 个答案:

答案 0 :(得分:3)

您使用的功能是SPARQL 1.1,早期版本的ARQ不支持此功能。编写与您的操作接近的查询的唯一方法是执行以下操作之一。

不同长度的联盟路径

PREFIX owl: <http://www.w3.org/2002/07/owl#>
SELECT *
WHERE
{
  { ?x owl:sameAs ?y }
  UNION
  { ?s owl:sameAs [ owl:sameAs ?y ] . }
  UNION
  { ?s owl:sameAs [ owl:sameAs [ owl:sameAs ?y ] ] . }
  # Repeat the above pattern up to whatever limit you want
}

使用客户端代码

发出如下初始查询:

PREFIX owl: <http://www.w3.org/2002/07/owl#> 
SELECT * WHERE { ?x owl:sameAs ?y }

列出?y值,然后为每个值发出一个表单查询:

PREFIX owl: <http://www.w3.org/2002/07/owl#> 
SELECT * WHERE { <constant> owl:sameAs ?y }

每次用<constant>替换列表中的一个值,然后将?y的新值添加到列表中。

这种方法唯一需要注意的是,您要跟踪已经发出第二个查询的值,以节省重复查询。