有没有办法在使用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. }
}
}
}
但是我认为这正是你要避免的,因为你最终还是列出了变量.