Utente:ValterVB/Sandbox/SPARQL

Da Wikipedia, l'enciclopedia libera.
Vai alla navigazione Vai alla ricerca

Query semplice[modifica | modifica wikitesto]

Vogliamo l'elenco di tutti gli item dei figli di Johann Sebastian Bach. In questo caso bisogna cercare tutti gli item che hanno la proprietà P22 (padre) = Q1339 (Johann Sebastian Bach). Questa è la query:

SELECT ?item
WHERE
{
    ?item wdt:P22 wd:Q1339.
}

Provala!

?item rappresenta una "variabile" che conterrà tutti gli item che corrispondono al criterio indicato(P22=Q1339). Tutti i nomi di variabili iniziano con un punto interrogativo. wdt: e wd: sono i prefissi, per ora basta sapere che ci vogliono, il punto alla fine della riga serve per indicare la fine del comando.

Tutto quello che appare dopo il SELECT ma prima del WHERE rappresenta quello che deve essere visualizzato. In questo caso c'è solo ?item che significa "mostra il Qnumber"

Etichette e descrizioni[modifica | modifica wikitesto]

Se una variabile rappresenta un item , abbiamo la possibilità di visualizzare anche l'etichetta e la descrizione corrispondente utilizzando un "servizio":

SELECT ?item ?itemLabel ?itemDescription
WHERE
{
    ?item wdt:P22 wd:Q1339.
    SERVICE wikibase:label { bd:serviceParam wikibase:language "it". }
}

Provala!

Una volta aggiunto il "servizio" per visualizzare l'etichetta dell'item basta aggiungere la parola Label al nome della variabile (?itemLabel), se ci interessa la descrizione basta aggiungere la parola Description al nome della variabile (?itemDescription).

Nel caso non ci sia l'etichetta o la descrizione nella lingua selezionata non viene mostrato niente (DA VERIFICARE SE E' COSI' O VIENE USATA COMUNQUE IL FALLBACK DELLE LINGUE), si può però aggiungere altre lingue da usare in alternativa, basta separarle con una virgola e mettere nell'ordine di preferenza. Es. "SERVICE wikibase:label { bd:serviceParam wikibase:language "it,de,en". }" significa: usa prima l'italiano, se non presente usa il tedesco se non presente usa l'inglese.

Ordinamento[modifica | modifica wikitesto]

Se ci interessa che il risultato sia ordinato in qualche maniera particolare si può aggiungere una clausola di ordinamento al di fuori del "WHERE": In questo esempio applichiamo l'ordinamento alfabetico crescente all'etichetta.

SELECT ?item ?itemLabel ?itemDescription
WHERE
{
    ?item wdt:P22 wd:Q1339.
    SERVICE wikibase:label { bd:serviceParam wikibase:language "it". }
}
ORDER BY ?itemLabel

Provala!

In questo esempio applichiamo l'ordinamento alfabetico decrescente all'etichetta.

SELECT ?item ?itemLabel ?itemDescription
WHERE
{
    ?item wdt:P22 wd:Q1339
    SERVICE wikibase:label { bd:serviceParam wikibase:language "it". }
}
ORDER BY DESC(?itemLabel)

Provala!

Limitare il n° di risultati[modifica | modifica wikitesto]

In alcuni casi non ci serve l'elenco di tutti i risultati ma solo alcuni. Nell'esempio segunete si visualizzano solo i primi tre item:

SELECT ?item ?itemLabel ?itemDescription
WHERE
{
    ?item wdt:P22 wd:Q1339
    SERVICE wikibase:label { bd:serviceParam wikibase:language "it". }
}
LIMIT 3

Provala!

Aggiungere altri criteri[modifica | modifica wikitesto]

Con la query seguente estraiamo tutti gli item di film presenti limitando il risultato ai primi 1000. I film hanno la proprietà P31 (istanza di)=Q11424 (film)

SELECT ?item ?itemLabel ?itemDescription
WHERE
{
    ?item wdt:P31 wd:Q11424
    SERVICE wikibase:label { bd:serviceParam wikibase:language "it". }
}
LIMIT 1000

Provala!

Ma come fare se ci interessano solo i film in cui il regista è Steven Spielberg? Basta aggiungere un ulteriore criterio alla query selezionando solo quelli che hanno P57 (regia)=Q8877 (Steven Spielberg)

SELECT ?item ?itemLabel ?itemDescription
WHERE
{
    ?item wdt:P31 wd:Q11424.
    ?item wdt:P57 wd:Q8877.
    SERVICE wikibase:label { bd:serviceParam wikibase:language "it". }
}

Provala!

Label and description[modifica | modifica wikitesto]

Assegnare l'etichetta o la descrizione in una specifica lingua a una variabile, l'optional serve per evitare di filtrare solo per quelle che hanno quella lingua (si ottiene anche quelle che non hanno quella lingua), se ne può usare uno per lingua.

#Elementi che sono istanza di gatto
SELECT ?item ?itEtichetta ?itDescrizione ?deEtichetta ?deDescrizione 
WHERE
{
    ?item wdt:P31 wd:Q146 .
    OPTIONAL {?item rdfs:label ?itEtichetta. FILTER(lang(?itEtichetta) = 'it')}
    OPTIONAL {?item schema:description ?itDescrizione. FILTER(lang(?itDescrizione)="it") } .
    OPTIONAL {?item rdfs:label ?deEtichetta. FILTER(lang(?deEtichetta) = 'de')}
    OPTIONAL {?item schema:description ?deDescrizione. FILTER(lang(?deDescrizione)="de") } .
}

Provala!

Sitelink[modifica | modifica wikitesto]

Elencare solo elementi che non hanno sitelink.

#Elementi che sono istanza di taxon
SELECT ?item 
WHERE 
{
  ?item wdt:P31 wd:Q16521.
  ?item wikibase:sitelinks 0 .
}
LIMIT 100

Provala!

Puntano qui/Back link[modifica | modifica wikitesto]

Elencare solo elementi che non hanno backlink in ns0

#Elementi che sono istanza di taxon
SELECT ?item 
WHERE 
{
  ?item wdt:P31 wd:Q16521.
  OPTIONAL{?backlink ?p1 ?item .} FILTER(!bound(?backlink))
}
LIMIT 100

Provala!

Numero di statement[modifica | modifica wikitesto]

Assegnare il n° di statement dell'elemento a una variabile. Nell'sempio sottostante si filtra solo gli item che hanno più di 10 statement.

#Elementi che sono istanza di taxon
SELECT ?item ?statementCount
WHERE 
{
  ?item wdt:P31 wd:Q16521.
  ?item wikibase:statements ?statementCount. FILTER(?statementCount > 10).
}
LIMIT 100

Provala!

Date[modifica | modifica wikitesto]

Filtro per anno uguale a 1936

#Elementi che sono istanza di umano
SELECT ?item ?birth WHERE {
  ?item wdt:P31 wd:Q5 .
  ?item wdt:P569 ?birth .
  FILTER((year(?birth) =1936))
} 
LIMIT 100

Provala!

Filtro per anno diverso da 1936

#Elementi che sono istanza di umano
SELECT ?item ?birth WHERE {
  ?item wdt:P31 wd:Q5 .
  ?item wdt:P569 ?birth .
  FILTER(!(year(?birth) =1936))
} 
LIMIT 100

Provala!