Při práci s relačními databázemi se lze spolehnout na explicitně definovanou strukturu v podobě tabulek, sloupců a jejich datových typů. Při vkládání libovolného záznamu do tabulky se ověřuje, zda je vložená hodnota kompatibilní s cílovým umístěním – například zda se někdo nepokouší uložit textový řetězec do sloupce určeného pro číselné hodnoty. Zároveň je přesně určeno, které hodnoty jsou povinné a bez jejichž vyplnění nelze záznam uložit.

Formáty jako CSV, JSON nebo XML však ve své základní podobě žádné striktní schéma nevyžadují. Neurčují tedy povinně podobu atributů, datových typů ani strukturu dokumentu. Pokud by byla struktura příliš pevně daná, výrazně by se tím omezila vyjadřovací schopnost těchto formátů.

Následující příklad ukazuje, že každý XML dokument by musel obsahovat pouze kolekci uživatelů, přičemž každý uživatel by měl mít povinně atributy jméno, příjmení a věk. Pokud by některý z těchto údajů chyběl, dokument by byl považován za nevalidní – což by bylo velmi svazující, zejména pokud by bylo potřeba stejný formát použít i pro jiné druhy dat, než jsou jen uživatelé.

Například takto by vypadal striktně definovaný XML dokument s uživateli:

<users>
  <user>
    <jmeno>Jan</jmeno>
    <prijmeni>Novák</prijmeni>
    <vek>30</vek>
  </user>
  <user>
    <jmeno>Petra</jmeno>
    <prijmeni>Svobodová</prijmeni>
    <vek>25</vek>
  </user>
</users>

A obdobně pro JSON:

{
  "users": [
    {
      "jmeno": "Jan",
      "prijmeni": "Novák",
      "vek": 30
    },
    {
      "jmeno": "Petra",
      "prijmeni": "Svobodová",
      "vek": 25
    }
  ]
}

Formáty jako JSON a XML tedy umožňují uložit prakticky libovolná data. Pokud ale je potřeba zajistit, že dokumenty budou mít určitou strukturu a správné datové typy, je možné nad nimi definovat tzv. schéma.

Schéma je samostatný soubor nebo definice, která určuje, co dokument musí obsahovat, jaké datové typy jsou povolené nebo které prvky jsou povinné. Pomocí validace proti schématu lze pak snadno ověřit, zda je dokument správně vytvořen.

Ukázka schématu a validace pro JSON (JSON Schema)

Například JSON Schema definující uživatele může vypadat takto:

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "properties": {
    "users": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "jmeno": { "type": "string" },
          "prijmeni": { "type": "string" },
          "vek": { "type": "integer" }
        },
        "required": ["jmeno", "prijmeni", "vek"]
      }
    }
  },
  "required": ["users"]
}

Pokud v datech chybí například prijmeni nebo vek není číslo, validace podle tohoto schématu selže.

Ukázka schématu a validace pro XML (XSD)

Pro XML se používá např. XSD (XML Schema Definition):

<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="users">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="user" maxOccurs="unbounded">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="jmeno" type="xs:string" />
              <xs:element name="prijmeni" type="xs:string" />
              <xs:element name="vek" type="xs:integer" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>