Sparql where子句

时间:2015-11-27 16:29:50

标签: rdf sparql triplestore fuseki

我正在尝试创建一个sparql查询,该查询返回“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
  }
}

它返回一个包含所有三列的表,但由于某种原因,?subject列为空。 ?谓词和?对象列不为空并显示正确的数据。

有谁可以帮我解决这个问题?

非常感谢:D

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

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

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

或者如果你的目标不是要获得一个包含三列的表,而是为了获得具有该特定主题的所有三元组,你也可以使用CONSTRUCT查询:

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