sparql - 使用花括号

时间:2015-02-24 15:30:43

标签: rdf sparql semantic-web

您好我有一个关于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.
}

提前致谢

1 个答案:

答案 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