How to query a particular DBpedia Resource/Page fo

2019-06-09 18:08发布

I have links to a number of DBpedia pages like:
http://dbpedia.org/resource/Harry_Potter
http://dbpedia.org/resource/Twilight_(series)
http://dbpedia.org/resource/Bible
http://dbpedia.org/resource/Manga

I would like to get the Abstract and Thumbnail entities for each one of them.

I can get them individually using:

  • For Abstract:

    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\')}
    
  • For Thumbnail:

    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}
    

Is it possible to combine the above two queries into a single one. I am very new to SPARQL and couldn't get it to work.

Additionally, is there a better way to query than my current approach?

1条回答
干净又极端
2楼-- · 2019-06-09 18:41

Of course it's possible to combine them, the trivial way to do it would be just to concatenate the bodies of the two WHEREs and adjust the SELECT accordingly:

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 .
}

If you want to be more succinct, you can combine two triples with the same subject using ;:

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

And since you defined the res: prefix, you can use that to shorten the URI:

SELECT ?label ?thumbnail
WHERE {
    res:Harry_Potter
        dbo:abstract ?label ; 
        dbo:thumbnail ?thumbnail .
    FILTER (lang(?label) = 'en')
}
查看更多
登录 后发表回答