Přeskočit na obsah

Wikidata/SPARQL/1

Z Wikiverzity
Jak používat klasifikační nálepkuTato stránka je součástí projektu:
Příslušnost: všeobecná

Wikidata/Základy

Přednáška na Wikidata/Workshop/Pardubice sobota 2016-09-03 11:30: SPARQL (Vojtěch Dostál)

Zapsal a dle svého doplnil Kychot.


1. Subjekt – Predikát – Objekt

[editovat]
  • w:SPARQL [spárkl] od roku 2008
  • Wikidata si ten jazyk trochu upravily

http://query.wikidata.org


Základem jsou triplety: Subjekt - Predikát - Objekt

# Vesnice a kody casti obce 1.

SELECT ?polozka ?vesnice WHERE
{
# wdt
 ?polozka wdt:P2788 ?vesnice 
}

mw:Wikidata query service/User Manual

Zjistíme, že

PREFIX wdt: <http://www.wikidata.org/prop/direct/>

Podle toho dohledáme, že:

http://www.wikidata.org/prop/direct/P2788 = https://www.wikidata.org/wiki/Property:P2788 = d:Property:P2788 = kód části obce

Jak si ty položky (items) nazvu je celkem jedno, prostě hledám tvrzení (dvojice) položka (item) – hodnota, které jsou svázány Property:P2788.

SELECT ?pol ?ves WHERE
{
 ?pol wdt:P2788 ?ves
}

Dostanu seznam, který začíná:

Když si na těch položkách proklikám dole odkazy do WP, dovede mě to na:

Důležité je, mezi Identifikátory dole vidíme právě property P2788 kód části obec s příslušnými hodnotami (tj. kódy) a to je právě to, podle čeho to ten SPARQL vyhledal.

2. label

[editovat]

Samozřejmě proklikávat vše je otravné, abych zjistil, o jakou ves s jedná. Proto si nechám rovnou vypsat label:

# Vesnice a kody casti obce 2.

SELECT ?polozka ?vesnice ?polozkaLabel WHERE
{
# wdt
 ?polozka wdt:P2788 ?vesnice
 SERVICE wikibase:label
    {
 	bd:serviceParam wikibase:language "cs" .
    }
}

a dostanu výpis:

polozka vesnice polozkaLabel
d:Q12035065 112909 Malá Turná
d:Q12055792 152871 Srbce
d:Q10296209 20001 Žižín
... ... ...

Použili jsme prefixy:

PREFIX wikibase: <http://wikiba.se/ontology#>
PREFIX bd: <http://www.bigdata.com/rdf#>

3. Konkrétní výběr

[editovat]
# Vesnice a kody casti obce 3

SELECT ?polozka ?vesnice ?polozkaLabel WHERE
{
# wdt
 ?polozka wdt:P2788 '426' .
 ?polozka wdt:P2788 ?vesnice .
 SERVICE wikibase:label
    {
 	bd:serviceParam wikibase:language "cs" .
    }
}

Výsledek:

polozka  vesnice  polozkaLabel
wd:Q696995	426	Arnolec

4. souřadnice

[editovat]
# Vesnice a kody casti obce 4

SELECT ?polozka ?vesnice ?polozkaLabel ?souradnice WHERE
{
# wdt
 ?polozka wdt:P2788 '426' .
 ?polozka wdt:P2788 ?vesnice .
 ?polozka wdt:P625 ?souradnice .
 SERVICE wikibase:label
    {
 	bd:serviceParam wikibase:language "cs" .
	}
}

Kliknu na:

  • Display
    • Map

a vidím to na mapě

5. místo narození

[editovat]

Všichni lidé, kteří mají místo narození v Praze, a zobrazíme si místo narození. (Nefunguje pro Prahu, musí to být konkrétní místo, např. Žižkov.)

# Vesnice a kody casti obce 5

SELECT ?polozka ?mista ?kodcastiobce WHERE
{
  # wd: = názvy položek
  ?polozka wdt:P19 wd:Q378120 . #Žižkov
  # místa narození si musíme uložit do proměnné místa:
  ?polozka wdt:P19 ?mista .
  SERVICE wikibase:label
    {
 	bd:serviceParam wikibase:language "cs" .
	}
}

6. proměnná místa

[editovat]
# Vesnice a kody casti obce 6

SELECT ?polozka ?polozkaLabel ?mista ?mistaLabel ?kodcastiobce WHERE
{
  # wd: = názvy položek
  ?polozka wdt:P19 wd:Q378120 . #Žižkov
  # místa narození si musíme uložit do proměnné místa:
  ?polozka wdt:P19 ?mista .
  ?mista wdt:P2788 ?kodcastiobce .
  SERVICE wikibase:label
    {
 	  bd:serviceParam wikibase:language "cs" .
	}
}

Výsledky:

polozka polozkaLabel mista mistaLabel kodcastiobce
 wd:Q102483	Jaroslav Seifert	    wd:Q378120	Žižkov	490261
 wd:Q1729141	Karel Bejbl	            wd:Q378120	Žižkov	490261
 wd:Q2003873	Vojtěch Bradáč	            wd:Q378120	Žižkov	490261
 wd:Q3161652	Jan Dvořáček (fotbalista)   wd:Q378120	Žižkov	490261
... atd.

7. článek ve WP

[editovat]

Matěj rozšíří kód:

# Vesnice a kody casti obce 7

SELECT ?polozka ?polozkaLabel ?mista ?mistaLabel ?kodcastiobce WHERE
{
  # wd: = názvy položek
  ?polozka wdt:P19 wd:Q378120 . #Žižkov
  # místa narození si musíme uložit do proměnné místa:
  ?polozka wdt:P19 ?mista .
  ?mista wdt:P2788 ?kodcastiobce .
  ?polozka ^schema:about ?clanek .
  ?clanek schema:isPartOf <https://cs.wikipedia.org/> .
  SERVICE wikibase:label
    {
 	  bd:serviceParam wikibase:language "cs" .
	}
}

8. OPTIONAL

[editovat]
# Vesnice a kody casti obce 8

SELECT ?polozka ?polozkaLabel ?mista ?mistaLabel ?kodcastiobce WHERE
{
  # wd: = názvy položek
  ?polozka wdt:P19 wd:Q378120 . #Žižkov
  # místa narození si musíme uložit do proměnné místa:
  ?polozka wdt:P19 ?mista .
  ?mista wdt:P2788 ?kodcastiobce .
  OPTIONAL {
    ?polozka ^schema:about ?clanek .
    ?clanek schema:isPartOf <https://cs.wikipedia.org/> .
  } .
  SERVICE wikibase:label
    {
 	  bd:serviceParam wikibase:language "cs" .
    }
}

Výsledek: 16

9. Foto českých obcí

[editovat]

Na projektu Foto českých obcí:

Mapa vesnic, které nemají na Wikipedii obrázek:

Jinou možností je např. vyhledat si na Wikidatech vesnice, k nimž není přiřazena kategorie na Commons

#defaultView:Map
PREFIX wdt: <http://www.wikidata.org/prop/direct/>
SELECT ?item ?itemLabel ?kodobce ?coord ?categ WHERE {
  ?item wdt:P2788 ?kodobce .
  ?item wdt:P625 ?coord.
  MINUS { ?item wdt:P373 ?categ .}
  SERVICE wikibase:label { bd:serviceParam wikibase:language "cs"}
}