Wikidata:SPARQL query service/Building a query/Buildings in Polish city

From Wikidata
Jump to navigation Jump to search

English: This is a short, annotated guide on how to build a simple SPARQL query. Queries below are universal, but the explanation will be in Polish, as this is intended for Polish viewers. For a similar example in English see: Wikidata:SPARQL query service/Building a query/Museums on Instagram.

Polski: To jest krótki samouczek z informacją, jak budować zapytania do Wikidanych. Niestety zapytania w SPARQL mają dosyć specyficzną składnię, ale można budować własne zapytania na przykładach. Mam nadzieję, że poniższy przykład, a właściwie przykłady Ci w tym pomogą. Zauważ, że nie musisz rozumieć wszystkie. Śmiało wypróbuj przykłady i stwórz własne zapytania.

Krok 1 : Lista linkujących do Iławy (prosta lista)[edit]

Zacznijmy od listy elementów linkujących do Iławy (Iława (Q8194)). Najłatwiej będzie zacząć od czegoś, o czym wiemy, że jest w Iławie. Weźmy np. Q83606280. We właściwościach widać tam located in the administrative territorial entity (P131) z przypisanym Iława (Q8194).

# wyświetlamy element czyli numer Q z linkiem
SELECT ?item WHERE {
  # P131 -- znajduje się w jednostce administracyjnej
  # Q8194 -- Iława
  ?item wdt:P131 wd:Q8194 .
}
Try it!

No i OK. Mamy coś w rodzaju linkujących. Konkretnie mamy wszystko, co znajduje się w jednostce administracyjnej Iława.

Hint
Zauważ, że komentarze są poprzedzone "#". To znaczy, że po "#" możesz napisać cokolwiek i nie będzie to powodować błędów.

Krok 2 : Etykiety po polsku[edit]

Dostaliśmy listę Q, ale nie jest to zbyt czytelne. Przyda się etykieta i może od razu opis.

# wyświetlamy element, etykietę i opis
SELECT ?item ?itemLabel ?itemDescription WHERE {
  # P131 -- znajduje się w jednostce administracyjnej
  # Q8194 -- Iława
  ?item wdt:P131 wd:Q8194 .
}
Try it!

Dodaliśmy etykietę (itemLabel) i opis (itemDescription), ale są one puste. Dlaczego? Bo nie powiedzieliśmy, w jakim języku chcemy dane. Wikidane są wielojęzyczne.

# wyświetlamy element, etykietę i opis
SELECT ?item ?itemLabel ?itemDescription WHERE {
  # P131 -- znajduje się w jednostce administracyjnej
  # Q8194 -- Iława
  ?item wdt:P131 wd:Q8194 .

  # umożliwia wyświetlanie etykiety i innych danych w języku polskim (?itemLabel)
  SERVICE wikibase:label { bd:serviceParam wikibase:language "pl". }
}
Try it!

Super! Teraz wszystko jest czytelne w wynikach 🙂.

Hint
Dobrze jest nie wpisywać tego ręcznie. Wypróbuj to zapytanie i dostosuj do swoich potrzeb.

Krok 3 : Budynki w Iławie (dodatkowe warunki)[edit]

Dobrze. Otrzymaliśmy listę wszystkiego, co jest w Iławie. Ale jak ją przefiltrować?

Filtrować można dodając kolejne warunki. Kolejne warunki dodajemy podobnie jak pierwszy. Czyli ?item wdt:<właściwość> wd:<wartość> . (pamiętaj o kropce na końcu).

Dodajmy warunek z numerem właściwości: instance of (P31) oraz wartością: building (Q41176).

# wyświetlamy element, etykietę i opis
SELECT ?item ?itemLabel ?itemDescription WHERE {
  # P131 -- znajduje się w jednostce administracyjnej
  # Q8194 -- Iława
  ?item wdt:P131 wd:Q8194 .
  
  # wszystko co ma klasę (jest to=p31) budynku (Q41176)
  ?item wdt:P31 wd:Q41176 .
  
  # umożliwia wyświetlanie etykiety i innych danych w języku polskim (?itemLabel)
  SERVICE wikibase:label { bd:serviceParam wikibase:language "pl". }
}
Try it!

No i działa. Prawie... Zniknęło nam z listy Q83606280. Zajmiemy się tym w następnym kroku.

Hint
Klasy i podklasy w Wikidanych działają prawie tak samo jako kategorie na Wikipedii. To znaczy jeśli coś jest "centrum kultury", to jest tak jakby w kategorii wszystkich centrów kultury. Jednocześnie klasa cultural center (Q1329623) ma podklasę building (Q41176). Taka hierarchia.

Krok 4 : Więcej budynków w Iławie (rozszerzanie warunków)[edit]

W naszym przypadku cultural center (Q1329623) ma podklasę building (Q41176). Czyli chcemy wylistować wszystko, co jest lub jest podklasą budynku. Zapisuje się to z ukośnikiem.

# wyświetlamy element, etykietę i opis
SELECT ?item ?itemLabel ?itemDescription WHERE {
  # P131 -- znajduje się w jednostce administracyjnej
  # Q8194 -- Iława
  ?item wdt:P131 wd:Q8194 .
  
  # wszystko co ma klasę (jest to=p31) lub podklasę (P279) budynku (Q41176)
  ?item wdt:P31/wdt:P279 wd:Q41176 .
  
  # umożliwia wyświetlanie etykiety i innych danych w języku polskim (?itemLabel)
  SERVICE wikibase:label { bd:serviceParam wikibase:language "pl". }
}
Try it!

Niby mamy już Q83606280, ale co z ratuszem (Town hall of Iława (Q9304400)). Czy ratusz nie jest budynkiem? 🤷‍♀️... Ale nie martw się, został już tylko ostatni krok i znajdziemy wszystko 🙂.

Krok 5 : Wszystkie budynki w Iławie (szukanie w głąb)[edit]

A zatem Town hall of Iława (Q9304400) jest to rathaus (Q543654), ale klasa rathaus (Q543654) nie jest bezpośrednio podklasą budynków. Gdzieś tam jednak od ratusza dojdziemy w końcu do klasy: public building (Q294422). I ta klasa jest podklasą budynku.

Zanim jednak zaczniesz panikować -- nie, nie musisz znać całej hierarchii. Język zapytań Wikidanych umożliwia przeszukanie całej hierarchii z użyciem "*" przy właściwości subclass of (P279).

# wyświetlamy element, etykietę i opis
SELECT ?item ?itemLabel ?itemDescription WHERE {
  # P131 -- znajduje się w jednostce administracyjnej
  # Q8194 -- Iława
  ?item wdt:P131 wd:Q8194 .
  
  # wszystko co ma klasę (jest to=p31) lub dowolnie głęboko podklasę (P279) budynku (Q41176)
  ?item wdt:P31/wdt:P279* wd:Q41176 .
  
  # umożliwia wyświetlanie etykiety i innych danych w języku polskim (?itemLabel)
  SERVICE wikibase:label { bd:serviceParam wikibase:language "pl". }
}
Try it!

Bonus 1: Współrzędne geograficzne (dodatkowe właściwości)[edit]

Zasadniczo mamy już pełną listę, ale może chcesz mieć dodatkowe właściwości. Budynki powinny mieć jakąś lokalizację (coordinate location (P625)). Możemy o nią zapytać i wyświetlić ją w tabelce.

# wyświetlamy element, etykietę, opis i współrzędne
SELECT ?item ?itemLabel ?itemDescription ?coordinates  WHERE {
  # P131 -- znajduje się w jednostce administracyjnej
  # Q8194 -- Iława
  ?item wdt:P131 wd:Q8194 .
  
  # wszystko co ma klasę (jest to=p31) lub dowolnie głęboko podklasę (P279) budynku
  ?item wdt:P31/wdt:P279* wd:Q41176 .

  # dodaj kryterium współrzędnych
  ?item wdt:P625 ?coordinates . 
  
  # umożliwia wyświetlanie etykiety i innych danych w języku polskim (?itemLabel)
  SERVICE wikibase:label { bd:serviceParam wikibase:language "pl". }
}
Try it!

Bonus 2: Mapa budynków w Iławie (zmiana widoku)[edit]

Mamy współrzędne, to może da się wyświetlić mapę? Da się! Można zmienić widok z tabelki na mapę ręcznie (nad tabelką).

Ale można też wymusić, żeby mapa była domyślnym widokiem dopisując magiczny komentarz #defaultView:Map.

#defaultView:Map

# wyświetlamy element, etykietę, opis i współrzędne
SELECT ?item ?itemLabel ?itemDescription ?coordinates  WHERE {
  # P131 -- znajduje się w jednostce administracyjnej
  # Q8194 -- Iława
  ?item wdt:P131 wd:Q8194 .
  
  # wszystko co ma klasę (jest to=p31) lub dowolnie głęboko podklasę (P279) budynku
  ?item wdt:P31/wdt:P279* wd:Q41176 .

  # dodaj kryterium współrzędnych
  ?item wdt:P625 ?coordinates . 
  
  # umożliwia wyświetlanie etykiety i innych danych w języku polskim (?itemLabel)
  SERVICE wikibase:label { bd:serviceParam wikibase:language "pl". }
}
Try it!
Hint
Formalnie zamiast "?coordinates" mogliśmy wpisać "?kopytko" (na liście kolumn i w kryterium). Problem jedynie w tym, że żeby działał widok mapy, to musimy użyć nazwy "?coordinates". W widoku tabeli można używać dowolnych nazw.

Bonus 3: Budynki w Iławie bez współrzędnych (bez właściwości)[edit]

Wszystko fajnie, ale jak sprawdzić, które budynki nie mają współrzędnych?

Nie ma problemu! Użyjemy FILTER NOT EXISTS.

# wyświetlamy element, etykietę i opis
SELECT ?item ?itemLabel ?itemDescription WHERE {
  # P131 -- znajduje się w jednostce administracyjnej
  # Q8194 -- Iława
  ?item wdt:P131 wd:Q8194 .
  
  # wszystko co ma klasę (jest to=p31) lub dwolnie głęboko podklasę (P279) budynku
  ?item wdt:P31/wdt:P279* wd:Q41176 .
  
  # umożliwia wyświetlanie etykiety i innych danych w języku polskim (?itemLabel)
  SERVICE wikibase:label { bd:serviceParam wikibase:language "pl". }

  # bez wpisanej właściwości współrzędne geograficzne (P625)
  FILTER NOT EXISTS {
    ?item wdt:P625 ?coordinates .
  }
}
Try it!

Dodatkowe informacje (hints)[edit]

  • Pod każdym przykładem jest link, w którym jest to zapytanie. Nie musisz go kopiować.
  • Możesz swobodnie zmieniać zapytania. Zmieniasz tylko to, co widzisz (nie zmieniasz przykładów). Śmiało eksperymentuj 👩‍🏫🧪.
  • Proste zapytania możesz budować kreatorem -- naciśnij (i) w pasku narzędziowym obok zapytania (przycisk "Show query explantion", otwiera panel "Pomocnik zapytania").
  • Możesz zapisać sobie link do swojego zapytania -- skopiuj URL z paska adresowego lub uzyskaj skróconą wersję z lewej strony.
  • Wykonując zapytanie zawsze dostajesz świeże dane. Link zawiera tylko zapytanie, a nie jego wyniki.