我有一个带有VALUES语句的sparql查询。
VALUES (?Name ?department) {
("Marc" "Marketing")
("John" "IT")
}
我想让它成为可选的;只在什么时候运行?姓名是马克或约翰。 否则,应该忽略它。 我试过了:
OPTIONAL{
VALUES (?Name ?department) {
("Marc" "Marketing")
("John" "IT")
}
}.
但它没有用。任何想法???
答案 0 :(得分:0)
执行此操作的方法不是使VALUES子句可选,因为无论它是否匹配VALUES过滤器的任何部分,它都将返回所有内容。而是考虑将MINUS与UNION结合使用:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX : <http://example#>
SELECT *
WHERE {
{
?person :name ?name ;
:department ?department .
MINUS {
VALUES ?name { "Marc" "John" }
}
}
UNION {
?person :name ?name ;
:department ?department .
VALUES (?name ?department) {
("Marc" "Marketing")
("John" "IT")
}
}
}
表达式的第一部分匹配任何名为Marc或John的 not 的人。第二部分照常使用VALUES过滤器。