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". }
}

Run query

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?

Mappa film di NatalePer 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". } 
}

Run query

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". }
}

Run query

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". }
}

Run query

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". }
}

Run query
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". }
}

Run query
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.