我正在使用SPARQL并且无法理解它实际上如何通过输入文件。例如,我有来自三个不同企业的三个相同产品的订单。在我的查询中,它适用于两个商家只有两次购买,但是当我添加第三个商品时,它几乎就像一个循环。它检查第一个业务的一个购买,第二个业务的两个,第三个的三个。我很困惑为什么它会像循环那样做什么?
大多数情况下,当您按下开始时,我无法理解SPARQL如何搜索输入文件。
查询示例如
SELECT ?price
WHERE{
?test e:price ?price;
e:business ?business.
?test2 e:price ?price2;
e:business ?business2.
}
答案 0 :(得分:1)
这不是SPARQL独有的任何内容。如果你是用SQL编写的,那么你就会得到同样的东西。您的查询会询问模式的每个匹配实例的变量 price 的值。想象一下,你有三个人和他们的年龄:
:tom :age 31 .
:dick :age 32 .
:harry :age 34 .
如果你问"选择一个人和一个人,并给我第一个年龄#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
如果不确切知道 想要检索的内容,那么除了这些一般准则之外,它实际上不可能提供任何其他内容。