如何查询多个实体的特定DBpedia资源/页面?

时间:2016-03-03 15:04:33

标签: java sparql semantic-web dbpedia

我有许多DBpedia页面的链接,如:
http://dbpedia.org/resource/Harry_Potter
http://dbpedia.org/resource/Twilight_(series)
http://dbpedia.org/resource/Bible
http://dbpedia.org/resource/Manga

我想为每一个获取抽象和缩略图实体。

我可以使用以下方式单独获取它们:

  • 对于摘要:

    PREFIX dbo: <http://dbpedia.org/ontology/>
    PREFIX res: <http://dbpedia.org/resource/>
    PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
    PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
    SELECT ?label
    WHERE { <http://dbpedia.org/resource/Harry_Potter>
              dbo:abstract ?label . FILTER (lang(?label) = \'en\')}
    
  • 缩略图:

    PREFIX dbo: <http://dbpedia.org/ontology/>
    PREFIX res: <http://dbpedia.org/resource/>
    PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
    PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
    SELECT ?thumbnail
    WHERE { <http://dbpedia.org/resource/Harry_Potter>
              dbo:thumbnail ?thumbnail}
    

是否可以将上述两个查询合并为一个查询。我是SPARQL的新手,无法让it工作。

此外,有没有比我目前的方法更好的查询方式?

1 个答案:

答案 0 :(得分:3)

当然可以将它们组合起来,这样做的简单方法就是连接两个WHERE的主体并相应地调整SELECT

SELECT ?label ?thumbnail
WHERE {
    <http://dbpedia.org/resource/Harry_Potter> dbo:abstract ?label . 
    FILTER (lang(?label) = 'en')
    <http://dbpedia.org/resource/Harry_Potter> dbo:thumbnail ?thumbnail .
}

如果您想要更简洁,可以使用;将两个三元组合并为同一主题:

SELECT ?label ?thumbnail
WHERE {
    <http://dbpedia.org/resource/Harry_Potter>
        dbo:abstract ?label ; 
        dbo:thumbnail ?thumbnail .
    FILTER (lang(?label) = 'en')
}

由于您定义了res:前缀,因此您可以使用它来缩短URI:

SELECT ?label ?thumbnail
WHERE {
    res:Harry_Potter
        dbo:abstract ?label ; 
        dbo:thumbnail ?thumbnail .
    FILTER (lang(?label) = 'en')
}