SPARQL语法的差异

SPARQL语法的差异,sparql,Sparql,我想知道这两个查询是否产生相同的输出。 假设我收集了两个RDF命名的数据图,前缀是shop: 我想编写一个SPARQL查询,它可以找出哪些客户更喜欢哪顿饭,并且输出应该是人类可读的 (a) 前缀商店: 选择?customerName?mealName 从…起 从…起 哪里 { 顾客商店:首选餐。 ?餐饮店:美名?美名。 ?客户店铺:客户名称?客户名称 } (b) 前缀商店: 选择?customerName?mealName 从…起 从…起 哪里 { ?x店:首选餐。 y店:美名?美名。 z店:

我想知道这两个查询是否产生相同的输出。 假设我收集了两个RDF命名的数据图,前缀是shop: 我想编写一个SPARQL查询,它可以找出哪些客户更喜欢哪顿饭,并且输出应该是人类可读的

(a)

前缀商店:
选择?customerName?mealName
从…起
从…起
哪里
{
顾客商店:首选餐。
?餐饮店:美名?美名。
?客户店铺:客户名称?客户名称
}
(b)

前缀商店:
选择?customerName?mealName
从…起
从…起
哪里
{
?x店:首选餐。
y店:美名?美名。
z店:客户名称?客户名称
}

我试图找出两者的区别,但如果你没有地方练习,这看起来很复杂。

这两个查询并不相同

在第一个查询中,您正在重用第二个和第三个三重模式中的第一个三重模式中的变量
?fine
?customer
。在这个查询中,您的意思是:“给我一个喜欢吃饭的客户,同一顿饭必须有一个名字,同一个客户必须有一个名字。”


在第二个查询中,您在第二和第三个子句中使用了新变量
?y
?z
。这个查询的意思是:“给我一个喜欢某顿饭的顾客,给我某顿饭的名字,给我某个顾客的名字”。您没有强制要求您检索的名称是针对同一客户/膳食的,因此您将获得随机的客户/膳食组合,而不是每个客户的实际首选膳食

这两个查询不完全相同

在第一个查询中,您正在重用第二个和第三个三重模式中的第一个三重模式中的变量
?fine
?customer
。在这个查询中,您的意思是:“给我一个喜欢吃饭的客户,同一顿饭必须有一个名字,同一个客户必须有一个名字。”


在第二个查询中,您在第二和第三个子句中使用了新变量
?y
?z
。这个查询的意思是:“给我一个喜欢某顿饭的顾客,给我某顿饭的名字,给我某个顾客的名字”。您没有强制要求您检索的名称是针对同一客户/膳食的,因此您将获得随机的客户/膳食组合,而不是每个客户的实际首选膳食

你没有地方练习是什么意思?下载并安装一个简单的三元组存储并尝试一些SPARQL查询非常简单。例如,请参见。当您将两个查询都视为一个图形时,差异变得非常明显,即为每个三元组模式绘制一条边,其中节点是主语和宾语,边标签是谓词。您没有地方练习是什么意思?下载并安装一个简单的三元组存储并尝试一些SPARQL查询非常简单。例如,请参见。当您将两个查询都视为一个图形时,差异变得非常明显,即为每个三重模式绘制一条边,其中节点为主语和宾语,边标签为谓词。您是说如果我将?z更改为?x,将强制CustumerName使用prefersMeal(如将客户名称与首选餐绑定)并且两个查询的结果将相同(它们将产生相同的输出?)。我正在使用Windows并为sparql查找Windows。您还需要将
?y
替换为
?mean
(或者
?mean
替换为
?y
,如果您愿意的话)。并且RDF4J在Windows上运行良好。但是如果你想做一些不同的事情,请快速进行谷歌搜索,有很多选项。你是说如果我用?x更改?z,它将强制客户名称使用prefersMeal(如将客户名称与Preferred Mean绑定),并且两个查询的结果将相同(它们将产生相同的输出?)。我正在使用Windows并为sparql查找Windows。您还需要将
?y
替换为
?fine
(或者
?fine
替换为
?y
,如果您愿意的话)。RDF4J在Windows上运行良好。但是如果您想要其他功能,请快速进行谷歌搜索,有很多选项。
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
}
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
}