基本上,我在下面得到了一个SPARQL查询,它可以与arq 2.8.8一起使用,但不能与arq2.8.4一起使用,因为它不能识别+符号。我真的想要一个可以在arq2.8.4版本上运行的查询,它与我发布的版本类似。我发布的查询基本上可以找到彼此相同的所有项目。例如,如果a与b相同,b与c相同,则查询会为a返回b和c。
PREFIX owl: <http://www.w3.org/2002/07/owl#> SELECT * WHERE { ?x owl:sameas+ ?y }
您使用的功能是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
的新值添加到列表中。
使用这种方法唯一需要注意的是,要跟踪已经发出第二个查询的值,以避免重复查询。