我想知道这两个查询是否产生相同的输出。 让我们想象一下,我收集了两个RDF命名图表,前缀是商店: 我想写一个SPARQL查询,找出哪些客户更喜欢哪一餐,输出应该是人类可读的
A)
PREFIX shop: <"http://example.org/shop">
SELECT ?customerName ?mealName
FROM <Customers.rdf>
FROM <Meals.rdf>
WHERE
{
?customer shop:prefersMeal ?meal .
?meal shop:mealName ?mealName .
?customer shop:customerName ?customerName
}
b)中
PREFIX shop: <"http://example.org/shop">
SELECT ?customerName ?mealName
FROM <Customers.rdf>
FROM <Meals.rdf>
WHERE
{
?x shop:prefersMeal ?meal .
?y shop:mealName ?mealName .
?z shop:customerName ?customerName
}
我试图找出差异,但是当你没有任何地方可以练习时,它看起来很复杂。
答案 0 :(得分:4)
这两个查询并不相同。
在第一个查询中,您将在第二个和第三个三重模式中重复使用第一个三重模式中的变量?meal
和?customer
。在这个查询中,您说:“给我一个喜欢吃饭的顾客,同一餐必须有一个名字,同一个顾客必须有一个名字。”
在第二个查询中,您在第二个和第三个子句中使用了新变量?y
和?z
。这个问题的含义是:“给我一个喜欢吃饭的顾客,给我一些饭菜的名字,并给我一些顾客的名字”。你没有强制说出你的名字检索是针对同一客户/餐,因此您将获得随机的客户/餐饮组合,而不是每个客户的实际首选餐。