XML a JSON

BI-WI.21-24

Hierarchické datové formáty:

  • XML a JSON.
  • Dobře formovaný (well-formed) a validní (valid) XML dokument.
  • XSD a JSON Schema.
  • Formát JSON-LD.

Hierarchické datové formáty

  • Hierarchické datové formáty organizují data do stromové struktury, kde existují rodičovské a dceřiné prvky.
  • To znamená, že data mají jeden kořen (root), z něhož se větví další uzly
  • Tato struktura je vhodná pro reprezentaci datových sad, kde jednotlivé položky mají mezi sebou vztahy nadřazenosti a podřazenosti.
  • Mezi nejrozšířenější formáty tohoto typu patří XML a JSON.

XML (Extensible Markup Language)

  • XML je textový značkovací jazyk vyvinutý konsorciem W3C. Je navržen tak, aby byl čitelný lidmi i stroji.

  • Hlavní charakteristika: Klade důraz na sémantiku a popis struktury dat, nikoli na jejich prezentaci.

  • Každý element v XML je uzavřen do párových značek (tagů), které si definuje sám autor dokumentu.

  • Stavební kameny:

    • Prolog (XML deklarace) - První řádek dokumentu, specifikuje verzi a kódování, např. <?xml version="1.0" encoding="UTF-8"?>
    • Elementy (značky/tagy jako <kniha>),
    • atributy (vlastnosti elementů uvnitř tagu: <kniha id="123">),
    • textový obsah
    • jmenné prostory (Namespaces – řeší kolize názvů pomocí prefixů, např. html:table vs furniture:table).
  • Smíšený obsah (Mixed content):

    • XML exceluje v dokumentech, kde se střídá text se značkami (např. Přejděte na <odkaz>web</odkaz> školy.).
  • Vlastnosti:

    • Rozšiřitelnost: Umožňuje definovat vlastní značky.
    • Strojová i lidská čitelnost: Struktura je srozumitelná jak pro software, tak pro člověka.
    • Přísná pravidla syntaxe: Dokument musí být "dobře formovaný".
    • Podpora jmenných prostorů (namespaces): Řeší konflikty názvů elementů.
<osoba>
  <jmeno>Jan</jmeno>
  <prijmeni>Novák</prijmeni>
  <adresa>
    <ulice>Vodičkova</ulice>
    <cislo>15</cislo>
    <mesto>Praha 1</mesto>
  </adresa>
</osoba>

Dobře formovaný vs. Validní XML

Dobře formovaný dokument (Well-formed Document)

  • Dokument je považován za dobře formovaný, pokud splňuje všechna syntaktická pravidla XML.

  • Je to základní podmínka pro jakékoliv strojové zpracování dokumentu.

  • DŮSLEDEK: Pokud XML dokument není well-formed, XML parser (zpracovatel) musí vyhodit fatální chybu a okamžitě zastavit zpracování.

  • Pravidla pro dobrou formovanost

    1. Jeden kořenový element: Celý dokument musí být obsažen v jediném hlavním elementu.
    2. Správné uzavírání elementů: Každý otevírací tag (<tag>) musí mít odpovídající uzavírací tag (</tag>). Prázdné elementy lze zapsat jako <tag/>.
    3. Správné vnoření elementů: Elementy musí být hierarchicky správně vnořeny, nesmí se křížit. (Např. <A><B></A></B> je chyba).
    4. Atributy v uvozovkách: Hodnoty všech atributů musí být uzavřeny v jednoduchých nebo dvojitých uvozovkách.
    5. Rozlišování velikosti písmen: XML je case-sensitive, takže <Tag> a <tag> jsou dva různé elementy.

Validní dokument (Valid Document)

  • Dokument je validní, pokud je nejen dobře formovaný, ale navíc jeho struktura a obsah odpovídají pravidlům definovaným v externím nebo interním schématu.

  • Validace zaručuje, že dokument obsahuje očekávané elementy ve správném pořadí, se správnými datovými typy a kardinalitou.

  • DŮSLEDEK: Validace je proces navíc. Dokument může být perfektně dobře formovaný (projde parserem), ale nevalidní (např. v elementu <vek> pošleš text "třicet" místo čísla 30).

  • Pro validaci XML se používají především dva jazyky:

    • DTD (Document Type Definition): Starší a jednodušší způsob definice struktury. Má omezené možnosti, nepodporuje například datové typy nebo jmenné prostory.
    • XSD (XML Schema Definition): Modernější a výrazně mocnější nástroj. Umožňuje detailně definovat datové typy, omezení (např. rozsahy hodnot), jmenné prostory a složitá pravidla pro strukturu.

XSD (XML Schema Definition)

  • XSD, často označované jako XML Schema, je jazyk založený na XML pro popis struktury XML dokumentu.

  • Umožňuje definovat:

    • Názvy elementů a atributů, které se mohou v dokumentu vyskytovat.
    • Vztahy mezi elementy (pořadí, počet výskytů).
    • Datové typy pro elementy a atributy (např. xs:string, xs:integer, xs:date).
    • Omezující podmínky (např. minimální a maximální hodnota, regulární výrazy).
<xs:schema xmlns:xs="<http://www.w3.org/2001/XMLSchema>">
  <xs:element name="osoba">
	<xs:complexType>
	  <xs:sequence>
		<xs:element name="jmeno" type="xs:string"/>
		<xs:element name="prijmeni" type="xs:string"/>
		<xs:element name="adresa">
			...
		</xs:element>
	  </xs:sequence>
	</xs:complexType>
  </xs:element>
</xs:schema>

JSON (JavaScript Object Notation)

  • JSON je odlehčený formát pro výměnu dat, původně odvozený z jazyka JavaScript, dnes na něm ale zcela nezávislý.

  • Standardem pro REST API

  • Stavební kameny:

    • Objekt: Neuspořádaná dvojice klíč–hodnota vlnitých závorkách {}.
    • Pole: Uspořádaný seznam hodnot v hranatých závorkách [].
    • Základní datové typy: Řetězec (string), číslo (number), boolean (true/false), null.
  • Vlastnosti:

    • Jednoduchost: Má menší režii a je stručnější než XML.
    • Snadné parsování: Nativně podporován v JavaScriptu a většině moderních programovacích jazyků.
    • Datové typy: Přímo podporuje základní datové typy jako řetězce, čísla, booleovské hodnoty, pole a objekty.
{
  "jmeno": "Jan",
  "prijmeni": "Novák",
  "adresa": {
    "ulice": "Vodičkova",
    "cislo": 15,
    "mesto": "Praha 1"
  }
}

JSON Schema

  • JSON Schema je standard pro validaci struktury JSON dokumentů.

  • Je analogií k XSD, ale je určeno pro formát JSON a je samo napsané v JSONu.

  • Definuje, jaké klíče jsou v objektu povinné ("required": ["id", "jmeno"]).

  • Omezuje typy hodnot ("type": "integer", "type": "string").

  • Umožňuje pokročilá omezení pro pole (minItems, uniqueItems) či textové řetězce pomocí klíčového slova "format" (např. automatická kontrola, zda řetězec odpovídá formátu e-mailu nebo datumu).

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "http://example.org/moje.schema.json",
  "title": "Osoba",
  "type": "object",
  "properties": {
    "jmeno": {
      "type": "string"
    },
    "prijmeni": {
      "type": "string"
    },
    "adresa": {
      "type": "object",
      "properties": {
        "ulice": { "type": "string" },
        "cislo": { "type": "integer" },
        "mesto": { "type": "string" }
      },
      "required": ["ulice", "mesto"]
    }
  },
  "required": ["jmeno", "prijmeni"]
}

JSON-LD (JSON for Linking Data)

  • JSON-LD je rozšíření formátu JSON, které umožňuje propojit data napříč webem pomocí principů Linked Data.

  • Jeho cílem je přidat do běžného JSONu sémantický kontext tak, aby data byla srozumitelná nejen pro konkrétní aplikaci, ale i pro obecné strojové zpracování, například pro vyhledávače.

  • Tím z něj vytvoříme regulérní RDF graf (množinu trojic), aniž by se narušila čitelnost pro standardní webové vývojáře.

  • Toho dosahuje zavedením klíčového slova @context, které mapuje termíny v JSON dokumentu na koncepty definované ve veřejných slovnících (ontologiích), jako je například schema.org.

  • Využívá k tomu speciální klíčová slova začínající zavináčem (@):

    1. @context: Mapuje obyčejné textové klíče v JSONu na globální, jednoznačná IRI ze známých slovníků (např. z Schema.org nebo FOAF). Tím dává datům celosvětový význam.
    2. @id: Určuje jednoznačné IRI daného zdroje (subjektu). Říká, o čem konkrétně mluvíme.
    3. @type: Určuje třídu (typ) objektu (ekvivalent k rdf:type nebo zkratce a v Turtle).
{
  "@context": "https://schema.org/",
  "@type": "Person",
  "@id": "https://example.org/people/jan-novak",
  "name": "Jan Novák",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "Vodičkova 15",
    "addressLocality": "Praha 1"
  }
}

V tomto příkladu @context říká, že termíny jako Person nebo name mají být interpretovány podle definic na schema.org.


Vytvořeno: 20. 6. 2026, 13:15
Poslední aktualizace: 20. 6. 2026, 14:21