Blog

prehľad lokalít LLS 1. cyklusKu dňu 31.5.2023 je od GKÚ dostupný Digitálny model reliéfu 5.0 (DMR 5.0) pre celé územie SR, viď https://www.geoportal.sk/sk/zbgis/lls/ . Údaje sú dostupné pod licenciou podobnou CC-BY, s ohľadom na veľkosť ich však možno získať iba osobným vyzdvihnutím.

Údaje boli získavané, spracúvané a následne zverejňované priebežne od roku 2017 a už od roku 2020 si našli uplatnenie napríklad aj v mapách komunity Freemap Slovakia:

screenshot z Freemap.sk, časť Zádielskej tiesňavy, aj s vrstvou tieňovania generovanej z DMR 5.0

Screenshot z Freemap.sk, časť Zádielskej tiesňavy, aj s vrstvou tieňovania generovanej z DMR 5.0, vďaka ktorej majú napr. turisti výborný prehľad o teréne

The Open Data Inventory (ODIN) sa zameriava na hodnotenie otvorenosti národných štatistických údajov:

Za rok 2020 je SR na 10. mieste (zo 187). Najväčšími nedostatkami je nedostupnosť niektorých údajov o výžive či zdraví. Silnou stránkou je otvorenosť a dostupnosť tých údajov, ktoré k dispozícii sú, najmä vďaka dostupnosti potrebných metaúdajov a použití otvorených formátov.

Keďže teda rebríček hodnotí iba štatistické údaje, tak na výsledok má zrejme najväčší vplyv činnosť nášho Štatistického úradu.

European Data Portal vyhodnocuje Open Data (najmä) v krajinách EÚ (Open Data Maturity in Europe), pričom sa zameriava najmä na to, či a ako funguje národný dátový katalóg (použiteľnosť samotného katalógu, kvalita metaúdajov o datasetoch v katalógu, formát a dostupnosť samotných údajov na ktoré katalóg odkazuje, atď.) a tzv. "readiness" krajiny (či v krajine existuje Open Data plán, je stanovené a používané otvorené licencovanie, či existuje národná koordinácia, atď.). Po roku 2018 sa výrazne prihliada aj na dopady a kvalitu zverejnených údajov.

Za rok 2020 SR získala skóre 53% (čo je zlepšenie oproti 33% z predchádzajúcemu roku), obsadila spomedzi 35 krajín 28. miesto a zaradila sa medzi "beginners". Oproti roku 2019 je to udržanie si pozícií, aj keď v niektorých predchádzajúcich rokoch sme v medzinárodnom porovnaní na tom boli lepšie: "fast-trackers" v 2018 či "trendsetters" v 2017. Príčinou je najmä výrazne nižšia aktivita SR v ostatnom období v porovnaní s inými krajinami. SR nevyužila náskok získaný aktivitami v rokoch 2015-2017 a od roku 2019 je pod priemerom EÚ.

V roku 2018 report zaviedol úpravy hodnotenia v kategóriách "impact" (dopady) a "quality" (kvalita) aby tak o.i. usmernil zverejňovanie od "veľa" k "dobre". Kým za rok 2018 bolo skóre SR mierne nad priemer EÚ, tak za roky 2019 a 2020 už sú oboje pod priemerom EU28.

  • Kategória "impact" vyhodnocuje to, či a ako krajina sleduje dopady publikovania otvorených údajov. Skóre SR je 9% (čo nás radí na predposledné miesto) pričom najmenší dopad bol zaznamenaný v ekonomickej oblasti. Toto je zároveň kategória, v ktorej mala SR nízke skóre aj v predchádzajúcich obdobiach. Najväčšími nedostatkami v tejto oblasti sú:
    1. nedostupnosť (resp. iné nedostatky viažúce sa na použiteľnosť) dôležitých (high value) datasetov
    2. nedostatočné sledovanie a vyhodnocovanie dopadov otvorených údajov
  • Kategória "quality" sa zameriava na to, či krajina systematicky a automatizovane vyhodnocuje kvalitu zverejňovaných údajov. SR zaostáva najmä v automatizovanom vyhodnocovaní kvality zverejňovaných údajov. Nedostatkom je aj nesúlad kategórií použitých na data.gov.sk so štandardom DCAT-AP.

Report o.i. vyzdvihuje snahu mať prehľad o aplikáciách postavených na otvorených údajoch (viď https://data.gov.sk/apps) zároveň je to však aj položka v zozname identifikovaných nedostatkov.

Poznámka: Hodnotenie EUDP sa následne používa aj ako jedna z metrík v hodnotení EU DESI.

Dovolím si tiež vlastný komentár k "impact": Podľa predstaviteľov SR a aj strategických dokumentov je práve ekonomický dopad tým hlavným dôvodom, prečo štát podporuje publikovanie údajov. Pričom dopady by aj boli (viď napr. projekty typu FinStat, UvoStat a iné), len ich veľmi nesledujeme, čoho dokladom sú už spomínané 4 položky v zozname na https://data.gov.sk/apps .

Ďalej, SR spolu s ČR sú jediné krajiny, ktoré nevyhodnotili návštevnosť svojich dátových portálov. Ako priaznivec súkromia to za SR čiastočne vítam (že nie sú použité invazívne služby tretích strán). Aby sme však neboli v "úplnej tme", tak ako priaznivec otvoreného a slobodného softvéru by som odporučil aspoň použitie AWStats.

European Data Portal vyhodnocuje Open Data (najmä) v krajinách EÚ (Open Data Maturity in Europe), pričom sa zameriava najmä na to, či a ako funguje národný dátový katalóg (použiteľnosť samotného katalógu, kvalita metaúdajov o datasetoch v katalógu, formát a dostupnosť samotných údajov na ktoré katalóg odkazuje, atď.) a tzv. "readiness" krajiny (či v krajine existuje Open Data plán, je stanovené a používané otvorené licencovanie, či existuje národná koordinácia, atď.). Po roku 2018 sa výrazne prihliada aj na dopady a kvalitu zverejnených údajov.

Za rok 2019 sa SR zhoršila vo všetkých základných ukazovateľoch, obsadila spomedzi 32 krajín 28. miesto a zaradila sa medzi "beginners". Oproti roku 2018 je to výrazný prepad z 8. miesta a kategórie "fast-trackers". Pritom za rok 2017 sme boli na 12. mieste a v kategórii "trendsetters". Príčinou je najmä výrazne nižšia aktivita SR v ostatnom období v porovnaní s inými krajinami. SR nevyužila náskok získaný aktivitami v rokoch 2015-2017 a za rok 2019 je pod priemerom EÚ.

V roku 2018 report zaviedol úpravy hodnotenia v kategóriách "impact" (dopady) a "quality" (kvalita) aby tak o.i. usmernil zverejňovanie od "veľa" k "dobre". Kým za rok 2018 bolo skóre SR mierne nad priemer EÚ, tak za rok 2019 už sú oboje pod priemerom EU28.

  • Kategória "impact" vyhodnocuje to, či a ako krajina sleduje dopady publikovania otvorených údajov. Skóre SR je 8% pričom najmenší dopad bol zaznamenaný v ekonomickej oblasti. Toto je zároveň kategória, v ktorej mala SR nízke skóre aj v predchádzajúcich obdobiach.
    • komentár mimo EUDP report: Podľa predstaviteľov SR a aj strategických dokumentov je práve ekonomický dopad tým hlavným dôvodom, prečo štát podporuje publikovanie údajov.
  • Kategória "quality" sa zameriava na to, či krajina systematicky a automatizovane vyhodnocuje kvalitu zverejňovaných údajov. SR zaostáva najmä v automatizovanom vyhodnocovaní kvality zverejňovaných údajov.

Report o.i. vyzdvihuje snahu znižovať množstvo rôznych typov použitých licencií (poznámka mimo EUDP report: SR má oficiálne odporúčanie používať najmä licenciu CC0, prípadne CC-BY). Za rok 2019 si zmienku vyslúžila aplikácia UVOstat.sk .

Medzi identifikované nedostatky patrí najmä nízke povedomie o údajoch a (už spomenuté) ich nízke využitie (dopad) s čím súvisí resp. k čomu prispieva napr. nízke množstvo "high quality" datasetov, absencia hackathonov na štátnej úrovni, "strach" povinných osôb z GDPR či využívanie otvorených údajov samotnou verejnou správou.

Poznámka: Hodnotenie EUDP sa následne používa aj ako jedna z metrík v hodnotení EU DESI.

V rokoch 2017 až 2019 realizoval ÚSV ROS projekt "Podpora partnerstva a dialógu v oblasti participatívnej tvorby verejných politík". Jeho súčasťou bol aj projekt participatívneho rozpočtu pre Mesto Hlohovec, na ktorom spolupracoval aj Mestský úrad v Hlohovci a OZ Utopia. Vrámci projektu participatívneho rozpočtu boli realizované aj aktivity ohľadom zverejňovania otvorených údajov. Zverejňovanie započalo plánom, ktorého súčasťou bolo spustenie katalógu otvorených údajov a následné postupné pridávanie automatizovane zverejňovaných datasetov (autonmatizovane = pravidelnou replikáciou z back-end systému).

Medzi zverejnenými údajmi je aj programový rozpočet mesta, keďže je dôležitým vstupom pre participáciu občanov. A aby sme občanom uľahčili preskúmavanie rozpočtu, boli pripravené aj jeho vizualizácie:

Základný prehľad rozpočtu sú plánované výdavky zoskupené podľa aktivity formou rozklikávacieho rozpočtu alebo tzv. "sankey diagramu":

Podľa použitej klasifikácie je možné jednotlivé položky rozpočtu rozkliknúť do nižšej úrovne a získať tak prehľad o tom, ako sa celkový rozpočet "rozmieňa" na menšie časti. Pre zvolený pohľad je potom možné aj stiahnuť údaje vo formáte CSV. (Pozor, toto sú sumárne údaje pre práve zobrazenú vizualizáciu. Po získaní základného prehľadu sa potom občan môže "vrhnúť" aj na úplne presné dáta stiahnuté rovno z portálu mesta, kde sú údaje s presnosťou na konkrétne položky.)

Okrem klasifikácie podľa aktivity sú k dispozícii aj rôzne ďalšie, napr. ekonomická klasifikácia, stačí si vybrať vľavo v menu:

A po rozkliknutí môžeme ísť hlbšie:

  • bežné výdavky:
  • tovary a služby:

Pár technických detailov:

  • na vizualizáciu je použitá služba OpenSpending.org
  • údaje mesta vo formáte JSON sú skriptom sťahované, rozdelené po rokoch a konvertované do formátu Fiscal Data Package (CSV so samotnými údajmi a JSON s metaúdajmi a mapovaním)
  • po importe sú pripravené základné vizualizácie (viď linky v úvode), každý si však môže dáta preklikať "po svojom" a pripraviť aj iné typy vizualizácií
  • vytvorené vizualizácie je potom možné aj ďalej zdieľať či vkladať do ďalších stránok

A čo ďalej? Určite udržiavať vizualizácie aktuálne a prípadne priniesť viac. Napr. využiť to, že programové rozpočty už zverejňuje viac obcí a teda spustiť klon služby CityVizor.cz aj pre Slovensko (CityVizor je Open Source).

Peter Hanečák




Dva predchádzajúce príspevky na tému ortofoto vo Viedni a Prahe ma priviedli k napísaniu krátkeho hrubého sumáru ohľadom toho, ako sme na tom s ortofoto v podobe otvorených údajov v SR:

  1. naďalej chceme
  2. niečo už je, ...
  3. ..., ale nie je to ešte úplne ono
Naďalej chceme

Niektoré argumenty komunity resp. možných budúcich používateľov si osvojil aj štát a zverejňovanie údajov je:

Niečo už je

Geoportál už poskytuje ortofoto s tým, že najčerstvejšie snímky sú k dispozícii pre západné Slovensko a sú k dispozícii bezodplatne:

Na nejaké ľahké informatívne použitie pre viac aj menej zdatných občanov je to už veľmi dobrý začiatok.


foto: © GKÚ, NLC; r.2017

Nie je to ešte úplne ono

Jednou zo základných vlastností otvorených údajov je otvorená licencia (viď https://www.slov-lex.sk/pravne-predpisy/SK/ZZ/2014/55/#paragraf-52), preto boli medzičasom vypracované vzory dohôd o spoločnom využívaní súborov priestorových údajov a služieb priestorových údajov, pričom pre otvorené údaje odporúčajú licenciu CC0 alebo CC-BY-4.0 . Bez riadne uvedenej licencie nieje možné plnohodnotné využitie údajov a teda nie je možné ani napĺňať ciele NKIVS, viď napr. časť "3.1.3 Priblíženie verejnej správy k maximálnemu využívaniu údajov" v plnom znení koncepcie (PDF).

Ako som už naznačil vyššie, aktuálne podmienky zverejnené na Geoportále vyzerajú dobre, ale pre neprávnikov predsa len predstavujú štartovaciu prekážku v podobe 1) nutnosti posúdiť túto konkrétnu licenciu (či je otvorená resp. či povoľuje ten ktorý účel o ktorý na budúci používateľ snaží) a najmä 2) nutnosti vyhodnotiť kompatibilitu s inými licenciami, keďže bežné aplikácie takmer nutne potrebujú "mixovať" údaje z viacerých zdrojov.

Kompatibilita licencií býva veľkým problémom, a to aj v prípade dvoch otvorených licencií (obe môžu byť naozaj otvorené, ale navzájom nekompatibilné a teda "mixovanie" údajov nemusí byť aj tak možné). Aj to je dôvod, prečo NIPI neodporúča písanie vlastných licencií a vo vzorových dohodách uvádza licencie CC0 a CC-BY-4.0.

V roku 2015 zverejnila Viedeň na svojom Open Data portáli ortofoto pod licenciou CC-BY-3.0-AT (viď starší príspevok). V roku 2019 zverejnila ortofoto v podobe otvorených údajov aj Praha:


Keďže sa v SR v súčasnosti rozbieha činnosť dátových kancelárií a dátových kurátorov (viď povedzme položku "Zriadenie dátovej kancelárie vo verejnej správe" v Národnáňej koncepcii informatizácie verejnej správy (NKIVS)), tak o.i. vyvstala drobná praktická otázka, čo si má čerstvý nový dátový kurátor, alebo laik, predstaviť pod pojmom "čistenie dát"? Pojem to je vlastne veľmi dôležitý, keďže konzument údajov vie málokedy použiť údaje rovno v takej forme, v akej ich získal. Údaje totiž treba takmer vždy skonvertovať, prečistiť, spárovať a pod., aj preto idú mnohé štátne či súkromné investície to tzv. ETL nástrojov (ETL = Extract Transform Load), pričom práve krok "transform" má na starosti o.i. čistenie dát.

Čistenie obnáša mnohé veci, od jednoduchých (konverzie znakovej sady alebo použitých rozdeľovacích znakov, atď.) až po zložité (detekcia duplicít a preklepov, ich následná oprava, prepojenie údajov z jedného zdroja s údajmi z iného zdroja, atď.). Na začiatok si ukážme zopár jednoduchých príkladov. A aby príspevok nebol až taký "suchý", ilustrujem ich na otvorených údajoch z Elektronického kontraktačného systému (EKS), ktorých kópiu si môžete zadovážiť napr. na adrese https://github.com/OpenDataSk/eks-od-data .

Príklad EKS: ZoznamZakaziekReport_2018-12_.csv

Obsah súboru vyzerá nasledovne (prvé tri riadky):

"IdentifikatorZakazky","ZakazkaUrl","StavZakazky","PouzityPostup","ObjednavatelDruh","ObjednavatelObchodneMeno","ObjednavatelICO","ObjednavatelStat","ObjednavatelObec","ObjednavatelPSC","ObjednavatelUlica","DatumVyhlasenia","DatumZazmluvnenia","OpisnyFormularNazov","OpisnyFormularKlucoveSlova","OpisnyFormularCpv","OpisnyFormularDruh","OpisnyFormularKategoriaSluzieb","OpisnyFormularFunkcnaSpecifikacia","OpisnyFormularTechnickaSpecifikaciaTextova","OpisnyFormularTechnickaSpecifikaciaCiselna","MiestoPlneniaStat","MiestoPlneniaKraj","MiestoPlneniaOkres","MiestoPlneniaObec","MiestoPlneniaUlica","LehotaPlneniaOd","LehotaPlneniaDo","LehotaPlneniaPresne","MnozstvoJednotka","MnozstvoHodnota","MaximalnaVyskaZdrojov","ZmluvnyVztah","FinancovanieEU","HodnotiaceKriterium","LehotaNaPredkladaniePonuk","PocetNotifikovanychDodavatelov","VstupnaCena","PocetSutaziacich","PocetPredlozenychPonuk","ZaciatokAukcie","TrvanieAukcie_Minut","PredlzovanieAukcie_Minut","ProtokolOPriebehuZadavaniaZakazky","Priloha_c1_ZmluvnyFormularZakazky","Priloha_c2_VyslednePoradieDodavatelov","Priloha_c3_Zmluva","Priloha_c4A_ZaznamOSystemovychUdalostiachZakazky","Priloha_c4B_ZaznamOSystemovychUdalostiachElektronickejAukcie","AnonymnyZmluvnyFormularZakazky","ObjednavkovyFormularZakazky",
"Z201850369","https://portal.eks.sk/SpravaZakaziek/Zakazky/Detail/213294","zazmluvnená","§ 110 ZVO","§ 7 ods. 1 písm. d)","Národný onkologický ústav","00165336","Slovenská republika","Bratislava","83110","Klenová 1","21.11.2018 11:48:06","6.12.2018 12:10:00","Lieky ATC skupiny - N02BB02 Metamizol 500mg/ml, 1000mg/2ml","Metamizol 500mg/ml","33661200-3 Analgetiká; 60000000-8 Dopravné služby (bez prepravy odpadu)","Tovar; Služba","","Analgetiká","Technické vlastnosti: ATC skupina, Hodnota / charakteristika: N02BB02; Technické vlastnosti: názov účinnej látky, Hodnota / charakteristika: Metamizol; Technické vlastnosti: cesta podania, Hodnota / charakteristika: parenterálne; Technické vlastnosti: lieková forma, Hodnota / charakteristika: Injekčný roztok; Technické vlastnosti: doplnok, Hodnota / charakteristika: sol inj 10x2 ml/1000 mg","Technické vlastnosti: celkový obsah liečiva v celkovom objeme roztoku, Jednotka: mg, Minimum: , Maximum: , Presná hodnota: 1000; Technické vlastnosti: celkový objem roztoku, Jednotka: ml, Minimum: , Maximum: , Presná hodnota: 2","Slovenská republika","Bratislavský","Bratislava III","Bratislava - mestská časť Nové Mesto","Klenová 1","","","","bal","750,0000","2706,820","Rámcová dohoda","False","Cena bez DPH","6.12.2018 9:32:00","265","2706,820","3","181","6.12.2018 9:47:00","20","2","https://portal.eks.sk/Zakazky/StiahniZmluvnuPrilohuZakazky?correlationId=f050ab3a-0530-4034-a593-bd3d8b8ead69","https://portal.eks.sk/Zakazky/StiahniZmluvnuPrilohuZakazky?correlationId=1ef5f3f1-f214-420a-9657-89e377635bd3","https://portal.eks.sk/Zakazky/StiahniZmluvnuPrilohuZakazky?correlationId=442e98da-0b27-41cc-8df2-cae803bdf475","https://portal.eks.sk/Zakazky/StiahniZmluvnuPrilohuZakazky?correlationId=b8f00118-89f5-4ec2-aadd-845437332e27","https://portal.eks.sk/Zakazky/StiahniZmluvnuPrilohuZakazky?correlationId=534fde1f-e471-4711-bef1-2959b09ed466","https://portal.eks.sk/Zakazky/StiahniZmluvnuPrilohuZakazky?correlationId=224a89cc-11c7-4b9e-9b2e-aaaab68c5cde","https://portal.eks.sk/Zakazky/StiahniZmluvnuPrilohuZakazky?correlationId=e3e4c60e-d064-4c0f-b018-3b9fce8c89db","https://portal.eks.sk/Zakazky/StiahniZmluvnuPrilohuZakazky?correlationId=64d2fc59-ac09-4e0e-bf0c-cb8dfc55d49f",
"Z201851359","https://portal.eks.sk/SpravaZakaziek/Zakazky/Detail/214284","zazmluvnená","§ 110 ZVO","§ 7 ods. 1 písm. a)","Okresný súd Nové Mesto nad Váhom","42025524","Slovenská republika","Nové Mesto nad Váhom","91519","Hviezdoslavova 37","21.11.2018 15:12:43","3.12.2018 15:44:00","Zabezpečenie stravovania zamestnancov prostredníctvom stravných lístkov.","Stravné poukážky, dodanie stravných poukážok, zabezpečenie stravovania v zmluvných stravovacích zariadeniach","30199770-8 Stravné poukážky; 55520000-1 Služby hromadného stravovania; 60000000-8 Dopravné služby (bez prepravy odpadu)","Tovar; Služba","","Zabezpečenie stravovania zamestnancov objednávateľa formou stravných poukážok vo vybraných stravovacích zariadeniach zmluvných partnerov dodávateľa, ktorí sú oprávnení tieto služby poskytovať.; Poskytovanie predmetu zákazky musí byť v súlade s ustanovením §152 ods.2 zák. č. 311/2011 Z.z. Zákonníka práce v znení neskorších predpisov.; Počas platnosti zmluvy je dodávateľ povinný mať uzatvorené zmluvy na využitie stravných poukážok s minimálne 10 zariadeniami v sídle verejného obstarávateľa. V prípade, že dodávateľ danú podmienku počas účinnosti zmluvy nebude spĺnať je verejný obstarávateľ oprávnený od zmluvy odstúpiť.  ","Technické vlastnosti: Stravná poukážka obsahuje, Hodnota / charakteristika: názov a logo dodávateľa; Technické vlastnosti: Stravná poukážka obsahuje, Hodnota / charakteristika: ochranné prvky proti falšovaniu používané pre tlač cenných papierov; Technické vlastnosti: Stravná poukážka obsahuje, Hodnota / charakteristika: rok platnosti stravnej poukážky; Technické vlastnosti: Stravná poukážka obsahuje, Hodnota / charakteristika: nominálnu hodnotu stravnej poukážky","Technické vlastnosti: Nominálna hodnota jednej stravnej poukážky, Jednotka: €, Minimum: , Maximum: , Presná hodnota: 4,80; Technické vlastnosti: Predpokladané množstvo odobratých stravných poukážok, Jednotka: ks, Minimum: 40000, Maximum: 41666, Presná hodnota: ","Slovenská republika","Trenčiansky","Nové Mesto nad Váhom","Nové Mesto nad Váhom","Hviezdoslavova 37","1.1.2019 15:04:00","31.12.2021 15:04:00","","ks","41666,0000","199999,000","Zmluva o poskytovaní služieb","False","Cena bez DPH","3.12.2018 15:06:00","545","199999,000","5","8","3.12.2018 15:21:00","20","2","https://portal.eks.sk/Zakazky/StiahniZmluvnuPrilohuZakazky?correlationId=26e3343a-bad5-405b-a492-1c0d3bbba5b1","https://portal.eks.sk/Zakazky/StiahniZmluvnuPrilohuZakazky?correlationId=e8b6daec-b993-4539-8d33-701613d72962","https://portal.eks.sk/Zakazky/StiahniZmluvnuPrilohuZakazky?correlationId=27cc2092-4223-4532-ae03-ad59a978048e","https://portal.eks.sk/Zakazky/StiahniZmluvnuPrilohuZakazky?correlationId=0391480a-65bf-4ab3-9ce7-12c97dbdebab","https://portal.eks.sk/Zakazky/StiahniZmluvnuPrilohuZakazky?correlationId=afd84937-dae0-4a7b-a288-c0c8b4e23262","https://portal.eks.sk/Zakazky/StiahniZmluvnuPrilohuZakazky?correlationId=da8f5cb6-ceaf-4f09-aab6-5d8123b93db1","https://portal.eks.sk/Zakazky/StiahniZmluvnuPrilohuZakazky?correlationId=0f897ab4-6962-4c06-8405-6dc5598cfa95","https://portal.eks.sk/Zakazky/StiahniZmluvnuPrilohuZakazky?correlationId=ef3690e6-f63c-4fb7-924b-dcb2cbd2f375",
...

Prvý riadok je hlavička, vďaka ktorej máme lepší prehľad, ktorý stĺpec čo obsahuje. Super.

Ďalšie dva riadky sú príkladom obsahu. Je v nich však niekoľko položiek, ktoré síce nie sú zlé (sú v súlade so štandardom RFC 4180), ale mierne komplikujú ďalšiu prácu s údajmi (ak ich chcem povedzme spracúvať v Python skripte a neskôr v databáze):

položkaEKS údajčo potrebujem v Python-e resp. neskôr v DBpoznámka
DatumVyhlasenia"21.11.2018 11:48:06"21.11.2018T11:48:06o.i. konvertujeme formát dátumu, aby bol dátum v tzv. ISO formáte a teda vedel som ho použiť priamo ako premennú typu 'datetime' (t.j. dátum s časom)
MnozstvoHodnota"750,0000"750.0o.i. konvertujeme čiarku (používaná podľa slovenského pravopisu) na bodku (programátorská konvencia), aby bola hodnota priamo použiteľná ako premenná typu 'float' (t.j. desatinné číslo)
PocetNotifikovanychDodavatelov"250"250odstraňujeme úvodzovky, aby bola hodnota priamo použiteľná ako premenná typu 'integer' (t.j. celé číslo)

Príklad, ako potom vyzerá reálny (a nie úplne dokonalý) Python skript, ktorý také čistenie robí, možno nájsť tu:

https://github.com/OpenDataSk/eks-od-datastore-pusher/blob/master/datastore_updater.py#L291,L331

Úryvok:

def convert_date(eks_date):
    """Convert date used by EKS to ISO date, e.g.:
        '5.3.2018 9:00:00' -> '2018-03-05T09:00:00'
    """

    if len(eks_date) <= 0:
        return None

    date = datetime.datetime.strptime(eks_date, '%d.%m.%Y %H:%M:%S')
    return date.isoformat()

(Kód je k dispozícii ako Open Source - BSD licencia, takže ho môžete kľudne použiť ďalej, či už celý alebo po kúskoch.)

A čo si z tohto príkladu môžeme odniesť? V tomto jednoduchom prípade až tak veľmi nevadí, ak by X (X > 0) konzumentov údajov robilo dokola tie isté drobné "čistiace" operácie. Mnohí by sa ale aj tak potešili, ak by časť týchto operácií robiť nemuseli. To by sa dalo, v tomto konkrétnom prípade, dosiahnuť drobnými úpravami v spôsobe, akým EKS zverejňuje údaje (všetko v súlade so štandardom):

  • používať úvodzovky len keď naozaj treba, t.j. tam, kde sú v hodnote použité čiarky (t.j. nie v číslach a krátkych reťazcoch, a pod.)
  • v desatinných číslach používať bodku (nie čiarku) ako oddeľovač desatinných miest


Význam toho, ako presne sú údaje publikované stúpa s tým, ako veľmi a ako zložito treba údaje čistiť. Čím je čistenie zložitejšie, tým konzumenti údajov viac uvítajú úpravy zverejňovania, ktoré čistenie eliminujú alebo uľahčia. A tiež, čím viac je konzumentov (čím väčšie vyššie spomenuté X), tým väčší dopad majú aj malé zmeny.

Toť teda krátke priblíženie pre dátových kurátorov alebo aj laikov, ktorí by neskôr mohli zlepšiť zverejňovanie niektorých otvorených údajov.

(Niektoré zložitejšie prípady popíšem možno nabudúce.)

Peter Hanečák, 19.12.2018

obrázok: NASA: "Goddard Engineers Prepare Hubble's New Batteries"

V nadväznosti na ostatný blog post zo série "Porovnania s inými" (za jún 2015) dnes ponúkam po dvoch rokoch aktualizáciu porovnania Slovenska s niekoľkými ďalšími krajinami pokiaľ ide o počet zverejnených datasetov. Počty datasetov nie je úplne presná či všeobjímajúca metrika, ale ako čiastkový indikátor poslúži (nie je dataset ako dataset, niektoré sa dajú použiť viac a na dôležitejšie veci, iné menej, ale to sa tiež ťažko meria - ale ak datasetov pribúda, zvyčajne je to dobre). Zaujímavý je teda najmä vývoj v čase a tak v tomto porovnaní pribudol graf.

Porovnám konkrétne Slovensko (SR), Rakúsko (AT), Bulharsko (BG), Maďarsko (HU) a Rumunsko (RO) čo do počtu zverejnených datasetov a ich licencií (k 15.6.2017):


SRATBGHURO
počet datasetov11362399219352987
počet zdrojov (resources)53209533577210820218
počet datasetov s otvorenou licenciou1017 (89.5%)1957 (81.6%)1882 (85.8%)7 (13.5%)850 (86.1%)
počet datasetov s nie otvorenou licenciou11944231145137

"Živá" verzia grafu (s priebežne aktualizovanými údajmi) je k dispozícii na adrese https://opendatask.gitlab.io/viz-data_catalog_stats-dataset_count-sk_comparison/ .

Pozorovania
  1. (nové) Bulharsko spustilo svoj katalóg s prvým datasetom v máji 2015 (viď Bulgarian government publishes first open datasets). Začiatky boli pomalšie, o rok neskôr však zvýšili tempo pridávania datasetov a udržujú ho na vyššej úrovni než SR.
  2. (nové) Maďarsko naďalej nemá oficiálny dátový portál, a tak monitorujem aspoň ten, ktorý spustili dobrovoľníci a neziskové organizácie. Keďže ho prevádzkuje komunita, obsahuje informácie nie len o vládnych, ale aj komunitných zdrojoch údajov.
  3. Rumunsko a SR udržiavajú zhruba podobnú úroveň: v oboch portáloch pribúdajú datasety priebežne, zhruba rovnakým tempom, v SR nastal väčší skok smerom hore zhruba v novembri 2015, v Rumunsku v septembri 2016.
  4. V SR "hladina vody stúpa" naďalej, veľký podiel má na tom má stále aktivita Štatistického úradu, ktorý má aktuálne na konte 606 datasetov (viď https://data.gov.sk/dataset?organization=f4787c6f-9fa3-406c-b8d5-d374f1e1f2d3).
  5. V Rakúsku taktiež naďalej stúpa počet datasetov a drží sa na prvej priečke z porovnávaných (aj napriek nejakému upratovaniu vo februári, kedy ubudlo zhruba 500 datasetov).
  6. Počty datasetov s otvorenou licenciou sa vo väčšine prípadov držia vcelku vysoko (medzi 80 a 90%), čo je dôležité kvôli ich reálnemu použitiu ("Whoever wants to use existing data needs to know whether they have the right to do so", viď The state of open licensing in 2017).
  7. Oproti ostatnému porovnaniu vypadli údaje za ČR, Taliansko a UK, ktorých zber mi prestal fungovať (či už kvôli zmene technológie portálu alebo kvôli chybám v SSL certifikátoch).
    1. V ČR zhruba v čase písania ostatného porovnania (jún 2015) spustili novú verziu katalógu otvorených údajov z ktorej zatiaľ údaje o počtoch cez API zbierať neviem. Katalóg eviduje rádovo 130 tisíc datasetov, drvivú väčšinu z nich publikuje Český úřad zeměměřický a katastrální.
Možné vylepšenia tohto porovnania
  1. Bolo by zaujímavé porovnať aj zastúpenie použitých formátov a API. Je tam však veľká variabilita a navyše aj niektoré CSV je lepšie ako iné CSV a pod. Toť téma na ďalšie skúmanie.
  2. Bolo by zaujímavé vyčísľovať aj počty aplikácií postavených nad dátami. Takéto údaje však zatiaľ ucelene vedené nie sú.
Zdroje a metodika

Zdrojmi údajov sú API jednotlivých data katalógov:

Počty položiek sú získané jednoduchými "list" a "search" dotazmi, bez filtrovania či vyhodnocovania.

Čo je a čo nie je "otvorená licencia" je na rozhodnutí kurátorov daných katalógov. Dôležité totiž je, či a ako vyplnili položku "isopen" k jednotlivým datasetom. Pre potreby tohto porovnania je "isopen=true" brané ako "otvorená licencia" a zbytok ako "nie otvorená licencia".

Aktuálne údaje vo forme CSV si môžete stiahnuť na adrese https://gitlab.com/opendatask/data-catalog-stats . Kód harvestera údajov je na adrese  https://gitlab.com/opendatask/harvester-data-catalog-stats a kód vizualizácie na https://gitlab.com/opendatask/viz-data_catalog_stats-dataset_count-sk_comparison . Návrhy či pull-requesty s vylepšeniami sú vítané.

Peter Hanečák, 15.6.2017

15.11.2016 sme vypustili novú verziu Open Data Node (ODN) 1.6.0 . Tzv. Release Notes sú dostupné na adrese:

Release obsahuje drobné nové funkcie (tzv. DPU pre ETL časť: e-t-excelToCSV na extrakciu údajov z XLS súborov a q-sparqlAsk na validáciu Linked Data) a niekoľko bugfixov (v takmer všetkých častiach ODN, prebraté z upstream projektov).

Naposledy som o Open Data Node (ODN) v tejto Wiki písal 1.3.2016 o verzii 1.2.4 . Odvtedy sme vypustili aj ďalšie nové verzie:

Použitie ODN a ďalších výstupov projektu COMSODE vrámci data.gov.sk vyzerá pomohlo SR v hodnotení EUDP, takže dúfam, že ODN si čoskoro nájde uplatnenie aj v ďalších krajinách.

Error rendering Tweet https://twitter.com/PHanecak/status/786150014871605248. Please try again in 1 minute(s).

Peter Hanečák, 13.10.2016

Aby sme mali pokope zoznam datasetov, ktorých zverejnenie považujeme za dôležité, zriadil som tzv. "wish list":

https://github.com/OpenDataSk/SK-Dataset-WishList/issues

Toť aby bol operatívne k nahliadnutiu zoznam a k jednotlivým položkám aj nejaké zdôvodnenie. Zíde sa v prípade stretávania sa s úradníkmi či politikmi alebo na inšpiráciu. A tiež aby sme nezabudli, že už sme niekoho niekedy niečo pýtali.

Na začiatok som tam popridával napr. požiadavky zozbierané vrámci verejnej konzultácie z roku 2015, viď https://github.com/otvorenavlada/akcnyplan2015/tree/master/uloha-03 .

Samozrejme to, že tam niečo nie je, neznamená, že to má povedzme výnimku z PSI smernice či infozákona a že to zverejniť netreba. (smile)

Peter Hanečák, 13.10.2016

1.3.2016 sme vypustili novú verziu Open Data Node (ODN) 1.2.4 . Tzv. Release Notes sú dostupné na adrese:

Popri tom sme zverejnili aj ukážkovú aplikáciu na harvestovanie datasetov cez API, viď:

Keďže báza pre API je v ODN aj data.gov.sk rovnaká, t.j. CKAN Data Store, tak možno ukážkovú aplikáciu kombinovať s tým, čo je popísané v týchto blogoch:

V januári 2016 začalo MV SR v spolupráci s NASES zverejňovať údaje z Registra adries (RA) v podobe otvorených údajov prostredníctvom portálu data.gov.sk.

Keďže RA obsahuje o čosi viac než len zoznam adresných bodov, je na data.gov.sk zverejnený ako sada viacerých datasetov, viď https://data.gov.sk/dataset?tags=register+adries .

Nuž a je tu napr. otázka "takže aký je postup pre niekoho kto chce zistiť všetky adresy v meste X?" (viď Platforma Slovensko.Digital).

Úvod

Dátový model RA obsahuje zoznamy viacerých typov objektov:

  • adresné body
  • vchody
  • ulice
  • obce
  • ...

Zjednodušene povedané, jeden typ objektov = jeden zoznam = jedna DB tabuľka.

Mapovanie na datasety je teda realizované systémom jedna DB tabuľka = jeden dataset. V datasetoch sú potom údaje dostupne pod tzv. resources, konkrétne vždy dvojmo:

  1. konsolidované dáta: všetky časové verzie všetkých objektov - aktuálne aj historické
  2. zmenové dáta: jeden riadok v tabuľke predstavuje jednu zmenu a dokumentuje históriu zmien

A API je implementované pomocou CKAN DataStore, takže budeme postupovať podľa SQL API na baze CKAN DataStore: JOIN.

Krok 1

Chceme teda vyhľadávať cez názov mesta, takže nás najprv zaujíma dataset "Register Adries - Register obcí" (dokumentácia).

Údaje budeme brať z resource "Obce - konsolidované dáta" ku ktorému je podstatnou informáciou jeho ID "15262453-4a0f-4cce-a9e4-7709e135e4b8" (viď už spomenutý článok o SQL API na báze CKAN DataStore).

Zaujímajú nás pre jednoduchosť tieto položky:

  • municipalityName (názov obce): podla neho budeme vyhľadávať
  • objectId (identifikátor objektu): s ohľadom na dátovú schému, pomocou tohto identifikátora budeme filtrovať ulice patriace k mestu s týmto ID

Takže povedzme, že ideme hľadať adresy pre mesto Poprad. Prvý dopyt teda bude vyzerať takto:

SELECT "objectId", "municipalityName"
FROM "15262453-4a0f-4cce-a9e4-7709e135e4b8"
WHERE "municipalityName" = 'Poprad'

URL: https://data.gov.sk/api/action/datastore_search_sql?sql=SELECT%20%22objectId%22,%20%22municipalityName%22%20from%20%2215262453-4a0f-4cce-a9e4-7709e135e4b8%22%20WHERE%20%22municipalityName%22%20=%20%27Poprad%27

Výsledok (krátený):

{"help": "...", "success": true, "result": {
"records":[{"municipalityName": "Poprad", "objectId": "2087"}],
"fields": [{"type": "int8", "id": "objectId"}, {"type": "text", "id": "municipalityName"}],
"sql": "SELECT \"objectId\", \"municipalityName\" from \"15262453-4a0f-4cce-a9e4-7709e135e4b8\" WHERE \"municipalityName\" = 'Poprad'"}}

Krok 2

Poďme sa teda pozrieť na ulice v danom meste. Zaujíma nás dataset "Register Adries - Register ulíc" (dokumentácia).

Údaje vezmeme z resource "Ulice - konsolidované dáta" ktorého ID je "47f0e853-3a67-487e-b45f-3f5d099105cf".

Zaujímajú nás tieto položky:

  • streetName (názov)

  • municipalityIdentifiers (buď identifikátor obce alebo identifikátory mestských častí, cez ktoré ulica prechádza): tot by malo byt ID obce ktora nas zaujima
  • objectId (identifikátor objektu): s ohľadom na dátovú schému, pomocou tohto identifikátora budeme filtrovať vchody patriace k ulici s týmto ID

Takže ďalší jednoduchý dopyt:

SELECT "objectId", "municipalityIdentifiers"
FROM "47f0e853-3a67-487e-b45f-3f5d099105cf"
WHERE "municipalityIdentifiers" = '2087'

URL: https://data.gov.sk/api/action/datastore_search_sql?sql=SELECT%20%22objectId%22,%20%22municipalityIdentifiers%22%20from%20%2247f0e853-3a67-487e-b45f-3f5d099105cf%22%20WHERE%20%22municipalityIdentifiers%22%20=%20%272087%27

Výsledok (krátený):

{"help": "...", "success": true, "result": {
"records": [{"objectId": "39436", "municipalityIdentifiers": "2087"}, {"objectId": "40013", "municipalityIdentifiers": "2087"}, ...],
"fields": [{"type": "int8", "id": "objectId"}, {"type": "text", "id": "municipalityIdentifiers"}],
"sql": "..."}}


Zhruba to, čo sme čakali.

Takže poďme začať robiť JOIN:

SELECT "municipalityName", "streetName"
FROM "15262453-4a0f-4cce-a9e4-7709e135e4b8", "47f0e853-3a67-487e-b45f-3f5d099105cf"
WHERE "municipalityName" = 'Poprad' AND "15262453-4a0f-4cce-a9e4-7709e135e4b8"."objectId"::text = "47f0e853-3a67-487e-b45f-3f5d099105cf"."municipalityIdentifiers"

URL: https://data.gov.sk/api/action/datastore_search_sql?sql=SELECT%20%22municipalityName%22,%20%22streetName%22%20from%20%2215262453-4a0f-4cce-a9e4-7709e135e4b8%22,%20%2247f0e853-3a67-487e-b45f-3f5d099105cf%22%20WHERE%20%22municipalityName%22%20=%20%27Poprad%27%20AND%20%2215262453-4a0f-4cce-a9e4-7709e135e4b8%22.%22objectId%22::text%20=%20%2247f0e853-3a67-487e-b45f-3f5d099105cf%22.%22municipalityIdentifiers%22

Výsledok (krátený):

{"help": "...", "success": true, "result": {
"records": [{"municipalityName": "Poprad", "streetName": "Feldzamova"}, {"municipalityName": "Poprad", "streetName": "Marxova"}, ...],
"fields": [{"type": "text", "id": "municipalityName"}, {"type": "text", "id": "streetName"}],
"sql": "..."}}

Krok 3

A teraz poďme na vchody:

kde nás zaujímajú tieto položky:

  • buildingNumber (orientačné číslo vchodu)
  • streetNameIdentifier (identifikátor (StreetName/objectId) ulice)

Poďme rovno na JOIN (a pridajme aj LIMIT, nech zbytočne nepreťažujeme)::

SELECT "municipalityName", "streetName", "buildingNumber"
FROM "15262453-4a0f-4cce-a9e4-7709e135e4b8", "47f0e853-3a67-487e-b45f-3f5d099105cf", "011f4ec3-7a73-4dff-a63e-81b64cc52947"
WHERE "municipalityName" = 'Poprad' AND "15262453-4a0f-4cce-a9e4-7709e135e4b8"."objectId"::text = "47f0e853-3a67-487e-b45f-3f5d099105cf"."municipalityIdentifiers" AND "47f0e853-3a67-487e-b45f-3f5d099105cf"."objectId" = "011f4ec3-7a73-4dff-a63e-81b64cc52947"."streetNameIdentifier"
LIMIT 10

URL: https://data.gov.sk/api/action/datastore_search_sql?sql=SELECT%20%22municipalityName%22,%20%22streetName%22,%20%22buildingNumber%22%20from%20%2215262453-4a0f-4cce-a9e4-7709e135e4b8%22,%20%2247f0e853-3a67-487e-b45f-3f5d099105cf%22,%20%22011f4ec3-7a73-4dff-a63e-81b64cc52947%22%20WHERE%20%22municipalityName%22%20=%20%27Poprad%27%20AND%20%2215262453-4a0f-4cce-a9e4-7709e135e4b8%22.%22objectId%22::text%20=%20%2247f0e853-3a67-487e-b45f-3f5d099105cf%22.%22municipalityIdentifiers%22%20AND%20%2247f0e853-3a67-487e-b45f-3f5d099105cf%22.%22objectId%22%20=%20%22011f4ec3-7a73-4dff-a63e-81b64cc52947%22.%22streetNameIdentifier%22%20LIMIT%2010

Výsledok (krátený):

{"help": "...", "success": true, "result": {
"records": [{"municipalityName": "Poprad", "buildingNumber": "8", "streetName": "1.m\u00e1ja"}, {"municipalityName": "Poprad", "buildingNumber": "27", "streetName": "1.m\u00e1ja"}, ...],
"fields": [{"type": "text", "id": "municipalityName"}, {"type": "text", "id": "streetName"}, {"type": "text", "id": "buildingNumber"}],
"sql": "..."}}

Výsledok je vlastne tabuľka:

municipalityName

streetNamebuildingNumber
Poprad1.mája8
Poprad1.mája27
.........

Záver

SQL dopyt z kroku 3 by nám teda mal dať časť odpovede na zadanie, zbytok ponechávam na čitateľa. Pre praktické využitie sa ešte treba viacej venovať zoznamu stľpcov ktoré si vypýtame, zoradeniu a tomu, či kompletný výsledok stiahneme na jeden šup alebo použijeme stránkovanie na báze OFFSET + LIMIT či ORDER BY + WHERE.

Príklady sú naschvál zjednodušené, aby sa to čo najľahšie čítalo. Asi najväčším opomenutím je to, že v príkladoch neberiem do úvahy platnosť údajov (t.j. aktuálny dátum a položky validFrom a validTo). Možno niekedy nabudúce.


Doplnky

Indexy

Doplnok k 2.3.3016: V OpenData.sk skupine na Facebooku bol dopyt ohľadom toho, na ktorých stĺpcoch sú nastavené indexy. Keďže cez CKAN DataStore API zatiaľ nefunguje "explain", tak vedomosť o indexoch môže napomôcť pri vylaďovaní výkonu dopytov.

datasetresourcestĺpce na ktorých je index
Register budov (súpisných čísiel)Budovy (súpisné čísla) - zmenové dátaobjectId, versionId, validFrom, validTo, modified_timestamp, municipalityIdentifier, districtIdentifier
Budovy (súpisné čísla) - konsolidované dátaobjectId, versionId, validFrom, validTo, municipalityIdentifier, districtIdentifier
Register bytovByty - zmenové dátaobjectId, versionId, validFrom, validTo, modified_timestamp, buildingNumberIdentifier
Byty - konsolidované dáta

objectId, versionId, validFrom, validTo, buildingNumberIdentifier

Register častí obcí

 

Časti obcí - zmenové dáta

objectId, versionId, validFrom, validTo, modified_timestamp, municipalityIdentifier

Časti obcí - konsolidované dáta

objectId, versionId, validFrom, validTo, municipalityIdentifier

Register krajovKraj - zmenové dátaobjectId, versionId, validFrom, validTo, modified_timestamp
Kraj - konsolidované dátaobjectId, versionId, validFrom, validTo
Register obcíObce - zmenové dátaobjectId, versionId, validFrom, validTo, modified_timestamp, countyIdentifier, cityIdentifier
Obce - konsolidované dátaobjectId, versionId, validFrom, validTo, countyIdentifier, cityIdentifier
Register okresovOkresy - zmenové dátaobjectId, versionId, validFrom, validTo, modified_timestamp, regionIdentifier
Okresy - konsolidované dátaobjectId, versionId, validFrom, validTo, regionIdentifier
Register ulícUlice - zmenové dátaobjectId, versionId, validFrom, validTo, modified_timestamp, districtIdentifiers, municipalityIdentifiers
Ulice - konsolidované dátaobjectId, versionId, validFrom, validTo, districtIdentifiers, municipalityIdentifiers
Register vchodov (orientačných čísiel)Vchody (orientačné čísla) - zmenové dátaobjectId, versionId, validFrom, validTo, modified_timestamp, propertyRegistrationNumberIdentifier, streetNameIdentifier

Vchody (orientačné čísla) - konsolidované dáta

objectId, versionId, validFrom, validTo, propertyRegistrationNumberIdentifier, streetNameIdentifier

Open Data API napr. na data.gov.sk alebo na odn.opendata.sk je implementované na báze CKAN DataStore a poskytuje pre bežný používateľov dva základné spôsoby na prístup k údajov a vyhľadávanie v nich (viď http://docs.ckan.org/en/latest/maintaining/datastore.html#the-datastore-api):

  1. full-text vyhľadávanie (viď datastore_search)
  2. vyhľadávanie pomocou SQL (viď datastore_search_sql)

Zameriam sa najmä na ten druhý, t.j. dopytovanie pomocou SQL.

Z pohľadu ľudí, ktorí poznajú SQL má toto API jednu nepeknú vlastnosť: namiesto "pekných názvov" sú ako mená tabuliek použité "škaredé hash-e" (tzv. resource ID). Je to tak preto, lebo CKAN DataStore ukladá všetky datasety do jednej databáze systémom "jeden dátový zdroj = jedna tabuľka". A keďže si datasety a zdroje môže nazývať kto chce ako chce, je unikátnosť názvov tabuliek riešená tými škaredými hash-mi.

Tento "kozmetický nedostatok" nám však v prípade SQL dopytovania otvára jednu významnú možnosť: v SQL dopytoch môžeme robiť JOIN! Takže v prípadoch CKAN katalógov, ktoré využívajú DataStore (napr. už spomenutý data.gov.sk alebo ODN), môžeme robiť zložitejšie dopytovanie cez viaceré datasety naraz. Stačí si len všimnúť, aký "resource ID" ten ktorý dátový zdroj (resource) má, viď napr. datasetu Sponzori politických strán (odkopírovaný z Datanest-u) - vidno ho v URL alebo stačí kliknúť na "Data API" a posunúť sa trochu nižšie:

Takže poďme rovno na veľmi "primitívny investigatívny SQL dopyt" v ktorom okrem už spomenutého datasetu sponzorov politických strán použijeme aj dataset Vestník verejného obstrávania (taktiež z Datanest-u):

SELECT "SUPPLIER_COMPANY_NAME", "SUPPLIER_ICO", "ICO_DARCU", "FIRMA_DARCU"
FROM "ea9b28eb-da22-4594-9fb7-4609e8507982", "c6639c7e-92ad-4b31-8f74-e46eff96825a"
WHERE "SUPPLIER_ICO" = "ICO_DARCU" AND "ICO_DARCU" != ''
LIMIT 2

Stĺpce SUPPLIER_COMPANY_NAME a SUPPLIER_ICO sú z datasetu o obstarávaní a stĺpce ICO_DARCU a FIRMA_DARCU z datasetu o obdarúvaní. Hľadáme teda také IČO, ktoré dodávajú aj obdarúvajú (a keďže dopyt je primitívny, je to len jednoduchý prienik a závery treba robiť až po dôkladnej investigatíve). Tie úvodzovky to tam tiež trochu špatia, ale tu vstupuje do hry PostgreSQL, ktorý názvy stĺpcov (ak nie sú v úvodzovkách) najprv prevádza na malé písmená. A ak teda máme v zdroji názvy stĺpcov s použitím aj veľkých písmen, SQL dopyt nefunguje správne dokým názvy stĺpcov nedáme do úvodzoviek.

Dopyt vieme "zavolať" či už napr. cez curl alebo priamo kliknutím na linku:

http://odn.opendata.sk/api/action/datastore_search_sql?sql=SELECT%20%22SUPPLIER_COMPANY_NAME%22,%20%22SUPPLIER_ICO%22,%20%22ICO_DARCU%22,%20%22FIRMA_DARCU%22%20from%20%22ea9b28eb-da22-4594-9fb7-4609e8507982%22,%20%22c6639c7e-92ad-4b31-8f74-e46eff96825a%22%20WHERE%20%22SUPPLIER_ICO%22%20=%20%22ICO_DARCU%22%20AND%20%22ICO_DARCU%22%20!=%20%27%27%20LIMIT%202

(náš dopyt sme len vložili za '...?sql=')

Takže, hor sa na dopytovanie otvorených údajov. (smile)

V skratke: Cez CKAN DataStore API sa dajú robiť aj SQL dopyty cez viac datasetov pomocou JOIN. Okrem bežného SQL treba v tomto prípade pamätať najmä na to, že:

  • používame SQL tak, ako ho implementuje PostgreSQL
  • používame "resource ID" ako mená tabuliek
  • ak má stĺpec v názve veľké písmeno, treba názov stĺpca dávať do úvodzoviek

CKAN DataSTore API je generické v tom zmysle, že bolo navrhnuté bez znalosti štruktúry dát, ktoré sa cezeň publikujú. Výhoda je tá, že netreba designovať a implementovať API pre každý dataset zvlášť. Nevýhoda je, že takéto generické API nebude nikdy také "dobré", "pekné" či "efektívne" ako API kvalitne navrhnuté a implementované špeciálne pre nejaký dataset (ako napr. API Registera ÚZ).

 

Súvisiace články: