Categoria: Interrogazioni semplici: chi, cosa, quale
Istanze e classi
Proprietà P31 – “istanza di”
La maggior parte delle proprietà di Wikidata descrivono le caratteristiche di un oggetto: l’oggetto per Guerre stellari Episodio IV: Una nuova speranza (Q17738) ha la proprietà direttore (P57), ha una certa durata (P2047), ha il costo di produzione (P2130), e così via. Ma spesso siamo interessati a cos’è una cosa. La maggior parte degli elementi di Wikidata ha almeno un’istruzione con la proprietà P31 – istanza di – che ci dice la classe di cui questo item è un particolare esempio e membro:
- Guerre stellari Episodio IV: Una nuova speranza (Q17738) è un’istanza di un film (Q11424).
- Guerre stellari (Q22092344) è un’istanza di una serie di film (Q24856).
- Guerre stellari (Q462) è un’istanza di un franchise multimediale (Q196600).
Da notare che un articolo non è limitato ad un’istruzione P31. Per esempio, Guerre stellari: Episodio VIII – L’Ultimo Jedi (Q18486021) è un’istanza di un film (Q11424) e anche un’istanza di un film 3D (Q229390).
Si noti inoltre che le dichiarazioni P31 mirano a fare le distinzioni più generali e relegare altri dati ad altre proprietà:
George Lucas (Q38222) è un’istanza di umano (Q5).
Potremmo anche affermare che George Lucas è un esempio di regista (Q2526255), perché Lucas è ovviamente un esempio e un membro della classe dei registi. Tuttavia, la strategia di classificazione consiste nell’impostare l’istruzione “istanza di” sul valore più generale e includere informazioni più specifiche con altre proprietà. Ad esempio, che Lucas sia un regista cinematografico viene fornito con una dichiarazione utilizzando la proprietà dell’occupazione (P106).
Proprietà P279 – “sottoclasse di”
Quindi, mentre Q17738 (Star Wars: Episodio IV – Una nuova speranza) rappresenta un film particolare, ha un regista particolare (George Lucas), una durata specifica (121 minuti), un elenco di membri del cast (Carrie Fisher, Harrison Ford, … ), e così via – il film item (Q11424) è un concetto generale. I film possono avere registi, durate e membri del cast, ma il concetto generale di “film” non ha alcun regista, durata o membri del cast particolari.
I concetti generali ricevono la proprietà della sottoclasse (P279) e possono averne più di una. Per esempio:
- Film (Q11424) è una sottoclasse di opere d’arte visive (Q4502142), ma anche di opere audiovisive (Q2431196).
- Le serie di film (Q24856) sono una sottoclasse di serie di opere creative (Q7725310), opere d’arte (Q838948), opere audiovisive (Q2431196) e franchise multimediali (Q196600).
Il significato della distinzione istanza/sottoclasse
Supponiamo di volere un elenco di tutti i film che si svolgono nell’universo immaginario di Guerre stellari. Potremmo eseguire la seguente query:
La query restituisce solo 10 film. Chiaramente, nei risultati mancano alcuni film, come Star Wars: Episodio I – La minaccia fantasma (Q165713). Come mai?
Perché alcuni articoli hanno “lungometraggio” (Q24869) come valore della loro dichiarazione P31. “Film” è una sottoclasse di “film” (Q11424), ma per quanto riguarda la query il pattern nella parte WHERE della query non corrisponde a quello dell’elemento, e quindi elementi che non sono un’istanza di ” film” non corrispondono e non vengono recuperati.
Potremmo usare il costrutto UNION per selezionare film che siano un’istanza di “film” o un’istanza di “lungometraggio”:
Questa query recupera più risultati, ma è ancora possibile che ci siano elementi rilevanti (cioè, film che si svolgono nell’universo Guerre stellari) che hanno una proprietà “istanza di” con un valore che è qualche altra sottoclasse di film – film d’azione, Film in 3D, film epico… Elencare tutte le diverse sottoclassi di film nelle dichiarazioni dell’UNION non è una strategia molto buona. Una soluzione più generale è mostrata nella successiva sezione.
Visualizzazione Image Grid
Image Grid View
WDQS può visualizzare i risultati delle nostre query in diversi formati. Finora abbiamo sempre visto i risultati in formato tabella. Riprendiamo l’esercizio precedente:
Dopo aver eseguito la query, scorrere fino ai risultati. Sopra la tabella, fai clic sulla freccia accanto all’occhio. Apparirà un menu a discesa. Scegli “Image grid” dal menu e WDQS visualizzerà il logo di ogni elemento, con i risultati di ogni elemento sotto.
Un altro modo per visualizzare i risultati nella visualizzazione Image grid consiste nello specificarlo nella query stessa. Il codice sulla riga 1, dopo il segno dell’hashtag, dice alla query che i risultati della query devono essere mostrati non come una tabella, ma come una griglia con immagini.
Non è necessario ricordare il codice esatto per la griglia dell’immagine: grazie alla funzione di autocompletamento di WDQS, una volta digitato un hashtag nella finestra della query, un menu a tendina suggerirà le diverse opzioni di visualizzazione.
Esercizio: OPTIONAL
| Esercizio: aggiungi alla query precedente la durata (P2047) e l’immagine del logo (P154), se disponibile
mostra la soluzione
La clausola OPTIONAL
Valori mancanti e clausola OPTIONAL
Come abbiamo visto, quando c’è più di un pattern da abbinare nella clausola WHERE, c’è un AND implicito tra le istruzioni, in modo tale che solo i pattern che corrispondono a tutte le istruzioni verranno restituiti dalla query. Ad esempio, nell’ultimo esercizio, c’erano tre modelli di corrispondenza:
#Film della serie Guerre stellari SELECT ?item ?itemLabel ?directorLabel ?cost WHERE { ?item wdt:P179 wd:Q22092344. # l'elemento (item) fa parte della serie Star Wars (serie di film) ?item wdt:P57 ?director. # il valore della proprietà regista dell'item viene raccolto dalla variabile regista OPTIONAL {?item wdt:P2130 ?cost.} # il valore della proprietà costo di produzione dell'item viene raccolto dalla variabile costo SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE]". } }
Le affermazioni alle righe 6, 7 e 8 hanno una relazione AND tra di loro. Pertanto, un articolo sarà considerato una corrispondenza solo se ha una proprietà P179 (parte di una serie) con un valore di Q22092344 (serie di film Guerre stellari), nonché una proprietà P57 (regista) e una proprietà P2130 (costo) . Se un elemento non corrisponde a una di queste affermazioni (ad esempio, non ha il costo della proprietà), viene ignorato dalla query.
SPARQL è un linguaggio di query di corrispondenza dei modelli. Le query SPARQL restituiranno dati solo quando il pattern nella clausola WHERE corrisponde esattamente al pattern nei dati che stai interrogando. Ma molti set di dati hanno valori mancanti e i dati sono una corrispondenza per la query solo se sono presenti dati validi in ogni parte dell’istruzione dichiarata all’interno di WHERE. Ciò significa che SPARQL non restituirà un elemento a cui manca il nome della proprietà o il valore richiesto in WHERE.
La parola chiave OPTIONAL all’interno della clausola WHERE indica i modelli facoltativi che vorresti abbinare nei dati. OPTIONAL consente di cercare dati che possono essere o meno presenti.
Esegui nuovamente la query con costo come variabile facoltativa.
Un altro esercizio
| Esercizio: Mostra regista e costo (P2130) di ogni film della serie Star Wars
mostra soluzione
o utilizzando una sintassi diversa (vedi la spiegazione qui):
Una precedente query che ha recuperato ogni film di Star Wars e il suo regista ha restituito 9 risultati. Questa query corrente restituisce solo 8 risultati. Come mai?
Perché alcuni articoli non hanno un costo (P2130) come proprietà e vengono quindi ignorati dalla query.
Esercizio: più di una variabile
| Esercizio: scrivi una query per mostrare il regista e sceneggiatore (P58) di ogni film della serie di film di Star Wars
mostra soluzione
oppure, utilizzando una sintassi diversa (vedi spiegazione qui):
La precedente query che elencava il regista di ogni film di Guerre stellari ha restituito 9 risultati. Questa query restituisce 16 risultati. Come mai?
Perché ci sono più sceneggiatori per alcuni dei film. Quindi otteniamo una riga per ogni sceneggiatore.
Interrogazione con più di una variabile
Query con più di una variabile
Until now our queries essentially had just one variable, even if additional variables were declared for the label and/or description of the item. Now we will look at queries with more variables.
The following query retrieves items that are part of the Star Wars film series, and the director of each film.
#Film della serie Guerre stellari SELECT ?item ?itemLabel ?director WHERE { ?item wdt:P179 wd:Q22092344. # l'elemento (item) fa parte di Guerre stellari (serie televisiva) ?item wdt:P57 ?director. # il valore della proprietà regista dell'item viene raccolto dalla variabile regista SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE]". } }
Spiegazione della query
Nella sezione SELECT abbiamo le variabili ?item e ?director, così come ?itemLabel che recupera l’etichetta per ?item.
Nella sezione WHERE, alle righe 6 e 7, vediamo le condizioni di pattern matching:
?item wdt: P179 wd: Q22092344.
?item wdt:P57 ?director.
SPARQL ricerca elementi Wikidata con istruzioni che corrispondono allo schema definito nella sezione WHERE. Quindi, come prima, la prima riga della nostra sezione WHERE dice: “Trovami oggetti che hanno una dichiarazione con una proprietà P179 (parte di una serie) con il valore Q22092344 (Star Wars (serie di film))”.
La seconda riga dice: “Quindi per ciascuno di questi elementi, trovami la loro proprietà P57 (director) e inserisci il suo valore nella variabile ?director”.
Come abbiamo visto, c’è un AND implicito tra ogni istruzione nella sezione WHERE, ovvero solo i modelli che corrispondono a tutte le istruzioni verranno restituiti da questa query.
Ora eseguiamo la query:
Cosa bisogna aggiungere per vedere i nomi dei direttori? Aggiungilo ed esegui di nuovo la query.
Mostra la soluzione
#Un po’ di sintassi
If we wanted the query to show the name of each director, but not the Q number, we could omit the ?director from the SELECT section and only declare ?directorLabel. This implies there is a ?director variable (which we see in the WHERE section) but it isn’t presented in the query results.
Due o più schemi di corrispondenza
Aggiungere schemi di corrispondenza
Finora le nostre query avevano una sola condizione di corrispondenza dei modelli. Ad esempio, hanno selezionato oggetti che hanno una proprietà P179 (parte di una serie) con un valore di Q22092344 (serie di film di Star Wars). Nella query seguente sono presenti due condizioni di corrispondenza dei modelli:
La query recupera quattro elementi. Questi sono articoli che soddisfano entrambe le condizioni. In altre parole, i modelli hanno una relazione AND tra loro:
?item wdt:P179 wd:Q22092344.
AND
?item wdt:P57 Q38222.
# Un po’ di sintassi
Another way of formulating the above query, using a semicolon to join the two statements:
#Film di Guerre stellari SELECT ?item ?itemLabel WHERE { ?item wdt:P179 wd:Q22092344; # l'oggetto (elemento/item) fa parte di Guerre stellari (serie televisiva) wdt:P57 wd:Q38222. # l'oggetto (elemento/item) ha la proprietà regista con valore George Lucas. SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE]". } }
Poiché sulla riga 6 è presente un punto e virgola, che unisce i due pattern in modo che corrispondano, la variabile ?item viene omessa sulla riga 7.
Valori multipli
Proprietà con più valori
Valori multipli per una proprietà non sono un problema per un database come Wikidata. Non c’è niente di sbagliato nell’avere più valori per la stessa proprietà. Per certe affermazioni – come i figli di una persona o le lingue ufficiali di un paese – è perfettamente ragionevole avere più valori. Essenzialmente si tratta di coppie proprietà-valore aggiuntive.
Ad esempio, per l’elemento Star Wars Episodio V: L’impero colpisce ancora (Q181795) la proprietà dello sceneggiatore ha questi valori:
Una rappresentazione grafica sarebbe: