DBPedia Sparql 一次请求获取多个资源的链接

DBPedia Sparql with one request get links for multiple resources

目前我正在为每个实体做我对 sparql 端点的单个请求以获取它的所有链接,例如

SELECT * WHERE {
   {<http://dbpedia.org/resource/San_Francisco> rdf:type ?link}
}

我想让它更有效率,我想知道是否有一种方法可以通过一个请求获取多个实体的链接。我把一些东西放在一起,但这给了我一个包含所有链接的大列表。

SELECT * WHERE {
    {<http://dbpedia.org/resource/San_Francisco> rdf:type ?link}
    UNION
    {<http://dbpedia.org/resource/Silicon_Valley> rdf:type ?link}
}

我能否以某种方式获取链接,以便识别它们属于哪个实体?

您可以使用 SPARQL 1.1 values 关键字更加简洁:

SELECT  *
WHERE
  { VALUES ?entity { <http://dbpedia.org/resource/San_Francisco>
        <http://dbpedia.org/resource/Silicon_Valley> }
    ?entity  rdf:type  ?link
  }

你想要一个不同的列表吗?也许对列表进行排序并添加英文标签(如果可用)?

SELECT DISTINCT  ?link ?llab
WHERE
  { VALUES ?entity { <http://dbpedia.org/resource/San_Francisco>
        <http://dbpedia.org/resource/Silicon_Valley> }
    ?entity  rdf:type  ?link
    OPTIONAL
      { ?link  rdfs:label  ?llab
        FILTER ( lang(?llab) = "en" )
      }
  }
ORDER BY ?link