1

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

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

查询示例如下

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

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

1 回答 1

1

这不是 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

在不确切知道您检索的内容的情况下,除了这些一般准则之外,实际上不可能为您提供任何其他内容。

于 2015-04-19T01:48:30.833 回答