有没有办法使用变量而不使用SPARQL“select *”返回它?

有没有办法在使用SELECT *时使用SPARQL的一种占位符变量而不返回它?

例如:

SELECT * WHERE { 
   ?s dcterms:title ?title; 
      foaf:person ?name. 
   ?s2 :inProject ?s. 
}

我不希望在离开SELECT *时返回?变量,只返回?title,?name和?s2变量.

我知道我可以通过使用SELECT?title?name …来限制选择结果,但我只是好奇是否有某种占位符变量的符号或某种方式来管理它.

编辑:

我知道在某些情况下你可以使用空白节点来完成这个任务,例如:

SELECT * WHERE { 
   _:s dcterms:title ?title; 
       foaf:person ?name. 
   ?s2 :inProject _:s. 
}

但是,这不会导致问题,因为空基节点不能跨基本图形模式使用吗?例如,这打破了这种情况:

SELECT * WHERE { 
   _:s dcterms:title ?title; 
       foaf:person ?name. 
   OPTIONAL { ?s2 :inProject _:s. }
}

谢谢!

最佳答案 对于作用于单个模式的变量是,请使用您在问题中演示的空白节点变量语法

在一般情况下,如果您使用变量,那么SELECT *将返回它.

一种可能的解决方法是使用子查询,其中列出变量并省略您不想要的变量,例如:

SELECT * WHERE
{ 
  {
    SELECT ?title ?name ?s2 WHERE 
    {
      ?s dcterms:title ?title; 
      foaf:person ?name. 
      OPTIONAL{ ?s2 :inProject ?s. }
    }
  }
}

但是我认为这正是你要避免的,因为你最终还是列出了变量.

点赞