9

我对 SPARQL 和 RDF 还很陌生,我想知道下面在 SPARQL 中到底是什么意思?

[] vc:n ?vcard .

完整的查询是

PREFIX vc: <http://www.w3.org/2006/vcard/ns#>

SELECT ?given ?family

WHERE{

    [] vc:n ?vcard .

    OPTIONAL {?vcard vc:given-name ?given .}

    OPTIONAL {?vcard vc:family-name ?family .}

}
4

2 回答 2

8

这从我对SPARQL 中的括号是什么以及为什么链接的电影数据库限制为 2500 条记录的回答中被蚕食了?,其中这个问题 可能是重复的,尽管它更广泛一些。(它问了两个问题,而这只问了一个问题。)答案主要是 SPARQL 规范的链接和引用。

[ ... ] 是一个空白节点

SPARQL 1.1 查询语言中描述了方括号。具体参见4.1.4 空白节点的语法

4.1.4 空白节点的语法

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

空白节点由标签形式(如"\_:abc")或缩写形式表示"[]"。查询语法中仅在一处使用的空白节点可以用 表示[]。将使用一个唯一的空白节点来形成三重模式。空白节点标签的写入"_:abc"与标签为“abc”的空白节点相同。同一查询中的两个不同的基本图形模式不能使用相同的空白节点标签。

[:p :v]构造可用于三重模式。它创建一个空白节点标签,用作所有包含的谓词-宾语对的主题。创建的空白节点还可以用于主体和客体位置的进一步三重模式。

以下两种形式

[ :p "v" ] .
[] :p "v" .

分配一个唯一的空白节点标签(这里是“b57”),相当于写:

_:b57 :p "v" .

这个分配的空白节点标签可以用作进一步三元组模式的主题或对象。例如,作为一个主题:

[ :p "v" ] :q "w" .

这相当于两个三元组:

_:b57 :p "v" .
_:b57 :q "w" .

并作为一个对象:

:x :q [ :p "v" ] .

这相当于两个三元组:

:x  :q _:b57 .
_:b57 :p "v" .
于 2014-08-13T14:21:27.227 回答
6

[]是查询中的空白节点。它的作用类似于命名变量,但您不能在SELECT项目或FILTER需要命名变量的任何地方使用它。您可以[]使用查询中未使用的名称替换命名变量。 SELECT *会添加它,否则它是相同的查询。

于 2014-08-13T08:07:34.820 回答