如何将一个sparql查询的输出作为输入传递给另一个sparql查询

时间:2015-02-02 16:41:57

标签: sparql dbpedia

我正在尝试使用第一个查询中的电影名称获取dbpedia电影链接,并在第二个查询中传递该链接以获取类似于此电影的电影。例如,Lagaan.Now而不是在第二个中手动传递链接查询是否有一种方法来组合两个查询并将第一个查询的输出作为输入传递给第二个query.ie:电影lagaan的链接。如果第一个查询给出多个链接,例如:如果我正在搜索哈利波特它将返回多个哈利波特系列链接,因此,它也应该处理这种情况。

查询1

prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
        prefix dbpedia-owl: <http://dbpedia.org/ontology/>

          select distinct ?film where  {
          ?film a dbpedia-owl:Film .
          ?film rdfs:label ?label .
          filter regex( str(?label), "Lagaan", "i")
          }
          limit 10

查询2

PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>
        select ?similar (count(?p) as ?similarity) where { 
          values ?movie { <http://dbpedia.org/resource/Lagaan> }
          ?similar ?p ?o ; a dbpedia-owl:Film .
          ?movie   ?p ?o .
        }
        group by ?similar ?movie
        having count(?p) > 35
        order by desc(?similarity)

编辑查询:

  select ?film ?similar (count(?p) as ?similarity) where {

  { 
          select distinct ?film where  {
          ?film a dbpedia-owl:Film .
          ?film rdfs:label ?label .
          filter regex( str(?label), "Lagaan", "i")
          } 
  }

         ?similar ?p ?o ; a dbpedia-owl:Film .
         ?film  ?p ?o .
        }
        group by ?similar ?film
        having count(?p) > 35
        order by desc(?similarity)
按照Joshua Taylor的说法纠正了查询

select ?film ?other (count(*) as ?similarity) {
  {
    select ?film where {
      ?film a dbpedia-owl:Film ; rdfs:label ?label .
      filter contains(lcase(?label),"lagaan")
    }
    limit 1
  }
  ?film ?p ?o .
  ?other a dbpedia-owl:Film ; ?p ?o .
}
group by ?film ?other
having count(?p) > 25
order by desc(?similarity)

1 个答案:

答案 0 :(得分:3)

  

有没有办法合并两个查询并传递第一个输出   查询作为第二个查询的输入。

SPARQL 1.1定义子查询。内部查询的结果可用于外部查询,因此它们会“传递”给它们。在你的情况下,你会有以下几点:

select ?similarMovie (... as ?similarity) where {

  { #-- QUERY 1, find one or more films
    select distinct ?film where {
      #-- ...
    }
  }

  #-- QUERY 2, find films similar to ?film
  #-- ...
}