Datové formáty

Na dnešním cvičení se podíváme na datové formáty. Představíme si dva nejznámější a nejpoužívanější formáty, konkrétně na XML a JSON. Vysvětlíme si, k čemu slouží, jakým způsobem zapisují a strukturují data a v jakých situacích se nejčastěji využívají. Pro ukázky budeme používat prostředí VS Code a rozšíření XML od Red Hat.

Datový formát je přesně definovaný způsob zápisu a uspořádání dat, který určuje, jak jsou informace strukturovány, kódovány a interpretovány při ukládání nebo přenosu. Stanovuje pravidla pro reprezentaci jednotlivých datových prvků (např. textu, čísel nebo seznamů) i jejich vzájemných vztahů. Díky existenci datových formátů mohou různé systémy data nejen ukládat, ale také si je navzájem předávat a správně zpracovávat. Každý datový formát má přesně danou syntaxi a sémantiku, což zajišťuje jednoznačnost a konzistenci při práci s daty napříč různými prostředími a technologiemi.

XML

XML (Extensible Markup Language) je textový datový formát určený pro ukládání a přenos strukturovaných dat. Umožňuje popsat data pomocí vlastních značek (tagů), které určují jejich význam a vzájemné vztahy. Díky tomu je XML velmi flexibilní, jelikož si uživatel může definovat vlastní strukturu podle vlastní potřeby. Jeho použití je široké: používá například pro výměnu dat mezi různými systémy nebo ukládání konfiguračních souborů. Výhodou je jeho přehlednost a možnost přesné validace dat, nevýhodou pak větší objem dat oproti jednodušším formátům. Podívejme se nyní na jeho syntax.

Syntaxe

Syntaxe XML je (podobně jako HTML) založená na značkách (tagy), které popisují jednotlivé části dat. Každý prvek má obvykle otevírací a ukončovací značku, mezi kterými se nachází obsah. Značky můžeme pojmenovat podle potřeby, ale musí být správně zanořené a uzavřené. XML dokument má jeden kořenový prvek, který obsahuje všechny ostatní. Na začátku XML souboru se nachází tzv. XML deklarace. Ta určuje verzi XML a kódování znaků.

<?xml version="1.0" encoding="UTF-8"?>
<studenti>
    <student>
        <jmeno>Jan Novák</jmeno>
        <vek>20</vek>
        <obor>Informatika</obor>
    </student>
</studenti>

Každý tag může mít atributy. Ty slouží k bližší specifikaci obsahu elementu. Stejně jako v HTML můžeme i do XML vložit komentář.

Doplňme, že každý XML soubor má příponu .xml.

XML Schémata

Často potřebujeme data nejen strukturovat, ale také přesně určit, jaký obsah mohou jednotlivé prvky obsahovat a v jaké podobě. Samotné XML sice umožňuje definovat strukturu pomocí značek, ale neříká nic o tom, zda jsou data správná nebo jakého typu mají být. Z tohoto důvodu se používají XML schémata.

XML schéma je formální popis struktury XML dokumentu, který určuje pravidla pro to, jak má XML soubor vypadat a jaká data může obsahovat. Pomocí schématu lze definovat, jaké elementy se v dokumentu mohou nacházet, v jakém pořadí, jaké datové typy obsahují, které jsou povinné nebo volitelné a jaké mohou mít atributy. Díky tomu je možné XML dokumenty automaticky kontrolovat a ověřovat jejich správnost. Nejčastěji se pro definici XML schémat používá jazyk XSD (XML Schema Definition), který umožňuje přesně popsat strukturu a pravidla pro XML data.

XML schéma vytvoříme jako samostatný XML soubor s příponou .xds, ve kterém definujeme strukturu a pravidla pro konkrétní XML dokument. Začíná kořenovým elementem <xs:schema>. Uvnitř něj popisujeme jednotlivé prvky pomocí značek jako <xs:element> (obdoně atributy). U každého prvku můžeme určit jeho název, datový typ (např. string, integer) a případně i další omezení, jako je počet výskytů nebo povinnost vyplnění. Pokud ale prvek obsahuje další vnořené prvky, používáme <xs:complexType>, který umožňuje definovat složitější strukturu složenou z více elementů. Jejich pořadí pak určujeme pomocí <xs:sequence>, která zajišťuje, že jednotlivé prvky musí v XML dokumentu následovat přesně v definovaném pořadí. Schéma se následně připojí k XML dokumentu, který následně validujeme.

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

    <xs:element name="studenti">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="student">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="jmeno" type="xs:string"/>
                            <xs:element name="vek">
                                <xs:simpleType>
                                    <xs:restriction base="xs:integer">
                                        <xs:minInclusive value="15"/>
                                        <xs:maxInclusive value="100"/>
                                    </xs:restriction>
                                </xs:simpleType>
                            </xs:element>
                            <xs:element name="obor" type="xs:string"/>
                        </xs:sequence>
                        <xs:attribute name="osCislo" type="xs:string"/> 
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

</xs:schema>

Jazyk XML toho samozřejmě nabízí mnohem více. Přehled je v dokumentaci jazyka.

Připojení shcématu k XML souboru je potom poměrně jednoduché. Stačí do XML souboru, ihned za deklaraci, doplnit následující:

<?xml-model href="schema.xsd"?>

JSON

JSON (JavaScript Object Notation) je textový formát určený pro ukládání a výměnu strukturovaných dat. Je navržen tak, aby byl snadno čitelný pro člověka a jednoduše zpracovatelný v počítači. Nejčastěji se používá při komunikaci mezi webovým prohlížečem a serverem (API), ale také pro ukládání konfigurací nebo jednoduchých datových struktur v aplikacích. Díky své jednoduchosti a přehlednosti je dnes jedním z nejpoužívanějších datových formátů.

Syntaxe

JSON je založený na dvojicích klíč–hodnota. Data se zapisují do objektů { }, které obsahují jednotlivé položky, a do polí [ ], která slouží pro seznamy hodnot. Klíče jsou vždy zapsány v uvozovkách. Hodnota mohou být text, číslo, logická hodnota (true/false), pole, další objekt nebo null.

{
  "jmeno": "Jan Novák",
  "vek": 20,
  "obor": "Informatika",
  "predmety": ["Matematika", "Programování", "Databáze"]
}

JSON Schémata

JSON Schema je nástroj, který slouží k definování struktury a pravidel JSON dat. Umožňuje přesně popsat, jaké klíče musí objekt obsahovat, jaké mají mít datové typy, které jsou povinné a jaká omezení musí splňovat. Díky tomu lze JSON data automaticky validovat a zajistit, že odpovídají očekávanému formátu. JSON Schema se často používá v API dokumentaci a při vývoji aplikací, kde je potřeba kontrolovat správnost přenášených dat.

Pro vytvoření JSON schématu stačí vytvořit běžný textový soubor s příponou .json, například schema.json, do kterého uložíme definici pravidel pro naše JSON data. Na začátku obvykle uvedeme klíč $schema, který určuje verzi schématu, a poté definujeme, s jakým typem dat pracujeme (array nebo object). Následuje část properties, kde popisujeme jednotlivé klíče, jejich názvy a datové typy, například text (string), celé číslo (integer) nebo pole (array). Nakonec můžeme pomocí required určit, která pole musí být vždy vyplněná.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "jmeno": {
      "type": "string",
      "description": "Jmeno a prijmeni studenta"
    },
    "vek": {
      "type": "integer"
    },
    "obor": {
      "type": "string"
    },
    "predmety": {
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "required": ["jmeno", "vek", "obor"]
}

Více možností opět v oficiální dokumentaci.

Úkoly k dnešnímu cvičení