Я использую следующий запрос SPARQL из PHP, где $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
указывается только один раз в запросе? Я думаю, что анонимный узел может быть где-то? возможно? 🙂
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) {<...>, <...> }
как уже упоминалось в другом ответе
Попробуйте переписать запрос следующим образом:
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.