Veřejná data v XML: kurzy ČNB, Registr smluv a RÚIAN

Řada českých úřadů zveřejňuje data volně ke stažení v XML: kurzy České národní banky, Registr smluv nebo adresy z RÚIAN. Kapitola ukazuje, kde soubory najít, jak jsou postavené, jak z nich XPath dotazem vytáhnout, co potřebuješ, a na čem se nejčastěji chybuje.

Autor: Aktualizováno

Přehled zdrojů

ZdrojCo obsahujeFormát
Kurzy devizového trhu ČNBdenní kurzy asi 30 měn vůči koruněmalé XML, každý pracovní den
Registr smluvsmlouvy veřejných institucí nad 50 000 Kč bez DPHměsíční XML soubory, desítky až stovky MB
RÚIAN (ČÚZK)adresy, budovy, obce a jejich hraniceXML ve formátu GML v archivech ZIP
ARESúdaje o firmách podle IČOod roku 2023 REST API v JSON — XML služby skončily

Data v XML jsou z definice strojově čitelná: program je stáhne, ověří a zpracuje bez ručního přepisování. Stejný postup — stáhnout, zkontrolovat, vybrat data přes XPath — funguje u všech zdrojů na této stránce.

Kurzy ČNB

Česká národní banka vyhlašuje každý pracovní den kurzy devizového trhu. Kromě textové a HTML podoby je publikuje i jako XML na adrese …/kurzy_devizoveho_trhu/denni_kurz.xml. Kurzy k jinému dni získáš parametrem ?date=DD.MM.RRRR. Soubor je malý a celý stojí na atributech:

Výňatek z kurzovního lístku 25. 9. 2026
<?xml version="1.0" encoding="UTF-8"?>
<kurzy banka="CNB" datum="25.09.2026" poradi="186">
  <tabulka typ="XML_TYP_CNB_KURZY_DEVIZOVEHO_TRHU">
    <radek kod="EUR" mena="euro" mnozstvi="1" kurz="24,350" zeme="EMU"/>
    <radek kod="PHP" mena="peso" mnozstvi="100" kurz="34,186" zeme="Filipíny"/>
    <radek kod="USD" mena="dolar" mnozstvi="1" kurz="21,359" zeme="USA"/>
  </tabulka>
</kurzy>
AtributVýznam
kurzy/@datumden, pro který kurzy platí, ve tvaru DD.MM.RRRR
kurzy/@poradipořadové číslo kurzovního lístku v roce
radek/@kodkód měny podle ISO 4217
radek/@mnozstvipočet jednotek měny, ke kterým se kurz vztahuje (1, 100 …)
radek/@kurzkurz v Kč za uvedené množství, s desetinnou čárkou
VýrazCo vybereVýsledek
/kurzy/@datumdatum, ke kterému kurzy platí25.09.2026
//radek[@kod="EUR"]/@kurzkurz eura jako text — s desetinnou čárkou24,350
number(translate(//radek[@kod="EUR"]/@kurz, ",", "."))kurz eura jako číslo: čárku je nejdřív potřeba nahradit tečkou24.35
//radek[@mnozstvi != 1]/@kodměny, jejichž kurz je uvedený za víc než jednu jednotkuPHP
count(//radek)počet měn v souboru3

Dvě pasti: kurz je zapsaný s desetinnou čárkou, takže funkce number() ho bez úpravy vrátí jako NaN. A u měn s atributem mnozstvi="100" (třeba filipínské peso) je kurz za sto jednotek — před přepočtem ho vyděl množstvím.

Registr smluv

Zákon o registru smluv ukládá státu, krajům, obcím a dalším institucím zveřejňovat smlouvy s hodnotou nad 50 000 Kč bez DPH. Metadata všech smluv jsou otevřená data: na adrese data.smlouvy.gov.cz je XML index a v něm odkaz na soubor za každý měsíc.

Index souborů (zkráceno)
<index xmlns="http://portal.gov.cz/rejstriky/ISRS/1.2/">
  <dump>
    <mesic>1</mesic>
    <rok>2017</rok>
    <hashDumpu algoritmus="sha1">…</hashDumpu>
    <velikostDumpu>72499846</velikostDumpu>
    <casGenerovani>…</casGenerovani>
    <dokoncenyMesic>1</dokoncenyMesic>
    <odkaz>https://data.smlouvy.gov.cz/dump_2017_01.xml</odkaz>
  </dump>
  …
</index>

Index u každého souboru uvádí velikost a otisk SHA-1, takže stažený soubor lze ověřit. Hodnota dokoncenyMesic 0 znamená, že měsíc ještě běží a soubor se bude dál doplňovat. Při změně nebo znepřístupnění smlouvy se přegenerují i starší soubory, proto je stahuj znovu podle času generování. Každý záznam obsahuje smluvní strany, předmět, datum uzavření, hodnotu a odkazy na přílohy:

Struktura měsíčního souboru — jeden záznam, údaje zkrácené
<?xml version="1.0" encoding="UTF-8"?>
<dump xmlns="http://portal.gov.cz/rejstriky/ISRS/1.2/">
  <mesic>08</mesic>
  <rok>2026</rok>
  <dokoncenyMesic>1</dokoncenyMesic>
  <zaznam>
    <identifikator><idSmlouvy>…</idSmlouvy><idVerze>…</idVerze></identifikator>
    <odkaz>https://smlouvy.gov.cz/smlouva/…</odkaz>
    <casZverejneni>2026-08-03T10:12:40+02:00</casZverejneni>
    <smlouva>
      <subjekt>
        <datovaSchranka>…</datovaSchranka>
        <nazev>Město …</nazev>
        <ico>…</ico>
      </subjekt>
      <smluvniStrana>
        <nazev>Stavební firma s.r.o.</nazev>
        <ico>…</ico>
      </smluvniStrana>
      <predmet>Oprava chodníku v ulici …</predmet>
      <datumUzavreni>2026-07-28</datumUzavreni>
      <hodnotaBezDph>185000</hodnotaBezDph>
    </smlouva>
    <prilohy>
      <priloha>
        <nazevSouboru>smlouva.pdf</nazevSouboru>
        <odkaz>https://smlouvy.gov.cz/smlouva/soubor/…</odkaz>
      </priloha>
    </prilohy>
    <platnyZaznam>1</platnyZaznam>
  </zaznam>
</dump>

Všechny elementy leží ve výchozím jmenném prostoru http://portal.gov.cz/rejstriky/ISRS/1.2/. XPath 1.0 výchozí jmenný prostor nezná, proto výraz bez prefixu nenajde nic a musíš si zavést vlastní prefix — zde s (viz Jmenné prostory):

VýrazCo vybereVýsledek
//s:zaznam/s:smlouva/s:predmetpředměty všech smluvOprava chodníku v ulici …
sum(//s:smlouva/s:hodnotaBezDph)součet hodnot smluv bez DPH185000
//smlouvabez prefixu nenajde nic — elementy jsou ve výchozím jmenném prostoru(nic)

Měsíční soubor má desítky až stovky megabajtů. Do prohlížeče ani do Excelu se nevejde pohodlně; zpracuj ho programem, který čte XML proudově (SAX, StAX, iterparse v Pythonu) — rozdíl vysvětluje kapitola Jak funguje XML.

RÚIAN: adresy a území

Registr územní identifikace, adres a nemovitostí (RÚIAN) spravuje ČÚZK. Data vydává ve výměnném formátu RÚIAN (VFR): jde o XML ve formátu GML (Geography Markup Language), které vedle adres nese i geometrii — polohu adresních míst, obrysy budov a hranice obcí. Soubory jsou zabalené v archivech ZIP.

  • Stavová data — celý stav k poslednímu dni měsíce, za celou republiku nebo po obcích.
  • Změnová data — jen změny od zvoleného data, pro průběžnou aktualizaci.

Soubory stáhneš přes aplikaci Veřejný dálkový přístup (VDP) nebo automaticky přes kanály Atom; archiv měsíčních souborů je na services.cuzk.gov.cz/vfr. Data jsou otevřená pod licencí CC BY 4.0. Pokud potřebuješ jen seznam adres bez geometrie, ČÚZK nabízí i jednodušší adresní místa ve formátu CSV.

A co ARES?

Registr ekonomických subjektů ARES dlouho nabízel XML služby a mnoho starších návodů s nimi pořád počítá. Nový ARES na ares.gov.cz ale od roku 2023 poskytuje údaje o firmách přes REST API v JSON a původní XML služby byly vypnuty. Pro práci s JSON použij náš JSON validátor a nástroje.

Postup pro jakýkoli zdroj

  1. Stáhni soubor a ověř, že je dobře formovaný — třeba v XML validátoru.
  2. Pokud poskytovatel zveřejňuje XSD, ověř soubor proti němu; změnu formátu tak zjistíš dřív, než rozbije zpracování.
  3. Najdi jmenné prostory v kořenovém elementu a zaveď si pro ně prefixy.
  4. Vyzkoušej výrazy XPath na malém výňatku, teprve pak je pusť na celý soubor.
  5. Čísla a data převeď z textu až při zpracování — české zdroje často používají desetinnou čárku a datum DD.MM.RRRR.