有没有一种方法可以在不返回SPARQL的情况下使用变量;选择*“;?

有没有一种方法可以在不返回SPARQL的情况下使用变量;选择*“;?,sparql,semantic-web,blank-nodes,Sparql,Semantic Web,Blank Nodes,在使用SELECT*时,是否有某种方法可以将一种占位符变量与SPARQL一起使用而不返回它 例如: SELECT * WHERE { ?s dcterms:title ?title; foaf:person ?name. ?s2 :inProject ?s. } SELECT * WHERE { _:s dcterms:title ?title; foaf:person ?name. ?s2 :inProject _:s. }

在使用
SELECT*
时,是否有某种方法可以将一种占位符变量与SPARQL一起使用而不返回它

例如:

SELECT * WHERE { 
   ?s dcterms:title ?title; 
      foaf:person ?name. 
   ?s2 :inProject ?s. 
}
SELECT * WHERE { 
   _:s dcterms:title ?title; 
       foaf:person ?name. 
   ?s2 :inProject _:s. 
}
如果我不想返回
?s
变量,只返回
?title
?name
、和
?s2
变量,同时保留
选择*

我知道我可以通过使用
select?title?name…
来限制select结果,但我只是好奇是否有占位符变量的某种表示法或某种管理方法


编辑: 我知道在某些情况下,您可以使用空白节点来完成此任务,例如:

SELECT * WHERE { 
   ?s dcterms:title ?title; 
      foaf:person ?name. 
   ?s2 :inProject ?s. 
}
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. }
    }
  }
}

但我假设这正是您试图避免的,因为您最终还是列出了变量。

问题重复在“(kleene star)”当您编写
select*…
,这不是kleene star。克莱恩星的意思是“某件事的零次或多次重复”。例如,
(ab)*
将匹配
“ababab”
“ab”
。在
select*
中,
*
只是一个普通的通配符。@JoshuaTaylor你说得很对。