SPARQL查询中空白节点和变量之间的差异

SPARQL查询中空白节点和变量之间的差异,sparql,rdf,semantic-web,blank-nodes,Sparql,Rdf,Semantic Web,Blank Nodes,我研究过这个话题,也觉得很有趣。然而,定义已经够复杂了,所以我仍然看不到问题的答案 我找不到任何带有空白节点的查询的示例,它们返回的结果与使用变量代替空白节点的同一查询不同 例如,当以下查询返回不同的结果时,是否存在任何情况: 也许有更复杂的查询会导致不同的行为 我特别想知道,在没有空白节点的RDF图上执行的查询是否有不同结果的例子 谢谢 PS.是的,我知道空白节点只能用于一个基本图形模式,而不是变量。但这并不是我所说的区别。对于大多数蕴涵机制,空白节点是基本图形模式中的变量。对于OWL-D

我研究过这个话题,也觉得很有趣。然而,定义已经够复杂了,所以我仍然看不到问题的答案

我找不到任何带有空白节点的查询的示例,它们返回的结果与使用变量代替空白节点的同一查询不同

例如,当以下查询返回不同的结果时,是否存在任何情况:

  • 也许有更复杂的查询会导致不同的行为

    我特别想知道,在没有空白节点的RDF图上执行的查询是否有不同结果的例子

    谢谢


    PS.是的,我知道空白节点只能用于一个基本图形模式,而不是变量。但这并不是我所说的区别。

    对于大多数蕴涵机制,空白节点是基本图形模式中的变量。对于OWL-DL(和其他)你可以得到更多的答案(例子包括“小房子”和“俄狄浦斯”的例子——描述逻辑手册有细节)


    在SPARQL for simple Incluation的定义中,实例映射σ(b)的行为与解决方案映射μ(v)类似。

    您链接到的答案是关于被查询数据中的空白节点,而不是查询中的空白节点。您完全正确,查询中的空白节点的行为就像变量一样。规范中说明了这一点(增加了强调):

    图形模式中的空白节点充当变量,而不是对 正在查询的数据中的特定空白节点

    空白节点由标签形式表示,例如“\uuz:abc”, 或缩写形式“[]”。仅在一个节点中使用的空白节点 查询语法中的位置可以用[]表示。独特的空白 节点将用于形成三重模式。空白节点标签不可用 对于标签为“abc”的空白节点,写为“\ u0:abc”。同样的空白 节点标签不能在中的两种不同的基本图形模式中使用 同样的问题

    因此,您的查询

    SELECT ?a ?b
    WHERE {
        ?a :predicate _:blankNode .
        _:blankNode :otherPredicate ?b .
    }
    
    表现相同。使用空白节点而不是变量的好处是可以使用一些更紧凑的语法。在这种情况下,您可以编写:

    SELECT ?a ?b
    WHERE {
        ?a :predicate [ :otherPredicate ?b ] .
    }
    

    实际上,在这种情况下,由于您只在空白节点匹配的东西上寻找一个属性,所以可以使用属性路径:

    SELECT ?a ?b
    WHERE {
        ?a :predicate/:otherPredicate ?b .
    }
    

    谢谢你的回答,约书亚!如果空白节点只是语法糖,那么还有一个问题。将其范围限制为基本图形模式的目的是什么?我认为这样做的目的是,在某些情况下(可能是在不同的蕴涵机制中),范围是由BasicGraphPattern的实例化规则决定的。@AndyWhite老实说,我不确定为什么范围被限制在它是什么。也许有技术上的原因,但我并不清楚;如果空白节点就像变量一样,我不确定它们为什么没有作用域。
    SELECT ?a ?b
    WHERE {
        ?a :predicate ?variable .
        ?variable :otherPredicate ?b .
    }
    
    SELECT ?a ?b
    WHERE {
        ?a :predicate [ :otherPredicate ?b ] .
    }
    
    SELECT ?a ?b
    WHERE {
        ?a :predicate/:otherPredicate ?b .
    }