如何将变量绑定到SPARQL中的查询项

Ste*_*ini 13 sparql

在这个简单的sparql查询中,我得到了一个对象列表,其对象是42

SELECT ?v WHERE { ?v ?p 42 }
Run Code Online (Sandbox Code Playgroud)

如果我将?p添加为变量

SELECT ?v ?p WHERE { ?v ?p 42 }
Run Code Online (Sandbox Code Playgroud)

我将获得每行两个实体,主题和谓词.如果我想要三个实体怎么办,包括42个?就像是:

SELECT ?v ?p ?m WHERE { ?v ?p (42 as m) }
Run Code Online (Sandbox Code Playgroud)

sco*_*ger 13

另一种变体是使用BIND,例如:

SELECT ?v ?p ?m
WHERE {
  BIND(42 AS ?m)
  ?v ?p ?m
}
Run Code Online (Sandbox Code Playgroud)

BIND语句只是为?m添加一个绑定,然后可以为结果集选择绑定.


Jos*_*lor 11

在SPARQL 1.1中,您可以使用VALUES.你会写的

SELECT ?v ?p ?m WHERE {
  values ?m { 42 }
  ?v ?p ?m
}
Run Code Online (Sandbox Code Playgroud)


laa*_*lto 9

标准的SPARQL 1.0并不能真正实现这一点.但是,可能会有一些特定于实现的扩展.

作为一种解决方法,如果数据包含一个以42作为对象文字的三元组,您可以这样做,例如:

SELECT ?v ?p ?m { ?v ?p 42, ?m FILTER(?m=42)}
Run Code Online (Sandbox Code Playgroud)

这相当于

 SELECT ?v ?p ?m WHERE { ?v ?p 42 . ?v ?p ?m FILTER(?m=42)}
Run Code Online (Sandbox Code Playgroud)

因为您可以使用逗号对象列表表示法编写共享相同主题和谓词的图形模式,并且WHERE关键字是可选的.

为了提高效率,您希望使用基本图形模式将工作三元组减少到较小的集合,然后仅应用FILTER表达式来进一步修剪结果.