如何在SPARQL中使VALUES语句成为可选语句
我有一个sparql查询,其中包含VALUES语句如何在SPARQL中使VALUES语句成为可选语句,sparql,optional,Sparql,Optional,我有一个sparql查询,其中包含VALUES语句 VALUES (?Name ?department) { ("Marc" "Marketing") ("John" "IT") } 我想让它成为可选的;只有当你的名字是马克或约翰时才运行。 否则,它应该被忽略。 我试过: 但它不起作用。有什么想法吗?这样做的方法不是让VALUES子句成为可选的,因为这将返回所有内容,无论它是否匹配VALUES过滤器的任何部分。取而代之的是考虑减去与联合结合: PREFIX rdf:
VALUES (?Name ?department) {
("Marc" "Marketing")
("John" "IT")
}
我想让它成为可选的;只有当你的名字是马克或约翰时才运行。
否则,它应该被忽略。
我试过:
但它不起作用。有什么想法吗?这样做的方法不是让VALUES子句成为可选的,因为这将返回所有内容,无论它是否匹配VALUES过滤器的任何部分。取而代之的是考虑减去与联合结合:
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")
}
}
}
前缀rdf:
前缀rdfs:
前缀:
挑选*
在哪里{
{
?人:姓名?姓名;
:部门?部门。
减去{
值?名称{“Marc”“John”}
}
}
联合{
?人:姓名?姓名;
:部门?部门。
值(?名称?部门){
(“Marc”“营销”)
(“约翰”“它”)
}
}
}
表达式的第一部分匹配任何不叫Marc或John的人。第二部分像往常一样应用值过滤器。您使用的是哪个SPARQL处理器?我在ApacheJena上试过,效果很好。我也在用ApacheJena做java项目。问题是,当?Name取值“Marc”时,上面的代码没有运行。请检查该值是否正确-它可能是一种标记为literal的语言?SPARQL 1.1
BIND
与结合使用,如果
可以做到这一点。
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")
}
}
}