如何在SPARQL中使VALUES语句可选

时间:2017-03-15 10:47:24

标签: sparql optional

我有一个带有VALUES语句的sparql查询。

VALUES (?Name ?department) {
       ("Marc" "Marketing")
       ("John" "IT")
}

我想让它成为可选的;只在什么时候运行?姓名是马克或约翰。 否则,应该忽略它。 我试过了:

OPTIONAL{    
   VALUES (?Name ?department) {
          ("Marc" "Marketing")
          ("John" "IT")
    }
}.

但它没有用。任何想法???

1 个答案:

答案 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过滤器。