有没有办法使用变量而不用SPARQL返回它"选择*"?

时间:2013-02-21 16:30:33

标签: sparql semantic-web blank-nodes

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

例如:

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

在我离开?s时,我不希望返回?title变量,只返回?name?s2SELECT *变量。

我知道我可以使用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. }
}

谢谢!

1 个答案:

答案 0 :(得分:2)

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

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

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

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

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