我正在尝试创建一个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
答案 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 }