SPARQL变量赋值疑问:同名变量?z是否存储同一值?
SPARQL变量赋值问题解答
首先明确核心结论:在你给出的SPARQL查询中,每一组有效匹配结果里的同名变量?z,必然绑定同一个值。
原因很直接:SPARQL的变量匹配遵循「同一绑定」规则——同一个变量在同一条结果对应的匹配组里,只能绑定到同一个资源或字面量。你的查询里,?z同时出现在?r n:belongs ?z和?r_2 n:belongs ?z两个三元组模式中,只有当这两个模式找到的?z是完全相同的值时,这一整组匹配才会被视为有效,最终出现在结果里。
再说说你提到的?r和?r_2:当前查询里的FILTER(?x != ?y)只能确保?x和?y是不同的资源,但没法直接限制?r和?r_2必须不同。如果存在两个不同的?x、?y,它们都关联到同一个?r(也就是?r和?r_2是同一个值),且这个?r关联到?z,这种情况也会被查询匹配到。要是你必须要求?r和?r_2不同,得额外加上FILTER(?r != ?r_2)。
你的查询代码如下:
SELECT ?z WHERE { ?x n:type 'Type_1' . ?x n:belongs ?r . ?r n:belongs ?z . ?y n:type 'Type_1' . ?y n:belongs ?r_2 . ?r_2 n:belongs ?z . FILTER(?x != ?y) }
内容的提问来源于stack exchange,提问作者C96
相关产品推荐
相关产品推荐

