Dichiarazioni con qualificatori

Istruzioni di interrogazione con i qualificatori

Molte affermazioni in Wikidata non sono solo semplici triplette sotto forma di Item-Property-Value, ma possono anche includere un qualificatore. I qualificatori consentono alle affermazioni di essere ampliate, annotate o contestualizzate oltre ciò che può essere espresso in una semplice coppia proprietà-valore. I qualificatori vengono utilizzati per descrivere ulteriormente o perfezionare il valore di una proprietà fornita in una dichiarazione. Si noti che un’istruzione dovrebbe comunque fornire dati utili anche senza un qualificatore; il qualificatore è lì solo per fornire ulteriori informazioni.

Prendiamo ad esempio la proprietà “data di pubblicazione” (P577). La seguente query recupera la data di pubblicazione per ciascuno dei film della serie Star Wars:

Sebbene ci siano 9 film nella serie, otteniamo 32 risultati. Come mai?

Come abbiamo visto prima, una proprietà può avere più valori. In questo caso, ci sono diversi valori per “data di pubblicazione” per film. Come mai? Perché ci sono date di uscita diverse per paesi diversi. Per ogni valore c’è un qualificatore che indica la proprietà “luogo di pubblicazione” (P291) e il suo valore. Ad esempio, per l’oggetto Star Wars Episodio IV: Una nuova speranza (Q17738):

Publication date (P577) has the property place of publication (P291) as qualifier

In che modo la nostra query può recuperare solo la data di pubblicazione negli Stati Uniti?

Per fare questo abbiamo bisogno di capire come vengono rappresentati questi dati.

Spiegazione dei qualificatori

Finora abbiamo avuto affermazioni come:

Questo legame tra l’oggetto e il suo valore è una “proprietà diretta”. Nelle nostre domande ci siamo riferiti ad esso con il prefisso wdt.

Nel modello di dati di Wikidata, per ogni proprietà diretta che collega un elemento e un valore, esiste anche una semplice proprietà (p) che collega l’elemento a un nodo di istruzione. Quel nodo di istruzione è quindi collegato al valore della proprietà diretta da un’istruzione di proprietà (ps), come mostrato in questa vista grafica:

Un altro modo per descrivere questi dati è attraverso affermazioni:

ElementoProprietàValore
Q17738wdt:P5771977-05-25
Q17738p:P577Q17738-nodo istruzione
Q17738-nodo istruzioneps:P5771977-05-25

Nell’ultima riga, il nodo dell’istruzione serve da “Elemento” in un’istruzione Elemento-Proprietà-Valore.

Le istruzioni che hanno un qualificatore hanno un collegamento aggiuntivo dal nodo dell’istruzione  – un qualificatore di proprietà (pq) – come mostrato nel diagramma seguente:

Possiamo ora formulare una query per ottenere la data di pubblicazione (P577) dei film della serie Guerre stellari se il luogo di pubblicazione (P291) sono gli USA:

Un altro esercizio

| Esercizio: per ciascuno dei film della trilogia originale di Star Wars (Q25540859) elenca i membri del cast (P161) e il ruolo del personaggio (P453) che hanno interpretato

mostra la soluzione

Se hai imparato a rimuovere i duplicati usando il modificatore DISTINCT, modifica la query per elencare i ruoli dei personaggi unici nella trilogia originale di Star Wars e gli attori che li hanno interpretati.

mostra la soluzione

Esercizio

| Esercizio: quali film sono stati girati in Nuova Zelanda (Q664)?

Hint: Make sure that your query retrieves films for which filming location (P915) is in the administrative territorial entity (P131) of New Zealand.

show solution

The following solution shows the filming locations:

Or, using abbreviated syntax (filming locations not listed):

Note that duplicates are removed from the results using the DISTINCT modifier.

Recupero dei dati collegati ai valori

Recupero dei dati collegati ai valori

So far the values we retrieved in our queries were directly related to the item we were selecting. Suppose we wanted to show the birthplace of the director of each of the Star Wars films.

#Star Wars films

SELECT ?item  ?itemLabel ?directorLabel ?pobLabel
WHERE 
{ 
  ?item wdt:P179 wd:Q22092344. # item is part of the series Star Wars (film series)
  ?item wdt:P57 ?director.     # item’s director property’s value is collected by the director variable
  ?director wdt:P19 ?pob.      # the place of birth of the director is collected in the ?pob variable
 SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE]". }
}

The query selects items that are part of the star wars series, and retrieves each film’s director, and the director’s P19 (place of birth) property and its value.

Importantly, P19 and its value are linked to the director – not to the film! We are retrieving the value (the place of birth) of a property (P19) of a value (the director) of a property (P57) of the item that we are selecting.

Here is a graph view of the data for the film Star Wars Episode V: The Empire Strikes Back (Q181795):

A graph view showing Q119348 (Irving Kershner) as both the object (Value) of the statement regarding the director property of Q181795, and the subject (Item) of the statement regarding the place of birth property.

Item Q181795 is the subject (shown in blue) in the Item-Property-Value statement:
Q181795 – P57 (director) – Q119348 (Irvin Kershner).
Item Q119348 is the value or object (shown in green) of the director property (shown in black).

Item Q119348 is also the subject of the statement:
Q119348 – P19 (place of birth) – Q1345 (Philadelphia)

Now run the query:

# A little bit of syntax

A shorter way of formulating the above query is using square brackets to join the two match patterns on lines 7 and 8. So instead of:
?item wdt:P57 ?director. 
?director wdt:P19 ?dob.

We write:
?item wdt:P57 [wdt:P19 ?dob]. 

What has changed in the results? Why?

This syntax omits the ?director variable, so ?directorLabel is empty.

DISTINCT

DISTINCT – visualizzazione risultati unici

Diamo nuovamente un’occhiata alla query che elenca tutte le opere d’arte (Q838948) dell’universo di Star Wars.

Se esegui la query vedrai che ci sono alcuni duplicati nei risultati: alcuni oggetti, come Q19590955 (Rogue One) e Q6074 (Star Wars Episodio VII: Il risveglio della Forza) appaiono più di una volta.
I modelli di query spesso restituiscono duplicati: ciò può accadere se, ad esempio, si utilizza il modello “?item wdt:P31/wdt:P279* ?class” e sono presenti più percorsi da ?item a ?class: otterrai un nuovo risultato per ciascuno di questi percorsi. Ad esempio, l’elemento Q19590955 (Rogue One) ha sia “film” che “3D film” come valori di P31 e ognuno ha un percorso per la classe “opera d’arte”, quindi l’elemento viene visualizzato due volte nei risultati.

Per eliminare i duplicati, aggiungiamo il modificatore DISTINCT dopo SELECT:

Percorsi di proprietà

Percorsi di proprietà

La costruzione della query che ci consente di selezionare elementi che appartengono alla stessa classe fa uso di percorsi di proprietà. I percorsi delle proprietà sono un’abbreviazione per scrivere un percorso delle proprietà tra due elementi.

Per capire come funziona questa costruzione, dai un’occhiata alla visualizzazione grafica di alcune informazioni sull’oggetto Star Wars: Episodio I – La minaccia fantasma (Q165713):

L’elemento/item Q165713 ha un’istruzione P31 (istanza di) con il valore “lungometraggio” (Q24869). Quindi l’istruzione Elemento-Proprietà-Valore sarebbe:

Q165713 – P31 – Q24869

Il percorso tra Q165713 e Q24869 è il percorso più semplice: una singola proprietà.

L’elemento Q24869 (film lungometraggio) ha la proprietà P279 (sottoclasse di) con il valore Q11424 (film). Quindi l’istruzione Elemento-Proprietà-Valore sarebbe:

Q24869 – P279 – Q11424

Anche il percorso tra Q24869 e Q11424 è solo una singola proprietà.

Gli elementi del percorso possono essere uniti con una barra (/). Quindi un’istruzione di query che utilizza la costruzione wdt:P31/wdt:P279 denota un percorso di proprietà tra due elementi costituiti da P31 (istanza di) e P279 (sottoclasse di).

Tuttavia, se il nostro modello per la corrispondenza fosse:
?item wdt:P31/wdt:P279 wd:Q11424.
la query corrisponderebbe solo agli elementi che sono un’istanza di una sottoclasse di film, ovvero solo agli elementi che hanno un percorso costituito da P31 e P279 all’elemento film (Q11424). Gli elementi la cui proprietà P31 ha il valore Q11424 non verrebbero recuperati perché non corrispondono al modello di costruzione.

La construzione wdt:P31/wdt:P279* sulla riga 6 è un’abbreviazione per dire che esiste una proprietà “istanza di” e quindi qualsiasi numero della proprietà “sottoclasse di” tra ?item e l’elemento “film” (Q11424).

Se rimuovi l’asterisco (*) sulla riga 6 della query precedente ed esegui nuovamente la query, vedrai che la query non recupera quegli elementi che sono essi stessi un’istanza di film (Q11424). L’asterisco (*) dopo l’elemento del percorso significa “zero o più di questo elemento”. Quindi il modello di corrispondenza
?item wdt:P31/wdt:P279* wd:Q11424
dovrebbe corrispondere a:
?item wdt:P31 wd:Q11424.
o
?item wdt:P31/wdt:P279 wd:Q11424.
o
?item wdt:P31/wdt:P279/wdt:P279 wd:Q11424.
o
?item wdt:P31/wdt:P279/wdt:P279/wdt:P279 wd:Q11424.
e così via.

Operatore UNION

Corrispondenza del modello con una relazione OR

Nella sezione precedente abbiamo visto che se ci sono due condizioni di corrispondenza dei modelli, hanno una relazione AND: la query restituirà solo gli elementi che corrispondono a entrambi i modelli. Se vogliamo avere una relazione OR tra le condizioni, utilizziamo l’operatore UNION. La seguente query recupera gli elementi che fanno parte della serie di film di Star Wars oppure della serie di film di Star Trek.

Recupero di un valore di istruzione

Query che recuperano un valore di istruzione

Come mostrato nell’introduzione, Wikidata memorizza le informazioni sotto forma di dichiarazioni che hanno una struttura Elemento-Proprietà-Valore.

Nel nostro primo esempio, la nostra query restituisce elementi Wikidata che corrispondono al nostro modello di query: corrispondono a una specifica combinazione di Proprietà e Valore, ovvero hanno una proprietà P179 (parte di una serie) con un valore di Q22092344 (serie di film di Guerre stellari). In altre parole, la variabile con il nome “item” raccoglie quegli elementi Wikidata che hanno un’istruzione che corrisponde al modello:

?oggetto – ha proprietà:parte di una serie – con valore:Guerre stellari (serie di film)

In questo caso, viene recuperata la parte dell’elemento di una dichiarazione di corrispondenza. Ma le query non devono necessariamente restituire la prima parte (Elemento) delle istruzioni.

Nella seguente query, la variabile ?actor raccoglie i valori della proprietà membro del cast (P161) dell’elemento Guerre stellari Episodio IV: Una nuova speranza (Q17738). Vale a dire, la variabile raccoglie la terza parte (l’oggetto) delle affermazioni:

Skip to content