我在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
只在查询中指定一次?我在想某个匿名节点可能会涉及到某个地方?也许? : - )
答案 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功能。