0

我正在使用来自 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在查询中只指定一次?我在想某个地方可能会涉及一个匿名节点?也许?:-)

4

2 回答 2

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) {<...>, <...> }另一个回复中提到的

于 2014-09-26T12:50:08.527 回答
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 特性。

于 2014-09-26T10:38:02.297 回答