在构造sparql查询中使用union

时间:2010-04-29 09:30:21

标签: select union sparql describe

我有一个包含多个条目的rdf图表。现在我希望得到所有相关的三元组给定的id。这是我的sparql查询:

select ?s ?p ?o from <http://localhost:8890/DAV/ranking> where {
 {<http://seekda.com/providers/cdyne.com/PhoneNotify> so:hasEndpoint ?s.
 ?s ?p ?o} union
 {<http://seekda.com/providers/cdyne.com/PhoneNotify> ?p ?o}
}

本案例中的ID为<seekda.com/providers/cdyne.com/PhoneNotify>

但我需要图表查询(constructdescribe)。所以我想我必须用union打包它们。我该怎么做?

1 个答案:

答案 0 :(得分:3)

简短的回答是:没有区别。

更长的答案是:将SPARQL查询视为包含两部分。

  1. 查询(WHERE)部分,它生成一个变量绑定列表(尽管某些变量可能未绑定)。

  2. 汇总结果的部分。 SELECTASKCONSTRUCTDESCRIBE

  3. SELECT *实际上是查询返回的内容。 SELECT ?v1 ?v2获取结果并生成另一个结果集,并删除其他变量。 ASK只是看看是否有任何结果。

    CONSTRUCT使用模板从结果中生成RDF。对于每个结果行,它绑定变量并将语句添加到结果模型中。如果模板三元组包含未绑定的变量,则会跳过它。

    DESCRIBE是最不寻常的,因为它获取每个结果节点,找到与之关联的三元组,并将它们添加到结果模型中。与其他人不同,它可以包含比查询匹配更多的信息。

    因此,在查询中允许UNIONOPTIONAL等所有表单都允许。由于未绑定的变量,它们可能导致三元组丢失。

    您的查询没有多大意义。它与{?s ?p ?o}没什么不同。你想做什么?好的,现在更有意义。

    鉴于以下说明,您似乎需要以下内容:

    construct { <http://seekda.com/providers/cdyne.com/PhoneNotify> ?p ?o }
    from <http://localhost:8890/DAV/ranking> 
    where {
      { <http://seekda.com/providers/cdyne.com/PhoneNotify> so:hasEndpoint ?s.
        ?s ?p ?o }
      union
      { <http://seekda.com/providers/cdyne.com/PhoneNotify> ?p ?o }
    }