Le feste stanno arrivando e in questi giorni è proprio vasta la scelta dei film natalizi proposti sui social, in tv, al cinema e spesso si discute su quale film guardare, ma per mettere tutti d’accordo un modo c’è: quest’anno il film di Natale sceglilo con SPARQL!
Vediamo come, raccogliendo diverse preferenze sulle caratteristiche, è possibile individuare il film giusto da guardare a casa estraendo informazioni dal database collaborativo Wikidata con il linguaggio di interrogazione SPARQL Protocol and RDF Query Language.
Come impostare la ricerca con SPARQL
Come visto in Chiedilo con SPARQL, per effettuare la ricerca è necessario tradurre la nostra domanda dal linguaggio naturale al linguaggio macchina secondo una struttura tripartita Soggetto – Predicato – Oggetto (chiamata tripla) e utilizzando il vocabolario di Wikidata previsto per il dominio di riferimento.
Ad esempio, vogliamo trovare all’interno del database tutti i film che appartengono al genere Film natalizi, per ottenerne la lista scriveremo:
SELECT ?film ?filmLabel WHERE { ?film wdt:P31 wd:Q11424 . ?film wdt:P136 wd:Q28026639 . SERVICE wikibase:label { bd:serviceParam wikibase:language "it,en". } }
Nella SELECT abbiamo inserito il Soggetto della nostra ricerca ?film e abbiamo chiesto di restituirci come risultato oltre all’identificativo anche la loro etichetta ?filmLabel (specificando in SERVICE i parametri sulla lingua); nella WHERE abbiamo inserito le istruzioni necessarie per trovare le informazioni che stiamo cercando, affermando che il soggetto della nostra ricerca è un film (Q11424), e non ad esempio un cortometraggio animato, che appartiene al genere (P136) dei Film natalizi che ha identificativo Q28026639.
Filtrare i risultati secondo le caratteristiche preferite
Immaginiamo di voler scegliere in base al luogo in cui il film è ambientato, quanto sarebbe più semplice rispetto a una lista con i nomi dei luoghi poter direttamente visualizzare i risultati su una mappa?
Per realizzarla quello che è necessario aggiungere è la proprietà ambientazione geografica (P840) e quella che identifica le coordinate (P625) del luogo di riferimento.
Inoltre, possiamo inserire in OPTIONAL di visualizzare anche l’immagine (P18) rappresentativa del film qualora fosse disponibile.
Otterremo una mappa con dei puntatori che identificano i vari film da esplorare, infatti con un click si aprirà una vignetta con i link relativi a nome, luogo e opzionalmente immagine del film.
SELECT ?film ?filmLabel ?place ?placeLabel ?coord ?img WHERE { ?film wdt:P31 wd:Q11424 . ?film wdt:P136 wd:Q28026639 . ?film wdt:P840 ?place . ?place wdt:P625 ?coord . OPTIONAL {?film wdt:P18 ?img .} SERVICE wikibase:label { bd:serviceParam wikibase:language "it,en". } }
Scegliere un film che sia parte di una serie
Qualcuno ha voglia di una maratona di film? è anche possibile scegliere tra la lista ottenuta, solo i film che fanno parte di una serie.
Basta aggiungere alla nostra query di ricerca la proprietà che identifica le serie (P179):
SELECT ?film ?filmLabel ?serie ?serieLabel WHERE { ?film wdt:P31 wd:Q11424 . ?film wdt:P136 wd:Q28026639 . ?film wdt:P179 ?serie . SERVICE wikibase:label { bd:serviceParam wikibase:language "it,en". } }
All’improvviso un vostro amico, però, vorrebbe che almeno uno degli attori fosse italiano, possiamo accontentarlo chiedendo gli interpreti (P161) che hanno come paese di cittadinanza (P27) l’Italia (Q38):
SELECT ?film ?filmLabel ?serie ?serieLabel ?actor ?actorLabel WHERE { ?film wdt:P31 wd:Q11424 . ?film wdt:P136 wd:Q28026639 . ?film wdt:P179 ?serie . ?film wdt:P161 ?actor . ?actor wdt:P27 wd:Q38 . SERVICE wikibase:label { bd:serviceParam wikibase:language "it,en". } }
Film per premi ricevuti, incassi e durata
Se un amico diffidente, che vuole il meglio, chiede di basarsi sui riconoscimenti ottenuti, è possibile verificare il numero di premi ricevuti e gli incassi, aggiungendo la proprietà premi ricevuti (P166) e botteghino (P2142):
SELECT ?film ?filmLabel ?serie ?serieLabel ?actor ?actorLabel ?premio ?premioLabel?incasso WHERE { ?film wdt:P31 wd:Q11424 . ?film wdt:P136 wd:Q28026639 . ?film wdt:P179 ?serie . OPTIONAL {?film wdt:P166 ?premio .} OPTIONAL {?film wdt:P2142 ?incasso.} ?film wdt:P2142 ?incasso. ?film wdt:P161 ?actor . ?actor wdt:P27 wd:Q38 . SERVICE wikibase:label { bd:serviceParam wikibase:language "it,en". } }
Ancora indecisi? l’ultima parola spetta alla durata!
Se vogliamo basare la scelta sul film più breve della lista, aggiungiamo alla query di ricerca la proprietà durata (P2047) e in FILTER possiamo specificare di selezionare quelli inferiori a 200 min:
SELECT ?film ?filmLabel ?serie ?serieLabel ?actor ?actorLabel ?premio ?premioLabel ?incasso ?durata WHERE { ?film wdt:P31 wd:Q11424 . ?film wdt:P136 wd:Q28026639 . ?film wdt:P179 ?serie . OPTIONAL {?film wdt:P166 ?premio .} OPTIONAL {?film wdt:P2142 ?incasso.} ?film wdt:P2047 ?durata . FILTER(?durata < 200) ?film wdt:P161 ?actor . ?actor wdt:P27 wd:Q38 . SERVICE wikibase:label { bd:serviceParam wikibase:language "it,en". } }
In base alla minor durata, abbiamo scelto Vi presento i nostri con Robert De Niro. E Voi?
Questi risultati rispecchiano le caratteristiche che abbiamo impostato nella query, ma sono solo alcuni degli esempi di ricerche che si possono fare…
Provate subito a impostare la vostra query di ricerca SPARQL.