Sparql where 子句

Sparql where clause

我正在尝试创建一个 sparql 查询,该查询 returns 列 "subject" 为“http://purl.org/dc/elements/1.1/creator”的每一列。

在sql中应该是这样的:

SELECT * WHERE Subject = "<http://purl.org/dc/elements/1.1/creator>"

接近我想要的 sparql 查询如下所示:

SELECT ?subject ?predicate ?object
WHERE { 
    <http://purl.org/dc/elements/1.1/creator> ?object ?predicate optional {
    ?subject ?predicate ?object
  }
}

它 returns 一个 table,包含所有三列,但 ?subject 列由于某种原因为空。 ?predicate 和 ?object 列不为空并显示正确的数据。

谁能帮我解决这个问题?

非常感谢:D

假设您的 Triplestore 中填充了正确的语句,然后尝试 -

SELECT ?subject ?predicate ?object
WHERE { 
    VALUES ?subject { <http://purl.org/dc/elements/1.1/creator> }
    ?subject ?predicate ?object .
}

有几种方法可以做到这一点。除了 Anthony 给出的解决方案,使用 VALUES 子句,您还可以使用 FILTER 条件:

SELECT ?subject ?predicate ?object
WHERE { 
    ?subject ?predicate ?object .
    FILTER(?subject = <http://purl.org/dc/elements/1.1/creator>)
}

或者如果您的目标不一定是获得包含三列的 table,而是要返回具有该特定主题的所有三元组,您还可以使用 CONSTRUCT 查询:

CONSTRUCT 
WHERE { <http://purl.org/dc/elements/1.1/creator> ?predicate ?object }