在DBpedia SPARQL查询中组合相同的主题

时间:2014-09-26 09:53:45

标签: php rdf sparql dbpedia triples

我在PHP中使用以下SPARQL查询,其中$title对于所有五个查询三元组都是相同的:

SELECT * WHERE {
    { <http://dbpedia.org/resource/$title> rdfs:label ?pageTitle . }
    UNION
    { <http://dbpedia.org/resource/$title> owl:sameAs ?sameAs . }
    UNION
    { <http://dbpedia.org/resource/$title> dbpedia-owl:abstract ?abstract . }
    UNION
    { <http://dbpedia.org/resource/$title> dbpedia-owl:thumbnail ?thumbnail . }
    UNION
    { <http://dbpedia.org/resource/$title> dbpedia-owl:wikiPageID ?wikiID . }
}

有没有办法简化这一点,以便$title只在查询中指定一次?我在想某个匿名节点可能会涉及到某个地方?也许? : - )

2 个答案:

答案 0 :(得分:3)

SELECT * WHERE {
<http://dbpedia.org/resource/$title> ?p ?o . 
FILTER (?p IN (rdfs:label, owl:sameAs, dbpedia-owl:abstract, dbpedia-owl:thumbnail, dbpedia-owl:wikiPageID))  

您可以使用另一个回复中提到的FILTER (?x IN ())而不是VALUES (?x) {<...>, <...> }

答案 1 :(得分:1)

尝试按如下方式重写查询:

SELECT * WHERE {
  { ?id rdfs:label ?pageTitle . }
  UNION
  { ?id owl:sameAs ?sameAs . }
  UNION
  { ?id dbpedia-owl:abstract ?abstract . }
  UNION
  { ?id dbpedia-owl:thumbnail ?thumbnail . }
  UNION
  { ?id dbpedia-owl:wikiPageID ?wikiID . }
} values (?id) { (<http://dbpedia.org/resource/$title>) }

这是一个非常好的SPARQL 1.1功能。