在这个简单的sparql查询中,我得到了对象为42的主题列表。

SELECT ?v WHERE { ?v ?p 42 }


如果我将?p添加为变量

SELECT ?v ?p WHERE { ?v ?p 42 }


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

SELECT ?v ?p ?m WHERE { ?v ?p (42 as m) }

最佳答案

标准SPARQL 1.0确实不允许这样做。但是,可能会有一些特定于实现的扩展。

解决方法是,如果数据包含以42作为对象文字的三元组,则可以执行以下操作:像这样:

SELECT ?v ?p ?m { ?v ?p 42, ?m FILTER(?m=42)}


相当于

 SELECT ?v ?p ?m WHERE { ?v ?p 42 . ?v ?p ?m FILTER(?m=42)}


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

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

关于sparql - 如何将变量绑定(bind)到SPARQL中的查询项目,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1760926/

10-13 01:02