有人能解释一下这些Sparql之间的区别吗

有人能解释一下这些Sparql之间的区别吗,sparql,Sparql,我有rdf数据: @prefix foaf: <http://xmlns.com/foaf/0.1/> . _:a foaf:name "Alice" . _:a foaf:knows _:b . _:a foaf:knows _:c . _:b foaf:name "Bob" . _:c foaf:name "Clare" . _:c foaf:nick "CT" . PREFIX foaf: <ht

我有rdf数据:

@prefix  foaf:  <http://xmlns.com/foaf/0.1/> .

_:a    foaf:name   "Alice" .
_:a    foaf:knows  _:b .
_:a    foaf:knows  _:c .

_:b    foaf:name   "Bob" .

_:c    foaf:name   "Clare" .
_:c    foaf:nick   "CT" .


PREFIX foaf:    <http://xmlns.com/foaf/0.1/>
SELECT ?nameX 
WHERE
 { ?x foaf:knows ?y.
 ?x  foaf:name ?nameX .
 }
@前缀foaf:。
_:一个foaf:name“Alice”。
_:foaf:知道。
_:foaf:knows\uuc。
_:b foaf:name“Bob”。
_:c foaf:name“Clare”。
_:c foaf:nick“CT”。
前缀foaf:
选择?nameX
哪里
{?x foaf:知道吗?y。
x foaf:name?nameX。
}
我得到一个结果,爱丽丝 但是如果我运行这个查询

PREFIX foaf:    <http://xmlns.com/foaf/0.1/>
SELECT ?nameX 
WHERE
{ ?x foaf:knows ?y.
{?x  foaf:name ?nameX .}
}
前缀foaf:
选择?nameX
哪里
{?x foaf:知道吗?y。
{?x foaf:name?nameX.}
}

我得到了同样的结果。由于我是Sparql新手,请解释在{}内编写?x foaf:name?nameX有什么好处。

没有区别,并且包含通过添加大括号获得的额外块也没有好处。通常最好选择最简单的方式来表示给定的查询。

如果我将在大括号内应用筛选器,那么它将应用于{}内的模式,或者应用于整个模式。筛选器将应用于{}块。在这种情况下,您的两个表单可能会根据过滤器的性质产生不同的答案。