有没有一种方法可以在不返回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你说得很对。