这不是 SPARQL 独有的。如果你用 SQL 编写,你会得到同样的东西。您的查询要求模式的每个匹配实例的变量price的值。假设您有三个人和他们的年龄:
:tom :age 31 .
:dick :age 32 .
:harry :age 34 .
如果你问“选择一个人和一个人,然后给我第一个的年龄”,那么,有九种方法可以选择两个人(因为你可以选择同一个人两次),这意味着你会有九个答案。例如,如果您运行如下查询:
select ?p1 ?p2 ?age {
?p1 :age ?age
?p2 :age ?age2
}
p1 p2 age
-----------------
tom tom 31
tom dick 31
tom harry 31
dick tom 32
dick dick 32
dick harry 32
harry tom 34
harry dick 34
harry harry 34
目前还不清楚您要检索什么,但如果您想确保两个实例不同,您可以添加一个过滤器:
select ?p1 ?p2 ?age {
?p1 :age ?age
?p2 :age ?age2
filter( ?p1 != ?p2 )
}
p1 p2 age
-----------------
tom dick 31
tom harry 31
dick tom 32
dick harry 32
harry tom 34
harry dick 34
您还可以添加一个过滤器来对条款进行排序,在这种情况下,您可以进一步限制您获得的配对数量(每两个人只有一个):
select ?p1 ?p2 ?age {
?p1 :age ?age
?p2 :age ?age2
filter( ?p1 < ?p2 )
}
p1 p2 age
-----------------
dick tom 32
dick harry 32
harry tom 34
在不确切知道您要检索的内容的情况下,除了这些一般准则之外,实际上不可能为您提供任何其他内容。