SPARQL未绑定变量

时间:2015-12-03 23:13:51

标签: rdf sparql

我需要帮助理解这个sparql查询的确切内容(要求):

SELECT ?subject ?object
    WHERE { ?subject onto:personName ?object . ?w ?q ?s}

这是来自人的本体论。第一部分易于理解;某个未知主题必须有一个具有某些未知值的personName,但为什么第二部分是相关的?

这是我需要帮助理解的:当有两种模式时("。"之前和之后)这是否意味着节点必须匹配第一种和第二种模式?如果是这样,在这种情况下,第二个模式接缝说:"一些未知的主题必须有一些未知的谓词和一些unknwon对象",这将返回RDF图中的所有tripples ...所以在这种情况下,第二个模式将匹配所有tripples,但结果将受到第一个模式的限制..

我的问题是,为什么第二种模式根本不重要,因为它似乎只相当于第一种模式。但是当我运行它时,我会得到所有"本体中的三重奏,所以我需要准确理解查询的作用。

另外:如果我将?w替换为?object,从而将?object绑定到boh模式会发生什么,所以看起来似乎:?object必须有一些谓词?q和某个对象?s,如果我将?w替换为?object,它会找到?s的传递对象(?object)在模式1 ...换句话说:?subject --> onto:personName --> ?object --> ?q --> ?s

1 个答案:

答案 0 :(得分:4)

  

这是我需要帮助理解的:当有两种模式时   (在“。”之前和之后)这意味着节点必须匹配两者   第一个和第二个模式?

  

如果是这样,那么第二种模式   案件接缝说:“一些未知的主题必须有一些未知的   谓词和一些unknwon对象“,这将返回所有   RDF图中的三个部分...

正确。

  

所以在这种情况下,第二种模式会   匹配所有tripples,但结果将受到限制   第一种模式..

实际上,第二种模式的结果完全不受第一种模式的限制 - 因为模式不共享任何变量。您没有收回数据集中所有三元组的原因很简单,就是在SELECT子句中,您只需指定第一个模式中的变量。如果你要说SELECT *SELECT ?subject ?object ?w ?q ?s,那么你会得到所有回报。

  

我的问题是,为什么第二种模式根本不重要,因为它似乎只相当于第一种模式。

它不等同,因为第二个模式匹配所有可能的三元组,而第一个模式只匹配那些以onto:personName作为谓词的三元组。

虽然?w?q?s中没有找到任何值显示在您的查询结果中,但包含此模式确实会对您的结果产生影响。通过指定两个模式,您可以有效地表达两种模式之间的连接。由于这两种模式不共享变量,因此没有“连接条件”。结果是你的查询结果将是与第一个模式匹配的所有三元组的Carthesian产品以及与第二个模式匹配的所有三元组。

因此,您将在查询结果中看到,您将获得?subject?object的许多重复行:每对将重复N次,其中N是与之匹配的三元组数第二种模式。

总而言之,除非你有一个非常奇特的用例,否则第二种模式比无用更糟糕,因为它不仅不会在结果中产生任何有用的数据,而且确保结果包含大量重复(和可能还会导致您的查询执行时间远远超过实际需要的时间。)

  

另外:如果我用?对象替换?w会发生什么,从而将对象绑定到boh模式,所以它看起来像:?对象必须有一些谓词?q和一些对象?所以如果我用?对象替换?w,它会在模式1中找到?对象的传递对象(?s)...换句话说:?subject - >上:personName - > ?对象 - > ?q - > ?第

事实上。如果你这样做,你将有一个共享变量,因此两个模式之间的连接条件。对查询结果的影响是,您现在不再接收存在?subject ?object谓词的所有 onto:personName对,但只有那些 如果?object值作为数据集中某个其他三元组的主题出现,则为true。