Úvod do YAML pro začátečníky

Photo of author

By etechblogcz

Jestliže se věnujete vývoji API, s formátem YAML jste se pravděpodobně setkali, i když je vaším primárním nástrojem pro serializaci dat JSON.

YAML se pyšní přehlednou syntaxí a je to praktický jazyk, který by neměl chybět ve vaší vývojářské sadě nástrojů.

Pojďme se společně podívat na jeho základy.

Serializace dat

Když chcete odeslat datovou strukturu nebo objekt po síti, například po internetu, musíte je převést do určitého formátu, aby byly čitelné a uchovatelné. Tento proces se nazývá serializace a je klíčový pro fungování webu. Běžným příkladem je načítání dat z databáze a jejich následný přenos webem.

Mezi oblíbené formáty pro serializaci patří JSON, YAML a XML.

V tomto článku se zaměříme na YAML, na jehož konci získáte solidní úvod do jeho fungování.

Co je YAML a proč je pro mě užitečný?

YAML je formát pro serializaci dat, jehož zkratka znamená „YAML Ain’t Markup Language“.

Hlavní výhodou YAML je jeho čitelnost a jednoduchost zápisu. Pokud potřebujete konfigurační soubor, který je snadno srozumitelný pro lidi, YAML je skvělá volba. YAML sice není kompletní náhradou za JSON a XML, protože i ty mají své výhody, ale rozhodně se vyplatí se ho naučit.

Další výhodou YAML je podpora různých datových typů, jako jsou objekty, pole, slovníky, seznamy a skalární hodnoty. Navíc má dobrou podporu v nejrozšířenějších programovacích jazycích jako JavaScript, Python, Ruby, Java a dalších.

YAML je citlivý na mezery a na velikost písmen. Taby nejsou univerzálně přijímány. Soubory YAML mají příponu .yaml.

Základní syntaxe YAML

Každý soubor YAML začíná znaky „—„, které označují jeho začátek.

Při tvorbě API je pro nás klíčová funkce mapování, kterou YAML nabízí.

Následující příklady ukazují, jak mapování v YAML vypadá.

---
name: James
boy: yes
GPA: 3.41

Syntaxe mapování je jednoduchá: klíč: hodnota. Důležitá je zde mezera, která je v YAML na rozdíl od JSON nebo XML zásadní.

YAML podporuje datové typy jako znaky, řetězce, celá čísla, čísla s plovoucí desetinnou čárkou a kolekce, například pole a seznamy, které se vytvářejí ze základních datových typů.

Datové typy v YAML

Podívejme se na následující příklad YAML:

---

MALE: FALSE

GPA: 3.61

ISSUES: NULL

NAME: “BIGYAN”

AGE: 16

První datový typ je boolean, který může mít hodnotu true nebo false. GPA je číslo s plovoucí desetinnou čárkou. YAML podporuje i datový typ null, což vidíme u „ISSUES“. Hodnota „Name“ je řetězec, který je v uvozovkách. YAML umí pracovat i s víceřádkovými řetězci pro lepší čitelnost.

Víceřádkové a jednořádkové řetězce

---

About: >

 Hello this is Ryan

 From Alabama and I like to

 Play soccer.

Symbol „>“ nám umožňuje napsat jeden řádek na více řádků. Celá věta je tak vlastně jedním popisem, i když je zapsaná na více řádcích.

Víceřádkové řetězce můžeme vytvořit také pomocí symbolu „|“:

About: |

 This is a multiline string

 And will be printed line wise.

Seznamy

Seznamy hrají v YAML významnou roli.

Příklad seznamu:

---

- apple

- banana

- mango

Mapování skalárních hodnot na seznamy je důležité pro většinu konfiguračních souborů. Příklad:

---

Fruits:

 Apples

 Banana

 Guava 

Pro mapování skaláru na seznam je nutné odsazení. Můžeme mít i vícenásobně vnořené seznamy, jak ukazuje tento příklad:

Automobiles:

 Car:

     Hyundai

     Volkswagen

     Ford

V tomto případě jsou auta vnořena do kategorie „Automobiles“ a jednotlivé značky do kategorie „Car“. Můžeme takto vnořovat libovolně hluboko.

Subjects:

     Engineering:

       Mechanical engineering:

         Design and manufacture

         Automobile

         Control and Design

       Civil engineering:

         Structural engineering

         Hydropower

       Arts:

         Medieval

         Modern

         Painting

YAML nabízí také symboly „&“ a „*“, které fungují jako kotvy a odkazy na kotvy, aby se zamezilo duplicitě. Jsou užitečné v konfiguračních souborech, například v Ruby on Rails, aby byly soubory YAML kratší.

Příklad:

details: &details
    name: "John"
    age: 18
profession: engineer

<< : * details

Což je ekvivalentní:

profession: engineer

name: "John"

age: 18

YAML v Pythonu

Python podporuje YAML pomocí knihoven jako ruamel a pyyaml. Pro začátek si nainstalujeme pyyaml:

pip install pyyaml

Pro tento tutoriál si vytvořte soubor details.yaml:

name: "john"

age:18

gender: male

A další soubor feed.yaml s tímto obsahem:

sports:

 football
 basketball
 cricket
 baseball

---
countries:
 Brazil
 Lithuania
 Australia
 USA

Začněme čtením souboru details.yaml:

import yaml

with open('details.yaml') as f:
    
    data = yaml.load(f, Loader=yaml.FullLoader)
    print(data)

Po spuštění souboru details.py dostaneme tento výstup:

 $ python details.py
{'name': "john", 'age': 18, 'gender': male}
import yaml

with open(r'feed.yaml') as file:
    # The FullLoader parameter handles the conversion from YAML
    # scalar values to Python the dictionary format
    fruits_list = yaml.load(file, Loader=yaml.FullLoader)

    print(fruits_list)

Zápis YAML do souborů v Pythonu

import yaml

dict_file = [{'sports' : ['hockey', 'rugby', 'tennis', 'ping pong', 'football', 'badminton']},
{'countries' : ['Jamaica', 'England', 'Nepal', 'Netherlands', 'South Africa', 'Bolivia', 'Portugal']}]

with open(r'E:data.yaml', 'w') as file: #create a new yaml file 
    data = yaml.dump(dict_file, file)

Implementace YAML v Node.js

Node.js je server-side jazyk a serializace dat je klíčová pro proces vývoje.

Pro náš tutoriál použijeme tento soubor example.yaml:

name:John

age:18

Hobbies:

 Hobby1:Football

 Hobby2:BasketBall

 Hobby3:Hockey

Job:

-System administrator

-Programmer

Pro Node.js máme k dispozici npm balíček js-yaml. Nainstalujeme ho pomocí:

npm install js-yaml

A v našem souboru pak použijeme modul js-yaml:

const yaml = require('js-yaml'); //inicializace js-yaml
const fs   = require('fs'); //inicializace filestream

try {
  const result = yaml.load(fs.readFileSync('example.yml', 'utf8'));
  console.log(result);
} catch (e) {
  console.log(e); //zachycení výjimky
}

Závěr

YAML si získává stále větší oblibu v konfiguračních souborech moderních programovacích rámců a aplikací, kde se data ukládají nebo distribuují. YAML má podobné využití jako Extensible Markup Language (XML), ale jeho syntaxe je minimální a záměrně odlišná od XML.

Soubory YAML můžeme vytvářet pro pevné datové struktury pomocí příkazů pro výpis, které zapisují data a specifické dekorace YAML. Pro ukládání různorodých a komplexních hierarchických dat je však vhodnější specializovaný generátor YAML. Jednoduché soubory YAML (například páry klíč-hodnota) lze snadno analyzovat pomocí regulárních výrazů.