需要帮助了解输入文件中的SPARQL查询方式

时间:2015-04-18 03:51:07

标签: input sparql topbraid-composer

我正在使用SPARQL并且无法理解它实际上如何通过输入文件。例如,我有来自三个不同企业的三个相同产品的订单。在我的查询中,它适用于两个商家只有两次购买,但是当我添加第三个商品时,它几乎就像一个循环。它检查第一个业务的一个购买,第二个业务的两个,第三个的三个。我很困惑为什么它会像循环那样做什么?

大多数情况下,当您按下开始时,我无法理解SPARQL如何搜索输入文件。

查询示例如

SELECT ?price
WHERE{
      ?test    e:price    ?price;
               e:business ?business.

      ?test2   e:price    ?price2;
               e:business ?business2.
}

1 个答案:

答案 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

如果不确切知道 想要检索的内容,那么除了这些一般准则之外,它实际上不可能提供任何其他内容。