Объединение идентичных предметов в запросе DBpedia SPARQL

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

0

Решение

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) {<...>, <...> } как уже упоминалось в другом ответе

3

Другие решения

Попробуйте переписать запрос следующим образом:

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.

1

По вопросам рекламы [email protected]