您好我有一个关于sparql查询的简单问题。 大括号对where子句有什么影响吗? 例如:
之间有区别吗?{
?s1 ab:wasBornIn "Berlin".
?s1 ?p1 ?o1
}
{
?s2 ab:someProperty "SomeLiteral".
?s2 ?p2 ?o2
}
和
{
?s1 ab:wasBornIn "Berlin".
?s1 ?p1 ?o1.
?s2 ab:someProperty "SomeLiteral".
?s2 ?p2 ?o2.
}
提前致谢
答案 0 :(得分:7)
在你给出的例子中,没有区别。这实际上在规范中被提到:
5.2 Group Graph Patterns
在SPARQL查询字符串中,组图表模式用分隔符表示 大括号:{}。例如,此查询的查询模式是组图 一种基本图形模式的模式。
PREFIX foaf: <http://xmlns.com/foaf/0.1/> SELECT ?name ?mbox WHERE { ?x foaf:name ?name . ?x foaf:mbox ?mbox . }
将从分组的查询中获得相同的解决方案 三重模式分为两种基本图形模式。例如,查询 下面有不同的结构,但会产生相同的解决方案 上一个查询:
PREFIX foaf: <http://xmlns.com/foaf/0.1/> SELECT ?name ?mbox WHERE { { ?x foaf:name ?name . } { ?x foaf:mbox ?mbox . } }
虽然可以看到差异,但过滤器是:
由关键字FILTER表示的约束是对...的限制 过滤器出现的整个组的解决方案。
我认为这意味着
{ ?s ?p ?o1 }
{ ?s ?q ?o2
filter( !isIri(?o1) )
}
与
不同{
?s ?p ?o1 .
?s ?q ?o2 .
filter( !isIri(?o1) )
}
它可能发挥作用的另一个地方是空白节点标签:
5.1.1 Blank Node Labels
当使用_:abc形式的空白节点时,空白节点的标签是 范围为基本图形模式。标签只能用于a 任何查询中的单个基本图形模式。
例如,sparql.org上的验证器将报告语法错误:
select * where {
{ _:s ?p ?o }
{ _:s ?p ?o }
}
语法错误:
Line 3, column 5: Blank node label reuse not allowed at this point: _:s